@openwop/openwop-conformance 2.45.13 → 2.45.15
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 +24 -0
- package/README.md +2 -2
- package/dist/spec-artifacts.lock.json +2 -2
- package/package.json +2 -2
- package/requirements.json +1446 -4
- package/scenario-majors.json +65 -2
- package/schemas/CORPUS-STAMP.json +14 -12
- package/src/lib/backpressure-witness.ts +2 -2
- package/src/lib/budget-witness.ts +3 -3
- package/src/lib/envelope-schema-static.ts +166 -0
- package/src/lib/exhaustion-facet-witness.ts +1 -1
- package/src/lib/family-advert-witness.ts +212 -0
- package/src/lib/i18n-double.ts +99 -0
- package/src/lib/i18n-negotiation-witness.ts +173 -0
- package/src/lib/localized-content-witness.ts +49 -0
- package/src/lib/model-capability-insufficient-witness.ts +121 -0
- package/src/lib/prompt-double.ts +217 -0
- package/src/lib/prompt-events-witness.ts +211 -0
- package/src/lib/prompt-library-witness.ts +406 -0
- package/src/lib/run-bounds-witness.ts +111 -0
- package/src/lib/scratch-host.ts +4 -1
- package/src/lib/table-schema-witness.ts +3 -1
- package/src/scenarios/v2-ai-envelope-shape-static.test.ts +93 -0
- package/src/scenarios/v2-ai-providers-advertisement.test.ts +94 -0
- package/src/scenarios/v2-envelope-reasoning-shape.test.ts +81 -0
- package/src/scenarios/v2-envelope-tier-one-subset-static.test.ts +77 -0
- package/src/scenarios/v2-envelope-variant-discriminator-static.test.ts +57 -0
- package/src/scenarios/v2-envelopes-advertisement.test.ts +85 -0
- package/src/scenarios/v2-i18n-negotiation.test.ts +91 -0
- package/src/scenarios/v2-limits-envelope-caps-advertisement.test.ts +61 -0
- package/src/scenarios/v2-localized-content-delivery.test.ts +136 -0
- package/src/scenarios/v2-media-inline-cap-static.test.ts +59 -0
- package/src/scenarios/v2-model-capabilities-advertisement.test.ts +61 -0
- package/src/scenarios/v2-model-capability-insufficient.test.ts +63 -0
- package/src/scenarios/v2-prompt-all-four-kinds-events.test.ts +69 -0
- package/src/scenarios/v2-prompt-end-to-end-events.test.ts +71 -0
- package/src/scenarios/v2-prompt-list-and-fetch.test.ts +103 -0
- package/src/scenarios/v2-prompt-mutable-lifecycle.test.ts +130 -0
- package/src/scenarios/v2-prompt-pack-install.test.ts +78 -0
- package/src/scenarios/v2-prompt-render-deterministic.test.ts +87 -0
- package/src/scenarios/v2-prompt-resolution-chain-event.test.ts +46 -0
- package/src/scenarios/v2-prompt-template-shape.test.ts +112 -0
- package/src/scenarios/v2-run-execution-bounds.test.ts +67 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# `@openwop/openwop-conformance` Changelog
|
|
2
2
|
|
|
3
|
+
## [2.45.15] — 2026-10-04 — witness wave 1: six v1-only families gain major-2 witnesses
|
|
4
|
+
|
|
5
|
+
- **Why.** v1 end-of-support was 2026-10-04 (RFC 0234), and openwop-app has retired `/v1`, so it emits no more major-1 bundles. 24 core families were witnessed only by major-1 scenarios. This wave ports the six that production hosts serve at v2. Each port follows the per-major pattern: a profile-aware witness lib whose legs observe and return findings, a thin `v2-*` scenario, and a self-test against a scratch double.
|
|
6
|
+
- **Normative wire, unaided:**
|
|
7
|
+
- `v2-i18n-negotiation`;
|
|
8
|
+
- `v2-prompt-list-and-fetch`, `v2-prompt-mutable-lifecycle`, `v2-prompt-render-deterministic`, `v2-prompt-pack-install`;
|
|
9
|
+
- the live leg of `v2-localized-content-delivery`;
|
|
10
|
+
- the advertisement witnesses `v2-envelopes-advertisement`, `v2-limits-envelope-caps-advertisement`, `v2-model-capabilities-advertisement`, `v2-ai-providers-advertisement`;
|
|
11
|
+
- `v2-run-execution-bounds`. It is new at v2, and an out-of-range `runTimeoutMs` is refused `400` unaided.
|
|
12
|
+
- **Static twins over `schemas/v2`:** `v2-prompt-template-shape`, `v2-envelope-reasoning-shape`, `v2-envelope-tier-one-subset-static`, `v2-envelope-variant-discriminator-static`, `v2-ai-envelope-shape-static`, `v2-media-inline-cap-static`, and the localized-content schema legs.
|
|
13
|
+
- **Fixture ports through `POST /runs` with v2 event names:** `v2-prompt-all-four-kinds-events`, `v2-prompt-end-to-end-events`, `v2-prompt-resolution-chain-event`, the run-duration breach leg, and `v2-model-capability-insufficient`.
|
|
14
|
+
- **Not ported, by ruling:**
|
|
15
|
+
- Seam-only legs: prompt compose and resolve, voice and speech, `ai/call*`, `envelope/accept`, the envelope runtime, the model-capability gate, node-catalog and debug-bundle. There's no v2 seam and no normative path; see TODO.
|
|
16
|
+
- The `authModes` and `byok` map rules, retired by migration C2.11.
|
|
17
|
+
- The two prompt workspace-membership scenarios. They have no v2 wire seat, because workspace comes from identity at v2.
|
|
18
|
+
- **Every leg rests on a stated rule.** A proposed `authModes` vocabulary leg was dropped: the prose's only MUSTs bind clients, and v2's schema has no enum, so it would have failed openwop-app (`"api-key"`) on an unstated rule.
|
|
19
|
+
- **Fix to existing witnesses:** `budget-`, `backpressure-`, `exhaustion-facet-` and `table-schema-witness` address v2 runs with the `~` bound-id projection (`profile.idSegment`) instead of `%2F`, and the scratch double accepts both. Only `run-secrets-witness` keeps `%2F` (live-proven; follow-up).
|
|
20
|
+
- **Proof:** about 200 self-test cases across the new witness libs, each defect failing only its own leg.
|
|
21
|
+
|
|
22
|
+
## [2.45.14] — 2026-10-04 — v1 end-of-support is 2026-10-04 (RFC 0234)
|
|
23
|
+
|
|
24
|
+
- **The 2.45.14 cycle opens.** RFC 0234 amends `overview.md` §v1 end-of-support and `versioning.md` §5, adds `spec/v2/eos-override.json` and `spec/v1/end-of-support.json`, and its gap register changes the packed `spec/v1/gaps.json`.
|
|
25
|
+
- **`v2-eos-clock` gains three tests:** an override that does not meet (c) is refused; a frozen old-major tree satisfies a passed date and a marker naming another date does not; an RFC file is never a failing old-major source. `check-removal-dates.mjs` and `generate-v1-eos-clock.mjs` gain the matching logic and env overrides.
|
|
26
|
+
|
|
3
27
|
## [2.45.13] — 2026-10-04 — RFC 0230, 0232 and 0233 Accepted
|
|
4
28
|
|
|
5
29
|
- **The 2.45.13 cycle opens.** Closing RFC 0232 G3 and RFC 0233 G3 changes the packed `spec/v1/gaps.json`. No scenario changes.
|
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 615 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: 615 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.15",
|
|
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.15"
|
|
60
60
|
}
|
|
61
61
|
}
|