@openwop/openwop-conformance 2.45.24 → 2.45.26
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/CHANGELOG.md +13 -0
- package/README.md +3 -3
- package/coverage.md +1 -1
- package/dist/spec-artifacts.lock.json +2 -2
- package/fixtures/conformance-wasm-pack-abi-mismatch.json +41 -0
- package/fixtures.md +2 -1
- package/package.json +2 -2
- package/requirements.json +208 -187
- package/scenario-majors.json +5 -2
- package/schemas/CORPUS-STAMP.json +15 -15
- package/src/lib/host-event-witness.ts +47 -1
- package/src/lib/wasm-abi-reject-witness.ts +66 -0
- package/src/scenarios/frontend-plugin-packs.test.ts +10 -167
- package/src/scenarios/v2-host-event-delivery.test.ts +82 -36
- package/src/scenarios/v2-wasm-abi-reject.test.ts +35 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# `@openwop/openwop-conformance` Changelog
|
|
2
2
|
|
|
3
|
+
## [2.45.26] — 2026-10-08 — RFC 0236's legs run without the seam (RFC 0241 Active)
|
|
4
|
+
|
|
5
|
+
- **No scenario change.** RFC 0237 goes `Accepted` on the v2 reference host's certified 2.45.25 cut; its gaps G1 and G2 close, which changes the packed `spec/v1/gaps.json`.
|
|
6
|
+
- **`v2-host-event-delivery` causes events through RFC 0241's `POST /host/events/test`** when the host lists the reserved `host-test.durable-triggered` / `host-test.ephemeral-triggered` types, else through the §G seam, so a seam-free production host witnesses all six `openwop.requirement.0236.*` rows. New leg `openwop.requirement.0241.trigger.bound-by-listing`: each listed class is accepted with its reserved type, an unlisted class is `400 validation_error`, and nothing is served (`404`/`405`) when no `host-test.*` type is listed. Proven on a seams-off v2 reference host: all eight rows `executed-pass`; a trigger answering a real type, and a frame reaching a second tenant, each `executed-fail`. The self-test double gains the trigger choice and the binding judge.
|
|
7
|
+
- **`v2-host-event-delivery`: `0236.webhook.ephemeral-refused` no longer gates on the seams profile.** It registers a webhook naming an ephemeral type and expects `400 validation_error`; it causes no event, so the §G emit seam was never needed. It now runs on any host advertising `hostEvents` with an ephemeral type, preferring an `example.*` one (a production host's `channel.presence` will do), and records `inapplicable` when none is listed. Proven on a seam-free v2 reference host: `executed-pass`, and `executed-fail` with the refusal removed. The five legs that cause an event use RFC 0241's trigger when the host lists it (next bullet).
|
|
8
|
+
|
|
9
|
+
## [2.45.25] — 2026-10-07 — `v2-wasm-abi-reject`; the frontend-plugin schema legs leave host bundles
|
|
10
|
+
|
|
11
|
+
- **New `v2-wasm-abi-reject` (`openwop.requirement.node-pack-runtimes.wasm-abi-reject`).** Gated on `nodePackRuntimes.wasm` and the new operator-installed fixture `conformance-wasm-pack-abi-mismatch`, which invokes `vendor.openwop.misbehaving.abi-bomb` (the `misbehaving-abi` pack, ABI version 999). Loading is not a protocol operation, so the leg reads what a rejection at load prevents: the pack in an advertised `loadedPacks`, and the node completing. The run must be refused at creation (4xx) or end without that node completing; a 401/403/429/5xx is `blocked`. Proof: a 9-case self-test double (`lib/wasm-abi-reject-witness.test.ts`). No RFC was needed: both observations already exist.
|
|
12
|
+
- **No scenario change.** RFC 0238 goes `Accepted` on openwop-app's certified 2.45.23 cut; its gaps G1 and G3 close, which changes the packed `spec/v1/gaps.json`.
|
|
13
|
+
- **No scenario change.** RFC 0239 goes `Accepted` on the v2 reference host's certified 2.45.23 cut; its gap G1 closes, which changes the packed `spec/v1/gaps.json`.
|
|
14
|
+
- **No scenario change (RFC 0238 G3).** The 13 always-on schema legs of `frontend-plugin-packs` read only the corpus, so they move to `src/coherence/frontend-plugin-schemas.test.ts` and leave host bundles; their ids become `openwop.it.frontend-plugin-schemas.*`, which changes the packed `requirements.json`. The host-reading legs stay.
|
|
15
|
+
|
|
3
16
|
## [2.45.24] — 2026-10-07 — the effect receiver fails fast on a held pinned port; the README index check reads `spec/v2/core`
|
|
4
17
|
|
|
5
18
|
- **The effect receiver fails fast on a held pinned port.** With `OPENWOP_WEBHOOK_RECEIVER_PORT` pinned to a port another process holds, `startEffectReceiver` attached no `error` handler, so `EADDRINUSE` never settled its `listen` promise and the `0158`/`0194` duplicate-delivery rows hung to their 180 s timeout instead of failing with the cause. It now rejects at once with the bind error, as `scoped-receiver` has since 2.39.3. Self-test: a held port rejects in under 2 s; without the handler the test times out. Reported by MyndHyve (2.45.18 cut, port 8787).
|
package/README.md
CHANGED
|
@@ -137,7 +137,7 @@ Each scenario file records its disposition and assertion count in `<report-dir>/
|
|
|
137
137
|
|
|
138
138
|
## What's Covered
|
|
139
139
|
|
|
140
|
-
The current suite has
|
|
140
|
+
The current suite has 650 scenario files under `src/scenarios/`. By target major ([`scenario-majors.json`](./scenario-majors.json)): 210 files run against a v2 host and 455 against a v1 host; 15 of them run at both.
|
|
141
141
|
|
|
142
142
|
The v2 scenarios (`src/scenarios/v2-*.test.ts`) cover, by area:
|
|
143
143
|
|
|
@@ -154,7 +154,7 @@ The v2 scenarios (`src/scenarios/v2-*.test.ts`) cover, by area:
|
|
|
154
154
|
| Security defaults | SSRF refusal, filesystem sandbox, cross-tenant isolation for storage, memory and queues, secret canaries | `v2-safefetch-ssrf-refused`, `v2-fs-sandbox-escape-refused`, `v2-storage-cross-tenant-isolation`, `v2-secret-canary-absent` |
|
|
155
155
|
| Webhooks | Delivery shape, Standard Webhooks signing, durable retries, secret rotation, egress refusal, endpoint verification | `v2-webhook-delivery-shape`, `v2-webhook-durable-delivery`, `v2-webhook-secret-rotation`, `v2-webhook-egress-refusal` |
|
|
156
156
|
| Durability and execution | Recovery after a kill, effect seams that never re-fire, execution bounds, budgets | `v2-durability-recovery`, `v2-effect-seam-no-refire`, `v2-run-execution-bounds`, `v2-budget-enforcement` |
|
|
157
|
-
| Packs and composition | Pack isolation, peer dependencies, sub-workflow dispatch and input mapping, chain pins, WASM memory caps, registry lifecycle | `v2-pack-isolation`, `v2-subworkflow-linkage`, `v2-chain-pin-exact`, `v2-wasm-memory-cap` |
|
|
157
|
+
| Packs and composition | Pack isolation, peer dependencies, sub-workflow dispatch and input mapping, chain pins, WASM memory caps and ABI rejection, registry lifecycle | `v2-pack-isolation`, `v2-subworkflow-linkage`, `v2-chain-pin-exact`, `v2-wasm-memory-cap`, `v2-wasm-abi-reject` |
|
|
158
158
|
| AI, prompts and agents | AI envelopes, providers and usage, prompt libraries and rendering, model capabilities, conversations, multi-party councils | `v2-prompt-render-deterministic`, `v2-provider-usage-emission`, `v2-conversation-turn-parts`, `v2-multi-party-council` |
|
|
159
159
|
| Interop | A2A agent cards and operation map, MCP mounts and tasks, A2UI v0.9 surfaces, trace context | `v2-a2a-operation-map`, `v2-mcp-mount-map`, `v2-a2ui-v09-surface`, `v2-interop-trace-context` |
|
|
160
160
|
| Family advertisements | Each optional capability family's discovery record validates against its schema seat | `v2-*-advertisement` |
|
|
@@ -166,7 +166,7 @@ Three kinds of scenario share the tree:
|
|
|
166
166
|
- **Host** checks drive a live host over HTTP.
|
|
167
167
|
- **Gated** checks run only when the host advertises the family, profile or fixture they need, and otherwise record `inapplicable` or `blocked` with a reason. `--require-behavior` turns an advertised-but-unwitnessable behaviour into a failure.
|
|
168
168
|
|
|
169
|
-
Current source tree:
|
|
169
|
+
Current source tree: 650 scenario files. [`coverage.md`](./coverage.md) maps each spec document and every OpenAPI operation to its scenarios. [`CHANGELOG.md`](./CHANGELOG.md) records when each scenario landed.
|
|
170
170
|
|
|
171
171
|
## How the 2.x suite is built
|
|
172
172
|
|
package/coverage.md
CHANGED
|
@@ -32,7 +32,7 @@ Each scenario that targets major 2 is listed once, under the [`spec/v2/core/`](.
|
|
|
32
32
|
| [`identity.md`](../spec/v2/core/identity.md) | `auth-challenge-no-oracle.test.ts`, `v2-assurance-downgrade-audited.test.ts`, `v2-auth-challenge.test.ts`, `v2-authorization-advertisement.test.ts`, `v2-bound-id-kinds.test.ts`, `v2-bound-id-path-projection.test.ts`, `v2-id-grammar.test.ts`, `v2-interrupt-token-scheme.test.ts`, `v2-lane-exp-only-bound.test.ts`, `v2-lane-issuer-advertised.test.ts`, `v2-oidc-id-token-audience.test.ts`, `v2-owner-subject-required.test.ts`, `v2-protected-resource-metadata.test.ts`, `v2-revocation-honored.test.ts`, `v2-subject-link-record.test.ts` |
|
|
33
33
|
| [`interop.md`](../spec/v2/core/interop.md) | `otel-mcp-semconv-projection.test.ts`, `v2-a2a-agent-cards.test.ts`, `v2-a2a-client-error-details.test.ts`, `v2-a2a-operation-map.test.ts`, `v2-a2a-push-delivery.test.ts`, `v2-interop-trace-context.test.ts`, `v2-legacy-profiles-absent.test.ts`, `v2-mcp-mount-map.test.ts`, `v2-mcp-tasks.test.ts`, `v2-minimum-version-refused.test.ts`, `v2-mrtr-rounds-ceiling.test.ts`, `v2-negotiation-authenticated.test.ts`, `v2-negotiation-decided-emitted.test.ts`, `v2-no-transport-advertisement.test.ts`, `v2-refresh-sla.test.ts` |
|
|
34
34
|
| [`interrupt.md`](../spec/v2/core/interrupt.md) | `v2-approval-reject-disposition.test.ts`, `v2-approver-enforced.test.ts`, `v2-callback-url-guarded.test.ts` |
|
|
35
|
-
| [`node-pack-runtimes.md`](../spec/v2/core/node-pack-runtimes.md) | `v2-node-pack-runtimes-advertisement.test.ts`, `v2-wasm-memory-cap.test.ts` |
|
|
35
|
+
| [`node-pack-runtimes.md`](../spec/v2/core/node-pack-runtimes.md) | `v2-node-pack-runtimes-advertisement.test.ts`, `v2-wasm-memory-cap.test.ts`, `v2-wasm-abi-reject.test.ts` |
|
|
36
36
|
| [`oauth.md`](../spec/v2/core/oauth.md) | `v2-credential-interrupt.test.ts`, `v2-credentials-advertisement.test.ts`, `v2-oauth-client-pkce-state-iss.test.ts`, `v2-oauth-mcp-reach-discovery.test.ts` |
|
|
37
37
|
| [`packs.md`](../spec/v2/core/packs.md) | `v2-manifest-ceiling-refused.test.ts`, `v2-manifest-hatch-carried.test.ts`, `v2-peer-dependency-declared.test.ts`, `v2-registry-lifecycle.test.ts`, `v2-ui-plugin-boundary.test.ts`, `v2-ui-plugins-advertisement.test.ts` |
|
|
38
38
|
| [`persistence.md`](../spec/v2/core/persistence.md) | `v2-era-2-append-vocabulary.test.ts`, `v2-era-key.test.ts`, `v2-era-stamp-universal.test.ts`, `v2-pinned-run-disposition.test.ts`, `v2-unmapped-type-refused.test.ts`, `v2-v1-events-translated.test.ts` |
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "conformance-wasm-pack-abi-mismatch",
|
|
3
|
+
"name": "Conformance: WASM Pack ABI Mismatch (Refused at Load)",
|
|
4
|
+
"version": "1.0",
|
|
5
|
+
"description": "node-pack-runtimes.md §WASM fixture. Invokes `vendor.openwop.misbehaving.abi-bomb`, whose module reports `openwop_abi_version()` 999, which no host lists. A host advertising this fixture says its operator offered `conformance/fixtures/wasm-packs/misbehaving-abi/` to its loader; a conforming host rejected the pack at load, so `nodePackRuntimes.wasm.loadedPacks` (when advertised) omits it, and the run is refused at creation or ends without the node completing. Fixture-only; not signed for the registry.",
|
|
6
|
+
"nodes": [
|
|
7
|
+
{
|
|
8
|
+
"id": "abi",
|
|
9
|
+
"typeId": "vendor.openwop.misbehaving.abi-bomb",
|
|
10
|
+
"name": "ABI bomb",
|
|
11
|
+
"position": {
|
|
12
|
+
"x": 0,
|
|
13
|
+
"y": 0
|
|
14
|
+
},
|
|
15
|
+
"config": {},
|
|
16
|
+
"inputs": {}
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"edges": [],
|
|
20
|
+
"triggers": [
|
|
21
|
+
{
|
|
22
|
+
"id": "manual",
|
|
23
|
+
"type": "manual",
|
|
24
|
+
"enabled": true
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"variables": [],
|
|
28
|
+
"metadata": {
|
|
29
|
+
"tags": [
|
|
30
|
+
"conformance",
|
|
31
|
+
"wasm",
|
|
32
|
+
"node-pack",
|
|
33
|
+
"rfc-0008",
|
|
34
|
+
"abi-version",
|
|
35
|
+
"misbehaving"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
"settings": {
|
|
39
|
+
"timeout": 10000
|
|
40
|
+
}
|
|
41
|
+
}
|
package/fixtures.md
CHANGED
|
@@ -126,6 +126,7 @@ All fixtures MUST advertise:
|
|
|
126
126
|
| A2A Task Roundtrip | `conformance-a2a-task-roundtrip` | Track 6 — host consumes the conformance suite's synthetic A2A peer; covers drift points #3 (`AUTH_REQUIRED`) and #4 (`REJECTED`). Node `core.conformance.a2a-invoke` is a **conformance-RESERVED** typeId (renamed 2026-08-16 from `core.a2a.invoke`, a multi-segment `core.*` id no host shipped and the corpus never defined): a host that consumes A2A peers MUST map it to its A2A bridge node (a host-extension node — `a2a-integration.md` §"State projection"); a host that does not consume A2A MUST NOT advertise this fixture | `failed` or `waiting-input` (per `driftScenario` input) | ≤ 30s |
|
|
127
127
|
| WASM Pack Roundtrip | `conformance-wasm-pack-roundtrip` | RFC 0008 — invokes `vendor.openwop.rust-hello.greet` (loaded WASM pack); exercises required exports + at least one import | `completed` | ≤ 10s |
|
|
128
128
|
| WASM Pack Memory-Cap Breach | `conformance-wasm-pack-memory-cap-breach` | RFC 0008 §K — invokes the deliberately-misbehaving `vendor.openwop.misbehaving.memory-bomb` pack (allocates 1 GiB beyond the host's `memoryPagesMax`). Host MUST emit `cap.breached` with `kind: "wasm-memory"` and drive the run to terminal `failed`. Misbehaving pack lives at `openwop-examples:examples/packs/rust-misbehaving-memory/` (repo-qualified per the 2026-06 monorepo split — the `openwop-examples` sibling repo) and is fixture-only (NOT signed for registry publication). | `failed` (with `cap.breached`) | ≤ 10s |
|
|
129
|
+
| WASM Pack ABI Mismatch | `conformance-wasm-pack-abi-mismatch` | node-pack-runtimes.md §WASM — invokes `vendor.openwop.misbehaving.abi-bomb`, whose module reports `openwop_abi_version()` 999. Advertising the fixture says the operator offered `fixtures/wasm-packs/misbehaving-abi/` to the loader; a conforming host rejected it at load, so `loadedPacks` (when advertised) omits it and the node never runs. Fixture-only (NOT signed for registry publication). | refused at creation (4xx), or `failed` / `cancelled` without `node.completed` for `abi` | ≤ 10s |
|
|
129
130
|
| Configurable Schema | `conformance-configurable-schema` | Track 13 — workflow declares `configurableSchema` (`additionalProperties: false`, `recursionLimit: integer ≥ 1`). Suite verifies `GET /workflows/{id}` surfaces the schema AND `POST /runs` with a mismatched `configurable` returns `validation_error`. | `completed` (with accepted overlay) | ≤ 5s |
|
|
130
131
|
| Smoke — BYOK Roundtrip | `openwop-smoke-byok-roundtrip` | End-to-end BYOK secret-resolution smoke. Single `conformance.secret.echo` node fetches the host-provisioned canary secret `openwop-conformance-canary-secret`, emits SHA-256 hex + byte length to variables — never the raw value. Spec: `run-options.md` §"Credential references" + `auth.md` §"Secret resolution" + `observability.md` §"Redaction". | `completed` | ≤ 10s |
|
|
131
132
|
| Secrets — Run Witness | `openwop-secrets-run-witness` | RFC 0229 §C — one `core.secret.witness` node. The client supplies a value with the run (`runSecrets`, a `run:` ref) and its SHA-256 as an input; the node outputs only `{ matched }`. It can confirm only a value the caller already holds, so it is safe to advertise in production. Advertised by every host that advertises `secrets.runSecrets`. | `completed` (`matched: true` or `false`); `failed` (`credential_forbidden` / `credential_not_found`) on the scope legs | ≤ 10s |
|
|
@@ -841,7 +842,7 @@ The `fixtures/wasm-packs/` sub-directory holds two node packs (`language: "wasm"
|
|
|
841
842
|
| Pack | Node | Purpose |
|
|
842
843
|
| --- | --- | --- |
|
|
843
844
|
| `misbehaving-memory` (`vendor.openwop.misbehaving`) | `vendor.openwop.misbehaving.memory-bomb` | Grows linear memory 64 MiB at a time until the host refuses, then traps. A host advertising `nodePackRuntimes.wasm.maxMemoryBytes` MUST emit `cap.breached` `kind: "wasm-memory"`. Drives `conformance-wasm-pack-memory-cap-breach` and `v2-wasm-memory-cap`. |
|
|
844
|
-
| `misbehaving-abi` (`vendor.openwop.misbehaving-abi`) | `vendor.openwop.misbehaving.abi-bomb` | Reports `openwop_abi_version` 999, which no host lists, so a conforming host refuses it at load.
|
|
845
|
+
| `misbehaving-abi` (`vendor.openwop.misbehaving-abi`) | `vendor.openwop.misbehaving.abi-bomb` | Reports `openwop_abi_version` 999, which no host lists, so a conforming host refuses it at load. Drives `conformance-wasm-pack-abi-mismatch` and `v2-wasm-abi-reject`, which read the refusal from what it prevents: the pack in `nodePackRuntimes.wasm.loadedPacks`, and its node completing. |
|
|
845
846
|
|
|
846
847
|
---
|
|
847
848
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openwop/openwop-conformance",
|
|
3
|
-
"version": "2.45.
|
|
3
|
+
"version": "2.45.26",
|
|
4
4
|
"description": "Black-box conformance suite for OpenWOP hosts (v2 current; v1 scenarios retained for the frozen v1 tree).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -56,6 +56,6 @@
|
|
|
56
56
|
"@openwop/spec-artifacts": "file:../spec-artifacts"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"@openwop/spec-artifacts": "2.45.
|
|
59
|
+
"@openwop/spec-artifacts": "2.45.26"
|
|
60
60
|
}
|
|
61
61
|
}
|
package/requirements.json
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"$comment": "GENERATED by conformance/scripts/generate-requirement-registry.mjs — do not edit. One record per it()/test() in src/scenarios. Ids: openwop.it.<file-stem>.<title-slug>[~n] (src/lib/requirement-ids.ts). A record with id null has an interpolated title; its run-time row is keyed by the rendered title and maps here by file+line only. Renamed ids need a row in requirement-aliases.json.",
|
|
3
3
|
"generatedFrom": "src/scenarios/*.test.ts",
|
|
4
4
|
"counts": {
|
|
5
|
-
"files":
|
|
6
|
-
"tests":
|
|
7
|
-
"withStableId":
|
|
5
|
+
"files": 737,
|
|
6
|
+
"tests": 2782,
|
|
7
|
+
"withStableId": 2782,
|
|
8
8
|
"interpolatedTitles": 0,
|
|
9
|
-
"explicitIds":
|
|
9
|
+
"explicitIds": 2644
|
|
10
10
|
},
|
|
11
11
|
"records": [
|
|
12
12
|
{
|
|
@@ -13928,184 +13928,10 @@
|
|
|
13928
13928
|
}
|
|
13929
13929
|
]
|
|
13930
13930
|
},
|
|
13931
|
-
{
|
|
13932
|
-
"id": "openwop.it.frontend-plugin-packs.a-well-formed-frontend-plugin-manifest-validates",
|
|
13933
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
13934
|
-
"line": 70,
|
|
13935
|
-
"title": "a well-formed frontend-plugin manifest validates",
|
|
13936
|
-
"explicitId": "openwop.it.frontend-plugin-packs.a-well-formed-frontend-plugin-manifest-validates",
|
|
13937
|
-
"citations": [
|
|
13938
|
-
{
|
|
13939
|
-
"section": "frontend-plugin-packs.md",
|
|
13940
|
-
"requirement": null,
|
|
13941
|
-
"interpolated": true
|
|
13942
|
-
}
|
|
13943
|
-
]
|
|
13944
|
-
},
|
|
13945
|
-
{
|
|
13946
|
-
"id": "openwop.it.frontend-plugin-packs.a-backend-runtime-member-is-rejected-a-plugin-is-sandboxed-ui-not-a-node-entry",
|
|
13947
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
13948
|
-
"line": 77,
|
|
13949
|
-
"title": "a backend `runtime` member is rejected (a plugin is sandboxed UI, not a node entry)",
|
|
13950
|
-
"explicitId": "openwop.it.frontend-plugin-packs.a-backend-runtime-member-is-rejected-a-plugin-is-sandboxed-ui-not-a-node-entry",
|
|
13951
|
-
"citations": [
|
|
13952
|
-
{
|
|
13953
|
-
"section": "frontend-plugin-packs.md",
|
|
13954
|
-
"requirement": "node-packs.md §Pack kinds — a kind:\"frontend-plugin\" manifest carrying `runtime` MUST be rejected (pack_kind_invalid)"
|
|
13955
|
-
}
|
|
13956
|
-
]
|
|
13957
|
-
},
|
|
13958
|
-
{
|
|
13959
|
-
"id": "openwop.it.frontend-plugin-packs.a-uiplugins-entry-missing-entry-is-rejected",
|
|
13960
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
13961
|
-
"line": 85,
|
|
13962
|
-
"title": "a uiPlugins[] entry missing `entry` is rejected",
|
|
13963
|
-
"explicitId": "openwop.it.frontend-plugin-packs.a-uiplugins-entry-missing-entry-is-rejected",
|
|
13964
|
-
"citations": [
|
|
13965
|
-
{
|
|
13966
|
-
"section": "frontend-plugin-packs.md",
|
|
13967
|
-
"requirement": "a uiPlugins[] entry missing `entry` MUST NOT validate"
|
|
13968
|
-
}
|
|
13969
|
-
]
|
|
13970
|
-
},
|
|
13971
|
-
{
|
|
13972
|
-
"id": "openwop.it.frontend-plugin-packs.an-entry-path-with-traversal-is-rejected",
|
|
13973
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
13974
|
-
"line": 91,
|
|
13975
|
-
"title": "an `entry` path with `..` traversal is rejected",
|
|
13976
|
-
"explicitId": "openwop.it.frontend-plugin-packs.an-entry-path-with-traversal-is-rejected",
|
|
13977
|
-
"citations": [
|
|
13978
|
-
{
|
|
13979
|
-
"section": "frontend-plugin-packs.md",
|
|
13980
|
-
"requirement": "an `entry` path MUST NOT contain `..` (path-traversal)"
|
|
13981
|
-
}
|
|
13982
|
-
]
|
|
13983
|
-
},
|
|
13984
|
-
{
|
|
13985
|
-
"id": "openwop.it.frontend-plugin-packs.a-hostapi-method-outside-the-closed-allowlist-is-rejected-frontend-plugin-rpc-al",
|
|
13986
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
13987
|
-
"line": 97,
|
|
13988
|
-
"title": "a hostApi method outside the closed allowlist is rejected (frontend-plugin-rpc-allowlist)",
|
|
13989
|
-
"explicitId": "openwop.it.frontend-plugin-packs.a-hostapi-method-outside-the-closed-allowlist-is-rejected-frontend-plugin-rpc-al",
|
|
13990
|
-
"citations": [
|
|
13991
|
-
{
|
|
13992
|
-
"section": "frontend-plugin-packs.md",
|
|
13993
|
-
"requirement": "frontend-plugin-packs.md §Host-RPC — only the closed allowlist methods are permitted; `host.exec` MUST NOT validate"
|
|
13994
|
-
}
|
|
13995
|
-
]
|
|
13996
|
-
},
|
|
13997
|
-
{
|
|
13998
|
-
"id": "openwop.it.frontend-plugin-packs.an-empty-uiplugins-is-rejected-a-pack-must-declare-at-least-one-plugin",
|
|
13999
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
14000
|
-
"line": 106,
|
|
14001
|
-
"title": "an empty uiPlugins[] is rejected (a pack MUST declare at least one plugin)",
|
|
14002
|
-
"explicitId": "openwop.it.frontend-plugin-packs.an-empty-uiplugins-is-rejected-a-pack-must-declare-at-least-one-plugin",
|
|
14003
|
-
"citations": [
|
|
14004
|
-
{
|
|
14005
|
-
"section": "frontend-plugin-packs.md",
|
|
14006
|
-
"requirement": "a frontend-plugin pack MUST declare at least one uiPlugins[] entry"
|
|
14007
|
-
}
|
|
14008
|
-
]
|
|
14009
|
-
},
|
|
14010
|
-
{
|
|
14011
|
-
"id": "openwop.it.frontend-plugin-packs.a-canvas-preview-entry-with-canvastypes-host-announce-validates-rfc-0130",
|
|
14012
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
14013
|
-
"line": 111,
|
|
14014
|
-
"title": "a canvas-preview entry with canvasTypes + host.announce validates (RFC 0130)",
|
|
14015
|
-
"explicitId": "openwop.it.frontend-plugin-packs.a-canvas-preview-entry-with-canvastypes-host-announce-validates-rfc-0130",
|
|
14016
|
-
"citations": [
|
|
14017
|
-
{
|
|
14018
|
-
"section": "RFC 0130",
|
|
14019
|
-
"requirement": null,
|
|
14020
|
-
"interpolated": true
|
|
14021
|
-
}
|
|
14022
|
-
]
|
|
14023
|
-
},
|
|
14024
|
-
{
|
|
14025
|
-
"id": "openwop.it.frontend-plugin-packs.a-surface-outside-the-closed-set-is-still-rejected-rfc-0130-keeps-the-enum-close",
|
|
14026
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
14027
|
-
"line": 126,
|
|
14028
|
-
"title": "a surface outside the closed set is still rejected (RFC 0130 keeps the enum closed)",
|
|
14029
|
-
"explicitId": "openwop.it.frontend-plugin-packs.a-surface-outside-the-closed-set-is-still-rejected-rfc-0130-keeps-the-enum-close",
|
|
14030
|
-
"citations": [
|
|
14031
|
-
{
|
|
14032
|
-
"section": "RFC 0130",
|
|
14033
|
-
"requirement": "frontend-plugin-packs.md §The pack — the surface enum stays closed; an unknown surface MUST NOT validate"
|
|
14034
|
-
}
|
|
14035
|
-
]
|
|
14036
|
-
},
|
|
14037
|
-
{
|
|
14038
|
-
"id": "openwop.it.frontend-plugin-packs.a-valid-artifact-write-request-carrying-a-version-token-validates",
|
|
14039
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
14040
|
-
"line": 141,
|
|
14041
|
-
"title": "a valid artifact.write request carrying a version token validates",
|
|
14042
|
-
"explicitId": "openwop.it.frontend-plugin-packs.a-valid-artifact-write-request-carrying-a-version-token-validates",
|
|
14043
|
-
"citations": [
|
|
14044
|
-
{
|
|
14045
|
-
"section": "frontend-plugin-packs.md",
|
|
14046
|
-
"requirement": null,
|
|
14047
|
-
"interpolated": true
|
|
14048
|
-
}
|
|
14049
|
-
]
|
|
14050
|
-
},
|
|
14051
|
-
{
|
|
14052
|
-
"id": "openwop.it.frontend-plugin-packs.an-artifact-conflict-response-carries-currentversion-version-token-concurrency",
|
|
14053
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
14054
|
-
"line": 152,
|
|
14055
|
-
"title": "an artifact_conflict response carries currentVersion (version-token concurrency)",
|
|
14056
|
-
"explicitId": "openwop.it.frontend-plugin-packs.an-artifact-conflict-response-carries-currentversion-version-token-concurrency",
|
|
14057
|
-
"citations": [
|
|
14058
|
-
{
|
|
14059
|
-
"section": "frontend-plugin-packs.md",
|
|
14060
|
-
"requirement": null,
|
|
14061
|
-
"interpolated": true
|
|
14062
|
-
}
|
|
14063
|
-
]
|
|
14064
|
-
},
|
|
14065
|
-
{
|
|
14066
|
-
"id": "openwop.it.frontend-plugin-packs.a-request-with-a-method-outside-the-allowlist-is-schema-rejected",
|
|
14067
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
14068
|
-
"line": 166,
|
|
14069
|
-
"title": "a request with a method outside the allowlist is schema-rejected",
|
|
14070
|
-
"explicitId": "openwop.it.frontend-plugin-packs.a-request-with-a-method-outside-the-allowlist-is-schema-rejected",
|
|
14071
|
-
"citations": [
|
|
14072
|
-
{
|
|
14073
|
-
"section": "frontend-plugin-packs.md",
|
|
14074
|
-
"requirement": "a method outside the ui-plugin/1 allowlist MUST NOT validate"
|
|
14075
|
-
}
|
|
14076
|
-
]
|
|
14077
|
-
},
|
|
14078
|
-
{
|
|
14079
|
-
"id": "openwop.it.frontend-plugin-packs.a-message-without-the-ui-plugin-1-protocol-tag-is-rejected",
|
|
14080
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
14081
|
-
"line": 171,
|
|
14082
|
-
"title": "a message without the ui-plugin/1 protocol tag is rejected",
|
|
14083
|
-
"explicitId": "openwop.it.frontend-plugin-packs.a-message-without-the-ui-plugin-1-protocol-tag-is-rejected",
|
|
14084
|
-
"citations": [
|
|
14085
|
-
{
|
|
14086
|
-
"section": "frontend-plugin-packs.md",
|
|
14087
|
-
"requirement": "a host MUST ignore messages whose ui-plugin tag it does not recognize"
|
|
14088
|
-
}
|
|
14089
|
-
]
|
|
14090
|
-
},
|
|
14091
|
-
{
|
|
14092
|
-
"id": "openwop.it.frontend-plugin-packs.no-credential-bearing-field-is-admitted-on-the-envelope-frontend-plugin-no-byok",
|
|
14093
|
-
"file": "frontend-plugin-packs.test.ts",
|
|
14094
|
-
"line": 176,
|
|
14095
|
-
"title": "no credential-bearing field is admitted on the envelope (frontend-plugin-no-byok)",
|
|
14096
|
-
"explicitId": "openwop.it.frontend-plugin-packs.no-credential-bearing-field-is-admitted-on-the-envelope-frontend-plugin-no-byok",
|
|
14097
|
-
"citations": [
|
|
14098
|
-
{
|
|
14099
|
-
"section": "frontend-plugin-packs.md",
|
|
14100
|
-
"requirement": null,
|
|
14101
|
-
"interpolated": true
|
|
14102
|
-
}
|
|
14103
|
-
]
|
|
14104
|
-
},
|
|
14105
13931
|
{
|
|
14106
13932
|
"id": "openwop.it.frontend-plugin-packs.a-host-advertising-uiplugins-must-advertise-a-conformant-isolation-model",
|
|
14107
13933
|
"file": "frontend-plugin-packs.test.ts",
|
|
14108
|
-
"line":
|
|
13934
|
+
"line": 40,
|
|
14109
13935
|
"title": "a host advertising uiPlugins MUST advertise a conformant isolation model",
|
|
14110
13936
|
"explicitId": "openwop.it.frontend-plugin-packs.a-host-advertising-uiplugins-must-advertise-a-conformant-isolation-model",
|
|
14111
13937
|
"citations": [
|
|
@@ -14118,7 +13944,7 @@
|
|
|
14118
13944
|
{
|
|
14119
13945
|
"id": "openwop.it.frontend-plugin-packs.an-undeclared-host-rpc-method-is-refused-with-method-not-allowed",
|
|
14120
13946
|
"file": "frontend-plugin-packs.test.ts",
|
|
14121
|
-
"line":
|
|
13947
|
+
"line": 55,
|
|
14122
13948
|
"title": "an undeclared host-RPC method is refused with method_not_allowed",
|
|
14123
13949
|
"explicitId": "openwop.it.frontend-plugin-packs.an-undeclared-host-rpc-method-is-refused-with-method-not-allowed",
|
|
14124
13950
|
"citations": [
|
|
@@ -14135,7 +13961,7 @@
|
|
|
14135
13961
|
{
|
|
14136
13962
|
"id": "openwop.it.frontend-plugin-packs.a-stale-artifact-write-is-refused-with-artifact-conflict-currentversion-no-persi",
|
|
14137
13963
|
"file": "frontend-plugin-packs.test.ts",
|
|
14138
|
-
"line":
|
|
13964
|
+
"line": 78,
|
|
14139
13965
|
"title": "a stale artifact.write is refused with artifact_conflict + currentVersion (no persist)",
|
|
14140
13966
|
"explicitId": "openwop.it.frontend-plugin-packs.a-stale-artifact-write-is-refused-with-artifact-conflict-currentversion-no-persi",
|
|
14141
13967
|
"citations": [
|
|
@@ -31527,7 +31353,7 @@
|
|
|
31527
31353
|
{
|
|
31528
31354
|
"id": "openwop.it.v2-host-event-delivery.an-emitted-durable-host-event-arrives-on-host-events-as-a-valid-envelope",
|
|
31529
31355
|
"file": "v2-host-event-delivery.test.ts",
|
|
31530
|
-
"line":
|
|
31356
|
+
"line": 160,
|
|
31531
31357
|
"title": "an emitted durable host event arrives on /host/events as a valid envelope",
|
|
31532
31358
|
"explicitId": "openwop.requirement.0236.host-event.envelope",
|
|
31533
31359
|
"citations": [
|
|
@@ -31540,7 +31366,7 @@
|
|
|
31540
31366
|
{
|
|
31541
31367
|
"id": "openwop.it.v2-host-event-delivery.an-ephemeral-host-event-has-no-id-and-is-not-redelivered-after-last-event-id",
|
|
31542
31368
|
"file": "v2-host-event-delivery.test.ts",
|
|
31543
|
-
"line":
|
|
31369
|
+
"line": 174,
|
|
31544
31370
|
"title": "an ephemeral host event has no id: and is not redelivered after Last-Event-ID",
|
|
31545
31371
|
"explicitId": null,
|
|
31546
31372
|
"citations": []
|
|
@@ -31548,7 +31374,7 @@
|
|
|
31548
31374
|
{
|
|
31549
31375
|
"id": "openwop.it.v2-host-event-delivery.registerwebhook-refuses-an-ephemeral-host-event-type-with-400-validation-error",
|
|
31550
31376
|
"file": "v2-host-event-delivery.test.ts",
|
|
31551
|
-
"line":
|
|
31377
|
+
"line": 191,
|
|
31552
31378
|
"title": "registerWebhook refuses an ephemeral host-event type with 400 validation_error",
|
|
31553
31379
|
"explicitId": "openwop.requirement.0236.webhook.ephemeral-refused",
|
|
31554
31380
|
"citations": [
|
|
@@ -31566,7 +31392,7 @@
|
|
|
31566
31392
|
{
|
|
31567
31393
|
"id": "openwop.it.v2-host-event-delivery.a-subscribed-durable-host-event-is-delivered-as-hostevent-signed",
|
|
31568
31394
|
"file": "v2-host-event-delivery.test.ts",
|
|
31569
|
-
"line":
|
|
31395
|
+
"line": 207,
|
|
31570
31396
|
"title": "a subscribed durable host event is delivered as { hostEvent }, signed",
|
|
31571
31397
|
"explicitId": "openwop.requirement.0236.webhook.host-variant",
|
|
31572
31398
|
"citations": [
|
|
@@ -31580,15 +31406,23 @@
|
|
|
31580
31406
|
{
|
|
31581
31407
|
"id": "openwop.it.v2-host-event-delivery.the-same-subscription-never-receives-the-ephemeral-host-event",
|
|
31582
31408
|
"file": "v2-host-event-delivery.test.ts",
|
|
31583
|
-
"line":
|
|
31409
|
+
"line": 243,
|
|
31584
31410
|
"title": "the same subscription never receives the ephemeral host event",
|
|
31585
31411
|
"explicitId": null,
|
|
31586
31412
|
"citations": []
|
|
31587
31413
|
},
|
|
31414
|
+
{
|
|
31415
|
+
"id": "openwop.it.v2-host-event-delivery.emittesthostevent-is-served-exactly-for-the-listed-host-test-classes",
|
|
31416
|
+
"file": "v2-host-event-delivery.test.ts",
|
|
31417
|
+
"line": 256,
|
|
31418
|
+
"title": "emitTestHostEvent is served exactly for the listed host-test classes",
|
|
31419
|
+
"explicitId": null,
|
|
31420
|
+
"citations": []
|
|
31421
|
+
},
|
|
31588
31422
|
{
|
|
31589
31423
|
"id": "openwop.it.v2-host-event-delivery.a-second-tenant-receives-nothing-for-the-first-tenant-s-host-event",
|
|
31590
31424
|
"file": "v2-host-event-delivery.test.ts",
|
|
31591
|
-
"line":
|
|
31425
|
+
"line": 270,
|
|
31592
31426
|
"title": "a second tenant receives nothing for the first tenant’s host event",
|
|
31593
31427
|
"explicitId": null,
|
|
31594
31428
|
"citations": []
|
|
@@ -38101,6 +37935,19 @@
|
|
|
38101
37935
|
}
|
|
38102
37936
|
]
|
|
38103
37937
|
},
|
|
37938
|
+
{
|
|
37939
|
+
"id": "openwop.it.v2-wasm-abi-reject.a-pack-whose-openwop-abi-version-is-not-listed-is-not-loaded-and-its-node-never",
|
|
37940
|
+
"file": "v2-wasm-abi-reject.test.ts",
|
|
37941
|
+
"line": 30,
|
|
37942
|
+
"title": "a pack whose openwop_abi_version() is not listed is not loaded and its node never runs",
|
|
37943
|
+
"explicitId": "openwop.requirement.node-pack-runtimes.wasm-abi-reject",
|
|
37944
|
+
"citations": [
|
|
37945
|
+
{
|
|
37946
|
+
"section": "spec/v2/core/node-pack-runtimes.md §WASM",
|
|
37947
|
+
"requirement": "a host MUST reject at load a pack whose openwop_abi_version() is not listed"
|
|
37948
|
+
}
|
|
37949
|
+
]
|
|
37950
|
+
},
|
|
38104
37951
|
{
|
|
38105
37952
|
"id": "openwop.it.v2-wasm-memory-cap.a-module-exceeding-maxmemorybytes-produces-cap-breached-wasm-memory-and-fails-th",
|
|
38106
37953
|
"file": "v2-wasm-memory-cap.test.ts",
|
|
@@ -43444,6 +43291,180 @@
|
|
|
43444
43291
|
}
|
|
43445
43292
|
]
|
|
43446
43293
|
},
|
|
43294
|
+
{
|
|
43295
|
+
"id": "openwop.it.frontend-plugin-schemas.a-well-formed-frontend-plugin-manifest-validates",
|
|
43296
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43297
|
+
"line": 63,
|
|
43298
|
+
"title": "a well-formed frontend-plugin manifest validates",
|
|
43299
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.a-well-formed-frontend-plugin-manifest-validates",
|
|
43300
|
+
"citations": [
|
|
43301
|
+
{
|
|
43302
|
+
"section": "frontend-plugin-packs.md",
|
|
43303
|
+
"requirement": null,
|
|
43304
|
+
"interpolated": true
|
|
43305
|
+
}
|
|
43306
|
+
]
|
|
43307
|
+
},
|
|
43308
|
+
{
|
|
43309
|
+
"id": "openwop.it.frontend-plugin-schemas.a-backend-runtime-member-is-rejected-a-plugin-is-sandboxed-ui-not-a-node-entry",
|
|
43310
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43311
|
+
"line": 71,
|
|
43312
|
+
"title": "a backend `runtime` member is rejected (a plugin is sandboxed UI, not a node entry)",
|
|
43313
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.a-backend-runtime-member-is-rejected-a-plugin-is-sandboxed-ui-not-a-node-entry",
|
|
43314
|
+
"citations": [
|
|
43315
|
+
{
|
|
43316
|
+
"section": "frontend-plugin-packs.md",
|
|
43317
|
+
"requirement": "node-packs.md §Pack kinds — a kind:\"frontend-plugin\" manifest carrying `runtime` MUST be rejected (pack_kind_invalid)"
|
|
43318
|
+
}
|
|
43319
|
+
]
|
|
43320
|
+
},
|
|
43321
|
+
{
|
|
43322
|
+
"id": "openwop.it.frontend-plugin-schemas.a-uiplugins-entry-missing-entry-is-rejected",
|
|
43323
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43324
|
+
"line": 80,
|
|
43325
|
+
"title": "a uiPlugins[] entry missing `entry` is rejected",
|
|
43326
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.a-uiplugins-entry-missing-entry-is-rejected",
|
|
43327
|
+
"citations": [
|
|
43328
|
+
{
|
|
43329
|
+
"section": "frontend-plugin-packs.md",
|
|
43330
|
+
"requirement": "a uiPlugins[] entry missing `entry` MUST NOT validate"
|
|
43331
|
+
}
|
|
43332
|
+
]
|
|
43333
|
+
},
|
|
43334
|
+
{
|
|
43335
|
+
"id": "openwop.it.frontend-plugin-schemas.an-entry-path-with-traversal-is-rejected",
|
|
43336
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43337
|
+
"line": 87,
|
|
43338
|
+
"title": "an `entry` path with `..` traversal is rejected",
|
|
43339
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.an-entry-path-with-traversal-is-rejected",
|
|
43340
|
+
"citations": [
|
|
43341
|
+
{
|
|
43342
|
+
"section": "frontend-plugin-packs.md",
|
|
43343
|
+
"requirement": "an `entry` path MUST NOT contain `..` (path-traversal)"
|
|
43344
|
+
}
|
|
43345
|
+
]
|
|
43346
|
+
},
|
|
43347
|
+
{
|
|
43348
|
+
"id": "openwop.it.frontend-plugin-schemas.a-hostapi-method-outside-the-closed-allowlist-is-rejected-frontend-plugin-rpc-al",
|
|
43349
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43350
|
+
"line": 94,
|
|
43351
|
+
"title": "a hostApi method outside the closed allowlist is rejected (frontend-plugin-rpc-allowlist)",
|
|
43352
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.a-hostapi-method-outside-the-closed-allowlist-is-rejected-frontend-plugin-rpc-al",
|
|
43353
|
+
"citations": [
|
|
43354
|
+
{
|
|
43355
|
+
"section": "frontend-plugin-packs.md",
|
|
43356
|
+
"requirement": "frontend-plugin-packs.md §Host-RPC — only the closed allowlist methods are permitted; `host.exec` MUST NOT validate"
|
|
43357
|
+
}
|
|
43358
|
+
]
|
|
43359
|
+
},
|
|
43360
|
+
{
|
|
43361
|
+
"id": "openwop.it.frontend-plugin-schemas.an-empty-uiplugins-is-rejected-a-pack-must-declare-at-least-one-plugin",
|
|
43362
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43363
|
+
"line": 104,
|
|
43364
|
+
"title": "an empty uiPlugins[] is rejected (a pack MUST declare at least one plugin)",
|
|
43365
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.an-empty-uiplugins-is-rejected-a-pack-must-declare-at-least-one-plugin",
|
|
43366
|
+
"citations": [
|
|
43367
|
+
{
|
|
43368
|
+
"section": "frontend-plugin-packs.md",
|
|
43369
|
+
"requirement": "a frontend-plugin pack MUST declare at least one uiPlugins[] entry"
|
|
43370
|
+
}
|
|
43371
|
+
]
|
|
43372
|
+
},
|
|
43373
|
+
{
|
|
43374
|
+
"id": "openwop.it.frontend-plugin-schemas.a-canvas-preview-entry-with-canvastypes-host-announce-validates-rfc-0130",
|
|
43375
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43376
|
+
"line": 110,
|
|
43377
|
+
"title": "a canvas-preview entry with canvasTypes + host.announce validates (RFC 0130)",
|
|
43378
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.a-canvas-preview-entry-with-canvastypes-host-announce-validates-rfc-0130",
|
|
43379
|
+
"citations": [
|
|
43380
|
+
{
|
|
43381
|
+
"section": "RFC 0130",
|
|
43382
|
+
"requirement": null,
|
|
43383
|
+
"interpolated": true
|
|
43384
|
+
}
|
|
43385
|
+
]
|
|
43386
|
+
},
|
|
43387
|
+
{
|
|
43388
|
+
"id": "openwop.it.frontend-plugin-schemas.a-surface-outside-the-closed-set-is-still-rejected-rfc-0130-keeps-the-enum-close",
|
|
43389
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43390
|
+
"line": 126,
|
|
43391
|
+
"title": "a surface outside the closed set is still rejected (RFC 0130 keeps the enum closed)",
|
|
43392
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.a-surface-outside-the-closed-set-is-still-rejected-rfc-0130-keeps-the-enum-close",
|
|
43393
|
+
"citations": [
|
|
43394
|
+
{
|
|
43395
|
+
"section": "RFC 0130",
|
|
43396
|
+
"requirement": "frontend-plugin-packs.md §The pack — the surface enum stays closed; an unknown surface MUST NOT validate"
|
|
43397
|
+
}
|
|
43398
|
+
]
|
|
43399
|
+
},
|
|
43400
|
+
{
|
|
43401
|
+
"id": "openwop.it.frontend-plugin-schemas.a-valid-artifact-write-request-carrying-a-version-token-validates",
|
|
43402
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43403
|
+
"line": 140,
|
|
43404
|
+
"title": "a valid artifact.write request carrying a version token validates",
|
|
43405
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.a-valid-artifact-write-request-carrying-a-version-token-validates",
|
|
43406
|
+
"citations": [
|
|
43407
|
+
{
|
|
43408
|
+
"section": "frontend-plugin-packs.md",
|
|
43409
|
+
"requirement": null,
|
|
43410
|
+
"interpolated": true
|
|
43411
|
+
}
|
|
43412
|
+
]
|
|
43413
|
+
},
|
|
43414
|
+
{
|
|
43415
|
+
"id": "openwop.it.frontend-plugin-schemas.an-artifact-conflict-response-carries-currentversion-version-token-concurrency",
|
|
43416
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43417
|
+
"line": 152,
|
|
43418
|
+
"title": "an artifact_conflict response carries currentVersion (version-token concurrency)",
|
|
43419
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.an-artifact-conflict-response-carries-currentversion-version-token-concurrency",
|
|
43420
|
+
"citations": [
|
|
43421
|
+
{
|
|
43422
|
+
"section": "frontend-plugin-packs.md",
|
|
43423
|
+
"requirement": null,
|
|
43424
|
+
"interpolated": true
|
|
43425
|
+
}
|
|
43426
|
+
]
|
|
43427
|
+
},
|
|
43428
|
+
{
|
|
43429
|
+
"id": "openwop.it.frontend-plugin-schemas.a-request-with-a-method-outside-the-allowlist-is-schema-rejected",
|
|
43430
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43431
|
+
"line": 167,
|
|
43432
|
+
"title": "a request with a method outside the allowlist is schema-rejected",
|
|
43433
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.a-request-with-a-method-outside-the-allowlist-is-schema-rejected",
|
|
43434
|
+
"citations": [
|
|
43435
|
+
{
|
|
43436
|
+
"section": "frontend-plugin-packs.md",
|
|
43437
|
+
"requirement": "a method outside the ui-plugin/1 allowlist MUST NOT validate"
|
|
43438
|
+
}
|
|
43439
|
+
]
|
|
43440
|
+
},
|
|
43441
|
+
{
|
|
43442
|
+
"id": "openwop.it.frontend-plugin-schemas.a-message-without-the-ui-plugin-1-protocol-tag-is-rejected",
|
|
43443
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43444
|
+
"line": 173,
|
|
43445
|
+
"title": "a message without the ui-plugin/1 protocol tag is rejected",
|
|
43446
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.a-message-without-the-ui-plugin-1-protocol-tag-is-rejected",
|
|
43447
|
+
"citations": [
|
|
43448
|
+
{
|
|
43449
|
+
"section": "frontend-plugin-packs.md",
|
|
43450
|
+
"requirement": "a host MUST ignore messages whose ui-plugin tag it does not recognize"
|
|
43451
|
+
}
|
|
43452
|
+
]
|
|
43453
|
+
},
|
|
43454
|
+
{
|
|
43455
|
+
"id": "openwop.it.frontend-plugin-schemas.no-credential-bearing-field-is-admitted-on-the-envelope-frontend-plugin-no-byok",
|
|
43456
|
+
"file": "frontend-plugin-schemas.test.ts",
|
|
43457
|
+
"line": 179,
|
|
43458
|
+
"title": "no credential-bearing field is admitted on the envelope (frontend-plugin-no-byok)",
|
|
43459
|
+
"explicitId": "openwop.it.frontend-plugin-schemas.no-credential-bearing-field-is-admitted-on-the-envelope-frontend-plugin-no-byok",
|
|
43460
|
+
"citations": [
|
|
43461
|
+
{
|
|
43462
|
+
"section": "frontend-plugin-packs.md",
|
|
43463
|
+
"requirement": null,
|
|
43464
|
+
"interpolated": true
|
|
43465
|
+
}
|
|
43466
|
+
]
|
|
43467
|
+
},
|
|
43447
43468
|
{
|
|
43448
43469
|
"id": "openwop.it.locale-key-grammar.extended-bcp-47-keys-validate-at-every-locale-site-v1-and-v2",
|
|
43449
43470
|
"file": "locale-key-grammar.test.ts",
|