From c64ec659e74ce44debf82903234428e04b371833 Mon Sep 17 00:00:00 2001 From: sechmachine <97589681+sechmachine727@users.noreply.github.com> Date: Sat, 15 Aug 2026 14:57:48 +0700 Subject: [PATCH] test: record complete repair workflow validation --- .../unit/fix-branch-workflow-documentation.md | 71 +++++++++++++++---- 1 file changed, 59 insertions(+), 12 deletions(-) diff --git a/docs/tests/unit/fix-branch-workflow-documentation.md b/docs/tests/unit/fix-branch-workflow-documentation.md index a1c5468..34f06ae 100644 --- a/docs/tests/unit/fix-branch-workflow-documentation.md +++ b/docs/tests/unit/fix-branch-workflow-documentation.md @@ -9,6 +9,7 @@ - **Round-2 all-guide regression commit:** `97e991317d55db4f7414678a89a45921802a14b8` - **Round-2 coordination-authority commit:** `9802d5d17f5c07511e1f9cf59ace4b7e48fcdc0e` - **Round-2 plan-contract commit:** `f98e7f39ef38c7882106ffb250155d2a72dcf0dd` +- **Round-3 complete-workflow commit:** `445e4fedeb0e06724b876c5731437d2c355cacb2` ## Protected behavior @@ -16,18 +17,22 @@ Targeted repairs use the realizable `work/fix//` branch and clean worktree from taskmaster-verified `main`. Contributor guidance must reject the impossible `work//fix/` form while persistent `work/` refs exist. The tracked copies of root coordination authority -must use the same rule. +must use the same rule. Every targeted-fix guide must also require the complete +lifecycle: latest `main`, TDD RED → GREEN, Javadoc during implementation, +companion evidence, independent review, and an authorized normal, non-force +merge. ## Test method Use the tracked Node validator rather than an artificial Java test. It requires -the exact approved statement in each of the six guides. Its self-test creates a -fresh positive nested-branch mutation for every guide and asserts the -file-specific rejection each time. The copied root coordination files are -compared byte-for-byte with their main-root sources and checked for their exact -approved rules. The original RED proves the required branch name was absent -from the four contributor guides; the first review-fix RED proves the -executable regression was absent. +the exact approved branch statement and complete targeted-repair lifecycle in +each of the six guides. Its self-test independently removes each of the six +lifecycle elements from every guide and asserts the file-specific rejection. It +also retains a fresh positive nested-branch mutation for every guide. The copied +root coordination files are compared byte-for-byte with their main-root sources +and checked for their exact approved rules. The original RED proves the +required branch name was absent from the four contributor guides; the first +review-fix RED proves the executable regression was absent. ## Hand-derived expected result @@ -35,8 +40,9 @@ The required fix-branch spelling appears exactly once in each of the six tracked documentation artifacts, and the only nested-form reference is inside that artifact's exact approved statement. Each independent simulated positive nested-branch recommendation must fail. The three tracked coordination files -must exactly match the authorized main-root versions. The existing SRS generator -must still report 260 requirements and 14 use cases. +must exactly match the authorized main-root versions. Loss of any lifecycle +element from any guide must fail. The existing SRS generator must still report +260 requirements and 14 use cases. ## RED @@ -91,6 +97,29 @@ The prior self-test reported only a singular rejection and mutated only `AGENTS.md`; it did not prove an independent rejection for each of the six guides. +### Round-3 RED + +**Command** + +```text +node --check scripts/verify-fix-branch-workflow.cjs +node scripts/verify-fix-branch-workflow.cjs --self-test +``` + +**Observed result** + +```text +exit 1 +Error: AGENTS.md must contain the complete required targeted-repair workflow exactly once +README.md must contain the complete required targeted-repair workflow exactly once +DEVELOPMENT.md must contain the complete required targeted-repair workflow exactly once +TESTING.md must contain the complete required targeted-repair workflow exactly once +docs/superpowers/specs/2026-08-15-access-navigation-icon-intern-picker-design.md must contain the complete required targeted-repair workflow exactly once +docs/superpowers/plans/2026-08-15-access-navigation-icon-intern-picker.md must contain the complete required targeted-repair workflow exactly once +``` + +The six guides had branch naming but not the complete lifecycle contract. + ## Initial GREEN **Command** @@ -122,6 +151,23 @@ Fix-branch workflow documentation: 6 approved statements validated Positive nested branch recommendations: 6/6 rejected ``` +### Round-3 GREEN + +**Command** + +```text +node --check scripts/verify-fix-branch-workflow.cjs +node scripts/verify-fix-branch-workflow.cjs --self-test +``` + +**Observed result** + +```text +Fix-branch workflow documentation: 6 approved statements validated +Targeted-repair workflow element removals: 36/36 rejected +Positive nested branch recommendations: 6/6 rejected +``` + ## Affected suite **Command and result** @@ -131,7 +177,7 @@ node labtimesheet-docs-hub/ui-mockups/build-srs.cjs node -e 'const fs=require("node:fs"); const checks=[["authoritative","labtimesheet-docs-hub/requirements-specification.md",/^\| ([A-Z]{2,4}-\d{3}) \|/gm],["explained","labtimesheet-docs-hub/explained/requirements-specification.md",/^\| ([A-Z]{2,4}-\d{3}) \|/gm],["simple","labtimesheet-docs-hub/explained/requirements-specification-simple.md",/^- \*\*([A-Z]{2,4}-\d{3}):\*\*/gm],["generated SRS","labtimesheet-docs-hub/software-requirements-specification.md",/^\| ([A-Z]{2,4}-\d{3}) \|/gm]]; for (const [name,file,pattern] of checks) { const ids=[...fs.readFileSync(file,"utf8").matchAll(pattern)].map(match=>match[1]); if (ids.length !== 260 || new Set(ids).size !== 260) throw new Error(`${name}: ${ids.length} rows, ${new Set(ids).size} unique`); console.log(`${name}: ${ids.length} rows, ${new Set(ids).size} unique IDs`); } const srs=fs.readFileSync("labtimesheet-docs-hub/software-requirements-specification.md","utf8"); const useCases=(srs.match(/^### 5\.\d+ UC-\d{2} —/gm)||[]).length; if (useCases !== 14) throw new Error(`SRS use cases: ${useCases}`); console.log(`generated SRS: ${useCases} use cases`);' node -e 'const fs=require("node:fs"); const path=require("node:path"); let checked=0; const broken=[]; for (const file of process.argv.slice(1)) { const text=fs.readFileSync(file,"utf8"); for (const match of text.matchAll(/!?\[[^\]]*\]\(([^)]+)\)/g)) { const target=match[1].trim().replace(/^<|>$/g,"").split("#")[0].split("?")[0]; if (!target || /^[a-z][a-z0-9+.-]*:/i.test(target) || target.startsWith("//")) continue; checked += 1; if (!fs.existsSync(path.resolve(path.dirname(file), decodeURIComponent(target)))) broken.push(`${file}: ${target}`); } } if (broken.length) throw new Error(`Broken local Markdown links:\n${broken.join("\n")}`); console.log(`Local Markdown links: ${checked} resolved`);' AGENTS.md README.md DEVELOPMENT.md TESTING.md docs/superpowers/specs/2026-08-15-access-navigation-icon-intern-picker-design.md docs/superpowers/plans/2026-08-15-access-navigation-icon-intern-picker.md docs/tests/unit/fix-branch-workflow-documentation.md cmp -s .agents/PROJECT_PLAN.md /Users/sechmachine/Documents/WebProjects/labtimesheet/.agents/PROJECT_PLAN.md && cmp -s .agents/skills/orchestrate-labtimesheet-iteration/SKILL.md /Users/sechmachine/Documents/WebProjects/labtimesheet/.agents/skills/orchestrate-labtimesheet-iteration/SKILL.md && cmp -s PRODUCT.md /Users/sechmachine/Documents/WebProjects/labtimesheet/PRODUCT.md && node -e 'const fs=require("node:fs"); const files=[".agents/PROJECT_PLAN.md",".agents/skills/orchestrate-labtimesheet-iteration/SKILL.md","PRODUCT.md"]; const forms=["work/fix//","work//fix/"]; for (const file of files) { const text=fs.readFileSync(file,"utf8"); for (const form of forms) { if (text.split(form).length !== 2) throw new Error(file+": expected one "+form); } } console.log("Root coordination authority: "+files.length+" approved branch rules match exactly");' -git diff --check 8be1b754e188367b260981718a5d33fc2d4d8a3b f98e7f39ef38c7882106ffb250155d2a72dcf0dd +git diff --check 8be1b754e188367b260981718a5d33fc2d4d8a3b 445e4fedeb0e06724b876c5731437d2c355cacb2 ``` The SRS regeneration and count assertion ran from the main root because the @@ -149,10 +195,11 @@ simple: 260 rows, 260 unique IDs generated SRS: 260 rows, 260 unique IDs generated SRS: 14 use cases Fix-branch workflow documentation: 6 approved statements validated +Targeted-repair workflow element removals: 36/36 rejected Positive nested branch recommendations: 6/6 rejected Root coordination authority: 3 approved branch rules match exactly Local Markdown links: 7 resolved -git diff --check 8be1b754e188367b260981718a5d33fc2d4d8a3b f98e7f39ef38c7882106ffb250155d2a72dcf0dd: exit 0 +git diff --check 8be1b754e188367b260981718a5d33fc2d4d8a3b 445e4fedeb0e06724b876c5731437d2c355cacb2: exit 0 ``` ## External-test boundaries