diff --git a/.changeset/expand-tilde-review-2352.md b/.changeset/expand-tilde-review-2352.md new file mode 100644 index 000000000..7a4edc628 --- /dev/null +++ b/.changeset/expand-tilde-review-2352.md @@ -0,0 +1,5 @@ +--- +type: Fixed +pr: 2419 +--- +**`/code-review` no longer skips a phase whose SUMMARY.md records `~/`-prefixed file paths** — such a path was silently dropped as "deleted" (bash never tilde-expands a `~` that arrives as a variable's value), emptying the review scope and reporting "no source files changed" as a false success. Tilde paths are now expanded to `$HOME/…` before the deleted-file filter runs. diff --git a/gsd-core/workflows/code-review.md b/gsd-core/workflows/code-review.md index a559cd74a..f64157439 100644 --- a/gsd-core/workflows/code-review.md +++ b/gsd-core/workflows/code-review.md @@ -247,7 +247,19 @@ fi **Post-processing (all tiers):** -1. **Apply exclusions (per D-03):** Remove paths matching planning artifacts +1. **Expand tilde paths:** SUMMARY.md `key-files` entries may record a `~/...`-prefixed path (e.g. `~/.claude/gsd-core/workflows/verify-phase.md`). Bash only tilde-expands a literal `~` written in source text, never one arriving as the value of an already-expanded variable, so every later `[ -f "$file" ]` check must see a real, expanded path or it misclassifies the file as deleted. +```bash +EXPANDED_FILES=() +for file in "${REVIEW_FILES[@]}"; do + case "$file" in + "~/"*) file="${HOME}${file#\~}" ;; + esac + EXPANDED_FILES+=("$file") +done +REVIEW_FILES=("${EXPANDED_FILES[@]}") +``` + +2. **Apply exclusions (per D-03):** Remove paths matching planning artifacts ```bash FILTERED_FILES=() for file in "${REVIEW_FILES[@]}"; do @@ -265,7 +277,7 @@ done REVIEW_FILES=("${FILTERED_FILES[@]}") ``` -2. **Filter deleted files:** Remove paths that don't exist on disk +3. **Filter deleted files:** Remove paths that don't exist on disk ```bash EXISTING_FILES=() DELETED_COUNT=0 @@ -283,7 +295,7 @@ if [ $DELETED_COUNT -gt 0 ]; then fi ``` -3. **Deduplicate:** Remove duplicate paths (portable — bash 3.2+ compatible, handles spaces in paths) +4. **Deduplicate:** Remove duplicate paths (portable — bash 3.2+ compatible, handles spaces in paths) ```bash DEDUPED=() while IFS= read -r line; do @@ -292,7 +304,7 @@ done < <(printf '%s\n' "${REVIEW_FILES[@]}" | sort -u) REVIEW_FILES=("${DEDUPED[@]}") ``` -4. **Sort:** Alphabetical sort for reproducible agent input (already sorted by sort -u above) +5. **Sort:** Alphabetical sort for reproducible agent input (already sorted by sort -u above) **Log final scope and warn if large:** ```bash diff --git a/tests/code-review-pipeline-regression.test.cjs b/tests/code-review-pipeline-regression.test.cjs index 5da330a84..8b55d568e 100644 --- a/tests/code-review-pipeline-regression.test.cjs +++ b/tests/code-review-pipeline-regression.test.cjs @@ -25,6 +25,8 @@ const { describe, test } = require('node:test'); const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); +const { spawnSync } = require('node:child_process'); +const { createTempDir, cleanup } = require('./helpers.cjs'); const ROOT = path.resolve(__dirname, '..'); const WORKFLOW_PATH = path.join(ROOT, 'gsd-core', 'workflows', 'code-review.md'); @@ -347,3 +349,184 @@ describe('Reviewer contract — gsd-code-reviewer.md label-equivalence', () => { ); }); }); + +// --------------------------------------------------------------------------- +// BUG 4 (#2352) — compute_file_scope must tilde-expand `~/...`-prefixed +// SUMMARY.md key-files entries BEFORE the "Filter deleted files" existence +// check. Bash only tilde-expands a literal `~` written in source text, never +// one arriving as the value of an already-expanded variable — so a real file +// recorded as `~/.claude/gsd-core/workflows/verify-phase.md` was silently +// misclassified as deleted and dropped from REVIEW_FILES, and a phase whose +// every recorded file used a `~/...` path hit the empty-scope skip +// ("No source files changed ... Skipping review.") as a false negative. +// +// Tested both ways: a docs-parity assertion (cross-platform, pure fs read) +// that the normalization block exists in the deployed workflow text, and a +// behavioral test that extracts the actual "Expand tilde paths" + +// "Filter deleted files" bash blocks from code-review.md and executes them +// via a real bash subprocess against planted files under a fresh HOME. +// --------------------------------------------------------------------------- +describe('Bug 4 (#2352) — compute_file_scope tilde-path expansion', () => { + // Docs-parity: the workflow .md must contain the tilde-normalization block + // as step 1 of "Post-processing (all tiers)", ahead of the deleted-file + // filter, so what we behaviorally test below is what is actually deployed. + test('code-review.md contains a tilde-expansion block ahead of the deleted-file filter', () => { + const src = fs.readFileSync(WORKFLOW_PATH, 'utf8'); + const postProcessingIdx = src.indexOf('**Post-processing (all tiers):**'); + assert.ok(postProcessingIdx !== -1, 'code-review.md must have a "Post-processing (all tiers)" section'); + + const expandIdx = src.indexOf('EXPANDED_FILES=()', postProcessingIdx); + assert.ok(expandIdx !== -1, 'Post-processing must contain an EXPANDED_FILES=() tilde-expansion loop'); + + const caseIdx = src.indexOf('case "$file" in', postProcessingIdx); + assert.ok(caseIdx !== -1 && caseIdx < expandIdx + 400, 'tilde-expansion loop must use a case "$file" in match'); + assert.ok( + src.slice(caseIdx, caseIdx + 200).includes('"~/"*)') && + src.slice(caseIdx, caseIdx + 200).includes('${HOME}${file#\\~}'), + 'tilde-expansion loop must rewrite a leading ~/ to ${HOME}/... via ${file#\\~}' + ); + + const deletedFilterIdx = src.indexOf('DELETED_COUNT=0', postProcessingIdx); + assert.ok(deletedFilterIdx !== -1, 'Post-processing must still contain the deleted-file filter'); + assert.ok( + expandIdx < deletedFilterIdx, + 'tilde-expansion loop must run BEFORE the deleted-file filter, not after' + ); + }); + + // Extract the tilde-expansion fence and the (non-adjacent — the exclusions + // filter sits between them) deleted-file-filter fence from the + // "Post-processing (all tiers)" section of code-review.md — the exact + // snippets the runtime executes, located by content anchor rather than + // position so an intervening step doesn't silently swap in the wrong + // block — and glue them behind a synthetic REVIEW_FILES=("$@") seed for + // direct execution. The exclusions filter itself is intentionally skipped + // here: it only matches relative planning-artifact paths and is orthogonal + // to tilde expansion (see code-review.md step 2, "Apply exclusions"). + function extractPostProcessingScript() { + const src = fs.readFileSync(WORKFLOW_PATH, 'utf8'); + const postProcessingIdx = src.indexOf('**Post-processing (all tiers):**'); + assert.ok(postProcessingIdx !== -1, 'code-review.md must have a "Post-processing (all tiers)" section'); + + function fenceContaining(marker) { + const markerIdx = src.indexOf(marker, postProcessingIdx); + assert.ok(markerIdx !== -1, `expected to find "${marker}" in the Post-processing section`); + const fenceStart = src.lastIndexOf('```bash', markerIdx); + assert.ok(fenceStart !== -1 && fenceStart > postProcessingIdx, `no \`\`\`bash fence before "${marker}"`); + const bodyStart = src.indexOf('\n', fenceStart) + 1; + const fenceEnd = src.indexOf('\n```', bodyStart); + assert.ok(fenceEnd !== -1, `unterminated \`\`\`bash fence containing "${marker}"`); + return src.slice(bodyStart, fenceEnd); + } + + const tildeBlock = fenceContaining('EXPANDED_FILES=()'); + const deletedBlock = fenceContaining('DELETED_COUNT=0'); + + return [ + 'REVIEW_FILES=("$@")', + tildeBlock, + deletedBlock, + 'printf "%s\\n" "${REVIEW_FILES[@]}"', + 'echo "REVIEW_FILES_COUNT=${#REVIEW_FILES[@]}"', + 'echo "DELETED_COUNT=$DELETED_COUNT"', + ].join('\n'); + } + + function runPostProcessing(homeDir, files) { + const script = extractPostProcessingScript(); + // "bash" as $0 so the real REVIEW_FILES entries land in "$@" from $1. + return spawnSync('bash', ['-c', script, 'bash', ...files], { + encoding: 'utf8', + env: { ...process.env, HOME: homeDir }, + }); + } + + let tmpHome; + + test('setup: plant a fresh HOME with a real file', { skip: process.platform === 'win32' }, () => { + tmpHome = createTempDir('gsd-2352-home-'); + fs.mkdirSync(path.join(tmpHome, '.claude', 'gsd-core', 'workflows'), { recursive: true }); + fs.writeFileSync( + path.join(tmpHome, '.claude', 'gsd-core', 'workflows', 'verify-phase.md'), + '# real file\n', + 'utf8' + ); + }); + + test( + 'AC1: a ~/-prefixed path to a real file survives and is not counted deleted', + { skip: process.platform === 'win32' }, + () => { + const result = runPostProcessing(tmpHome, ['~/.claude/gsd-core/workflows/verify-phase.md']); + assert.equal(result.status, 0, `snippet exited ${result.status}; stderr=${result.stderr}`); + assert.match( + result.stdout, + new RegExp(path.join(tmpHome, '.claude', 'gsd-core', 'workflows', 'verify-phase.md').replace(/[/\\.]/g, '\\$&')), + `expected expanded absolute path in surviving REVIEW_FILES; got: ${JSON.stringify(result.stdout)}` + ); + assert.match(result.stdout, /DELETED_COUNT=0/, `expected DELETED_COUNT=0; got: ${JSON.stringify(result.stdout)}`); + assert.match( + result.stdout, + /REVIEW_FILES_COUNT=1/, + `expected the tilde path to survive into REVIEW_FILES; got: ${JSON.stringify(result.stdout)}` + ); + } + ); + + test( + 'AC2: a ~/-prefixed path to a non-existent file is still correctly excluded as deleted', + { skip: process.platform === 'win32' }, + () => { + const result = runPostProcessing(tmpHome, ['~/.claude/gsd-core/workflows/does-not-exist.md']); + assert.equal(result.status, 0, `snippet exited ${result.status}; stderr=${result.stderr}`); + assert.match(result.stdout, /DELETED_COUNT=1/, `expected DELETED_COUNT=1; got: ${JSON.stringify(result.stdout)}`); + assert.match( + result.stdout, + /REVIEW_FILES_COUNT=0/, + `expected the missing tilde path to be dropped; got: ${JSON.stringify(result.stdout)}` + ); + } + ); + + test( + 'AC3: a phase where every recorded file is a real ~/-prefixed path does not empty the scope', + { skip: process.platform === 'win32' }, + () => { + const result = runPostProcessing(tmpHome, ['~/.claude/gsd-core/workflows/verify-phase.md']); + assert.equal(result.status, 0, `snippet exited ${result.status}; stderr=${result.stderr}`); + const countMatch = result.stdout.match(/REVIEW_FILES_COUNT=(\d+)/); + assert.ok(countMatch, `expected a REVIEW_FILES_COUNT line; got: ${JSON.stringify(result.stdout)}`); + assert.ok( + Number(countMatch[1]) > 0, + 'an all-tilde real-file scope must not reduce to zero (would trigger the empty-scope skip)' + ); + } + ); + + test( + 'AC4: mixed tilde + missing ordinary relative path resolve independently', + { skip: process.platform === 'win32' }, + () => { + const result = runPostProcessing(tmpHome, [ + '~/.claude/gsd-core/workflows/verify-phase.md', + 'this/relative/path/does-not-exist.md', + ]); + assert.equal(result.status, 0, `snippet exited ${result.status}; stderr=${result.stderr}`); + assert.match(result.stdout, /DELETED_COUNT=1/, `expected exactly 1 deleted; got: ${JSON.stringify(result.stdout)}`); + assert.match( + result.stdout, + /REVIEW_FILES_COUNT=1/, + `expected only the tilde path to survive; got: ${JSON.stringify(result.stdout)}` + ); + assert.doesNotMatch( + result.stdout, + /this\/relative\/path\/does-not-exist\.md/, + 'the missing ordinary relative path must not survive into REVIEW_FILES' + ); + } + ); + + test('teardown: remove the temp HOME', { skip: process.platform === 'win32' }, () => { + cleanup(tmpHome); + }); +}); diff --git a/tests/fixtures/golden-install-parity/antigravity.json b/tests/fixtures/golden-install-parity/antigravity.json index 0c748ea85..66ab42b72 100644 --- a/tests/fixtures/golden-install-parity/antigravity.json +++ b/tests/fixtures/golden-install-parity/antigravity.json @@ -217,7 +217,7 @@ "gsd-core/workflows/check-todos.md": "5a62092df800ad7c", "gsd-core/workflows/cleanup.md": "12c8fd85d3010fe6", "gsd-core/workflows/code-review-fix.md": "60640e633b0a124b", - "gsd-core/workflows/code-review.md": "5c40505c01871153", + "gsd-core/workflows/code-review.md": "2d9943e121908327", "gsd-core/workflows/complete-milestone.md": "aaf272074acec69d", "gsd-core/workflows/debug.md": "0b802b267d0ca2d1", "gsd-core/workflows/diagnose-issues.md": "c8c41993c277363c", diff --git a/tests/fixtures/golden-install-parity/augment.json b/tests/fixtures/golden-install-parity/augment.json index 2d7c287d1..97a754e3c 100644 --- a/tests/fixtures/golden-install-parity/augment.json +++ b/tests/fixtures/golden-install-parity/augment.json @@ -288,7 +288,7 @@ "gsd-core/workflows/check-todos.md": "bdeaf43f9c61e0cc", "gsd-core/workflows/cleanup.md": "0daa2f2720c111f1", "gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075", - "gsd-core/workflows/code-review.md": "334c90c401f291f8", + "gsd-core/workflows/code-review.md": "2aa1957579f50a87", "gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2", "gsd-core/workflows/debug.md": "98c8ed5af882ef8f", "gsd-core/workflows/diagnose-issues.md": "6cc3900891dfb927", diff --git a/tests/fixtures/golden-install-parity/claude-local.json b/tests/fixtures/golden-install-parity/claude-local.json index b4587b6d0..2ad1bf130 100644 --- a/tests/fixtures/golden-install-parity/claude-local.json +++ b/tests/fixtures/golden-install-parity/claude-local.json @@ -287,7 +287,7 @@ "gsd-core/workflows/check-todos.md": "8f2c6b27f18cc5e2", "gsd-core/workflows/cleanup.md": "bfbab4b981d39544", "gsd-core/workflows/code-review-fix.md": "78c716068ccdf820", - "gsd-core/workflows/code-review.md": "2d21452eb0449fdd", + "gsd-core/workflows/code-review.md": "595f0d9c7f475809", "gsd-core/workflows/complete-milestone.md": "9962377cddee50d7", "gsd-core/workflows/debug.md": "80c413b3a9877433", "gsd-core/workflows/diagnose-issues.md": "db6a599674efbc4d", diff --git a/tests/fixtures/golden-install-parity/claude.json b/tests/fixtures/golden-install-parity/claude.json index c1da80a0b..e6599c290 100644 --- a/tests/fixtures/golden-install-parity/claude.json +++ b/tests/fixtures/golden-install-parity/claude.json @@ -216,7 +216,7 @@ "gsd-core/workflows/check-todos.md": "6c2a43d1d3e86589", "gsd-core/workflows/cleanup.md": "0daa2f2720c111f1", "gsd-core/workflows/code-review-fix.md": "722416b71b31c5fc", - "gsd-core/workflows/code-review.md": "506412604f767adc", + "gsd-core/workflows/code-review.md": "14682c0ba32d5dc6", "gsd-core/workflows/complete-milestone.md": "dcf1182398efb1ca", "gsd-core/workflows/debug.md": "b4c658c9608d08e2", "gsd-core/workflows/diagnose-issues.md": "75ffc381ac3059ff", diff --git a/tests/fixtures/golden-install-parity/cline.json b/tests/fixtures/golden-install-parity/cline.json index 326674cb1..e0f642aff 100644 --- a/tests/fixtures/golden-install-parity/cline.json +++ b/tests/fixtures/golden-install-parity/cline.json @@ -220,7 +220,7 @@ "gsd-core/workflows/check-todos.md": "32fdf33f5dc8bdde", "gsd-core/workflows/cleanup.md": "b0ebfc48792b407b", "gsd-core/workflows/code-review-fix.md": "e4549af672e74e6f", - "gsd-core/workflows/code-review.md": "a65e3e869508f89e", + "gsd-core/workflows/code-review.md": "2f9cacacbc862af3", "gsd-core/workflows/complete-milestone.md": "c0808127038a8f86", "gsd-core/workflows/debug.md": "870682af53182a6c", "gsd-core/workflows/diagnose-issues.md": "e616d0d730328d68", diff --git a/tests/fixtures/golden-install-parity/codebuddy.json b/tests/fixtures/golden-install-parity/codebuddy.json index a83090e61..69bae7b9e 100644 --- a/tests/fixtures/golden-install-parity/codebuddy.json +++ b/tests/fixtures/golden-install-parity/codebuddy.json @@ -288,7 +288,7 @@ "gsd-core/workflows/check-todos.md": "bdeaf43f9c61e0cc", "gsd-core/workflows/cleanup.md": "0daa2f2720c111f1", "gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075", - "gsd-core/workflows/code-review.md": "334c90c401f291f8", + "gsd-core/workflows/code-review.md": "2aa1957579f50a87", "gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2", "gsd-core/workflows/debug.md": "98c8ed5af882ef8f", "gsd-core/workflows/diagnose-issues.md": "77d98ac07c4a26ff", diff --git a/tests/fixtures/golden-install-parity/codex.json b/tests/fixtures/golden-install-parity/codex.json index 11e1a52e6..315e335bb 100644 --- a/tests/fixtures/golden-install-parity/codex.json +++ b/tests/fixtures/golden-install-parity/codex.json @@ -323,7 +323,7 @@ "gsd-core/workflows/check-todos.md": "b2b103e8638e760a", "gsd-core/workflows/cleanup.md": "5d48d64664222a3e", "gsd-core/workflows/code-review-fix.md": "ae7f9c6b39a23c12", - "gsd-core/workflows/code-review.md": "eadada9e0a89adf2", + "gsd-core/workflows/code-review.md": "8ac44419de9d2ab5", "gsd-core/workflows/complete-milestone.md": "017df7443bd08da5", "gsd-core/workflows/debug.md": "63691293c0bc0294", "gsd-core/workflows/diagnose-issues.md": "e38bb21d06dff077", diff --git a/tests/fixtures/golden-install-parity/copilot.json b/tests/fixtures/golden-install-parity/copilot.json index 77b9f6561..3df3e778d 100644 --- a/tests/fixtures/golden-install-parity/copilot.json +++ b/tests/fixtures/golden-install-parity/copilot.json @@ -218,7 +218,7 @@ "gsd-core/workflows/check-todos.md": "be9b50b5f28d7504", "gsd-core/workflows/cleanup.md": "8233b05ebf011bec", "gsd-core/workflows/code-review-fix.md": "fda53892ae4b17fc", - "gsd-core/workflows/code-review.md": "f1c045ec4d33abc8", + "gsd-core/workflows/code-review.md": "d58b02fb3a6160a8", "gsd-core/workflows/complete-milestone.md": "470cf39261400ee2", "gsd-core/workflows/debug.md": "37c900b9f6c11663", "gsd-core/workflows/diagnose-issues.md": "42acbe2a43fc886e", diff --git a/tests/fixtures/golden-install-parity/cursor.json b/tests/fixtures/golden-install-parity/cursor.json index c830ea540..71e87ade8 100644 --- a/tests/fixtures/golden-install-parity/cursor.json +++ b/tests/fixtures/golden-install-parity/cursor.json @@ -288,7 +288,7 @@ "gsd-core/workflows/check-todos.md": "1a67337d1630848f", "gsd-core/workflows/cleanup.md": "db47963f103c2748", "gsd-core/workflows/code-review-fix.md": "c57af378033b1b58", - "gsd-core/workflows/code-review.md": "32c37bcbec8b8698", + "gsd-core/workflows/code-review.md": "8d7d2de8781fb3f9", "gsd-core/workflows/complete-milestone.md": "1400a4856f592f3e", "gsd-core/workflows/debug.md": "fb9e5ecb5027b98e", "gsd-core/workflows/diagnose-issues.md": "cd582747131726e3", diff --git a/tests/fixtures/golden-install-parity/hermes.json b/tests/fixtures/golden-install-parity/hermes.json index 65467490f..4b9ac6b1a 100644 --- a/tests/fixtures/golden-install-parity/hermes.json +++ b/tests/fixtures/golden-install-parity/hermes.json @@ -217,7 +217,7 @@ "gsd-core/workflows/check-todos.md": "ea9a303c48a5d752", "gsd-core/workflows/cleanup.md": "6c488059fc152a49", "gsd-core/workflows/code-review-fix.md": "5e396494a79c3f19", - "gsd-core/workflows/code-review.md": "64a62562611f7f2b", + "gsd-core/workflows/code-review.md": "cf7735c3643d9190", "gsd-core/workflows/complete-milestone.md": "f1866541148dc291", "gsd-core/workflows/debug.md": "a8132ea4480a4730", "gsd-core/workflows/diagnose-issues.md": "385096674965c043", diff --git a/tests/fixtures/golden-install-parity/kilo.json b/tests/fixtures/golden-install-parity/kilo.json index 670eb83cf..a9b3f9651 100644 --- a/tests/fixtures/golden-install-parity/kilo.json +++ b/tests/fixtures/golden-install-parity/kilo.json @@ -288,7 +288,7 @@ "gsd-core/workflows/check-todos.md": "ed4b4eb12be222d7", "gsd-core/workflows/cleanup.md": "c5f1bf186395d67d", "gsd-core/workflows/code-review-fix.md": "722416b71b31c5fc", - "gsd-core/workflows/code-review.md": "506412604f767adc", + "gsd-core/workflows/code-review.md": "14682c0ba32d5dc6", "gsd-core/workflows/complete-milestone.md": "59753bf44d4300da", "gsd-core/workflows/debug.md": "e88c2d430c3625b6", "gsd-core/workflows/diagnose-issues.md": "210b5b313e8a559a", diff --git a/tests/fixtures/golden-install-parity/kimi.json b/tests/fixtures/golden-install-parity/kimi.json index 3b964e019..5d90eb2bf 100644 --- a/tests/fixtures/golden-install-parity/kimi.json +++ b/tests/fixtures/golden-install-parity/kimi.json @@ -281,7 +281,7 @@ "gsd-core/workflows/check-todos.md": "bdeaf43f9c61e0cc", "gsd-core/workflows/cleanup.md": "0daa2f2720c111f1", "gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075", - "gsd-core/workflows/code-review.md": "334c90c401f291f8", + "gsd-core/workflows/code-review.md": "2aa1957579f50a87", "gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2", "gsd-core/workflows/debug.md": "98c8ed5af882ef8f", "gsd-core/workflows/diagnose-issues.md": "67c058fc7ae6026b", diff --git a/tests/fixtures/golden-install-parity/opencode.json b/tests/fixtures/golden-install-parity/opencode.json index ccd47f4c2..c86859932 100644 --- a/tests/fixtures/golden-install-parity/opencode.json +++ b/tests/fixtures/golden-install-parity/opencode.json @@ -288,7 +288,7 @@ "gsd-core/workflows/check-todos.md": "6526b64ee88c7d2e", "gsd-core/workflows/cleanup.md": "94d771d26f62dc86", "gsd-core/workflows/code-review-fix.md": "adb9388bb157610c", - "gsd-core/workflows/code-review.md": "ae6bcbd1575aeec4", + "gsd-core/workflows/code-review.md": "8ff9884096ae8341", "gsd-core/workflows/complete-milestone.md": "614299b2c08e66c3", "gsd-core/workflows/debug.md": "161be2a77ffce47a", "gsd-core/workflows/diagnose-issues.md": "2971c699d52f1b85", diff --git a/tests/fixtures/golden-install-parity/pi.json b/tests/fixtures/golden-install-parity/pi.json index 955ed5f77..abb109759 100644 --- a/tests/fixtures/golden-install-parity/pi.json +++ b/tests/fixtures/golden-install-parity/pi.json @@ -184,7 +184,7 @@ "gsd-core/workflows/check-todos.md": "bdeaf43f9c61e0cc", "gsd-core/workflows/cleanup.md": "0daa2f2720c111f1", "gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075", - "gsd-core/workflows/code-review.md": "334c90c401f291f8", + "gsd-core/workflows/code-review.md": "2aa1957579f50a87", "gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2", "gsd-core/workflows/debug.md": "98c8ed5af882ef8f", "gsd-core/workflows/diagnose-issues.md": "d6d978fddfd5da8d", diff --git a/tests/fixtures/golden-install-parity/qwen.json b/tests/fixtures/golden-install-parity/qwen.json index 82282f03c..11e23717c 100644 --- a/tests/fixtures/golden-install-parity/qwen.json +++ b/tests/fixtures/golden-install-parity/qwen.json @@ -217,7 +217,7 @@ "gsd-core/workflows/check-todos.md": "ec8c22920f6b2df1", "gsd-core/workflows/cleanup.md": "6a18b165752e3087", "gsd-core/workflows/code-review-fix.md": "f3725ae9d685bed2", - "gsd-core/workflows/code-review.md": "29125604bed2c467", + "gsd-core/workflows/code-review.md": "6076e252b0d315f4", "gsd-core/workflows/complete-milestone.md": "40085d32b15805c8", "gsd-core/workflows/debug.md": "09b6bad63939bb82", "gsd-core/workflows/diagnose-issues.md": "652ae26975f82242", diff --git a/tests/fixtures/golden-install-parity/trae.json b/tests/fixtures/golden-install-parity/trae.json index 1897c913e..79f1d2fd7 100644 --- a/tests/fixtures/golden-install-parity/trae.json +++ b/tests/fixtures/golden-install-parity/trae.json @@ -217,7 +217,7 @@ "gsd-core/workflows/check-todos.md": "0dda8236355e8c9c", "gsd-core/workflows/cleanup.md": "82f65f5214ecd748", "gsd-core/workflows/code-review-fix.md": "f2761f7f8c4a5674", - "gsd-core/workflows/code-review.md": "47663a2922756c5e", + "gsd-core/workflows/code-review.md": "c5311718997f7681", "gsd-core/workflows/complete-milestone.md": "6e918b72bd885426", "gsd-core/workflows/debug.md": "04b29e0ba18603b6", "gsd-core/workflows/diagnose-issues.md": "9274b11a3db98c65", diff --git a/tests/fixtures/golden-install-parity/windsurf.json b/tests/fixtures/golden-install-parity/windsurf.json index c559271c7..a7ee67f00 100644 --- a/tests/fixtures/golden-install-parity/windsurf.json +++ b/tests/fixtures/golden-install-parity/windsurf.json @@ -217,7 +217,7 @@ "gsd-core/workflows/check-todos.md": "afc840fceb07bf99", "gsd-core/workflows/cleanup.md": "93c14107979a4428", "gsd-core/workflows/code-review-fix.md": "b99b1f20bb27c291", - "gsd-core/workflows/code-review.md": "faa87faf07ae765a", + "gsd-core/workflows/code-review.md": "ac70888b14a21aaf", "gsd-core/workflows/complete-milestone.md": "f463bf4e86ac26f6", "gsd-core/workflows/debug.md": "830c309b48c35c8c", "gsd-core/workflows/diagnose-issues.md": "447072aa72385271", diff --git a/tests/fixtures/golden-install-parity/zcode.json b/tests/fixtures/golden-install-parity/zcode.json index 80bc7743e..d0c7b4190 100644 --- a/tests/fixtures/golden-install-parity/zcode.json +++ b/tests/fixtures/golden-install-parity/zcode.json @@ -288,7 +288,7 @@ "gsd-core/workflows/check-todos.md": "bdeaf43f9c61e0cc", "gsd-core/workflows/cleanup.md": "0daa2f2720c111f1", "gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075", - "gsd-core/workflows/code-review.md": "334c90c401f291f8", + "gsd-core/workflows/code-review.md": "2aa1957579f50a87", "gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2", "gsd-core/workflows/debug.md": "98c8ed5af882ef8f", "gsd-core/workflows/diagnose-issues.md": "aa8d787db8f3c46c", diff --git a/tests/workflow-size-baseline.json b/tests/workflow-size-baseline.json index 629d4b8ae..be1048569 100644 --- a/tests/workflow-size-baseline.json +++ b/tests/workflow-size-baseline.json @@ -12,7 +12,7 @@ "check-todos.md": 9475, "cleanup.md": 9941, "code-review-fix.md": 24320, - "code-review.md": 31916, + "code-review.md": 32504, "complete-milestone.md": 31071, "debug.md": 19031, "diagnose-issues.md": 12864,