fix(quality): record current-tree trust boundary
This commit is contained in:
@@ -77,6 +77,23 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "RM02-CURRENT-TREE-BOUNDARY",
|
||||
"originalText": "assert that every merged commit passed every required gate, evaluated AGAINST THAT COMMIT'S OWN TREE — not against current main.",
|
||||
"currentText": "PR CI performs unprivileged, fail-closed current-tree verification only; isolated per-commit replay is deferred to RM-60's protected post-merge/main authority as detection with quarantine/revert, not pre-merge prevention.",
|
||||
"claimType": "security",
|
||||
"source": "docs/PRD.md#rm02-req-10-meaning-change-provenance",
|
||||
"meaningChanges": [
|
||||
{
|
||||
"originalText": "assert that every merged commit passed every required gate, evaluated AGAINST THAT COMMIT'S OWN TREE — not against current main.",
|
||||
"restatement": "PR CI performs unprivileged, fail-closed current-tree verification only; isolated per-commit replay is deferred to a protected post-merge/main authority as detection with quarantine/revert, not pre-merge prevention.",
|
||||
"reason": "PR-controlled code would otherwise receive and could directly use the namespace capability intended to contain it; the pre-execution trust boundary is absent at the repository layer.",
|
||||
"finding": "D-25",
|
||||
"task": "RM-60/RM-59",
|
||||
"date": "2026-08-01"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "QUALITY-TYPECHECK",
|
||||
"originalText": "The root typecheck rejects a TypeScript type error.",
|
||||
@@ -194,6 +211,10 @@
|
||||
"id": "GENERATED-STATE-SCOPE",
|
||||
"criterionId": "CHECKOUT-PREFLIGHT"
|
||||
},
|
||||
{
|
||||
"id": "EXECUTION-TRUST-BOUNDARY",
|
||||
"criterionId": "RM02-CURRENT-TREE-BOUNDARY"
|
||||
},
|
||||
{
|
||||
"id": "CRITERION-RESTATEMENT",
|
||||
"criterionId": "RM02-MEANING-PROVENANCE"
|
||||
@@ -235,9 +256,11 @@
|
||||
}
|
||||
],
|
||||
"mergeAssertions": {
|
||||
"mode": "prospective-first-parent-replay",
|
||||
"trustDependencies": ["RM-25", "RM-59"],
|
||||
"providerEvidence": "assert retained terminal-success records for prior commits; report absent, expired, or current-running evidence without inference"
|
||||
"mode": "unprivileged-current-tree-pr-verification",
|
||||
"deferredReplayOwner": "RM-60",
|
||||
"trustDependencies": ["RM-25", "RM-59", "RM-60"],
|
||||
"providerEvidence": "assert retained current-tree terminal-success records for prior commits; report absent, expired, or current-running evidence without inference",
|
||||
"postMergeResponse": "protected isolated replay is detection, not prevention; quarantine and revert on failure"
|
||||
},
|
||||
"gates": [
|
||||
{
|
||||
@@ -471,6 +494,31 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "privileged-pr-gate",
|
||||
"criterionIds": ["RM02-CURRENT-TREE-BOUNDARY"],
|
||||
"mustFail": true,
|
||||
"invocation": ["node", "--test", "scripts/gate-wiring.test.mjs"],
|
||||
"required": {
|
||||
"exitCode": 1,
|
||||
"outputPattern": "privileged"
|
||||
},
|
||||
"actual": {
|
||||
"exitCode": 1,
|
||||
"outputPattern": "privileged"
|
||||
},
|
||||
"reasonPattern": "privileged",
|
||||
"fixture": {
|
||||
"copyPaths": [".woodpecker/ci.yml", "scripts/gate-wiring.test.mjs", "package.json"],
|
||||
"replaceFiles": [
|
||||
{
|
||||
"path": ".woodpecker/ci.yml",
|
||||
"find": " gate-verify:\n image: *node_image\n",
|
||||
"replace": " gate-verify:\n image: *node_image\n privileged: true\n"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user