@openwop/openwop-conformance 2.45.0 → 2.45.2

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 (64) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/spec-artifacts.lock.json +2 -2
  3. package/package.json +2 -2
  4. package/requirements.json +138 -133
  5. package/schemas/CORPUS-STAMP.json +10 -10
  6. package/src/lib/run-list-walk.ts +65 -0
  7. package/src/scenarios/agentConfidenceEscalation.test.ts +8 -1
  8. package/src/scenarios/agentMemoryCrossTenantIsolation.test.ts +8 -1
  9. package/src/scenarios/agentMemoryRedactionContract.test.ts +8 -1
  10. package/src/scenarios/agentMemoryRoundTrip.test.ts +8 -1
  11. package/src/scenarios/agentMemoryTtlExpiry.test.ts +8 -1
  12. package/src/scenarios/agentMessageReducer.test.ts +8 -1
  13. package/src/scenarios/agentMetadata.test.ts +8 -1
  14. package/src/scenarios/agentPackCatalog.test.ts +13 -5
  15. package/src/scenarios/agentPackExport.test.ts +8 -2
  16. package/src/scenarios/agentPackHandoffSchemaValidation.test.ts +17 -2
  17. package/src/scenarios/agentPackInstall.test.ts +8 -2
  18. package/src/scenarios/agentPackProvenance.test.ts +8 -1
  19. package/src/scenarios/agentReasoningEvents.test.ts +9 -1
  20. package/src/scenarios/agentReasoningStreaming.test.ts +14 -1
  21. package/src/scenarios/append-ordering.test.ts +7 -2
  22. package/src/scenarios/bulk-cancel.test.ts +11 -1
  23. package/src/scenarios/cap-breach.test.ts +8 -1
  24. package/src/scenarios/channel-ttl.test.ts +7 -1
  25. package/src/scenarios/conversationCapabilityNegotiation.test.ts +8 -1
  26. package/src/scenarios/conversationLifecycle.test.ts +8 -1
  27. package/src/scenarios/conversationReplayDeterminism.test.ts +8 -2
  28. package/src/scenarios/conversationVsLegacySuspend.test.ts +8 -1
  29. package/src/scenarios/cost-attribution.test.ts +17 -4
  30. package/src/scenarios/debugBundle.test.ts +16 -5
  31. package/src/scenarios/dispatch-cross-worker-handoff.test.ts +10 -2
  32. package/src/scenarios/dispatch-output-mapping.test.ts +20 -4
  33. package/src/scenarios/dispatchLoop.test.ts +7 -1
  34. package/src/scenarios/durability-poison-exhaustion.test.ts +7 -2
  35. package/src/scenarios/highConcurrency.test.ts +11 -1
  36. package/src/scenarios/host-callback-declaration.test.ts +10 -1
  37. package/src/scenarios/identity-passthrough.test.ts +7 -1
  38. package/src/scenarios/interrupt-approval.test.ts +25 -5
  39. package/src/scenarios/interrupt-auth-required-resume.test.ts +9 -3
  40. package/src/scenarios/interrupt-external-event-correlation.test.ts +9 -2
  41. package/src/scenarios/interrupt-parent-child-cascade.test.ts +10 -2
  42. package/src/scenarios/interrupt-quorum-resolution.test.ts +9 -2
  43. package/src/scenarios/interrupt-token-matrix.test.ts +11 -3
  44. package/src/scenarios/interruptRace.test.ts +13 -3
  45. package/src/scenarios/multi-agent-confidence-escalation.test.ts +14 -3
  46. package/src/scenarios/multi-agent-handoff-state-machine.test.ts +15 -3
  47. package/src/scenarios/multi-node-ordering.test.ts +7 -1
  48. package/src/scenarios/node-failed-payload-shape.test.ts +7 -1
  49. package/src/scenarios/orchestratorConservativePath.test.ts +8 -1
  50. package/src/scenarios/orchestratorDispatch.test.ts +9 -1
  51. package/src/scenarios/orchestratorTermination.test.ts +8 -1
  52. package/src/scenarios/owner-subject-echo.test.ts +9 -2
  53. package/src/scenarios/pause-resume.test.ts +19 -8
  54. package/src/scenarios/prompt-all-four-kinds-events.test.ts +9 -2
  55. package/src/scenarios/prompt-end-to-end-events.test.ts +10 -2
  56. package/src/scenarios/replay-fork-arbitrary.test.ts +11 -4
  57. package/src/scenarios/restart-during-run.test.ts +7 -1
  58. package/src/scenarios/secret-leakage-otel-attribute.test.ts +14 -5
  59. package/src/scenarios/stream-text-fixture.test.ts +8 -2
  60. package/src/scenarios/streamReconnect.test.ts +8 -2
  61. package/src/scenarios/subworkflow.test.ts +9 -1
  62. package/src/scenarios/v2-error-registry.test.ts +7 -10
  63. package/src/scenarios/v2-run-list.test.ts +14 -16
  64. package/src/scenarios/version-fold.test.ts +8 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # `@openwop/openwop-conformance` Changelog
2
2
 
3
+ ## [2.45.2] — 2026-09-30 — a run-failure code must be registered or a vendor code (no longer advisory)
4
+
5
+ - **`errors.event-code-registered` is required** (#1698). The leg in `v2-error-registry` shipped ADVISORY in 2.43.1: an unregistered, non-vendor code on `run.failed`, `node.failed` or the snapshot's `error` recorded a partial witness naming the codes, while hosts remapped. That branch is removed, so such a code now fails the row, which names each `where=code`.
6
+ - **Evidence.** All three hosts' latest certified bundles record it as a clean `executed-pass` (2 assertions, no partial-witness detail), each verified under the key its host serves:
7
+ - the v2 reference host at 2.44.6 (witness `188a23d56886`);
8
+ - MyndHyve at 2.44.3 (`58da9407e616`);
9
+ - openwop-app at 2.44.5 (build `ab77c3aa`, `cb16716e1be6`).
10
+ - **Negative control.** A stub host whose failed run carries `totally_unregistered_code` passed the advisory leg and now fails it. A vendor code (`example.conformance_failure`) still passes.
11
+ - **Ids.** The title drops "(advisory in 2.43.1)". The per-`it` id is unchanged, since the slug is capped before those words.
12
+
13
+ ## [2.45.1] — 2026-09-29 — the run-list legs stop walking once they find their runs, and no scenario skips every test at describe level
14
+
15
+ - **No scenario file skips every test at describe level any more, and the guard is a hard rule** (patch; no requirement added or removed; the gates are identical, and only their placement moves).
16
+ - **Background.** `describe-level-skip.test.ts` (2.44.9, #1686) ratcheted 56 non-floor files in which every test sat under `describe.skipIf`. vitest runs no setup hook for such a file, so it recorded no disposition when its gate held, and the runner resolved it to a report-derived `blocked` naming no reason.
17
+ - **The conversion.** Each file now un-gates its `describe`s and opens every test with `if (GATE) return softSkip(...GATE_WHY)`, done by an AST codemod over the unchanged predicates. `GATE_WHY` is a module constant naming the RFC 0148 §A disposition, checked in this order:
18
+ - `inapplicable` for a capability the host does not advertise (`isAgentSupported()`, `hasLongTermMemory()`, `isConversationPrimitiveSupported()`, `isOrchestratorSupported()`, reasoning verbosity `off`, and the like), and for no target or a published package without the scenario sources;
19
+ - `skipped` for an operator opt-in that is not set (`OPENWOP_RUN_RESTART_DURING_RUN`, `OPENWOP_SKIP_SCALE_PRODUCTION`);
20
+ - `blocked` for a withheld fixture, naming it.
21
+
22
+ A capability that is absent wins over a missing fixture, because then the requirement does not apply at all. `durability-poison-exhaustion` keeps the `inapplicable` its module-scope record already gives a missing fixture. `agentPackHandoffSchemaValidation`'s nested `describe.skipIf(!hasHandoffValidation())` is converted too.
23
+ - **Measured.** Against a stub host that advertises no fixtures and no capabilities, with the ledger on: before, 4 of the 56 files wrote a row; after, all 56 do, and none carries the unclassified-return detail (31 `blocked`, 23 `inapplicable`, 1 `skipped`, and 1 `executed-pass` for the corpus check `host-callback-declaration`, which passes both before and after).
24
+ - **The guard.** The ratchet (ceiling 56) is replaced by a hard rule: no scenario file, floor or not, may skip every test at describe level. Adding such a file fails with the offender named.
25
+
26
+ - **`v2-run-list`: a bounded walk instead of a full-history walk** (patch; no requirement added or removed).
27
+ - **Defect.** `walk()` followed `nextCursor` to the end of the list or `MAX_PAGES` (50), although the list is newest first (`runs.md` §List) and the two runs the leg had just created sit on page 1. A long-lived host's conformance tenant gains hundreds of runs per cut, so the walk grew with the tenant's age. On openwop-app's b29427fef major-2 cut it outran the 30 s test timeout, and `0182.run-list.tenant-scoped` failed on the tenant's history, not on host behaviour.
28
+ - **Fix.** New pure helper `lib/run-list-walk.ts` (`walkRunList`). It stops once every created id is seen, then follows a two-page tail, so a host-minted cursor is still exercised. A created id that never appears within the 50-page cap fails the leg; it is never a silent pass.
29
+ - **Unchanged checks.** Every page walked is still validated against `run-list-response.schema.json`, checked against `maxPageSize`, and every id seen is checked for the caller's tenant (identity.md §5).
30
+ - **New check.** The unfiltered leg asserts newest-first: the second created run is listed before the first. The filtered leg uses the same walk.
31
+ - **Proof.**
32
+ - Server-free self-test `run-list-walk.test.ts` (6). Removing the early stop fails it (51 fetches, not 3), and so does dropping the tail.
33
+ - Measured on a stub host with 40 prior runs, 3 per page:
34
+ - created runs on page 1: pass.
35
+ - created runs on pages 3–4: pass (the walk finds them).
36
+ - one created run omitted: fail.
37
+ - another tenant's run interleaved: fail on the tenant check.
38
+ - created runs listed oldest first: fail on the new order check.
39
+
3
40
  ## [2.45.0] — 2026-09-29 — a host that grants an origin admits the contract's request headers in preflight
4
41
 
5
42
  - **New scenario `v2-cors-preflight`: `openwop.requirement.headers.cors-preflight-admits`** (#1763; minor, since a scenario is added). It witnesses the new `headers.md` §Cross-origin preflight (Class 3).
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "package": "@openwop/spec-artifacts",
3
- "version": "2.45.0",
4
- "stampSha256": "f4646a61110c8c6132dfc23c78868cdfaaa6e18cda1d8247fac0b123f29c693e"
3
+ "version": "2.45.2",
4
+ "stampSha256": "30b580360e19f8ecdc72c058e20bdca2ba5cd054b5c6b98145b4086871ac73de"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openwop/openwop-conformance",
3
- "version": "2.45.0",
3
+ "version": "2.45.2",
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.0"
59
+ "@openwop/spec-artifacts": "2.45.2"
60
60
  }
61
61
  }