@openwop/spec-artifacts 2.42.9 → 2.43.1

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 (54) hide show
  1. package/CORPUS-STAMP.json +55 -54
  2. package/api/seams-v2.yaml +57 -1
  3. package/api/v2/asyncapi.yaml +1 -1
  4. package/api/v2/openapi.yaml +5 -4
  5. package/package.json +1 -1
  6. package/schemas/audit-verify-result.schema.json +40 -8
  7. package/schemas/v2/audit-verify-result.schema.json +106 -10
  8. package/schemas/v2/capabilities.schema.json +96 -0
  9. package/schemas/v2/error-envelope.schema.json +3 -1
  10. package/schemas/v2/registry-version-manifest.schema.json +2 -2
  11. package/schemas/v2/run-event-payloads.schema.json +2 -1
  12. package/schemas/v2/suspend-request.schema.json +2 -2
  13. package/spec/v1/core-standard-manifest.json +2 -2
  14. package/spec/v1/gaps.json +323 -0
  15. package/spec/v2/core/capabilities.md +6 -2
  16. package/spec/v2/core/conformance.md +1 -1
  17. package/spec/v2/core/connection-packs.md +1 -1
  18. package/spec/v2/core/conversation.md +1 -1
  19. package/spec/v2/core/errors.md +5 -4
  20. package/spec/v2/core/events.md +1 -1
  21. package/spec/v2/core/form-content-packs.md +1 -1
  22. package/spec/v2/core/idempotency.md +1 -1
  23. package/spec/v2/core/identity.md +1 -1
  24. package/spec/v2/core/interop.md +1 -1
  25. package/spec/v2/core/interrupt.md +21 -7
  26. package/spec/v2/core/node-pack-runtimes.md +1 -1
  27. package/spec/v2/core/oauth.md +1 -1
  28. package/spec/v2/core/overview.md +1 -1
  29. package/spec/v2/core/packs.md +12 -5
  30. package/spec/v2/core/persistence.md +1 -1
  31. package/spec/v2/core/portability.md +1 -1
  32. package/spec/v2/core/replay.md +1 -1
  33. package/spec/v2/core/runs.md +1 -1
  34. package/spec/v2/core/security-defaults.md +13 -2
  35. package/spec/v2/core/tool-catalog.md +1 -1
  36. package/spec/v2/core/versioning.md +1 -1
  37. package/spec/v2/core/webhooks.md +1 -1
  38. package/spec/v2/core/workflow-chain-packs.md +1 -1
  39. package/spec/v2/corrections.json +18 -1
  40. package/spec/v2/declaration.json +39 -14
  41. package/spec/v2/errors.json +11 -1
  42. package/spec/v2/ext/brand/README.md +1 -1
  43. package/spec/v2/ext/chat/README.md +3 -3
  44. package/spec/v2/ext/coordination/README.md +1 -1
  45. package/spec/v2/ext/dataIntegration/README.md +2 -2
  46. package/spec/v2/ext/entities/README.md +2 -2
  47. package/spec/v2/ext/kanban/README.md +3 -3
  48. package/spec/v2/ext/knowledge/README.md +3 -3
  49. package/spec/v2/ext/messaging/README.md +1 -1
  50. package/spec/v2/ext/restTransport/README.md +2 -2
  51. package/spec/v2/ext/webResearch/README.md +3 -3
  52. package/spec/v2/facets/auditLogIntegrity.schema.json +30 -0
  53. package/spec/v2/release.json +2 -2
  54. package/spec/v2/surface-baseline.json +50 -2
package/CORPUS-STAMP.json CHANGED
@@ -1,17 +1,17 @@
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.42.9",
5
- "corpusTag": "v2.42.9",
4
+ "version": "2.43.1",
5
+ "corpusTag": "v2.43.1",
6
6
  "files": {
7
7
  "api/.redocly.lint-ignore.yaml": "bf5a8350b88a72fa43f59605ed8d903ed24b6cfccda5e45509c9f6ed9ee4e712",
8
8
  "api/asyncapi.yaml": "d5ecb9ee6114582be3b1f662c84bfac9ae96dae7bacb853e461168f70a8e1c7d",
9
9
  "api/grpc/openwop.proto": "c3e72bb17cba514ee98feb6434e6c9b6ea6795bfd086489ec69fd882dd1ad977",
10
10
  "api/openapi.yaml": "69464bc0e1e71ef3b543a73d4fa4f67202343d2603c80af8033f6c3619ef1b30",
11
11
  "api/redocly.yaml": "b0604c89b2ca6d5076ec25725c539dad44a741a811fe524439ee6daef8baa09f",
12
- "api/seams-v2.yaml": "91a84ef4a8d38824e528ee7f59b29df34c167f2e5e695f200ad19b0fd4b47cdd",
13
- "api/v2/asyncapi.yaml": "b93593055cf033fdf37b8a18fd36a2045b989a97a97b49adda23efb6ff1654e6",
14
- "api/v2/openapi.yaml": "d698d93dd3ef46c060bcdb68f8950aa983ef8904ad18cf14b87ce96304ae59ed",
12
+ "api/seams-v2.yaml": "a0a51b581511aaec7f86c67e8157988e580564f569343556dfce3c5329926ce2",
13
+ "api/v2/asyncapi.yaml": "0ad04a46c6985d782a7cc3645ded70fd973fcda86ef244086419274062855c09",
14
+ "api/v2/openapi.yaml": "95bf518a2290e614e2ba750dfe5233f8df242fafdd31dd84beafbdd512c0e810",
15
15
  "api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
16
16
  "schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
17
17
  "schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
@@ -29,7 +29,7 @@
29
29
  "schemas/annotation-create.schema.json": "567e8327777968e0ddab8e1547b4acd7beda734cf9d1fc6cde17037d8d9540d4",
30
30
  "schemas/annotation.schema.json": "b26d22f9a97e1ae7c195e8799964aca804e78452a079ca3a0d61ea013907ce91",
31
31
  "schemas/artifact-type-pack-manifest.schema.json": "60342fcb15eb7f3ab46271f0641409a30d3a4a8f318b1020c53070886b191252",
32
- "schemas/audit-verify-result.schema.json": "de9cc3b9d7b97995b906dc96438244ea6b93c26b5faaf4926320676b48ba4fcc",
32
+ "schemas/audit-verify-result.schema.json": "0d3a3088ac1c32f9df66d346c33d7adbd8037940dba040e14ea847565a1a14bd",
33
33
  "schemas/budget-policy.schema.json": "3d4fe30ae129fe136ab9ece395f2a2a42a76360786b1b9a1d5f1cbc753eb5b39",
34
34
  "schemas/capabilities.schema.json": "56b367074bce0f02ff87e0b84ccdf91856793d3d285e28f261656edba6352cc0",
35
35
  "schemas/certification-bundle-v2.schema.json": "2f85530dd04824a15810c94e96869362dee1e78396eca21fdd18e5501416bb7d",
@@ -114,9 +114,9 @@
114
114
  "schemas/v2/annotation.schema.json": "eb4813cdaa8e325412cfcaeeee5c8a28f3751c946dec64e546c7ba0ad3aad8d4",
115
115
  "schemas/v2/artifact-type-pack-manifest.schema.json": "c8820351a2ab93855bd654ad3d8a9788f97975d09b3a7a0418e374ed6114595d",
116
116
  "schemas/v2/artifact.schema.json": "85b9dc284d39b99d2a66fa8cbf47f2dd3d8526d3bd6cc411ad315b372de38975",
117
- "schemas/v2/audit-verify-result.schema.json": "2a4bfc42976717f78c10468fdba756ca6b19e49762699e6dffd418ffff08e55d",
117
+ "schemas/v2/audit-verify-result.schema.json": "14af8e9283510f0a40e48a2059c929ee44e0fc9fa3cc66a95bfbe90b17c48297",
118
118
  "schemas/v2/budget-policy.schema.json": "c7449daeb6e1d95e7a047b8c2814d3d54748697c27046972834874867d9b5f4c",
119
- "schemas/v2/capabilities.schema.json": "959b7a1b8e40aeafb8b9702bd0e4b220c0beb02a6afa3ca64fe9b04b95ae3df5",
119
+ "schemas/v2/capabilities.schema.json": "ae6f60641d6ed680351b2710df945257c401f1ed83534f7e44fa2e651dc401ab",
120
120
  "schemas/v2/certification-bundle.schema.json": "82ce31a1ed6c7e21b0ba88ff62a7b8b768fc3b176b1d06fce023203830b94725",
121
121
  "schemas/v2/channel-presence-payload.schema.json": "4eeb224910e6f7eee3ab5e7c3899559c25c83a26d0022e0ad195c4672611977a",
122
122
  "schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
@@ -142,7 +142,7 @@
142
142
  "schemas/v2/envelopes/schema.request.schema.json": "be2c5f7aa881cdd252ccff47ac02193659e1393633a1541f4297383205d384a2",
143
143
  "schemas/v2/envelopes/schema.response.schema.json": "d049a081267c06c28879c331b147f3ed821b14ccfd93005c67aff64db0a8c68e",
144
144
  "schemas/v2/envelopes/ui.a2ui-surface.schema.json": "e92a2548ba65454c9e0a34f72ea6768d18f59e61fa5da7668d0b2d5baddaddc8",
145
- "schemas/v2/error-envelope.schema.json": "467d7109c54bff71a6cfd457d3bd65a23ca34b8e5577e742d080692771a78ebf",
145
+ "schemas/v2/error-envelope.schema.json": "d1a6862930e7c3fbc8ec334ef17953ac7b716525c6c82769edf89d0809d0c94b",
146
146
  "schemas/v2/eval-summary.schema.json": "2f384daf05b8f3b4f604688cae504d6d9971ba41b8c771e55fe9a17e09e86b7a",
147
147
  "schemas/v2/export-bundle.schema.json": "bd28905a7729437ab7f2ad8bb33e13a371b2bf5605a7eb2962a0d246de312d69",
148
148
  "schemas/v2/form-content-pack-manifest.schema.json": "a1942a124e250a6e9fbdb6b811c5a125e78fbcbcaa46dfc71d0636f24710a339",
@@ -167,11 +167,11 @@
167
167
  "schemas/v2/prompt-ref.schema.json": "11538fa36a7a652c93100cac4f1857eb4130137b546e3d94890618636d44b729",
168
168
  "schemas/v2/prompt-template.schema.json": "494fc83028cb3af5dbb8a943d0e83b2348f7775e9fa02369162bcb58a6f81559",
169
169
  "schemas/v2/proposal.schema.json": "a5c582ce1e854e5fe10412ebed00e537961ee827bbaca506ca374b200a685992",
170
- "schemas/v2/registry-version-manifest.schema.json": "f05c620db2ee8f9c60fbe33f2e385cc1bc98bc92c588de8a7170c442b1bbe068",
170
+ "schemas/v2/registry-version-manifest.schema.json": "940cfd82511690cd6f2539e5676b185e7812628d0707c283fd7ffb33b6e54afd",
171
171
  "schemas/v2/residency.schema.json": "3fd23c9732beb140504e81560fc426eb6764d547e56da5fb92c5a5c7bf04db3a",
172
172
  "schemas/v2/run-ancestry-response.schema.json": "334c17f2062dea62726ca1d07b8be3f169cdc422af843c1def5fb317039814c9",
173
173
  "schemas/v2/run-diff-response.schema.json": "8bdb2045c274580038bd74781f7d062f5049839797c164a89de4ed89edc53a74",
174
- "schemas/v2/run-event-payloads.schema.json": "b7b497c0a0fa41f279750138227d3378fc83ca894fb33e4b0a4fe7c685b84bc4",
174
+ "schemas/v2/run-event-payloads.schema.json": "f8518f366ad4379356eaf94063817ea0e75975873b883f75e42d98bef6eb4565",
175
175
  "schemas/v2/run-event.schema.json": "2f0d7416bd376c56affe97b6b2b49981532e8e9ff45c0a162cf806c78b3e7fb7",
176
176
  "schemas/v2/run-list-response.schema.json": "c2dbc34768dcf64528914a213aa3cb55952e8e3e90a64b04a9423b2a19749d38",
177
177
  "schemas/v2/run-options.schema.json": "f0e9f494d80086c2ed2cf9fe87df54e5b4e66601699c4a1089f4edbc7ba58867",
@@ -183,7 +183,7 @@
183
183
  "schemas/v2/self-hosted-runner-result-frame.schema.json": "8e739a721f350226f3ffb4af752b4fe0a72016042a7b6f42e16c0487c3c58983",
184
184
  "schemas/v2/subject-link.schema.json": "1fc941d6c14af886534009f2ffa6611e2035eb07e30b1df918c50d6bafff026c",
185
185
  "schemas/v2/subject.schema.json": "094e981fb20052a911393e219ea5f2065d8b8417b65080a70c5ea99fd960a8fe",
186
- "schemas/v2/suspend-request.schema.json": "02b45582997d0529aa85f2b5aeaf300e3e44ff0b185c449e14daf6f47b1015d5",
186
+ "schemas/v2/suspend-request.schema.json": "368d9932efb08f85b4520cac44b3c553876209f55bada93b5fcac93cc890b411",
187
187
  "schemas/v2/tool-descriptor.schema.json": "8c98fb5e93bc649dff859d3d1dde8075db929efd6c49c496252d0a88cccc73e1",
188
188
  "schemas/v2/trigger-event.schema.json": "710ecca8b3ecdad3a532a96768177f062192b24a589a4f798c7eb24bab64b30a",
189
189
  "schemas/v2/trigger-subscription-registration.schema.json": "04bc314a07c7e8b565577cb8df5821d968ce2af915900dfdccd4a24e928d20db",
@@ -204,75 +204,76 @@
204
204
  "schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
205
205
  "spec/v1/alias-detectors.json": "29f21e0fb2c7a232a92a5c19b4cba3a86bc3b5e16f06780452f0421c66c6ec38",
206
206
  "spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
207
- "spec/v1/core-standard-manifest.json": "717b478af97d11a4c7844fceecd536a70783ca1cbb7079ec1434e710a24fc6e5",
207
+ "spec/v1/core-standard-manifest.json": "0c23e7ab67fa69cda05de86da9dee127e62d82045137fcecc1684d3201feaa97",
208
208
  "spec/v1/deprecations.json": "46df807fb4adf0aae24671c20f69975cf3496e3bc3a521cb7e6ea556bdce563c",
209
209
  "spec/v1/deprecations.schema.json": "3e393c405d2a41b467d8c5e3c468549078df1ce6a6d2588fc488097b95d9b55b",
210
210
  "spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
211
211
  "spec/v1/event-codemap.schema.json": "d05933b2e88103aff51a2f774df97b9bda065e0fc88dbd9b114cc47a32189174",
212
212
  "spec/v1/extensions.json": "79a60754aa16cbdbdb604f8e5c00038af535a1690a4d07bd5ff7c38f0256a7bc",
213
- "spec/v1/gaps.json": "2b032d91d614a758db347be4f5e617b8ac3c4622b6f95ffcfa928276c0fb7377",
213
+ "spec/v1/gaps.json": "dfdb7a8344316ec6b72e2e249736306cb19155f61180c5f13a44f57d51e803e8",
214
214
  "spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
215
215
  "spec/v1/migrations.json": "2efcd9064b2bc65a84a3b3d281aa86a91efd002690c1f4f14e8335c4a18194d1",
216
216
  "spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
217
217
  "spec/v1/operation-path-manifest.json": "fada0342815fb129c1ae61f1829bd6e34417717408ce86fcc54280f373c19e74",
218
218
  "spec/v1/spec-gaps.json": "ea9612af55bea9dae3e82223d4f714243f8f590b0193f1188257b13491a38afc",
219
219
  "spec/v2/README.md": "4fa067d377580495e60baf08a4eafc3214b8ca48d8fb270bf91fc5066fad7186",
220
- "spec/v2/core/capabilities.md": "225269a257421ebe677070dd13b05f6f297a2a343916e440b7428b839e2da9a4",
221
- "spec/v2/core/conformance.md": "e7bd7d54062f28801071165a1b92edbeee3774bb3710f31eed75817139b66d95",
222
- "spec/v2/core/connection-packs.md": "3168d2c8f1a59417a7256a678f4203570be434f64dead6b11fdec86b352686df",
223
- "spec/v2/core/conversation.md": "6db43d8160bc45d3944aa1151816a6f0fd1669d59d7f822267a2d6cc9db22990",
224
- "spec/v2/core/errors.md": "d14649ee60f8260ec163464163409ad7f50cb86fee7b846e0190f66070b3774b",
225
- "spec/v2/core/events.md": "234338deb97be648731e8ab2126a90b7b8ad0a7070d98ffc85ee4689ff059791",
226
- "spec/v2/core/form-content-packs.md": "41d40afe0a3760bcd792a4c406e16f28b0ab0aa7b0925323110d3fa2730d5400",
220
+ "spec/v2/core/capabilities.md": "ad728e8a761153b55d036ece55043ff62d0982121e2e629e5e7cdf560fca3c03",
221
+ "spec/v2/core/conformance.md": "0cfceb926eed87055550a5c23e640210c795fc8cf9dd1b2544db0e2b3842c564",
222
+ "spec/v2/core/connection-packs.md": "1ee129d792c537bfe82393ccb92555d8e6ddc342b1aa781a13f101b27ec38171",
223
+ "spec/v2/core/conversation.md": "354fa57c73d11062e523a44aa75a6353c5c81aefaf306d30c42416a228c82c86",
224
+ "spec/v2/core/errors.md": "bcb62944d8a482b1b6d5ac08a692ad7e4aaadf6165746c7ba7fa39157be2a300",
225
+ "spec/v2/core/events.md": "604abb6f9e2259a04103e1cb76d728712c3701c0d84dd915d4dc2949c912ee5e",
226
+ "spec/v2/core/form-content-packs.md": "02931227899676fd4581a27017be2a6c4953904717be9b81c29d12f87ab3917d",
227
227
  "spec/v2/core/headers.md": "5cb1624fa63acc81992b6a6d842ec392cf7271aaf2f65d1f83c8c4fa286e6730",
228
228
  "spec/v2/core/host-services.md": "15923cceb95cba148a32e0944f6a2d1d25e9cc36b0c169b67ee42d483bcac800",
229
229
  "spec/v2/core/i18n.md": "846c6d2878fc8454c2ae0a1576f6b6e6c8958d47187a6c96cc5826ca3c3e2e91",
230
- "spec/v2/core/idempotency.md": "21830b7d23dd03e9e8ba4b0de253dd001fc960f166310d6b6b60b1c33cf60b30",
231
- "spec/v2/core/identity.md": "acb7f739729c69a1f40dcaa5b1d873ba9f32993c17bfd297f5fa56351cf47c69",
232
- "spec/v2/core/interop.md": "3cfa2af70ae6ba1f4b4268447d46d1d2f5fb65f7917f15bad159d9779d25b1a6",
233
- "spec/v2/core/interrupt.md": "b31b3f3be7888043ef38c82367a8d743a775c2b6bd499f7da44355ff00452435",
234
- "spec/v2/core/node-pack-runtimes.md": "d52966319c53aaa03575025915b73b470a42832c039c41d73aff6931758630cb",
235
- "spec/v2/core/oauth.md": "57f167d899993b6959c243e4102819f4014b365299b9b2b253decd2781e6b8b7",
236
- "spec/v2/core/overview.md": "3dbc8c0cf7474b31816b1a12412c1edf5597066c38edcdbca4dd2e465880f65b",
237
- "spec/v2/core/packs.md": "26b0fc3b81f98adbdf70796482db89fa81a6ce3da6f830cd5e8b3d71541c497f",
238
- "spec/v2/core/persistence.md": "bba672ed3bf6d83af6e4e65c0f4f480fc21fe12207811e321306af2108d9010d",
239
- "spec/v2/core/portability.md": "a35fbe66b8b5ccf63cf0216157d4b61d4c47f6dc8e757c830569ddf244e21e8a",
240
- "spec/v2/core/replay.md": "a5be4e05242f25f8b5a8a4fb31bd359d5abb4bf34fa8e536403a8ee5779ab876",
241
- "spec/v2/core/runs.md": "72a94c27d884036d84290e9b108702e98b0c6b2fb598213bbda44fba9c9f860d",
242
- "spec/v2/core/security-defaults.md": "179fdd2efcc1454453243f8ab6473335dfd4389e70cbbc2669f5b83714092973",
243
- "spec/v2/core/tool-catalog.md": "6b54b8ce221107de19c718f374a720123c6a5f55db4054e6625f73d06e0a442f",
244
- "spec/v2/core/versioning.md": "2bfe16a72a909c46b4585fab39dc9e94c97506ed95df6b1b527f97b4cd3684ef",
245
- "spec/v2/core/webhooks.md": "78fe97ab5bdee20218183efe32abf5ba1996705d757cb37c8d6a4d808c44199f",
246
- "spec/v2/core/workflow-chain-packs.md": "35a957f1dd22016febd76bf2c4dfb79cda58b95d8efd8893b5e5babda9f79cf3",
247
- "spec/v2/corrections.json": "b19f8a80fce7e6473012a20a216e358dd38ae7411e6a348f8031e325ed1a0a01",
230
+ "spec/v2/core/idempotency.md": "2084d756789c1faf5121593fb39e67ca36a4c227178e175004742e403178ea49",
231
+ "spec/v2/core/identity.md": "2dceb1c2697015e4a4fa8a9b28f4fbd25fa44a76ca5a919c752e2a8163c819db",
232
+ "spec/v2/core/interop.md": "e72e25dff864c83b2980d7366b34054cffa072af0225821199f260f6228d260e",
233
+ "spec/v2/core/interrupt.md": "b4376fbbaaa0c7b0ca5df04d40049b487753f6736f8e54ed7d75b7f8563b2f72",
234
+ "spec/v2/core/node-pack-runtimes.md": "e1088cb69b8c3c67256c494063328916c2980ab1aa97a7063de25bab82fdb1e5",
235
+ "spec/v2/core/oauth.md": "c96483a44b62978c596945fbb7d7c863cf6056cd980fdb4cf4e97555e3e10b72",
236
+ "spec/v2/core/overview.md": "4087f171b00a3907551f508fec32fb9b0b3ccec8c0ac1b0c7c6d32cd2c0e3ff8",
237
+ "spec/v2/core/packs.md": "b472a583211d466d6ab8e00c414c225b246e678043fe6283a710c899fadde913",
238
+ "spec/v2/core/persistence.md": "711874f74cb08b03cd118d683056db10a063517762fcea73ec70feb5d983e6a4",
239
+ "spec/v2/core/portability.md": "87c4327f674f714fda6217fd79b99d2ba219ad47dc02f9751bb56c200fb2c17a",
240
+ "spec/v2/core/replay.md": "22cc8dc94cd145201f1269028fb0cb2abae2d988ee748205582edd59afd1da4d",
241
+ "spec/v2/core/runs.md": "157600d7dd2554856bba29e231e46489b5097cc0c0a0e74073549d410897a78b",
242
+ "spec/v2/core/security-defaults.md": "153884da7a2d54c30c81b5e649cfdef31e151b3a2a19dee1bc5a16c35d60a3aa",
243
+ "spec/v2/core/tool-catalog.md": "d16a9004418719c48301804aefa4d7ab6f41112a4ed83727f552aa1b92b418b0",
244
+ "spec/v2/core/versioning.md": "e3b3ab6d76e51035039a32173e9b412628a52c8fe7b16687ff58a2d0d983faa0",
245
+ "spec/v2/core/webhooks.md": "6fc2fb7d9a993a682765ebc68e5c5bb215046ee599234ca7a660465279444eff",
246
+ "spec/v2/core/workflow-chain-packs.md": "fdce7a8477e269950a2bac05ee6eddbd66eb0b670b464d00054f7196ec05d29c",
247
+ "spec/v2/corrections.json": "59f647f4d22477f6c2b06dcf913b682dde5d51dd5e607a5d0cf648ab60864d6e",
248
248
  "spec/v2/corrections.schema.json": "46bbffb954d13bd9995aebc912ceeb2544f7064331abf25fd6ab85c81a5cec94",
249
- "spec/v2/declaration.json": "1253a5590ec2d9ba511d15e8a9d9da5e6926c4daa981a26b73b29bc915477013",
249
+ "spec/v2/declaration.json": "7765c86f7a3fbdd5a80c6778fb22335f099dcc4caddf9747fb144c1f318a17f1",
250
250
  "spec/v2/declaration.schema.json": "ef951633e4070899f64828f5cf1b5f4870270a0360f81dbb49b5b4d6cd407550",
251
- "spec/v2/errors.json": "b89664e9e0e7603253712263ce0843ce607e276c67d0acaf4a680c39bb2bd682",
251
+ "spec/v2/errors.json": "dc1a846abe3e888acb0ce4a33cf9d1fb98e41fcc8b49f42b3682fd65deca2eb2",
252
252
  "spec/v2/errors.schema.json": "47404ad53e6147cf9017b813483712466573e419fb33e6c4b6c12d3e7deba1bc",
253
253
  "spec/v2/event-codemap.json": "37869a03cdfd8758b57e6f350641a6ebbd383231cebda51f5473ad85f94ab74c",
254
254
  "spec/v2/event-codemap.schema.json": "b173f2a9bcc0bf9b62a474ce3b91e1431d597e64fd1560fc58662cd8606eaf9c",
255
255
  "spec/v2/ext/README.md": "e2731ebb5156ece1840ed3b96e7a347f6345e73071ff4e54df0f21c1585c5027",
256
256
  "spec/v2/ext/a2uiSurface/README.md": "5518c7f355262eb7cc584422f4ff8e548f066b211878f969274a3a578127622d",
257
- "spec/v2/ext/brand/README.md": "52b31ddb8e86820afc8fb1afd29fddf7940dc00454f60ba0dbada718a9b63157",
257
+ "spec/v2/ext/brand/README.md": "4f9db1715219070fc57e06cc9b066f13aa130dd50f4869722d908e6e15720787",
258
258
  "spec/v2/ext/canvas/README.md": "0e91b68566d2be90319feedfaebe2cd2db0bd8f72fb59c958fa723c05e38023f",
259
- "spec/v2/ext/chat/README.md": "a934ad42134a58968a1ccc03d7fe317fc8b8b14bf847d97bfe7773086c3d22b7",
260
- "spec/v2/ext/coordination/README.md": "9c3513aab388afbe3ab95db60ef15e9c9d4a7a0cd7d3e92b567136235a7183d2",
261
- "spec/v2/ext/dataIntegration/README.md": "88be31dcabacdd4e012b8c0795d9a3d82bc2cc62b67de4c05ccdd5d9afed9166",
262
- "spec/v2/ext/entities/README.md": "78096383811fefa264f3ed0d97c8174a61870fda5a78cc97a5c1bb761ac8cfd7",
259
+ "spec/v2/ext/chat/README.md": "f59b6706162abbfff96f8bccd4c0e1aeed721047cf62e9af58c875727a38d716",
260
+ "spec/v2/ext/coordination/README.md": "c7fe0884f52405fdd02c5f9ec309ac6b585685ee06ec5f338fff7acf03c07148",
261
+ "spec/v2/ext/dataIntegration/README.md": "286dec8aa29e4d3225cbd8b3a361f5a438c3288e759966b9415ecbb99c576e70",
262
+ "spec/v2/ext/entities/README.md": "956d4a9a2aedb8cb9c79ce8145580480920474cc6943f0e33ede32d7b20414dc",
263
263
  "spec/v2/ext/grpc-transport/README.md": "6ba378e3c6d1f2e3269b392cfdf0c40565ee9bfa259d1baaa9ee1d350e38e792",
264
- "spec/v2/ext/kanban/README.md": "1d5bc89133ae02984065cb79d38e7627c36ffd6e0d2a58eb6207aaa020e7b0ad",
265
- "spec/v2/ext/knowledge/README.md": "67be1dc97e5cdc9527d56f4836dc96841548a9c2f8f964777825d56fdf9f0e53",
264
+ "spec/v2/ext/kanban/README.md": "bfc386dc0f874a4afa1e3ec6a2f99084b547dcce9bd363da3b8ebd8786b9c184",
265
+ "spec/v2/ext/knowledge/README.md": "cbe1f945a757791dedac0fd542a68c86c5b457778b831d58d9ae44a2baa270f2",
266
266
  "spec/v2/ext/launchStudio/README.md": "c732bb855252c31ee1e971cbc2936f2ca29b234c111d548c648095634507babb",
267
- "spec/v2/ext/messaging/README.md": "32c222c0bce515e75b62a5a44b9f09d0e23c1b40f424e1ab8309deefd296c4b6",
267
+ "spec/v2/ext/messaging/README.md": "484cfa3091f89261dbdd48372afba441d3e6c16c3169a861b0ed7fc8c2902780",
268
268
  "spec/v2/ext/portability/README.md": "c59423ee446638b748a911b9e97e803c4786157be6120f656f0a060586bc7b82",
269
269
  "spec/v2/ext/provider-idempotency/README.md": "9d1bccef0ec16a19a3370ae79c2f5a1726ce0d1d25a51352907f288a2ccb15d7",
270
270
  "spec/v2/ext/provider-idempotency/registry.json": "5b5fecad604fb4ab38da39f5abe697a4e57b05406c398f8afeb377331b2bd965",
271
- "spec/v2/ext/restTransport/README.md": "d485417310616b2f1da97106d970293f3f5712f6cadb6b840f5ac84ee28bdda6",
271
+ "spec/v2/ext/restTransport/README.md": "acda51f1a973308841861a119def691db972f310c7b7250ab14f248e9c968585",
272
272
  "spec/v2/ext/sandbox-runtime-notes/README.md": "0d1290fb1e20b2e35c0b15051541ab6546e4e2a6f693b4f912cb3f7d6a65e92c",
273
- "spec/v2/ext/webResearch/README.md": "3ddca9180c4ef9971722a2e6a0c1ffb5cc783411ba554fb9fbdf15b4da624942",
273
+ "spec/v2/ext/webResearch/README.md": "b675e6f6646128d781b661f754c2393eed86e5935d16c3a22df582a5ce025b9b",
274
274
  "spec/v2/facets/a2a.schema.json": "b68bf5e29e455e46c2ad7cfcccf5963730ec2310ff9db81884550d8df30fd6ef",
275
275
  "spec/v2/facets/aiProviders.schema.json": "81fb39b6698564d9d07a0d10525ecb6360c152fe3f3a5ea0439112509ca130e2",
276
+ "spec/v2/facets/auditLogIntegrity.schema.json": "9a7f81320c8f940c6f4129bc7dd895a4063231c5458a717a08c2cbf9bb886c46",
276
277
  "spec/v2/facets/auth.schema.json": "7d98bc81a0f7d307460d039eebfebd21388091bfe1d538762583940f94c0bd2a",
277
278
  "spec/v2/facets/envelopeStrictness.schema.json": "28be0a27f880bd45ec1222a16155f5e9167bbca57bf0322970fe1eb2654562aa",
278
279
  "spec/v2/facets/heartbeat.schema.json": "81d7fa1895a8b0241bd07cf00a7e7905bef0fd14eb3427325261c62eee5746a6",
@@ -297,9 +298,9 @@
297
298
  "spec/v2/path-manifest.json": "17298a245c5da9a70aa7ab0b7f2db4277e06209d6fcdd7187a8b4cea179c08f3",
298
299
  "spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
299
300
  "spec/v2/profiles.json": "180beb9ef2d161766fa23b2987e7e829851e3d316273147cf6a4a3f324befd6b",
300
- "spec/v2/release.json": "1ac31e3dd517036b357bfa5743b760e21d28b8cda7f8550e65d8444e964751c6",
301
+ "spec/v2/release.json": "e52aaf9f10896088b2fcca2586ab05a477043275e7a3a48b769ffb4865e37c4a",
301
302
  "spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
302
- "spec/v2/surface-baseline.json": "5cab3b39eaeb344361ac7d9038d15be5cf6a5620f1912fdd0c184cef95bae857"
303
+ "spec/v2/surface-baseline.json": "d5b4e6c55a1d4bbe54241f9d0d020e7f9857f29912bb9f2ef910087b276be7e6"
303
304
  },
304
- "corpusCommit": "67e27a37bbd22f24ca2b6a2bce8f0a0f0971e3c8"
305
+ "corpusCommit": "a99d0e2a2fd3000cff23cade553a6a45ad8f17a9"
305
306
  }
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.42.9
4
+ version: 2.43.1
5
5
  description: 'The OpenWOP conformance seams profile (`openwop-conformance-seams-v2`): test-only operations in their own
6
6
  path space, `/conformance/seams/…`. The profile is versioned and validated against the canonical v2 schemas with no tolerance
7
7
  path. It is not a capability: a host advertises the profile, never a `testSeams` flag.
@@ -801,6 +801,62 @@ paths:
801
801
  $ref: '#/components/responses/ValidationError'
802
802
  '401':
803
803
  $ref: '#/components/responses/Unauthenticated'
804
+ /conformance/seams/sample/webhooks/rotation-overlap:
805
+ post:
806
+ tags:
807
+ - Seams
808
+ operationId: shortenRotationOverlap
809
+ summary: Shorten the rotation overlap in progress on one subscription — RFC 0201 §E.20 witness
810
+ description: 'Sets the subscription''s `previousSecretExpiresAt` to the time the request was received plus `overlapSeconds`,
811
+ and reports the stored value. The seam MUST write the same stored expiry `rotateWebhookSecret` wrote and the production
812
+ signer reads; the signer MUST NOT branch on the seam, so which secret signs after the new expiry is production''s
813
+ decision. It changes only the overlap in progress and MUST NOT lengthen it: an expiry at or after the current one,
814
+ no overlap in progress, or a subscription that did not opt into `standard-webhooks-1` answers `400 validation_error`.
815
+ Tenant checks are those of `rotateWebhookSecret` (`403 id_tenant_mismatch` before the lookup; `404` when unknown).
816
+ OPTIONAL, and never served outside the seams profile; consumed by `v2-webhook-secret-rotation` when the advertised
817
+ overlap outlasts the wait cap. An unserved seam leaves that leg a partial witness, never `blocked`.'
818
+ requestBody:
819
+ required: true
820
+ content:
821
+ application/json:
822
+ schema:
823
+ type: object
824
+ additionalProperties: false
825
+ required:
826
+ - webhookId
827
+ - overlapSeconds
828
+ properties:
829
+ webhookId:
830
+ $ref: ../schemas/v2/ids.schema.json#/$defs/subscriptionId
831
+ overlapSeconds:
832
+ type: integer
833
+ minimum: 1
834
+ maximum: 60
835
+ responses:
836
+ '200':
837
+ description: The overlap is shortened.
838
+ content:
839
+ application/json:
840
+ schema:
841
+ type: object
842
+ additionalProperties: false
843
+ required:
844
+ - webhookId
845
+ - previousSecretExpiresAt
846
+ properties:
847
+ webhookId:
848
+ $ref: ../schemas/v2/ids.schema.json#/$defs/subscriptionId
849
+ previousSecretExpiresAt:
850
+ type: string
851
+ format: date-time
852
+ '400':
853
+ $ref: '#/components/responses/ValidationError'
854
+ '401':
855
+ $ref: '#/components/responses/Unauthenticated'
856
+ '403':
857
+ $ref: '#/components/responses/Forbidden'
858
+ '404':
859
+ $ref: '#/components/responses/NotFound'
804
860
  /conformance/seams/sample/webhooks/receive:
805
861
  post:
806
862
  tags:
@@ -1,7 +1,7 @@
1
1
  asyncapi: 3.1.0
2
2
  info:
3
3
  title: OpenWOP v2 event streams
4
- version: 2.42.9
4
+ version: 2.43.1
5
5
  description: 'OpenWOP v2 event streams over SSE. The run-events channel''s address is the OpenAPI path key, and the server
6
6
  pathname is empty (bare origin). `streamMode` is a stream mode from the closed set, or a comma-separated combination of
7
7
  them; `values` never combines. `hostEvents` has a default address, `/host/events`; a host MAY declare another under `heartbeat.deliveryChannel`.
@@ -1,7 +1,7 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: OpenWOP v2 API
4
- version: 2.42.9
4
+ version: 2.43.1
5
5
  summary: REST surface for declaring, executing, suspending, resuming, and observing multi-step workflows.
6
6
  description: 'The OpenWOP v2 REST API. Paths are unversioned and served at the bare origin; a client selects a version with
7
7
  the `OpenWOP-Version` header from the host''s `protocolVersions[]`. Conformance seams and test-mode operations are not
@@ -2638,9 +2638,10 @@ paths:
2638
2638
  summary: Verify the audit-log hash chain over [fromSeq, toSeq].
2639
2639
  description: Re-walks the audit-log entries in the requested range, recomputes each entry's `prevHash` from the canonical
2640
2640
  RFC 8785 JCS serialization of the prior entry, verifies signed checkpoints against the host's advertised `auditLogIntegrity.checkpointPublicKey`,
2641
- and returns `chainValid` with any anomalies. Hosts MUST require the `audit:read` scope. Hosts that do not advertise
2642
- the `openwop-audit-log-integrity` profile MAY omit this endpoint entirely; clients SHOULD check `/.well-known/openwop`
2643
- first. See `spec/v1/auth-profiles.md` §`openwop-audit-log-integrity` §4.
2641
+ and returns `chainValid` with any anomalies. Hosts MUST require the `audit:read` scope. Served by a host that advertises
2642
+ the `auditLogIntegrity` family, which MUST list every checkpoint whose `atSequence` is in the range, ascending; a
2643
+ host that does not advertise it MAY omit this endpoint entirely, and clients SHOULD check `/.well-known/openwop` first.
2644
+ See `spec/v2/core/security-defaults.md` §Audit-log integrity.
2644
2645
  operationId: verifyAuditLog
2645
2646
  security:
2646
2647
  - ApiKeyAuth:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openwop/spec-artifacts",
3
- "version": "2.42.9",
3
+ "version": "2.43.1",
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": {
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "chainValid": {
20
20
  "type": "boolean",
21
- "description": "True when every entry's `prevHash` matches the SHA-256 of the prior entry's RFC 8785 JCS canonicalization AND every signed checkpoint in `checkpoints[]` verifies against the host's advertised `auditLogIntegrity.checkpointPublicKey`. False when ANY break or invalid signature is detected; `anomalies[]` enumerates the breaks."
21
+ "description": "True when every entry's `prevHash` matches the SHA-256 of the prior entry's RFC 8785 JCS canonicalization AND every signed checkpoint in `checkpoints[]` verifies against the host's advertised `auditLogIntegrity.checkpointPublicKey`. False when ANY anomaly is detected: a chain break, a mutated or missing entry, a checkpoint root that does not recompute, or an invalid signature. `anomalies[]` enumerates them (RFC 0218 §C)."
22
22
  },
23
23
  "checkpointsValid": {
24
24
  "type": "boolean",
@@ -31,11 +31,14 @@
31
31
  },
32
32
  "anomalies": {
33
33
  "type": "array",
34
- "description": "One entry per detected hash-chain break in [fromSeq, toSeq]. Empty array MUST appear when chainValid is true (not omitted).",
34
+ "description": "One entry per anomaly detected in [fromSeq, toSeq]: a chain break, a mutated or missing entry, or a checkpoint whose root or signature fails (RFC 0218 §C). Empty array MUST appear when chainValid is true (not omitted), and MUST be non-empty when chainValid is false.",
35
35
  "items": { "$ref": "#/$defs/Anomaly" }
36
36
  }
37
37
  },
38
38
  "additionalProperties": false,
39
+ "if": { "properties": { "chainValid": { "const": true } } },
40
+ "then": { "properties": { "anomalies": { "maxItems": 0 } } },
41
+ "else": { "properties": { "anomalies": { "minItems": 1 } } },
39
42
  "$defs": {
40
43
  "Checkpoint": {
41
44
  "type": "object",
@@ -67,24 +70,53 @@
67
70
  },
68
71
  "Anomaly": {
69
72
  "type": "object",
70
- "required": ["atSeq", "expectedPrevHash", "actualPrevHash"],
73
+ "description": "One detected anomaly (RFC 0218 §C). `kind` says what failed and fixes which members the entry carries: `chain-break` carries `expectedPrevHash` and `actualPrevHash`; `merkle-mismatch` and `signature-invalid` carry `checkpoint`; `hash-mismatch` and `missing-entry` carry neither. An entry without `kind` is a `chain-break`, the only shape this object had before RFC 0218 §C. A verifier MUST treat an unknown `kind` as an anomaly: `chainValid` is false whenever `anomalies` is non-empty.",
74
+ "required": ["atSeq"],
71
75
  "properties": {
72
76
  "atSeq": {
73
77
  "type": "integer",
74
78
  "minimum": 0,
75
- "description": "Sequence number of the entry whose `prevHash` failed verification."
79
+ "description": "The sequence number the anomaly is at. For an entry kind, the entry that failed (`chain-break`, `hash-mismatch`) or the first missing sequence of a gap (`missing-entry`). For a checkpoint kind, the checkpoint's `atSequence`."
76
80
  },
77
- "expectedPrevHash": {
81
+ "kind": {
78
82
  "type": "string",
83
+ "enum": ["chain-break", "hash-mismatch", "missing-entry", "merkle-mismatch", "signature-invalid"],
84
+ "description": "What failed. `chain-break`: the entry's `prevHash` is not the hash of the entry before it. `hash-mismatch`: the entry no longer hashes to the value the host recorded when it was appended (the entry was mutated in place). `missing-entry`: no entry exists at `atSeq` inside the verified range. `merkle-mismatch`: the root recomputed over the checkpoint's range (RFC 0218 §A) differs from its `merkleRoot`. `signature-invalid`: the checkpoint's `signature` does not verify under the advertised `checkpointPublicKey`. Hosts SHOULD set it; absent means `chain-break`."
85
+ },
86
+ "expectedPrevHash": {
87
+ "type": ["string", "null"],
79
88
  "minLength": 1,
80
- "description": "Hex-encoded SHA-256 the verifier computed from the prior entry's RFC 8785 JCS canonicalization."
89
+ "description": "`chain-break` only. Hex-encoded SHA-256 the verifier computed from the prior entry's RFC 8785 JCS canonicalization; `null` when the entry is the genesis entry, whose `prevHash` must be null."
81
90
  },
82
91
  "actualPrevHash": {
92
+ "type": ["string", "null"],
93
+ "description": "`chain-break` only. The `prevHash` value the audit-log entry actually carries, `null` included. Empty string when the field is missing (a structural anomaly distinct from a hash mismatch)."
94
+ },
95
+ "checkpoint": {
96
+ "type": "string",
97
+ "minLength": 1,
98
+ "maxLength": 256,
99
+ "description": "`merkle-mismatch` and `signature-invalid` only: the id of the failing checkpoint, as in `checkpoints[].checkpoint`. Required because two checkpoints can share an `atSequence` while a rotating key dual-signs (auth-profiles.md §Key management)."
100
+ },
101
+ "detail": {
83
102
  "type": "string",
84
- "description": "The `prevHash` value the audit-log entry actually carries. Empty string when the field is missing (a structural anomaly distinct from a hash mismatch)."
103
+ "maxLength": 1024,
104
+ "description": "OPTIONAL human-readable explanation for an operator. Not machine-readable; a verifier MUST NOT branch on it."
85
105
  }
86
106
  },
87
- "additionalProperties": false
107
+ "additionalProperties": false,
108
+ "allOf": [
109
+ {
110
+ "if": { "properties": { "kind": { "const": "chain-break" } } },
111
+ "then": { "required": ["expectedPrevHash", "actualPrevHash"] },
112
+ "else": { "properties": { "expectedPrevHash": false, "actualPrevHash": false } }
113
+ },
114
+ {
115
+ "if": { "required": ["kind"], "properties": { "kind": { "enum": ["merkle-mismatch", "signature-invalid"] } } },
116
+ "then": { "required": ["checkpoint"] },
117
+ "else": { "properties": { "checkpoint": false } }
118
+ }
119
+ ]
88
120
  }
89
121
  }
90
122
  }
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "chainValid": {
26
26
  "type": "boolean",
27
- "description": "True when every entry's `prevHash` matches the SHA-256 of the prior entry's RFC 8785 JCS canonicalization AND every signed checkpoint in `checkpoints[]` verifies against the host's advertised `auditLogIntegrity.checkpointPublicKey`. False when ANY break or invalid signature is detected; `anomalies[]` enumerates the breaks."
27
+ "description": "True when every entry's `prevHash` matches the SHA-256 of the prior entry's RFC 8785 JCS canonicalization AND every signed checkpoint in `checkpoints[]` verifies against the host's advertised `auditLogIntegrity.checkpointPublicKey`. False when ANY anomaly is detected: a chain break, a mutated or missing entry, a checkpoint root that does not recompute, or an invalid signature. `anomalies[]` enumerates them (RFC 0218 §C)."
28
28
  },
29
29
  "checkpointsValid": {
30
30
  "type": "boolean",
@@ -39,13 +39,34 @@
39
39
  },
40
40
  "anomalies": {
41
41
  "type": "array",
42
- "description": "One entry per detected hash-chain break in [fromSeq, toSeq]. Empty array MUST appear when chainValid is true (not omitted).",
42
+ "description": "One entry per anomaly detected in [fromSeq, toSeq]: a chain break, a mutated or missing entry, or a checkpoint whose root or signature fails (RFC 0218 §C). Empty array MUST appear when chainValid is true (not omitted), and MUST be non-empty when chainValid is false.",
43
43
  "items": {
44
44
  "$ref": "#/$defs/Anomaly"
45
45
  }
46
46
  }
47
47
  },
48
48
  "additionalProperties": false,
49
+ "if": {
50
+ "properties": {
51
+ "chainValid": {
52
+ "const": true
53
+ }
54
+ }
55
+ },
56
+ "then": {
57
+ "properties": {
58
+ "anomalies": {
59
+ "maxItems": 0
60
+ }
61
+ }
62
+ },
63
+ "else": {
64
+ "properties": {
65
+ "anomalies": {
66
+ "minItems": 1
67
+ }
68
+ }
69
+ },
49
70
  "$defs": {
50
71
  "Checkpoint": {
51
72
  "type": "object",
@@ -82,28 +103,103 @@
82
103
  },
83
104
  "Anomaly": {
84
105
  "type": "object",
106
+ "description": "One detected anomaly (RFC 0218 §C). `kind` says what failed and fixes which members the entry carries: `chain-break` carries `expectedPrevHash` and `actualPrevHash`; `merkle-mismatch` and `signature-invalid` carry `checkpoint`; `hash-mismatch` and `missing-entry` carry neither. An entry without `kind` is a `chain-break`, the only shape this object had before RFC 0218 §C. A verifier MUST treat an unknown `kind` as an anomaly: `chainValid` is false whenever `anomalies` is non-empty.",
85
107
  "required": [
86
- "atSeq",
87
- "expectedPrevHash",
88
- "actualPrevHash"
108
+ "atSeq"
89
109
  ],
90
110
  "properties": {
91
111
  "atSeq": {
92
112
  "type": "integer",
93
113
  "minimum": 0,
94
- "description": "Sequence number of the entry whose `prevHash` failed verification."
114
+ "description": "The sequence number the anomaly is at. For an entry kind, the entry that failed (`chain-break`, `hash-mismatch`) or the first missing sequence of a gap (`missing-entry`). For a checkpoint kind, the checkpoint's `atSequence`."
95
115
  },
96
- "expectedPrevHash": {
116
+ "kind": {
97
117
  "type": "string",
118
+ "enum": [
119
+ "chain-break",
120
+ "hash-mismatch",
121
+ "missing-entry",
122
+ "merkle-mismatch",
123
+ "signature-invalid"
124
+ ],
125
+ "description": "What failed. `chain-break`: the entry's `prevHash` is not the hash of the entry before it. `hash-mismatch`: the entry no longer hashes to the value the host recorded when it was appended (the entry was mutated in place). `missing-entry`: no entry exists at `atSeq` inside the verified range. `merkle-mismatch`: the root recomputed over the checkpoint's range (RFC 0218 §A) differs from its `merkleRoot`. `signature-invalid`: the checkpoint's `signature` does not verify under the advertised `checkpointPublicKey`. Hosts SHOULD set it; absent means `chain-break`."
126
+ },
127
+ "expectedPrevHash": {
128
+ "type": [
129
+ "string",
130
+ "null"
131
+ ],
98
132
  "minLength": 1,
99
- "description": "Hex-encoded SHA-256 the verifier computed from the prior entry's RFC 8785 JCS canonicalization."
133
+ "description": "`chain-break` only. Hex-encoded SHA-256 the verifier computed from the prior entry's RFC 8785 JCS canonicalization; `null` when the entry is the genesis entry, whose `prevHash` must be null."
100
134
  },
101
135
  "actualPrevHash": {
136
+ "type": [
137
+ "string",
138
+ "null"
139
+ ],
140
+ "description": "`chain-break` only. The `prevHash` value the audit-log entry actually carries, `null` included. Empty string when the field is missing (a structural anomaly distinct from a hash mismatch)."
141
+ },
142
+ "checkpoint": {
143
+ "type": "string",
144
+ "minLength": 1,
145
+ "maxLength": 256,
146
+ "description": "`merkle-mismatch` and `signature-invalid` only: the id of the failing checkpoint, as in `checkpoints[].checkpoint`. Required because two checkpoints can share an `atSequence` while a rotating key dual-signs (auth-profiles.md §Key management)."
147
+ },
148
+ "detail": {
102
149
  "type": "string",
103
- "description": "The `prevHash` value the audit-log entry actually carries. Empty string when the field is missing (a structural anomaly distinct from a hash mismatch)."
150
+ "maxLength": 1024,
151
+ "description": "OPTIONAL human-readable explanation for an operator. Not machine-readable; a verifier MUST NOT branch on it."
104
152
  }
105
153
  },
106
- "additionalProperties": false
154
+ "additionalProperties": false,
155
+ "allOf": [
156
+ {
157
+ "if": {
158
+ "properties": {
159
+ "kind": {
160
+ "const": "chain-break"
161
+ }
162
+ }
163
+ },
164
+ "then": {
165
+ "required": [
166
+ "expectedPrevHash",
167
+ "actualPrevHash"
168
+ ]
169
+ },
170
+ "else": {
171
+ "properties": {
172
+ "expectedPrevHash": false,
173
+ "actualPrevHash": false
174
+ }
175
+ }
176
+ },
177
+ {
178
+ "if": {
179
+ "required": [
180
+ "kind"
181
+ ],
182
+ "properties": {
183
+ "kind": {
184
+ "enum": [
185
+ "merkle-mismatch",
186
+ "signature-invalid"
187
+ ]
188
+ }
189
+ }
190
+ },
191
+ "then": {
192
+ "required": [
193
+ "checkpoint"
194
+ ]
195
+ },
196
+ "else": {
197
+ "properties": {
198
+ "checkpoint": false
199
+ }
200
+ }
201
+ }
202
+ ]
107
203
  }
108
204
  },
109
205
  "x-openwop-seeded-from": "v1"