@openwop/spec-artifacts 2.45.9 → 2.45.10
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 +26 -24
- package/api/openapi.yaml +53 -0
- package/api/seams-v2.yaml +1 -1
- package/api/v2/asyncapi.yaml +1 -1
- package/api/v2/openapi.yaml +65 -1
- package/package.json +1 -1
- package/schemas/README.md +1 -0
- package/schemas/capabilities.schema.json +22 -0
- package/schemas/run-event-payloads.schema.json +1 -1
- package/schemas/trigger-dead-letter-page.schema.json +90 -0
- package/schemas/trigger-subscription.schema.json +2 -2
- package/schemas/v2/capabilities.schema.json +22 -0
- package/schemas/v2/run-event-payloads.schema.json +1 -1
- package/schemas/v2/trigger-dead-letter-page.schema.json +88 -0
- package/schemas/v2/trigger-subscription.schema.json +2 -2
- package/spec/v1/core-standard-manifest.json +7 -2
- package/spec/v1/gaps.json +119 -0
- package/spec/v1/operation-path-manifest.json +11 -3
- package/spec/v2/core/headers.md +4 -4
- package/spec/v2/core/webhooks.md +10 -3
- package/spec/v2/declaration.json +2 -1
- package/spec/v2/id-field-bindings.json +1 -0
- package/spec/v2/path-manifest.json +12 -1
- package/spec/v2/release.json +3 -3
- package/spec/v2/surface-baseline.json +41 -2
package/CORPUS-STAMP.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
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.45.
|
|
5
|
-
"corpusTag": "v2.45.
|
|
4
|
+
"version": "2.45.10",
|
|
5
|
+
"corpusTag": "v2.45.10",
|
|
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
|
-
"api/openapi.yaml": "
|
|
10
|
+
"api/openapi.yaml": "ac6de5303872664b78ff419c035915593e01599e02835e777a0123de1baeb398",
|
|
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": "448d60e189059fe6bd4953b8c47f6941f89053707f45621d4e32b8bef0773670",
|
|
13
|
+
"api/v2/asyncapi.yaml": "8db5aa748cd4f6481055d48d0a6d66d596f20e712d2004aa86de79b4c34e9bd9",
|
|
14
|
+
"api/v2/openapi.yaml": "e3b1ed5954b8e9acd6c68cd2a924603afcebb686d07fb5a26e929b01b7f6599b",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
|
-
"schemas/README.md": "
|
|
16
|
+
"schemas/README.md": "bd1c00fae7b6fda506a75aff841bbdc438d4ce092642a72041203bee999b88de",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
|
|
18
18
|
"schemas/a2ui-surface-delta-frame.schema.json": "970d434e4fdcb925de64aaace91eb83bfbcfd8f76757a9ce9f339eda5fb3f4e8",
|
|
19
19
|
"schemas/agent-deployment-transition.schema.json": "1ac987fed0f380fa5b4e9a40e8e13316e5ae42d03a0ff42db4be6273e1bfe9f4",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"schemas/artifact-type-pack-manifest.schema.json": "60342fcb15eb7f3ab46271f0641409a30d3a4a8f318b1020c53070886b191252",
|
|
32
32
|
"schemas/audit-verify-result.schema.json": "0d3a3088ac1c32f9df66d346c33d7adbd8037940dba040e14ea847565a1a14bd",
|
|
33
33
|
"schemas/budget-policy.schema.json": "3d4fe30ae129fe136ab9ece395f2a2a42a76360786b1b9a1d5f1cbc753eb5b39",
|
|
34
|
-
"schemas/capabilities.schema.json": "
|
|
34
|
+
"schemas/capabilities.schema.json": "195a9bdfaeb8f3d425eaee3400bb3edca90a510f4c34b2fcb81a5685ada307ad",
|
|
35
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",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"schemas/residency.schema.json": "b45fdc91ae88091251914dbd6787a1e2ce687580b91d31a759217b7a1f0010c0",
|
|
83
83
|
"schemas/run-ancestry-response.schema.json": "963a5763b03216aa72fc2854560c778e53994f8cb06ea9a4053e541273c87f5c",
|
|
84
84
|
"schemas/run-diff-response.schema.json": "d9d196730b5d5d8a04a591d21a8fc6b44be7fa134f11827ff7e4f1a86d47e83d",
|
|
85
|
-
"schemas/run-event-payloads.schema.json": "
|
|
85
|
+
"schemas/run-event-payloads.schema.json": "0812a7e89c37990f4e3d26a63b9c821ef1612893164f0378554bb702672f8513",
|
|
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",
|
|
@@ -94,9 +94,10 @@
|
|
|
94
94
|
"schemas/subject.schema.json": "89679e35c7ec586adf6dd4adaff0bfa5453648d067fb2a43d7a2f7b2d016e10c",
|
|
95
95
|
"schemas/suspend-request.schema.json": "7a90b622d5c619e3ffb5da696d272d6505e2780ab92ab631ac1b900f5daea908",
|
|
96
96
|
"schemas/tool-descriptor.schema.json": "7f6adbae63003c1f1311f6a436f7f286542be62aa19a27b46730f2c2810857f7",
|
|
97
|
+
"schemas/trigger-dead-letter-page.schema.json": "1a471a975d66839f0a79f0a6d733de92cdbe2ac7111ff867d084b7795a9bc842",
|
|
97
98
|
"schemas/trigger-event.schema.json": "59d63b79dca3593f45d281776cbfe43ae4d85ee25519b82ad59f162a9efb592c",
|
|
98
99
|
"schemas/trigger-subscription-registration.schema.json": "2ca680ca6ffdb3cfc5de7bb8b8db8c3ec8eab4b88b7c9f7fe5edaecc7cf61ad0",
|
|
99
|
-
"schemas/trigger-subscription.schema.json": "
|
|
100
|
+
"schemas/trigger-subscription.schema.json": "e8cddab88f73a7a79bb3b78a60a480a00e16966b76f0e18c21a2aef09b6420ac",
|
|
100
101
|
"schemas/ui-plugin-message.schema.json": "346638babf1f8ea7b161cde75c0038b518cd2cc5bf0631772e20a9b74c96b5dd",
|
|
101
102
|
"schemas/v2/a2a-task-state.schema.json": "1810363e2d9bddb5997923bdac4044cc17c6f46ec5a40515d2ff21d9c82c1ad9",
|
|
102
103
|
"schemas/v2/a2ui-surface-delta-frame.schema.json": "6889c5da3fe7e76cb614038c0eea6774776fa640448558b258eb87fb50cb9b64",
|
|
@@ -116,7 +117,7 @@
|
|
|
116
117
|
"schemas/v2/artifact.schema.json": "85b9dc284d39b99d2a66fa8cbf47f2dd3d8526d3bd6cc411ad315b372de38975",
|
|
117
118
|
"schemas/v2/audit-verify-result.schema.json": "14af8e9283510f0a40e48a2059c929ee44e0fc9fa3cc66a95bfbe90b17c48297",
|
|
118
119
|
"schemas/v2/budget-policy.schema.json": "1de68095db0beb5c7a4be629de26e79f62ebbe748a88d46f36e768edfd1f0d68",
|
|
119
|
-
"schemas/v2/capabilities.schema.json": "
|
|
120
|
+
"schemas/v2/capabilities.schema.json": "4503d383c2b5efff532a79dabc79d17b5f6494c88d5b385bd3ca5f1a4e3f7647",
|
|
120
121
|
"schemas/v2/certification-bundle.schema.json": "82ce31a1ed6c7e21b0ba88ff62a7b8b768fc3b176b1d06fce023203830b94725",
|
|
121
122
|
"schemas/v2/channel-presence-payload.schema.json": "4eeb224910e6f7eee3ab5e7c3899559c25c83a26d0022e0ad195c4672611977a",
|
|
122
123
|
"schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
|
|
@@ -171,7 +172,7 @@
|
|
|
171
172
|
"schemas/v2/residency.schema.json": "3fd23c9732beb140504e81560fc426eb6764d547e56da5fb92c5a5c7bf04db3a",
|
|
172
173
|
"schemas/v2/run-ancestry-response.schema.json": "334c17f2062dea62726ca1d07b8be3f169cdc422af843c1def5fb317039814c9",
|
|
173
174
|
"schemas/v2/run-diff-response.schema.json": "8bdb2045c274580038bd74781f7d062f5049839797c164a89de4ed89edc53a74",
|
|
174
|
-
"schemas/v2/run-event-payloads.schema.json": "
|
|
175
|
+
"schemas/v2/run-event-payloads.schema.json": "fc1af4245dec98f7be86d20ad339e3409d0b2aaaa301dace083f734999c470b7",
|
|
175
176
|
"schemas/v2/run-event.schema.json": "2f0d7416bd376c56affe97b6b2b49981532e8e9ff45c0a162cf806c78b3e7fb7",
|
|
176
177
|
"schemas/v2/run-list-response.schema.json": "c2dbc34768dcf64528914a213aa3cb55952e8e3e90a64b04a9423b2a19749d38",
|
|
177
178
|
"schemas/v2/run-options.schema.json": "f0e9f494d80086c2ed2cf9fe87df54e5b4e66601699c4a1089f4edbc7ba58867",
|
|
@@ -185,9 +186,10 @@
|
|
|
185
186
|
"schemas/v2/subject.schema.json": "094e981fb20052a911393e219ea5f2065d8b8417b65080a70c5ea99fd960a8fe",
|
|
186
187
|
"schemas/v2/suspend-request.schema.json": "368d9932efb08f85b4520cac44b3c553876209f55bada93b5fcac93cc890b411",
|
|
187
188
|
"schemas/v2/tool-descriptor.schema.json": "8c98fb5e93bc649dff859d3d1dde8075db929efd6c49c496252d0a88cccc73e1",
|
|
189
|
+
"schemas/v2/trigger-dead-letter-page.schema.json": "571f8c39b64571bff20d391a6e6e829d4ce470ab790b2b7f810cc4aa40edcbc1",
|
|
188
190
|
"schemas/v2/trigger-event.schema.json": "710ecca8b3ecdad3a532a96768177f062192b24a589a4f798c7eb24bab64b30a",
|
|
189
191
|
"schemas/v2/trigger-subscription-registration.schema.json": "5f7959f3e13f49399783e47f73101d6af95e5abccea1af2f0014ccbe3e51006c",
|
|
190
|
-
"schemas/v2/trigger-subscription.schema.json": "
|
|
192
|
+
"schemas/v2/trigger-subscription.schema.json": "06abe021712a4bfc5a107a067053cd3cc9704f47ae7066d8449a508c368a0ab2",
|
|
191
193
|
"schemas/v2/ui-plugin-message.schema.json": "879d65867c01656b3962d64283e66364dcb8f626ad26c5fcf2d2d55a79ae0ce9",
|
|
192
194
|
"schemas/v2/webhook-dead-letter-page.schema.json": "543f5ccc26d8f777684a037172ab7b9fdf70735e5394eeb42e5fa6569503f528",
|
|
193
195
|
"schemas/v2/webhook-delivery.schema.json": "4e8ab3b722ad1731adf0548c1217f0de62da40de14e8abf77533aee4ace4c079",
|
|
@@ -204,17 +206,17 @@
|
|
|
204
206
|
"schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
|
|
205
207
|
"spec/v1/alias-detectors.json": "0b2f28808ffe0b9d98a187775038c3406bb70919747a788a6e4f866e293ae6d3",
|
|
206
208
|
"spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
|
|
207
|
-
"spec/v1/core-standard-manifest.json": "
|
|
209
|
+
"spec/v1/core-standard-manifest.json": "819828fb2f978fa9e4a994652bbe16c797d36a8c4393d57d1432c8a53f2120ab",
|
|
208
210
|
"spec/v1/deprecations.json": "a3293072ea951857395d05f0437264e88965f1e9019ff61c55bacfa9c1aaa17c",
|
|
209
211
|
"spec/v1/deprecations.schema.json": "3e393c405d2a41b467d8c5e3c468549078df1ce6a6d2588fc488097b95d9b55b",
|
|
210
212
|
"spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
|
|
211
213
|
"spec/v1/event-codemap.schema.json": "d05933b2e88103aff51a2f774df97b9bda065e0fc88dbd9b114cc47a32189174",
|
|
212
214
|
"spec/v1/extensions.json": "79a60754aa16cbdbdb604f8e5c00038af535a1690a4d07bd5ff7c38f0256a7bc",
|
|
213
|
-
"spec/v1/gaps.json": "
|
|
215
|
+
"spec/v1/gaps.json": "7eab313ec80c40285e3290113f5d3fea90ea6f8bc385ef6fd15d415f52540035",
|
|
214
216
|
"spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
|
|
215
217
|
"spec/v1/migrations.json": "4c50760be70cb644d02427bcaf5749606700edf4513f423903cf3b1d12f5c300",
|
|
216
218
|
"spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
|
|
217
|
-
"spec/v1/operation-path-manifest.json": "
|
|
219
|
+
"spec/v1/operation-path-manifest.json": "f988f7ebf58ff192e999e2a71192066052f837acc03c91d047d6050ca21a83b0",
|
|
218
220
|
"spec/v1/spec-gaps.json": "ea9612af55bea9dae3e82223d4f714243f8f590b0193f1188257b13491a38afc",
|
|
219
221
|
"spec/v2/README.md": "ddea90d7cf14aefffe1a43eeeecd4222dadad1d1e5ac64dceb073990eb93d9ef",
|
|
220
222
|
"spec/v2/core/artifact-type-packs.md": "f734740cc3963f86c9f273a7dace26291bba2855161ddd3540618131a2c8d13e",
|
|
@@ -226,7 +228,7 @@
|
|
|
226
228
|
"spec/v2/core/events.md": "c1a20e3aa6736119ea07aa2cf66faa808a1874d2cde4933033b65506d1742883",
|
|
227
229
|
"spec/v2/core/execution.md": "8a0c9db1bbfb97c008ab9328b7333c1cc3318196e78bfbefb49e781bdf4f9d44",
|
|
228
230
|
"spec/v2/core/form-content-packs.md": "02931227899676fd4581a27017be2a6c4953904717be9b81c29d12f87ab3917d",
|
|
229
|
-
"spec/v2/core/headers.md": "
|
|
231
|
+
"spec/v2/core/headers.md": "1e601c31d2c8bcb7628b7efe2b65fb53d9c79db2a60a4235c333cf85290bb0c0",
|
|
230
232
|
"spec/v2/core/host-services.md": "73f26ea32891044131d63f9861d2cbddccb5d08bf76e29e47afef9bb5b646791",
|
|
231
233
|
"spec/v2/core/i18n.md": "882904b7d59f992ab1e5f7346167161a54cf665b8fee47e64a3862cf9133a580",
|
|
232
234
|
"spec/v2/core/idempotency.md": "adbd317a6ebb57c2759c076297b31f67def9e391576bccd0bbea787b13e85872",
|
|
@@ -245,11 +247,11 @@
|
|
|
245
247
|
"spec/v2/core/storage.md": "dc94b985847c1341c7a064f04a6010f0fdbe6c3ab3e555d4362878c81d764c18",
|
|
246
248
|
"spec/v2/core/tool-catalog.md": "d16a9004418719c48301804aefa4d7ab6f41112a4ed83727f552aa1b92b418b0",
|
|
247
249
|
"spec/v2/core/versioning.md": "b7acb0d8b77425cb53ea700e47ba790bf7506de600c398690e6ec5bb9c7a220e",
|
|
248
|
-
"spec/v2/core/webhooks.md": "
|
|
250
|
+
"spec/v2/core/webhooks.md": "daf6ec03092f4b3fde1eb74a5e2e801ec48db5139a13fcc0fd7fb4a004635ae3",
|
|
249
251
|
"spec/v2/core/workflow-chain-packs.md": "fdce7a8477e269950a2bac05ee6eddbd66eb0b670b464d00054f7196ec05d29c",
|
|
250
252
|
"spec/v2/corrections.json": "3a8d93e33865b692d26a3b6bfd3819766e206b2e0c2a69669baa4bf833d05a49",
|
|
251
253
|
"spec/v2/corrections.schema.json": "46bbffb954d13bd9995aebc912ceeb2544f7064331abf25fd6ab85c81a5cec94",
|
|
252
|
-
"spec/v2/declaration.json": "
|
|
254
|
+
"spec/v2/declaration.json": "8e5eab46ea448725b806a2395f80f5c36fa582a308f80eb09931a633a595eae1",
|
|
253
255
|
"spec/v2/declaration.schema.json": "ef951633e4070899f64828f5cf1b5f4870270a0360f81dbb49b5b4d6cd407550",
|
|
254
256
|
"spec/v2/errors.json": "83f048b0a06952b4af6f125fb66c4212acab51056b411390f1010acd6ab9cdc0",
|
|
255
257
|
"spec/v2/errors.schema.json": "47404ad53e6147cf9017b813483712466573e419fb33e6c4b6c12d3e7deba1bc",
|
|
@@ -295,17 +297,17 @@
|
|
|
295
297
|
"spec/v2/generated/error-codes.md": "f171c0ca1be40221f9b4fbfcbce73c728c315a1e8feb8dd6bf738d6ca9e29526",
|
|
296
298
|
"spec/v2/harness-trust-anchors.json": "6007b92eae16a070fbc3777424efb0abfe865fda89d096963109b96282b91205",
|
|
297
299
|
"spec/v2/harness-trust-anchors.schema.json": "372b5d92337c893d3449eff3f6bfd009ac09fdac285296d8bdbe0a08fff9e34c",
|
|
298
|
-
"spec/v2/id-field-bindings.json": "
|
|
300
|
+
"spec/v2/id-field-bindings.json": "cc315f9a7aa5ec552860c1a790e105502fb737dc10b57aa5641bdd7405d6b638",
|
|
299
301
|
"spec/v2/interop-map.json": "02255dafe7eb55f61ca7f9ae7c21f079d1848a6756991343088975ac9d184b8d",
|
|
300
302
|
"spec/v2/interop-map.schema.json": "0017c882df34ee215e2e0729de051490e09d43aac3d2c949285698ed51832f12",
|
|
301
303
|
"spec/v2/migrations.json": "651954938a1e154c0b6f1e3dd6e105889d30de3bb65789f21de7f77a12869e9e",
|
|
302
304
|
"spec/v2/migrations.schema.json": "b91ade6320ad1b1185c9495b9424f3aa63438ed8e412c45171c227d82c0afd86",
|
|
303
|
-
"spec/v2/path-manifest.json": "
|
|
305
|
+
"spec/v2/path-manifest.json": "36363105280139dad095dc4f64b5b272121e9759cdcf6de011358dd1c1a90540",
|
|
304
306
|
"spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
|
|
305
307
|
"spec/v2/profiles.json": "180beb9ef2d161766fa23b2987e7e829851e3d316273147cf6a4a3f324befd6b",
|
|
306
|
-
"spec/v2/release.json": "
|
|
308
|
+
"spec/v2/release.json": "044530e75b4cdec6747c1bcebe799ebc62f1f6c2a1e722369b35b2854e54049f",
|
|
307
309
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
|
|
308
|
-
"spec/v2/surface-baseline.json": "
|
|
310
|
+
"spec/v2/surface-baseline.json": "99ddcf9eb0d06967879ce7f6e54c49fe19bfabc9ee50f00f78699b401108bfd5"
|
|
309
311
|
},
|
|
310
|
-
"corpusCommit": "
|
|
312
|
+
"corpusCommit": "8817d7c027047bbf1aa8d9385122137396f1bdca"
|
|
311
313
|
}
|
package/api/openapi.yaml
CHANGED
|
@@ -654,6 +654,59 @@ paths:
|
|
|
654
654
|
schema:
|
|
655
655
|
$ref: '../schemas/error-envelope.schema.json'
|
|
656
656
|
|
|
657
|
+
# RFC 0232 — a trigger subscription's dead-lettered deliveries. A dead-lettered
|
|
658
|
+
# delivery started no run, so it is on no run's log; this read is where the
|
|
659
|
+
# host's content-free record of it is visible (trigger-bridge.md §C). Gated on
|
|
660
|
+
# `capabilities.triggerBridge.deadLetter`; distinct from the RFC 0053 run sink.
|
|
661
|
+
/v1/trigger-subscriptions/{subscriptionId}/dead-letters:
|
|
662
|
+
get:
|
|
663
|
+
tags: [triggers]
|
|
664
|
+
summary: List a trigger subscription's dead-lettered deliveries (RFC 0232).
|
|
665
|
+
description: |
|
|
666
|
+
Lists the subscription's dead-lettered deliveries, newest first, for
|
|
667
|
+
`triggerBridge.deadLetter.retentionDays`. Each record carries the fields
|
|
668
|
+
of the dead-lettered `trigger.delivery.attempted` payload and, when the
|
|
669
|
+
dead-lettering changed the subscription's state, the
|
|
670
|
+
`trigger.subscription.state.changed` payload. A delivery refused by a
|
|
671
|
+
`required` verification check appears with `reason: "verification_failed"`
|
|
672
|
+
and no `stateChange`. A record MUST NOT carry the inbound body, the
|
|
673
|
+
inbound headers, the signature, the signing secret, or any credential.
|
|
674
|
+
Gated on `triggerBridge.deadLetter`: a host that does not advertise it
|
|
675
|
+
answers `404 not_found`. Another tenant's subscription id answers
|
|
676
|
+
`404 not_found`, exactly as an id the host never minted.
|
|
677
|
+
operationId: listTriggerDeadLetters
|
|
678
|
+
security:
|
|
679
|
+
- ApiKeyAuth: ['webhooks:manage']
|
|
680
|
+
- OAuth2: ['webhooks:manage']
|
|
681
|
+
- OpenIdConnect: ['webhooks:manage']
|
|
682
|
+
parameters:
|
|
683
|
+
- name: subscriptionId
|
|
684
|
+
in: path
|
|
685
|
+
required: true
|
|
686
|
+
schema: { type: string, minLength: 1 }
|
|
687
|
+
description: The trigger subscription, as returned by `createTriggerSubscription`.
|
|
688
|
+
- name: limit
|
|
689
|
+
in: query
|
|
690
|
+
required: false
|
|
691
|
+
schema: { type: integer, minimum: 1 }
|
|
692
|
+
description: Page size; clamped to `triggerBridge.deadLetter.maxPageSize`.
|
|
693
|
+
- name: cursor
|
|
694
|
+
in: query
|
|
695
|
+
required: false
|
|
696
|
+
schema: { type: string, minLength: 1, maxLength: 2048 }
|
|
697
|
+
description: Opaque cursor from a previous page's `nextCursor`. A cursor minted for another subscription MUST be refused `400 validation_error`.
|
|
698
|
+
responses:
|
|
699
|
+
'200':
|
|
700
|
+
description: One page of dead-lettered deliveries, newest first.
|
|
701
|
+
content:
|
|
702
|
+
application/json:
|
|
703
|
+
schema:
|
|
704
|
+
$ref: '../schemas/trigger-dead-letter-page.schema.json'
|
|
705
|
+
'400': { $ref: '#/components/responses/ValidationError' }
|
|
706
|
+
'401': { $ref: '#/components/responses/Unauthenticated' }
|
|
707
|
+
'403': { $ref: '#/components/responses/Forbidden' }
|
|
708
|
+
'404': { $ref: '#/components/responses/NotFound' }
|
|
709
|
+
|
|
657
710
|
# ── Localized content surface (RFC 0103) ─────────────────────────────
|
|
658
711
|
# Public, cacheable delivery + tenant-scoped admin CRUD for authored
|
|
659
712
|
# localized content (pages → sections). Locale on the public path is
|
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.45.
|
|
4
|
+
version: 2.45.10
|
|
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.
|
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.45.
|
|
4
|
+
version: 2.45.10
|
|
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`.
|
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.45.
|
|
4
|
+
version: 2.45.10
|
|
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
|
|
@@ -811,6 +811,70 @@ paths:
|
|
|
811
811
|
$ref: '#/components/responses/Forbidden'
|
|
812
812
|
'404':
|
|
813
813
|
$ref: '#/components/responses/NotFound'
|
|
814
|
+
/trigger-subscriptions/{subscriptionId}/dead-letters:
|
|
815
|
+
get:
|
|
816
|
+
tags:
|
|
817
|
+
- triggers
|
|
818
|
+
summary: List a trigger subscription's dead-lettered deliveries.
|
|
819
|
+
description: 'Lists the subscription''s dead-lettered deliveries, newest first, for `triggerBridge.deadLetter.retentionDays`.
|
|
820
|
+
Each record carries the fields of the dead-lettered `trigger.delivery-attempted` payload and, when the dead-lettering
|
|
821
|
+
changed the subscription''s state, the `trigger.subscription-state-changed` payload. A delivery refused by a `required`
|
|
822
|
+
verification check appears with `reason: "verification_failed"` and no `stateChange`. A record MUST NOT carry the
|
|
823
|
+
inbound body, the inbound headers, the signature, the signing secret, or any credential. Gated on `triggerBridge.deadLetter`:
|
|
824
|
+
a host that does not advertise it answers `404 not_found`. Another tenant''s subscription id answers `404 not_found`,
|
|
825
|
+
exactly as an id the host never minted.'
|
|
826
|
+
operationId: listTriggerDeadLetters
|
|
827
|
+
security:
|
|
828
|
+
- ApiKeyAuth:
|
|
829
|
+
- webhooks:manage
|
|
830
|
+
- OAuth2:
|
|
831
|
+
- webhooks:manage
|
|
832
|
+
- OpenIdConnect:
|
|
833
|
+
- webhooks:manage
|
|
834
|
+
parameters:
|
|
835
|
+
- name: subscriptionId
|
|
836
|
+
in: path
|
|
837
|
+
required: true
|
|
838
|
+
schema:
|
|
839
|
+
$ref: ../../schemas/v2/ids.schema.json#/$defs/subscriptionId
|
|
840
|
+
description: 'The trigger subscription, tenant-bound (`identity.md` §5) and carried as one path segment: `~`-projected
|
|
841
|
+
or percent-encoded.'
|
|
842
|
+
- name: limit
|
|
843
|
+
in: query
|
|
844
|
+
required: false
|
|
845
|
+
schema:
|
|
846
|
+
type: integer
|
|
847
|
+
minimum: 1
|
|
848
|
+
description: Page size; clamped to `triggerBridge.deadLetter.maxPageSize`.
|
|
849
|
+
- name: cursor
|
|
850
|
+
in: query
|
|
851
|
+
required: false
|
|
852
|
+
schema:
|
|
853
|
+
type: string
|
|
854
|
+
minLength: 1
|
|
855
|
+
maxLength: 2048
|
|
856
|
+
description: Opaque cursor from a previous page's `nextCursor`. A cursor minted for another subscription MUST be refused
|
|
857
|
+
`400 validation_error`.
|
|
858
|
+
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
859
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
860
|
+
responses:
|
|
861
|
+
'200':
|
|
862
|
+
description: One page of dead-lettered deliveries, newest first.
|
|
863
|
+
content:
|
|
864
|
+
application/json:
|
|
865
|
+
schema:
|
|
866
|
+
$ref: ../../schemas/v2/trigger-dead-letter-page.schema.json
|
|
867
|
+
headers:
|
|
868
|
+
OpenWOP-Version:
|
|
869
|
+
$ref: '#/components/headers/OpenWOPVersion'
|
|
870
|
+
'400':
|
|
871
|
+
$ref: '#/components/responses/ValidationError'
|
|
872
|
+
'401':
|
|
873
|
+
$ref: '#/components/responses/Unauthenticated'
|
|
874
|
+
'403':
|
|
875
|
+
$ref: '#/components/responses/Forbidden'
|
|
876
|
+
'404':
|
|
877
|
+
$ref: '#/components/responses/NotFound'
|
|
814
878
|
/content/pages/{slug}:
|
|
815
879
|
get:
|
|
816
880
|
tags:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openwop/spec-artifacts",
|
|
3
|
-
"version": "2.45.
|
|
3
|
+
"version": "2.45.10",
|
|
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": {
|
package/schemas/README.md
CHANGED
|
@@ -78,6 +78,7 @@
|
|
|
78
78
|
| `trigger-subscription.schema.json` | `trigger-bridge.md` (RFC 0083) | Durable inbound-trigger subscription record — `subscriptionId`/`source`/`state` (active/paused/failed/dead-lettered) + `dedupEnabled`/`retryPolicy` + the webhooks.md register keys. Backs the `openwop-trigger-bridge` profile; content-free of inbound payloads (SR-1). |
|
|
79
79
|
| `trigger-event.schema.json` | `trigger-bridge.md` §F (RFC 0099) | The normalized external-event envelope handed to a started run as `ctx.triggerData` (webhook/email/form). In-run only — never event-logged; `trigger.delivery.attempted` stays content-free. Per-source one-of; `contentTrust: "untrusted"`; `AttachmentRef.ref` is a host-internal handle, never a fetchable URL (`trigger-ingestion-ssrf` / `trigger-ingestion-content-redaction`). |
|
|
80
80
|
| `trigger-subscription-registration.schema.json` | `trigger-bridge.md` §F (RFC 0099) | The `POST /v1/trigger-subscriptions` create request — binds an external `source` to a `workflowId` with a dedup config + a source-authenticity `verification` policy. The portable create surface RFC 0083 UQ1 left per-source. |
|
|
81
|
+
| `trigger-dead-letter-page.schema.json` | `trigger-bridge.md` §C (RFC 0232) | One page of `listTriggerDeadLetters`: a trigger subscription's dead-lettered deliveries, newest first. Each record carries the dead-lettered attempt's payload fields, the state change it caused if any, `reason`, `deadLetteredAt` and `expiresAt`; never inbound content or credentials. |
|
|
81
82
|
| `a2a-task-state.schema.json` | `a2a-integration.md` §"Async / durable Tasks" (RFC 0100) | The durable, persisted projection of an A2A `Task` an OpenWOP host keeps per backing run when `a2a.durableTasks: true` — `taskId == runId`, lowercase-hyphen `state`, `interruptKind`, optional SSRF-guarded `PushConfig`. Content-free of run inputs/outputs/artifacts (SR-1 / `a2a-push-egress-ssrf`). |
|
|
82
83
|
| `self-hosted-runner-dispatch-frame.schema.json` | `self-hosted-runner.md` (RFC 0122) | DRAFT — one model/tool dispatch STEP the host routes to a registered runner over the runner↔host channel: `{runId, stepId, seq, kind, provider?/model?/tool?, inputs}`. `seq` is the per-runner monotonic dispatch cursor (distinct from the event-log sequence). `inputs` carries NO credential material (`runner-credential-non-transit`). |
|
|
83
84
|
| `self-hosted-runner-result-frame.schema.json` | `self-hosted-runner.md` (RFC 0122) | DRAFT — the runner's answer to a dispatch: `{runId, stepId, seq, output}`, persisted as a normal step record (replay reads persistence, never re-dispatches). Closed shape (`runner-credential-non-transit`); `output` is fenced `<UNTRUSTED>` before re-entering an agent loop (`runner-output-untrusted-transport`). |
|
|
@@ -2932,6 +2932,28 @@
|
|
|
2932
2932
|
"description": "`true` ⇒ the host serves `POST /v1/trigger-subscriptions` (RFC 0099 §F.2) for portable external-event subscription creation."
|
|
2933
2933
|
}
|
|
2934
2934
|
}
|
|
2935
|
+
},
|
|
2936
|
+
"deadLetter": {
|
|
2937
|
+
"type": "object",
|
|
2938
|
+
"additionalProperties": false,
|
|
2939
|
+
"required": [
|
|
2940
|
+
"retentionDays",
|
|
2941
|
+
"maxPageSize"
|
|
2942
|
+
],
|
|
2943
|
+
"description": "RFC 0232 §A (additive). The trigger DELIVERY dead-letter sink, advertised only by a host that serves `GET /v1/trigger-subscriptions/{subscriptionId}/dead-letters` (`listTriggerDeadLetters`). A dead-lettered trigger delivery started no run, so it is on no run's log; this read is where the host's content-free record of it is visible (`trigger-bridge.md` §C). **Distinct from the top-level `deadLetter` family (RFC 0053), which is the RUN sink**, and from `webhooks.deadLetter` (RFC 0188), which holds OUTBOUND deliveries.",
|
|
2944
|
+
"properties": {
|
|
2945
|
+
"retentionDays": {
|
|
2946
|
+
"type": "integer",
|
|
2947
|
+
"minimum": 1,
|
|
2948
|
+
"description": "How long a dead-lettered delivery stays readable. Observable: a record's `expiresAt − deadLetteredAt` matches it."
|
|
2949
|
+
},
|
|
2950
|
+
"maxPageSize": {
|
|
2951
|
+
"type": "integer",
|
|
2952
|
+
"minimum": 1,
|
|
2953
|
+
"maximum": 1000,
|
|
2954
|
+
"description": "The ceiling the host clamps `limit` to."
|
|
2955
|
+
}
|
|
2956
|
+
}
|
|
2935
2957
|
}
|
|
2936
2958
|
}
|
|
2937
2959
|
},
|
|
@@ -3876,7 +3876,7 @@
|
|
|
3876
3876
|
"retrying",
|
|
3877
3877
|
"dead-lettered"
|
|
3878
3878
|
],
|
|
3879
|
-
"description": "`delivered`: the run started; `retrying`: failed, will retry per policy; `dead-lettered`: retries exhausted,
|
|
3879
|
+
"description": "`delivered`: the run started; `retrying`: failed, will retry per policy; `dead-lettered`: retries exhausted, no run started; the subscription keeps the record (`trigger-bridge.md` §C, RFC 0232), not the RFC 0053 run sink."
|
|
3880
3880
|
},
|
|
3881
3881
|
"runId": {
|
|
3882
3882
|
"type": "string",
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openwop.dev/spec/v1/trigger-dead-letter-page.schema.json",
|
|
4
|
+
"title": "TriggerDeadLetterPage",
|
|
5
|
+
"description": "RFC 0232 §B — one page of a trigger subscription's dead-lettered deliveries, the answer to `listTriggerDeadLetters`. A dead-lettered delivery started no run, so it is on no run's log; this read is where the host's content-free record of it is visible (`trigger-bridge.md` §C).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"deliveries"
|
|
10
|
+
],
|
|
11
|
+
"properties": {
|
|
12
|
+
"deliveries": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"description": "Dead-lettered deliveries, newest first. Empty when the subscription has none within `retentionDays`.",
|
|
15
|
+
"items": {
|
|
16
|
+
"$ref": "#/$defs/deadLetteredTriggerDelivery"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"nextCursor": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"minLength": 1,
|
|
22
|
+
"maxLength": 2048,
|
|
23
|
+
"description": "Opaque continuation cursor; absent on the last page. A cursor minted for another subscription MUST be refused `400 validation_error`."
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"$defs": {
|
|
27
|
+
"deadLetteredTriggerDelivery": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"additionalProperties": false,
|
|
30
|
+
"required": [
|
|
31
|
+
"subscriptionId",
|
|
32
|
+
"attemptEventId",
|
|
33
|
+
"attempt",
|
|
34
|
+
"reason",
|
|
35
|
+
"deadLetteredAt",
|
|
36
|
+
"expiresAt"
|
|
37
|
+
],
|
|
38
|
+
"description": "RFC 0232 §C — one dead-lettered trigger delivery. **Content-free:** no inbound body, no inbound headers, no signature, no signing secret, no credential. A record names a delivery; it never carries what was delivered.",
|
|
39
|
+
"properties": {
|
|
40
|
+
"subscriptionId": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"minLength": 1,
|
|
43
|
+
"description": "The trigger subscription. Equals the path segment."
|
|
44
|
+
},
|
|
45
|
+
"attemptEventId": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"minLength": 1,
|
|
48
|
+
"description": "The id of the dead-lettered `trigger.delivery.attempted`. Where the host also shows that event (a test seam), this is its `eventId`."
|
|
49
|
+
},
|
|
50
|
+
"attempt": {
|
|
51
|
+
"allOf": [
|
|
52
|
+
{
|
|
53
|
+
"$ref": "run-event-payloads.schema.json#/$defs/triggerDeliveryAttempted"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"properties": {
|
|
57
|
+
"outcome": {
|
|
58
|
+
"const": "dead-lettered"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"description": "The dead-lettered attempt: the fields of the `trigger.delivery.attempted` payload for this delivery, and no others. Where the host also shows the event, the two MUST agree."
|
|
64
|
+
},
|
|
65
|
+
"stateChange": {
|
|
66
|
+
"$ref": "run-event-payloads.schema.json#/$defs/triggerSubscriptionStateChanged",
|
|
67
|
+
"description": "The `trigger.subscription.state.changed` payload this dead-lettering caused, when it caused one. Absent for a delivery refused by verification, which MUST NOT change the subscription's state."
|
|
68
|
+
},
|
|
69
|
+
"reason": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"enum": [
|
|
72
|
+
"verification_failed",
|
|
73
|
+
"retries_exhausted"
|
|
74
|
+
],
|
|
75
|
+
"description": "Why the delivery was dead-lettered. `verification_failed`: a `required` verification check refused it. `retries_exhausted`: the retry policy ran out."
|
|
76
|
+
},
|
|
77
|
+
"deadLetteredAt": {
|
|
78
|
+
"type": "string",
|
|
79
|
+
"format": "date-time",
|
|
80
|
+
"description": "When the host dead-lettered the delivery."
|
|
81
|
+
},
|
|
82
|
+
"expiresAt": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"format": "date-time",
|
|
85
|
+
"description": "When this record ages out. `expiresAt − deadLetteredAt` matches `triggerBridge.deadLetter.retentionDays`."
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
"properties": {
|
|
10
10
|
"subscriptionId": { "type": "string", "minLength": 1, "description": "Stable host-unique id for the subscription. Correlates the §C delivery events + the management surface." },
|
|
11
11
|
"source": { "type": "string", "enum": ["webhook", "schedule", "queue", "email", "form", "stream", "change"], "description": "Which trigger source backs the subscription. Channels beyond these (Slack/Discord/SMS) bridge as a vendor extension by registering a subscription of the closest source kind (§E)." },
|
|
12
|
-
"state": { "type": "string", "enum": ["active", "paused", "failed", "dead-lettered"], "description": "The §B state. `active`: accepting + delivering; `paused`: retained, not delivering (operator-held); `failed`: delivery failing past policy (the webhooks.md circuit-breaker generalized); `dead-lettered`: terminal, deliveries
|
|
12
|
+
"state": { "type": "string", "enum": ["active", "paused", "failed", "dead-lettered"], "description": "The §B state. `active`: accepting + delivering; `paused`: retained, not delivering (operator-held); `failed`: delivery failing past policy (the webhooks.md circuit-breaker generalized); `dead-lettered`: terminal, deliveries dead-lettered by the subscription (`trigger-bridge.md` §C), not held by the RFC 0053 run sink." },
|
|
13
13
|
"dedupEnabled": { "type": "boolean", "description": "When true, the host de-duplicates inbound events by `dedupKey` within the retention window (§C-1; the idempotency.md Layer-1 model applied to inbound triggers)." },
|
|
14
14
|
"retryPolicy": {
|
|
15
15
|
"type": "object",
|
|
16
16
|
"additionalProperties": false,
|
|
17
|
-
"description": "Delivery retry policy (§C-2). On exhaustion the subscription/delivery transitions to `dead-lettered
|
|
17
|
+
"description": "Delivery retry policy (§C-2). On exhaustion the subscription/delivery transitions to `dead-lettered`.",
|
|
18
18
|
"properties": {
|
|
19
19
|
"maxAttempts": { "type": "integer", "minimum": 1, "description": "Maximum delivery attempts before dead-lettering." },
|
|
20
20
|
"backoff": { "type": "string", "enum": ["none", "fixed", "exponential"], "description": "Backoff strategy between attempts." }
|
|
@@ -5594,6 +5594,28 @@
|
|
|
5594
5594
|
"description": "`true` ⇒ the host serves `POST /trigger-subscriptions` (RFC 0099 §F.2) for portable external-event subscription creation."
|
|
5595
5595
|
}
|
|
5596
5596
|
}
|
|
5597
|
+
},
|
|
5598
|
+
"deadLetter": {
|
|
5599
|
+
"type": "object",
|
|
5600
|
+
"additionalProperties": false,
|
|
5601
|
+
"required": [
|
|
5602
|
+
"retentionDays",
|
|
5603
|
+
"maxPageSize"
|
|
5604
|
+
],
|
|
5605
|
+
"description": "RFC 0232 §A (additive). The trigger DELIVERY dead-letter sink, advertised only by a host that serves `GET /trigger-subscriptions/{subscriptionId}/dead-letters` (`listTriggerDeadLetters`). A dead-lettered trigger delivery started no run, so it is on no run's log; this read is where the host's content-free record of it is visible (`trigger-bridge.md` §C). **Distinct from the top-level `deadLetter` family (RFC 0053), which is the RUN sink**, and from `webhooks.deadLetter` (RFC 0188), which holds OUTBOUND deliveries.",
|
|
5606
|
+
"properties": {
|
|
5607
|
+
"retentionDays": {
|
|
5608
|
+
"type": "integer",
|
|
5609
|
+
"minimum": 1,
|
|
5610
|
+
"description": "How long a dead-lettered delivery stays readable. Observable: a record's `expiresAt − deadLetteredAt` matches it."
|
|
5611
|
+
},
|
|
5612
|
+
"maxPageSize": {
|
|
5613
|
+
"type": "integer",
|
|
5614
|
+
"minimum": 1,
|
|
5615
|
+
"maximum": 1000,
|
|
5616
|
+
"description": "The ceiling the host clamps `limit` to."
|
|
5617
|
+
}
|
|
5618
|
+
}
|
|
5597
5619
|
}
|
|
5598
5620
|
},
|
|
5599
5621
|
"allOf": [
|
|
@@ -3702,7 +3702,7 @@
|
|
|
3702
3702
|
"retrying",
|
|
3703
3703
|
"dead-lettered"
|
|
3704
3704
|
],
|
|
3705
|
-
"description": "`delivered`: the run started; `retrying`: failed, will retry per policy; `dead-lettered`: retries exhausted,
|
|
3705
|
+
"description": "`delivered`: the run started; `retrying`: failed, will retry per policy; `dead-lettered`: retries exhausted, no run started; the subscription keeps the record (`webhooks.md` §Inbound triggers), not the run sink."
|
|
3706
3706
|
},
|
|
3707
3707
|
"runId": {
|
|
3708
3708
|
"$ref": "ids.schema.json#/$defs/runId",
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openwop.dev/spec/v2/trigger-dead-letter-page.schema.json",
|
|
4
|
+
"title": "TriggerDeadLetterPage",
|
|
5
|
+
"description": "RFC 0232 §B — one page of a trigger subscription's dead-lettered deliveries, the answer to `listTriggerDeadLetters`. A dead-lettered delivery started no run, so it is on no run's log; this read is where the host's content-free record of it is visible (`webhooks.md` §Inbound triggers).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"deliveries"
|
|
10
|
+
],
|
|
11
|
+
"properties": {
|
|
12
|
+
"deliveries": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"description": "Dead-lettered deliveries, newest first. Empty when the subscription has none within `retentionDays`.",
|
|
15
|
+
"items": {
|
|
16
|
+
"$ref": "#/$defs/deadLetteredTriggerDelivery"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"nextCursor": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"minLength": 1,
|
|
22
|
+
"maxLength": 2048,
|
|
23
|
+
"description": "Opaque continuation cursor; absent on the last page. A cursor minted for another subscription MUST be refused `400 validation_error`."
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"$defs": {
|
|
27
|
+
"deadLetteredTriggerDelivery": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"additionalProperties": false,
|
|
30
|
+
"required": [
|
|
31
|
+
"subscriptionId",
|
|
32
|
+
"attemptEventId",
|
|
33
|
+
"attempt",
|
|
34
|
+
"reason",
|
|
35
|
+
"deadLetteredAt",
|
|
36
|
+
"expiresAt"
|
|
37
|
+
],
|
|
38
|
+
"description": "RFC 0232 §C — one dead-lettered trigger delivery. **Content-free:** no inbound body, no inbound headers, no signature, no signing secret, no credential. A record names a delivery; it never carries what was delivered.",
|
|
39
|
+
"properties": {
|
|
40
|
+
"subscriptionId": {
|
|
41
|
+
"$ref": "ids.schema.json#/$defs/subscriptionId",
|
|
42
|
+
"description": "The trigger subscription. Equals the path segment."
|
|
43
|
+
},
|
|
44
|
+
"attemptEventId": {
|
|
45
|
+
"$ref": "ids.schema.json#/$defs/eventId",
|
|
46
|
+
"description": "The id of the dead-lettered `trigger.delivery.attempted`. Where the host also shows that event (a test seam), this is its `eventId`."
|
|
47
|
+
},
|
|
48
|
+
"attempt": {
|
|
49
|
+
"allOf": [
|
|
50
|
+
{
|
|
51
|
+
"$ref": "run-event-payloads.schema.json#/$defs/triggerDeliveryAttempted"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"properties": {
|
|
55
|
+
"outcome": {
|
|
56
|
+
"const": "dead-lettered"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
"description": "The dead-lettered attempt: the fields of the `trigger.delivery.attempted` payload for this delivery, and no others. Where the host also shows the event, the two MUST agree."
|
|
62
|
+
},
|
|
63
|
+
"stateChange": {
|
|
64
|
+
"$ref": "run-event-payloads.schema.json#/$defs/triggerSubscriptionStateChanged",
|
|
65
|
+
"description": "The `trigger.subscription.state.changed` payload this dead-lettering caused, when it caused one. Absent for a delivery refused by verification, which MUST NOT change the subscription's state."
|
|
66
|
+
},
|
|
67
|
+
"reason": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"enum": [
|
|
70
|
+
"verification_failed",
|
|
71
|
+
"retries_exhausted"
|
|
72
|
+
],
|
|
73
|
+
"description": "Why the delivery was dead-lettered. `verification_failed`: a `required` verification check refused it. `retries_exhausted`: the retry policy ran out."
|
|
74
|
+
},
|
|
75
|
+
"deadLetteredAt": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"format": "date-time",
|
|
78
|
+
"description": "When the host dead-lettered the delivery."
|
|
79
|
+
},
|
|
80
|
+
"expiresAt": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"format": "date-time",
|
|
83
|
+
"description": "When this record ages out. `expiresAt − deadLetteredAt` matches `triggerBridge.deadLetter.retentionDays`."
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"failed",
|
|
37
37
|
"dead-lettered"
|
|
38
38
|
],
|
|
39
|
-
"description": "The §B state. `active`: accepting + delivering; `paused`: retained, not delivering (operator-held); `failed`: delivery failing past policy (the webhooks.md circuit-breaker generalized); `dead-lettered`: terminal, deliveries
|
|
39
|
+
"description": "The §B state. `active`: accepting + delivering; `paused`: retained, not delivering (operator-held); `failed`: delivery failing past policy (the webhooks.md circuit-breaker generalized); `dead-lettered`: terminal, deliveries dead-lettered by the subscription (`webhooks.md` §Inbound triggers), not held by the run sink."
|
|
40
40
|
},
|
|
41
41
|
"dedupEnabled": {
|
|
42
42
|
"type": "boolean",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"retryPolicy": {
|
|
46
46
|
"type": "object",
|
|
47
47
|
"additionalProperties": false,
|
|
48
|
-
"description": "Delivery retry policy (§C-2). On exhaustion the subscription/delivery transitions to `dead-lettered
|
|
48
|
+
"description": "Delivery retry policy (§C-2). On exhaustion the subscription/delivery transitions to `dead-lettered`.",
|
|
49
49
|
"properties": {
|
|
50
50
|
"maxAttempts": {
|
|
51
51
|
"type": "integer",
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"provenance": {
|
|
5
5
|
"suite": {
|
|
6
6
|
"package": "@openwop/openwop-conformance",
|
|
7
|
-
"version": "2.45.
|
|
7
|
+
"version": "2.45.10"
|
|
8
8
|
},
|
|
9
9
|
"note": "Derived from the corpus at generation time. Regenerate with --write; verify with --check."
|
|
10
10
|
},
|
|
@@ -75,6 +75,7 @@
|
|
|
75
75
|
"listContentPages",
|
|
76
76
|
"listPromptTemplates",
|
|
77
77
|
"listTools",
|
|
78
|
+
"listTriggerDeadLetters",
|
|
78
79
|
"listWorkspaceFiles",
|
|
79
80
|
"pauseRun",
|
|
80
81
|
"pollRunEvents",
|
|
@@ -384,6 +385,10 @@
|
|
|
384
385
|
"file": "schemas/tool-descriptor.schema.json",
|
|
385
386
|
"$id": "https://openwop.dev/spec/v1/tool-descriptor.schema.json"
|
|
386
387
|
},
|
|
388
|
+
{
|
|
389
|
+
"file": "schemas/trigger-dead-letter-page.schema.json",
|
|
390
|
+
"$id": "https://openwop.dev/spec/v1/trigger-dead-letter-page.schema.json"
|
|
391
|
+
},
|
|
387
392
|
{
|
|
388
393
|
"file": "schemas/trigger-event.schema.json",
|
|
389
394
|
"$id": "https://openwop.dev/spec/v1/trigger-event.schema.json"
|
|
@@ -421,5 +426,5 @@
|
|
|
421
426
|
"$id": "https://openwop.dev/spec/v1/workspace-file.schema.json"
|
|
422
427
|
}
|
|
423
428
|
],
|
|
424
|
-
"digest": "
|
|
429
|
+
"digest": "177bc294edbc8d2ed1171b26b132cf40e04b53ea1d17238a78e47a46c6d3182a"
|
|
425
430
|
}
|
package/spec/v1/gaps.json
CHANGED
|
@@ -13918,6 +13918,125 @@
|
|
|
13918
13918
|
}
|
|
13919
13919
|
]
|
|
13920
13920
|
},
|
|
13921
|
+
{
|
|
13922
|
+
"id": "openwop.gap.0232.1",
|
|
13923
|
+
"rfc": "0232",
|
|
13924
|
+
"local": "G1",
|
|
13925
|
+
"section": "§E",
|
|
13926
|
+
"surface": "How leg 4 is scored on a host where only the read is available: split the requirement and record the state-change half `inapplicable` without a seam (a), split and move that half out of the floor (b), or keep one id (c). Unresolved question 1.",
|
|
13927
|
+
"witness": "unclassified",
|
|
13928
|
+
"requirementId": null,
|
|
13929
|
+
"disposition": "closed",
|
|
13930
|
+
"target": null,
|
|
13931
|
+
"sources": [
|
|
13932
|
+
{
|
|
13933
|
+
"file": "RFCS/registers/0232-trigger-dead-letter-read.gaps.md",
|
|
13934
|
+
"token": "G1"
|
|
13935
|
+
}
|
|
13936
|
+
]
|
|
13937
|
+
},
|
|
13938
|
+
{
|
|
13939
|
+
"id": "openwop.gap.0232.2",
|
|
13940
|
+
"rfc": "0232",
|
|
13941
|
+
"local": "G2",
|
|
13942
|
+
"section": "§C, Falsifiability",
|
|
13943
|
+
"surface": "A `stateChange` record's content-freeness cannot be witnessed on a host without seams: no wire surface causes a subscription state change.",
|
|
13944
|
+
"witness": "unclassified",
|
|
13945
|
+
"requirementId": null,
|
|
13946
|
+
"disposition": "externally-gated",
|
|
13947
|
+
"target": "trigger-subscription-pause-surface",
|
|
13948
|
+
"sources": [
|
|
13949
|
+
{
|
|
13950
|
+
"file": "RFCS/registers/0232-trigger-dead-letter-read.gaps.md",
|
|
13951
|
+
"token": "G2"
|
|
13952
|
+
}
|
|
13953
|
+
]
|
|
13954
|
+
},
|
|
13955
|
+
{
|
|
13956
|
+
"id": "openwop.gap.0232.3",
|
|
13957
|
+
"rfc": "0232",
|
|
13958
|
+
"local": "G3",
|
|
13959
|
+
"section": "§B",
|
|
13960
|
+
"surface": "No host serves the read, so none of the §E rows has a witness.",
|
|
13961
|
+
"witness": "unclassified",
|
|
13962
|
+
"requirementId": null,
|
|
13963
|
+
"disposition": "externally-gated",
|
|
13964
|
+
"target": "openwop-app-serves-trigger-dead-letters",
|
|
13965
|
+
"sources": [
|
|
13966
|
+
{
|
|
13967
|
+
"file": "RFCS/registers/0232-trigger-dead-letter-read.gaps.md",
|
|
13968
|
+
"token": "G3"
|
|
13969
|
+
}
|
|
13970
|
+
]
|
|
13971
|
+
},
|
|
13972
|
+
{
|
|
13973
|
+
"id": "openwop.gap.0232.4",
|
|
13974
|
+
"rfc": "0232",
|
|
13975
|
+
"local": "G4",
|
|
13976
|
+
"section": "§D",
|
|
13977
|
+
"surface": "Whether any host routes dead-lettered trigger deliveries to the RFC 0053 run sink, which §D's correction would change for it.",
|
|
13978
|
+
"witness": "unclassified",
|
|
13979
|
+
"requirementId": null,
|
|
13980
|
+
"disposition": "closed",
|
|
13981
|
+
"target": null,
|
|
13982
|
+
"sources": [
|
|
13983
|
+
{
|
|
13984
|
+
"file": "RFCS/registers/0232-trigger-dead-letter-read.gaps.md",
|
|
13985
|
+
"token": "G4"
|
|
13986
|
+
}
|
|
13987
|
+
]
|
|
13988
|
+
},
|
|
13989
|
+
{
|
|
13990
|
+
"id": "openwop.gap.0232.5",
|
|
13991
|
+
"rfc": "0232",
|
|
13992
|
+
"local": "G5",
|
|
13993
|
+
"section": "§C, Unresolved question 4",
|
|
13994
|
+
"surface": "The corpus requires a host to emit `trigger.delivery.attempted` and `trigger.subscription.state.changed` for run-less transitions but names no log or channel for them. openwop-app emits neither in production for a dead-lettered delivery; only its seam does.",
|
|
13995
|
+
"witness": "unclassified",
|
|
13996
|
+
"requirementId": null,
|
|
13997
|
+
"disposition": "closed",
|
|
13998
|
+
"target": null,
|
|
13999
|
+
"sources": [
|
|
14000
|
+
{
|
|
14001
|
+
"file": "RFCS/registers/0232-trigger-dead-letter-read.gaps.md",
|
|
14002
|
+
"token": "G5"
|
|
14003
|
+
}
|
|
14004
|
+
]
|
|
14005
|
+
},
|
|
14006
|
+
{
|
|
14007
|
+
"id": "openwop.gap.0232.6",
|
|
14008
|
+
"rfc": "0232",
|
|
14009
|
+
"local": "G6",
|
|
14010
|
+
"section": "§B",
|
|
14011
|
+
"surface": "`listTriggerDeadLetters` is a new v1 operation, so `openwop-sdks` owes a parity entry. That repository vendors a published corpus tag.",
|
|
14012
|
+
"witness": "unclassified",
|
|
14013
|
+
"requirementId": null,
|
|
14014
|
+
"disposition": "externally-gated",
|
|
14015
|
+
"target": "openwop-sdks-revendors-a-tag-carrying-listTriggerDeadLetters",
|
|
14016
|
+
"sources": [
|
|
14017
|
+
{
|
|
14018
|
+
"file": "RFCS/registers/0232-trigger-dead-letter-read.gaps.md",
|
|
14019
|
+
"token": "G6"
|
|
14020
|
+
}
|
|
14021
|
+
]
|
|
14022
|
+
},
|
|
14023
|
+
{
|
|
14024
|
+
"id": "openwop.gap.0232.7",
|
|
14025
|
+
"rfc": "0232",
|
|
14026
|
+
"local": "G7",
|
|
14027
|
+
"section": "§D",
|
|
14028
|
+
"surface": "`trigger-bridge.md` §D and `profiles.md` still say the profile needs \"a `deadLetter` sink for exhausted deliveries\". The predicate reads the RFC 0053 run family, which after §D holds no trigger delivery.",
|
|
14029
|
+
"witness": "unclassified",
|
|
14030
|
+
"requirementId": null,
|
|
14031
|
+
"disposition": "transferred",
|
|
14032
|
+
"target": "TODO.md",
|
|
14033
|
+
"sources": [
|
|
14034
|
+
{
|
|
14035
|
+
"file": "RFCS/registers/0232-trigger-dead-letter-read.gaps.md",
|
|
14036
|
+
"token": "G7"
|
|
14037
|
+
}
|
|
14038
|
+
]
|
|
14039
|
+
},
|
|
13921
14040
|
{
|
|
13922
14041
|
"id": "openwop.gap.spec.a2a-integration.g1",
|
|
13923
14042
|
"rfc": "0152",
|
|
@@ -435,6 +435,14 @@
|
|
|
435
435
|
"tag": "triggers",
|
|
436
436
|
"class": "canonical"
|
|
437
437
|
},
|
|
438
|
+
{
|
|
439
|
+
"operationId": "listTriggerDeadLetters",
|
|
440
|
+
"method": "GET",
|
|
441
|
+
"pathKey": "/v1/trigger-subscriptions/{subscriptionId}/dead-letters",
|
|
442
|
+
"resolvedPath": "/v1/trigger-subscriptions/{subscriptionId}/dead-letters",
|
|
443
|
+
"tag": "triggers",
|
|
444
|
+
"class": "canonical"
|
|
445
|
+
},
|
|
438
446
|
{
|
|
439
447
|
"operationId": "registerWebhook",
|
|
440
448
|
"method": "POST",
|
|
@@ -469,10 +477,10 @@
|
|
|
469
477
|
}
|
|
470
478
|
],
|
|
471
479
|
"counts": {
|
|
472
|
-
"total":
|
|
473
|
-
"canonical":
|
|
480
|
+
"total": 59,
|
|
481
|
+
"canonical": 50,
|
|
474
482
|
"hostExtension": 5,
|
|
475
483
|
"testCatalog": 4
|
|
476
484
|
},
|
|
477
|
-
"digest": "
|
|
485
|
+
"digest": "c461a49d47b4b7836611def8d9954f7f0e65ebf660cb2b1f6a6e730c0edf7848"
|
|
478
486
|
}
|
package/spec/v2/core/headers.md
CHANGED
|
@@ -16,10 +16,10 @@ Standard headers keep their standard names: `Idempotency-Key`, `ETag`, `If-None-
|
|
|
16
16
|
| `Idempotency-Key` | 15 | Per-mutation idempotency token (`idempotency.md` Layer 1). The server caches `(tenantId, endpoint, key)` → response for ≥24h. A duplicate request returns the cached response with `OpenWOP-Idempotent-Replay: true`. |
|
|
17
17
|
| `If-None-Match` | 2 | Conditional request on the discovery document (capabilities.md §1) and the run snapshot (runs.md §Snapshot). A value matching the `ETag` the host sent MUST yield `304 Not Modified` with no body. The 304 carries `OpenWOP-Version` like every response (versioning.md §1.4). |
|
|
18
18
|
| `Last-Event-ID` | 1 | Resume from sequence after this ID. |
|
|
19
|
-
| `OpenWOP-Client-Version` |
|
|
19
|
+
| `OpenWOP-Client-Version` | 56 | The protocol version the client implements (versioning.md §1.5). Compared with `minClientVersion` on major.minor. A malformed value is treated as absent and MUST NOT produce a 400. Never selects a contract. |
|
|
20
20
|
| `OpenWOP-Dedup` | 1 | When set, the host's cross-host claim system rejects a duplicate `(tenantId, scopeId)` pair with `409 Conflict`. |
|
|
21
21
|
| `OpenWOP-Force-Engine-Version` | 1 | Test keys only. The server emits this run's events as if it ran the given engine version, which must be within `Capabilities.testing.forceEngineVersionRange`. Servers MUST reject it on production API keys with `403 force_engine_version_forbidden`. |
|
|
22
|
-
| `OpenWOP-Version` |
|
|
22
|
+
| `OpenWOP-Version` | 56 | Selects one of the host's listed major.minor versions. Absent, `/.well-known/openwop` uses `preferredVersion` and every other unversioned path is v2; an unlisted value is 406 protocol_version_unsupported. |
|
|
23
23
|
|
|
24
24
|
## Cross-origin preflight
|
|
25
25
|
|
|
@@ -35,9 +35,9 @@ A host that answers a CORS preflight for an operation by granting the requesting
|
|
|
35
35
|
| `ETag` | 3 | Standard HTTP validator (RFC 9110 §8.8.3). The obligation is per operation: MUST on the discovery document (capabilities.md §1), SHOULD on the run snapshot (runs.md §Snapshot), a content hash on a prompt template (getPromptTemplate); see each operation. |
|
|
36
36
|
| `Location` | 1 | Canonical URI of the new template. |
|
|
37
37
|
| `OpenWOP-Idempotent-Replay` | 1 | Set when the response was served from the idempotency cache. |
|
|
38
|
-
| `OpenWOP-Version` |
|
|
38
|
+
| `OpenWOP-Version` | 56 | The contract that produced this response. It MUST equal the one used. |
|
|
39
39
|
| `Retry-After` | 1 | Seconds until the active claim is stale-eligible. |
|
|
40
|
-
| `WWW-Authenticate` |
|
|
40
|
+
| `WWW-Authenticate` | 49 | A `Bearer` challenge. On a host with an oauth2 or oidc lane it carries `resource_metadata` and `error="invalid_token"`. Never sent on a non-disclosure 404. |
|
|
41
41
|
|
|
42
42
|
## Webhook delivery headers
|
|
43
43
|
|
package/spec/v2/core/webhooks.md
CHANGED
|
@@ -129,7 +129,7 @@ A host advertising `triggerBridge` runs inbound work through subscriptions (`sch
|
|
|
129
129
|
- `active`;
|
|
130
130
|
- `paused` — not delivering; a schedule skips ticks;
|
|
131
131
|
- `failed`;
|
|
132
|
-
- `dead-lettered` — deliveries are
|
|
132
|
+
- `dead-lettered` — terminal; its deliveries are dead-lettered (below), not held by the `deadLetter` run sink.
|
|
133
133
|
|
|
134
134
|
On an `active` subscription the host:
|
|
135
135
|
|
|
@@ -145,7 +145,14 @@ A host whose `triggerBridge.ingestion.inboundSigning` lists `standard-webhooks-1
|
|
|
145
145
|
- `webhook-id` is the identity dedup keys on;
|
|
146
146
|
- the ingest answers `202` (delivered, `runId`), `200` (duplicate, prior `runId`), `401 signature_invalid`, or `409 subscription_not_active`.
|
|
147
147
|
|
|
148
|
-
A source in `triggerBridge.sources` MUST move through these states and emit `trigger.subscription-state-changed` and `trigger.delivery-attempted`. These events MUST NOT carry inbound content or credentials (`schemas/v2/run-event-payloads.schema.json`).
|
|
148
|
+
A source in `triggerBridge.sources` MUST move through these states and emit `trigger.subscription-state-changed` and `trigger.delivery-attempted`. These events MUST NOT carry inbound content or credentials (`schemas/v2/run-event-payloads.schema.json`). A dead-lettered attempt or a state change belongs to no run; for it, emit means the host keeps a content-free record of that payload.
|
|
149
|
+
|
|
150
|
+
A host advertising `triggerBridge.deadLetter` MUST serve `GET /trigger-subscriptions/{subscriptionId}/dead-letters`:
|
|
151
|
+
|
|
152
|
+
- a record carries the dead-lettered attempt's payload fields and, if the dead-lettering changed the subscription's state, that state change;
|
|
153
|
+
- a record MUST NOT carry the inbound body, headers, signature, or secret;
|
|
154
|
+
- a delivery refused by a `required` check appears with `reason: "verification_failed"` and no state change;
|
|
155
|
+
- a cursor minted for another subscription MUST be refused `400 validation_error`.
|
|
149
156
|
|
|
150
157
|
With `triggerBridge.ingestion`, each `externalSources` entry MUST turn an external event into a `TriggerEvent` (`schemas/v2/trigger-event.schema.json`, whose rules bind) and start a run. The host:
|
|
151
158
|
|
|
@@ -155,4 +162,4 @@ With `triggerBridge.ingestion`, each `externalSources` entry MUST turn an extern
|
|
|
155
162
|
- MUST refuse private, link-local and loopback targets and cap the body on any ingestion fetch, and never hand the run a URL (invariant `trigger-ingestion-ssrf`);
|
|
156
163
|
- SHOULD key `stream` by topic, partition and offset, `change` by table and changelog id; a key MUST survive broker redelivery.
|
|
157
164
|
|
|
158
|
-
*Sources: RFCs 0053, 0083, 0099, 0127, 0165, 0171, 0173, 0176, 0188, 0196, 0201, 0215, 0217, 0230.*
|
|
165
|
+
*Sources: RFCs 0053, 0083, 0099, 0127, 0165, 0171, 0173, 0176, 0188, 0196, 0201, 0215, 0217, 0230, 0232.*
|
package/spec/v2/declaration.json
CHANGED
|
@@ -575,6 +575,17 @@
|
|
|
575
575
|
"authenticated": true,
|
|
576
576
|
"requestBody": true
|
|
577
577
|
},
|
|
578
|
+
{
|
|
579
|
+
"method": "GET",
|
|
580
|
+
"path": "/trigger-subscriptions/{subscriptionId}/dead-letters",
|
|
581
|
+
"operationId": "listTriggerDeadLetters",
|
|
582
|
+
"requestHeaders": [
|
|
583
|
+
"OpenWOP-Client-Version",
|
|
584
|
+
"OpenWOP-Version"
|
|
585
|
+
],
|
|
586
|
+
"authenticated": true,
|
|
587
|
+
"requestBody": false
|
|
588
|
+
},
|
|
578
589
|
{
|
|
579
590
|
"method": "POST",
|
|
580
591
|
"path": "/webhooks",
|
|
@@ -644,7 +655,7 @@
|
|
|
644
655
|
}
|
|
645
656
|
],
|
|
646
657
|
"counts": {
|
|
647
|
-
"operations":
|
|
658
|
+
"operations": 56,
|
|
648
659
|
"channels": 2
|
|
649
660
|
}
|
|
650
661
|
}
|
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.45.
|
|
4
|
-
"corpusTag": "v2.45.
|
|
5
|
-
"updated": "2026-10-
|
|
3
|
+
"version": "2.45.10",
|
|
4
|
+
"corpusTag": "v2.45.10",
|
|
5
|
+
"updated": "2026-10-03"
|
|
6
6
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"schemas/v2/**/*.json",
|
|
5
5
|
"spec/v2/path-manifest.json"
|
|
6
6
|
],
|
|
7
|
-
"release": "2.45.
|
|
7
|
+
"release": "2.45.10",
|
|
8
8
|
"kinds": {
|
|
9
9
|
"union": [
|
|
10
10
|
"channel",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"type"
|
|
19
19
|
]
|
|
20
20
|
},
|
|
21
|
-
"count":
|
|
21
|
+
"count": 8647,
|
|
22
22
|
"surfaces": [
|
|
23
23
|
"schemas/v2/a2a-task-state.schema.json#/contextId|type|string",
|
|
24
24
|
"schemas/v2/a2a-task-state.schema.json#/interruptKind|enum-member|\"approval\"",
|
|
@@ -3374,6 +3374,14 @@
|
|
|
3374
3374
|
"schemas/v2/capabilities.schema.json#/toolHooks|required|until",
|
|
3375
3375
|
"schemas/v2/capabilities.schema.json#/toolHooks|required|witness",
|
|
3376
3376
|
"schemas/v2/capabilities.schema.json#/toolHooks|type|object",
|
|
3377
|
+
"schemas/v2/capabilities.schema.json#/triggerBridge/deadLetter/maxPageSize|type|integer",
|
|
3378
|
+
"schemas/v2/capabilities.schema.json#/triggerBridge/deadLetter/retentionDays|type|integer",
|
|
3379
|
+
"schemas/v2/capabilities.schema.json#/triggerBridge/deadLetter|closed|true",
|
|
3380
|
+
"schemas/v2/capabilities.schema.json#/triggerBridge/deadLetter|property|maxPageSize",
|
|
3381
|
+
"schemas/v2/capabilities.schema.json#/triggerBridge/deadLetter|property|retentionDays",
|
|
3382
|
+
"schemas/v2/capabilities.schema.json#/triggerBridge/deadLetter|required|maxPageSize",
|
|
3383
|
+
"schemas/v2/capabilities.schema.json#/triggerBridge/deadLetter|required|retentionDays",
|
|
3384
|
+
"schemas/v2/capabilities.schema.json#/triggerBridge/deadLetter|type|object",
|
|
3377
3385
|
"schemas/v2/capabilities.schema.json#/triggerBridge/dedup|type|boolean",
|
|
3378
3386
|
"schemas/v2/capabilities.schema.json#/triggerBridge/ingestion/externalSources/[]|enum-member|\"change\"",
|
|
3379
3387
|
"schemas/v2/capabilities.schema.json#/triggerBridge/ingestion/externalSources/[]|enum-member|\"email\"",
|
|
@@ -3434,6 +3442,7 @@
|
|
|
3434
3442
|
"schemas/v2/capabilities.schema.json#/triggerBridge/witness|enum-member|\"witnessable-gated\"",
|
|
3435
3443
|
"schemas/v2/capabilities.schema.json#/triggerBridge/witness|enum-member|\"witnessable-unaided\"",
|
|
3436
3444
|
"schemas/v2/capabilities.schema.json#/triggerBridge|closed|true",
|
|
3445
|
+
"schemas/v2/capabilities.schema.json#/triggerBridge|property|deadLetter",
|
|
3437
3446
|
"schemas/v2/capabilities.schema.json#/triggerBridge|property|dedup",
|
|
3438
3447
|
"schemas/v2/capabilities.schema.json#/triggerBridge|property|ingestion",
|
|
3439
3448
|
"schemas/v2/capabilities.schema.json#/triggerBridge|property|retryPolicy",
|
|
@@ -7620,6 +7629,35 @@
|
|
|
7620
7629
|
"schemas/v2/tool-descriptor.schema.json#|required|source",
|
|
7621
7630
|
"schemas/v2/tool-descriptor.schema.json#|required|toolId",
|
|
7622
7631
|
"schemas/v2/tool-descriptor.schema.json#|type|object",
|
|
7632
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]/attempt/outcome|enum-member|\"dead-lettered\"",
|
|
7633
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]/attempt|property|outcome",
|
|
7634
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]/deadLetteredAt|type|string",
|
|
7635
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]/expiresAt|type|string",
|
|
7636
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]/reason|enum-member|\"retries_exhausted\"",
|
|
7637
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]/reason|enum-member|\"verification_failed\"",
|
|
7638
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]/reason|type|string",
|
|
7639
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|closed|true",
|
|
7640
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|property|attempt",
|
|
7641
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|property|attemptEventId",
|
|
7642
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|property|deadLetteredAt",
|
|
7643
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|property|expiresAt",
|
|
7644
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|property|reason",
|
|
7645
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|property|stateChange",
|
|
7646
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|property|subscriptionId",
|
|
7647
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|required|attempt",
|
|
7648
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|required|attemptEventId",
|
|
7649
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|required|deadLetteredAt",
|
|
7650
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|required|expiresAt",
|
|
7651
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|required|reason",
|
|
7652
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|required|subscriptionId",
|
|
7653
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries/[]|type|object",
|
|
7654
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/deliveries|type|array",
|
|
7655
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#/nextCursor|type|string",
|
|
7656
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#|closed|true",
|
|
7657
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#|property|deliveries",
|
|
7658
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#|property|nextCursor",
|
|
7659
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#|required|deliveries",
|
|
7660
|
+
"schemas/v2/trigger-dead-letter-page.schema.json#|type|object",
|
|
7623
7661
|
"schemas/v2/trigger-event.schema.json#/change/changelogId|type|string",
|
|
7624
7662
|
"schemas/v2/trigger-event.schema.json#/change/op|enum-member|\"delete\"",
|
|
7625
7663
|
"schemas/v2/trigger-event.schema.json#/change/op|enum-member|\"insert\"",
|
|
@@ -8607,6 +8645,7 @@
|
|
|
8607
8645
|
"spec/v2/path-manifest.json#|operation|GET /runs/{runId}:diff",
|
|
8608
8646
|
"spec/v2/path-manifest.json#|operation|GET /tools",
|
|
8609
8647
|
"spec/v2/path-manifest.json#|operation|GET /tools/{toolId}",
|
|
8648
|
+
"spec/v2/path-manifest.json#|operation|GET /trigger-subscriptions/{subscriptionId}/dead-letters",
|
|
8610
8649
|
"spec/v2/path-manifest.json#|operation|GET /webhooks/{webhookId}/dead-letters",
|
|
8611
8650
|
"spec/v2/path-manifest.json#|operation|GET /workflows/{workflowId}",
|
|
8612
8651
|
"spec/v2/path-manifest.json#|operation|POST /agents/{agentId}/deployments",
|