Files
harbor-net/docs/product/error-contract.md
Dmitriy Petrov 9da4fef1f0
All checks were successful
Build and Deploy Gateway / build-and-push (push) Successful in 15s
Build and Deploy Gateway / deploy (push) Successful in 12s
Unify Harbor error handling across server and client
2026-07-11 20:38:41 +03:00

1.3 KiB

Harbor error contract v1

Public API failures use one envelope:

{
  "success": false,
  "error": {
    "code": "PROVIDER_UNAVAILABLE",
    "message": "Провайдер подписки временно недоступен.",
    "retryable": true,
    "correlationId": "6f1a63de-30f9-4dc5-b8ce-38d38c164fe3",
    "details": "HTTP 503"
  }
}

code, Russian user copy, HTTP status and retry policy come from src/shared/errors.js. The browser maps copy and retry behavior by code; it does not display server-provided details. Unknown failures use UNKNOWN, never expose the raw exception, and always receive a correlation reference. Server logs use the same reference and redact complete HTTP(S) URLs.

Errors are local operation results, not canonical state replacements. A failed apply keeps the previous snapshot; in particular, server existence is validated before desiredServerId is persisted. Frontend errors are shown beside subscription or connection controls. Only retryable codes expose Повторить.

This is a coordinated API change: old frontends do not understand the object-valued error field, so frontend and control plane must be deployed together. Persisted files and volumes are unchanged. Rollback is code-only and requires no data migration.