@openwop/openwop-conformance 2.43.0 → 2.43.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.
- package/CHANGELOG.md +24 -0
- package/README.md +3 -3
- package/dist/cli.js +15 -12
- package/dist/lib/certification-bundle-v3.js +19 -0
- package/dist/lib/scenario-disposition.js +30 -0
- package/dist/spec-artifacts.lock.json +2 -2
- package/fixtures/conformance-approval-reject-loopback.json +33 -0
- package/fixtures/conformance-approval-reject-routed.json +32 -0
- package/fixtures/conformance-approval-timeout-approve.json +46 -0
- package/fixtures/conformance-approval-timeout.json +28 -0
- package/fixtures/conformance-replay-ordinal-loop.json +31 -0
- package/fixtures.md +69 -1
- package/package.json +2 -2
- package/requirements.json +243 -30
- package/scenario-majors.json +11 -2
- package/schemas/CORPUS-STAMP.json +47 -47
- package/src/cli.ts +15 -12
- package/src/lib/certification-bundle-v3.ts +25 -0
- package/src/lib/scenario-disposition.ts +40 -0
- package/src/lib/standard-webhooks.ts +53 -0
- package/src/scenarios/agent-org-chart-scoping.test.ts +63 -0
- package/src/scenarios/v2-agent-org-chart-served-shape.test.ts +63 -0
- package/src/scenarios/v2-approval-reject-disposition.test.ts +106 -6
- package/src/scenarios/v2-error-registry.test.ts +59 -0
- package/src/scenarios/v2-manifest-ceiling-refused.test.ts +21 -9
- package/src/scenarios/v2-manifest-hatch-carried.test.ts +23 -7
- package/src/scenarios/v2-pack-isolation.test.ts +10 -6
- package/src/scenarios/v2-peer-dependency-declared.test.ts +18 -6
- package/src/scenarios/v2-replay-suppression-ordinal.test.ts +108 -0
- package/src/scenarios/v2-run-fork-ancestry.test.ts +83 -0
- package/src/scenarios/v2-webhook-secret-rotation.test.ts +28 -11
- package/src/setup.ts +25 -2
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":
|
|
6
|
-
"tests":
|
|
7
|
-
"withStableId":
|
|
5
|
+
"files": 648,
|
|
6
|
+
"tests": 2490,
|
|
7
|
+
"withStableId": 2490,
|
|
8
8
|
"interpolatedTitles": 0,
|
|
9
|
-
"explicitIds":
|
|
9
|
+
"explicitIds": 2372
|
|
10
10
|
},
|
|
11
11
|
"records": [
|
|
12
12
|
{
|
|
@@ -1912,7 +1912,7 @@
|
|
|
1912
1912
|
{
|
|
1913
1913
|
"id": "openwop.it.agent-org-chart-scoping.serves-the-normative-org-chart-responsibility-roll-up-tree-shaped-and-tenant-sco",
|
|
1914
1914
|
"file": "agent-org-chart-scoping.test.ts",
|
|
1915
|
-
"line":
|
|
1915
|
+
"line": 60,
|
|
1916
1916
|
"title": "serves the normative org-chart + responsibility roll-up, tree-shaped and tenant-scoped",
|
|
1917
1917
|
"explicitId": "openwop.it.agent-org-chart-scoping.serves-the-normative-org-chart-responsibility-roll-up-tree-shaped-and-tenant-sco",
|
|
1918
1918
|
"citations": [
|
|
@@ -1974,6 +1974,31 @@
|
|
|
1974
1974
|
}
|
|
1975
1975
|
]
|
|
1976
1976
|
},
|
|
1977
|
+
{
|
|
1978
|
+
"id": "openwop.it.agent-org-chart-scoping.serves-the-org-chart-read-pair-in-the-exact-schema-shape",
|
|
1979
|
+
"file": "agent-org-chart-scoping.test.ts",
|
|
1980
|
+
"line": 193,
|
|
1981
|
+
"title": "serves the org-chart read pair in the exact schema shape",
|
|
1982
|
+
"explicitId": "openwop.it.agent-org-chart-scoping.serves-the-org-chart-read-pair-in-the-exact-schema-shape",
|
|
1983
|
+
"citations": [
|
|
1984
|
+
{
|
|
1985
|
+
"section": "agent-org-chart.md §A / §E",
|
|
1986
|
+
"requirement": "a host advertising agents.orgChart.supported MUST serve GET /v1/agents/org-chart with 200"
|
|
1987
|
+
},
|
|
1988
|
+
{
|
|
1989
|
+
"section": "agent-org-chart.schema.json (RFC 0087 §A)",
|
|
1990
|
+
"requirement": "the served GET /v1/agents/org-chart body MUST validate against agent-org-chart.schema.json (owner required; no extra keys)"
|
|
1991
|
+
},
|
|
1992
|
+
{
|
|
1993
|
+
"section": "agent-org-chart.md §D / §E",
|
|
1994
|
+
"requirement": "a host advertising agents.orgChart.responsibilityView MUST serve GET /v1/agents/org-chart/{departmentId} with 200 for a department in the caller's chart"
|
|
1995
|
+
},
|
|
1996
|
+
{
|
|
1997
|
+
"section": "org-chart-responsibility-view.schema.json (RFC 0087 §D)",
|
|
1998
|
+
"requirement": "the served GET /v1/agents/org-chart/{departmentId} body MUST validate against org-chart-responsibility-view.schema.json"
|
|
1999
|
+
}
|
|
2000
|
+
]
|
|
2001
|
+
},
|
|
1977
2002
|
{
|
|
1978
2003
|
"id": "openwop.it.agent-org-chart-shape.the-capabilities-schema-declares-agents-orgchart-with-its-sub-flags",
|
|
1979
2004
|
"file": "agent-org-chart-shape.test.ts",
|
|
@@ -27803,10 +27828,35 @@
|
|
|
27803
27828
|
}
|
|
27804
27829
|
]
|
|
27805
27830
|
},
|
|
27831
|
+
{
|
|
27832
|
+
"id": "openwop.it.v2-agent-org-chart-served-shape.serves-the-org-chart-read-pair-in-the-exact-v2-schema-shape",
|
|
27833
|
+
"file": "v2-agent-org-chart-served-shape.test.ts",
|
|
27834
|
+
"line": 30,
|
|
27835
|
+
"title": "serves the org-chart read pair in the exact v2 schema shape",
|
|
27836
|
+
"explicitId": "openwop.it.v2-agent-org-chart-served-shape.serves-the-org-chart-read-pair-in-the-exact-v2-schema-shape",
|
|
27837
|
+
"citations": [
|
|
27838
|
+
{
|
|
27839
|
+
"section": "api/v2/openapi.yaml /agents/org-chart (RFC 0087 §D)",
|
|
27840
|
+
"requirement": "a host advertising agents.orgChart MUST serve GET /agents/org-chart with 200"
|
|
27841
|
+
},
|
|
27842
|
+
{
|
|
27843
|
+
"section": "schemas/v2/agent-org-chart.schema.json (RFC 0087 §A)",
|
|
27844
|
+
"requirement": "the served GET /agents/org-chart body MUST validate against agent-org-chart.schema.json (owner required; no extra keys)"
|
|
27845
|
+
},
|
|
27846
|
+
{
|
|
27847
|
+
"section": "api/v2/openapi.yaml /agents/org-chart/{departmentId} (RFC 0087 §D)",
|
|
27848
|
+
"requirement": "a host advertising agents.orgChart.responsibilityView MUST serve GET /agents/org-chart/{departmentId} with 200 for a department in the caller's chart"
|
|
27849
|
+
},
|
|
27850
|
+
{
|
|
27851
|
+
"section": "schemas/v2/org-chart-responsibility-view.schema.json (RFC 0087 §D)",
|
|
27852
|
+
"requirement": "the served GET /agents/org-chart/{departmentId} body MUST validate against org-chart-responsibility-view.schema.json"
|
|
27853
|
+
}
|
|
27854
|
+
]
|
|
27855
|
+
},
|
|
27806
27856
|
{
|
|
27807
27857
|
"id": "openwop.it.v2-approval-reject-disposition.a-rejected-gate-with-no-routing-edge-fails-the-run-with-approval-rejected",
|
|
27808
27858
|
"file": "v2-approval-reject-disposition.test.ts",
|
|
27809
|
-
"line":
|
|
27859
|
+
"line": 126,
|
|
27810
27860
|
"title": "a rejected gate with no routing edge fails the run with approval_rejected",
|
|
27811
27861
|
"explicitId": null,
|
|
27812
27862
|
"citations": [
|
|
@@ -27829,7 +27879,7 @@
|
|
|
27829
27879
|
{
|
|
27830
27880
|
"id": "openwop.it.v2-approval-reject-disposition.interrupt-resolved-records-action-reject-and-decision-rejected",
|
|
27831
27881
|
"file": "v2-approval-reject-disposition.test.ts",
|
|
27832
|
-
"line":
|
|
27882
|
+
"line": 137,
|
|
27833
27883
|
"title": "interrupt.resolved records action reject and decision rejected",
|
|
27834
27884
|
"explicitId": null,
|
|
27835
27885
|
"citations": [
|
|
@@ -27848,7 +27898,7 @@
|
|
|
27848
27898
|
{
|
|
27849
27899
|
"id": "openwop.it.v2-approval-reject-disposition.the-gate-node-fails-with-approval-rejected-not-retryable-and-run-failed-names-it",
|
|
27850
27900
|
"file": "v2-approval-reject-disposition.test.ts",
|
|
27851
|
-
"line":
|
|
27901
|
+
"line": 150,
|
|
27852
27902
|
"title": "the gate node fails with approval_rejected, not retryable, and run.failed names it",
|
|
27853
27903
|
"explicitId": null,
|
|
27854
27904
|
"citations": [
|
|
@@ -27869,7 +27919,7 @@
|
|
|
27869
27919
|
{
|
|
27870
27920
|
"id": "openwop.it.v2-approval-reject-disposition.a-majority-reject-decides-the-quorum-gate-on-the-deciding-vote-and-fails-the-run",
|
|
27871
27921
|
"file": "v2-approval-reject-disposition.test.ts",
|
|
27872
|
-
"line":
|
|
27922
|
+
"line": 163,
|
|
27873
27923
|
"title": "a majority reject decides the quorum gate on the deciding vote and fails the run with approval_rejected",
|
|
27874
27924
|
"explicitId": null,
|
|
27875
27925
|
"citations": [
|
|
@@ -27892,6 +27942,101 @@
|
|
|
27892
27942
|
}
|
|
27893
27943
|
]
|
|
27894
27944
|
},
|
|
27945
|
+
{
|
|
27946
|
+
"id": "openwop.it.v2-approval-reject-disposition.a-rejected-gate-routed-over-an-any-failed-edge-fails-as-a-node-its-all-success-s",
|
|
27947
|
+
"file": "v2-approval-reject-disposition.test.ts",
|
|
27948
|
+
"line": 186,
|
|
27949
|
+
"title": "a rejected gate routed over an any_failed edge fails as a node, its all_success sibling never runs, and the run completes",
|
|
27950
|
+
"explicitId": null,
|
|
27951
|
+
"citations": [
|
|
27952
|
+
{
|
|
27953
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27954
|
+
"requirement": "the routed gate still fails as a node: node.failed.error MUST carry approval_rejected and retryable false"
|
|
27955
|
+
},
|
|
27956
|
+
{
|
|
27957
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27958
|
+
"requirement": "the any_failed edge admits the failed gate: on-reject MUST run to node.completed"
|
|
27959
|
+
},
|
|
27960
|
+
{
|
|
27961
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27962
|
+
"requirement": "a rejected gate MUST NOT satisfy an all_success edge: on-accept MUST NOT run"
|
|
27963
|
+
},
|
|
27964
|
+
{
|
|
27965
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27966
|
+
"requirement": null,
|
|
27967
|
+
"interpolated": true
|
|
27968
|
+
}
|
|
27969
|
+
]
|
|
27970
|
+
},
|
|
27971
|
+
{
|
|
27972
|
+
"id": "openwop.it.v2-approval-reject-disposition.an-unresolved-gate-past-its-timeoutms-with-no-ontimeout-is-resolved-rejected-by",
|
|
27973
|
+
"file": "v2-approval-reject-disposition.test.ts",
|
|
27974
|
+
"line": 205,
|
|
27975
|
+
"title": "an unresolved gate past its timeoutMs with no onTimeout is resolved rejected by the host and fails the run naming the gate",
|
|
27976
|
+
"explicitId": null,
|
|
27977
|
+
"citations": [
|
|
27978
|
+
{
|
|
27979
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27980
|
+
"requirement": "the host MUST resolve the timed-out gate itself, recording action \"timeout\", decision \"rejected\" and reason \"timeout\""
|
|
27981
|
+
},
|
|
27982
|
+
{
|
|
27983
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27984
|
+
"requirement": "the timed-out gate MUST fail with approval_rejected"
|
|
27985
|
+
},
|
|
27986
|
+
{
|
|
27987
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27988
|
+
"requirement": "with no routing edge the run MUST terminate failed, run.failed carrying approval_rejected and failedNodeId naming the gate"
|
|
27989
|
+
}
|
|
27990
|
+
]
|
|
27991
|
+
},
|
|
27992
|
+
{
|
|
27993
|
+
"id": "openwop.it.v2-approval-reject-disposition.a-gate-whose-ontimeout-is-approve-still-resolves-rejected-on-timeout-and-fails-t",
|
|
27994
|
+
"file": "v2-approval-reject-disposition.test.ts",
|
|
27995
|
+
"line": 224,
|
|
27996
|
+
"title": "a gate whose onTimeout is approve still resolves rejected on timeout and fails the run: a timeout never grants",
|
|
27997
|
+
"explicitId": null,
|
|
27998
|
+
"citations": [
|
|
27999
|
+
{
|
|
28000
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
28001
|
+
"requirement": "whatever onTimeout holds, the host MUST resolve the timed-out gate rejected (action \"timeout\", decision \"rejected\") — onTimeout \"approve\" is treated as reject"
|
|
28002
|
+
},
|
|
28003
|
+
{
|
|
28004
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
28005
|
+
"requirement": "the timed-out gate MUST fail with approval_rejected"
|
|
28006
|
+
},
|
|
28007
|
+
{
|
|
28008
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
28009
|
+
"requirement": null,
|
|
28010
|
+
"interpolated": true
|
|
28011
|
+
}
|
|
28012
|
+
]
|
|
28013
|
+
},
|
|
28014
|
+
{
|
|
28015
|
+
"id": "openwop.it.v2-approval-reject-disposition.a-rejected-gate-looped-back-to-itself-is-asked-again-under-a-new-key-and-the-fir",
|
|
28016
|
+
"file": "v2-approval-reject-disposition.test.ts",
|
|
28017
|
+
"line": 242,
|
|
28018
|
+
"title": "a rejected gate looped back to itself is asked again under a new key, and the first rejection is not replayed",
|
|
28019
|
+
"explicitId": null,
|
|
28020
|
+
"citations": [
|
|
28021
|
+
{
|
|
28022
|
+
"section": "spec/v2/core/interrupt.md §Re-entry and resume values",
|
|
28023
|
+
"requirement": "the second visit of the gate MUST raise a new interrupt.requested"
|
|
28024
|
+
},
|
|
28025
|
+
{
|
|
28026
|
+
"section": "spec/v2/core/interrupt.md §Re-entry and resume values",
|
|
28027
|
+
"requirement": null,
|
|
28028
|
+
"interpolated": true
|
|
28029
|
+
},
|
|
28030
|
+
{
|
|
28031
|
+
"section": "spec/v2/core/interrupt.md §Re-entry and resume values",
|
|
28032
|
+
"requirement": "the second visit MUST wait for a new decision: the run is waiting-approval again"
|
|
28033
|
+
},
|
|
28034
|
+
{
|
|
28035
|
+
"section": "spec/v2/core/interrupt.md §Re-entry and resume values",
|
|
28036
|
+
"requirement": "an earlier visit's resumeValue MUST NOT be returned: only the one caller resolve is recorded"
|
|
28037
|
+
}
|
|
28038
|
+
]
|
|
28039
|
+
},
|
|
27895
28040
|
{
|
|
27896
28041
|
"id": "openwop.it.v2-approver-enforced.a-resolver-outside-approverslist-is-refused-at-resolve-time",
|
|
27897
28042
|
"file": "v2-approver-enforced.test.ts",
|
|
@@ -29594,7 +29739,7 @@
|
|
|
29594
29739
|
{
|
|
29595
29740
|
"id": "openwop.it.v2-error-registry.an-error-response-is-the-closed-envelope-with-a-registered-code-at-its-registere",
|
|
29596
29741
|
"file": "v2-error-registry.test.ts",
|
|
29597
|
-
"line":
|
|
29742
|
+
"line": 72,
|
|
29598
29743
|
"title": "an error response is the closed envelope with a registered code at its registered status",
|
|
29599
29744
|
"explicitId": "openwop.requirement.0171.error-registry.envelope",
|
|
29600
29745
|
"citations": [
|
|
@@ -29613,7 +29758,7 @@
|
|
|
29613
29758
|
{
|
|
29614
29759
|
"id": "openwop.it.v2-error-registry.retry-timing-is-never-spelled-inside-details",
|
|
29615
29760
|
"file": "v2-error-registry.test.ts",
|
|
29616
|
-
"line":
|
|
29761
|
+
"line": 84,
|
|
29617
29762
|
"title": "retry timing is never spelled inside details",
|
|
29618
29763
|
"explicitId": "openwop.requirement.0171.error-registry.no-retry-details",
|
|
29619
29764
|
"citations": [
|
|
@@ -29626,7 +29771,7 @@
|
|
|
29626
29771
|
{
|
|
29627
29772
|
"id": "openwop.it.v2-error-registry.a-429-rate-limited-response-carries-retry-after",
|
|
29628
29773
|
"file": "v2-error-registry.test.ts",
|
|
29629
|
-
"line":
|
|
29774
|
+
"line": 92,
|
|
29630
29775
|
"title": "a 429 rate_limited response carries Retry-After",
|
|
29631
29776
|
"explicitId": "openwop.requirement.0171.error-registry.retry-after",
|
|
29632
29777
|
"citations": [
|
|
@@ -29640,6 +29785,24 @@
|
|
|
29640
29785
|
}
|
|
29641
29786
|
]
|
|
29642
29787
|
},
|
|
29788
|
+
{
|
|
29789
|
+
"id": "openwop.it.v2-error-registry.an-error-code-on-run-failed-node-failed-and-the-snapshot-is-registered-or-a-vend",
|
|
29790
|
+
"file": "v2-error-registry.test.ts",
|
|
29791
|
+
"line": 110,
|
|
29792
|
+
"title": "an error code on run.failed, node.failed and the snapshot is registered or a vendor code (advisory in 2.43.1)",
|
|
29793
|
+
"explicitId": "openwop.requirement.errors.event-code-registered",
|
|
29794
|
+
"citations": [
|
|
29795
|
+
{
|
|
29796
|
+
"section": "spec/v2/core/errors.md §The registry",
|
|
29797
|
+
"requirement": null,
|
|
29798
|
+
"interpolated": true
|
|
29799
|
+
},
|
|
29800
|
+
{
|
|
29801
|
+
"section": "spec/v2/core/errors.md §The registry",
|
|
29802
|
+
"requirement": "every error code on run.failed, node.failed and the snapshot MUST be registered or a vendor code"
|
|
29803
|
+
}
|
|
29804
|
+
]
|
|
29805
|
+
},
|
|
29643
29806
|
{
|
|
29644
29807
|
"id": "openwop.it.v2-event-type-closed.every-emitted-type-is-a-registered-protocol-type-or-a-vendor-type-under-an-adver",
|
|
29645
29808
|
"file": "v2-event-type-closed.test.ts",
|
|
@@ -30594,7 +30757,7 @@
|
|
|
30594
30757
|
{
|
|
30595
30758
|
"id": "openwop.it.v2-manifest-ceiling-refused.an-engines-openwop-range-with-no-upper-bound-1-0-0-reads-2-0-0-and-is-refused-at",
|
|
30596
30759
|
"file": "v2-manifest-ceiling-refused.test.ts",
|
|
30597
|
-
"line":
|
|
30760
|
+
"line": 117,
|
|
30598
30761
|
"title": "an engines.openwop range with no upper bound (>=1.0.0) reads <2.0.0 and is refused at install with pack_engine_unsupported",
|
|
30599
30762
|
"explicitId": "openwop.requirement.0177.manifest-ceiling-refused.unbounded",
|
|
30600
30763
|
"citations": [
|
|
@@ -30611,7 +30774,7 @@
|
|
|
30611
30774
|
{
|
|
30612
30775
|
"id": "openwop.it.v2-manifest-ceiling-refused.a-v1-ceiling-1-0-0-2-0-0-is-refused-at-install-with-pack-engine-unsupported",
|
|
30613
30776
|
"file": "v2-manifest-ceiling-refused.test.ts",
|
|
30614
|
-
"line":
|
|
30777
|
+
"line": 126,
|
|
30615
30778
|
"title": "a v1 ceiling (>=1.0.0 <2.0.0) is refused at install with pack_engine_unsupported",
|
|
30616
30779
|
"explicitId": "openwop.requirement.0177.manifest-ceiling-refused.v1-ceiling",
|
|
30617
30780
|
"citations": [
|
|
@@ -30628,7 +30791,7 @@
|
|
|
30628
30791
|
{
|
|
30629
30792
|
"id": "openwop.it.v2-manifest-ceiling-refused.a-range-admitting-the-host-major-2-0-0-3-0-0-installs",
|
|
30630
30793
|
"file": "v2-manifest-ceiling-refused.test.ts",
|
|
30631
|
-
"line":
|
|
30794
|
+
"line": 135,
|
|
30632
30795
|
"title": "a range admitting the host major (>=2.0.0 <3.0.0) installs",
|
|
30633
30796
|
"explicitId": "openwop.requirement.0177.manifest-ceiling-refused.v2-installs",
|
|
30634
30797
|
"citations": [
|
|
@@ -30642,7 +30805,7 @@
|
|
|
30642
30805
|
{
|
|
30643
30806
|
"id": "openwop.it.v2-manifest-hatch-carried.an-x-field-inside-agents-0-of-a-node-pack-is-ignored-not-rejected-the-pack-insta",
|
|
30644
30807
|
"file": "v2-manifest-hatch-carried.test.ts",
|
|
30645
|
-
"line":
|
|
30808
|
+
"line": 97,
|
|
30646
30809
|
"title": "an x- field inside agents[0] of a node pack is ignored, not rejected — the pack installs",
|
|
30647
30810
|
"explicitId": "openwop.requirement.0177.manifest-hatch-carried.agents-x-field",
|
|
30648
30811
|
"citations": [
|
|
@@ -30656,7 +30819,7 @@
|
|
|
30656
30819
|
{
|
|
30657
30820
|
"id": "openwop.it.v2-manifest-hatch-carried.an-x-field-inside-a-prompt-template-of-a-prompt-pack-is-ignored-not-rejected-the",
|
|
30658
30821
|
"file": "v2-manifest-hatch-carried.test.ts",
|
|
30659
|
-
"line":
|
|
30822
|
+
"line": 119,
|
|
30660
30823
|
"title": "an x- field inside a prompt template of a prompt pack is ignored, not rejected — the pack installs",
|
|
30661
30824
|
"explicitId": "openwop.requirement.0177.manifest-hatch-carried.prompt-template-x-field",
|
|
30662
30825
|
"citations": [
|
|
@@ -32078,7 +32241,7 @@
|
|
|
32078
32241
|
{
|
|
32079
32242
|
"id": "openwop.it.v2-pack-isolation.sandbox-isolationmodel-names-a-real-mechanism-never-node-vm",
|
|
32080
32243
|
"file": "v2-pack-isolation.test.ts",
|
|
32081
|
-
"line":
|
|
32244
|
+
"line": 82,
|
|
32082
32245
|
"title": "sandbox.isolationModel names a real mechanism, never node:vm",
|
|
32083
32246
|
"explicitId": "openwop.requirement.0173.pack-isolation",
|
|
32084
32247
|
"citations": [
|
|
@@ -32096,7 +32259,7 @@
|
|
|
32096
32259
|
{
|
|
32097
32260
|
"id": "openwop.it.v2-pack-isolation.the-sandbox-invoke-seam-answers-the-seam-contract",
|
|
32098
32261
|
"file": "v2-pack-isolation.test.ts",
|
|
32099
|
-
"line":
|
|
32262
|
+
"line": 96,
|
|
32100
32263
|
"title": "the sandbox-invoke seam answers the seam contract",
|
|
32101
32264
|
"explicitId": "openwop.requirement.0173.pack-isolation.seam",
|
|
32102
32265
|
"citations": [
|
|
@@ -32110,7 +32273,7 @@
|
|
|
32110
32273
|
{
|
|
32111
32274
|
"id": "openwop.it.v2-pack-isolation.node-pack-sandbox-fs-gated-a-host-filesystem-read-is-refused",
|
|
32112
32275
|
"file": "v2-pack-isolation.test.ts",
|
|
32113
|
-
"line":
|
|
32276
|
+
"line": 108,
|
|
32114
32277
|
"title": "node-pack-sandbox-fs-gated: a host filesystem read is refused",
|
|
32115
32278
|
"explicitId": null,
|
|
32116
32279
|
"citations": []
|
|
@@ -32118,7 +32281,7 @@
|
|
|
32118
32281
|
{
|
|
32119
32282
|
"id": "openwop.it.v2-pack-isolation.node-pack-sandbox-fs-gated-a-host-filesystem-write-is-refused",
|
|
32120
32283
|
"file": "v2-pack-isolation.test.ts",
|
|
32121
|
-
"line":
|
|
32284
|
+
"line": 115,
|
|
32122
32285
|
"title": "node-pack-sandbox-fs-gated: a host filesystem write is refused",
|
|
32123
32286
|
"explicitId": null,
|
|
32124
32287
|
"citations": []
|
|
@@ -32126,7 +32289,7 @@
|
|
|
32126
32289
|
{
|
|
32127
32290
|
"id": "openwop.it.v2-pack-isolation.node-pack-sandbox-no-env-the-host-environment-does-not-leak",
|
|
32128
32291
|
"file": "v2-pack-isolation.test.ts",
|
|
32129
|
-
"line":
|
|
32292
|
+
"line": 122,
|
|
32130
32293
|
"title": "node-pack-sandbox-no-env: the host environment does not leak",
|
|
32131
32294
|
"explicitId": null,
|
|
32132
32295
|
"citations": []
|
|
@@ -32134,7 +32297,7 @@
|
|
|
32134
32297
|
{
|
|
32135
32298
|
"id": "openwop.it.v2-pack-isolation.node-pack-sandbox-network-gated-ungated-network-egress-is-refused",
|
|
32136
32299
|
"file": "v2-pack-isolation.test.ts",
|
|
32137
|
-
"line":
|
|
32300
|
+
"line": 129,
|
|
32138
32301
|
"title": "node-pack-sandbox-network-gated: ungated network egress is refused",
|
|
32139
32302
|
"explicitId": null,
|
|
32140
32303
|
"citations": []
|
|
@@ -32142,7 +32305,7 @@
|
|
|
32142
32305
|
{
|
|
32143
32306
|
"id": "openwop.it.v2-pack-isolation.node-pack-sandbox-no-process-host-process-access-is-refused",
|
|
32144
32307
|
"file": "v2-pack-isolation.test.ts",
|
|
32145
|
-
"line":
|
|
32308
|
+
"line": 136,
|
|
32146
32309
|
"title": "node-pack-sandbox-no-process: host process access is refused",
|
|
32147
32310
|
"explicitId": null,
|
|
32148
32311
|
"citations": []
|
|
@@ -32150,7 +32313,7 @@
|
|
|
32150
32313
|
{
|
|
32151
32314
|
"id": "openwop.it.v2-pack-isolation.node-pack-sandbox-timeout-exceeding-wallclocklimitms-fails-with-sandbox-timeout",
|
|
32152
32315
|
"file": "v2-pack-isolation.test.ts",
|
|
32153
|
-
"line":
|
|
32316
|
+
"line": 143,
|
|
32154
32317
|
"title": "node-pack-sandbox-timeout: exceeding wallClockLimitMs fails with sandbox_timeout",
|
|
32155
32318
|
"explicitId": "openwop.requirement.0173.pack-isolation.timeout",
|
|
32156
32319
|
"citations": [
|
|
@@ -32163,7 +32326,7 @@
|
|
|
32163
32326
|
{
|
|
32164
32327
|
"id": "openwop.it.v2-pack-isolation.node-pack-sandbox-memory-cap-exceeding-memorylimitbytes-fails-with-sandbox-memor",
|
|
32165
32328
|
"file": "v2-pack-isolation.test.ts",
|
|
32166
|
-
"line":
|
|
32329
|
+
"line": 150,
|
|
32167
32330
|
"title": "node-pack-sandbox-memory-cap: exceeding memoryLimitBytes fails with sandbox_memory_exceeded",
|
|
32168
32331
|
"explicitId": "openwop.requirement.0173.pack-isolation.memory-cap",
|
|
32169
32332
|
"citations": [
|
|
@@ -32176,7 +32339,7 @@
|
|
|
32176
32339
|
{
|
|
32177
32340
|
"id": "openwop.it.v2-pack-isolation.node-pack-sandbox-isolated-context-a-pack-cannot-mutate-state-another-invocation",
|
|
32178
32341
|
"file": "v2-pack-isolation.test.ts",
|
|
32179
|
-
"line":
|
|
32342
|
+
"line": 157,
|
|
32180
32343
|
"title": "node-pack-sandbox-isolated-context: a pack cannot mutate state another invocation sees",
|
|
32181
32344
|
"explicitId": "openwop.requirement.0173.pack-isolation.isolated-context",
|
|
32182
32345
|
"citations": [
|
|
@@ -32321,7 +32484,7 @@
|
|
|
32321
32484
|
{
|
|
32322
32485
|
"id": "openwop.it.v2-peer-dependency-declared.a-peerdependencies-key-the-declaration-file-does-not-name-is-refused-with-pack-p",
|
|
32323
32486
|
"file": "v2-peer-dependency-declared.test.ts",
|
|
32324
|
-
"line":
|
|
32487
|
+
"line": 116,
|
|
32325
32488
|
"title": "a peerDependencies key the declaration file does not name is refused with pack_peer_dependency_undefined",
|
|
32326
32489
|
"explicitId": "openwop.requirement.0177.peer-dependency-declared.undefined-key",
|
|
32327
32490
|
"citations": [
|
|
@@ -32338,7 +32501,7 @@
|
|
|
32338
32501
|
{
|
|
32339
32502
|
"id": "openwop.it.v2-peer-dependency-declared.an-alias-table-row-host-fs-fs-resolves-through-the-overlap-and-the-pack-installs",
|
|
32340
32503
|
"file": "v2-peer-dependency-declared.test.ts",
|
|
32341
|
-
"line":
|
|
32504
|
+
"line": 125,
|
|
32342
32505
|
"title": "an alias-table row (host.fs → fs) resolves through the overlap and the pack installs",
|
|
32343
32506
|
"explicitId": "openwop.requirement.0177.peer-dependency-declared.alias-overlap",
|
|
32344
32507
|
"citations": [
|
|
@@ -32912,6 +33075,24 @@
|
|
|
32912
33075
|
}
|
|
32913
33076
|
]
|
|
32914
33077
|
},
|
|
33078
|
+
{
|
|
33079
|
+
"id": "openwop.it.v2-replay-suppression-ordinal.a-replay-fork-resolves-each-execution-of-a-looped-side-effecting-node-by-its-own",
|
|
33080
|
+
"file": "v2-replay-suppression-ordinal.test.ts",
|
|
33081
|
+
"line": 73,
|
|
33082
|
+
"title": "a replay fork resolves each execution of a looped side-effecting node by its own ordinal, failing closed where none was recorded",
|
|
33083
|
+
"explicitId": "openwop.requirement.replay.suppression-execution-ordinal",
|
|
33084
|
+
"citations": [
|
|
33085
|
+
{
|
|
33086
|
+
"section": "spec/v2/core/replay.md §Suppression",
|
|
33087
|
+
"requirement": "only the execution with a recorded outcome (n = 1) may complete in the fork; execution 2 has none and MUST NOT complete"
|
|
33088
|
+
},
|
|
33089
|
+
{
|
|
33090
|
+
"section": null,
|
|
33091
|
+
"requirement": null,
|
|
33092
|
+
"interpolated": true
|
|
33093
|
+
}
|
|
33094
|
+
]
|
|
33095
|
+
},
|
|
32915
33096
|
{
|
|
32916
33097
|
"id": "openwop.it.v2-revocation-honored.a-revoked-next-request-credential-is-refused-on-the-next-request-with-credential",
|
|
32917
33098
|
"file": "v2-revocation-honored.test.ts",
|
|
@@ -33159,6 +33340,38 @@
|
|
|
33159
33340
|
}
|
|
33160
33341
|
]
|
|
33161
33342
|
},
|
|
33343
|
+
{
|
|
33344
|
+
"id": "openwop.it.v2-run-fork-ancestry.a-branch-fork-is-not-a-composition-child-its-ancestry-parent-is-null",
|
|
33345
|
+
"file": "v2-run-fork-ancestry.test.ts",
|
|
33346
|
+
"line": 51,
|
|
33347
|
+
"title": "a branch fork is not a composition child: its ancestry parent is null",
|
|
33348
|
+
"explicitId": "openwop.requirement.0040.fork-has-no-ancestry-parent",
|
|
33349
|
+
"citations": [
|
|
33350
|
+
{
|
|
33351
|
+
"section": "spec/v2/core/runs.md §Diff and ancestry",
|
|
33352
|
+
"requirement": null,
|
|
33353
|
+
"interpolated": true
|
|
33354
|
+
},
|
|
33355
|
+
{
|
|
33356
|
+
"section": "spec/v2/core/runs.md §Diff and ancestry",
|
|
33357
|
+
"requirement": "the control: a run created by POST /runs was dispatched by no parent, so its ancestry parent MUST be null"
|
|
33358
|
+
},
|
|
33359
|
+
{
|
|
33360
|
+
"section": "spec/v2/core/runs.md §Fork",
|
|
33361
|
+
"requirement": "the fork's lineage is carried by the 201: sourceRunId MUST name the source"
|
|
33362
|
+
},
|
|
33363
|
+
{
|
|
33364
|
+
"section": "spec/v2/core/runs.md §Diff and ancestry",
|
|
33365
|
+
"requirement": null,
|
|
33366
|
+
"interpolated": true
|
|
33367
|
+
},
|
|
33368
|
+
{
|
|
33369
|
+
"section": "spec/v2/core/runs.md §Diff and ancestry",
|
|
33370
|
+
"requirement": null,
|
|
33371
|
+
"interpolated": true
|
|
33372
|
+
}
|
|
33373
|
+
]
|
|
33374
|
+
},
|
|
33162
33375
|
{
|
|
33163
33376
|
"id": "openwop.it.v2-run-fork-prefix.a-replay-fork-inherits-exactly-0-fromseq-the-event-at-fromseq-is-re-executed-nev",
|
|
33164
33377
|
"file": "v2-run-fork-prefix.test.ts",
|
|
@@ -34435,7 +34648,7 @@
|
|
|
34435
34648
|
{
|
|
34436
34649
|
"id": "openwop.it.v2-webhook-secret-rotation.a-rotation-dual-signs-for-overlapseconds-keeps-openwop-signature-on-the-previous",
|
|
34437
34650
|
"file": "v2-webhook-secret-rotation.test.ts",
|
|
34438
|
-
"line":
|
|
34651
|
+
"line": 76,
|
|
34439
34652
|
"title": "a rotation dual-signs for overlapSeconds, keeps OpenWOP-Signature on the previous secret, and is tenant-checked",
|
|
34440
34653
|
"explicitId": "openwop.requirement.0201.secret-rotation",
|
|
34441
34654
|
"citations": [
|
package/scenario-majors.json
CHANGED
|
@@ -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":
|
|
4
|
+
"files": 573,
|
|
5
5
|
"v1": 452,
|
|
6
|
-
"v2":
|
|
6
|
+
"v2": 136
|
|
7
7
|
},
|
|
8
8
|
"majors": {
|
|
9
9
|
"a2a-1-0-agent-card.test.ts": [
|
|
@@ -1287,6 +1287,9 @@
|
|
|
1287
1287
|
"v2-advertised-path-space-served.test.ts": [
|
|
1288
1288
|
2
|
|
1289
1289
|
],
|
|
1290
|
+
"v2-agent-org-chart-served-shape.test.ts": [
|
|
1291
|
+
2
|
|
1292
|
+
],
|
|
1290
1293
|
"v2-approval-reject-disposition.test.ts": [
|
|
1291
1294
|
2
|
|
1292
1295
|
],
|
|
@@ -1518,6 +1521,9 @@
|
|
|
1518
1521
|
"v2-relaxation-recorded.test.ts": [
|
|
1519
1522
|
2
|
|
1520
1523
|
],
|
|
1524
|
+
"v2-replay-suppression-ordinal.test.ts": [
|
|
1525
|
+
2
|
|
1526
|
+
],
|
|
1521
1527
|
"v2-revocation-honored.test.ts": [
|
|
1522
1528
|
2
|
|
1523
1529
|
],
|
|
@@ -1536,6 +1542,9 @@
|
|
|
1536
1542
|
"v2-run-diff-identical.test.ts": [
|
|
1537
1543
|
2
|
|
1538
1544
|
],
|
|
1545
|
+
"v2-run-fork-ancestry.test.ts": [
|
|
1546
|
+
2
|
|
1547
|
+
],
|
|
1539
1548
|
"v2-run-fork-prefix.test.ts": [
|
|
1540
1549
|
2
|
|
1541
1550
|
],
|