@openwop/spec-artifacts 2.35.1 → 2.36.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.
- package/CORPUS-STAMP.json +103 -89
- package/api/openapi.yaml +325 -4
- package/api/seams-v2.yaml +342 -1
- package/api/v2/asyncapi.yaml +1 -1
- package/api/v2/openapi.yaml +564 -8
- package/package.json +1 -1
- package/schemas/a2a-task-state.schema.json +3 -3
- package/schemas/artifact-type-pack-manifest.schema.json +3 -3
- package/schemas/capabilities.schema.json +34 -1
- package/schemas/connection-pack-manifest.schema.json +14 -0
- package/schemas/debug-bundle.schema.json +20 -0
- package/schemas/dispatch-config.schema.json +1 -1
- package/schemas/localized-content-language-settings.schema.json +3 -3
- package/schemas/localized-content-page.schema.json +2 -2
- package/schemas/localized-content-section.schema.json +3 -3
- package/schemas/run-event-payloads.schema.json +4 -2
- package/schemas/suspend-request.schema.json +61 -4
- package/schemas/v2/a2a-task-state.schema.json +10 -9
- package/schemas/v2/agent-deployment-transition.schema.json +4 -4
- package/schemas/v2/agent-deployment.schema.json +7 -7
- package/schemas/v2/agent-eval-suite.schema.json +10 -10
- package/schemas/v2/agent-inventory-response.schema.json +8 -2
- package/schemas/v2/artifact-type-pack-manifest.schema.json +3 -3
- package/schemas/v2/artifact.schema.json +84 -0
- package/schemas/v2/capabilities.schema.json +82 -8
- package/schemas/v2/certification-bundle.schema.json +1 -1
- package/schemas/v2/channel-presence-payload.schema.json +3 -3
- package/schemas/v2/connection-pack-manifest.schema.json +14 -0
- package/schemas/v2/conversation-event.schema.json +9 -2
- package/schemas/v2/conversation-turn.schema.json +19 -12
- package/schemas/v2/dispatch-config.schema.json +1 -1
- package/schemas/v2/envelopes/ui.a2ui-surface.schema.json +920 -22
- package/schemas/v2/error-envelope.schema.json +11 -1
- package/schemas/v2/eval-summary.schema.json +1 -2
- package/schemas/v2/goal.schema.json +4 -4
- package/schemas/v2/localized-content-language-settings.schema.json +3 -3
- package/schemas/v2/localized-content-page.schema.json +2 -2
- package/schemas/v2/localized-content-section.schema.json +3 -3
- package/schemas/v2/node-pack-manifest.schema.json +105 -0
- package/schemas/v2/part.schema.json +81 -0
- package/schemas/v2/proposal.schema.json +6 -6
- package/schemas/v2/run-event-payloads.schema.json +5 -3
- package/schemas/v2/self-hosted-runner-dispatch-frame.schema.json +2 -2
- package/schemas/v2/self-hosted-runner-result-frame.schema.json +1 -1
- package/schemas/v2/suspend-request.schema.json +251 -6
- package/schemas/v2/tool-descriptor.schema.json +246 -2
- package/schemas/v2/trigger-event.schema.json +1 -2
- package/schemas/v2/trigger-subscription.schema.json +1 -2
- package/schemas/v2/webhook-verification.schema.json +22 -0
- package/schemas/v2/workflow-definition.schema.json +25 -25
- package/spec/v1/alias-detectors.json +13 -1
- package/spec/v1/core-standard-manifest.json +2 -2
- package/spec/v1/deprecations.json +45 -1
- package/spec/v1/deprecations.schema.json +119 -4
- package/spec/v1/gaps.json +1925 -4
- package/spec/v2/README.md +5 -2
- package/spec/v2/core/capabilities.md +13 -26
- package/spec/v2/core/conformance.md +5 -8
- package/spec/v2/core/connection-packs.md +1 -1
- package/spec/v2/core/conversation.md +1 -1
- package/spec/v2/core/errors.md +8 -3
- package/spec/v2/core/events.md +8 -20
- package/spec/v2/core/form-content-packs.md +2 -2
- package/spec/v2/core/headers.md +5 -4
- package/spec/v2/core/host-services.md +6 -2
- package/spec/v2/core/idempotency.md +1 -1
- package/spec/v2/core/identity.md +23 -12
- package/spec/v2/core/interop.md +34 -4
- package/spec/v2/core/interrupt.md +6 -3
- package/spec/v2/core/node-pack-runtimes.md +20 -0
- package/spec/v2/core/oauth.md +32 -0
- package/spec/v2/core/overview.md +19 -6
- package/spec/v2/core/packs.md +4 -6
- package/spec/v2/core/persistence.md +20 -55
- package/spec/v2/core/replay.md +5 -11
- package/spec/v2/core/runs.md +9 -8
- package/spec/v2/core/security-defaults.md +18 -20
- package/spec/v2/core/tool-catalog.md +22 -0
- package/spec/v2/core/versioning.md +10 -28
- package/spec/v2/core/webhooks.md +16 -4
- package/spec/v2/core/workflow-chain-packs.md +1 -1
- package/spec/v2/corrections.json +32 -0
- package/spec/v2/corrections.schema.json +49 -0
- package/spec/v2/declaration.json +18 -13
- package/spec/v2/declaration.schema.json +3 -1
- package/spec/v2/errors.json +46 -1
- package/spec/v2/ext/a2uiSurface/README.md +131 -17
- package/spec/v2/ext/dataIntegration/README.md +5 -0
- package/spec/v2/facets/a2a.schema.json +4 -0
- package/spec/v2/facets/auth.schema.json +24 -0
- package/spec/v2/facets/mcp.schema.json +4 -0
- package/spec/v2/facets/oauth.schema.json +70 -0
- package/spec/v2/facets/webhooks.schema.json +23 -2
- package/spec/v2/id-field-bindings.json +2 -0
- package/spec/v2/interop-map.json +639 -0
- package/spec/v2/interop-map.schema.json +458 -0
- package/spec/v2/migrations.json +7 -0
- package/spec/v2/migrations.schema.json +58 -0
- package/spec/v2/path-manifest.json +6 -1
- package/spec/v2/release.json +3 -3
- package/spec/v2/surface-baseline.json +7981 -0
|
@@ -105,14 +105,14 @@
|
|
|
105
105
|
}
|
|
106
106
|
},
|
|
107
107
|
"configurableSchema": {
|
|
108
|
-
"description": "Optional JSON Schema 2020-12 declaring which RunOptions.configurable keys this workflow accepts. When present, hosts MUST validate POST /runs `configurable` payloads against this schema and reject mismatches with `validation_error`. Hosts MUST surface this schema on GET /workflows/{workflowId} so clients can pre-flight-validate. See run-options.md
|
|
108
|
+
"description": "Optional JSON Schema 2020-12 declaring which RunOptions.configurable keys this workflow accepts. When present, hosts MUST validate POST /runs `configurable` payloads against this schema and reject mismatches with `validation_error`. Hosts MUST surface this schema on GET /workflows/{workflowId} so clients can pre-flight-validate. See run-options.md §'Per-workflow configurableSchema'. Additive in v1.1.",
|
|
109
109
|
"type": "object",
|
|
110
110
|
"additionalProperties": true
|
|
111
111
|
},
|
|
112
112
|
"defaults": {
|
|
113
113
|
"type": "object",
|
|
114
114
|
"additionalProperties": false,
|
|
115
|
-
"description": "RFC 0029
|
|
115
|
+
"description": "RFC 0029 §B. Workflow-author-controlled per-kind fallback values that apply at resolution chain layer 3 (`workflow-defaults`) per `spec/v1/prompts.md` §\"Resolution chain (normative)\". Applied when neither the node (layer 1) nor the node's bound agent (layer 2) specifies a value for the kind. Future RFCs MAY add sibling defaults (e.g., `defaults.temperature`, `defaults.modelClass`) without colliding.",
|
|
116
116
|
"properties": {
|
|
117
117
|
"promptRefs": {
|
|
118
118
|
"type": "object",
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
"id": {
|
|
175
175
|
"type": "string",
|
|
176
176
|
"minLength": 1,
|
|
177
|
-
"description": "Node identifier, unique within the workflow. Intentionally has NO `maxLength`
|
|
177
|
+
"description": "Node identifier, unique within the workflow. Intentionally has NO `maxLength` — RFC 0013 chain expansion mints ids of the form `${chainIdSlug}_${expansionId}_${fragmentId}` where `chainIdSlug` is an unbounded reverse-DNS string, so an expanded node id can exceed any short cap. A host MUST NOT reject or truncate a node id by length (no host-imposed `maxLength` stricter than this schema)."
|
|
178
178
|
},
|
|
179
179
|
"typeId": {
|
|
180
180
|
"$ref": "ids.schema.json#/$defs/typeId",
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
},
|
|
203
203
|
"config": {
|
|
204
204
|
"type": "object",
|
|
205
|
-
"description": "Node configuration (pre-execution constants). The shape is per-typeId
|
|
205
|
+
"description": "Node configuration (pre-execution constants). The shape is per-typeId — node-pack manifests declare each typeId's `configSchema` for install-time validation. By convention, the keys `systemPromptRef`, `userPromptRef`, and `additionalPromptRefs` MAY hold PromptRef values per `spec/v1/prompts.md` §\"PromptRef\" (RFC 0027). Hosts advertising `capabilities.prompts.supported: true` MUST resolve these keys; hosts without the capability MAY treat them as opaque strings. When both an inline body (e.g., `config.systemPrompt`) and a `*PromptRef` are present, the ref wins and the host MUST emit a `log.appended` warning with `code: \"prompt_ref_supersedes_inline\"` per RFC 0027 §C.",
|
|
206
206
|
"additionalProperties": true
|
|
207
207
|
},
|
|
208
208
|
"inputs": {
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
"primary",
|
|
226
226
|
"secondary"
|
|
227
227
|
],
|
|
228
|
-
"description": "RFC 0065
|
|
228
|
+
"description": "RFC 0065 — author hint that this terminal node's output is the workflow's primary deliverable (`primary`) or an auxiliary output (`secondary`). Advisory: hosts MUST execute the workflow identically regardless of value. Tooling MAY use the hint to pick which of N terminal nodes' outputs to surface as the run's canonical artifact. Unknown values + absent values fall back to default behavior (show all terminal outputs)."
|
|
229
229
|
},
|
|
230
230
|
"disabled": {
|
|
231
231
|
"type": "boolean",
|
|
@@ -247,22 +247,22 @@
|
|
|
247
247
|
},
|
|
248
248
|
"artifactType": {
|
|
249
249
|
"type": "string",
|
|
250
|
-
"description": "Artifact type this node produces or reviews (first-class typed field
|
|
250
|
+
"description": "Artifact type this node produces or reviews (first-class typed field — replaces the deprecated config.outputArtifactType bag entry)."
|
|
251
251
|
},
|
|
252
252
|
"cardType": {
|
|
253
253
|
"type": "string",
|
|
254
|
-
"description": "Explicit chat card type override (first-class typed field
|
|
254
|
+
"description": "Explicit chat card type override (first-class typed field — replaces the deprecated config.chatCard bag entry)."
|
|
255
255
|
},
|
|
256
256
|
"outputSensitivity": {
|
|
257
257
|
"type": "object",
|
|
258
258
|
"additionalProperties": {
|
|
259
259
|
"type": "boolean"
|
|
260
260
|
},
|
|
261
|
-
"description": "Per-output-port sensitivity overrides. Map of port name
|
|
261
|
+
"description": "Per-output-port sensitivity overrides. Map of port name → boolean. When true, the engine masks the named output value in `node.completed` event payloads. Layered on top of pack-level `nodes[].outputs[port].sensitive` declarations: workflow-level true takes precedence over pack-level false (and vice versa — last writer wins, but typically pack defaults are conservative and workflow overrides are explicit). See observability.md §Privacy classification (closes O5)."
|
|
262
262
|
},
|
|
263
263
|
"compensation": {
|
|
264
264
|
"type": "object",
|
|
265
|
-
"description": "RFC 0151
|
|
265
|
+
"description": "RFC 0151 §B — the inverse action for this node. OPTIONAL and closed. `nodeTypeId` MUST resolve at registration, so an unwind cannot fail on a typo discovered only during a failure. Inputs MUST derive from RECORDED FACTS: prompt or model regeneration MUST NOT construct a compensation input during replay, because a compensation built from a re-inferred value is not the inverse of what was actually done. A host MUST reject a compensation cycle.",
|
|
266
266
|
"additionalProperties": false,
|
|
267
267
|
"required": [
|
|
268
268
|
"nodeTypeId"
|
|
@@ -274,7 +274,7 @@
|
|
|
274
274
|
},
|
|
275
275
|
"inputMapping": {
|
|
276
276
|
"type": "object",
|
|
277
|
-
"description": "Derived from recorded facts only
|
|
277
|
+
"description": "Derived from recorded facts only — node outputs and run inputs already in the event log.",
|
|
278
278
|
"additionalProperties": true
|
|
279
279
|
},
|
|
280
280
|
"retry": {
|
|
@@ -293,17 +293,17 @@
|
|
|
293
293
|
},
|
|
294
294
|
"requiresApproval": {
|
|
295
295
|
"type": "boolean",
|
|
296
|
-
"description": "RFC 0151
|
|
296
|
+
"description": "RFC 0151 §C — an inverse action can itself be harmful (RFC 0147 R9), so it may be gated behind the same approval surface as a forward effect."
|
|
297
297
|
},
|
|
298
298
|
"waiveRequiresApproval": {
|
|
299
299
|
"type": "boolean",
|
|
300
|
-
"description": "RFC 0151
|
|
300
|
+
"description": "RFC 0151 §B/§E (S36, 2026-08-17) — OPTIONAL. When true, ABANDONING this inverse action (§E `skip with justification` or `terminate as uncompensated`) requires an RFC 0051 approval to have resolved `approved` first — if a human must authorize RUNNING an inverse, a human must authorize deciding it will NEVER run. DEFAULT = the obligation's EFFECTIVE `requiresApproval` (after the policy's `approvalScope` escalation, §B) — NOT false — so the field is purely additive: no existing document changes meaning. Stamped onto the obligation at MINT time like `requiresApproval` (a mid-flight redefinition cannot change who had to authorize). Does NOT apply to `substitute` (still an attempt to undo; a substitution is a new planVersion whose own `requiresApproval` governs it). No policy-level counterpart: because the default inherits the effective value, an `approvalScope` escalation escalates waives with it."
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
303
|
},
|
|
304
304
|
"irreversibleEffect": {
|
|
305
305
|
"type": "boolean",
|
|
306
|
-
"description": "RFC 0151
|
|
306
|
+
"description": "RFC 0151 §B (UQ4, resolved 2026-08-16) — the author states that this node's committed effect HAS NO INVERSE. OPTIONAL; absent or false means nothing (an undeclared compensator is still not implied). Mutually exclusive with `compensation`: a node declaring both is contradictory and a host MUST reject it at registration (`validation_error`). When true and the node's effect committed before an unwind starts, the plan records the node as `irreversible` (never completed) so the §D rollup caps at `partial` — a reader can no longer infer a full undo from a `completed` that quietly skipped it."
|
|
307
307
|
}
|
|
308
308
|
},
|
|
309
309
|
"additionalProperties": false,
|
|
@@ -385,14 +385,14 @@
|
|
|
385
385
|
"truthy",
|
|
386
386
|
"falsy"
|
|
387
387
|
],
|
|
388
|
-
"description": "Operator. `equals`/`notEquals`/`contains` compare `left` to `right`; `regex` matches `left` against `right`; `expression` evaluates `expression`. RFC 0134: `truthy`/`falsy` test the resolved value at `left` for JS-style truthiness and take NO `right` operand (the edge contributes iff `left` is truthy
|
|
388
|
+
"description": "Operator. `equals`/`notEquals`/`contains` compare `left` to `right`; `regex` matches `left` against `right`; `expression` evaluates `expression`. RFC 0134: `truthy`/`falsy` test the resolved value at `left` for JS-style truthiness and take NO `right` operand (the edge contributes iff `left` is truthy — resp. falsy/absent). `left` is required for all operators except `expression`."
|
|
389
389
|
},
|
|
390
390
|
"left": {
|
|
391
391
|
"type": "string",
|
|
392
392
|
"description": "Left operand path (e.g., 'status', 'output.approved'). Required for every operator except `expression`."
|
|
393
393
|
},
|
|
394
394
|
"right": {
|
|
395
|
-
"description": "Right operand value (any JSON value). Meaningless for `truthy`/`falsy` (RFC 0134)
|
|
395
|
+
"description": "Right operand value (any JSON value). Meaningless for `truthy`/`falsy` (RFC 0134) — a host MUST ignore it there, not error."
|
|
396
396
|
},
|
|
397
397
|
"expression": {
|
|
398
398
|
"type": "string",
|
|
@@ -507,7 +507,7 @@
|
|
|
507
507
|
"chat-message",
|
|
508
508
|
"channel-write"
|
|
509
509
|
],
|
|
510
|
-
"description": "Trigger discriminator. The `channel-write` variant fires a node when a named channel receives a write (closes C2
|
|
510
|
+
"description": "Trigger discriminator. The `channel-write` variant fires a node when a named channel receives a write (closes C2 — reactive cross-engine pattern). Its `config` shape: `{channel: string, onlyFrom?: 'child'|'parent'|'any', debounceMs?: integer}`. See channels-and-reducers.md §Distributed reducers."
|
|
511
511
|
},
|
|
512
512
|
"name": {
|
|
513
513
|
"type": "string"
|
|
@@ -564,12 +564,12 @@
|
|
|
564
564
|
"sensitive": {
|
|
565
565
|
"type": "boolean",
|
|
566
566
|
"default": false,
|
|
567
|
-
"description": "When true, the engine masks this variable's value in persisted `variable.changed` events, `state.snapshot` projections, and `RunSnapshot.variables`. Reads inside NodeModule executors work normally; only persistence + external surfaces mask. See observability.md
|
|
567
|
+
"description": "When true, the engine masks this variable's value in persisted `variable.changed` events, `state.snapshot` projections, and `RunSnapshot.variables`. Reads inside NodeModule executors work normally; only persistence + external surfaces mask. See observability.md §Privacy classification (closes O5)."
|
|
568
568
|
},
|
|
569
569
|
"format": {
|
|
570
570
|
"type": "string",
|
|
571
571
|
"minLength": 1,
|
|
572
|
-
"description": "RFC 0136 (`Active`). ADVISORY presentational hint for a `type: \"string\"` variable, drawn from the JSON-Schema format vocabulary (`email`, `uri`, `date`, `date-time`, `time`, `duration` are the v1 recognised set). Hosts SHOULD use it to choose an input affordance (e.g. an email keyboard). It is NOT a validation contract: a host MUST NOT reject a run, refuse a variable write, or fail validation because a value does not match, and MUST NOT assume a value matches when reading it. DELIBERATELY NOT AN ENUM
|
|
572
|
+
"description": "RFC 0136 (`Active`). ADVISORY presentational hint for a `type: \"string\"` variable, drawn from the JSON-Schema format vocabulary (`email`, `uri`, `date`, `date-time`, `time`, `duration` are the v1 recognised set). Hosts SHOULD use it to choose an input affordance (e.g. an email keyboard). It is NOT a validation contract: a host MUST NOT reject a run, refuse a variable write, or fail validation because a value does not match, and MUST NOT assume a value matches when reading it. DELIBERATELY NOT AN ENUM — an unrecognised value MUST round-trip and degrade to plain text rather than error (RFC 0136 requirement 2), which an enum would turn into a hard validation failure on a client-submitted (closed) shape. Ignored when `type` is not `\"string\"`. Orthogonal to `sensitive`: masking hides the VALUE on server-emitted surfaces, `format` describes the FIELD in the definition, so the two compose with no interaction."
|
|
573
573
|
}
|
|
574
574
|
},
|
|
575
575
|
"additionalProperties": false
|
|
@@ -648,7 +648,7 @@
|
|
|
648
648
|
"properties": {
|
|
649
649
|
"reducer": {
|
|
650
650
|
"type": "string",
|
|
651
|
-
"description": "Canonical names: 'replace', 'append', 'merge', 'counter', 'votes', 'feedback', 'message' (Multi-Agent Shift Phase 1
|
|
651
|
+
"description": "Canonical names: 'replace', 'append', 'merge', 'counter', 'votes', 'feedback', 'message' (Multi-Agent Shift Phase 1 — append-only + idempotent on `messageId`). Custom reducers MUST use 'vendor.<org>.<name>'.",
|
|
652
652
|
"pattern": "^(replace|append|merge|counter|votes|feedback|message|vendor\\.[a-z][a-z0-9_-]*\\.[a-z][a-z0-9_-]*)$"
|
|
653
653
|
},
|
|
654
654
|
"schema": {
|
|
@@ -664,7 +664,7 @@
|
|
|
664
664
|
"type": "integer",
|
|
665
665
|
"minimum": 1,
|
|
666
666
|
"maximum": 31536000000,
|
|
667
|
-
"description": "Optional entry-age TTL in milliseconds (closes C3). Applies to `append` / `votes` / `feedback` reducers; ignored on others. Engine drops entries older than this age (lazy: on read or next write). Range: 1..1 year. Replay-safe
|
|
667
|
+
"description": "Optional entry-age TTL in milliseconds (closes C3). Applies to `append` / `votes` / `feedback` reducers; ignored on others. Engine drops entries older than this age (lazy: on read or next write). Range: 1..1 year. Replay-safe — uses original event timestamps for comparison. See channels-and-reducers.md §Channel TTL."
|
|
668
668
|
},
|
|
669
669
|
"options": {
|
|
670
670
|
"type": "object",
|
|
@@ -686,18 +686,18 @@
|
|
|
686
686
|
"minimum": 1
|
|
687
687
|
},
|
|
688
688
|
"uniqueItems": true,
|
|
689
|
-
"description": "Older schema versions whose persisted writes are forward-readable under the CURRENT schema. The engine validates each old write against the current schema during fold; pass = include, fail = hard error `channel_schema_breaking_change`. Empty/omitted = no backward compat (any older write trips the breaking-change error). For breaking edits, authors create a new channel name + a copy node
|
|
689
|
+
"description": "Older schema versions whose persisted writes are forward-readable under the CURRENT schema. The engine validates each old write against the current schema during fold; pass = include, fail = hard error `channel_schema_breaking_change`. Empty/omitted = no backward compat (any older write trips the breaking-change error). For breaking edits, authors create a new channel name + a copy node — see channels-and-reducers.md §Channel schema migration."
|
|
690
690
|
},
|
|
691
691
|
"sensitive": {
|
|
692
692
|
"type": "boolean",
|
|
693
693
|
"default": false,
|
|
694
|
-
"description": "When true, the engine masks `channel.written` event payloads' `value` field. The reduced channel state in `RunSnapshot.channels` is also masked when read via the REST surface. See observability.md
|
|
694
|
+
"description": "When true, the engine masks `channel.written` event payloads' `value` field. The reduced channel state in `RunSnapshot.channels` is also masked when read via the REST surface. See observability.md §Privacy classification (closes O5)."
|
|
695
695
|
}
|
|
696
696
|
},
|
|
697
697
|
"additionalProperties": false
|
|
698
698
|
},
|
|
699
699
|
"ChannelAccess": {
|
|
700
|
-
"description": "Per-channel access control. See channels-and-reducers.md
|
|
700
|
+
"description": "Per-channel access control. See channels-and-reducers.md §Channel access control (closes C1). Three forms: 'public' (no restriction; same as omitting), 'private' (lockdown shorthand — equivalent to {readers: [], writers: []}), or an explicit {readers?, writers?} object where each side is independently scoped (omitted = open, present = strict allowlist).",
|
|
701
701
|
"oneOf": [
|
|
702
702
|
{
|
|
703
703
|
"const": "public"
|
|
@@ -799,7 +799,7 @@
|
|
|
799
799
|
"regulated"
|
|
800
800
|
],
|
|
801
801
|
"default": "public",
|
|
802
|
-
"description": "Top-level workflow sensitivity tier. Sets the `openwop.compliance_class` span attribute on every span the run produces. Drives default retention / masking / export-gating policy at observability collectors. See observability.md
|
|
802
|
+
"description": "Top-level workflow sensitivity tier. Sets the `openwop.compliance_class` span attribute on every span the run produces. Drives default retention / masking / export-gating policy at observability collectors. See observability.md §Privacy classification (closes O5)."
|
|
803
803
|
},
|
|
804
804
|
"complianceConfig": {
|
|
805
805
|
"type": "object",
|
|
@@ -849,7 +849,7 @@
|
|
|
849
849
|
},
|
|
850
850
|
"compensation": {
|
|
851
851
|
"$ref": "compensation-policy.schema.json",
|
|
852
|
-
"description": "RFC 0151
|
|
852
|
+
"description": "RFC 0151 §B — the workflow-level compensation policy (WHEN an unwind starts and HOW it runs). OPTIONAL and capability-gated: a host that advertises `capabilities.compensation` MUST validate it at registration; a host that does not MUST refuse the workflow with `capability_required` rather than accept a policy it will never honour. Node-level `nodes[].compensation` declarations remain valid without it — they describe the inverse action; this key requests the unwind."
|
|
853
853
|
}
|
|
854
854
|
},
|
|
855
855
|
"additionalProperties": false
|
|
@@ -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-22",
|
|
5
5
|
"detectors": [
|
|
6
6
|
{
|
|
7
7
|
"alias": "capabilities wrapper object",
|
|
@@ -296,6 +296,18 @@
|
|
|
296
296
|
"file": "schemas/v2/capabilities.schema.json",
|
|
297
297
|
"token": "testSeams",
|
|
298
298
|
"deprecation": "openwop.deprecation.observability-test-seams-facet"
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"alias": "v2 A2UI delta frame schema (RFC 0114 JSON-Patch transport)",
|
|
302
|
+
"file": "schemas/v2/a2ui-surface-delta-frame.schema.json",
|
|
303
|
+
"token": "RFC 0114",
|
|
304
|
+
"deprecation": "openwop.deprecation.v2-a2ui-delta-frame"
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"alias": "v2 a2uiSurface.deltaTransport facet",
|
|
308
|
+
"file": "spec/v2/declaration.json",
|
|
309
|
+
"token": "\"deltaTransport\"",
|
|
310
|
+
"deprecation": "openwop.deprecation.v2-a2ui-delta-transport-facet"
|
|
299
311
|
}
|
|
300
312
|
]
|
|
301
313
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"provenance": {
|
|
5
5
|
"suite": {
|
|
6
6
|
"package": "@openwop/openwop-conformance",
|
|
7
|
-
"version": "2.
|
|
7
|
+
"version": "2.36.0"
|
|
8
8
|
},
|
|
9
9
|
"note": "Derived from the corpus at generation time. Regenerate with --write; verify with --check."
|
|
10
10
|
},
|
|
@@ -419,5 +419,5 @@
|
|
|
419
419
|
"$id": "https://openwop.dev/spec/v1/workspace-file.schema.json"
|
|
420
420
|
}
|
|
421
421
|
],
|
|
422
|
-
"digest": "
|
|
422
|
+
"digest": "05353df11a21c56e43e356a53d8c73073461680b548c7b26f8622e6ffaae04d5"
|
|
423
423
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./deprecations.schema.json",
|
|
3
3
|
"version": 1,
|
|
4
|
-
"updated": "2026-09-
|
|
4
|
+
"updated": "2026-09-22",
|
|
5
5
|
"entries": [
|
|
6
6
|
{
|
|
7
7
|
"id": "openwop.deprecation.capabilities-wrapper",
|
|
@@ -958,6 +958,50 @@
|
|
|
958
958
|
}
|
|
959
959
|
],
|
|
960
960
|
"removalTrigger": "v1-end-of-support"
|
|
961
|
+
},
|
|
962
|
+
{
|
|
963
|
+
"id": "openwop.deprecation.v2-a2ui-delta-frame",
|
|
964
|
+
"status": "deprecated",
|
|
965
|
+
"surface": "`schemas/v2/a2ui-surface-delta-frame.schema.json` — the RFC 0114 JSON-Patch transport frame, seeded into v2 and never contracted there",
|
|
966
|
+
"kind": "artifact",
|
|
967
|
+
"deprecatedIn": "2.36 (RFC 0209)",
|
|
968
|
+
"authority": "spec/v2/ext/a2uiSurface/README.md §\"`deltaTransport` (deprecated)\" (RFC 0209 §D.15)",
|
|
969
|
+
"removeIn": "3.0",
|
|
970
|
+
"replacement": "schema-version-2 `ui.a2ui-surface` envelopes carrying A2UI `updateComponents` / `updateDataModel`, folded per surface (RFC 0209 §C.9)",
|
|
971
|
+
"codemod": null,
|
|
972
|
+
"note": "v2 only; v1 RFC 0114 stands. Removal minor: 2.38 at the earliest (two released minors after the 2.36 deprecation, RFC 0197 §A.2 R2), and only once RFC 0197 is Accepted and its gates (check-v2-retirement.mjs, check-v2-surface-monotone.mjs, a minor-aware check-removal-dates.mjs) are in openwop:check; removeIn moves from 3.0 to that minor in the same PR. Until then 3.0. No committed v2 bundle carries the frame (checked 2026-09-22).",
|
|
973
|
+
"sources": [
|
|
974
|
+
{
|
|
975
|
+
"file": "schemas/v2/a2ui-surface-delta-frame.schema.json",
|
|
976
|
+
"token": "RFC 0114"
|
|
977
|
+
}
|
|
978
|
+
]
|
|
979
|
+
},
|
|
980
|
+
{
|
|
981
|
+
"id": "openwop.deprecation.v2-a2ui-delta-transport-facet",
|
|
982
|
+
"status": "deprecated",
|
|
983
|
+
"surface": "`extensions.<org>.a2uiSurface.deltaTransport` in v2 — the RFC 0114 delta-transport facet",
|
|
984
|
+
"kind": "discovery-field",
|
|
985
|
+
"deprecatedIn": "2.36 (RFC 0209)",
|
|
986
|
+
"authority": "spec/v2/ext/a2uiSurface/README.md §\"`deltaTransport` (deprecated)\" (RFC 0209 §D.15)",
|
|
987
|
+
"removeIn": "3.0",
|
|
988
|
+
"replacement": "schema-version-2 `ui.a2ui-surface` envelopes carrying A2UI `updateComponents` / `updateDataModel` (RFC 0209 §C.9); a v2 host SHOULD NOT advertise the facet",
|
|
989
|
+
"codemod": null,
|
|
990
|
+
"note": "v2 only; v1 RFC 0114 stands. Removal minor: 2.38 at the earliest, on the same RFC 0197 conditions as openwop.deprecation.v2-a2ui-delta-frame; until then 3.0. No committed v2 bundle advertises the facet (checked 2026-09-22).",
|
|
991
|
+
"sources": [
|
|
992
|
+
{
|
|
993
|
+
"file": "RFCS/0209-v2-a2ui-surfaces-are-a2ui-v0-9.md",
|
|
994
|
+
"token": "`a2uiSurface.deltaTransport` facet are deprecated for major 2"
|
|
995
|
+
},
|
|
996
|
+
{
|
|
997
|
+
"file": "spec/v2/ext/a2uiSurface/README.md",
|
|
998
|
+
"token": "`deltaTransport` (deprecated)"
|
|
999
|
+
},
|
|
1000
|
+
{
|
|
1001
|
+
"file": "spec/v2/declaration.json",
|
|
1002
|
+
"token": "deltaTransport"
|
|
1003
|
+
}
|
|
1004
|
+
]
|
|
961
1005
|
}
|
|
962
1006
|
]
|
|
963
1007
|
}
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"removeIn": {
|
|
96
96
|
"type": "string",
|
|
97
97
|
"pattern": "^[0-9]+\\.[0-9]+$",
|
|
98
|
-
"description": "Protocol major.minor at which the surface is removed. v1.x deprecations remove no earlier than 2.0 (COMPATIBILITY.md \u00a77)."
|
|
98
|
+
"description": "Protocol major.minor at which the surface is removed. v1.x deprecations remove no earlier than 2.0 (COMPATIBILITY.md \u00a77). A `v2-minor` row (RFC 0197) instead names the 2.x minor at which the v2 surface is removed; `check-removal-dates.mjs` compares it to `spec/v2/release.json` `version` minor-by-minor, not major-by-major."
|
|
99
99
|
},
|
|
100
100
|
"replacement": {
|
|
101
101
|
"type": "string",
|
|
@@ -141,7 +141,8 @@
|
|
|
141
141
|
"type": "string",
|
|
142
142
|
"enum": [
|
|
143
143
|
"v2.0-cut",
|
|
144
|
-
"v1-end-of-support"
|
|
144
|
+
"v1-end-of-support",
|
|
145
|
+
"v2-minor"
|
|
145
146
|
]
|
|
146
147
|
},
|
|
147
148
|
{
|
|
@@ -150,14 +151,100 @@
|
|
|
150
151
|
"type": "string",
|
|
151
152
|
"enum": [
|
|
152
153
|
"v2.0-cut",
|
|
153
|
-
"v1-end-of-support"
|
|
154
|
+
"v1-end-of-support",
|
|
155
|
+
"v2-minor"
|
|
154
156
|
]
|
|
155
157
|
},
|
|
156
158
|
"minItems": 1,
|
|
157
159
|
"uniqueItems": true
|
|
158
160
|
}
|
|
159
161
|
],
|
|
160
|
-
"description": "RFC 0176 \u00a7C.2: the event(s) that remove the surface. `v2.0-cut` \u2014 absent from the v2 representation from the cut; `v1-end-of-support` \u2014 removed from the v1 representation when every INTEROP-MATRIX host has produced a non-vacuous v2 bundle plus 90 days (charter Phase 0 rule). A SET, because \u00a7C.2 gives one row two independent removal events: the wrapper, the dotted mirror and Capabilities-Etag are absent from v2 at the cut AND removed from v1 at end-of-support, and a scalar could express only one. Until 2026-09-04 those rows carried `v1-end-of-support` alone while `v2-well-known-one-resource` asserted the `v2.0-cut` obligation by name \u2014 the scenario was right about the effect and the data could not say so. A bare string remains valid for rows with one trigger. Optional; removeIn stays the version."
|
|
162
|
+
"description": "RFC 0176 \u00a7C.2: the event(s) that remove the surface. `v2.0-cut` \u2014 absent from the v2 representation from the cut; `v1-end-of-support` \u2014 removed from the v1 representation when every INTEROP-MATRIX host has produced a non-vacuous v2 bundle plus 90 days (charter Phase 0 rule). A SET, because \u00a7C.2 gives one row two independent removal events: the wrapper, the dotted mirror and Capabilities-Etag are absent from v2 at the cut AND removed from v1 at end-of-support, and a scalar could express only one. Until 2026-09-04 those rows carried `v1-end-of-support` alone while `v2-well-known-one-resource` asserted the `v2.0-cut` obligation by name \u2014 the scenario was right about the effect and the data could not say so. A bare string remains valid for rows with one trigger. Optional; removeIn stays the version. `v2-minor` \u2014 RFC 0197 \u00a7A.2: removed from the v2 representation at `removeIn` (a 2.N minor, inside the major), admitted only when `scripts/check-v2-retirement.mjs` proves predicates R1\u2013R6 for the row. A `v2-minor` row MUST carry `retirement`."
|
|
163
|
+
},
|
|
164
|
+
"retirement": {
|
|
165
|
+
"type": "object",
|
|
166
|
+
"additionalProperties": false,
|
|
167
|
+
"description": "RFC 0197 \u00a7A.2 \u2014 the machine-readable retirement record. REQUIRED when `removalTrigger` includes `v2-minor`, and meaningless otherwise. `check-v2-retirement.mjs` reads every field: it is the row\u2019s claim about WHAT is being retired, which the gate then falsifies against the committed bundles, the registry census, the declaration and the public history.",
|
|
168
|
+
"required": [
|
|
169
|
+
"class",
|
|
170
|
+
"family",
|
|
171
|
+
"deprecatedInMinor"
|
|
172
|
+
],
|
|
173
|
+
"properties": {
|
|
174
|
+
"class": {
|
|
175
|
+
"enum": [
|
|
176
|
+
"family",
|
|
177
|
+
"facet",
|
|
178
|
+
"enum-member",
|
|
179
|
+
"envelope-kind"
|
|
180
|
+
],
|
|
181
|
+
"description": "RFC 0197 R4 \u2014 the four kinds whose ABSENCE the 2.0 contract already defines. A REQUIRED property, an endpoint, an error code\u2019s meaning and a header are never retirable inside the major."
|
|
182
|
+
},
|
|
183
|
+
"persistence": {
|
|
184
|
+
"enum": [
|
|
185
|
+
"advertised",
|
|
186
|
+
"persisted"
|
|
187
|
+
],
|
|
188
|
+
"default": "advertised",
|
|
189
|
+
"description": "`advertised`: the schema drops the member at `removeIn` (a family, a facet, an advertised enum value). `persisted`: the member STAYS in the reader schema, annotated `x-openwop-retired-in`, and only emission is forbidden (RFC 0197 \u00a7A.3)."
|
|
190
|
+
},
|
|
191
|
+
"family": {
|
|
192
|
+
"type": "string",
|
|
193
|
+
"minLength": 1,
|
|
194
|
+
"description": "`spec/v2/declaration.json` `families[].key` of the family that ADVERTISES the surface. RFC 0197 R5 reads that row\u2019s `maturity`."
|
|
195
|
+
},
|
|
196
|
+
"deprecatedInMinor": {
|
|
197
|
+
"type": "string",
|
|
198
|
+
"pattern": "^2\\.[0-9]+$",
|
|
199
|
+
"description": "The 2.x minor in which the deprecation row was announced. RFC 0197 R2 requires `removeIn` to be at least two minors later; the 30-day leg is read from the public history, never from this field."
|
|
200
|
+
},
|
|
201
|
+
"discovery": {
|
|
202
|
+
"type": "object",
|
|
203
|
+
"additionalProperties": false,
|
|
204
|
+
"required": [
|
|
205
|
+
"path"
|
|
206
|
+
],
|
|
207
|
+
"description": "Where the surface would appear in a host\u2019s v2 discovery document. RFC 0197 R3 scans every committed `evidence/v2-host-bundles/*.json` `discovery.document` at this path.",
|
|
208
|
+
"properties": {
|
|
209
|
+
"path": {
|
|
210
|
+
"type": "string",
|
|
211
|
+
"minLength": 1,
|
|
212
|
+
"description": "Dotted path inside `discovery.document`, e.g. `connections.transports` or `packs.testMode`."
|
|
213
|
+
},
|
|
214
|
+
"value": {
|
|
215
|
+
"description": "When present, only this value at `path` (or this member of an array at `path`) counts as carrying the surface; when absent, presence of the path is enough."
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
"manifest": {
|
|
220
|
+
"type": "object",
|
|
221
|
+
"additionalProperties": false,
|
|
222
|
+
"required": [
|
|
223
|
+
"kinds",
|
|
224
|
+
"path"
|
|
225
|
+
],
|
|
226
|
+
"description": "Where the surface would appear in a PUBLISHED registry manifest. RFC 0197 R3\u2019s registry leg reads the `registryManifestCensus` that `generate-cross-repo-evidence.mjs` writes for this row id.",
|
|
227
|
+
"properties": {
|
|
228
|
+
"kinds": {
|
|
229
|
+
"type": "array",
|
|
230
|
+
"minItems": 1,
|
|
231
|
+
"items": {
|
|
232
|
+
"type": "string",
|
|
233
|
+
"minLength": 1
|
|
234
|
+
},
|
|
235
|
+
"description": "Manifest kinds to census, e.g. `[\"connection-pack\"]`."
|
|
236
|
+
},
|
|
237
|
+
"path": {
|
|
238
|
+
"type": "string",
|
|
239
|
+
"minLength": 1,
|
|
240
|
+
"description": "Dotted path inside the manifest."
|
|
241
|
+
},
|
|
242
|
+
"value": {
|
|
243
|
+
"description": "When present, only this value at `path` counts."
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
161
248
|
}
|
|
162
249
|
},
|
|
163
250
|
"allOf": [
|
|
@@ -196,6 +283,34 @@
|
|
|
196
283
|
"note"
|
|
197
284
|
]
|
|
198
285
|
}
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"$comment": "RFC 0197 \u00a7A.2 \u2014 a `v2-minor` trigger without a `retirement` record is a claim the gate cannot falsify, so the schema refuses it.",
|
|
289
|
+
"if": {
|
|
290
|
+
"properties": {
|
|
291
|
+
"removalTrigger": {
|
|
292
|
+
"anyOf": [
|
|
293
|
+
{
|
|
294
|
+
"const": "v2-minor"
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"type": "array",
|
|
298
|
+
"contains": {
|
|
299
|
+
"const": "v2-minor"
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
]
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
"required": [
|
|
306
|
+
"removalTrigger"
|
|
307
|
+
]
|
|
308
|
+
},
|
|
309
|
+
"then": {
|
|
310
|
+
"required": [
|
|
311
|
+
"retirement"
|
|
312
|
+
]
|
|
313
|
+
}
|
|
199
314
|
}
|
|
200
315
|
]
|
|
201
316
|
}
|