@openwop/openwop-conformance 2.45.15 → 2.45.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +2 -2
  3. package/dist/spec-artifacts.lock.json +2 -2
  4. package/package.json +2 -2
  5. package/requirements.json +1281 -4
  6. package/scenario-majors.json +101 -2
  7. package/schemas/CORPUS-STAMP.json +13 -13
  8. package/src/lib/artifact-schema-url-witness.ts +83 -0
  9. package/src/lib/dispatch-witness.ts +212 -0
  10. package/src/lib/family-advert-witness.ts +204 -5
  11. package/src/lib/fixture-run-observer.ts +97 -0
  12. package/src/lib/provider-usage-witness.ts +63 -0
  13. package/src/lib/run-graph-double.ts +144 -0
  14. package/src/lib/subworkflow-witness.ts +192 -0
  15. package/src/scenarios/v2-agent-runtime-advertisement.test.ts +51 -0
  16. package/src/scenarios/v2-ai-envelope-advertisement.test.ts +43 -0
  17. package/src/scenarios/v2-artifact-created-static.test.ts +92 -0
  18. package/src/scenarios/v2-artifact-type-schema-url.test.ts +44 -0
  19. package/src/scenarios/v2-artifact-types-advertisement.test.ts +64 -0
  20. package/src/scenarios/v2-authorization-advertisement.test.ts +66 -0
  21. package/src/scenarios/v2-channel-presence-advertisement.test.ts +41 -0
  22. package/src/scenarios/v2-conversation-turn-model-provenance-advertisement.test.ts +41 -0
  23. package/src/scenarios/v2-conversation-turn-model-provenance.test.ts +110 -0
  24. package/src/scenarios/v2-credentials-advertisement.test.ts +66 -0
  25. package/src/scenarios/v2-data-residency-admission.test.ts +98 -0
  26. package/src/scenarios/v2-data-residency-advertisement.test.ts +52 -0
  27. package/src/scenarios/v2-dead-letter-advertisement.test.ts +54 -0
  28. package/src/scenarios/v2-dispatch-input-mapping.test.ts +70 -0
  29. package/src/scenarios/v2-dispatch-loop.test.ts +80 -0
  30. package/src/scenarios/v2-envelope-contracts-advertisement.test.ts +40 -0
  31. package/src/scenarios/v2-export-bundle-static.test.ts +108 -0
  32. package/src/scenarios/v2-multi-party-conversation-advertisement.test.ts +52 -0
  33. package/src/scenarios/v2-node-pack-runtimes-advertisement.test.ts +52 -0
  34. package/src/scenarios/v2-nondeterminism-policy-advertisement.test.ts +41 -0
  35. package/src/scenarios/v2-portability-advertisement.test.ts +63 -0
  36. package/src/scenarios/v2-prompt-library-advertisement.test.ts +40 -0
  37. package/src/scenarios/v2-provider-usage-advertisement.test.ts +61 -0
  38. package/src/scenarios/v2-provider-usage-emission.test.ts +50 -0
  39. package/src/scenarios/v2-provider-usage-payload-static.test.ts +92 -0
  40. package/src/scenarios/v2-purpose-propagation-advertisement.test.ts +52 -0
  41. package/src/scenarios/v2-scheduling-advertisement.test.ts +55 -0
  42. package/src/scenarios/v2-self-hosted-runner-advertisement.test.ts +52 -0
  43. package/src/scenarios/v2-self-hosted-runner-frames-static.test.ts +121 -0
  44. package/src/scenarios/v2-sub-workflow-advertisement.test.ts +53 -0
  45. package/src/scenarios/v2-subworkflow-input-mapping.test.ts +74 -0
  46. package/src/scenarios/v2-subworkflow-linkage.test.ts +76 -0
  47. package/src/scenarios/v2-ui-plugins-advertisement.test.ts +85 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # `@openwop/openwop-conformance` Changelog
2
2
 
3
+ ## [2.45.16] — 2026-10-04 — witness waves 2 and 3: every core family gains a major-2 witness
4
+
5
+ - **Advertisement witnesses** for ten families: `selfHostedRunner`, `credentials`, `authorization`, `providerUsage`, `subWorkflow`, `scheduling`, `artifactTypes`, `aiEnvelope`, `deadLetter` and `portability`. Each validates its v2 record plus the facet checks the v2 prose states. No `supported` leg is ported: presence is the claim (capabilities.md:50).
6
+ - **Static twins:** runner frames, the `providerUsage` payload (no `provider_usage_credential_leak`, which isn't a v2 code), the export bundle (v2 flips `bundleVersion` to `"2"`) and `artifactCreated` / `registrationSource`.
7
+ - **New unaided witness, `v2-artifact-type-schema-url`.** `artifact-type-packs.md` requires `{HostBase}/schemas/artifacts/{id}.schema.json` for every host-registered type. No v1 scenario tested it.
8
+ - **Fixture ports:**
9
+ - `v2-subworkflow-linkage`, on v2's replacement linkage: `node.completed` carries `childRunId`/`childStatus`, and ancestry gives `cause: core.subWorkflow`. The v1 `parentRunId` leg was retired by C4.18.
10
+ - `v2-subworkflow-input-mapping`, `v2-dispatch-input-mapping`, `v2-dispatch-loop`, `v2-provider-usage-emission`.
11
+ - **Not ported, by ruling:**
12
+ - every v1 `supported` leg;
13
+ - `scheduling.maxFutureHorizon`'s ISO format (not a v2 rule);
14
+ - the `approvalGate` override reason (prose says MAY);
15
+ - the `aiEnvelope` universal-kind listing ("need not be listed" at v2);
16
+ - every seam-only leg.
17
+ - `deadLetter` retry exhaustion is deferred: it needs a fixture and a ruling.
18
+ - **No observation path ⇒ `inapplicable`, never `blocked`.** A dispatched child the host doesn't expose is `inapplicable`, since no v2 rule requires exposure; `blocked` would have denied certification on an unstated rule.
19
+ - **Corpus fix:** `schemas/v2/orchestrator-decision.schema.json` now declares a root `additionalProperties: true` instead of `false`. With no root `properties`, `false` rejected every decision; each `oneOf` branch stays closed. Coverage after wave 2: 62 v2-witnessed, 8 v1-only, 3 unwitnessed (of 73).
20
+ - **Wave 3 — the 11 families no host serves at v2.**
21
+ - An advertisement scenario each: `dataResidency`, `multiPartyConversation`, `nodePackRuntimes`, `uiPlugins`, `purposePropagation`, `agentRuntime` (implies `agents.manifestRuntime`), and record-only `conversationTurnModelProvenance`, `channelPresence`, `nondeterminismPolicy`, `promptLibrary`, `envelopeContracts`.
22
+ - `v2-data-residency-admission`: an unadvertised region answers `422 residency_unavailable` and creates no run; an advertised one answers `201`.
23
+ - `v2-conversation-turn-model-provenance`: a host that stamps `agent.model` advertises the family, and the stamp is closed.
24
+ - Two schema widenings: a `participants` seat on `conversationOpened`, and `agent.model` on the `ConversationTurn` mirror. The `v2-conversation-payload-mirrors` coherence test fails if either mirror drifts again.
25
+ - Owed (TODO §8): the multi-party roster legs and the WASM fixture-pack legs, plus an observation path for the four `uiPlugins` invariants.
26
+ - **Coverage:** 73 of 73 core families v2-witnessed (from 52/18/3 at 2.45.15).
27
+ - **Proof:** about 160 self-test cases, plus the scenario files against standalone doubles.
28
+
3
29
  ## [2.45.15] — 2026-10-04 — witness wave 1: six v1-only families gain major-2 witnesses
4
30
 
5
31
  - **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.
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 615 scenario files under `src/scenarios/`.
138
+ The current suite has 648 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: 615 scenario files. Use [`coverage.md`](./coverage.md) for current grade/gap tracking.
485
+ Current source tree: 648 scenario files. Use [`coverage.md`](./coverage.md) for current grade/gap tracking.
486
486
 
487
487
  ## Remaining Gaps
488
488
 
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "package": "@openwop/spec-artifacts",
3
- "version": "2.45.15",
4
- "stampSha256": "32194f1c19b3b91d3ca09e360c8469d7c52eb1c94c814dea87d6910af61b0ca1"
3
+ "version": "2.45.16",
4
+ "stampSha256": "c610c19acb41b926293269611f14cb30b5fcf60565f5d64d22e06dcbf1631e89"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openwop/openwop-conformance",
3
- "version": "2.45.15",
3
+ "version": "2.45.16",
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.15"
59
+ "@openwop/spec-artifacts": "2.45.16"
60
60
  }
61
61
  }