@openwop/spec-artifacts 2.44.5 → 2.44.7
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.
- package/CORPUS-STAMP.json +49 -47
- package/api/seams-v2.yaml +1 -1
- package/api/v2/asyncapi.yaml +1 -1
- package/api/v2/openapi.yaml +31 -122
- package/package.json +1 -1
- package/schemas/v2/agent-ref.schema.json +2 -3
- package/schemas/v2/budget-policy.schema.json +2 -3
- package/schemas/v2/capabilities.schema.json +42 -38
- package/schemas/v2/debug-bundle.schema.json +2 -2
- package/schemas/v2/error-envelope.schema.json +282 -4
- package/schemas/v2/node-pack-manifest.schema.json +2 -2
- package/schemas/v2/prompt-ref.schema.json +2 -3
- package/schemas/v2/prompt-template.schema.json +3 -3
- package/schemas/v2/run-event-payloads.schema.json +5 -5
- package/spec/v1/alias-detectors.json +25 -1
- package/spec/v1/core-standard-manifest.json +2 -2
- package/spec/v1/deprecations.json +89 -1
- package/spec/v1/gaps.json +46 -12
- package/spec/v1/migrations.json +57 -1
- package/spec/v2/core/artifact-type-packs.md +5 -1
- package/spec/v2/core/capabilities.md +20 -22
- package/spec/v2/core/conformance.md +24 -7
- package/spec/v2/core/errors.md +17 -119
- package/spec/v2/core/events.md +7 -7
- package/spec/v2/core/execution.md +56 -16
- package/spec/v2/core/host-services.md +57 -58
- package/spec/v2/core/i18n.md +10 -10
- package/spec/v2/core/idempotency.md +3 -3
- package/spec/v2/core/identity.md +11 -9
- package/spec/v2/core/interop.md +6 -8
- package/spec/v2/core/interrupt.md +8 -8
- package/spec/v2/core/oauth.md +4 -4
- package/spec/v2/core/packs.md +11 -5
- package/spec/v2/core/persistence.md +11 -13
- package/spec/v2/core/portability.md +4 -4
- package/spec/v2/core/replay.md +8 -10
- package/spec/v2/core/runs.md +20 -7
- package/spec/v2/core/security-defaults.md +0 -2
- package/spec/v2/core/storage.md +18 -20
- package/spec/v2/core/versioning.md +4 -9
- package/spec/v2/core/webhooks.md +13 -8
- package/spec/v2/declaration.json +3 -3
- package/spec/v2/errors.json +206 -2
- package/spec/v2/facets/agents.schema.json +367 -0
- package/spec/v2/facets/aiProviders.schema.json +2 -2
- package/spec/v2/generated/error-codes.md +130 -0
- package/spec/v2/release.json +2 -2
- package/spec/v2/surface-baseline.json +38 -2
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://openwop.dev/spec/v2/error-envelope.schema.json",
|
|
4
4
|
"title": "ErrorEnvelope (v2)",
|
|
5
|
-
"description": "GENERATED from spec/v2/errors.json by scripts/generate-error-envelope.mjs (RFC 0171 §B.1).
|
|
5
|
+
"description": "GENERATED from spec/v2/errors.json by scripts/generate-error-envelope.mjs (RFC 0171 §B.1). 120 registered codes; vendor codes match ^(?!openwop\\.)[a-z][a-z0-9]*(-[a-z0-9]+)*\\.[a-z][a-z0-9_]*$. Consumers MUST accept an unknown registered member and MUST NOT act on it (RFC 0171 §A.5).",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"required": [
|
|
@@ -125,7 +125,16 @@
|
|
|
125
125
|
"pack_registry_unreachable",
|
|
126
126
|
"runner_unavailable",
|
|
127
127
|
"unknown_envelope_kind",
|
|
128
|
-
"unknown_schema_version"
|
|
128
|
+
"unknown_schema_version",
|
|
129
|
+
"storage_limit_exceeded",
|
|
130
|
+
"egress_denied",
|
|
131
|
+
"upstream_unavailable",
|
|
132
|
+
"budget_exhausted",
|
|
133
|
+
"budget_model_denied",
|
|
134
|
+
"service_unavailable",
|
|
135
|
+
"run_expired",
|
|
136
|
+
"provider_policy_denied",
|
|
137
|
+
"eval_gate_unmet"
|
|
129
138
|
]
|
|
130
139
|
},
|
|
131
140
|
{
|
|
@@ -288,6 +297,264 @@
|
|
|
288
297
|
}
|
|
289
298
|
}
|
|
290
299
|
}
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"if": {
|
|
303
|
+
"properties": {
|
|
304
|
+
"error": {
|
|
305
|
+
"const": "storage_limit_exceeded"
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
"required": [
|
|
309
|
+
"error"
|
|
310
|
+
]
|
|
311
|
+
},
|
|
312
|
+
"then": {
|
|
313
|
+
"properties": {
|
|
314
|
+
"details": {
|
|
315
|
+
"type": "object",
|
|
316
|
+
"required": [
|
|
317
|
+
"service",
|
|
318
|
+
"limit"
|
|
319
|
+
],
|
|
320
|
+
"properties": {
|
|
321
|
+
"service": {
|
|
322
|
+
"type": "string",
|
|
323
|
+
"minLength": 1,
|
|
324
|
+
"description": "The host-service family key (`fs`, `kvStorage`, `secrets`, `queueBus`, …)."
|
|
325
|
+
},
|
|
326
|
+
"limit": {
|
|
327
|
+
"type": "string",
|
|
328
|
+
"minLength": 1,
|
|
329
|
+
"description": "The advertised field that was exceeded (`maxValueBytes`, `maxTtlSeconds`, `maxRowsPerTable`, …), or `quota`."
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
"additionalProperties": true,
|
|
333
|
+
"x-openwop-error": "storage_limit_exceeded"
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"if": {
|
|
340
|
+
"properties": {
|
|
341
|
+
"error": {
|
|
342
|
+
"const": "egress_denied"
|
|
343
|
+
}
|
|
344
|
+
},
|
|
345
|
+
"required": [
|
|
346
|
+
"error"
|
|
347
|
+
]
|
|
348
|
+
},
|
|
349
|
+
"then": {
|
|
350
|
+
"properties": {
|
|
351
|
+
"details": {
|
|
352
|
+
"type": "object",
|
|
353
|
+
"required": [
|
|
354
|
+
"reason"
|
|
355
|
+
],
|
|
356
|
+
"properties": {
|
|
357
|
+
"reason": {
|
|
358
|
+
"enum": [
|
|
359
|
+
"out-of-audience",
|
|
360
|
+
"expired",
|
|
361
|
+
"ssrf-blocked",
|
|
362
|
+
"provenance-unevaluable",
|
|
363
|
+
"scope-denied",
|
|
364
|
+
"policy-denied"
|
|
365
|
+
],
|
|
366
|
+
"description": "The `egress.decided` reason, from its closed set minus `ok`."
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
"additionalProperties": true,
|
|
370
|
+
"x-openwop-error": "egress_denied"
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
"if": {
|
|
377
|
+
"properties": {
|
|
378
|
+
"error": {
|
|
379
|
+
"const": "upstream_unavailable"
|
|
380
|
+
}
|
|
381
|
+
},
|
|
382
|
+
"required": [
|
|
383
|
+
"error"
|
|
384
|
+
]
|
|
385
|
+
},
|
|
386
|
+
"then": {
|
|
387
|
+
"properties": {
|
|
388
|
+
"details": {
|
|
389
|
+
"type": "object",
|
|
390
|
+
"required": [
|
|
391
|
+
"service"
|
|
392
|
+
],
|
|
393
|
+
"properties": {
|
|
394
|
+
"service": {
|
|
395
|
+
"type": "string",
|
|
396
|
+
"minLength": 1,
|
|
397
|
+
"description": "The host-service family key (`fs`, `kvStorage`, `secrets`, `queueBus`, …)."
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
"additionalProperties": true,
|
|
401
|
+
"x-openwop-error": "upstream_unavailable"
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
"if": {
|
|
408
|
+
"properties": {
|
|
409
|
+
"error": {
|
|
410
|
+
"const": "budget_exhausted"
|
|
411
|
+
}
|
|
412
|
+
},
|
|
413
|
+
"required": [
|
|
414
|
+
"error"
|
|
415
|
+
]
|
|
416
|
+
},
|
|
417
|
+
"then": {
|
|
418
|
+
"properties": {
|
|
419
|
+
"details": {
|
|
420
|
+
"type": "object",
|
|
421
|
+
"required": [
|
|
422
|
+
"dimension"
|
|
423
|
+
],
|
|
424
|
+
"properties": {
|
|
425
|
+
"dimension": {
|
|
426
|
+
"enum": [
|
|
427
|
+
"tokens",
|
|
428
|
+
"costUsd",
|
|
429
|
+
"toolCalls",
|
|
430
|
+
"retries"
|
|
431
|
+
],
|
|
432
|
+
"description": "The budget dimension that was exhausted."
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
"additionalProperties": true,
|
|
436
|
+
"x-openwop-error": "budget_exhausted"
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"if": {
|
|
443
|
+
"properties": {
|
|
444
|
+
"error": {
|
|
445
|
+
"const": "budget_model_denied"
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
"required": [
|
|
449
|
+
"error"
|
|
450
|
+
]
|
|
451
|
+
},
|
|
452
|
+
"then": {
|
|
453
|
+
"properties": {
|
|
454
|
+
"details": {
|
|
455
|
+
"type": "object",
|
|
456
|
+
"properties": {
|
|
457
|
+
"model": {
|
|
458
|
+
"type": "string",
|
|
459
|
+
"minLength": 1,
|
|
460
|
+
"description": "OPTIONAL. The refused model."
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
"additionalProperties": true,
|
|
464
|
+
"x-openwop-error": "budget_model_denied"
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
"if": {
|
|
471
|
+
"properties": {
|
|
472
|
+
"error": {
|
|
473
|
+
"const": "run_expired"
|
|
474
|
+
}
|
|
475
|
+
},
|
|
476
|
+
"required": [
|
|
477
|
+
"error"
|
|
478
|
+
]
|
|
479
|
+
},
|
|
480
|
+
"then": {
|
|
481
|
+
"properties": {
|
|
482
|
+
"details": {
|
|
483
|
+
"type": "object",
|
|
484
|
+
"properties": {
|
|
485
|
+
"runId": {
|
|
486
|
+
"$ref": "ids.schema.json#/$defs/runId",
|
|
487
|
+
"description": "OPTIONAL. The expired run."
|
|
488
|
+
}
|
|
489
|
+
},
|
|
490
|
+
"additionalProperties": true,
|
|
491
|
+
"x-openwop-error": "run_expired"
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
"if": {
|
|
498
|
+
"properties": {
|
|
499
|
+
"error": {
|
|
500
|
+
"const": "provider_policy_denied"
|
|
501
|
+
}
|
|
502
|
+
},
|
|
503
|
+
"required": [
|
|
504
|
+
"error"
|
|
505
|
+
]
|
|
506
|
+
},
|
|
507
|
+
"then": {
|
|
508
|
+
"properties": {
|
|
509
|
+
"details": {
|
|
510
|
+
"type": "object",
|
|
511
|
+
"required": [
|
|
512
|
+
"provider"
|
|
513
|
+
],
|
|
514
|
+
"properties": {
|
|
515
|
+
"provider": {
|
|
516
|
+
"type": "string",
|
|
517
|
+
"minLength": 1,
|
|
518
|
+
"description": "The refused provider."
|
|
519
|
+
},
|
|
520
|
+
"reason": {
|
|
521
|
+
"type": "string",
|
|
522
|
+
"minLength": 1,
|
|
523
|
+
"description": "OPTIONAL. The policy cause (`provider-disabled`, `model-not-allowed`, …)."
|
|
524
|
+
}
|
|
525
|
+
},
|
|
526
|
+
"additionalProperties": true,
|
|
527
|
+
"x-openwop-error": "provider_policy_denied"
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
"if": {
|
|
534
|
+
"properties": {
|
|
535
|
+
"error": {
|
|
536
|
+
"const": "eval_gate_unmet"
|
|
537
|
+
}
|
|
538
|
+
},
|
|
539
|
+
"required": [
|
|
540
|
+
"error"
|
|
541
|
+
]
|
|
542
|
+
},
|
|
543
|
+
"then": {
|
|
544
|
+
"properties": {
|
|
545
|
+
"details": {
|
|
546
|
+
"type": "object",
|
|
547
|
+
"properties": {
|
|
548
|
+
"evalRunId": {
|
|
549
|
+
"$ref": "ids.schema.json#/$defs/runId",
|
|
550
|
+
"description": "OPTIONAL. The eval run the gate requires."
|
|
551
|
+
}
|
|
552
|
+
},
|
|
553
|
+
"additionalProperties": true,
|
|
554
|
+
"x-openwop-error": "eval_gate_unmet"
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
}
|
|
291
558
|
}
|
|
292
559
|
],
|
|
293
560
|
"x-openwop-http-status": {
|
|
@@ -401,13 +668,24 @@
|
|
|
401
668
|
"pack_registry_unreachable": 503,
|
|
402
669
|
"runner_unavailable": 503,
|
|
403
670
|
"unknown_envelope_kind": 422,
|
|
404
|
-
"unknown_schema_version": 422
|
|
671
|
+
"unknown_schema_version": 422,
|
|
672
|
+
"storage_limit_exceeded": 422,
|
|
673
|
+
"egress_denied": 403,
|
|
674
|
+
"upstream_unavailable": 502,
|
|
675
|
+
"budget_exhausted": 422,
|
|
676
|
+
"budget_model_denied": 422,
|
|
677
|
+
"service_unavailable": 503,
|
|
678
|
+
"run_expired": 410,
|
|
679
|
+
"provider_policy_denied": 422,
|
|
680
|
+
"eval_gate_unmet": 422
|
|
405
681
|
},
|
|
406
682
|
"x-openwop-retriable": [
|
|
407
683
|
"residency_unavailable",
|
|
408
684
|
"rate_limited",
|
|
409
685
|
"internal_error",
|
|
410
686
|
"pack_registry_unreachable",
|
|
411
|
-
"runner_unavailable"
|
|
687
|
+
"runner_unavailable",
|
|
688
|
+
"upstream_unavailable",
|
|
689
|
+
"service_unavailable"
|
|
412
690
|
]
|
|
413
691
|
}
|
|
@@ -316,7 +316,7 @@
|
|
|
316
316
|
"provider": {
|
|
317
317
|
"type": "string",
|
|
318
318
|
"pattern": "^[a-z][a-z0-9-]*$",
|
|
319
|
-
"description": "Provider id per `capabilities.aiProviders.
|
|
319
|
+
"description": "Provider id per `capabilities.aiProviders.providers` (e.g., `anthropic`, `openai`, `gemini`). MUST be in the host's `capabilities.aiProviders.providers[]` for the substitution to fire; otherwise the host emits `model.capability-insufficient` with `fallbackAttempted: true`."
|
|
320
320
|
},
|
|
321
321
|
"model": {
|
|
322
322
|
"type": "string",
|
|
@@ -358,7 +358,7 @@
|
|
|
358
358
|
},
|
|
359
359
|
"provider": {
|
|
360
360
|
"type": "string",
|
|
361
|
-
"description": "For `kind: 'ai-provider'`, the provider id (`anthropic`, `openai`, `gemini`, etc.). MUST be in `
|
|
361
|
+
"description": "For `kind: 'ai-provider'`, the provider id (`anthropic`, `openai`, `gemini`, etc.). MUST be in `capabilities.aiProviders.providers`. Optional for other kinds."
|
|
362
362
|
},
|
|
363
363
|
"scope": {
|
|
364
364
|
"type": "string",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://openwop.dev/spec/v2/prompt-ref.schema.json",
|
|
4
4
|
"title": "PromptRef",
|
|
5
|
-
"description": "Reference to a PromptTemplate. Two equivalent forms are accepted: a compact stringy URI (`prompt:templateId[@version]`) and a structured object form. The stringy form is canonical for inline use in WorkflowNode.config and AgentManifest.promptOverrides; the object form is canonical when libraryId disambiguation, variable overrides, or pinned versions need to be expressed explicitly. See spec/v1/prompts.md §\"PromptRef\" for the canonical contract and RFC 0027 §B for the rationale.\n\nResolution semantics (host responsibility): the host looks up the referenced template in its library (host built-ins + installed packs + user templates, gated by capabilities.prompts.*). When no `version` is given, the latest version wins. When two installed packs ship the same templateId, the stringy form is rejected with `
|
|
5
|
+
"description": "Reference to a PromptTemplate. Two equivalent forms are accepted: a compact stringy URI (`prompt:templateId[@version]`) and a structured object form. The stringy form is canonical for inline use in WorkflowNode.config and AgentManifest.promptOverrides; the object form is canonical when libraryId disambiguation, variable overrides, or pinned versions need to be expressed explicitly. See spec/v1/prompts.md §\"PromptRef\" for the canonical contract and RFC 0027 §B for the rationale.\n\nResolution semantics (host responsibility): the host looks up the referenced template in its library (host built-ins + installed packs + user templates, gated by capabilities.prompts.*). When no `version` is given, the latest version wins. When two installed packs ship the same templateId, the stringy form is rejected with `validation_error` (`details.field: libraryId`) and consumers MUST use the object form with `libraryId` to disambiguate (RFC 0028 §B \"Conflict resolution\").",
|
|
6
6
|
"oneOf": [
|
|
7
7
|
{
|
|
8
8
|
"type": "string",
|
|
@@ -37,6 +37,5 @@
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
]
|
|
41
|
-
"x-openwop-seeded-from": "v1"
|
|
40
|
+
]
|
|
42
41
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://openwop.dev/spec/v2/prompt-template.schema.json",
|
|
4
4
|
"title": "PromptTemplate",
|
|
5
|
-
"description": "Canonical wire shape for a named, versioned, variable-bound prompt body referenced by workflow nodes and agent manifests. See spec/v1/prompts.md §\"PromptTemplate\" for the canonical contract, RFC 0027 for the rationale, and prompt-ref.schema.json for the reference type that points at instances of this shape. Variable interpolation MUST use Mustache-compatible `{{varName}}` placeholders; unresolved required variables MUST cause the node to fail with `
|
|
5
|
+
"description": "Canonical wire shape for a named, versioned, variable-bound prompt body referenced by workflow nodes and agent manifests. See spec/v1/prompts.md §\"PromptTemplate\" for the canonical contract, RFC 0027 for the rationale, and prompt-ref.schema.json for the reference type that points at instances of this shape. Variable interpolation MUST use Mustache-compatible `{{varName}}` placeholders; unresolved required variables MUST cause the node to fail with `node_config_invalid`; unresolved optional variables render as the empty string per RFC 0027 §A.\n\nThe `text` field MAY contain `<UNTRUSTED>...</UNTRUSTED>` markers verbatim — hosts MUST preserve them through composition per SECURITY/threat-model-prompt-injection.md. Variables sourced from `secret` MUST be replaced with `[REDACTED:<secretId>]` markers in any observability output (e.g., `prompt.composed` events) per SECURITY/threat-model-secret-leakage.md §SR-1.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"required": [
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
"type",
|
|
155
155
|
"required"
|
|
156
156
|
],
|
|
157
|
-
"description": "Typed interpolation slot. Bindings are validated against this declaration before composition; unresolved required slots MUST fail the node with `
|
|
157
|
+
"description": "Typed interpolation slot. Bindings are validated against this declaration before composition; unresolved required slots MUST fail the node with `node_config_invalid`. Variables sourced from `secret` MUST be redacted to `[REDACTED:<secretId>]` markers in observability output per SECURITY/threat-model-secret-leakage.md §SR-1.",
|
|
158
158
|
"properties": {
|
|
159
159
|
"name": {
|
|
160
160
|
"type": "string",
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
},
|
|
175
175
|
"required": {
|
|
176
176
|
"type": "boolean",
|
|
177
|
-
"description": "When true, an absent binding fails the node with `
|
|
177
|
+
"description": "When true, an absent binding fails the node with `node_config_invalid`. When false, the variable renders as `defaultValue` (if present) or the empty string."
|
|
178
178
|
},
|
|
179
179
|
"source": {
|
|
180
180
|
"type": "string",
|
|
@@ -888,7 +888,7 @@
|
|
|
888
888
|
}
|
|
889
889
|
},
|
|
890
890
|
"coreWorkflowChainConfidenceEscalated": {
|
|
891
|
-
"description": "RFC 0039 \u00a7A \u2014 emitted when a supervisor's OrchestratorDecision carries `confidence` below the active confidence floor (spec floor 0.5 OR operator-stricter `capabilities.multiAgent.executionModel.confidenceEscalationFloor`). Recorded BEFORE the host fires the matching clarify-or-escalate interrupt so the run event log carries the decision point even if the user later confirms the original decision. MUST NOT be emitted unless `capabilities.multiAgent.executionModel.version >= 2`.",
|
|
891
|
+
"description": "RFC 0039 \u00a7A \u2014 emitted when a supervisor's OrchestratorDecision carries `confidence` below the active confidence floor (spec floor 0.5 OR operator-stricter `capabilities.multiAgent.executionModel.confidenceEscalationFloor`). Recorded BEFORE the host fires the matching clarify-or-escalate interrupt so the run event log carries the decision point even if the user later confirms the original decision. MUST NOT be emitted unless `capabilities.multiAgent.executionModel.version >= 2`. It MUST precede both that interrupt and any `core.workflowChain.event` with `phase: dispatch.began` for the escalated decision. Its `causationId` MAY be absent; when present it MUST resolve to an event already on the run's log, and need not be a `runOrchestrator.decided`: a host holding the decision until ratification has none to name.",
|
|
892
892
|
"type": "object",
|
|
893
893
|
"additionalProperties": false,
|
|
894
894
|
"required": [
|
|
@@ -1495,7 +1495,7 @@
|
|
|
1495
1495
|
},
|
|
1496
1496
|
"contextSummarized": {
|
|
1497
1497
|
"type": "object",
|
|
1498
|
-
"description": "RFC 0111. Emitted when the host replaces older in-window orchestrator transcript turns with a host-produced summary to honor `multiAgent.executionModel.contextBudget.transcriptTokenBudget`. CONTENT-FREE: the summary text is NEVER inlined \u2014 `summaryRef` is an artifactId resolved via `GET /runs/{runId}/artifacts/{artifactId}`. The summary is a NONDETERMINISTIC host output governed like an RFC 0041 envelope: on `:fork mode:replay` the host MUST reuse this recorded `summaryRef` and MUST NOT re-summarize (
|
|
1498
|
+
"description": "RFC 0111. Emitted when the host replaces older in-window orchestrator transcript turns with a host-produced summary to honor `multiAgent.executionModel.contextBudget.transcriptTokenBudget`. CONTENT-FREE: the summary text is NEVER inlined \u2014 `summaryRef` is an artifactId resolved via `GET /runs/{runId}/artifacts/{artifactId}`. The summary is a NONDETERMINISTIC host output governed like an RFC 0041 envelope: on `:fork mode:replay` the host MUST reuse this recorded `summaryRef` and MUST NOT re-summarize (execution.md \u00a7multiAgent). `replacedTurns` lists the event ids the summary stands in for, so a replay engine reconstructs the exact transcript. A host MUST NOT emit it unless it advertises `multiAgent.executionModel.contextBudget.summarization`.",
|
|
1499
1499
|
"required": [
|
|
1500
1500
|
"iteration",
|
|
1501
1501
|
"replacedTurns",
|
|
@@ -2377,7 +2377,7 @@
|
|
|
2377
2377
|
"fallbackAttempted": {
|
|
2378
2378
|
"type": "boolean",
|
|
2379
2379
|
"default": false,
|
|
2380
|
-
"description": "True if the host attempted to authenticate to a declared `fallbackModel` and that attempt failed (e.g., no credential resolvable, or the fallback provider was outside `capabilities.aiProviders.
|
|
2380
|
+
"description": "True if the host attempted to authenticate to a declared `fallbackModel` and that attempt failed (e.g., no credential resolvable, or the fallback provider was outside `capabilities.aiProviders.providers`). False if no `fallbackModel` was declared on the NodeModule."
|
|
2381
2381
|
}
|
|
2382
2382
|
}
|
|
2383
2383
|
},
|
|
@@ -3243,7 +3243,7 @@
|
|
|
3243
3243
|
},
|
|
3244
3244
|
"agentInvocationStarted": {
|
|
3245
3245
|
"type": "object",
|
|
3246
|
-
"description": "RFC 0077. Emitted by a host advertising `capabilities.agents.liveRuntime.supported: true` as the FIRST agent-scoped event of a live manifest invocation, bracketing the existing `agent.*` family with `agent.invocation.completed`. Content-free: identifiers + selection metadata only \u2014 prompt/task content is served by the run's normal projection, never on this event. A recorded-fact event per `replay.md` \u00a7\"Recorded-fact events\": on replay it is re-emitted from the log and the host MUST NOT regenerate its `invocationId` (or any identifier). Distinct from the deterministic RFC 0070 sample floor.",
|
|
3246
|
+
"description": "RFC 0077. Emitted by a host advertising `capabilities.agents.liveRuntime.supported: true` as the FIRST agent-scoped event of a live manifest invocation, bracketing the existing `agent.*` family with `agent.invocation.completed`. Content-free: identifiers + selection metadata only \u2014 prompt/task content is served by the run's normal projection, never on this event. A recorded-fact event per `replay.md` \u00a7\"Recorded-fact events\": on replay it is re-emitted from the log and the host MUST NOT regenerate its `invocationId` (or any identifier). Distinct from the deterministic RFC 0070 sample floor. For one live invocation the agent-scoped events MUST appear in the order `agent.invocation-started` \u2192 `agent.prompt-resolved` \u2192 (`agent.reasoning-delta`* \u2192 `agent.reasoned`)+ \u2192 (`agent.tool-called` \u2192 `agent.tool-returned`)* \u2192 `agent.decided`+ \u2192 `agent.handoff`? \u2192 `agent.invocation-completed`: this event precedes every other agent-scoped event of the invocation, and `agent.invocation-completed` follows them all and, for a sub-run, precedes the run-scoped `output.harvested`. On replay the host MUST NOT regenerate its timestamps either.",
|
|
3247
3247
|
"required": [
|
|
3248
3248
|
"invocationId",
|
|
3249
3249
|
"agentId",
|
|
@@ -3278,7 +3278,7 @@
|
|
|
3278
3278
|
},
|
|
3279
3279
|
"resolvedProvider": {
|
|
3280
3280
|
"type": "string",
|
|
3281
|
-
"description": "MAY \u2014 the concrete provider the host routed to (aligns with `capabilities.aiProviders.
|
|
3281
|
+
"description": "MAY \u2014 the concrete provider the host routed to (aligns with `capabilities.aiProviders.providers` / RFC 0067 `authModes`). OPTIONAL, same rationale as `resolvedModel`."
|
|
3282
3282
|
},
|
|
3283
3283
|
"resolvedAgentVersion": {
|
|
3284
3284
|
"type": "string",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "RFC 0167 §E — the alias inventory as data. Each detector names a literal token that, while present in the named file, proves an alias or legacy spelling is still in the corpus, and the spec/v1/deprecations.json row that must cover it. scripts/check-alias-coverage.mjs fails when a token is present and its row is missing, or when a row's detector token has disappeared (the alias is gone — retire the detector with the surface). Reviewed, not derived: a grep cannot decide what is an alias; this file records the decision.",
|
|
3
3
|
"version": 1,
|
|
4
|
-
"updated": "2026-09-
|
|
4
|
+
"updated": "2026-09-29",
|
|
5
5
|
"detectors": [
|
|
6
6
|
{
|
|
7
7
|
"alias": "capabilities wrapper object",
|
|
@@ -314,6 +314,30 @@
|
|
|
314
314
|
"file": "spec/v1/i18n.md",
|
|
315
315
|
"token": "## `locale` field on `InterruptPayload`",
|
|
316
316
|
"deprecation": "openwop.deprecation.interrupt-locale-field"
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"alias": "envelopes.reliability.events[] v1 dotted names",
|
|
320
|
+
"file": "schemas/v2/capabilities.schema.json",
|
|
321
|
+
"token": "\"envelope.retry.exhausted\"",
|
|
322
|
+
"deprecation": "openwop.deprecation.v2-reliability-dotted-event-names"
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"alias": "per-provider aiProviders facets (selfHosted[], authModes map, promptPrefixCache.providers, realtimeVoice sub-flags)",
|
|
326
|
+
"file": "spec/v1/capabilities.md",
|
|
327
|
+
"token": "`authModes` is an OPTIONAL object whose keys are provider ids",
|
|
328
|
+
"deprecation": "openwop.deprecation.ai-providers-per-provider-facets"
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"alias": "aiProviders.supported (v2: providers)",
|
|
332
|
+
"file": "spec/v1/capabilities.md",
|
|
333
|
+
"token": "| `aiProviders.supported`",
|
|
334
|
+
"deprecation": "openwop.deprecation.ai-providers-supported-rename"
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"alias": "RunSnapshot.parentNodeId child→parent link",
|
|
338
|
+
"file": "spec/v1/node-packs.md",
|
|
339
|
+
"token": "`RunSnapshot.parentNodeId`",
|
|
340
|
+
"deprecation": "openwop.deprecation.subworkflow-parent-link-fields"
|
|
317
341
|
}
|
|
318
342
|
]
|
|
319
343
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"provenance": {
|
|
5
5
|
"suite": {
|
|
6
6
|
"package": "@openwop/openwop-conformance",
|
|
7
|
-
"version": "2.44.
|
|
7
|
+
"version": "2.44.7"
|
|
8
8
|
},
|
|
9
9
|
"note": "Derived from the corpus at generation time. Regenerate with --write; verify with --check."
|
|
10
10
|
},
|
|
@@ -421,5 +421,5 @@
|
|
|
421
421
|
"$id": "https://openwop.dev/spec/v1/workspace-file.schema.json"
|
|
422
422
|
}
|
|
423
423
|
],
|
|
424
|
-
"digest": "
|
|
424
|
+
"digest": "c314696b625c3896601e5e6bf4dd080dc414038d0bf29d3a55b957aec6e0f07b"
|
|
425
425
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./deprecations.schema.json",
|
|
3
3
|
"version": 1,
|
|
4
|
-
"updated": "2026-09-
|
|
4
|
+
"updated": "2026-09-29",
|
|
5
5
|
"entries": [
|
|
6
6
|
{
|
|
7
7
|
"id": "openwop.deprecation.capabilities-wrapper",
|
|
@@ -1024,6 +1024,94 @@
|
|
|
1024
1024
|
}
|
|
1025
1025
|
],
|
|
1026
1026
|
"removalTrigger": "v2.0-cut"
|
|
1027
|
+
},
|
|
1028
|
+
{
|
|
1029
|
+
"id": "openwop.deprecation.v2-reliability-dotted-event-names",
|
|
1030
|
+
"status": "deprecated",
|
|
1031
|
+
"surface": "the four v1 dotted names in `envelopes.reliability.events[]` (`envelope.retry.attempted`, `envelope.retry.exhausted`, `envelope.nlToFormat.engaged`, `envelope.recovery.applied`)",
|
|
1032
|
+
"kind": "discovery-field",
|
|
1033
|
+
"deprecatedIn": "2.45 (RFC 0228)",
|
|
1034
|
+
"authority": "RFCS/0228-v1-host-service-error-codes.md §G (the enum gains the v2 hyphenated names; the dotted names stay as deprecated aliases)",
|
|
1035
|
+
"removeIn": "3.0",
|
|
1036
|
+
"replacement": "the v2 names `envelope.retry-attempted`, `envelope.retry-exhausted`, `envelope.nl-to-format-engaged`, `envelope.recovery-applied` (spec/v2/event-codemap.json); a consumer treats each dotted name as its hyphenated equivalent",
|
|
1037
|
+
"codemod": null,
|
|
1038
|
+
"note": "NOT removed at 2.x: six committed MyndHyve v2 bundles carry the dotted names in their discovery document (checked 2026-09-28), so a replacement fails RFC 0197 R3. v2 only; the v1 schema is unchanged.",
|
|
1039
|
+
"sources": [
|
|
1040
|
+
{
|
|
1041
|
+
"file": "schemas/v2/capabilities.schema.json",
|
|
1042
|
+
"token": "are deprecated aliases, removed in 3.0"
|
|
1043
|
+
},
|
|
1044
|
+
{
|
|
1045
|
+
"file": "RFCS/0228-v1-host-service-error-codes.md",
|
|
1046
|
+
"token": "described as deprecated aliases"
|
|
1047
|
+
}
|
|
1048
|
+
]
|
|
1049
|
+
},
|
|
1050
|
+
{
|
|
1051
|
+
"id": "openwop.deprecation.ai-providers-per-provider-facets",
|
|
1052
|
+
"status": "deprecated",
|
|
1053
|
+
"surface": "per-provider `aiProviders` facet shapes: `selfHosted[]`, the `realtimeVoice` sub-flag object, `promptPrefixCache.{supported, providers[]}`, the per-provider `authModes` map",
|
|
1054
|
+
"kind": "discovery-field",
|
|
1055
|
+
"deprecatedIn": "RFC 0169 §Migration table row `openwop.migration.C2.11` (v2 narrows the four facets)",
|
|
1056
|
+
"authority": "RFCS/0169-v2-discovery-and-capabilities.md §Migration table, row openwop.migration.C2.11",
|
|
1057
|
+
"removeIn": "2.0",
|
|
1058
|
+
"replacement": "`selfHosted`, `realtimeVoice`, `promptPrefixCache` booleans and one `authModes` list (spec/v2/core/host-services.md §aiProviders)",
|
|
1059
|
+
"codemod": "openwop.codemod.ai-providers-v2-narrow",
|
|
1060
|
+
"sources": [
|
|
1061
|
+
{
|
|
1062
|
+
"file": "RFCS/0169-v2-discovery-and-capabilities.md",
|
|
1063
|
+
"token": "openwop.migration.C2.11"
|
|
1064
|
+
},
|
|
1065
|
+
{
|
|
1066
|
+
"file": "spec/v1/capabilities.md",
|
|
1067
|
+
"token": "**A.1 — Subset constraint.**"
|
|
1068
|
+
}
|
|
1069
|
+
],
|
|
1070
|
+
"removalTrigger": "v2.0-cut"
|
|
1071
|
+
},
|
|
1072
|
+
{
|
|
1073
|
+
"id": "openwop.deprecation.ai-providers-supported-rename",
|
|
1074
|
+
"status": "deprecated",
|
|
1075
|
+
"surface": "`aiProviders.supported`",
|
|
1076
|
+
"kind": "discovery-field",
|
|
1077
|
+
"deprecatedIn": "RFC 0169 §Migration table row `openwop.migration.C2.12` (v2 renames the list `providers`)",
|
|
1078
|
+
"authority": "RFCS/0169-v2-discovery-and-capabilities.md §Migration table, row openwop.migration.C2.12",
|
|
1079
|
+
"removeIn": "2.0",
|
|
1080
|
+
"replacement": "`aiProviders.providers` (spec/v2/core/host-services.md §aiProviders)",
|
|
1081
|
+
"codemod": "openwop.codemod.ai-providers-v2-narrow",
|
|
1082
|
+
"sources": [
|
|
1083
|
+
{
|
|
1084
|
+
"file": "RFCS/0169-v2-discovery-and-capabilities.md",
|
|
1085
|
+
"token": "openwop.migration.C2.12"
|
|
1086
|
+
},
|
|
1087
|
+
{
|
|
1088
|
+
"file": "spec/v1/capabilities.md",
|
|
1089
|
+
"token": "| `aiProviders.supported`"
|
|
1090
|
+
}
|
|
1091
|
+
],
|
|
1092
|
+
"removalTrigger": "v2.0-cut"
|
|
1093
|
+
},
|
|
1094
|
+
{
|
|
1095
|
+
"id": "openwop.deprecation.subworkflow-parent-link-fields",
|
|
1096
|
+
"status": "deprecated",
|
|
1097
|
+
"surface": "`RunSnapshot.parentRunId` and `RunSnapshot.parentNodeId` as the `core.subWorkflow` child→parent link",
|
|
1098
|
+
"kind": "schema-field",
|
|
1099
|
+
"deprecatedIn": "RFC 0171 §Migration table row `openwop.migration.C4.18` (v2 `parentRunId` is fork lineage; `parentNodeId` has no v2 place)",
|
|
1100
|
+
"authority": "RFCS/0171-v2-wire-envelope.md §Migration table, row openwop.migration.C4.18",
|
|
1101
|
+
"removeIn": "2.0",
|
|
1102
|
+
"replacement": "`getRunAncestry` `parent.runId` with `cause: \"core.subWorkflow\"` (spec/v2/core/execution.md §subWorkflow)",
|
|
1103
|
+
"codemod": "openwop.codemod.subworkflow-parent-link-drop",
|
|
1104
|
+
"sources": [
|
|
1105
|
+
{
|
|
1106
|
+
"file": "RFCS/0171-v2-wire-envelope.md",
|
|
1107
|
+
"token": "openwop.migration.C4.18"
|
|
1108
|
+
},
|
|
1109
|
+
{
|
|
1110
|
+
"file": "spec/v1/node-packs.md",
|
|
1111
|
+
"token": "**Parent linkage.**"
|
|
1112
|
+
}
|
|
1113
|
+
],
|
|
1114
|
+
"removalTrigger": "v2.0-cut"
|
|
1027
1115
|
}
|
|
1028
1116
|
]
|
|
1029
1117
|
}
|