@elevasis/sdk 1.49.0 → 1.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -43,10 +43,10 @@ elevasis-sdk check
43
43
 
44
44
  **Flags:**
45
45
 
46
- | Flag | Description |
47
- | ------------------ | -------------------------------------------------- |
48
- | `--entry <path>` | Path to the entry file (default: `./src/index.ts`) |
49
- | `--skip-coverage` | Skip the skill coverage gate |
46
+ | Flag | Description |
47
+ | ----------------- | -------------------------------------------------- |
48
+ | `--entry <path>` | Path to the entry file (default: `./src/index.ts`) |
49
+ | `--skip-coverage` | Skip the skill coverage gate |
50
50
 
51
51
  **Example output (success):**
52
52
 
@@ -91,14 +91,14 @@ elevasis-sdk deploy
91
91
 
92
92
  **Flags:**
93
93
 
94
- | Flag | Description |
95
- | ------------------- | ------------------------------------------------------------ |
94
+ | Flag | Description |
95
+ | ----------------- | ------------------------------------------------------------ |
96
96
  | `--api-url <url>` | Override the API base URL (default: production) |
97
97
  | `--entry <path>` | Path to the entry file (default: `./src/index.ts`) |
98
- | `--prod` | Force production target, overriding `NODE_ENV=development` |
99
- | `--major` | Bump the major version before deploying (`1.0.0` -> `2.0.0`) |
100
- | `--minor` | Bump the minor version before deploying (`1.0.0` -> `1.1.0`) |
101
- | `--patch` | Bump the patch version before deploying (`1.0.0` -> `1.0.1`) |
98
+ | `--prod` | Force production target, overriding `NODE_ENV=development` |
99
+ | `--major` | Bump the major version before deploying (`1.0.0` -> `2.0.0`) |
100
+ | `--minor` | Bump the minor version before deploying (`1.0.0` -> `1.1.0`) |
101
+ | `--patch` | Bump the patch version before deploying (`1.0.0` -> `1.0.1`) |
102
102
 
103
103
  **Environment variables:**
104
104
 
@@ -156,13 +156,13 @@ elevasis-sdk exec <resource> --input '{...}'
156
156
 
157
157
  **Flags:**
158
158
 
159
- | Flag | Description |
160
- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
159
+ | Flag | Description |
160
+ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
161
161
  | `-i, --input <json>` | JSON input matching the resource's input schema |
162
162
  | `-f, --input-file <path>` | Read input from a JSON file instead of `--input` (avoids shell escaping). Relative paths resolve against the project root |
163
- | `--async` | Execute asynchronously, return execution ID immediately |
164
- | `--cleanup-input` | Delete the input file after a successful execution (only files under `<projectRoot>/tmp/` are eligible) |
165
- | `--prod` | Target production (overrides `NODE_ENV=development`) |
163
+ | `--async` | Execute asynchronously, return execution ID immediately |
164
+ | `--cleanup-input` | Delete the input file after a successful execution (only files under `<projectRoot>/tmp/` are eligible) |
165
+ | `--prod` | Target production (overrides `NODE_ENV=development`) |
166
166
  | `--api-url <url>` | Override the API base URL |
167
167
 
168
168
  `exec` does not declare a `--json` flag -- output is always the formatted display shown below.
@@ -218,9 +218,9 @@ elevasis-sdk resources
218
218
 
219
219
  **Flags:**
220
220
 
221
- | Flag | Description |
222
- | ------------------- | ------------------------- |
223
- | `--json` | Output raw JSON |
221
+ | Flag | Description |
222
+ | ----------------- | ------------------------- |
223
+ | `--json` | Output raw JSON |
224
224
  | `--api-url <url>` | Override the API base URL |
225
225
 
226
226
  **Example output:**
@@ -254,11 +254,11 @@ elevasis-sdk executions [resource]
254
254
 
255
255
  **Flags:**
256
256
 
257
- | Flag | Description |
258
- | --------------------- | --------------------------------------------------------------- |
257
+ | Flag | Description |
258
+ | ------------------- | --------------------------------------------------------------- |
259
259
  | `--limit <n>` | Maximum number of executions to return (default: 50) |
260
260
  | `--status <status>` | Filter by status: `running`, `completed`, `failed`, `cancelled` |
261
- | `--json` | Output raw JSON |
261
+ | `--json` | Output raw JSON |
262
262
  | `--api-url <url>` | Override the API base URL |
263
263
 
264
264
  **Example:**
@@ -296,13 +296,13 @@ elevasis-sdk execution <resource> <id>
296
296
 
297
297
  **Flags:**
298
298
 
299
- | Flag | Description |
300
- | ------------------- | ---------------------------------------------------- |
301
- | `--logs-only` | Show only execution logs |
302
- | `--input` | Force the Input section to print |
303
- | `--result` | Force the Result section to print |
304
- | `--prod` | Target production (overrides `NODE_ENV=development`) |
305
- | `--json` | Output raw JSON response |
299
+ | Flag | Description |
300
+ | ----------------- | ---------------------------------------------------- |
301
+ | `--logs-only` | Show only execution logs |
302
+ | `--input` | Force the Input section to print |
303
+ | `--result` | Force the Result section to print |
304
+ | `--prod` | Target production (overrides `NODE_ENV=development`) |
305
+ | `--json` | Output raw JSON response |
306
306
  | `--api-url <url>` | Override the API base URL |
307
307
 
308
308
  **Example:**
@@ -361,11 +361,11 @@ elevasis-sdk execution:cancel <resourceId> <executionId>
361
361
 
362
362
  **Flags:**
363
363
 
364
- | Flag | Description |
365
- | ------------------- | ---------------------------------------------------- |
366
- | `--prod` | Target production (overrides `NODE_ENV=development`) |
364
+ | Flag | Description |
365
+ | ----------------- | ---------------------------------------------------- |
366
+ | `--prod` | Target production (overrides `NODE_ENV=development`) |
367
367
  | `--api-url <url>` | Override the API base URL |
368
- | `--json` | Output raw JSON response |
368
+ | `--json` | Output raw JSON response |
369
369
 
370
370
  **Example:**
371
371
 
@@ -403,13 +403,13 @@ elevasis-sdk executions:delete <resourceId> [--force]
403
403
 
404
404
  **Flags:**
405
405
 
406
- | Flag | Description |
407
- | ------------------------------ | ------------------------------------------------------------ |
408
- | `--prod` | Target production (overrides `NODE_ENV=development`) |
406
+ | Flag | Description |
407
+ | ---------------------------- | ------------------------------------------------------------ |
408
+ | `--prod` | Target production (overrides `NODE_ENV=development`) |
409
409
  | `--api-url <url>` | Override the API base URL |
410
410
  | `--resource-status <status>` | Only delete runs from this deployment lane (`dev` | `prod`) |
411
- | `--force` | Skip the typed confirmation prompt |
412
- | `--json` | Output raw JSON response |
411
+ | `--force` | Skip the typed confirmation prompt |
412
+ | `--json` | Output raw JSON response |
413
413
 
414
414
  **Example:**
415
415
 
@@ -438,10 +438,10 @@ elevasis-sdk deployments
438
438
 
439
439
  **Flags:**
440
440
 
441
- | Flag | Description |
442
- | ------------------- | ---------------------------------------------------- |
443
- | `--prod` | Target production (overrides `NODE_ENV=development`) |
444
- | `--json` | Output raw JSON |
441
+ | Flag | Description |
442
+ | ----------------- | ---------------------------------------------------- |
443
+ | `--prod` | Target production (overrides `NODE_ENV=development`) |
444
+ | `--json` | Output raw JSON |
445
445
  | `--api-url <url>` | Override the API base URL |
446
446
 
447
447
  **Example output:**
@@ -480,9 +480,9 @@ elevasis-sdk describe <resource>
480
480
 
481
481
  **Flags:**
482
482
 
483
- | Flag | Description |
484
- | ------------------- | ------------------------- |
485
- | `--json` | Output raw JSON response |
483
+ | Flag | Description |
484
+ | ----------------- | ------------------------- |
485
+ | `--json` | Output raw JSON response |
486
486
  | `--api-url <url>` | Override the API base URL |
487
487
 
488
488
  **Example:**
@@ -520,7 +520,7 @@ Manage credentials for your organization. Credentials store API keys and secrets
520
520
 
521
521
  ```
522
522
  elevasis-sdk creds list
523
- elevasis-sdk creds create --name <name> --type <type> [--value <json>]
523
+ elevasis-sdk creds create --name <name> --type <type> --value <json>
524
524
  elevasis-sdk creds update <name> --value <json>
525
525
  elevasis-sdk creds rename <name> --to <newName>
526
526
  elevasis-sdk creds delete <name> [--force]
@@ -536,23 +536,36 @@ elevasis-sdk creds delete <name> [--force]
536
536
 
537
537
  **Flags:**
538
538
 
539
- | Flag | Description |
540
- | ------------------- | ------------------------------------------------------------------------------- |
539
+ | Flag | Description |
540
+ | ----------------- | ------------------------------------------------------------------------------- |
541
541
  | `--name <name>` | Credential name: lowercase letters, digits, and hyphens only (create: required) |
542
- | `--type <type>` | Credential type: `api-key` or `webhook-secret` (create: required) |
542
+ | `--type <type>` | Credential type (create: required). See the table below |
543
543
  | `--value <json>` | Credential value as a JSON string (create and update: required) |
544
544
  | `--to <newName>` | New name (rename: required) |
545
- | `--force` | Skip confirmation prompt (delete) |
546
- | `--prod` | Target production (overrides `NODE_ENV=development`) |
545
+ | `--force` | Skip confirmation prompt (delete) |
546
+ | `--prod` | Target production (overrides `NODE_ENV=development`) |
547
547
  | `--api-url <url>` | Override the API base URL |
548
548
 
549
- OAuth credentials cannot be created through the CLI -- they require the Command Center's browser OAuth flow. See [Command Center](deployment/command-center.mdx#credentials).
549
+ **Keep long-lived secrets out of `--value`.** A value passed literally survives in shell history and in the transcript of whatever ran the command. Write the JSON to a file and pass `--value @json:tmp/credential.json` instead -- the `@json:` prefix works on any flag of any `elevasis-sdk` command, resolves relative paths against the project root, and expands inside the CLI process, so the secret never appears in the invocation. Delete the file afterwards.
550
+
551
+ **Credential types.** The accepted values are the platform's own `CredentialTypeSchema`, minus `oauth`:
552
+
553
+ | Type | Shape |
554
+ | ---------------- | -------------------------------------------------- |
555
+ | `api-key` | Single-field API key |
556
+ | `api-key-secret` | Key and secret pair |
557
+ | `webhook-secret` | Webhook signing secret |
558
+ | `clickup` | ClickUp personal token |
559
+ | `instagram` | `{ accessToken, igUserId }` for Content Publishing |
560
+
561
+ OAuth credentials cannot be created through the CLI -- they need a `provider`, which the external create route does not accept, and they require the Command Center's browser OAuth flow. See [Command Center](deployment/command-center.mdx#credentials).
550
562
 
551
563
  **Examples:**
552
564
 
553
565
  ```bash
554
566
  elevasis-sdk creds list
555
567
  elevasis-sdk creds create --name openai-key --type api-key --value '{"key":"sk-proj-***"}'
568
+ elevasis-sdk creds create --name my-instagram --type instagram --value @json:tmp/ig.json --prod
556
569
  elevasis-sdk creds update openai-key --value '{"key":"sk-proj-new"}'
557
570
  elevasis-sdk creds rename openai-key --to openai-prod-key
558
571
  elevasis-sdk creds delete openai-prod-key --force
@@ -590,11 +603,11 @@ elevasis-sdk rename <old-id> --to <new-id> [--execute] [--prod]
590
603
 
591
604
  **Flags:**
592
605
 
593
- | Flag | Description |
594
- | ------------------- | --------------------------------------- |
606
+ | Flag | Description |
607
+ | ----------------- | --------------------------------------- |
595
608
  | `--to <new-id>` | Required. The new resource ID |
596
- | `--execute` | Perform the rename (default is dry-run) |
597
- | `--prod` | Target the production environment |
609
+ | `--execute` | Perform the rename (default is dry-run) |
610
+ | `--prod` | Target the production environment |
598
611
  | `--api-url <url>` | Override the API base URL |
599
612
 
600
613
  **Example (dry-run):**
@@ -644,11 +657,12 @@ elevasis-sdk cli [domain] [--format markdown|json]
644
657
  - When `domain` is omitted, all domains are listed
645
658
  - `--format json` returns a structured array suitable for programmatic use; `--format markdown` (default) renders a human-readable table
646
659
  - The runtime catalog is always up to date with what is actually registered -- it does not parse TypeScript source
660
+ - This is the only catalog. `elevasis-sdk --help` no longer carries a hand-maintained `Commands:` list in `program.description()`; it prints a short pointer to `elevasis-sdk cli` plus Commander's own list of registered commands, so there is nothing left to drift
647
661
 
648
662
  **Flags:**
649
663
 
650
- | Flag | Description |
651
- | --------------------- | ----------------------------------------------------------- |
664
+ | Flag | Description |
665
+ | ------------------- | ----------------------------------------------------------- |
652
666
  | `--domain <domain>` | Filter output to one domain (alternative to positional arg) |
653
667
  | `--format <format>` | Output format: `markdown` (default) or `json` |
654
668
 
@@ -701,7 +715,9 @@ Runs five sequential checks and reports `[OK]` / `[FAIL]` / `[WARN]` for each. E
701
715
  2. `.env` found at project root
702
716
  3. `ELEVASIS_PLATFORM_KEY` present and non-empty
703
717
  4. API reachable and key valid -- calls `GET /api/external/health`
704
- 5. Systems roster -- every platform-cataloged System Interface, checked against the deployed readiness snapshot. Reuses the key and connectivity Check 4 already proved. A System the project has not adopted renders `[WARN]`, never `[FAIL]` -- partial adoption is the designed opt-out. `[FAIL]` is reserved for adopted-but-broken Systems.
718
+ 5. Systems roster -- every platform-cataloged System Interface, checked against the deployed readiness snapshot. Reuses the key and connectivity Check 4 already proved. A System the project has not adopted renders `[WARN]`, never `[FAIL]` -- partial adoption is the designed opt-out. `[FAIL]` is reserved for adopted-but-broken Systems: a stale deployed snapshot, an unsatisfied `readinessContract`, or a malformed declaration.
719
+
720
+ The roster is built from the platform catalog, not from your own declarations, so a System you have **not** adopted still gets a row. A System you declared locally that is missing from the deployed snapshot is treated as drift and renders `[FAIL]`, not `[WARN]`. If the API cannot be reached, the roster renders a single `[WARN]` line and leaves Checks 1-4 with their own results. `--verbose` prints each row's issue codes and messages.
705
721
 
706
722
  **Flags:**
707
723
 
@@ -720,25 +736,31 @@ Running Elevasis SDK doctor checks...
720
736
  [OK] API key: Set (length: 56)
721
737
  [OK] API: Reachable. Workspace: Acme Corp (ws_abc123)
722
738
  [WARN] SDK compat: server minSdkVersion is 1.25.0; check is advisory in v1.
723
- [OK] Systems: platform.projects/delivery: ready
724
- [WARN] Systems: sales.crm/pipeline: not adopted
739
+ [OK] Systems: sales.lead-gen/api: ready
740
+ [OK] Systems: sales.crm/api: ready
741
+ [OK] Systems: sales.lead-gen/crm-handoff: ready
742
+ [WARN] Systems: content/api: not adopted
725
743
 
726
744
  All checks passed. Your Elevasis project is correctly configured.
727
745
  ```
728
746
 
747
+ A `[WARN]` roster row never changes the exit code. `doctor` still exits `0` with an unadopted System in the list.
748
+
729
749
  **Implementation:** `packages/sdk/src/cli/commands/doctor.ts`
730
750
 
751
+ **Related:** [Common Errors -- System Readiness Errors](troubleshooting.mdx#system-readiness-errors-503) for what a `503` refusal from one of these Systems looks like at the terminal and how to clear it.
752
+
731
753
  ---
732
754
 
733
755
  ## Global Flags
734
756
 
735
757
  These flags are accepted by all commands:
736
758
 
737
- | Flag | Description |
738
- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
759
+ | Flag | Description |
760
+ | ----------------- | -------------------------------------------------------------------------------------------------------------------------------- |
739
761
  | `--api-url <url>` | Override the API base URL. Priority: `--api-url` flag > `--prod` flag > `ELEVASIS_API_URL` env var > `NODE_ENV`-based default |
740
- | `--json` | Output raw JSON (available on most commands) |
741
- | `--prod` | Target production, overriding `NODE_ENV=development` |
762
+ | `--json` | Output raw JSON (available on most commands) |
763
+ | `--prod` | Target production, overriding `NODE_ENV=development` |
742
764
 
743
765
  **API base URL resolution:**
744
766
 
@@ -82,13 +82,14 @@ Each deploy creates a new deployment record. The previous active deployment is a
82
82
 
83
83
  The CLI validates your resources before bundling. Validation uses the same `ResourceRegistry` as the platform, so errors caught locally are the same errors that would be caught at deploy time.
84
84
 
85
- **Validation checks:**
85
+ **Validation checks that abort the deploy:**
86
86
 
87
87
  - Duplicate `resourceId` within your organization
88
88
  - Invalid model configuration (temperature and token bounds out of range)
89
89
  - `ExecutionInterface` form fields not matching `inputSchema`
90
- - Broken workflow step chains (`next` referencing a step that does not exist)
91
90
  - Relationship declarations referencing resources that do not exist
91
+ - Structural failures in your `organizationModel`
92
+ - A System with API-backed resources but no `apiInterface` declaration
92
93
 
93
94
  **Validation failure output:**
94
95
 
@@ -100,6 +101,18 @@ The CLI validates your resources before bundling. Validation uses the same `Reso
100
101
  Deploy aborted.
101
102
  ```
102
103
 
104
+ Every issue is reported in one run. Governance and System Interface readiness failures no longer stop at the first problem, so thirty issues cost one deploy round trip rather than thirty.
105
+
106
+ **Checks that warn without aborting:**
107
+
108
+ Workflow-graph problems -- a `next` target that does not exist, an `entryPoint` that names no step, a cycle, or a step unreachable from the entry point -- are reported as warnings so an existing project carrying a latent invalid graph is not blocked on its next deploy. **They still throw at execution**, when the workflow is constructed. Treat a graph warning as a defect with a deadline, not as advisory.
109
+
110
+ The platform runs its own checks on the server after upload and reports these as warnings too: the `apiInterface` conformance check, agent grammar and token-floor validation, and a cross-check of every declared `IntegrationDefinition.credentialName` against the credentials your organization actually holds. A missing credential is a warning at deploy and a `credentials_missing` failure at execution, so create it before the resource runs. Only credential names are checked; values never leave the command center.
111
+
112
+ **Downgrading checks temporarily:**
113
+
114
+ `ELEVASIS_RESOURCE_VALIDATOR=warn-only` downgrades resource governance, contract-ref resolution, System Interface readiness, and the agent grammar and cheap-assertion checks to warnings. Every downgraded check still runs and still prints its issue; it never bypasses the structural schema parse or the conformance gate.
115
+
103
116
  Run `elevasis-sdk check` at any time to validate without deploying.
104
117
 
105
118
  ---
@@ -121,13 +134,16 @@ The `ElevasConfig` type is exported from `@elevasis/sdk`. You can leave the conf
121
134
 
122
135
  ## Environment Variables
123
136
 
124
- | Variable | Required | Description |
125
- | ----------------------- | -------- | --------------------------------------------------------------------------- |
126
- | `ELEVASIS_PLATFORM_KEY` | Yes | Your `sk_...` API key. Used for authentication and organization resolution. |
127
- | `ELEVASIS_API_URL` | No | Override the API base URL. Useful for pointing at a staging environment. |
137
+ | Variable | Required | Description |
138
+ | --------------------------- | -------- | ----------------------------------------------------------------------------------- |
139
+ | `ELEVASIS_PLATFORM_KEY` | Yes | Your `sk_...` API key. Used for authentication and organization resolution. |
140
+ | `ELEVASIS_API_URL` | No | Override the API base URL. Useful for pointing at a staging environment. |
141
+ | `ELEVASIS_PLATFORM_KEY_DEV` | No | Key used instead when the request targets a local API. Falls back to the key above. |
128
142
 
129
143
  The CLI also accepts a `--api-url` flag on every command, which takes priority over `ELEVASIS_API_URL`.
130
144
 
145
+ **Which key a request uses is derived from the URL it is sent to**, not from `--prod` or `NODE_ENV` read separately. Both the authentication step and the bundle upload go through the same resolver, so pointing `--api-url` at production while `NODE_ENV=development` is set can no longer authenticate with one key and upload with the other.
146
+
131
147
  **API URL resolution order:**
132
148
 
133
149
  1. `--api-url` flag (highest priority)
@@ -289,3 +305,4 @@ Dashboard appears before Business in the primary sidebar. Business is a navigati
289
305
  - [Command Center](command-center.mdx) - Resource graph, relationships, node types, and post-deployment UI reference
290
306
  - [Execution Reference](execution-reference.mdx) - REST endpoints for executing resources, managing deployments, and React UI components for custom Run dialogs
291
307
  - [Platform Adapters](../platform-tools/adapters-platform.mdx) - `approval.create()` and the full platform service adapter catalog
308
+ - [Common Errors](../troubleshooting.mdx#deploy-errors-elevasis-sdk-deploy) - Deploy failure catalog, warning meanings, and System readiness refusals
@@ -23,4 +23,4 @@ Platform adapters are singletons — import them directly, no credential require
23
23
  | Execution | `execution` | `trigger`, `triggerAsync` | Execution — trigger other workflows or agents within the same organization. |
24
24
  | Email | `email` | `send` | Email — send platform emails (from notifications@elevasis.io) to organization members. |
25
25
  | Artifacts | `artifacts` | `listArtifacts`, `createArtifact`, `getActive` | Artifacts — org-scoped governing-document store, keyed by owner and kind, for acquisition's audits, proposals, and ICP docs. |
26
- | Content | `content` | `createItem`, `getItem`, `listItems`, `updateItem`, `addItemSourceAsset`, `removeItemSourceAsset`, `reorderItemSourceAssets`, `updateItemSourceAsset`, `createAttempt`, `listAttempts`, `updateAttempt`, `createSourceAsset`, `getSourceAsset`, `listSourceAssets`, `updateSourceAsset`, `getDistribution`, `listDistributions`, `createDistribution`, `updateDistribution` | Content — create, read, and update content_items/content_item_attempts/content_distributions/content_source_assets rows for the content pipeline. |
26
+ | Content | `content` | `createItem`, `getItem`, `listItems`, `updateItem`, `addItemSourceAsset`, `removeItemSourceAsset`, `reorderItemSourceAssets`, `updateItemSourceAsset`, `createAttempt`, `listAttempts`, `updateAttempt`, `createSourceAsset`, `getSourceAsset`, `listSourceAssets`, `updateSourceAsset`, `getDistribution`, `listDistributions`, `createDistribution`, `updateDistribution`, `appendDistributionMetrics`, `listDistributionMetrics` | Content — create, read, and update content_items/content_item_attempts/content_distributions/content_source_assets rows for the content pipeline. |
@@ -38,6 +38,42 @@ This is the static SDK-level error catalog. Check `.claude/memory/errors/` first
38
38
 
39
39
  ---
40
40
 
41
+ ## System Readiness Errors (503)
42
+
43
+ ### API request refused (503): `<system>`/`<interface>` is not ready
44
+
45
+ **Message:** starts with `API request refused (503)` and continues `This IS the API rejecting the request -- it is not a gateway hiccup, and re-running it will not help.`
46
+
47
+ **Cause:** The route you called is gated on a System Interface, and your organization's deployed Organization Model has not satisfied it. This is the API deliberately refusing, not a transport fault -- retrying will not help.
48
+
49
+ **Fix:** Read the `Issues:` block in the message. Those entries are the API's own explanation and name the specific missing thing. The guidance line above them tells you the general shape of the fix:
50
+
51
+ - **The System has not been adopted** -- declare it in `core/config/organization-model/systems.ts` with an `apiInterface` block, then deploy. Omitting the block entirely is the supported opt-out; an empty `apiInterface.resourceIds` array is not and will throw.
52
+ - **The interface is declared but disabled** -- set its lifecycle back to active and redeploy.
53
+ - **The `readinessContract` is unsatisfied** -- the issues name the missing `requiredObjects` or `requiredCatalogs` refs. Add them and redeploy.
54
+ - **A cross-System handoff is not ready** -- check the counterpart System as well as the one named.
55
+ - **The deployed snapshot is missing or stale** -- run `elevasis-sdk deploy`. The message already carries this instruction.
56
+ - **The stored snapshot could not be read** -- deploy again first. No field of your declaration is known to be wrong.
57
+
58
+ Then run `elevasis-sdk doctor` to see what else is not ready. Its Systems roster checks every platform-cataloged System, including ones you have not adopted.
59
+
60
+ ### This CLI does not recognize readiness code `{CODE}`
61
+
62
+ **Cause:** The API returned a readiness family your installed `@elevasis/sdk` predates. Tenants run a published SDK that lags the deployed API, so this is expected after a platform release and not a defect.
63
+
64
+ **Fix:**
65
+
66
+ 1. Read the `Issues:` block -- it is family-independent and remains the authoritative part of the message
67
+ 2. Run `pnpm update @elevasis/sdk` and re-run the command for the full guidance
68
+
69
+ ### 503 with "work may still be running server-side"
70
+
71
+ **Cause:** This is the gateway message, not the readiness message. It means a proxy or load balancer returned the `503` with no readiness body -- a genuine transport fault.
72
+
73
+ **Fix:** Retry. Unlike a readiness refusal, this class is transient and the request may have reached the API.
74
+
75
+ ---
76
+
41
77
  ## Validation Errors (elevasis-sdk check)
42
78
 
43
79
  ### Duplicate resource ID
@@ -64,6 +100,41 @@ This is the static SDK-level error catalog. Check `.claude/memory/errors/` first
64
100
 
65
101
  ---
66
102
 
103
+ ## Deploy Errors (elevasis-sdk deploy)
104
+
105
+ ### ORGANIZATION_MODEL_MISSING (400)
106
+
107
+ **Cause:** The deploy carried no organization model, so the platform had nothing to persist as a snapshot.
108
+
109
+ **Fix:** Export an `organizationModel` from your deployment spec and deploy again. This is a hard failure by design -- a deploy without a model used to report success, write no snapshot, and then refuse every subsequent API request with a readiness `503`.
110
+
111
+ ### `sdkVersion` is required (400)
112
+
113
+ **Cause:** The multipart `metadata` part failed schema validation before the deploy pipeline started. `sdkVersion` is the only required field.
114
+
115
+ **Fix:** Deploy through `elevasis-sdk deploy`, which always sends it. A hand-rolled `POST /api/external/deploy` must include it.
116
+
117
+ ### Deploy succeeded but warnings were printed
118
+
119
+ Deploy warnings never block the deploy. Each one names something that will fail later if left alone:
120
+
121
+ - **Workflow graph warnings** -- a dangling `next` target, a missing `entryPoint`, a cycle, or a step unreachable from the entry point. These are warnings at deploy so an existing project carrying a latent invalid graph is not blocked, but the same checks **throw at execution** when the workflow is constructed. Fix them before the workflow next runs.
122
+ - **Missing credential** -- an `IntegrationDefinition.credentialName` you declared has no matching credential in your organization. Create it in the command center; otherwise the first execution fails with a `credentials_missing` tooling error. Only credential names are checked and logged, never values.
123
+ - **Missing `apiInterface` declaration** -- a System with API-backed resources has no `apiInterface` block. Run `elevasis-sdk om:scaffold:fill` for the affected system path.
124
+ - **Unresolvable contract refs** -- contract refs are declared but no `contractRegistry` is exported from your entry.
125
+
126
+ ### Validation reported only one error, but there are more
127
+
128
+ Governance and System Interface readiness failures now report **every** issue in one deploy, not just the first. If you see a single issue, that is the whole list. Set `ELEVASIS_RESOURCE_VALIDATOR=warn-only` to downgrade governance, contract-ref resolution, readiness, and the agent grammar checks to warnings so a deploy can proceed while you work through them -- it never bypasses the structural schema parse or the OM conformance gate.
129
+
130
+ ### The deploy authenticated but the upload was rejected
131
+
132
+ **Cause:** Historically the auth step and the upload step resolved the API key two different ways, so pointing `--api-url` at production with `NODE_ENV=development` set authenticated with one key and uploaded with the other.
133
+
134
+ **Fix:** Update `@elevasis/sdk`. Both steps now derive the key from the URL the request is actually sent to. If you are pinning `NODE_ENV=development` and targeting production, set `ELEVASIS_PLATFORM_KEY` to the production key and use `--prod` or `--api-url`.
135
+
136
+ ---
137
+
67
138
  ## Schema Validation Errors
68
139
 
69
140
  ### Schema validation failed (input)
@@ -219,4 +290,4 @@ Status values: `Resolved` (fixed this session), `Recurring` (seen 2+ times), `Pr
219
290
 
220
291
  ---
221
292
 
222
- **Last Updated:** 2026-02-26
293
+ **Last Updated:** 2026-08-20