@openwop/spec-artifacts 2.0.0-rc.6 → 2.0.0-rc.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CORPUS-STAMP.json +39 -36
  2. package/api/seams-v2.yaml +1 -1
  3. package/api/v2/asyncapi.yaml +1 -1
  4. package/api/v2/openapi.yaml +17 -19
  5. package/package.json +18 -5
  6. package/schemas/capabilities.schema.json +40 -1
  7. package/schemas/certification-bundle-v2.schema.json +119 -27
  8. package/schemas/run-snapshot.schema.json +103 -33
  9. package/schemas/v2/agent-deployment-transition.schema.json +5 -6
  10. package/schemas/v2/agent-deployment.schema.json +8 -9
  11. package/schemas/v2/agent-eval-suite.schema.json +11 -12
  12. package/schemas/v2/artifact-type-pack-manifest.schema.json +22 -18
  13. package/schemas/v2/capabilities.schema.json +39 -0
  14. package/schemas/v2/certification-bundle.schema.json +1 -1
  15. package/schemas/v2/chat-card-pack-manifest.schema.json +19 -15
  16. package/schemas/v2/debug-bundle.schema.json +6 -6
  17. package/schemas/v2/error-envelope.schema.json +185 -138
  18. package/schemas/v2/eval-summary.schema.json +17 -10
  19. package/schemas/v2/goal.schema.json +5 -5
  20. package/schemas/v2/ids.schema.json +120 -22
  21. package/schemas/v2/node-pack-manifest.schema.json +27 -31
  22. package/schemas/v2/proposal.schema.json +7 -8
  23. package/schemas/v2/run-event-payloads.schema.json +258 -245
  24. package/schemas/v2/run-event.schema.json +2 -126
  25. package/schemas/v2/run-options.schema.json +1 -1
  26. package/schemas/v2/run-snapshot.schema.json +34 -13
  27. package/schemas/v2/webhook-delivery.schema.json +26 -0
  28. package/schemas/v2/workflow-chain-pack-manifest.schema.json +41 -45
  29. package/schemas/v2/workflow-definition.schema.json +31 -36
  30. package/spec/v1/core-standard-manifest.json +2 -2
  31. package/spec/v1/deprecations.json +79 -67
  32. package/spec/v1/deprecations.schema.json +23 -7
  33. package/spec/v1/extensions.json +3 -2
  34. package/spec/v2/declaration.json +34 -6
  35. package/spec/v2/errors.json +421 -360
  36. package/spec/v2/id-field-bindings.json +105 -0
  37. package/spec/v2/profiles.json +27 -6
  38. package/spec/v2/release.json +2 -2
  39. package/spec/v2/retention-floors.json +35 -0
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.6",
4
+ "version": "2.0.0-rc.60",
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": "ac5a9173b5d35869d6a5d2c0e7efd37b377414e5cded22fc261e088eb614a286",
13
- "api/v2/asyncapi.yaml": "958537c1279125d6d14416889e9aa48a89dc1941f892348fa46496faedfd8a78",
14
- "api/v2/openapi.yaml": "4bed5a9c899b77092a2da2a4337910c80c0fc39612b47b46a38d9a05a2868ade",
12
+ "api/seams-v2.yaml": "924663b683aeb5374ffbac82b7daab78e98a30794eccf2ac38fd88bbb0e32412",
13
+ "api/v2/asyncapi.yaml": "82ae49c3c446692c64fcebc7057542d2e36d1ebd3e70a577e22bedd5bccf9211",
14
+ "api/v2/openapi.yaml": "a06f82c9046bcc7f21638e5dcf83603957898e3fb687a9711bf2d7d47e9dad31",
15
15
  "api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
16
16
  "schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
17
17
  "schemas/a2a-task-state.schema.json": "c9365918f993f943b4b619d42551eb066a1ed33a08d895d51b395432a5b1f1bc",
@@ -31,8 +31,8 @@
31
31
  "schemas/artifact-type-pack-manifest.schema.json": "13932ea58e819e01b3a0cc7a65590b70683dd5fe9208fc06c64c339943d3c4ce",
32
32
  "schemas/audit-verify-result.schema.json": "e8fd013fb610ba5db27ab0113ec2eb18e7da5f9310dd3de2dd3dc87a259c21fe",
33
33
  "schemas/budget-policy.schema.json": "3d4fe30ae129fe136ab9ece395f2a2a42a76360786b1b9a1d5f1cbc753eb5b39",
34
- "schemas/capabilities.schema.json": "e672c35d503532d8039b5552115f5ec150d60317f537f13180d830b0fe315947",
35
- "schemas/certification-bundle-v2.schema.json": "3540232676086869ae78d24f3b9c2154f9c4a8a5eeb976512d6a7409f8cf19bb",
34
+ "schemas/capabilities.schema.json": "b413e0235cad412081df09234237e0f322a85903b7411b91aaff54032e946671",
35
+ "schemas/certification-bundle-v2.schema.json": "2f85530dd04824a15810c94e96869362dee1e78396eca21fdd18e5501416bb7d",
36
36
  "schemas/channel-presence-payload.schema.json": "f9d0ef4219814c2b765baf3e68cbe5eea2cb42379f516a93a0459dcd5f7db47e",
37
37
  "schemas/channel-written-payload.schema.json": "54723a56bc5a35232f64544ca686ac1ac959a5fb05b32b2401facca6b3ef51a3",
38
38
  "schemas/chat-card-pack-manifest.schema.json": "402f7e9081cc39857a52e772061f4e034a957dcbc17501fe6e8e0bcb3d337e42",
@@ -86,7 +86,7 @@
86
86
  "schemas/run-event.schema.json": "c70c06932b9831295042836213e617c8e946f20ddd49cf4e889b74d89d2175a8",
87
87
  "schemas/run-options.schema.json": "f8241ece6ddc6527de9160d811d42c231b4f77b935f2e107b3c05608545c59ab",
88
88
  "schemas/run-orchestrator-decided-event.schema.json": "17a43a3c44680a24d411141357a867b3caed6107d56de88fe2e062eaf93fa2c1",
89
- "schemas/run-snapshot.schema.json": "8a45f997beec0a2fa596f4631129a869cfbc37c9ad38583530ed11655301d2ab",
89
+ "schemas/run-snapshot.schema.json": "3343550f6973a0975c61624df569d341e843ac8592a2aa2b3b7cf540d72563ad",
90
90
  "schemas/security-advisory.schema.json": "9c550f0bf10a3193dcca4a127081fb66fe5dc1b6f729c4c17bfaea3ba3ce05fc",
91
91
  "schemas/self-hosted-runner-dispatch-frame.schema.json": "3f1d7edd572c6747657299525d8e85329b93b6fadf670e3a19c74d53e725adec",
92
92
  "schemas/self-hosted-runner-registration.schema.json": "6c781adf1bb915a9e47796494f4a527353cbbf72b480e5a05be4aac65a6d0c6e",
@@ -100,9 +100,9 @@
100
100
  "schemas/ui-plugin-message.schema.json": "346638babf1f8ea7b161cde75c0038b518cd2cc5bf0631772e20a9b74c96b5dd",
101
101
  "schemas/v2/a2a-task-state.schema.json": "aa9bd0c15f653b7ecdb17427d61b1bccaf8156972c4b1a437dd3a8afb717b318",
102
102
  "schemas/v2/a2ui-surface-delta-frame.schema.json": "43c10ebfd13c987520f0448df92fe74b52b846833763dfbbd5d35636bf75e8d9",
103
- "schemas/v2/agent-deployment-transition.schema.json": "5871ec764f531b2d34a6bb8b2e16efd35aad642664ca6d41411ba8d699fd759e",
104
- "schemas/v2/agent-deployment.schema.json": "61979201c850c69360a0840f3e23373284b5445b6c11212012ea53d33be9a6e7",
105
- "schemas/v2/agent-eval-suite.schema.json": "77c4bb06f5e21584994d4b4aaafc2304904008a51f0c6d8892794d7074e4f6b5",
103
+ "schemas/v2/agent-deployment-transition.schema.json": "d9fe6f2fa4dda8598bab4e5c051f68473ac0729dc0ebf31605954dda7abf5a80",
104
+ "schemas/v2/agent-deployment.schema.json": "dd1293ef8f20678bc36fc95fc4e5fcd135acbb10c61c1ddec8bc023e3f22622c",
105
+ "schemas/v2/agent-eval-suite.schema.json": "b2875edfc28b39c104fbf6f854ecfb81fe2d90b18f828ffd8d3232ef883cd208",
106
106
  "schemas/v2/agent-inventory-response.schema.json": "bbf19724986a867a59ef51c115a43ece1cc4a003836b2f7f45dfefb3078db8f9",
107
107
  "schemas/v2/agent-manifest.schema.json": "006ca6163ca8f9dc9fb91ca1ce01bd4c523f118680f6cbad971a4ac09e975381",
108
108
  "schemas/v2/agent-org-chart.schema.json": "e64f1bcc6c0e9d3fc39c363e8e5e73b2b1fc49275b92f89b0cb941a7a80d67f2",
@@ -112,14 +112,14 @@
112
112
  "schemas/v2/ai-envelope.schema.json": "0dc7dfbf032a37239ffd81fc2d67f999a40782ff5074866a56e414164cdee809",
113
113
  "schemas/v2/annotation-create.schema.json": "c2fc19d055be29bc499e53c4975a562eb76981e12c521a82f63f5827ac6ff6c7",
114
114
  "schemas/v2/annotation.schema.json": "75c6785775d00e62bc1282626c2c27eafde0f93a01c7e80e4e5e985055907475",
115
- "schemas/v2/artifact-type-pack-manifest.schema.json": "c911757562e521cb4f31a47c097f562573b64087efe60c8acb81fd352367d300",
115
+ "schemas/v2/artifact-type-pack-manifest.schema.json": "85630d1b760d0b41cf5a6fad2acfada39abaf7f0befd95cc4334e1e883e9615d",
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": "b6191deddf6bee19470eee9a45bb520de0d17385c195de6e3b8c5cb6d9520238",
119
- "schemas/v2/certification-bundle.schema.json": "5afcce118ac567d4aee790aebe258bfbb60aa2708c4602b26f835943aa67b2c3",
118
+ "schemas/v2/capabilities.schema.json": "792669b2cc7b1fd44ce9a4fd3e79696ad1277734e29299a4504b39eda15913ed",
119
+ "schemas/v2/certification-bundle.schema.json": "b893ffa4de998b8b2b69a1038ebba0d7d50c8a32cde91ccae2b7c653fe459aa6",
120
120
  "schemas/v2/channel-presence-payload.schema.json": "9475d46f358d21c19126e78204987a5633979917a2293653354ef5c5e044d54e",
121
121
  "schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
122
- "schemas/v2/chat-card-pack-manifest.schema.json": "566982ce509a96d1619d58a72e383eff0773fe43fc65e4bfc85a4fe158f4eaff",
122
+ "schemas/v2/chat-card-pack-manifest.schema.json": "8df0d9d273ae22efc6876d5586833f1d4c2e551edc3ac6cf6e8f0719329f03dd",
123
123
  "schemas/v2/compact-tool-descriptor.schema.json": "fc03f20c254c0ddc2cba7e7d5a6c46080ebd2cf9fae36f3c2510cbf88aadebdc",
124
124
  "schemas/v2/compensation-policy.schema.json": "b3c1142637f5bf980f2b0bb67adb47e8cb7abb99a0405a4b6816ccf5d9c089d6",
125
125
  "schemas/v2/compensation-projection.schema.json": "f46977c7076347b5473faa8c4bbe73d8321c33b33c98fff2f26ee7cbada4ed98",
@@ -129,7 +129,7 @@
129
129
  "schemas/v2/conversation-turn.schema.json": "4c24aa85dd83f6ad00945b4a13ee8ff0a071893e884011e9289a07e97d22989d",
130
130
  "schemas/v2/credential-provenance.schema.json": "f86b09e94b1c524dec7d1c6353965665ae8891e9517faef6e742d639c5578c99",
131
131
  "schemas/v2/credential-reference.schema.json": "ea699ce30f58fb2c32d4279158b3f730f70be7b2dc8c3037693a76e66eb3e001",
132
- "schemas/v2/debug-bundle.schema.json": "e792a588131290bccce3042a279e8e57677018df94b0861bee2b2b98a9ea2124",
132
+ "schemas/v2/debug-bundle.schema.json": "0bfa4b1d91fefbc12c95670dba9d5eacb72b879bb9a5c074e821ca9ed0fee6fd",
133
133
  "schemas/v2/dispatch-config.schema.json": "4a7db312e6b4a14cf5b1ad2b71367878c77b6321cc456f5b3644dd6434e94cbd",
134
134
  "schemas/v2/effect-ledger-projection.schema.json": "9e690f8e5dbf9aa7c82eef4bf7cf96c024f0f8626ad5bbaca3ff25ac63c7cab2",
135
135
  "schemas/v2/effect-seam-manifest.schema.json": "3402a2956c810b2bfa9ec1ad0cb79d607ecea122cbe7d1e05184af006b06ef15",
@@ -141,22 +141,22 @@
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": "d550beeab958b528c8734fd32e74c438006b99172c5c586f9e0af20ef4b2bee7",
145
- "schemas/v2/eval-summary.schema.json": "dfc995c8481ed212e6f3d83de982547898a7938be8c891ddb0d3efe84352908d",
144
+ "schemas/v2/error-envelope.schema.json": "72d3332fad8fa36d07439c830acf352eefc6da2379374faa2ebbe49e98b8cb08",
145
+ "schemas/v2/eval-summary.schema.json": "bcb165148531d33b7dc01de83da3a049d19ebbef6d12300b17a234c7b03d77d9",
146
146
  "schemas/v2/export-bundle.schema.json": "bd28905a7729437ab7f2ad8bb33e13a371b2bf5605a7eb2962a0d246de312d69",
147
147
  "schemas/v2/form-content-pack-manifest.schema.json": "307884e57946703b6f86ec283034bf56beb68bea4a000743ebbc9eebeed31b07",
148
148
  "schemas/v2/frontend-plugin-manifest.schema.json": "fed6b8ddb3056c53b1bfc91525410a4445a3c37a8bf9eb9f6f9964ffea26d993",
149
- "schemas/v2/goal.schema.json": "d202ef21ed3dbff87c25fd4b553fa978862a3200999878d25c5918f6794b3060",
149
+ "schemas/v2/goal.schema.json": "146c4182e36d3538778f947e668a92cdb69ec42ee0820104b00063b035e342d7",
150
150
  "schemas/v2/heartbeat-evaluated.schema.json": "4086b1ba1d0547c08b038dfb263ac89416a3e406430db1250156fb2f9b74f8d6",
151
151
  "schemas/v2/heartbeat-state-changed.schema.json": "eb68d0082aa996650e3a6b8ccf32457f959cebc7e6728cc7c331b9d171a4bef6",
152
- "schemas/v2/ids.schema.json": "0ccf5eb3ec0744296b3379f7ced3b46ec51d908705a4f03dc4404d42236ebe19",
152
+ "schemas/v2/ids.schema.json": "05c98e3f8a72fa79be123765bd9c2ea7c6620188d69df8524160399225316cd6",
153
153
  "schemas/v2/localized-content-language-settings.schema.json": "92240f19a2b4b2f05ab41a797f703485a28813848035478e72f395edd04c1d35",
154
154
  "schemas/v2/localized-content-page-response.schema.json": "476b5f2775b42e35e679814a4ce846a7be1d5311d3a748c10df4275a78b0fb27",
155
155
  "schemas/v2/localized-content-page.schema.json": "717bb51fbc64d0b34eb0a4b35c8b463d08d505267bf251b4cbc67e0a016a567a",
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": "771328fa73691e7f08fca3c628c4e8ba68fa4e43529faaf1a6358aecf26b13f2",
159
+ "schemas/v2/node-pack-manifest.schema.json": "0da826ca63a29026f7a9551748048104910e0d9962db6bad2b50b97a24a9ea30",
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",
@@ -164,16 +164,16 @@
164
164
  "schemas/v2/prompt-pack-manifest.schema.json": "a51667da3d601043d2c33fddaafa572e9dd7e47b8840393742b80eaf6238a1a5",
165
165
  "schemas/v2/prompt-ref.schema.json": "11538fa36a7a652c93100cac4f1857eb4130137b546e3d94890618636d44b729",
166
166
  "schemas/v2/prompt-template.schema.json": "494fc83028cb3af5dbb8a943d0e83b2348f7775e9fa02369162bcb58a6f81559",
167
- "schemas/v2/proposal.schema.json": "72623553611f00e87b4c7972d69ebeba73c2222b01ead75a44a0c2114b679fea",
167
+ "schemas/v2/proposal.schema.json": "cb5ea4fcb54be94fd2a92cf2799357dc73335181a89f5766f432d69e21cc3a80",
168
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
- "schemas/v2/run-event-payloads.schema.json": "8eb0e05e1bd3399b0e2654a1ec5a13198ac4ec8459a1fcbfd800ab2d0a0ae8c6",
173
- "schemas/v2/run-event.schema.json": "4ec8eb048a79ca1343e00aa018acbf86814b5eda6768add6b17e8d7b83638fdf",
174
- "schemas/v2/run-options.schema.json": "6d6052596ab0f17acfb00fdfc89907da7724f952e5ffbe1f81d94ba23d4c77cd",
172
+ "schemas/v2/run-event-payloads.schema.json": "3a7161af78b0dd2730309371f5ea8b889d92a37c708db05e4354209f12ffbe30",
173
+ "schemas/v2/run-event.schema.json": "1a9946374af9323b71635d00fed22abe02c300fa2cf3ae3e9c30f3e553e408ec",
174
+ "schemas/v2/run-options.schema.json": "ff240805478158cbd2f661979c5eb4f5eda11f9c053b7ba587cb0211a9252d74",
175
175
  "schemas/v2/run-orchestrator-decided-event.schema.json": "bb76e15ff72e669f12938684033b55dc567470e1a378e19ffc3fa0e4034ab5a7",
176
- "schemas/v2/run-snapshot.schema.json": "e77bf491d11c1414e62ed84cbf0c1d7149279b133a2101dc8f5eec89d3e45204",
176
+ "schemas/v2/run-snapshot.schema.json": "0ee8a50c6be210db415a7c4345298e70a6ae3dd0dd764ccc514bc1c501437586",
177
177
  "schemas/v2/security-advisory.schema.json": "6a382f737730a738d634266315e9d335e5760020a0cdd9f30727c2f987a01770",
178
178
  "schemas/v2/self-hosted-runner-dispatch-frame.schema.json": "d8129f11d4e731d17ea951e66faaea2086081d13958b62ceaaa359fd6637dd7d",
179
179
  "schemas/v2/self-hosted-runner-registration.schema.json": "93d60003a668cacb0eeac37699ca2884c6b79332d9494cb9e0a1752ac8f8a16c",
@@ -186,8 +186,9 @@
186
186
  "schemas/v2/trigger-subscription-registration.schema.json": "202f7ab9c29e78249e0ad04341ac53377b506d24a0cbfbb7bb54494e80165832",
187
187
  "schemas/v2/trigger-subscription.schema.json": "074bec7f016aa9f4d60359c3a093296cc847045510f01e0a9dceaf4fa5084d12",
188
188
  "schemas/v2/ui-plugin-message.schema.json": "879d65867c01656b3962d64283e66364dcb8f626ad26c5fcf2d2d55a79ae0ce9",
189
- "schemas/v2/workflow-chain-pack-manifest.schema.json": "d1e43617ebacc9b32d1faf98dc7a2074d3e25054f383a1c264b87a19047f674d",
190
- "schemas/v2/workflow-definition.schema.json": "91e422faacb886c8a17fc86b6576d38b7bfd99a37aaff69c710dec598e361192",
189
+ "schemas/v2/webhook-delivery.schema.json": "66025cd7b7899b6897b61c61e99ec2c554e232a6c9742124441adcd81912cef0",
190
+ "schemas/v2/workflow-chain-pack-manifest.schema.json": "22801f14845a3df30660e6f31a41e1a3fbff2425bf56c8a475eab96f1c95882a",
191
+ "schemas/v2/workflow-definition.schema.json": "da7e565cee6ecf3bcc9d46833bad224f579f8db8a378ae22ff3fbf58b1348f38",
191
192
  "schemas/v2/workload-identity.schema.json": "1f589debfac6d70e0908da511550ec69a27b4bcc8314551cd843b6d923605efc",
192
193
  "schemas/v2/workspace-file-create.schema.json": "b6b5260857318c3b67de0231ed15e3a746f525880a763e7b36a7854178dd10d0",
193
194
  "schemas/v2/workspace-file.schema.json": "d2ed39e8c229dde33b56905c8df6f8b2ff056c97e1c5f615e3124baa54a6254f",
@@ -198,21 +199,21 @@
198
199
  "schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
199
200
  "spec/v1/alias-detectors.json": "fee4594ef49953953ffcd0b3813300067d16b3e65ebff2aac722034ac9b3f545",
200
201
  "spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
201
- "spec/v1/core-standard-manifest.json": "5f61d1d51233de923032cfb7fe1459ea0d8c60e4ff70fc9e610c001686da9864",
202
- "spec/v1/deprecations.json": "520d79927a8ed43ccf62c207a7cf6cf7b19b16e00bbbbdf0410667e939c19d85",
203
- "spec/v1/deprecations.schema.json": "4cdbbb8eb9c0092913a5704c943880f0c8581bcf0f640a7df5a84105d53c8aee",
202
+ "spec/v1/core-standard-manifest.json": "2f4d9846f6167092189acb28db6c5035df6ebdd404ddf2e09ff5ebfb5c58b5a4",
203
+ "spec/v1/deprecations.json": "1d5acb69a9b8ccb57275a95605f74aef1d920685f8407c9d382a46b59dc803bb",
204
+ "spec/v1/deprecations.schema.json": "18c87e78bedc210431f795ae44c5b5d202f2f3317850d5cf86867d4f1fa1cdfb",
204
205
  "spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
205
206
  "spec/v1/event-codemap.schema.json": "d52caf29071e3784d4c20259cdbd5a7b533986548a440bb632a80b82cadd7ea5",
206
- "spec/v1/extensions.json": "4d7ba68bae7c7f50cc655b94646ad25945a5dd63b703d43c1d015470141cd668",
207
+ "spec/v1/extensions.json": "79a60754aa16cbdbdb604f8e5c00038af535a1690a4d07bd5ff7c38f0256a7bc",
207
208
  "spec/v1/gaps.json": "96ca051cb20f1a669b355d67a89421c56fef28aa5e6710c9519f592f26af33a3",
208
209
  "spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
209
210
  "spec/v1/migrations.json": "8839497d6a4830b53fa7867014a8336f0d725ef2346352e54fb580b7947897af",
210
211
  "spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
211
212
  "spec/v1/operation-path-manifest.json": "5f5f4e3842669371730ebbd1aace3fb794192615f0018dc144f484ba5db82ac3",
212
213
  "spec/v1/spec-gaps.json": "6cc9962c6b969f632e07a78b52a4f61447ff579e2990cbae989866f584a86042",
213
- "spec/v2/declaration.json": "892b6fae1e87f279ff75451f67ffab2a63ef883203f8066886bd60f165469348",
214
+ "spec/v2/declaration.json": "936c8f02efde6ab2e9878e38de48a762793c2229a083d435edb608fb40612518",
214
215
  "spec/v2/declaration.schema.json": "b0881a76228dfbd1b85a2ec7b7259a60197f768344535cdb475db6ff719b0e54",
215
- "spec/v2/errors.json": "ad1725dc7c11002450e8abc682858eb5c11952a0718ea8ef6bdb2fb5ae6e7e21",
216
+ "spec/v2/errors.json": "f179414a92f30b5dadf26e9e57699649a67324bd7186d5287647d17605d137d3",
216
217
  "spec/v2/event-codemap.json": "37869a03cdfd8758b57e6f350641a6ebbd383231cebda51f5473ad85f94ab74c",
217
218
  "spec/v2/event-codemap.schema.json": "ce2d0ca085d7668d7ef745d2560b385ec6881d24a6d4b47c49931986b2ba642d",
218
219
  "spec/v2/ext/provider-idempotency/registry.json": "5b5fecad604fb4ab38da39f5abe697a4e57b05406c398f8afeb377331b2bd965",
@@ -225,10 +226,12 @@
225
226
  "spec/v2/facets/replay.schema.json": "0a5aefb0108c708c6794fadd533cf256709704c4f16dbf44cd63fa8980c78018",
226
227
  "spec/v2/facets/sandbox.schema.json": "e75f54486d387b2d089791aa93b5093cd1450f1920753a0f97fc23acdfe978ed",
227
228
  "spec/v2/facets/webhooks.schema.json": "0b766033ef4b4c6c2ac6f9979a19843ba024d3a1d1576972dcb55aaba52f1b9a",
229
+ "spec/v2/id-field-bindings.json": "d9d1f8e266660b581f11020b9511a65c677e026b1a71ada870682ad77e18555d",
228
230
  "spec/v2/path-manifest.json": "034152e09b1458c66810d4050e20a273b2b9b8fe2d92b66e8b819477de58a1be",
229
231
  "spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
230
- "spec/v2/profiles.json": "1f0ee40491131cf561ef19a0394c47ba476b4567514fe16befb6cada4a10a5a4",
231
- "spec/v2/release.json": "64dedadf70a0cd6928ee4bbe7012631cf0612c03e2e2df20d5e48f710998a2e9"
232
+ "spec/v2/profiles.json": "bf38fc9c5ad32212385ad798c0744de33837ea80c0ef9bec86ecefb4ea914f27",
233
+ "spec/v2/release.json": "21de6736f0658c0d652d87d260967660aeea460fd5defbb097eb748715c23a38",
234
+ "spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624"
232
235
  },
233
- "corpusCommit": "12aac8ee261f99a5593551dd1c0f317195d5cb28"
236
+ "corpusCommit": "7042d0481198995c594dd9d8dc47ce2b774c782a"
234
237
  }
package/api/seams-v2.yaml CHANGED
@@ -1,7 +1,7 @@
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.6
4
+ version: 2.0.0-rc.60
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
@@ -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.6
4
+ version: 2.0.0-rc.60
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
@@ -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.6
4
+ version: 2.0.0-rc.60
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
@@ -90,8 +90,10 @@ paths:
90
90
  required: false
91
91
  schema:
92
92
  type: string
93
- description: RFC 0165 §C.2. Standard conditional request against the discovery document's `ETag`; a matching value
94
- SHOULD yield `304 Not Modified`.
93
+ description: 'RFC 0165 §C.2; runs.md §Snapshot. Standard conditional request against any resource that carries an
94
+ `ETag` the discovery document (capabilities.md §1) and the run snapshot (runs.md §Snapshot): a matching value
95
+ MUST yield `304 Not Modified` with no body, and the 304 carries `OpenWOP-Version` like every response (versioning.md
96
+ §1.4).'
95
97
  - $ref: '#/components/parameters/OpenWOPVersion'
96
98
  responses:
97
99
  '200':
@@ -350,13 +352,10 @@ paths:
350
352
  required: false
351
353
  schema:
352
354
  type: string
353
- description: 'RFC 0115. Conditional revalidation. When this carries the
354
-
355
- current `ETag`, the host responds `304 Not Modified` with no
356
-
357
- body (capability-gated on `restTransport.conditionalRunGet`).
358
-
359
- '
355
+ description: 'RFC 0165 §C.2; runs.md §Snapshot. Standard conditional request against any resource that carries an
356
+ `ETag` — the discovery document (capabilities.md §1) and the run snapshot (runs.md §Snapshot): a matching value
357
+ MUST yield `304 Not Modified` with no body, and the 304 carries `OpenWOP-Version` like every response (versioning.md
358
+ §1.4).'
360
359
  - $ref: '#/components/parameters/OpenWOPVersion'
361
360
  responses:
362
361
  '200':
@@ -1069,9 +1068,7 @@ paths:
1069
1068
  minItems: 1
1070
1069
  maxItems: 100
1071
1070
  items:
1072
- type: string
1073
- minLength: 1
1074
- maxLength: 128
1071
+ $ref: ../../schemas/v2/ids.schema.json#/$defs/runId
1075
1072
  reason:
1076
1073
  type: string
1077
1074
  maxLength: 512
@@ -3046,17 +3043,18 @@ components:
3046
3043
  name: workflowId
3047
3044
  required: true
3048
3045
  schema:
3049
- type: string
3050
- minLength: 1
3051
- maxLength: 128
3046
+ $ref: ../../schemas/v2/ids.schema.json#/$defs/workflowId
3052
3047
  RunId:
3053
3048
  in: path
3054
3049
  name: runId
3055
3050
  required: true
3056
3051
  schema:
3057
- type: string
3058
- minLength: 1
3059
- maxLength: 128
3052
+ $ref: ../../schemas/v2/ids.schema.json#/$defs/runId
3053
+ description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5). The `/` is part of the
3054
+
3055
+ identifier and MUST be percent-encoded as `%2F` in the path segment.
3056
+
3057
+ '
3060
3058
  IdempotencyKey:
3061
3059
  in: header
3062
3060
  name: Idempotency-Key
package/package.json CHANGED
@@ -1,10 +1,23 @@
1
1
  {
2
2
  "name": "@openwop/spec-artifacts",
3
- "version": "2.0.0-rc.6",
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).",
3
+ "version": "2.0.0-rc.60",
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 \u2014 published from the openwop/openwop corpus tag; the peer dependency @openwop/openwop-conformance digest-checks at start (RFC 0168 \u00a7D.2).",
5
5
  "license": "Apache-2.0",
6
- "repository": { "type": "git", "url": "git+https://github.com/openwop/openwop.git", "directory": "spec-artifacts" },
7
- "files": ["api", "schemas", "spec", "CORPUS-STAMP.json", "README.md", "LICENSE"],
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/openwop/openwop.git",
9
+ "directory": "spec-artifacts"
10
+ },
11
+ "files": [
12
+ "api",
13
+ "schemas",
14
+ "spec",
15
+ "CORPUS-STAMP.json",
16
+ "README.md",
17
+ "LICENSE"
18
+ ],
8
19
  "sideEffects": false,
9
- "publishConfig": { "access": "public" }
20
+ "publishConfig": {
21
+ "access": "public"
22
+ }
10
23
  }
@@ -1089,7 +1089,7 @@
1089
1089
  "confidenceEscalationFloor": {
1090
1090
  "type": "number",
1091
1091
  "minimum": 0.5,
1092
- "maximum": 1.0,
1092
+ "maximum": 1,
1093
1093
  "description": "RFC 0039 §A. Operator-declared confidence floor at or above the spec floor of 0.5; when an OrchestratorDecision carries `confidence` below this floor, the host MUST escalate via a `clarify` or `escalate` interrupt instead of executing the decision. Absent: the spec floor 0.5 applies. Values < 0.5 are non-conformant; values > 1.0 are nonsense. Applies only when `version >= 2`."
1094
1094
  },
1095
1095
  "confidenceEscalationInterruptKind": {
@@ -4154,6 +4154,45 @@
4154
4154
  "description": "RFC 0114. Host delivers RFC 6902 (`a2ui-surface-delta-frame.schema.json`) delta frames over the run event stream to subscribers that negotiate `?a2uiDelta=1`; the full surface is materialized for everyone else, the event-log read, and replay. The recorded `ui.a2ui-surface` envelope stays full. The consumer re-validates the post-patch surface against the closed `catalogVersion` catalog before render and falls back fail-closed on any apply/validation failure (the host then re-materializes full)."
4155
4155
  }
4156
4156
  }
4157
+ },
4158
+ "signingKeys": {
4159
+ "type": "array",
4160
+ "description": "RFC 0168 §E.2, v1.x additive half (the same shape RFC 0179 used for root `preferredVersion`). The public keys this host signs certification bundles with; a bundle signature names a `keyId` and a verifier resolves it HERE. OPTIONAL in v1.x. It belongs on the v1 root and not only the v2 root because a certification bundle is v3 REGARDLESS OF MAJOR: under the one-package decision (RFC 0168 §D.3) a v1 host measured by a 2.x suite at `--target-major 1` emits a v3 bundle whose signature needs attribution exactly as much as a v2 host does, and a v1-only host has only this document to hand a verifier. Without it, every v1 host bundle is permanently unattributable: the signature attests INTEGRITY only — that the bundle was not altered after signing — and says nothing about who signed it, because a signer can mint a keypair and a key id at will. A host that publishes no key MUST NOT be read as having made a verifiable claim.",
4161
+ "items": {
4162
+ "type": "object",
4163
+ "required": [
4164
+ "keyId",
4165
+ "alg",
4166
+ "publicKey"
4167
+ ],
4168
+ "properties": {
4169
+ "keyId": {
4170
+ "type": "string",
4171
+ "pattern": "^[A-Za-z0-9._~-]{1,128}$",
4172
+ "description": "The identifier a bundle signature carries in `signature.keyId`. Unique within this array."
4173
+ },
4174
+ "alg": {
4175
+ "const": "ed25519",
4176
+ "description": "RFC 0168 §E.2 fixes the attestation algorithm; no other value is defined."
4177
+ },
4178
+ "publicKey": {
4179
+ "type": "string",
4180
+ "pattern": "^[A-Za-z0-9_-]{43}$",
4181
+ "description": "The Ed25519 public key: raw 32 bytes, base64url, unpadded — NOT PEM. One encoding on purpose; admitting two would mean every verifier handles both. Note that a plausible 43-character string can still fail to import as a curve point, so a publisher SHOULD verify the value imports as a real Ed25519 key rather than only checking its shape."
4182
+ },
4183
+ "use": {
4184
+ "enum": [
4185
+ "certification-bundle"
4186
+ ],
4187
+ "description": "What the key signs. Closed, so a future use is an explicit addition rather than a reinterpretation of a key already published for something else."
4188
+ },
4189
+ "retiredAt": {
4190
+ "type": "string",
4191
+ "format": "date-time",
4192
+ "description": "When the key stopped signing. A retired key MUST stay listed: dropping it silently invalidates every bundle it already signed, which is the opposite of what an evidence trail is for."
4193
+ }
4194
+ }
4195
+ }
4157
4196
  }
4158
4197
  },
4159
4198
  "additionalProperties": true
@@ -5,26 +5,58 @@
5
5
  "description": "A certification bundle that records what EXECUTED, not merely what passed.\n\nThe v1 bundle carried `{passed, failed, skipped}` scenario-file lists. Those three cannot express the distinction the whole program turns on: a scenario file counted as `passed` whether its assertions ran or its runner returned early, and a `skipped` entry could mean 'the operator excluded this', 'the requirement does not apply', or 'we could not check' — three claims with different consequences flattened into one word.\n\nv2 replaces the lists with per-requirement dispositions from RFC 0148 §A, and adds the counts §A.4 requires so a reader can tell a thorough run from a thin one without re-running it. `blocked` is its own total precisely because it is the one that invalidates a claim.",
6
6
  "type": "object",
7
7
  "additionalProperties": true,
8
- "required": ["bundleVersion", "suite", "host", "discovery", "claimedProfiles", "results", "scenarioManifestSha256", "targetConfigurationSha256"],
8
+ "required": [
9
+ "bundleVersion",
10
+ "suite",
11
+ "host",
12
+ "discovery",
13
+ "claimedProfiles",
14
+ "results",
15
+ "scenarioManifestSha256",
16
+ "targetConfigurationSha256"
17
+ ],
9
18
  "properties": {
10
- "bundleVersion": { "const": "2" },
19
+ "bundleVersion": {
20
+ "const": "2"
21
+ },
11
22
  "suite": {
12
23
  "type": "object",
13
24
  "additionalProperties": false,
14
- "required": ["package", "version"],
25
+ "required": [
26
+ "package",
27
+ "version"
28
+ ],
15
29
  "properties": {
16
- "package": { "type": "string", "minLength": 1 },
17
- "version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$" }
30
+ "package": {
31
+ "type": "string",
32
+ "minLength": 1
33
+ },
34
+ "version": {
35
+ "type": "string",
36
+ "pattern": "^\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z.-]+)?$",
37
+ "description": "The suite version that produced this bundle. A SemVer prerelease is admitted because RFC 0168 §D.3 makes the 2.x suite one package with `--target-major`: a v1 host measured by a prerelease 2.x suite legitimately emits a v2 bundle whose `suite.version` is `2.0.0-rc.N`. The original three-part-only pattern predates that decision and made such a bundle unvalidatable — found in Phase 4 when a host pinned to the RC line tried to certify."
38
+ }
18
39
  }
19
40
  },
20
41
  "host": {
21
42
  "type": "object",
22
43
  "additionalProperties": true,
23
- "required": ["name", "version"],
44
+ "required": [
45
+ "name",
46
+ "version"
47
+ ],
24
48
  "properties": {
25
- "name": { "type": "string", "minLength": 1 },
26
- "version": { "type": "string", "minLength": 1 },
27
- "vendor": { "type": "string" },
49
+ "name": {
50
+ "type": "string",
51
+ "minLength": 1
52
+ },
53
+ "version": {
54
+ "type": "string",
55
+ "minLength": 1
56
+ },
57
+ "vendor": {
58
+ "type": "string"
59
+ },
28
60
  "commit": {
29
61
  "type": "string",
30
62
  "minLength": 1,
@@ -40,41 +72,80 @@
40
72
  "discovery": {
41
73
  "type": "object",
42
74
  "additionalProperties": true,
43
- "required": ["sha256", "document"],
75
+ "required": [
76
+ "sha256",
77
+ "document"
78
+ ],
44
79
  "properties": {
45
- "url": { "type": "string" },
46
- "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
47
- "document": { "type": "object" }
80
+ "url": {
81
+ "type": "string"
82
+ },
83
+ "sha256": {
84
+ "type": "string",
85
+ "pattern": "^[0-9a-f]{64}$"
86
+ },
87
+ "document": {
88
+ "type": "object"
89
+ }
48
90
  }
49
91
  },
50
92
  "claimedProfiles": {
51
93
  "type": "array",
52
94
  "minItems": 1,
53
95
  "uniqueItems": true,
54
- "items": { "type": "string", "pattern": "^openwop-[a-z0-9-]+$" },
96
+ "items": {
97
+ "type": "string",
98
+ "pattern": "^openwop-[a-z0-9-]+$"
99
+ },
55
100
  "description": "RFC 0155 §E — canonical profile IDs only. Deprecated aliases go in `aliases`, never here, so a badge cannot be substantiated by a name that no longer means what it did."
56
101
  },
57
102
  "aliases": {
58
103
  "type": "array",
59
104
  "uniqueItems": true,
60
- "items": { "type": "string" }
105
+ "items": {
106
+ "type": "string"
107
+ }
61
108
  },
62
109
  "results": {
63
110
  "type": "object",
64
111
  "additionalProperties": false,
65
- "required": ["totals", "requirements"],
112
+ "required": [
113
+ "totals",
114
+ "requirements"
115
+ ],
66
116
  "properties": {
67
117
  "totals": {
68
118
  "type": "object",
69
119
  "additionalProperties": false,
70
- "required": ["executedPass", "executedFail", "skipped", "inapplicable", "blocked"],
120
+ "required": [
121
+ "executedPass",
122
+ "executedFail",
123
+ "skipped",
124
+ "inapplicable",
125
+ "blocked"
126
+ ],
71
127
  "description": "RFC 0148 §A/§C. All five are REQUIRED — an omitted total is indistinguishable from zero, and `blocked: 0` asserted is a different claim from `blocked` unstated.",
72
128
  "properties": {
73
- "executedPass": { "type": "integer", "minimum": 0 },
74
- "executedFail": { "type": "integer", "minimum": 0 },
75
- "skipped": { "type": "integer", "minimum": 0 },
76
- "inapplicable": { "type": "integer", "minimum": 0 },
77
- "blocked": { "type": "integer", "minimum": 0 }
129
+ "executedPass": {
130
+ "type": "integer",
131
+ "minimum": 0
132
+ },
133
+ "executedFail": {
134
+ "type": "integer",
135
+ "minimum": 0
136
+ },
137
+ "skipped": {
138
+ "type": "integer",
139
+ "minimum": 0
140
+ },
141
+ "inapplicable": {
142
+ "type": "integer",
143
+ "minimum": 0
144
+ },
145
+ "blocked": {
146
+ "type": "integer",
147
+ "minimum": 0
148
+ }
78
149
  }
79
150
  },
80
151
  "requirements": {
@@ -84,17 +155,38 @@
84
155
  "items": {
85
156
  "type": "object",
86
157
  "additionalProperties": false,
87
- "required": ["requirementId", "scenarioId", "disposition"],
158
+ "required": [
159
+ "requirementId",
160
+ "scenarioId",
161
+ "disposition"
162
+ ],
88
163
  "properties": {
89
- "requirementId": { "type": "string", "minLength": 1 },
90
- "scenarioId": { "type": "string", "minLength": 1 },
91
- "disposition": { "enum": ["executed-pass", "executed-fail", "skipped", "inapplicable", "blocked"] },
164
+ "requirementId": {
165
+ "type": "string",
166
+ "minLength": 1
167
+ },
168
+ "scenarioId": {
169
+ "type": "string",
170
+ "minLength": 1
171
+ },
172
+ "disposition": {
173
+ "enum": [
174
+ "executed-pass",
175
+ "executed-fail",
176
+ "skipped",
177
+ "inapplicable",
178
+ "blocked"
179
+ ]
180
+ },
92
181
  "assertionCount": {
93
182
  "type": "integer",
94
183
  "minimum": 0,
95
184
  "description": "How many assertions actually ran. `executed-pass` with `assertionCount: 0` is the vacuous pass this program exists to close, and a reader can now see it."
96
185
  },
97
- "witnessSha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
186
+ "witnessSha256": {
187
+ "type": "string",
188
+ "pattern": "^[0-9a-f]{64}$"
189
+ },
98
190
  "detail": {
99
191
  "type": "string",
100
192
  "description": "Required by RFC 0148 §A for any disposition other than `executed-pass` — an unexplained `blocked` is an outcome nobody can act on."