@openwop/spec-artifacts 2.44.4 → 2.44.6

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.
Files changed (48) hide show
  1. package/CORPUS-STAMP.json +49 -47
  2. package/api/seams-v2.yaml +1 -1
  3. package/api/v2/asyncapi.yaml +1 -1
  4. package/api/v2/openapi.yaml +31 -122
  5. package/package.json +1 -1
  6. package/schemas/v2/agent-ref.schema.json +2 -3
  7. package/schemas/v2/budget-policy.schema.json +2 -3
  8. package/schemas/v2/capabilities.schema.json +42 -38
  9. package/schemas/v2/debug-bundle.schema.json +2 -2
  10. package/schemas/v2/error-envelope.schema.json +282 -4
  11. package/schemas/v2/node-pack-manifest.schema.json +2 -2
  12. package/schemas/v2/prompt-ref.schema.json +2 -3
  13. package/schemas/v2/prompt-template.schema.json +3 -3
  14. package/schemas/v2/run-event-payloads.schema.json +5 -5
  15. package/spec/v1/alias-detectors.json +25 -1
  16. package/spec/v1/core-standard-manifest.json +2 -2
  17. package/spec/v1/deprecations.json +89 -1
  18. package/spec/v1/gaps.json +42 -8
  19. package/spec/v1/migrations.json +57 -1
  20. package/spec/v2/core/artifact-type-packs.md +5 -1
  21. package/spec/v2/core/capabilities.md +20 -22
  22. package/spec/v2/core/conformance.md +24 -7
  23. package/spec/v2/core/errors.md +17 -119
  24. package/spec/v2/core/events.md +7 -7
  25. package/spec/v2/core/execution.md +56 -16
  26. package/spec/v2/core/host-services.md +57 -58
  27. package/spec/v2/core/i18n.md +10 -10
  28. package/spec/v2/core/idempotency.md +3 -3
  29. package/spec/v2/core/identity.md +11 -9
  30. package/spec/v2/core/interop.md +6 -8
  31. package/spec/v2/core/interrupt.md +8 -8
  32. package/spec/v2/core/oauth.md +4 -4
  33. package/spec/v2/core/packs.md +11 -5
  34. package/spec/v2/core/persistence.md +11 -13
  35. package/spec/v2/core/portability.md +4 -4
  36. package/spec/v2/core/replay.md +11 -13
  37. package/spec/v2/core/runs.md +20 -7
  38. package/spec/v2/core/security-defaults.md +0 -2
  39. package/spec/v2/core/storage.md +18 -20
  40. package/spec/v2/core/versioning.md +4 -9
  41. package/spec/v2/core/webhooks.md +13 -8
  42. package/spec/v2/declaration.json +3 -3
  43. package/spec/v2/errors.json +206 -2
  44. package/spec/v2/facets/agents.schema.json +367 -0
  45. package/spec/v2/facets/aiProviders.schema.json +2 -2
  46. package/spec/v2/generated/error-codes.md +130 -0
  47. package/spec/v2/release.json +2 -2
  48. package/spec/v2/surface-baseline.json +38 -2
@@ -89,7 +89,7 @@ Best-effort delivery is not a conforming mode. A `3xx` response is a delivery fa
89
89
 
90
90
  ### Delivery isolation
91
91
 
92
- One subscription's slow or dead receiver MUST NOT delay another subscription's deliveries (invariant `webhook-delivery-isolation`). The rule is about when an attempt starts, not how soon after an event it must start, and it names no mechanism: a lane per subscription, a concurrent pool or asynchronous I/O all meet it; a sequential loop over a batch does not.
92
+ One subscription's slow or dead receiver MUST NOT delay another subscription's deliveries (invariant `webhook-delivery-isolation`). The rule constrains when an attempt starts, not how soon after its event, and names no mechanism; a sequential loop over a batch does not meet it.
93
93
 
94
94
  A host MAY bound concurrent attempts beyond the floor of 8, and SHOULD NOT let one tenant's unanswered attempts occupy capacity another tenant's deliveries need.
95
95
 
@@ -99,10 +99,10 @@ An attempt whose request the host had begun sending before `unregisterWebhook` a
99
99
 
100
100
  ### Dead letters
101
101
 
102
- This sink is the delivery sink; the `deadLetter` family is the run sink ([runs.md](runs.md) §Dead letters) and is a different thing.
102
+ This is the delivery sink, not the run sink of the `deadLetter` family ([runs.md](runs.md) §Dead letters).
103
103
 
104
104
  - A host advertising `webhooks.deadLetter` MUST serve `GET /webhooks/{webhookId}/dead-letters`.
105
- - A record MUST NOT carry the delivered body, the delivery headers, or the subscription secret — a dead-letter read names a delivery, it does not replay one.
105
+ - A record names a delivery and MUST NOT carry the delivered body, the delivery headers, or the subscription secret.
106
106
  - The read belongs to a live subscription: after `unregisterWebhook` answers `204`, `GET /webhooks/{webhookId}/dead-letters` for that id MUST answer `404 not_found`, exactly as for a same-tenant id the host never minted. The host MAY discard that subscription's records at the unregister.
107
107
  - `expiresAt` bounds a record's retention only while its subscription exists.
108
108
 
@@ -124,13 +124,20 @@ At delivery time a host MUST re-resolve the hostname, validate every resolved ad
124
124
 
125
125
  ## Inbound triggers
126
126
 
127
- A host advertising `triggerBridge` runs inbound work through subscriptions (`schemas/v2/trigger-subscription.schema.json`) that are `active`, `paused` (not delivering; a schedule skips ticks), `failed`, or `dead-lettered` (deliveries in the `deadLetter` sink); `subscriptionStates` lists those it implements. On an `active` subscription the host:
127
+ A host advertising `triggerBridge` runs inbound work through subscriptions (`schemas/v2/trigger-subscription.schema.json`), and `subscriptionStates` lists the states it implements:
128
+
129
+ - `active`;
130
+ - `paused` — not delivering; a schedule skips ticks;
131
+ - `failed`;
132
+ - `dead-lettered` — deliveries are in the `deadLetter` sink.
133
+
134
+ On an `active` subscription the host:
128
135
 
129
136
  - with `dedup`, MUST answer a `dedupKey` repeated within retention (at least 24 hours) with the prior `runId`;
130
- - retries per `retryPolicy`, then dead-letters, starting no run;
137
+ - retries a failed delivery per `retryPolicy`, then dead-letters it without starting a run;
131
138
  - MUST set the delivery id as `causationId` on `run.started`.
132
139
 
133
- A source in `triggerBridge.sources` MUST run through these states and emit `trigger.subscription-state-changed` and `trigger.delivery-attempted`, which MUST NOT carry inbound content or credentials (`schemas/v2/run-event-payloads.schema.json`).
140
+ A source in `triggerBridge.sources` MUST move through these states and emit `trigger.subscription-state-changed` and `trigger.delivery-attempted`. These events MUST NOT carry inbound content or credentials (`schemas/v2/run-event-payloads.schema.json`).
134
141
 
135
142
  With `triggerBridge.ingestion`, each `externalSources` entry MUST turn an external event into a `TriggerEvent` (`schemas/v2/trigger-event.schema.json`, whose rules bind) and start a run. The host:
136
143
 
@@ -140,6 +147,4 @@ With `triggerBridge.ingestion`, each `externalSources` entry MUST turn an extern
140
147
  - MUST refuse private, link-local and loopback targets and cap the body on any ingestion fetch, and never hand the run a URL (invariant `trigger-ingestion-ssrf`);
141
148
  - SHOULD key `stream` by topic, partition and offset, `change` by table and changelog id; a key MUST survive broker redelivery.
142
149
 
143
- See also: events.md, replay.md, persistence.md, security-defaults.md.
144
-
145
150
  *Sources: RFCs 0053, 0083, 0099, 0127, 0165, 0171, 0173, 0176, 0188, 0196, 0201, 0215, 0217.*
@@ -717,7 +717,7 @@
717
717
  {
718
718
  "key": "agents",
719
719
  "kind": "family",
720
- "normativeText": ["spec/v1/multi-agent-execution.md", "spec/v1/agent-memory.md", "spec/v1/agent-runtime.md", "spec/v1/agent-org-chart.md", "spec/v1/agent-evaluation.md", "spec/v1/capabilities.md"],
720
+ "normativeText": ["spec/v2/core/execution.md", "spec/v2/facets/agents.schema.json", "schemas/v2/run-event-payloads.schema.json"],
721
721
  "anchor": "core",
722
722
  "section": "core/capabilities.md#agents",
723
723
  "peerDependencyId": "agents",
@@ -1214,7 +1214,7 @@
1214
1214
  {
1215
1215
  "key": "budget",
1216
1216
  "kind": "family",
1217
- "normativeText": ["spec/v1/budget-policy.md"],
1217
+ "normativeText": ["spec/v2/core/runs.md", "schemas/v2/budget-policy.schema.json"],
1218
1218
  "anchor": "core",
1219
1219
  "section": "core/capabilities.md#budget",
1220
1220
  "peerDependencyId": "budget",
@@ -1582,7 +1582,7 @@
1582
1582
  {
1583
1583
  "key": "production",
1584
1584
  "kind": "family",
1585
- "normativeText": ["spec/v1/production-profile.md"],
1585
+ "normativeText": ["spec/v2/core/conformance.md"],
1586
1586
  "anchor": "core",
1587
1587
  "section": "core/capabilities.md#production",
1588
1588
  "peerDependencyId": "production",
@@ -1031,13 +1031,13 @@
1031
1031
  },
1032
1032
  {
1033
1033
  "code": "token_budget_exceeded",
1034
- "meaning": "The run could not stay within its token budget.",
1034
+ "meaning": "A memory distillation could not be completed within its effective token budget, so the run failed and wrote no partial archive.",
1035
1035
  "httpStatus": 422,
1036
1036
  "statusSource": "v1 convention",
1037
1037
  "retriable": false,
1038
1038
  "details": null,
1039
1039
  "since": "1.0",
1040
- "source": "spec/v1/rest-endpoints.md §Error response shape"
1040
+ "source": "spec/v1/rest-endpoints.md §Error response shape; meaning narrowed to v1's (RFC 0062) by RFC 0228 §E"
1041
1041
  },
1042
1042
  {
1043
1043
  "code": "client_version_unsupported",
@@ -1186,6 +1186,210 @@
1186
1186
  "details": null,
1187
1187
  "since": "1.0",
1188
1188
  "source": "spec/v1/ai-envelope.md §\"Schema version advertisement\" (emitted schemaVersion above the advertised floor)"
1189
+ },
1190
+ {
1191
+ "code": "storage_limit_exceeded",
1192
+ "meaning": "A storage call was refused because it would exceed an advertised limit or the tenant's quota.",
1193
+ "httpStatus": 422,
1194
+ "statusSource": "v2 decision",
1195
+ "retriable": false,
1196
+ "details": {
1197
+ "type": "object",
1198
+ "required": [
1199
+ "service",
1200
+ "limit"
1201
+ ],
1202
+ "properties": {
1203
+ "service": {
1204
+ "type": "string",
1205
+ "minLength": 1,
1206
+ "description": "The host-service family key (`fs`, `kvStorage`, `secrets`, `queueBus`, …)."
1207
+ },
1208
+ "limit": {
1209
+ "type": "string",
1210
+ "minLength": 1,
1211
+ "description": "The advertised field that was exceeded (`maxValueBytes`, `maxTtlSeconds`, `maxRowsPerTable`, …), or `quota`."
1212
+ }
1213
+ },
1214
+ "additionalProperties": true
1215
+ },
1216
+ "since": "2.45",
1217
+ "source": "RFC 0228 §C (replaces v1's nine per-service size, TTL, row and quota codes)"
1218
+ },
1219
+ {
1220
+ "code": "egress_denied",
1221
+ "meaning": "The host refused an outbound request a pack asked it to make: the address guard or the egress policy denied it.",
1222
+ "httpStatus": 403,
1223
+ "statusSource": "v2 decision",
1224
+ "retriable": false,
1225
+ "details": {
1226
+ "type": "object",
1227
+ "required": [
1228
+ "reason"
1229
+ ],
1230
+ "properties": {
1231
+ "reason": {
1232
+ "enum": [
1233
+ "out-of-audience",
1234
+ "expired",
1235
+ "ssrf-blocked",
1236
+ "provenance-unevaluable",
1237
+ "scope-denied",
1238
+ "policy-denied"
1239
+ ],
1240
+ "description": "The `egress.decided` reason, from its closed set minus `ok`."
1241
+ }
1242
+ },
1243
+ "additionalProperties": true
1244
+ },
1245
+ "since": "2.45",
1246
+ "source": "RFC 0228 §C (v1 `ssrf_blocked` and the `egressPolicy` denial; measured: MyndHyve `ssrf_blocked`)"
1247
+ },
1248
+ {
1249
+ "code": "upstream_unavailable",
1250
+ "meaning": "A host service could not reach the upstream it depends on (a fetch target, an MCP server, a queue backend), so the call failed.",
1251
+ "httpStatus": 502,
1252
+ "statusSource": "v2 decision",
1253
+ "retriable": true,
1254
+ "details": {
1255
+ "type": "object",
1256
+ "required": [
1257
+ "service"
1258
+ ],
1259
+ "properties": {
1260
+ "service": {
1261
+ "type": "string",
1262
+ "minLength": 1,
1263
+ "description": "The host-service family key (`fs`, `kvStorage`, `secrets`, `queueBus`, …)."
1264
+ }
1265
+ },
1266
+ "additionalProperties": true
1267
+ },
1268
+ "since": "2.45",
1269
+ "source": "RFC 0228 §C (measured: MyndHyve `fetch_failed`, the v2 reference host's `example.mcp_unreachable` and `example.http_fetch_failed`)"
1270
+ },
1271
+ {
1272
+ "code": "budget_exhausted",
1273
+ "meaning": "A hard budget dimension was exhausted and the run failed.",
1274
+ "httpStatus": 422,
1275
+ "statusSource": "v2 decision",
1276
+ "retriable": false,
1277
+ "details": {
1278
+ "type": "object",
1279
+ "required": [
1280
+ "dimension"
1281
+ ],
1282
+ "properties": {
1283
+ "dimension": {
1284
+ "enum": [
1285
+ "tokens",
1286
+ "costUsd",
1287
+ "toolCalls",
1288
+ "retries"
1289
+ ],
1290
+ "description": "The budget dimension that was exhausted."
1291
+ }
1292
+ },
1293
+ "additionalProperties": true
1294
+ },
1295
+ "since": "2.45",
1296
+ "source": "RFC 0228 §C; spec/v1/budget-policy.md §D (measured: MyndHyve `host/budgetPolicy.ts`)"
1297
+ },
1298
+ {
1299
+ "code": "budget_model_denied",
1300
+ "meaning": "The run's resolved model is outside its budget's `modelAllow`, or inside its `modelDeny`, so it was refused before the call.",
1301
+ "httpStatus": 422,
1302
+ "statusSource": "v2 decision",
1303
+ "retriable": false,
1304
+ "details": {
1305
+ "type": "object",
1306
+ "properties": {
1307
+ "model": {
1308
+ "type": "string",
1309
+ "minLength": 1,
1310
+ "description": "OPTIONAL. The refused model."
1311
+ }
1312
+ },
1313
+ "additionalProperties": true
1314
+ },
1315
+ "since": "2.45",
1316
+ "source": "RFC 0228 §C; spec/v1/budget-policy.md §D (measured: MyndHyve `host/budgetPolicy.ts`)"
1317
+ },
1318
+ {
1319
+ "code": "service_unavailable",
1320
+ "meaning": "The host is at capacity. Retry after the `Retry-After` header when present.",
1321
+ "httpStatus": 503,
1322
+ "statusSource": "v1 prose (production-profile.md §Backpressure)",
1323
+ "retriable": true,
1324
+ "details": null,
1325
+ "since": "2.45",
1326
+ "source": "RFC 0228 §C (measured: MyndHyve `middleware/backpressureGate.ts`)"
1327
+ },
1328
+ {
1329
+ "code": "run_expired",
1330
+ "meaning": "The run, or the part of its event log the request needs, was purged under the host's documented retention.",
1331
+ "httpStatus": 410,
1332
+ "statusSource": "v2 decision",
1333
+ "retriable": false,
1334
+ "details": {
1335
+ "type": "object",
1336
+ "properties": {
1337
+ "runId": {
1338
+ "$ref": "ids.schema.json#/$defs/runId",
1339
+ "description": "OPTIONAL. The expired run."
1340
+ }
1341
+ },
1342
+ "additionalProperties": true
1343
+ },
1344
+ "since": "2.45",
1345
+ "source": "RFC 0228 §C (replay.md's `410` for a fork past retention; spec-authored, no measured host)"
1346
+ },
1347
+ {
1348
+ "code": "provider_policy_denied",
1349
+ "meaning": "Host provider policy refused the model or provider before the call, so the node failed.",
1350
+ "httpStatus": 422,
1351
+ "statusSource": "v2 decision",
1352
+ "retriable": false,
1353
+ "details": {
1354
+ "type": "object",
1355
+ "required": [
1356
+ "provider"
1357
+ ],
1358
+ "properties": {
1359
+ "provider": {
1360
+ "type": "string",
1361
+ "minLength": 1,
1362
+ "description": "The refused provider."
1363
+ },
1364
+ "reason": {
1365
+ "type": "string",
1366
+ "minLength": 1,
1367
+ "description": "OPTIONAL. The policy cause (`provider-disabled`, `model-not-allowed`, …)."
1368
+ }
1369
+ },
1370
+ "additionalProperties": true
1371
+ },
1372
+ "since": "2.45",
1373
+ "source": "RFC 0228 §C; the default of `aiProviders.policies[].errorCode` (measured: openwop-app and MyndHyve)"
1374
+ },
1375
+ {
1376
+ "code": "eval_gate_unmet",
1377
+ "meaning": "A deployment transition was refused because the eval run its gate requires is not terminal and passing.",
1378
+ "httpStatus": 422,
1379
+ "statusSource": "v2 decision (the status MyndHyve answers)",
1380
+ "retriable": false,
1381
+ "details": {
1382
+ "type": "object",
1383
+ "properties": {
1384
+ "evalRunId": {
1385
+ "$ref": "ids.schema.json#/$defs/runId",
1386
+ "description": "OPTIONAL. The eval run the gate requires."
1387
+ }
1388
+ },
1389
+ "additionalProperties": true
1390
+ },
1391
+ "since": "2.45",
1392
+ "source": "RFC 0228 §C (measured: MyndHyve `host/agentDeployment.ts`, answered at 422)"
1189
1393
  }
1190
1394
  ]
1191
1395
  }