@openwop/spec-artifacts 2.0.0-rc.0 → 2.0.0-rc.2
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 +17 -17
- package/api/seams-v2.yaml +216 -3
- package/api/v2/asyncapi.yaml +1 -1
- package/api/v2/openapi.yaml +1 -1
- package/package.json +1 -1
- package/schemas/v2/capabilities.schema.json +27 -0
- package/schemas/v2/certification-bundle.schema.json +45 -4
- package/schemas/v2/error-envelope.schema.json +5 -1
- package/schemas/v2/node-pack-manifest.schema.json +10 -0
- package/schemas/v2/registry-version-manifest.schema.json +9 -27
- package/schemas/v2/run-event.schema.json +2 -1
- package/spec/v1/core-standard-manifest.json +2 -2
- package/spec/v1/gaps.json +20 -20
- package/spec/v2/declaration.json +1 -0
- package/spec/v2/errors.json +18 -0
- package/spec/v2/facets/webhooks.schema.json +24 -1
- package/spec/v2/release.json +1 -1
package/CORPUS-STAMP.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_comment": "Provenance of @openwop/spec-artifacts (RFC 0168 §D.2). files: SHA-256 per file; the conformance suite compares the installed peer against dist/spec-artifacts.lock.json at start.",
|
|
3
3
|
"package": "@openwop/spec-artifacts",
|
|
4
|
-
"version": "2.0.0-rc.
|
|
4
|
+
"version": "2.0.0-rc.2",
|
|
5
5
|
"corpusTag": null,
|
|
6
6
|
"files": {
|
|
7
7
|
"api/.redocly.lint-ignore.yaml": "bf5a8350b88a72fa43f59605ed8d903ed24b6cfccda5e45509c9f6ed9ee4e712",
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
"api/grpc/openwop.proto": "c3e72bb17cba514ee98feb6434e6c9b6ea6795bfd086489ec69fd882dd1ad977",
|
|
10
10
|
"api/openapi.yaml": "39081c59fb696159806b0f2f9a42e7e9ff830d622fcf2ad4159b21357580a955",
|
|
11
11
|
"api/redocly.yaml": "b0604c89b2ca6d5076ec25725c539dad44a741a811fe524439ee6daef8baa09f",
|
|
12
|
-
"api/seams-v2.yaml": "
|
|
13
|
-
"api/v2/asyncapi.yaml": "
|
|
14
|
-
"api/v2/openapi.yaml": "
|
|
12
|
+
"api/seams-v2.yaml": "7997be82785d963789a452f76455dd91f51a03c227e83706325a8b67d3d16aeb",
|
|
13
|
+
"api/v2/asyncapi.yaml": "aeed4cbeb832cfcd4de46639a2b5a8981406d307b73e3a9d11a645eb0726caff",
|
|
14
|
+
"api/v2/openapi.yaml": "cbbf5df16473902c3c36b5b048ba80b5b35336c06fd48c8ba32f4b1858dd1807",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
16
|
"schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "c9365918f993f943b4b619d42551eb066a1ed33a08d895d51b395432a5b1f1bc",
|
|
@@ -115,8 +115,8 @@
|
|
|
115
115
|
"schemas/v2/artifact-type-pack-manifest.schema.json": "c911757562e521cb4f31a47c097f562573b64087efe60c8acb81fd352367d300",
|
|
116
116
|
"schemas/v2/audit-verify-result.schema.json": "cb54c4d89ba5dfb73f49aa8959a980be65c2dc2a87a12f71ba36d3e836fe85da",
|
|
117
117
|
"schemas/v2/budget-policy.schema.json": "c7449daeb6e1d95e7a047b8c2814d3d54748697c27046972834874867d9b5f4c",
|
|
118
|
-
"schemas/v2/capabilities.schema.json": "
|
|
119
|
-
"schemas/v2/certification-bundle.schema.json": "
|
|
118
|
+
"schemas/v2/capabilities.schema.json": "b6191deddf6bee19470eee9a45bb520de0d17385c195de6e3b8c5cb6d9520238",
|
|
119
|
+
"schemas/v2/certification-bundle.schema.json": "02aa15f17644d902a9df06a99cfdaf51273b0a9cca0d0ef515d5da03be01fb09",
|
|
120
120
|
"schemas/v2/channel-presence-payload.schema.json": "9475d46f358d21c19126e78204987a5633979917a2293653354ef5c5e044d54e",
|
|
121
121
|
"schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
|
|
122
122
|
"schemas/v2/chat-card-pack-manifest.schema.json": "566982ce509a96d1619d58a72e383eff0773fe43fc65e4bfc85a4fe158f4eaff",
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"schemas/v2/envelopes/schema.request.schema.json": "be2c5f7aa881cdd252ccff47ac02193659e1393633a1541f4297383205d384a2",
|
|
142
142
|
"schemas/v2/envelopes/schema.response.schema.json": "d049a081267c06c28879c331b147f3ed821b14ccfd93005c67aff64db0a8c68e",
|
|
143
143
|
"schemas/v2/envelopes/ui.a2ui-surface.schema.json": "0a06fbbdc8ba797a6818c79336a98e211ac5ba5747945b4e4098072cd3974d79",
|
|
144
|
-
"schemas/v2/error-envelope.schema.json": "
|
|
144
|
+
"schemas/v2/error-envelope.schema.json": "d550beeab958b528c8734fd32e74c438006b99172c5c586f9e0af20ef4b2bee7",
|
|
145
145
|
"schemas/v2/eval-summary.schema.json": "dfc995c8481ed212e6f3d83de982547898a7938be8c891ddb0d3efe84352908d",
|
|
146
146
|
"schemas/v2/export-bundle.schema.json": "bd28905a7729437ab7f2ad8bb33e13a371b2bf5605a7eb2962a0d246de312d69",
|
|
147
147
|
"schemas/v2/form-content-pack-manifest.schema.json": "307884e57946703b6f86ec283034bf56beb68bea4a000743ebbc9eebeed31b07",
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
"schemas/v2/localized-content-section.schema.json": "29c7bad0ad9ebc6c45211282e8afb3fdb35a4ca075ce0404b6e2c29f35fa5313",
|
|
157
157
|
"schemas/v2/memory-entry.schema.json": "290576ae84f4fef4cdf975932b87963283b11c50ea3d2654b32cd96aa6537c3d",
|
|
158
158
|
"schemas/v2/memory-list-options.schema.json": "f66703bccb68efb28391c273abb66aa117ee5b5ce475c477846ed700c336afcd",
|
|
159
|
-
"schemas/v2/node-pack-manifest.schema.json": "
|
|
159
|
+
"schemas/v2/node-pack-manifest.schema.json": "771328fa73691e7f08fca3c628c4e8ba68fa4e43529faaf1a6358aecf26b13f2",
|
|
160
160
|
"schemas/v2/orchestrator-decision.schema.json": "2da17538e84cfbe70151eb118f1ccf670cff58b8697148e394074d32ac4af6b4",
|
|
161
161
|
"schemas/v2/org-chart-responsibility-view.schema.json": "ebac7d2889bfd659bcf30311efb0d6eb0c7e940b972b6b62da69c7351b5bb586",
|
|
162
162
|
"schemas/v2/pack-lockfile.schema.json": "2685417702c105146b780cd99154296a46578fbb10d81c8c713348ee26fea898",
|
|
@@ -165,12 +165,12 @@
|
|
|
165
165
|
"schemas/v2/prompt-ref.schema.json": "11538fa36a7a652c93100cac4f1857eb4130137b546e3d94890618636d44b729",
|
|
166
166
|
"schemas/v2/prompt-template.schema.json": "494fc83028cb3af5dbb8a943d0e83b2348f7775e9fa02369162bcb58a6f81559",
|
|
167
167
|
"schemas/v2/proposal.schema.json": "72623553611f00e87b4c7972d69ebeba73c2222b01ead75a44a0c2114b679fea",
|
|
168
|
-
"schemas/v2/registry-version-manifest.schema.json": "
|
|
168
|
+
"schemas/v2/registry-version-manifest.schema.json": "270704ebc6bae63be949efbf9503578938b103733db9da3cb8fcbee1cd7684dd",
|
|
169
169
|
"schemas/v2/residency.schema.json": "af2658a7104cbcacd0e20a91226271c4a77f91ef46ae97612768fe743e6091d8",
|
|
170
170
|
"schemas/v2/run-ancestry-response.schema.json": "907e36341ba83a2147a5d76963950b6dcd47506b663ecbccae9dfa553f3724d3",
|
|
171
171
|
"schemas/v2/run-diff-response.schema.json": "6ab6cd265dc7e0a2086c6659c46aa0e7b43e6302949f0adac5d7deb1c7c0ecd3",
|
|
172
172
|
"schemas/v2/run-event-payloads.schema.json": "8eb0e05e1bd3399b0e2654a1ec5a13198ac4ec8459a1fcbfd800ab2d0a0ae8c6",
|
|
173
|
-
"schemas/v2/run-event.schema.json": "
|
|
173
|
+
"schemas/v2/run-event.schema.json": "4ec8eb048a79ca1343e00aa018acbf86814b5eda6768add6b17e8d7b83638fdf",
|
|
174
174
|
"schemas/v2/run-options.schema.json": "6d6052596ab0f17acfb00fdfc89907da7724f952e5ffbe1f81d94ba23d4c77cd",
|
|
175
175
|
"schemas/v2/run-orchestrator-decided-event.schema.json": "bb76e15ff72e669f12938684033b55dc567470e1a378e19ffc3fa0e4034ab5a7",
|
|
176
176
|
"schemas/v2/run-snapshot.schema.json": "e77bf491d11c1414e62ed84cbf0c1d7149279b133a2101dc8f5eec89d3e45204",
|
|
@@ -198,21 +198,21 @@
|
|
|
198
198
|
"schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
|
|
199
199
|
"spec/v1/alias-detectors.json": "fee4594ef49953953ffcd0b3813300067d16b3e65ebff2aac722034ac9b3f545",
|
|
200
200
|
"spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
|
|
201
|
-
"spec/v1/core-standard-manifest.json": "
|
|
201
|
+
"spec/v1/core-standard-manifest.json": "6d0dd7cec8085554565060d2b5ed3abdcd3d13d9940404de33cac17633f3c23a",
|
|
202
202
|
"spec/v1/deprecations.json": "520d79927a8ed43ccf62c207a7cf6cf7b19b16e00bbbbdf0410667e939c19d85",
|
|
203
203
|
"spec/v1/deprecations.schema.json": "4cdbbb8eb9c0092913a5704c943880f0c8581bcf0f640a7df5a84105d53c8aee",
|
|
204
204
|
"spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
|
|
205
205
|
"spec/v1/event-codemap.schema.json": "d52caf29071e3784d4c20259cdbd5a7b533986548a440bb632a80b82cadd7ea5",
|
|
206
206
|
"spec/v1/extensions.json": "4d7ba68bae7c7f50cc655b94646ad25945a5dd63b703d43c1d015470141cd668",
|
|
207
|
-
"spec/v1/gaps.json": "
|
|
207
|
+
"spec/v1/gaps.json": "96ca051cb20f1a669b355d67a89421c56fef28aa5e6710c9519f592f26af33a3",
|
|
208
208
|
"spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
|
|
209
209
|
"spec/v1/migrations.json": "8839497d6a4830b53fa7867014a8336f0d725ef2346352e54fb580b7947897af",
|
|
210
210
|
"spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
|
|
211
211
|
"spec/v1/operation-path-manifest.json": "5f5f4e3842669371730ebbd1aace3fb794192615f0018dc144f484ba5db82ac3",
|
|
212
212
|
"spec/v1/spec-gaps.json": "6cc9962c6b969f632e07a78b52a4f61447ff579e2990cbae989866f584a86042",
|
|
213
|
-
"spec/v2/declaration.json": "
|
|
213
|
+
"spec/v2/declaration.json": "892b6fae1e87f279ff75451f67ffab2a63ef883203f8066886bd60f165469348",
|
|
214
214
|
"spec/v2/declaration.schema.json": "b0881a76228dfbd1b85a2ec7b7259a60197f768344535cdb475db6ff719b0e54",
|
|
215
|
-
"spec/v2/errors.json": "
|
|
215
|
+
"spec/v2/errors.json": "ad1725dc7c11002450e8abc682858eb5c11952a0718ea8ef6bdb2fb5ae6e7e21",
|
|
216
216
|
"spec/v2/event-codemap.json": "37869a03cdfd8758b57e6f350641a6ebbd383231cebda51f5473ad85f94ab74c",
|
|
217
217
|
"spec/v2/event-codemap.schema.json": "ce2d0ca085d7668d7ef745d2560b385ec6881d24a6d4b47c49931986b2ba642d",
|
|
218
218
|
"spec/v2/ext/provider-idempotency/registry.json": "5b5fecad604fb4ab38da39f5abe697a4e57b05406c398f8afeb377331b2bd965",
|
|
@@ -224,11 +224,11 @@
|
|
|
224
224
|
"spec/v2/facets/mcp.schema.json": "f56609fe24ba6160ad29ae31aa16043354ff005e5cb6a0f3871c4d226087cc08",
|
|
225
225
|
"spec/v2/facets/replay.schema.json": "0a5aefb0108c708c6794fadd533cf256709704c4f16dbf44cd63fa8980c78018",
|
|
226
226
|
"spec/v2/facets/sandbox.schema.json": "e75f54486d387b2d089791aa93b5093cd1450f1920753a0f97fc23acdfe978ed",
|
|
227
|
-
"spec/v2/facets/webhooks.schema.json": "
|
|
227
|
+
"spec/v2/facets/webhooks.schema.json": "0b766033ef4b4c6c2ac6f9979a19843ba024d3a1d1576972dcb55aaba52f1b9a",
|
|
228
228
|
"spec/v2/path-manifest.json": "034152e09b1458c66810d4050e20a273b2b9b8fe2d92b66e8b819477de58a1be",
|
|
229
229
|
"spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
|
|
230
230
|
"spec/v2/profiles.json": "1f0ee40491131cf561ef19a0394c47ba476b4567514fe16befb6cada4a10a5a4",
|
|
231
|
-
"spec/v2/release.json": "
|
|
231
|
+
"spec/v2/release.json": "ef05b0ec4ef4296dfbbacf37e97612b3c1f8d11b701890caa7b9c8462eab8359"
|
|
232
232
|
},
|
|
233
|
-
"corpusCommit": "
|
|
233
|
+
"corpusCommit": "18c32663eb8acfe76d9b5906f69c82ed214987e0"
|
|
234
234
|
}
|
package/api/seams-v2.yaml
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
openapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: OpenWOP conformance seams profile (openwop-conformance-seams-v2)
|
|
4
|
-
version: 2.0.0-rc.
|
|
4
|
+
version: 2.0.0-rc.2
|
|
5
5
|
description: 'GENERATED by scripts/derive-v2-api.py. RFC 0168 §C: the seams are a versioned conformance profile with their
|
|
6
6
|
own document and path space (/conformance/seams/…), validated against the canonical v2 schemas with no tolerance path,
|
|
7
7
|
forbidden from the capability namespace (a host advertises the profile, never a testSeams flag). This document carries
|
|
8
|
-
the nine operations the v1 canonical document used to carry; the remaining host-sample-test-seams.md
|
|
9
|
-
the
|
|
8
|
+
the nine operations the v1 canonical document used to carry; the 2.0.0 suite driver (P3-E2) rewrites the remaining host-sample-test-seams.md
|
|
9
|
+
paths into this space, and P3-E3 adds the two RFC 0176 seams (event-log seed, inbound webhook receiver).'
|
|
10
10
|
servers:
|
|
11
11
|
- url: https://{host}
|
|
12
12
|
description: openwop-compliant server
|
|
@@ -514,6 +514,219 @@ paths:
|
|
|
514
514
|
application/json:
|
|
515
515
|
schema:
|
|
516
516
|
$ref: ../schemas/v2/error-envelope.schema.json
|
|
517
|
+
/conformance/seams/sample/event-log/seed:
|
|
518
|
+
post:
|
|
519
|
+
tags:
|
|
520
|
+
- Seams
|
|
521
|
+
operationId: seedEra2EventLog
|
|
522
|
+
summary: Persist a run whose event log is in v1 vocabulary (era 2) — RFC 0176 §A/§B/§C witnesses
|
|
523
|
+
description: 'The host MUST persist the rows verbatim (v1 `type` strings, the given `sequence` space, no era stamp:
|
|
524
|
+
the run reads as era `2` by the absent-⇒-`2` rule of persistence.md) and MUST NOT translate at write time; the read
|
|
525
|
+
projection is what the scenarios `v2-v1-events-translated`, `v2-unmapped-type-refused`, `v2-fork-a-v1-run` and `v2-pinned-run-disposition`
|
|
526
|
+
witness. `status` is the snapshot status the seeded run holds.'
|
|
527
|
+
requestBody:
|
|
528
|
+
required: true
|
|
529
|
+
content:
|
|
530
|
+
application/json:
|
|
531
|
+
schema:
|
|
532
|
+
type: object
|
|
533
|
+
additionalProperties: false
|
|
534
|
+
required:
|
|
535
|
+
- eventLogSchemaVersion
|
|
536
|
+
- status
|
|
537
|
+
- events
|
|
538
|
+
properties:
|
|
539
|
+
eventLogSchemaVersion:
|
|
540
|
+
const: 2
|
|
541
|
+
status:
|
|
542
|
+
type: string
|
|
543
|
+
enum:
|
|
544
|
+
- running
|
|
545
|
+
- completed
|
|
546
|
+
- failed
|
|
547
|
+
- cancelled
|
|
548
|
+
events:
|
|
549
|
+
type: array
|
|
550
|
+
minItems: 1
|
|
551
|
+
items:
|
|
552
|
+
type: object
|
|
553
|
+
additionalProperties: false
|
|
554
|
+
required:
|
|
555
|
+
- type
|
|
556
|
+
- sequence
|
|
557
|
+
- payload
|
|
558
|
+
properties:
|
|
559
|
+
type:
|
|
560
|
+
type: string
|
|
561
|
+
sequence:
|
|
562
|
+
type: integer
|
|
563
|
+
minimum: 0
|
|
564
|
+
payload:
|
|
565
|
+
type: object
|
|
566
|
+
timestamp:
|
|
567
|
+
type: string
|
|
568
|
+
format: date-time
|
|
569
|
+
causationId:
|
|
570
|
+
type: string
|
|
571
|
+
responses:
|
|
572
|
+
'201':
|
|
573
|
+
description: The seeded run.
|
|
574
|
+
content:
|
|
575
|
+
application/json:
|
|
576
|
+
schema:
|
|
577
|
+
type: object
|
|
578
|
+
additionalProperties: false
|
|
579
|
+
required:
|
|
580
|
+
- runId
|
|
581
|
+
properties:
|
|
582
|
+
runId:
|
|
583
|
+
$ref: ../schemas/v2/ids.schema.json#/$defs/runId
|
|
584
|
+
'400':
|
|
585
|
+
$ref: '#/components/responses/ValidationError'
|
|
586
|
+
'401':
|
|
587
|
+
$ref: '#/components/responses/Unauthenticated'
|
|
588
|
+
/conformance/seams/sample/effect-seams/fire:
|
|
589
|
+
post:
|
|
590
|
+
tags:
|
|
591
|
+
- Seams
|
|
592
|
+
operationId: fireEffectSeam
|
|
593
|
+
summary: Fire one named effect-seam manifest row inside a run — RFC 0173 §C no-re-fire witness
|
|
594
|
+
description: 'The host runs a workflow that drives the named seam once. The scenario then forks the run in `replay`
|
|
595
|
+
mode and reads `GET /runs/{runId}/effects` on the fork: a seam whose manifest row says `branchReFires: false` MUST
|
|
596
|
+
NOT produce a new effect attempt there. The witness is the host own Layer-2 ledger, so the leg needs no externally
|
|
597
|
+
reachable receiver. Without this seam the replay-suppression obligation is only claims-checkable.'
|
|
598
|
+
requestBody:
|
|
599
|
+
required: true
|
|
600
|
+
content:
|
|
601
|
+
application/json:
|
|
602
|
+
schema:
|
|
603
|
+
type: object
|
|
604
|
+
additionalProperties: false
|
|
605
|
+
required:
|
|
606
|
+
- seam
|
|
607
|
+
properties:
|
|
608
|
+
seam:
|
|
609
|
+
type: string
|
|
610
|
+
minLength: 1
|
|
611
|
+
description: The `seam` value of a row in GET /host/effect-seams.
|
|
612
|
+
receiverUrl:
|
|
613
|
+
type: string
|
|
614
|
+
format: uri
|
|
615
|
+
description: Optional destination for seams whose kind needs one. Omitted, the host uses its own unreachable
|
|
616
|
+
fixture destination — the witness is the effect ledger, not delivery.
|
|
617
|
+
responses:
|
|
618
|
+
'201':
|
|
619
|
+
description: The run that fired the seam.
|
|
620
|
+
content:
|
|
621
|
+
application/json:
|
|
622
|
+
schema:
|
|
623
|
+
type: object
|
|
624
|
+
additionalProperties: false
|
|
625
|
+
required:
|
|
626
|
+
- runId
|
|
627
|
+
properties:
|
|
628
|
+
runId:
|
|
629
|
+
$ref: ../schemas/v2/ids.schema.json#/$defs/runId
|
|
630
|
+
'400':
|
|
631
|
+
$ref: '#/components/responses/ValidationError'
|
|
632
|
+
'401':
|
|
633
|
+
$ref: '#/components/responses/Unauthenticated'
|
|
634
|
+
'404':
|
|
635
|
+
$ref: '#/components/responses/NotFound'
|
|
636
|
+
/conformance/seams/sample/test/idempotency/effect-retry:
|
|
637
|
+
post:
|
|
638
|
+
tags:
|
|
639
|
+
- Seams
|
|
640
|
+
operationId: forceEffectTransportRetry
|
|
641
|
+
summary: Drive one effect through the suite fixture provider with a forced transport retry — RFC 0173 §D.2 G4 witness
|
|
642
|
+
description: 'The host issues one outbound effect to `providerUrl` and retries it at the transport layer. The suite
|
|
643
|
+
fixture provider records the idempotency key of each attempt: a Layer-2 host MUST present the SAME business-identity
|
|
644
|
+
key across both attempts, so a provider that sees a changed key fails the leg. Without this seam the effect-identity
|
|
645
|
+
obligation is only claims-checkable.'
|
|
646
|
+
requestBody:
|
|
647
|
+
required: true
|
|
648
|
+
content:
|
|
649
|
+
application/json:
|
|
650
|
+
schema:
|
|
651
|
+
type: object
|
|
652
|
+
additionalProperties: false
|
|
653
|
+
required:
|
|
654
|
+
- providerUrl
|
|
655
|
+
properties:
|
|
656
|
+
providerUrl:
|
|
657
|
+
type: string
|
|
658
|
+
format: uri
|
|
659
|
+
description: The suite's fixture provider; it records each attempt's idempotency key.
|
|
660
|
+
responses:
|
|
661
|
+
'201':
|
|
662
|
+
description: The run and effect that were retried.
|
|
663
|
+
content:
|
|
664
|
+
application/json:
|
|
665
|
+
schema:
|
|
666
|
+
type: object
|
|
667
|
+
additionalProperties: false
|
|
668
|
+
required:
|
|
669
|
+
- runId
|
|
670
|
+
- effectId
|
|
671
|
+
properties:
|
|
672
|
+
runId:
|
|
673
|
+
$ref: ../schemas/v2/ids.schema.json#/$defs/runId
|
|
674
|
+
effectId:
|
|
675
|
+
type: string
|
|
676
|
+
minLength: 1
|
|
677
|
+
'400':
|
|
678
|
+
$ref: '#/components/responses/ValidationError'
|
|
679
|
+
'401':
|
|
680
|
+
$ref: '#/components/responses/Unauthenticated'
|
|
681
|
+
/conformance/seams/sample/webhooks/receive:
|
|
682
|
+
post:
|
|
683
|
+
tags:
|
|
684
|
+
- Seams
|
|
685
|
+
operationId: receiveWebhookDelivery
|
|
686
|
+
summary: Run a webhook delivery through the host's inbound receiver — RFC 0176 §D.2 witness
|
|
687
|
+
description: The v2 host as a subscriber. The host verifies `headers` + `body` with its production verifier using `secret`
|
|
688
|
+
as the subscription secret and reports the verdict; an `X-openwop-*`-only scheme-`v1` delivery over `{timestamp}.{rawBody}`
|
|
689
|
+
MUST be accepted (`v2-v1-signed-webhook-accepted`), and a tampered signature MUST be refused.
|
|
690
|
+
requestBody:
|
|
691
|
+
required: true
|
|
692
|
+
content:
|
|
693
|
+
application/json:
|
|
694
|
+
schema:
|
|
695
|
+
type: object
|
|
696
|
+
additionalProperties: false
|
|
697
|
+
required:
|
|
698
|
+
- secret
|
|
699
|
+
- headers
|
|
700
|
+
- body
|
|
701
|
+
properties:
|
|
702
|
+
secret:
|
|
703
|
+
type: string
|
|
704
|
+
minLength: 1
|
|
705
|
+
headers:
|
|
706
|
+
type: object
|
|
707
|
+
additionalProperties:
|
|
708
|
+
type: string
|
|
709
|
+
body:
|
|
710
|
+
type: string
|
|
711
|
+
responses:
|
|
712
|
+
'200':
|
|
713
|
+
description: The verifier verdict.
|
|
714
|
+
content:
|
|
715
|
+
application/json:
|
|
716
|
+
schema:
|
|
717
|
+
type: object
|
|
718
|
+
additionalProperties: false
|
|
719
|
+
required:
|
|
720
|
+
- accepted
|
|
721
|
+
properties:
|
|
722
|
+
accepted:
|
|
723
|
+
type: boolean
|
|
724
|
+
reason:
|
|
725
|
+
type: string
|
|
726
|
+
'400':
|
|
727
|
+
$ref: '#/components/responses/ValidationError'
|
|
728
|
+
'401':
|
|
729
|
+
$ref: '#/components/responses/Unauthenticated'
|
|
517
730
|
components:
|
|
518
731
|
securitySchemes:
|
|
519
732
|
ApiKeyAuth:
|
package/api/v2/asyncapi.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
asyncapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: OpenWOP v2 event streams
|
|
4
|
-
version: 2.0.0-rc.
|
|
4
|
+
version: 2.0.0-rc.2
|
|
5
5
|
description: GENERATED by scripts/derive-v2-api.py (RFC 0171 §E.1, RFC 0172 §C.2). One run-events channel whose address
|
|
6
6
|
is the OpenAPI path key; the server pathname is empty (bare origin). streamMode is a pattern over the closed set and its
|
|
7
7
|
comma-separated combinations (`values` never combines). hostEvents has a real address (RFC 0171 §E.1) — the documented
|
package/api/v2/openapi.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
openapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: OpenWOP v2 API
|
|
4
|
-
version: 2.0.0-rc.
|
|
4
|
+
version: 2.0.0-rc.2
|
|
5
5
|
summary: REST surface for declaring, executing, suspending, resuming, and observing multi-step workflows.
|
|
6
6
|
description: GENERATED by scripts/derive-v2-api.py from api/openapi.yaml and the RFC 0167 children (v2 charter Phase 3,
|
|
7
7
|
P3-C). Bare origin, unversioned path keys, negotiation by `OpenWOP-Version` + `protocolVersions[]` (RFC 0172 §A). No seam
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openwop/spec-artifacts",
|
|
3
|
-
"version": "2.0.0-rc.
|
|
3
|
+
"version": "2.0.0-rc.2",
|
|
4
4
|
"description": "The OpenWOP machine-readable contract: api/ (OpenAPI, AsyncAPI, the seams profile), schemas/ (v1 and v2 JSON Schemas), the spec/v1 and spec/v2 registries (errors, event codemap, declaration, deprecations, migrations, gaps) and CORPUS-STAMP.json — published from the openwop/openwop corpus tag; the peer dependency @openwop/openwop-conformance digest-checks at start (RFC 0168 §D.2).",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": { "type": "git", "url": "git+https://github.com/openwop/openwop.git", "directory": "spec-artifacts" },
|
|
@@ -180,6 +180,10 @@
|
|
|
180
180
|
"type": "string",
|
|
181
181
|
"format": "uri",
|
|
182
182
|
"description": "OPTIONAL (RFC 0089). URL of the host's most recent conformance certification bundle (`conformance-certification-bundle.schema.json`) — a machine-readable attestation binding this host's claimed profiles to the reproducible run that substantiates them. Omitting it is fully conformant; clients MUST tolerate its absence."
|
|
183
|
+
},
|
|
184
|
+
"seamsProfile": {
|
|
185
|
+
"const": "openwop-conformance-seams-v2",
|
|
186
|
+
"description": "RFC 0168 §C.1 — the host serves the conformance seams profile (api/seams-v2.yaml) at /conformance/seams/…. Absent means the seam-driven scenarios record `blocked`, never a pass."
|
|
183
187
|
}
|
|
184
188
|
},
|
|
185
189
|
"additionalProperties": false,
|
|
@@ -5034,6 +5038,29 @@
|
|
|
5034
5038
|
"v1"
|
|
5035
5039
|
]
|
|
5036
5040
|
}
|
|
5041
|
+
},
|
|
5042
|
+
"retryPolicy": {
|
|
5043
|
+
"type": "object",
|
|
5044
|
+
"additionalProperties": false,
|
|
5045
|
+
"required": [
|
|
5046
|
+
"maxAttempts",
|
|
5047
|
+
"backoff"
|
|
5048
|
+
],
|
|
5049
|
+
"properties": {
|
|
5050
|
+
"maxAttempts": {
|
|
5051
|
+
"type": "integer",
|
|
5052
|
+
"minimum": 1
|
|
5053
|
+
},
|
|
5054
|
+
"backoff": {
|
|
5055
|
+
"type": "string",
|
|
5056
|
+
"enum": [
|
|
5057
|
+
"none",
|
|
5058
|
+
"fixed",
|
|
5059
|
+
"exponential"
|
|
5060
|
+
]
|
|
5061
|
+
}
|
|
5062
|
+
},
|
|
5063
|
+
"description": "spec/v2/core/webhooks.md §Delivery — the policy a host retries a failed attempt under. The webhooks family carries it at v2; `triggerBridge.retryPolicy` is the v1 carrier and stays through the overlap."
|
|
5037
5064
|
}
|
|
5038
5065
|
},
|
|
5039
5066
|
"allOf": [
|
|
@@ -100,7 +100,8 @@
|
|
|
100
100
|
}
|
|
101
101
|
},
|
|
102
102
|
"signingKeyId": {
|
|
103
|
-
"$ref": "ids.schema.json#/$defs/keyId"
|
|
103
|
+
"$ref": "ids.schema.json#/$defs/keyId",
|
|
104
|
+
"description": "The host key the signature was made with (the same keyId as signature.keyId)."
|
|
104
105
|
},
|
|
105
106
|
"relaxations": {
|
|
106
107
|
"type": "array",
|
|
@@ -253,7 +254,8 @@
|
|
|
253
254
|
"properties": {
|
|
254
255
|
"id": {
|
|
255
256
|
"type": "string",
|
|
256
|
-
"pattern": "^openwop\\.requirement\\."
|
|
257
|
+
"pattern": "^openwop\\.(?!it\\.(?:artifact-schema-compile-bounded|artifact-type-legacy-ids|capability-example-root-layout|certification-floor-enforcement|chain-subchain-unsupported-refused|compensation-profile|core-manifest-and-extension-registry|discovery-canonical-family-no-shadow|edge-condition-truthy-falsy|effect-identity-composition|effect-identity-cross-scope|error-envelope-canonical-shape|event-codemap-complete|form-content-packs|multi-region-effect-vocabulary|normative-example-extraction|openapi-asyncapi-sdk-parity|pack-manifest-extensions|protocol-version-grammar|registry-declarative-kinds|rfc-0147-self-audit|rfc-lifecycle-coherence|semantic-digest-v2|spec-corpus-validity|spec-section-citations|tool-result-trust-monotone|v2-alias-covers-reword|v2-corpus-tag-pinned|v2-declaration-parity|v2-event-naming-rule|v2-events-channel-parity|v2-externally-gated-never-stable|v2-one-signing-scheme|v2-path-parity|v2-release-identity|v2-req-only-assertions|v2-seams-not-in-canonical|v2-security-defaults-table|v2-spec-artifacts-digest|v2-threat-model-template|v2-witness-required|versioned-composition-profiles|workflow-chain-internal-flag|workload-identity-profile)\\.)(requirement|it|scenario|floor|profile|family)\\.[a-z0-9]",
|
|
258
|
+
"description": "RFC 0168 §A.1 — `openwop.<area>.<slug>`. The suite mints six areas: `requirement` (an explicit `req()` id), `it` (a per-test id from the scenario file and title), `scenario` and `floor` (per-file rows), `profile` (a claimed-profile row) and `family` (a capability gate). The lookahead refuses every id minted from a corpus-coherence file: those run in the spec repo’s CI and MUST NOT appear in a host bundle (conformance.md §\"Two products, two ledgers\"; RFC 0168 §D.1). `scripts/check-req-only.mjs` fails when the list drifts from `conformance/src/coherence/`."
|
|
257
259
|
},
|
|
258
260
|
"scenario": {
|
|
259
261
|
"type": "string"
|
|
@@ -349,11 +351,30 @@
|
|
|
349
351
|
"suite.version",
|
|
350
352
|
"discovery.sha256"
|
|
351
353
|
]
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
"verifierSignature": {
|
|
358
|
+
"type": "object",
|
|
359
|
+
"additionalProperties": false,
|
|
360
|
+
"required": [
|
|
361
|
+
"alg",
|
|
362
|
+
"keyId",
|
|
363
|
+
"sig"
|
|
364
|
+
],
|
|
365
|
+
"properties": {
|
|
366
|
+
"alg": {
|
|
367
|
+
"const": "ed25519"
|
|
352
368
|
},
|
|
353
|
-
"
|
|
369
|
+
"keyId": {
|
|
354
370
|
"$ref": "ids.schema.json#/$defs/keyId"
|
|
371
|
+
},
|
|
372
|
+
"sig": {
|
|
373
|
+
"type": "string",
|
|
374
|
+
"pattern": "^[A-Za-z0-9_-]{86}$"
|
|
355
375
|
}
|
|
356
|
-
}
|
|
376
|
+
},
|
|
377
|
+
"description": "RFC 0168 §E.2 — required when any claimed profile is evidenceTier independent; the key MUST differ from the host's."
|
|
357
378
|
}
|
|
358
379
|
},
|
|
359
380
|
"allOf": [
|
|
@@ -396,6 +417,26 @@
|
|
|
396
417
|
"detail"
|
|
397
418
|
]
|
|
398
419
|
}
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
"if": {
|
|
423
|
+
"properties": {
|
|
424
|
+
"claimedProfiles": {
|
|
425
|
+
"contains": {
|
|
426
|
+
"properties": {
|
|
427
|
+
"evidenceTier": {
|
|
428
|
+
"const": "independent"
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
"then": {
|
|
436
|
+
"required": [
|
|
437
|
+
"verifierSignature"
|
|
438
|
+
]
|
|
439
|
+
}
|
|
399
440
|
}
|
|
400
441
|
]
|
|
401
442
|
}
|
|
@@ -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). 94 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": [
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"event_type_unmapped",
|
|
41
41
|
"forbidden",
|
|
42
42
|
"force_engine_version_forbidden",
|
|
43
|
+
"fork_point_invalid",
|
|
43
44
|
"id_tenant_mismatch",
|
|
44
45
|
"idempotency_in_flight",
|
|
45
46
|
"idempotency_key_invalid",
|
|
@@ -104,6 +105,7 @@
|
|
|
104
105
|
"until_in_past",
|
|
105
106
|
"validation_error",
|
|
106
107
|
"version_conflict",
|
|
108
|
+
"webhook_url_rejected",
|
|
107
109
|
"workspace_conflict",
|
|
108
110
|
"workspace_membership_required",
|
|
109
111
|
"workspace_too_large"
|
|
@@ -151,6 +153,7 @@
|
|
|
151
153
|
"event_type_unmapped": 500,
|
|
152
154
|
"forbidden": 403,
|
|
153
155
|
"force_engine_version_forbidden": 403,
|
|
156
|
+
"fork_point_invalid": 422,
|
|
154
157
|
"id_tenant_mismatch": 403,
|
|
155
158
|
"idempotency_in_flight": 409,
|
|
156
159
|
"idempotency_key_invalid": 400,
|
|
@@ -215,6 +218,7 @@
|
|
|
215
218
|
"until_in_past": 400,
|
|
216
219
|
"validation_error": 400,
|
|
217
220
|
"version_conflict": 409,
|
|
221
|
+
"webhook_url_rejected": 400,
|
|
218
222
|
"workspace_conflict": 409,
|
|
219
223
|
"workspace_membership_required": 403,
|
|
220
224
|
"workspace_too_large": 413
|
|
@@ -119,6 +119,16 @@
|
|
|
119
119
|
"type": "boolean",
|
|
120
120
|
"default": false,
|
|
121
121
|
"description": "When true, an unmet peer dependency degrades (inert + surfaced in `degraded[]`) rather than failing install."
|
|
122
|
+
},
|
|
123
|
+
"facets": {
|
|
124
|
+
"type": "array",
|
|
125
|
+
"minItems": 1,
|
|
126
|
+
"uniqueItems": true,
|
|
127
|
+
"items": {
|
|
128
|
+
"type": "string",
|
|
129
|
+
"pattern": "^[a-z][A-Za-z0-9]*$"
|
|
130
|
+
},
|
|
131
|
+
"description": "Facets of the peer family the pack needs (packs.md §Peer dependencies; RFC 0177 §B.1). Each MUST be a facet the declaration file lists for that family; the family key alone means the family's presence."
|
|
122
132
|
}
|
|
123
133
|
}
|
|
124
134
|
}
|
|
@@ -158,29 +158,8 @@
|
|
|
158
158
|
}
|
|
159
159
|
},
|
|
160
160
|
"runtime": {
|
|
161
|
-
"
|
|
162
|
-
"
|
|
163
|
-
"language"
|
|
164
|
-
],
|
|
165
|
-
"properties": {
|
|
166
|
-
"language": {
|
|
167
|
-
"type": "string",
|
|
168
|
-
"enum": [
|
|
169
|
-
"javascript",
|
|
170
|
-
"typescript",
|
|
171
|
-
"wasm",
|
|
172
|
-
"remote"
|
|
173
|
-
],
|
|
174
|
-
"description": "Pack runtime. `javascript`/`typescript` for in-process Node executors; `wasm` for sandboxed WASM (RFC 0008 ABI); `remote` for agent-only packs that dispatch via remote LLM providers + don't ship local executor bytecode."
|
|
175
|
-
},
|
|
176
|
-
"entry": {
|
|
177
|
-
"type": "string"
|
|
178
|
-
},
|
|
179
|
-
"abiVersion": {
|
|
180
|
-
"type": "string"
|
|
181
|
-
}
|
|
182
|
-
},
|
|
183
|
-
"additionalProperties": false
|
|
161
|
+
"$ref": "node-pack-manifest.schema.json#/$defs/Runtime",
|
|
162
|
+
"description": "The pack runtime block, byte-for-byte the node-pack manifest's (`format`, `minRuntimeVersion`, `requires` included)."
|
|
184
163
|
},
|
|
185
164
|
"peerDependencies": {
|
|
186
165
|
"type": "object",
|
|
@@ -189,6 +168,9 @@
|
|
|
189
168
|
"type": "string"
|
|
190
169
|
}
|
|
191
170
|
},
|
|
171
|
+
"peerDependenciesMeta": {
|
|
172
|
+
"$ref": "node-pack-manifest.schema.json#/properties/peerDependenciesMeta"
|
|
173
|
+
},
|
|
192
174
|
"dependencies": {
|
|
193
175
|
"type": "object",
|
|
194
176
|
"description": "Pack dependencies (other packs). Wire-locked at install time per `pack-lockfile.schema.json`.",
|
|
@@ -246,13 +228,13 @@
|
|
|
246
228
|
},
|
|
247
229
|
"tarballUrl": {
|
|
248
230
|
"type": "string",
|
|
249
|
-
"description": "Registry-relative URL for the signed tarball. Always `/
|
|
250
|
-
"pattern": "^/
|
|
231
|
+
"description": "Registry-relative URL for the signed tarball. Always `/v2/packs/{name}/-/{version}.tgz` (RFC 0177 §A.3 full-path templates).",
|
|
232
|
+
"pattern": "^/v2/packs/[^/]+/-/[^/]+\\.tgz$"
|
|
251
233
|
},
|
|
252
234
|
"signatureUrl": {
|
|
253
235
|
"type": "string",
|
|
254
|
-
"description": "Registry-relative URL for the detached
|
|
255
|
-
"pattern": "^/
|
|
236
|
+
"description": "Registry-relative URL for the detached signature. Always `/v2/packs/{name}/-/{version}.sig`.",
|
|
237
|
+
"pattern": "^/v2/packs/[^/]+/-/[^/]+\\.sig$"
|
|
256
238
|
},
|
|
257
239
|
"yanked": {
|
|
258
240
|
"type": "boolean",
|
|
@@ -153,7 +153,8 @@
|
|
|
153
153
|
},
|
|
154
154
|
{
|
|
155
155
|
"type": "string",
|
|
156
|
-
"pattern": "^(?!openwop\\.)[a-z][a-z0-9]*(-[a-z0-9]+)*\\.[a-z][a-z0-9]*(-[a-z0-9]+)*(\\.[a-z][a-z0-9]*(-[a-z0-9]+)*)?$"
|
|
156
|
+
"pattern": "^(?!openwop\\.)(?!(?:agent|approval|artifact|authorization|budget|cap|channel|clarification|commitment|compensation|connector|context|conversation|deployment|dispatch|egress|envelope|eval|goal|import|interrupt|lease|log|memory|model|negotiation|node|orchestrator|output|prompt|proposal|provider|replay|roster|run|tool|trigger|variable|version|voice|workflow|workflow-chain|workspace)\\.)[a-z][a-z0-9]*(-[a-z0-9]+)*\\.[a-z][a-z0-9]*(-[a-z0-9]+)*(\\.[a-z][a-z0-9]*(-[a-z0-9]+)*)?$",
|
|
157
|
+
"description": "RFC 0171 §A.1 — the positive vendor branch `<org>.<domain-or-name>`. The lookahead bans `openwop.` and every first segment the closed enum registers (agent, approval, artifact, authorization, budget, cap, channel, clarification, commitment, compensation, connector, context, conversation, deployment, dispatch, egress, envelope, eval, goal, import, interrupt, lease, log, memory, model, negotiation, node, orchestrator, output, prompt, proposal, provider, replay, roster, run, tool, trigger, variable, version, voice, workflow, workflow-chain, workspace), so the two branches are disjoint (a registered type matches exactly one) and a typo of a registered domain (`run.startd`) is refused instead of validating as a vendor type — the v1 defect this rule replaces. Regenerate the segment list with scripts/check-v2-schemas.mjs when the enum grows; the corpus wrapper v2-event-naming-rule asserts it."
|
|
157
158
|
}
|
|
158
159
|
],
|
|
159
160
|
"description": "RFC 0171 §A.1 — a registered protocol type (closed enum generated from spec/v2/event-codemap.json) or a vendor event under <org>.<name>; openwop. is the only reserved prefix. Consumers MUST accept an unknown registered member and MUST NOT act on it (§A.5)."
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"provenance": {
|
|
5
5
|
"suite": {
|
|
6
6
|
"package": "@openwop/openwop-conformance",
|
|
7
|
-
"version": "2.0.0-rc.
|
|
7
|
+
"version": "2.0.0-rc.2"
|
|
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": "031b99da4e427eb75371fc90d02b921d075549aa18e3a51e39dca3b058531f1d"
|
|
423
423
|
}
|
package/spec/v1/gaps.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./gaps.schema.json",
|
|
3
3
|
"version": 1,
|
|
4
|
-
"updated": "2026-09-
|
|
4
|
+
"updated": "2026-09-04",
|
|
5
5
|
"witnessClasses": [
|
|
6
6
|
"witnessable-unaided",
|
|
7
7
|
"witnessable-gated",
|
|
@@ -9523,7 +9523,7 @@
|
|
|
9523
9523
|
"surface": "The `extensions.<org>.<name>` org form (short vs reverse-DNS).",
|
|
9524
9524
|
"witness": "claims-check",
|
|
9525
9525
|
"requirementId": null,
|
|
9526
|
-
"disposition": "
|
|
9526
|
+
"disposition": "closed",
|
|
9527
9527
|
"target": null,
|
|
9528
9528
|
"sources": [
|
|
9529
9529
|
{
|
|
@@ -9540,8 +9540,8 @@
|
|
|
9540
9540
|
"surface": "`host-capabilities.md:2186` says a host MUST NOT advertise `host.workspace`; `agent-workspace.md:27` and `capabilities.schema.json:2979` make advertising it the gate for an Accepted surface (RFC 0059). A v1.x prose contradiction, out of this RFC's v2 scope.",
|
|
9541
9541
|
"witness": "witnessable-unaided",
|
|
9542
9542
|
"requirementId": null,
|
|
9543
|
-
"disposition": "
|
|
9544
|
-
"target":
|
|
9543
|
+
"disposition": "carried",
|
|
9544
|
+
"target": "openwop.gap.spec.agent-workspace.r6",
|
|
9545
9545
|
"sources": [
|
|
9546
9546
|
{
|
|
9547
9547
|
"file": "RFCS/registers/0169-v2-discovery-and-capabilities.gaps.md",
|
|
@@ -9557,7 +9557,7 @@
|
|
|
9557
9557
|
"surface": "`imageGeneration` / `videoGeneration` are prose-only under `aiProviders` (RFC 0105 G5); the gap's premise (`additionalProperties: false` on `aiProviders`) has drifted — the block is open at `capabilities.schema.json:1536`. Declared facets or deleted?",
|
|
9558
9558
|
"witness": "claims-check",
|
|
9559
9559
|
"requirementId": null,
|
|
9560
|
-
"disposition": "
|
|
9560
|
+
"disposition": "closed",
|
|
9561
9561
|
"target": null,
|
|
9562
9562
|
"sources": [
|
|
9563
9563
|
{
|
|
@@ -9574,8 +9574,8 @@
|
|
|
9574
9574
|
"surface": "The adoption-axis triage of RFCs 0112–0116 depends on Phase 4 bundle evidence that does not exist yet.",
|
|
9575
9575
|
"witness": "witnessable-gated",
|
|
9576
9576
|
"requirementId": null,
|
|
9577
|
-
"disposition": "
|
|
9578
|
-
"target":
|
|
9577
|
+
"disposition": "externally-gated",
|
|
9578
|
+
"target": "phase-4-host-bundles",
|
|
9579
9579
|
"sources": [
|
|
9580
9580
|
{
|
|
9581
9581
|
"file": "RFCS/registers/0169-v2-discovery-and-capabilities.gaps.md",
|
|
@@ -9591,8 +9591,8 @@
|
|
|
9591
9591
|
"surface": "`agent-platform-aggregate-evidence.test.ts:37` reads a root `profiles[]` that no schema declares (the RFC 0085 annex claim). The v2 suite reads the generated profile registry; the v1 scenario keeps reading the field until the v1 suite is archived.",
|
|
9592
9592
|
"witness": "witnessable-unaided",
|
|
9593
9593
|
"requirementId": null,
|
|
9594
|
-
"disposition": "
|
|
9595
|
-
"target":
|
|
9594
|
+
"disposition": "carried",
|
|
9595
|
+
"target": "openwop.gap.spec.agent-platform-profile.r1",
|
|
9596
9596
|
"sources": [
|
|
9597
9597
|
{
|
|
9598
9598
|
"file": "RFCS/registers/0169-v2-discovery-and-capabilities.gaps.md",
|
|
@@ -9931,7 +9931,7 @@
|
|
|
9931
9931
|
"surface": "Numbers 0160–0162 were never authored (RFC 0158's renumber note). Filing `Withdrawn` stubs after the fact would be a paper trail for nothing.",
|
|
9932
9932
|
"witness": "negative-existence",
|
|
9933
9933
|
"requirementId": null,
|
|
9934
|
-
"disposition": "
|
|
9934
|
+
"disposition": "closed",
|
|
9935
9935
|
"target": null,
|
|
9936
9936
|
"sources": [
|
|
9937
9937
|
{
|
|
@@ -9948,8 +9948,8 @@
|
|
|
9948
9948
|
"surface": "388 `carried:<self>` rows on terminal RFCs at filing (the RFC 0166 backfill default); 45 whose prose said CLOSED re-tokened here; 343 remain under the `selfCarried` ratchet.",
|
|
9949
9949
|
"witness": "witnessable-unaided",
|
|
9950
9950
|
"requirementId": null,
|
|
9951
|
-
"disposition": "
|
|
9952
|
-
"target":
|
|
9951
|
+
"disposition": "carried",
|
|
9952
|
+
"target": "openwop.gap.0166.3",
|
|
9953
9953
|
"sources": [
|
|
9954
9954
|
{
|
|
9955
9955
|
"file": "RFCS/registers/0174-v2-governance.gaps.md",
|
|
@@ -9965,7 +9965,7 @@
|
|
|
9965
9965
|
"surface": "`check-accepted-predicate.mjs` needs `gaps.json` rows bound to requirement ids, which none are today (RFC 0178 §B.1 owns the binding).",
|
|
9966
9966
|
"witness": "witnessable-unaided",
|
|
9967
9967
|
"requirementId": null,
|
|
9968
|
-
"disposition": "
|
|
9968
|
+
"disposition": "closed",
|
|
9969
9969
|
"target": null,
|
|
9970
9970
|
"sources": [
|
|
9971
9971
|
{
|
|
@@ -9982,7 +9982,7 @@
|
|
|
9982
9982
|
"surface": "The 43 prose gap tables have two row shapes; the adapter into `gaps.json` must map both without inventing ids.",
|
|
9983
9983
|
"witness": "witnessable-unaided",
|
|
9984
9984
|
"requirementId": null,
|
|
9985
|
-
"disposition": "
|
|
9985
|
+
"disposition": "closed",
|
|
9986
9986
|
"target": null,
|
|
9987
9987
|
"sources": [
|
|
9988
9988
|
{
|
|
@@ -10237,8 +10237,8 @@
|
|
|
10237
10237
|
"surface": "558 of 558 `gaps.json` rows were `witness: unclassified` and `requirementId: null` at filing. This PR classifies the RFC 0167 family's rows; the rest is the RFC 0166 G2 ratchet.",
|
|
10238
10238
|
"witness": "witnessable-unaided",
|
|
10239
10239
|
"requirementId": null,
|
|
10240
|
-
"disposition": "
|
|
10241
|
-
"target":
|
|
10240
|
+
"disposition": "carried",
|
|
10241
|
+
"target": "openwop.gap.0166.2",
|
|
10242
10242
|
"sources": [
|
|
10243
10243
|
{
|
|
10244
10244
|
"file": "RFCS/registers/0178-v2-assurance-registers-and-deprecation-machinery.gaps.md",
|
|
@@ -10254,7 +10254,7 @@
|
|
|
10254
10254
|
"surface": "Nine of 164 RFCs carry a falsifiability table; the parser is a gate for the RFC 0167 family and advisory elsewhere.",
|
|
10255
10255
|
"witness": "witnessable-unaided",
|
|
10256
10256
|
"requirementId": null,
|
|
10257
|
-
"disposition": "
|
|
10257
|
+
"disposition": "closed",
|
|
10258
10258
|
"target": null,
|
|
10259
10259
|
"sources": [
|
|
10260
10260
|
{
|
|
@@ -10271,8 +10271,8 @@
|
|
|
10271
10271
|
"surface": "`check-gap-contradictions.mjs` resolves scenario files and OpenAPI paths only; a gap naming any other artifact is reported unchecked.",
|
|
10272
10272
|
"witness": "witnessable-unaided",
|
|
10273
10273
|
"requirementId": null,
|
|
10274
|
-
"disposition": "
|
|
10275
|
-
"target":
|
|
10274
|
+
"disposition": "carried",
|
|
10275
|
+
"target": "openwop.gap.0166.4",
|
|
10276
10276
|
"sources": [
|
|
10277
10277
|
{
|
|
10278
10278
|
"file": "RFCS/registers/0178-v2-assurance-registers-and-deprecation-machinery.gaps.md",
|
|
@@ -10288,7 +10288,7 @@
|
|
|
10288
10288
|
"surface": "Whether AsyncAPI 3.x carries a standard `deprecated` on channels and messages.",
|
|
10289
10289
|
"witness": "claims-check",
|
|
10290
10290
|
"requirementId": null,
|
|
10291
|
-
"disposition": "
|
|
10291
|
+
"disposition": "closed",
|
|
10292
10292
|
"target": null,
|
|
10293
10293
|
"sources": [
|
|
10294
10294
|
{
|
package/spec/v2/declaration.json
CHANGED
package/spec/v2/errors.json
CHANGED
|
@@ -230,6 +230,15 @@
|
|
|
230
230
|
"since": "1.0",
|
|
231
231
|
"source": "spec/v1/run-options.md / version-negotiation.md (OpenWOP-Force-Engine-Version outside test keys)"
|
|
232
232
|
},
|
|
233
|
+
{
|
|
234
|
+
"code": "fork_point_invalid",
|
|
235
|
+
"httpStatus": 422,
|
|
236
|
+
"statusSource": "v2 decision",
|
|
237
|
+
"retriable": false,
|
|
238
|
+
"details": null,
|
|
239
|
+
"since": "2.0",
|
|
240
|
+
"source": "spec/v2/core/runs.md §Fork"
|
|
241
|
+
},
|
|
233
242
|
{
|
|
234
243
|
"code": "id_tenant_mismatch",
|
|
235
244
|
"httpStatus": 403,
|
|
@@ -806,6 +815,15 @@
|
|
|
806
815
|
"since": "1.0",
|
|
807
816
|
"source": "api/openapi.yaml"
|
|
808
817
|
},
|
|
818
|
+
{
|
|
819
|
+
"code": "webhook_url_rejected",
|
|
820
|
+
"httpStatus": 400,
|
|
821
|
+
"statusSource": "v2 decision",
|
|
822
|
+
"retriable": false,
|
|
823
|
+
"details": null,
|
|
824
|
+
"since": "2.0",
|
|
825
|
+
"source": "spec/v2/core/webhooks.md §Egress"
|
|
826
|
+
},
|
|
809
827
|
{
|
|
810
828
|
"code": "workspace_conflict",
|
|
811
829
|
"httpStatus": 409,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$comment": "RFC 0173 §B — durable delivery binds with webhooks; no durable flag",
|
|
2
|
+
"$comment": "RFC 0173 §B — durable delivery binds with webhooks; no durable flag; retryPolicy is the v2 carrier of the delivery obligation (was triggerBridge.retryPolicy at v1)",
|
|
3
3
|
"properties": {
|
|
4
4
|
"signatureAlgorithms": {
|
|
5
5
|
"type": "array",
|
|
@@ -10,6 +10,29 @@
|
|
|
10
10
|
"v1"
|
|
11
11
|
]
|
|
12
12
|
}
|
|
13
|
+
},
|
|
14
|
+
"retryPolicy": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"required": [
|
|
18
|
+
"maxAttempts",
|
|
19
|
+
"backoff"
|
|
20
|
+
],
|
|
21
|
+
"properties": {
|
|
22
|
+
"maxAttempts": {
|
|
23
|
+
"type": "integer",
|
|
24
|
+
"minimum": 1
|
|
25
|
+
},
|
|
26
|
+
"backoff": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"enum": [
|
|
29
|
+
"none",
|
|
30
|
+
"fixed",
|
|
31
|
+
"exponential"
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"description": "spec/v2/core/webhooks.md §Delivery — the policy a host retries a failed attempt under. The webhooks family carries it at v2; `triggerBridge.retryPolicy` is the v1 carrier and stays through the overlap."
|
|
13
36
|
}
|
|
14
37
|
},
|
|
15
38
|
"required": [
|
package/spec/v2/release.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "RFC 0172 §D.1 — the one release identity the v2 artifacts derive from. `version` is the next corpus tag `v<version>` (the publish workflow's coordinated-release tag pattern `v*`; RFC 0172's `openwop/v2.<minor>.<patch>` spelling is amended to this at its flip). api/v2/*.yaml info.version, the suite's 2.x version and @openwop/spec-artifacts read it. Bumped by the release PR that cuts the tag, never by hand elsewhere.",
|
|
3
|
-
"version": "2.0.0-rc.
|
|
3
|
+
"version": "2.0.0-rc.2",
|
|
4
4
|
"corpusTag": null,
|
|
5
5
|
"updated": "2026-09-03"
|
|
6
6
|
}
|