@openwop/openwop-conformance 2.46.44 → 2.48.0

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/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": 751,
6
- "tests": 2888,
7
- "withStableId": 2888,
5
+ "files": 756,
6
+ "tests": 2911,
7
+ "withStableId": 2911,
8
8
  "interpolatedTitles": 0,
9
- "explicitIds": 2744
9
+ "explicitIds": 2755
10
10
  },
11
11
  "records": [
12
12
  {
@@ -29625,6 +29625,52 @@
29625
29625
  }
29626
29626
  ]
29627
29627
  },
29628
+ {
29629
+ "id": "openwop.it.v2-compensation-unwind.compensation-requested-precedes-the-first-compensation-started",
29630
+ "file": "v2-compensation-unwind.test.ts",
29631
+ "line": 162,
29632
+ "title": "compensation.requested precedes the first compensation.started",
29633
+ "explicitId": "openwop.requirement.0265.plan-before-inverse",
29634
+ "citations": []
29635
+ },
29636
+ {
29637
+ "id": "openwop.it.v2-compensation-unwind.the-projection-attempts-the-effect-nodes-in-the-reverse-of-their-forward-complet",
29638
+ "file": "v2-compensation-unwind.test.ts",
29639
+ "line": 170,
29640
+ "title": "the projection attempts the effect nodes in the reverse of their forward completion order",
29641
+ "explicitId": "openwop.requirement.0265.reverse-completion",
29642
+ "citations": []
29643
+ },
29644
+ {
29645
+ "id": "openwop.it.v2-compensation-unwind.the-effect-ledger-holds-exactly-one-inverse-record-per-forward-effect",
29646
+ "file": "v2-compensation-unwind.test.ts",
29647
+ "line": 185,
29648
+ "title": "the effect ledger holds exactly one inverse record per forward effect",
29649
+ "explicitId": "openwop.requirement.0265.inverse-once",
29650
+ "citations": []
29651
+ },
29652
+ {
29653
+ "id": "openwop.it.v2-compensation-unwind.the-projection-status-and-plan-agree-with-the-event-log",
29654
+ "file": "v2-compensation-unwind.test.ts",
29655
+ "line": 199,
29656
+ "title": "the projection status and plan agree with the event log",
29657
+ "explicitId": "openwop.requirement.0265.projection-agrees",
29658
+ "citations": []
29659
+ },
29660
+ {
29661
+ "id": "openwop.it.v2-compensation-unwind.a-replay-fork-of-the-unwound-run-performs-no-inverse-again",
29662
+ "file": "v2-compensation-unwind.test.ts",
29663
+ "line": 209,
29664
+ "title": "a replay fork of the unwound run performs no inverse again",
29665
+ "explicitId": "openwop.requirement.0265.replay-no-refire",
29666
+ "citations": [
29667
+ {
29668
+ "section": "replay.md §Suppression; invariant compensation-replay-no-refire (RFC 0265 §B.5)",
29669
+ "requirement": null,
29670
+ "interpolated": true
29671
+ }
29672
+ ]
29673
+ },
29628
29674
  {
29629
29675
  "id": "openwop.it.v2-configurable-closed.the-standalone-schema-rejects-a-dotted-key-and-an-unknown-root-key-and-accepts-t",
29630
29676
  "file": "v2-configurable-closed.test.ts",
@@ -37052,6 +37098,84 @@
37052
37098
  }
37053
37099
  ]
37054
37100
  },
37101
+ {
37102
+ "id": "openwop.it.v2-replay-llm-cache-key.the-effect-ledger-record-admits-cachekey-recipe-digest-and-refuses-anything-else",
37103
+ "file": "v2-replay-llm-cache-key.test.ts",
37104
+ "line": 102,
37105
+ "title": "the effect-ledger record admits cacheKey {recipe, digest} and refuses anything else",
37106
+ "explicitId": null,
37107
+ "citations": [
37108
+ {
37109
+ "section": "replay facet llmCacheKeyRecipe + effect-ledger-projection cacheKey (RFC 0260)",
37110
+ "requirement": "a record without cacheKey MUST validate (the facet is opt-in)"
37111
+ },
37112
+ {
37113
+ "section": "replay facet llmCacheKeyRecipe + effect-ledger-projection cacheKey (RFC 0260)",
37114
+ "requirement": "cacheKey {recipe: openwop-llm-key-2, digest: 64 hex} MUST validate"
37115
+ },
37116
+ {
37117
+ "section": "replay facet llmCacheKeyRecipe + effect-ledger-projection cacheKey (RFC 0260)",
37118
+ "requirement": "an unregistered recipe MUST fail"
37119
+ },
37120
+ {
37121
+ "section": "replay facet llmCacheKeyRecipe + effect-ledger-projection cacheKey (RFC 0260)",
37122
+ "requirement": "an uppercase or short digest MUST fail"
37123
+ },
37124
+ {
37125
+ "section": "replay facet llmCacheKeyRecipe + effect-ledger-projection cacheKey (RFC 0260)",
37126
+ "requirement": "digest is REQUIRED"
37127
+ },
37128
+ {
37129
+ "section": "replay facet llmCacheKeyRecipe + effect-ledger-projection cacheKey (RFC 0260)",
37130
+ "requirement": "cacheKey is closed: a preimage member MUST fail"
37131
+ }
37132
+ ]
37133
+ },
37134
+ {
37135
+ "id": "openwop.it.v2-replay-llm-cache-key.a-host-advertising-replay-llmcachekeyrecipe-also-advertises-idempotency",
37136
+ "file": "v2-replay-llm-cache-key.test.ts",
37137
+ "line": 117,
37138
+ "title": "a host advertising replay.llmCacheKeyRecipe also advertises idempotency",
37139
+ "explicitId": null,
37140
+ "citations": [
37141
+ {
37142
+ "section": "replay facet llmCacheKeyRecipe + effect-ledger-projection cacheKey (RFC 0260)",
37143
+ "requirement": "a host advertising replay.llmCacheKeyRecipe MUST advertise idempotency: the effect ledger is where the key is recorded"
37144
+ }
37145
+ ]
37146
+ },
37147
+ {
37148
+ "id": "openwop.it.v2-replay-llm-cache-key.the-provider-call-record-carries-cachekey-with-recipe-openwop-llm-key-2",
37149
+ "file": "v2-replay-llm-cache-key.test.ts",
37150
+ "line": 125,
37151
+ "title": "the provider-call record carries cacheKey with recipe openwop-llm-key-2",
37152
+ "explicitId": null,
37153
+ "citations": []
37154
+ },
37155
+ {
37156
+ "id": "openwop.it.v2-replay-llm-cache-key.two-runs-that-differ-only-in-maxtokens-have-different-keys",
37157
+ "file": "v2-replay-llm-cache-key.test.ts",
37158
+ "line": 133,
37159
+ "title": "two runs that differ only in maxTokens have different keys",
37160
+ "explicitId": null,
37161
+ "citations": []
37162
+ },
37163
+ {
37164
+ "id": "openwop.it.v2-replay-llm-cache-key.two-identical-runs-have-the-same-key",
37165
+ "file": "v2-replay-llm-cache-key.test.ts",
37166
+ "line": 143,
37167
+ "title": "two identical runs have the same key",
37168
+ "explicitId": null,
37169
+ "citations": []
37170
+ },
37171
+ {
37172
+ "id": "openwop.it.v2-replay-llm-cache-key.the-key-equals-recipe-2-recomputed-over-the-inputs-the-fixture-pins",
37173
+ "file": "v2-replay-llm-cache-key.test.ts",
37174
+ "line": 153,
37175
+ "title": "the key equals recipe 2 recomputed over the inputs the fixture pins",
37176
+ "explicitId": null,
37177
+ "citations": []
37178
+ },
37055
37179
  {
37056
37180
  "id": "openwop.it.v2-replay-suppression-ordinal.a-replay-fork-resolves-each-execution-of-a-looped-side-effecting-node-by-its-own",
37057
37181
  "file": "v2-replay-suppression-ordinal.test.ts",
@@ -38710,6 +38834,133 @@
38710
38834
  }
38711
38835
  ]
38712
38836
  },
38837
+ {
38838
+ "id": "openwop.it.v2-telemetry-export.the-telemetry-record-requires-otlp-protocols-from-the-closed-transports-genaisem",
38839
+ "file": "v2-telemetry-export.test.ts",
38840
+ "line": 102,
38841
+ "title": "the telemetry record requires otlp.protocols from the closed transports; genAiSemconv is semver",
38842
+ "explicitId": null,
38843
+ "citations": [
38844
+ {
38845
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38846
+ "requirement": "a record with otlp.protocols MUST validate"
38847
+ },
38848
+ {
38849
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38850
+ "requirement": "genAiSemconv as semver MUST validate"
38851
+ },
38852
+ {
38853
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38854
+ "requirement": "otlp is REQUIRED"
38855
+ },
38856
+ {
38857
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38858
+ "requirement": "protocols MUST be non-empty"
38859
+ },
38860
+ {
38861
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38862
+ "requirement": "an unknown transport MUST fail"
38863
+ },
38864
+ {
38865
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38866
+ "requirement": "a non-semver genAiSemconv MUST fail"
38867
+ }
38868
+ ]
38869
+ },
38870
+ {
38871
+ "id": "openwop.it.v2-telemetry-export.a-run-exports-an-openwop-run-span-with-its-run-and-workflow-ids",
38872
+ "file": "v2-telemetry-export.test.ts",
38873
+ "line": 115,
38874
+ "title": "a run exports an openwop.run span with its run and workflow ids",
38875
+ "explicitId": null,
38876
+ "citations": [
38877
+ {
38878
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38879
+ "requirement": "every run MUST produce a span named openwop.run carrying openwop.run_id"
38880
+ },
38881
+ {
38882
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38883
+ "requirement": "the run span MUST carry openwop.workflow_id"
38884
+ }
38885
+ ]
38886
+ },
38887
+ {
38888
+ "id": "openwop.it.v2-telemetry-export.each-node-execution-exports-an-openwop-node-typeid-span-with-its-node-attributes",
38889
+ "file": "v2-telemetry-export.test.ts",
38890
+ "line": 125,
38891
+ "title": "each node execution exports an openwop.node.<typeId> span with its node attributes",
38892
+ "explicitId": null,
38893
+ "citations": [
38894
+ {
38895
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38896
+ "requirement": "every node execution MUST produce a span named openwop.node.<typeId>"
38897
+ },
38898
+ {
38899
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38900
+ "requirement": "the node span MUST carry openwop.node_id"
38901
+ },
38902
+ {
38903
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38904
+ "requirement": "the node span MUST carry openwop.node_type, and its name MUST be openwop.node.<typeId>"
38905
+ },
38906
+ {
38907
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38908
+ "requirement": "openwop.node_attempt MUST be a non-negative integer"
38909
+ }
38910
+ ]
38911
+ },
38912
+ {
38913
+ "id": "openwop.it.v2-telemetry-export.a-run-created-with-a-traceparent-exports-its-spans-in-that-trace",
38914
+ "file": "v2-telemetry-export.test.ts",
38915
+ "line": 139,
38916
+ "title": "a run created with a traceparent exports its spans in that trace",
38917
+ "explicitId": null,
38918
+ "citations": [
38919
+ {
38920
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38921
+ "requirement": "a run created with a valid W3C traceparent MUST emit its spans in that trace"
38922
+ }
38923
+ ]
38924
+ },
38925
+ {
38926
+ "id": "openwop.it.v2-telemetry-export.no-exported-span-carries-the-resolved-store-secret",
38927
+ "file": "v2-telemetry-export.test.ts",
38928
+ "line": 149,
38929
+ "title": "no exported span carries the resolved store secret",
38930
+ "explicitId": null,
38931
+ "citations": [
38932
+ {
38933
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38934
+ "requirement": "a span name, attribute, event or resource attribute MUST NOT carry a resolved secret"
38935
+ }
38936
+ ]
38937
+ },
38938
+ {
38939
+ "id": "openwop.it.v2-telemetry-export.a-host-advertising-genaisemconv-puts-the-gen-ai-attributes-on-the-model-call-spa",
38940
+ "file": "v2-telemetry-export.test.ts",
38941
+ "line": 167,
38942
+ "title": "a host advertising genAiSemconv puts the gen_ai attributes on the model-call span",
38943
+ "explicitId": null,
38944
+ "citations": [
38945
+ {
38946
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38947
+ "requirement": null,
38948
+ "interpolated": true
38949
+ },
38950
+ {
38951
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38952
+ "requirement": "the model-call span MUST carry the provider attribute its version names"
38953
+ },
38954
+ {
38955
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38956
+ "requirement": "the model-call span MUST carry gen_ai.request.model"
38957
+ },
38958
+ {
38959
+ "section": "spec/v2/core/telemetry.md (RFC 0262)",
38960
+ "requirement": "the model-call span MUST carry input and output token usage"
38961
+ }
38962
+ ]
38963
+ },
38713
38964
  {
38714
38965
  "id": "openwop.it.v2-terminal-event-once.every-run-observed-to-a-terminal-state-has-exactly-one-terminal-event-and-no-for",
38715
38966
  "file": "v2-terminal-event-once.test.ts",
@@ -48203,6 +48454,163 @@
48203
48454
  }
48204
48455
  ]
48205
48456
  },
48457
+ {
48458
+ "id": "openwop.it.v2-core-adoption-derived.a-1-a-core-row-s-adoption-equals-the-value-the-bundles-derive",
48459
+ "file": "v2-core-adoption-derived.test.ts",
48460
+ "line": 123,
48461
+ "title": "§A.1 a core row's adoption equals the value the bundles derive",
48462
+ "explicitId": "openwop.requirement.0264.adoption-derived",
48463
+ "citations": [
48464
+ {
48465
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48466
+ "requirement": null,
48467
+ "interpolated": true
48468
+ },
48469
+ {
48470
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48471
+ "requirement": "the base MUST derive one multi-witness, one single-witness and one none family"
48472
+ },
48473
+ {
48474
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48475
+ "requirement": "a hand-edited adoption value MUST fail"
48476
+ },
48477
+ {
48478
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48479
+ "requirement": "the refusal MUST name the family and the derived value"
48480
+ },
48481
+ {
48482
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48483
+ "requirement": "claiming a witness the exclusions remove (old bundle, companion, unlisted origin, no record, citation) MUST fail"
48484
+ },
48485
+ {
48486
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48487
+ "requirement": "gamma MUST derive none"
48488
+ },
48489
+ {
48490
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48491
+ "requirement": "a tier-3 witness MUST make the row independent"
48492
+ },
48493
+ {
48494
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48495
+ "requirement": "the refusal MUST name independent"
48496
+ },
48497
+ {
48498
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48499
+ "requirement": "--write MUST succeed"
48500
+ },
48501
+ {
48502
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48503
+ "requirement": "--write MUST set the core rows and leave the ext row"
48504
+ },
48505
+ {
48506
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48507
+ "requirement": "the tree --write produced MUST pass --check"
48508
+ },
48509
+ {
48510
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48511
+ "requirement": null,
48512
+ "interpolated": true
48513
+ }
48514
+ ]
48515
+ },
48516
+ {
48517
+ "id": "openwop.it.v2-core-adoption-derived.b-2-a-family-at-none-has-a-current-review-row-and-no-other-family-has-one",
48518
+ "file": "v2-core-adoption-derived.test.ts",
48519
+ "line": 154,
48520
+ "title": "§B.2 a family at none has a current review row, and no other family has one",
48521
+ "explicitId": "openwop.requirement.0264.review-row-present",
48522
+ "citations": [
48523
+ {
48524
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48525
+ "requirement": "the base tree with one keep row for gamma MUST pass"
48526
+ },
48527
+ {
48528
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48529
+ "requirement": "a none family with no row MUST fail"
48530
+ },
48531
+ {
48532
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48533
+ "requirement": "the refusal MUST name the family"
48534
+ },
48535
+ {
48536
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48537
+ "requirement": "a missing review file MUST fail while a family is at none"
48538
+ },
48539
+ {
48540
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48541
+ "requirement": "a row for a witnessed family MUST fail"
48542
+ },
48543
+ {
48544
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48545
+ "requirement": "the refusal MUST call it stale"
48546
+ },
48547
+ {
48548
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48549
+ "requirement": "a keep row below the release minor MUST fail"
48550
+ },
48551
+ {
48552
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48553
+ "requirement": "the refusal MUST call it overdue"
48554
+ },
48555
+ {
48556
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48557
+ "requirement": "a keep row due this minor is not yet overdue"
48558
+ },
48559
+ {
48560
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48561
+ "requirement": "an unfilled skeleton row MUST fail"
48562
+ },
48563
+ {
48564
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48565
+ "requirement": "a retire row without a correction MUST fail"
48566
+ },
48567
+ {
48568
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48569
+ "requirement": "the refusal MUST name §B.4"
48570
+ },
48571
+ {
48572
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48573
+ "requirement": "a retire row naming an unknown correction MUST fail"
48574
+ },
48575
+ {
48576
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48577
+ "requirement": "a retire row naming a correction row MUST pass, past its reviewBy too"
48578
+ }
48579
+ ]
48580
+ },
48581
+ {
48582
+ "id": "openwop.it.v2-core-adoption-derived.b-3-renewing-a-keep-row-changes-its-reason-or-plan-not-only-its-date",
48583
+ "file": "v2-core-adoption-derived.test.ts",
48584
+ "line": 180,
48585
+ "title": "§B.3 renewing a keep row changes its reason or plan, not only its date",
48586
+ "explicitId": "openwop.requirement.0264.renewal-not-date-only",
48587
+ "citations": [
48588
+ {
48589
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48590
+ "requirement": "an unchanged row MUST pass"
48591
+ },
48592
+ {
48593
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48594
+ "requirement": "a renewal that changes only reviewBy MUST fail"
48595
+ },
48596
+ {
48597
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48598
+ "requirement": "the refusal MUST name §B.3"
48599
+ },
48600
+ {
48601
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48602
+ "requirement": "a renewal with a new reason MUST pass"
48603
+ },
48604
+ {
48605
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48606
+ "requirement": "a renewal with a new plan MUST pass"
48607
+ },
48608
+ {
48609
+ "section": "RFC 0264 · scripts/derive-core-adoption.mjs",
48610
+ "requirement": "a row with no baseline row is new, not a renewal"
48611
+ }
48612
+ ]
48613
+ },
48206
48614
  {
48207
48615
  "id": "openwop.it.v2-corpus-tag-pinned.every-vendoring-consumer-in-the-cross-repo-inventory-records-a-published-corpus",
48208
48616
  "file": "v2-corpus-tag-pinned.test.ts",
@@ -48642,7 +49050,7 @@
48642
49050
  {
48643
49051
  "id": "openwop.it.v2-front-door-counts.every-stated-count-of-spec-v2-core-documents-equals-the-tree",
48644
49052
  "file": "v2-front-door-counts.test.ts",
48645
- "line": 51,
49053
+ "line": 52,
48646
49054
  "title": "every stated count of spec/v2/core/ documents equals the tree",
48647
49055
  "explicitId": "openwop.requirement.front-door.core-doc-count",
48648
49056
  "citations": [
@@ -48656,7 +49064,7 @@
48656
49064
  {
48657
49065
  "id": "openwop.it.v2-front-door-counts.capabilities-md-5-names-as-many-core-families-as-the-declaration-declares",
48658
49066
  "file": "v2-front-door-counts.test.ts",
48659
- "line": 74,
49067
+ "line": 75,
48660
49068
  "title": "capabilities.md §5 names as many core families as the declaration declares",
48661
49069
  "explicitId": "openwop.requirement.front-door.core-family-count",
48662
49070
  "citations": [
@@ -49428,6 +49836,130 @@
49428
49836
  }
49429
49837
  ]
49430
49838
  },
49839
+ {
49840
+ "id": "openwop.it.v2-sabotage-ledger.a-every-witnessable-falsifiability-row-names-an-id-or-says-planned",
49841
+ "file": "v2-sabotage-ledger.test.ts",
49842
+ "line": 85,
49843
+ "title": "§A every witnessable Falsifiability row names an id or says planned",
49844
+ "explicitId": "openwop.requirement.0263.falsifiability-names-ids",
49845
+ "citations": [
49846
+ {
49847
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49848
+ "requirement": null,
49849
+ "interpolated": true
49850
+ },
49851
+ {
49852
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49853
+ "requirement": "a table naming an id, a planned row and a claims-check row MUST pass at Active"
49854
+ },
49855
+ {
49856
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49857
+ "requirement": "a witnessable row with no id and no `planned` MUST fail"
49858
+ },
49859
+ {
49860
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49861
+ "requirement": "the refusal MUST name §A"
49862
+ },
49863
+ {
49864
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49865
+ "requirement": "an RFC before 0258 is not in scope"
49866
+ },
49867
+ {
49868
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49869
+ "requirement": "a Draft RFC is not in scope"
49870
+ },
49871
+ {
49872
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49873
+ "requirement": "from RFC 0260 a planned row MUST block Accepted"
49874
+ },
49875
+ {
49876
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49877
+ "requirement": "the refusal MUST name the planned row"
49878
+ },
49879
+ {
49880
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49881
+ "requirement": "before RFC 0260 a planned row does not block Accepted"
49882
+ }
49883
+ ]
49884
+ },
49885
+ {
49886
+ "id": "openwop.it.v2-sabotage-ledger.c-an-accepted-rfc-from-0260-has-a-red-ledger-row-for-every-id-it-cites",
49887
+ "file": "v2-sabotage-ledger.test.ts",
49888
+ "line": 101,
49889
+ "title": "§C an Accepted RFC from 0260 has a red ledger row for every id it cites",
49890
+ "explicitId": "openwop.requirement.0263.sabotage-recorded-before-accepted",
49891
+ "citations": [
49892
+ {
49893
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49894
+ "requirement": "an executed-fail row for the cited id MUST satisfy §C"
49895
+ },
49896
+ {
49897
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49898
+ "requirement": "a red row on a leg under the cited id MUST satisfy §C"
49899
+ },
49900
+ {
49901
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49902
+ "requirement": "with no ledger row the flip MUST fail"
49903
+ },
49904
+ {
49905
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49906
+ "requirement": "the refusal MUST name the id"
49907
+ },
49908
+ {
49909
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49910
+ "requirement": "a red row for a different id MUST NOT satisfy §C"
49911
+ },
49912
+ {
49913
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49914
+ "requirement": "§C binds the Accepted flip, not Active"
49915
+ },
49916
+ {
49917
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49918
+ "requirement": "an RFC before 0260 is not retroactively invalidated"
49919
+ }
49920
+ ]
49921
+ },
49922
+ {
49923
+ "id": "openwop.it.v2-sabotage-ledger.b-the-ledger-records-red-runs-in-a-closed-shape-never-on-a-certified-bundle",
49924
+ "file": "v2-sabotage-ledger.test.ts",
49925
+ "line": 114,
49926
+ "title": "§B the ledger records red runs, in a closed shape, never on a certified bundle",
49927
+ "explicitId": "openwop.requirement.0263.ledger-shape",
49928
+ "citations": [
49929
+ {
49930
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49931
+ "requirement": "well-formed rows, one with a red digest, MUST pass"
49932
+ },
49933
+ {
49934
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49935
+ "requirement": "a sabotage that passed MUST fail the shape"
49936
+ },
49937
+ {
49938
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49939
+ "requirement": "the refusal MUST say why"
49940
+ },
49941
+ {
49942
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49943
+ "requirement": "an unknown member MUST fail"
49944
+ },
49945
+ {
49946
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49947
+ "requirement": "a sabotage that does not say what was broken MUST fail"
49948
+ },
49949
+ {
49950
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49951
+ "requirement": "a subject without a build MUST fail"
49952
+ },
49953
+ {
49954
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49955
+ "requirement": "a row naming a certified bundle's digest MUST fail — that bundle recorded the pass"
49956
+ },
49957
+ {
49958
+ "section": "RFC 0263 · scripts/check-accepted-predicate.mjs rules 5 and 6",
49959
+ "requirement": "the refusal MUST name the certified bundle"
49960
+ }
49961
+ ]
49962
+ },
49431
49963
  {
49432
49964
  "id": "openwop.it.v2-seams-not-in-canonical.the-corpus-gate-script-exits-0",
49433
49965
  "file": "v2-seams-not-in-canonical.test.ts",
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "$comment": "GENERATED by conformance/scripts/generate-scenario-majors.mjs (RFC 0168 §D.3). Do not edit; add a file to BOTH_MAJORS in the generator to target both majors.",
3
3
  "counts": {
4
- "files": 668,
4
+ "files": 671,
5
5
  "v1": 455,
6
- "v2": 228
6
+ "v2": 231
7
7
  },
8
8
  "majors": {
9
9
  "a2a-1-0-agent-card.test.ts": [
@@ -1392,6 +1392,9 @@
1392
1392
  "v2-compensation-read-projection.test.ts": [
1393
1393
  2
1394
1394
  ],
1395
+ "v2-compensation-unwind.test.ts": [
1396
+ 2
1397
+ ],
1395
1398
  "v2-configurable-closed.test.ts": [
1396
1399
  2
1397
1400
  ],
@@ -1740,6 +1743,9 @@
1740
1743
  "v2-relaxation-recorded.test.ts": [
1741
1744
  2
1742
1745
  ],
1746
+ "v2-replay-llm-cache-key.test.ts": [
1747
+ 2
1748
+ ],
1743
1749
  "v2-replay-suppression-ordinal.test.ts": [
1744
1750
  2
1745
1751
  ],
@@ -1833,6 +1839,9 @@
1833
1839
  "v2-table-schema-enforcement.test.ts": [
1834
1840
  2
1835
1841
  ],
1842
+ "v2-telemetry-export.test.ts": [
1843
+ 2
1844
+ ],
1836
1845
  "v2-terminal-event-once.test.ts": [
1837
1846
  2
1838
1847
  ],