fix(rm-02): narrow inventory drift guarantee
ci/woodpecker/pr/ci Pipeline was successful

This commit is contained in:
2026-08-01 15:09:57 -05:00
parent c5b0d510d7
commit e910a45ab3
13 changed files with 203 additions and 38 deletions
+58 -4
View File
@@ -44,7 +44,8 @@
"hook-pre-commit/lint-staged-failure",
"hook-pre-push/typecheck-failure",
"checkout-preflight/history-provenance-exclusion",
"checkout-preflight/inventory-source-and-manifest-shrink"
"checkout-preflight/inventory-source-and-manifest-shrink",
"checkout-preflight/inventory-claim-overstatement"
]
},
{
@@ -303,13 +304,23 @@
{
"id": "RM02-NONEMPTY-ANCHORED-QUANTIFICATION",
"originalText": "No universally quantified registry check runs until its population is proven non-empty and anchored.",
"currentText": "No universally quantified registry check runs until its population is proven non-empty and anchored.",
"currentText": "No universally quantified registry check runs over an empty population. Detects accidental and incompetent inventory drift within a checkout; does NOT survive an adversary who rewrites baseline, manifest, and verifier consistently — that guarantee requires RM-60's external boundary.",
"claimType": "integrity",
"source": "docs/remediation/TASKS.md#d-46",
"meaningChanges": [],
"meaningChanges": [
{
"originalText": "No universally quantified registry check runs until its population is proven non-empty and anchored.",
"restatement": "No universally quantified registry check runs over an empty population. Detects accidental and incompetent inventory drift within a checkout; does NOT survive an adversary who rewrites baseline, manifest, and verifier consistently — that guarantee requires RM-60's external boundary.",
"reason": "D-48/CWE-353 established that a same-checkout baseline detects drift but is not an adversarial trust anchor.",
"finding": "D-48",
"task": "RM-60",
"date": "2026-08-01"
}
],
"caseRefs": [
"checkout-preflight/empty-registry-populations",
"checkout-preflight/inventory-source-and-manifest-shrink"
"checkout-preflight/inventory-source-and-manifest-shrink",
"checkout-preflight/inventory-claim-overstatement"
],
"gateRefs": [
"quality-typecheck",
@@ -362,6 +373,11 @@
"id": "CRITERION-RESTATEMENT",
"criterionId": "RM02-MEANING-PROVENANCE",
"caseRef": "checkout-preflight/missing-meaning-provenance"
},
{
"id": "INVENTORY-DRIFT-BOUNDARY",
"criterionId": "RM02-NONEMPTY-ANCHORED-QUANTIFICATION",
"caseRef": "checkout-preflight/inventory-claim-overstatement"
}
],
"compatibilityScenarios": [
@@ -1004,6 +1020,44 @@
"evidence": {
"subject": "checkout-preflight"
}
},
{
"id": "inventory-claim-overstatement",
"criterionIds": ["RM02-CHECK-RIGHT", "RM02-NONEMPTY-ANCHORED-QUANTIFICATION"],
"mustFail": true,
"invocation": ["node", "scripts/gate-inventory-claim-control.mjs"],
"required": {
"exitCode": 84,
"outputPattern": "INVENTORY_CLAIM_OVERSTATED"
},
"actual": {
"exitCode": 84,
"outputPattern": "INVENTORY_CLAIM_OVERSTATED"
},
"reasonPattern": "INVENTORY_CLAIM_OVERSTATED",
"fixture": {
"copyPaths": [
"scripts/gate-inventory-claim-control.mjs",
"gates/required-gates.baseline.json",
"gates/gates.manifest.json",
"docs/PRD.md",
"docs/ADMIN-GUIDE/quality-gate-registry.md",
"docs/DEVELOPER-GUIDE/quality-gate-registry.md",
"docs/remediation/GATE-CLAIMS.md",
"docs/plans/2026-08-01-rm-02-gate-registry.md",
"docs/SITEMAP.md"
],
"replaceFiles": [
{
"path": "gates/required-gates.baseline.json",
"find": "Detects accidental and incompetent inventory drift within a checkout; does NOT survive an adversary who rewrites baseline, manifest, and verifier consistently — that guarantee requires RM-60's external boundary.",
"replace": "Provides an independent seven-gate baseline comparison."
}
]
},
"evidence": {
"subject": "checkout-preflight"
}
}
]
},
+25 -7
View File
@@ -1,16 +1,34 @@
{
"schemaVersion": 1,
"purpose": "Independent required-gate population baseline; manifest and verifier inventory must both match.",
"purpose": "Detects accidental and incompetent inventory drift within a checkout; does NOT survive an adversary who rewrites baseline, manifest, and verifier consistently — that guarantee requires RM-60's external boundary.",
"gates": [
{ "id": "quality-typecheck", "source": "package.json" },
{ "id": "quality-lint", "source": "package.json" },
{ "id": "quality-format", "source": "package.json" },
{ "id": "checkout-preflight", "source": "scripts/preflight.mjs" },
{
"id": "quality-typecheck",
"source": "package.json"
},
{
"id": "quality-lint",
"source": "package.json"
},
{
"id": "quality-format",
"source": "package.json"
},
{
"id": "checkout-preflight",
"source": "scripts/preflight.mjs"
},
{
"id": "ci-queue-wait",
"source": "packages/mosaic/framework/tools/git/ci-queue-wait.sh"
},
{ "id": "hook-pre-commit", "source": ".husky/pre-commit" },
{ "id": "hook-pre-push", "source": ".husky/pre-push" }
{
"id": "hook-pre-commit",
"source": ".husky/pre-commit"
},
{
"id": "hook-pre-push",
"source": ".husky/pre-push"
}
]
}