@openwop/openwop-conformance 2.45.17 → 2.45.19
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 +14 -0
- package/README.md +2 -2
- package/dist/spec-artifacts.lock.json +2 -2
- package/package.json +2 -2
- package/requirements.json +772 -667
- package/scenario-majors.json +2 -23
- package/schemas/CORPUS-STAMP.json +30 -30
- package/src/lib/envelope-schema-static.ts +3 -2
- package/src/lib/if-none-match-witness.ts +139 -0
- package/src/scenarios/otel-emission-grpc.test.ts +1 -1
- package/src/scenarios/v2-artifact-types-advertisement.test.ts +1 -1
- package/src/scenarios/v2-bound-id-path-projection.test.ts +35 -0
- package/src/scenarios/v2-discovery-etag.test.ts +43 -7
- package/src/scenarios/v2-envelope-tier-one-subset-static.test.ts +7 -20
- package/src/scenarios/v2-portability-advertisement.test.ts +1 -1
- package/src/scenarios/v2-provider-usage-advertisement.test.ts +1 -1
- package/src/scenarios/v2-run-snapshot-etag.test.ts +83 -2
- package/src/scenarios/v2-self-hosted-runner-advertisement.test.ts +1 -1
- package/src/scenarios/v2-ai-envelope-shape-static.test.ts +0 -93
- package/src/scenarios/v2-artifact-created-static.test.ts +0 -92
- package/src/scenarios/v2-envelope-variant-discriminator-static.test.ts +0 -57
- package/src/scenarios/v2-export-bundle-static.test.ts +0 -108
- package/src/scenarios/v2-media-inline-cap-static.test.ts +0 -59
- package/src/scenarios/v2-provider-usage-payload-static.test.ts +0 -92
- package/src/scenarios/v2-self-hosted-runner-frames-static.test.ts +0 -121
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# `@openwop/openwop-conformance` Changelog
|
|
2
2
|
|
|
3
|
+
## [2.45.19] — 2026-10-05 — a minted tenant-bound id carries no `~`; RFC 0235's registers close
|
|
4
|
+
|
|
5
|
+
- **New leg `openwop.requirement.0184.mint-no-tilde`** in `v2-bound-id-path-projection`. RFC 0184 §A.2: a host MUST NOT mint a tenant-bound id containing `~`. Only the run this leg creates is checked, because ids minted earlier MUST still resolve.
|
|
6
|
+
- **It bites only under a non-clean tenant.** openwop-app minted `user~3A<hash>/<id>` for personal and org tenants (app ADR 0814). No leg saw it, because the suite's key sat in the clean tenant `default`. On a clean tenant the defect still mints a clean id.
|
|
7
|
+
- **RFC 0235 registers closed (packed `spec/v1/gaps.json`).** Gaps G1 (the v2 reference host's byte-exact comparison) and G2 (no certified witness) close on that host's certified 2.45.18 cut. No scenario changes.
|
|
8
|
+
|
|
9
|
+
## [2.45.18] — 2026-10-04 — `If-None-Match` per RFC 9110 (RFC 0235); corpus-only legs leave the host bundle; `.supported` leaves the v2 schemas
|
|
10
|
+
|
|
11
|
+
- **Seven `v2-*-static` scenarios move to `src/coherence/`.** They read only the corpus, and `conformance.md` §Two products says such a check MUST NOT appear in a host bundle. The bundle schema now excludes their ids.
|
|
12
|
+
- **`v2-envelope-tier-one-subset-static` is split.** The universal-kind walk moves to the corpus gate `v2-envelope-tier-one-universal-static`; the scenario keeps the strict leg, which reads the host's advertised kinds.
|
|
13
|
+
- **No `X.supported` in a v2 schema description.** About 38 descriptions across 15 schemas named a `supported` flag that v2 does not have (`capabilities.md` §2: presence is the claim). They now say "advertises `X`". No rule changed.
|
|
14
|
+
- **RFC 0235: `If-None-Match` is evaluated as RFC 9110 defines it.** `v2-discovery-etag` and `v2-run-snapshot-etag` gain legs over one shared library (`lib/if-none-match-witness.ts`): a weak tag, a list holding the tag and `*` get `304` while other tags get `200` (`rfc9110-match`); every `304` carries the `ETag` and the `200`'s `Vary` (`304-carries-etag`); `Cache-Control: no-cache` does not suppress evaluation (`no-cache-ignored`); and on the snapshot, `*` or a minted tag on a run id that does not exist gets the unconditional status, never `304` (`only-on-2xx`). Proof: a self-test double turns on one defect at a time (byte-exact, no list, no `*`, strong-only, no `ETag` or `Vary` on the `304`, `no-cache` skipping, always-`304`, `*` before the readability check), and the v2 reference host fails `rfc9110-match` before openwop-examples #152 and passes all ten legs after it. Node's fetch adds `Cache-Control: no-cache` to every conditional request, so a host that skips evaluation on it fails every 304 leg.
|
|
15
|
+
- **Comment and citation fixes.** The two 304 scenarios no longer blame the client spelling (the cause was a CDN edge). `otel-emission-grpc` no longer cites RFC 0008, which made the coverage report attribute it to `nodePackRuntimes`.
|
|
16
|
+
|
|
3
17
|
## [2.45.17] — 2026-10-04 — ETag rules: discovery's 304 gains a major-2 witness, the prompt-template 304 becomes advisory
|
|
4
18
|
|
|
5
19
|
- **New `v2-discovery-etag`.** `capabilities.md` §1 makes both halves MUSTs at v2: emit an `ETag` on the discovery document, and answer a matching `If-None-Match` with `304` (no body, `OpenWOP-Version` present; a non-matching one gets `200`). The only witness was the v1 `discovery.test.ts` leg, so nothing checked it at major 2. openwop-app's public origin answers `200` because the hosting rewrite drops `If-None-Match` (direct to the origin: `304`), and its 2.45.16 cut certified anyway.
|
package/README.md
CHANGED
|
@@ -135,7 +135,7 @@ Exit code is non-zero on any failed assertion. `--certify` distinguishes: `0`
|
|
|
135
135
|
|
|
136
136
|
## What's Covered
|
|
137
137
|
|
|
138
|
-
The current suite has
|
|
138
|
+
The current suite has 642 scenario files under `src/scenarios/`.
|
|
139
139
|
- 2026-09-29 (suite 2.45.0, openwop#1763): NEW `v2-cors-preflight.test.ts` — `headers.md` §Cross-origin preflight. For every operation it preflights with `Origin`, the method, and the operation's declared request headers (plus `authorization` / `content-type` where they apply, from `spec/v2/path-manifest.json`), and reads the answer as the Fetch standard's CORS-preflight check does. Self-gated: `inapplicable` when no operation's preflight grants `OPENWOP_CORS_ORIGIN` (default `https://conformance.invalid`).
|
|
140
140
|
- 2026-09-23 (suite 2.37.0 cycle, RFC 0213): NEW `v2-sse-last-event-id-cursor.test.ts` (a `Last-Event-ID` past the log is an exclusive cursor; a malformed id, when refused, is `400 validation_error`; the cursor never changes the answer for an unknown or foreign-tenant run — public test of `event-cursor-after-authorization`), `v2-idempotency-in-flight.test.ts` (five concurrent same-key creates yield one run; each loser is a marked replay or `409 idempotency_in_flight` with no retry timing in `details`; `partial-witness` when no loser was refused in flight) and `v2-interrupt-resolve-terminal.test.ts` (a run-scoped resolve after cancel or completion is `409 interrupt_already_resolved`, never `interrupt_cancelled`). All three sit off the core-standard floor until measured on the three bundle hosts.
|
|
141
141
|
- 2026-09-03 (suite `1.157.0 -> 1.158.0`, gap G17): NEW `idempotency-concurrent-claim.test.ts` — drives the new `host-sample-test-seams.md` §25 concurrent duplicate-delivery seam for the RFC 0150 §B / `idempotency.md` §"Concurrent duplicates (Layer 2)" atomic-claim MUST, which is unconditional and had no witness of any kind. Asserts every executor mints the SAME `logicalInvocationId` **before** asserting `delivered === 1` — without the identity check a host passes by minting different ids and never colliding, one effect because nothing raced. Not profile-gated and so not opt-out-able (the obligation is unconditional); an unmounted seam records `blocked`, which is not certifiable. Graduates `layer2-invocation-claim-atomic` reference-impl -> protocol.
|
|
@@ -482,7 +482,7 @@ Server-required (added in 1.7.0):
|
|
|
482
482
|
| ------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
483
483
|
| **Redaction** | [`capabilities.md`](../spec/v1/capabilities.md) §"Secrets" + NFR-7 + §"aiProviders" | Vendor-neutral assertions that the server doesn't leak secret material. Three scenario groups: (a) discovery shape contract — `secrets` + `aiProviders` advertisements are well-formed regardless of `secrets.supported`; when `supported === true`, scopes MUST be non-empty + `resolution === 'host-managed'`; `byok ⊆ supported`. (b) bearer-token redaction — invalid Bearer canary in `Authorization` header is not echoed in the 401 response body. (c) credentialRef echo control — gated on `secrets.supported === true`; canary planted in `configurable.ai.credentialRef` MUST NOT appear in any RunEvent payload (poll-based capture; transport-agnostic). Uses runtime-built canary fixtures (`lib/canaries.ts`) that defeat static secret scanners. 6 scenarios. |
|
|
484
484
|
|
|
485
|
-
Current source tree:
|
|
485
|
+
Current source tree: 642 scenario files. Use [`coverage.md`](./coverage.md) for current grade/gap tracking.
|
|
486
486
|
|
|
487
487
|
## Remaining Gaps
|
|
488
488
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openwop/openwop-conformance",
|
|
3
|
-
"version": "2.45.
|
|
3
|
+
"version": "2.45.19",
|
|
4
4
|
"description": "Production-ready black-box conformance suite for OpenWOP v1.0 compliant servers.",
|
|
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.19"
|
|
60
60
|
}
|
|
61
61
|
}
|