diff --git a/.agents/skills/gstack-plan-ceo-review/SKILL.md b/.agents/skills/gstack-plan-ceo-review/SKILL.md index 97ec889d..f253d18d 100644 --- a/.agents/skills/gstack-plan-ceo-review/SKILL.md +++ b/.agents/skills/gstack-plan-ceo-review/SKILL.md @@ -1056,7 +1056,7 @@ the same pattern. The review dashboard depends on this data. Skipping this command breaks the review readiness dashboard in /ship. ```bash -~/.codex/skills/gstack/bin/gstack-review-log '{"skill":"plan-ceo-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE","commit":"COMMIT"}' +~/.codex/skills/gstack/bin/gstack-review-log '{"skill":"plan-ceo-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE","scope_proposed":N,"scope_accepted":N,"scope_deferred":N,"commit":"COMMIT"}' ``` Before running this command, substitute the placeholder values from the Completion Summary you just produced: @@ -1065,6 +1065,9 @@ Before running this command, substitute the placeholder values from the Completi - **unresolved**: number from "Unresolved decisions" in the summary - **critical_gaps**: number from "Failure modes: ___ CRITICAL GAPS" in the summary - **MODE**: the mode the user selected (SCOPE_EXPANSION / SELECTIVE_EXPANSION / HOLD_SCOPE / SCOPE_REDUCTION) +- **scope_proposed**: number from "Scope proposals: ___ proposed" in the summary (0 for HOLD/REDUCTION) +- **scope_accepted**: number from "Scope proposals: ___ accepted" in the summary (0 for HOLD/REDUCTION) +- **scope_deferred**: number of items deferred to TODOS.md from scope decisions (0 for HOLD/REDUCTION) - **COMMIT**: output of `git rev-parse --short HEAD` ## Review Readiness Dashboard @@ -1126,17 +1129,19 @@ After displaying the Review Readiness Dashboard in conversation output, also upd Read the review log output you already have from the Review Readiness Dashboard step above. Parse each JSONL entry. Each skill logs different fields: -- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} proposals, {M} accepted, {K} deferred" (from your Completion Summary) -- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} issues, {M} critical gaps, mode: {MODE}" -- **plan-design-review**: \`status\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` - → Findings: "score: {N}/10 → {M}/10, {K} decisions made" -- **codex-review**: \`status\`, \`gate\`, \`findings\` - → Findings: "{N} findings, {M}/{N} fixed" +- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`scope_proposed\`, \`scope_accepted\`, \`scope_deferred\`, \`commit\` + → Findings: "{scope_proposed} proposals, {scope_accepted} accepted, {scope_deferred} deferred" + → If scope fields are 0 or missing (HOLD/REDUCTION mode): "mode: {mode}, {critical_gaps} critical gaps" +- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`issues_found\`, \`mode\`, \`commit\` + → Findings: "{issues_found} issues, {critical_gaps} critical gaps" +- **plan-design-review**: \`status\`, \`initial_score\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` + → Findings: "score: {initial_score}/10 → {overall_score}/10, {decisions_made} decisions" +- **codex-review**: \`status\`, \`gate\`, \`findings\`, \`findings_fixed\` + → Findings: "{findings} findings, {findings_fixed}/{findings} fixed" -For the review you just completed, use details from your own Completion Summary (richer -than the JSONL). For prior reviews, use the JSONL fields to reconstruct a summary. +All fields needed for the Findings column are now present in the JSONL entries. +For the review you just completed, you may use richer details from your own Completion +Summary. For prior reviews, use the JSONL fields directly — they contain all required data. Produce this markdown table: @@ -1165,12 +1170,15 @@ Below the table, add these lines (omit any that are empty/not applicable): file you are allowed to edit in plan mode. The plan file review report is part of the plan's living status. -- If a \`## GSTACK REVIEW REPORT\` section already exists at the end of the plan file, - **replace it** entirely using the Edit tool (match from \`## GSTACK REVIEW REPORT\` to - the end of the file). If the Edit fails (e.g., concurrent edit changed the content), - re-read the plan file and retry once with the updated content. +- Search the plan file for a \`## GSTACK REVIEW REPORT\` section **anywhere** in the file + (not just at the end — content may have been added after it). +- If found, **replace it** entirely using the Edit tool. Match from \`## GSTACK REVIEW REPORT\` + through either the next \`## \` heading or end of file, whichever comes first. This ensures + content added after the report section is preserved, not eaten. If the Edit fails + (e.g., concurrent edit changed the content), re-read the plan file and retry once. - If no such section exists, **append it** to the end of the plan file. -- Always place it as the very last section in the plan file. +- Always place it as the very last section in the plan file. If it was found mid-file, + move it: delete the old location and append at the end. ## Next Steps — Review Chaining diff --git a/.agents/skills/gstack-plan-design-review/SKILL.md b/.agents/skills/gstack-plan-design-review/SKILL.md index cc0cfd52..af092247 100644 --- a/.agents/skills/gstack-plan-design-review/SKILL.md +++ b/.agents/skills/gstack-plan-design-review/SKILL.md @@ -508,13 +508,14 @@ the same pattern. The review dashboard depends on this data. Skipping this command breaks the review readiness dashboard in /ship. ```bash -~/.codex/skills/gstack/bin/gstack-review-log '{"skill":"plan-design-review","timestamp":"TIMESTAMP","status":"STATUS","overall_score":N,"unresolved":N,"decisions_made":N,"commit":"COMMIT"}' +~/.codex/skills/gstack/bin/gstack-review-log '{"skill":"plan-design-review","timestamp":"TIMESTAMP","status":"STATUS","initial_score":N,"overall_score":N,"unresolved":N,"decisions_made":N,"commit":"COMMIT"}' ``` Substitute values from the Completion Summary: - **TIMESTAMP**: current ISO 8601 datetime - **STATUS**: "clean" if overall score 8+ AND 0 unresolved; otherwise "issues_open" -- **overall_score**: final overall design score (0-10) +- **initial_score**: initial overall design score before fixes (0-10) +- **overall_score**: final overall design score after fixes (0-10) - **unresolved**: number of unresolved design decisions - **decisions_made**: number of design decisions added to the plan - **COMMIT**: output of `git rev-parse --short HEAD` @@ -578,17 +579,19 @@ After displaying the Review Readiness Dashboard in conversation output, also upd Read the review log output you already have from the Review Readiness Dashboard step above. Parse each JSONL entry. Each skill logs different fields: -- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} proposals, {M} accepted, {K} deferred" (from your Completion Summary) -- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} issues, {M} critical gaps, mode: {MODE}" -- **plan-design-review**: \`status\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` - → Findings: "score: {N}/10 → {M}/10, {K} decisions made" -- **codex-review**: \`status\`, \`gate\`, \`findings\` - → Findings: "{N} findings, {M}/{N} fixed" +- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`scope_proposed\`, \`scope_accepted\`, \`scope_deferred\`, \`commit\` + → Findings: "{scope_proposed} proposals, {scope_accepted} accepted, {scope_deferred} deferred" + → If scope fields are 0 or missing (HOLD/REDUCTION mode): "mode: {mode}, {critical_gaps} critical gaps" +- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`issues_found\`, \`mode\`, \`commit\` + → Findings: "{issues_found} issues, {critical_gaps} critical gaps" +- **plan-design-review**: \`status\`, \`initial_score\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` + → Findings: "score: {initial_score}/10 → {overall_score}/10, {decisions_made} decisions" +- **codex-review**: \`status\`, \`gate\`, \`findings\`, \`findings_fixed\` + → Findings: "{findings} findings, {findings_fixed}/{findings} fixed" -For the review you just completed, use details from your own Completion Summary (richer -than the JSONL). For prior reviews, use the JSONL fields to reconstruct a summary. +All fields needed for the Findings column are now present in the JSONL entries. +For the review you just completed, you may use richer details from your own Completion +Summary. For prior reviews, use the JSONL fields directly — they contain all required data. Produce this markdown table: @@ -617,12 +620,15 @@ Below the table, add these lines (omit any that are empty/not applicable): file you are allowed to edit in plan mode. The plan file review report is part of the plan's living status. -- If a \`## GSTACK REVIEW REPORT\` section already exists at the end of the plan file, - **replace it** entirely using the Edit tool (match from \`## GSTACK REVIEW REPORT\` to - the end of the file). If the Edit fails (e.g., concurrent edit changed the content), - re-read the plan file and retry once with the updated content. +- Search the plan file for a \`## GSTACK REVIEW REPORT\` section **anywhere** in the file + (not just at the end — content may have been added after it). +- If found, **replace it** entirely using the Edit tool. Match from \`## GSTACK REVIEW REPORT\` + through either the next \`## \` heading or end of file, whichever comes first. This ensures + content added after the report section is preserved, not eaten. If the Edit fails + (e.g., concurrent edit changed the content), re-read the plan file and retry once. - If no such section exists, **append it** to the end of the plan file. -- Always place it as the very last section in the plan file. +- Always place it as the very last section in the plan file. If it was found mid-file, + move it: delete the old location and append at the end. ## Next Steps — Review Chaining diff --git a/.agents/skills/gstack-plan-eng-review/SKILL.md b/.agents/skills/gstack-plan-eng-review/SKILL.md index c426e1b9..f2be53a3 100644 --- a/.agents/skills/gstack-plan-eng-review/SKILL.md +++ b/.agents/skills/gstack-plan-eng-review/SKILL.md @@ -505,7 +505,7 @@ the same pattern. The review dashboard depends on this data. Skipping this command breaks the review readiness dashboard in /ship. ```bash -~/.codex/skills/gstack/bin/gstack-review-log '{"skill":"plan-eng-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE","commit":"COMMIT"}' +~/.codex/skills/gstack/bin/gstack-review-log '{"skill":"plan-eng-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"issues_found":N,"mode":"MODE","commit":"COMMIT"}' ``` Substitute values from the Completion Summary: @@ -513,6 +513,7 @@ Substitute values from the Completion Summary: - **STATUS**: "clean" if 0 unresolved decisions AND 0 critical gaps; otherwise "issues_open" - **unresolved**: number from "Unresolved decisions" count - **critical_gaps**: number from "Failure modes: ___ critical gaps flagged" +- **issues_found**: total issues found across all review sections (Architecture + Code Quality + Performance + Test gaps) - **MODE**: FULL_REVIEW / SCOPE_REDUCED - **COMMIT**: output of `git rev-parse --short HEAD` @@ -575,17 +576,19 @@ After displaying the Review Readiness Dashboard in conversation output, also upd Read the review log output you already have from the Review Readiness Dashboard step above. Parse each JSONL entry. Each skill logs different fields: -- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} proposals, {M} accepted, {K} deferred" (from your Completion Summary) -- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} issues, {M} critical gaps, mode: {MODE}" -- **plan-design-review**: \`status\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` - → Findings: "score: {N}/10 → {M}/10, {K} decisions made" -- **codex-review**: \`status\`, \`gate\`, \`findings\` - → Findings: "{N} findings, {M}/{N} fixed" +- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`scope_proposed\`, \`scope_accepted\`, \`scope_deferred\`, \`commit\` + → Findings: "{scope_proposed} proposals, {scope_accepted} accepted, {scope_deferred} deferred" + → If scope fields are 0 or missing (HOLD/REDUCTION mode): "mode: {mode}, {critical_gaps} critical gaps" +- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`issues_found\`, \`mode\`, \`commit\` + → Findings: "{issues_found} issues, {critical_gaps} critical gaps" +- **plan-design-review**: \`status\`, \`initial_score\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` + → Findings: "score: {initial_score}/10 → {overall_score}/10, {decisions_made} decisions" +- **codex-review**: \`status\`, \`gate\`, \`findings\`, \`findings_fixed\` + → Findings: "{findings} findings, {findings_fixed}/{findings} fixed" -For the review you just completed, use details from your own Completion Summary (richer -than the JSONL). For prior reviews, use the JSONL fields to reconstruct a summary. +All fields needed for the Findings column are now present in the JSONL entries. +For the review you just completed, you may use richer details from your own Completion +Summary. For prior reviews, use the JSONL fields directly — they contain all required data. Produce this markdown table: @@ -614,12 +617,15 @@ Below the table, add these lines (omit any that are empty/not applicable): file you are allowed to edit in plan mode. The plan file review report is part of the plan's living status. -- If a \`## GSTACK REVIEW REPORT\` section already exists at the end of the plan file, - **replace it** entirely using the Edit tool (match from \`## GSTACK REVIEW REPORT\` to - the end of the file). If the Edit fails (e.g., concurrent edit changed the content), - re-read the plan file and retry once with the updated content. +- Search the plan file for a \`## GSTACK REVIEW REPORT\` section **anywhere** in the file + (not just at the end — content may have been added after it). +- If found, **replace it** entirely using the Edit tool. Match from \`## GSTACK REVIEW REPORT\` + through either the next \`## \` heading or end of file, whichever comes first. This ensures + content added after the report section is preserved, not eaten. If the Edit fails + (e.g., concurrent edit changed the content), re-read the plan file and retry once. - If no such section exists, **append it** to the end of the plan file. -- Always place it as the very last section in the plan file. +- Always place it as the very last section in the plan file. If it was found mid-file, + move it: delete the old location and append at the end. ## Next Steps — Review Chaining diff --git a/codex/SKILL.md b/codex/SKILL.md index 43e90d19..86715597 100644 --- a/codex/SKILL.md +++ b/codex/SKILL.md @@ -367,11 +367,12 @@ CROSS-MODEL ANALYSIS: 7. Persist the review result: ```bash -~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"codex-review","timestamp":"TIMESTAMP","status":"STATUS","gate":"GATE","findings":N}' +~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"codex-review","timestamp":"TIMESTAMP","status":"STATUS","gate":"GATE","findings":N,"findings_fixed":N}' ``` Substitute: TIMESTAMP (ISO 8601), STATUS ("clean" if PASS, "issues_found" if FAIL), -GATE ("pass" or "fail"), findings (count of [P1] + [P2] markers). +GATE ("pass" or "fail"), findings (count of [P1] + [P2] markers), +findings_fixed (count of findings that were addressed/fixed before shipping). 8. Clean up temp files: ```bash @@ -394,17 +395,19 @@ After displaying the Review Readiness Dashboard in conversation output, also upd Read the review log output you already have from the Review Readiness Dashboard step above. Parse each JSONL entry. Each skill logs different fields: -- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} proposals, {M} accepted, {K} deferred" (from your Completion Summary) -- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} issues, {M} critical gaps, mode: {MODE}" -- **plan-design-review**: \`status\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` - → Findings: "score: {N}/10 → {M}/10, {K} decisions made" -- **codex-review**: \`status\`, \`gate\`, \`findings\` - → Findings: "{N} findings, {M}/{N} fixed" +- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`scope_proposed\`, \`scope_accepted\`, \`scope_deferred\`, \`commit\` + → Findings: "{scope_proposed} proposals, {scope_accepted} accepted, {scope_deferred} deferred" + → If scope fields are 0 or missing (HOLD/REDUCTION mode): "mode: {mode}, {critical_gaps} critical gaps" +- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`issues_found\`, \`mode\`, \`commit\` + → Findings: "{issues_found} issues, {critical_gaps} critical gaps" +- **plan-design-review**: \`status\`, \`initial_score\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` + → Findings: "score: {initial_score}/10 → {overall_score}/10, {decisions_made} decisions" +- **codex-review**: \`status\`, \`gate\`, \`findings\`, \`findings_fixed\` + → Findings: "{findings} findings, {findings_fixed}/{findings} fixed" -For the review you just completed, use details from your own Completion Summary (richer -than the JSONL). For prior reviews, use the JSONL fields to reconstruct a summary. +All fields needed for the Findings column are now present in the JSONL entries. +For the review you just completed, you may use richer details from your own Completion +Summary. For prior reviews, use the JSONL fields directly — they contain all required data. Produce this markdown table: @@ -433,12 +436,15 @@ Below the table, add these lines (omit any that are empty/not applicable): file you are allowed to edit in plan mode. The plan file review report is part of the plan's living status. -- If a \`## GSTACK REVIEW REPORT\` section already exists at the end of the plan file, - **replace it** entirely using the Edit tool (match from \`## GSTACK REVIEW REPORT\` to - the end of the file). If the Edit fails (e.g., concurrent edit changed the content), - re-read the plan file and retry once with the updated content. +- Search the plan file for a \`## GSTACK REVIEW REPORT\` section **anywhere** in the file + (not just at the end — content may have been added after it). +- If found, **replace it** entirely using the Edit tool. Match from \`## GSTACK REVIEW REPORT\` + through either the next \`## \` heading or end of file, whichever comes first. This ensures + content added after the report section is preserved, not eaten. If the Edit fails + (e.g., concurrent edit changed the content), re-read the plan file and retry once. - If no such section exists, **append it** to the end of the plan file. -- Always place it as the very last section in the plan file. +- Always place it as the very last section in the plan file. If it was found mid-file, + move it: delete the old location and append at the end. --- diff --git a/codex/SKILL.md.tmpl b/codex/SKILL.md.tmpl index 2961e4c1..0aa7fec6 100644 --- a/codex/SKILL.md.tmpl +++ b/codex/SKILL.md.tmpl @@ -126,11 +126,12 @@ CROSS-MODEL ANALYSIS: 7. Persist the review result: ```bash -~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"codex-review","timestamp":"TIMESTAMP","status":"STATUS","gate":"GATE","findings":N}' +~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"codex-review","timestamp":"TIMESTAMP","status":"STATUS","gate":"GATE","findings":N,"findings_fixed":N}' ``` Substitute: TIMESTAMP (ISO 8601), STATUS ("clean" if PASS, "issues_found" if FAIL), -GATE ("pass" or "fail"), findings (count of [P1] + [P2] markers). +GATE ("pass" or "fail"), findings (count of [P1] + [P2] markers), +findings_fixed (count of findings that were addressed/fixed before shipping). 8. Clean up temp files: ```bash diff --git a/plan-ceo-review/SKILL.md b/plan-ceo-review/SKILL.md index abb7ec77..28ba5910 100644 --- a/plan-ceo-review/SKILL.md +++ b/plan-ceo-review/SKILL.md @@ -1065,7 +1065,7 @@ the same pattern. The review dashboard depends on this data. Skipping this command breaks the review readiness dashboard in /ship. ```bash -~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-ceo-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE","commit":"COMMIT"}' +~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-ceo-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE","scope_proposed":N,"scope_accepted":N,"scope_deferred":N,"commit":"COMMIT"}' ``` Before running this command, substitute the placeholder values from the Completion Summary you just produced: @@ -1074,6 +1074,9 @@ Before running this command, substitute the placeholder values from the Completi - **unresolved**: number from "Unresolved decisions" in the summary - **critical_gaps**: number from "Failure modes: ___ CRITICAL GAPS" in the summary - **MODE**: the mode the user selected (SCOPE_EXPANSION / SELECTIVE_EXPANSION / HOLD_SCOPE / SCOPE_REDUCTION) +- **scope_proposed**: number from "Scope proposals: ___ proposed" in the summary (0 for HOLD/REDUCTION) +- **scope_accepted**: number from "Scope proposals: ___ accepted" in the summary (0 for HOLD/REDUCTION) +- **scope_deferred**: number of items deferred to TODOS.md from scope decisions (0 for HOLD/REDUCTION) - **COMMIT**: output of `git rev-parse --short HEAD` ## Review Readiness Dashboard @@ -1135,17 +1138,19 @@ After displaying the Review Readiness Dashboard in conversation output, also upd Read the review log output you already have from the Review Readiness Dashboard step above. Parse each JSONL entry. Each skill logs different fields: -- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} proposals, {M} accepted, {K} deferred" (from your Completion Summary) -- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} issues, {M} critical gaps, mode: {MODE}" -- **plan-design-review**: \`status\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` - → Findings: "score: {N}/10 → {M}/10, {K} decisions made" -- **codex-review**: \`status\`, \`gate\`, \`findings\` - → Findings: "{N} findings, {M}/{N} fixed" +- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`scope_proposed\`, \`scope_accepted\`, \`scope_deferred\`, \`commit\` + → Findings: "{scope_proposed} proposals, {scope_accepted} accepted, {scope_deferred} deferred" + → If scope fields are 0 or missing (HOLD/REDUCTION mode): "mode: {mode}, {critical_gaps} critical gaps" +- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`issues_found\`, \`mode\`, \`commit\` + → Findings: "{issues_found} issues, {critical_gaps} critical gaps" +- **plan-design-review**: \`status\`, \`initial_score\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` + → Findings: "score: {initial_score}/10 → {overall_score}/10, {decisions_made} decisions" +- **codex-review**: \`status\`, \`gate\`, \`findings\`, \`findings_fixed\` + → Findings: "{findings} findings, {findings_fixed}/{findings} fixed" -For the review you just completed, use details from your own Completion Summary (richer -than the JSONL). For prior reviews, use the JSONL fields to reconstruct a summary. +All fields needed for the Findings column are now present in the JSONL entries. +For the review you just completed, you may use richer details from your own Completion +Summary. For prior reviews, use the JSONL fields directly — they contain all required data. Produce this markdown table: @@ -1174,12 +1179,15 @@ Below the table, add these lines (omit any that are empty/not applicable): file you are allowed to edit in plan mode. The plan file review report is part of the plan's living status. -- If a \`## GSTACK REVIEW REPORT\` section already exists at the end of the plan file, - **replace it** entirely using the Edit tool (match from \`## GSTACK REVIEW REPORT\` to - the end of the file). If the Edit fails (e.g., concurrent edit changed the content), - re-read the plan file and retry once with the updated content. +- Search the plan file for a \`## GSTACK REVIEW REPORT\` section **anywhere** in the file + (not just at the end — content may have been added after it). +- If found, **replace it** entirely using the Edit tool. Match from \`## GSTACK REVIEW REPORT\` + through either the next \`## \` heading or end of file, whichever comes first. This ensures + content added after the report section is preserved, not eaten. If the Edit fails + (e.g., concurrent edit changed the content), re-read the plan file and retry once. - If no such section exists, **append it** to the end of the plan file. -- Always place it as the very last section in the plan file. +- Always place it as the very last section in the plan file. If it was found mid-file, + move it: delete the old location and append at the end. ## Next Steps — Review Chaining diff --git a/plan-ceo-review/SKILL.md.tmpl b/plan-ceo-review/SKILL.md.tmpl index 372233c7..6b676a86 100644 --- a/plan-ceo-review/SKILL.md.tmpl +++ b/plan-ceo-review/SKILL.md.tmpl @@ -747,7 +747,7 @@ the same pattern. The review dashboard depends on this data. Skipping this command breaks the review readiness dashboard in /ship. ```bash -~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-ceo-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE","commit":"COMMIT"}' +~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-ceo-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE","scope_proposed":N,"scope_accepted":N,"scope_deferred":N,"commit":"COMMIT"}' ``` Before running this command, substitute the placeholder values from the Completion Summary you just produced: @@ -756,6 +756,9 @@ Before running this command, substitute the placeholder values from the Completi - **unresolved**: number from "Unresolved decisions" in the summary - **critical_gaps**: number from "Failure modes: ___ CRITICAL GAPS" in the summary - **MODE**: the mode the user selected (SCOPE_EXPANSION / SELECTIVE_EXPANSION / HOLD_SCOPE / SCOPE_REDUCTION) +- **scope_proposed**: number from "Scope proposals: ___ proposed" in the summary (0 for HOLD/REDUCTION) +- **scope_accepted**: number from "Scope proposals: ___ accepted" in the summary (0 for HOLD/REDUCTION) +- **scope_deferred**: number of items deferred to TODOS.md from scope decisions (0 for HOLD/REDUCTION) - **COMMIT**: output of `git rev-parse --short HEAD` {{REVIEW_DASHBOARD}} diff --git a/plan-design-review/SKILL.md b/plan-design-review/SKILL.md index fe4d2f3a..d7aaa3e8 100644 --- a/plan-design-review/SKILL.md +++ b/plan-design-review/SKILL.md @@ -516,13 +516,14 @@ the same pattern. The review dashboard depends on this data. Skipping this command breaks the review readiness dashboard in /ship. ```bash -~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-design-review","timestamp":"TIMESTAMP","status":"STATUS","overall_score":N,"unresolved":N,"decisions_made":N,"commit":"COMMIT"}' +~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-design-review","timestamp":"TIMESTAMP","status":"STATUS","initial_score":N,"overall_score":N,"unresolved":N,"decisions_made":N,"commit":"COMMIT"}' ``` Substitute values from the Completion Summary: - **TIMESTAMP**: current ISO 8601 datetime - **STATUS**: "clean" if overall score 8+ AND 0 unresolved; otherwise "issues_open" -- **overall_score**: final overall design score (0-10) +- **initial_score**: initial overall design score before fixes (0-10) +- **overall_score**: final overall design score after fixes (0-10) - **unresolved**: number of unresolved design decisions - **decisions_made**: number of design decisions added to the plan - **COMMIT**: output of `git rev-parse --short HEAD` @@ -586,17 +587,19 @@ After displaying the Review Readiness Dashboard in conversation output, also upd Read the review log output you already have from the Review Readiness Dashboard step above. Parse each JSONL entry. Each skill logs different fields: -- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} proposals, {M} accepted, {K} deferred" (from your Completion Summary) -- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} issues, {M} critical gaps, mode: {MODE}" -- **plan-design-review**: \`status\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` - → Findings: "score: {N}/10 → {M}/10, {K} decisions made" -- **codex-review**: \`status\`, \`gate\`, \`findings\` - → Findings: "{N} findings, {M}/{N} fixed" +- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`scope_proposed\`, \`scope_accepted\`, \`scope_deferred\`, \`commit\` + → Findings: "{scope_proposed} proposals, {scope_accepted} accepted, {scope_deferred} deferred" + → If scope fields are 0 or missing (HOLD/REDUCTION mode): "mode: {mode}, {critical_gaps} critical gaps" +- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`issues_found\`, \`mode\`, \`commit\` + → Findings: "{issues_found} issues, {critical_gaps} critical gaps" +- **plan-design-review**: \`status\`, \`initial_score\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` + → Findings: "score: {initial_score}/10 → {overall_score}/10, {decisions_made} decisions" +- **codex-review**: \`status\`, \`gate\`, \`findings\`, \`findings_fixed\` + → Findings: "{findings} findings, {findings_fixed}/{findings} fixed" -For the review you just completed, use details from your own Completion Summary (richer -than the JSONL). For prior reviews, use the JSONL fields to reconstruct a summary. +All fields needed for the Findings column are now present in the JSONL entries. +For the review you just completed, you may use richer details from your own Completion +Summary. For prior reviews, use the JSONL fields directly — they contain all required data. Produce this markdown table: @@ -625,12 +628,15 @@ Below the table, add these lines (omit any that are empty/not applicable): file you are allowed to edit in plan mode. The plan file review report is part of the plan's living status. -- If a \`## GSTACK REVIEW REPORT\` section already exists at the end of the plan file, - **replace it** entirely using the Edit tool (match from \`## GSTACK REVIEW REPORT\` to - the end of the file). If the Edit fails (e.g., concurrent edit changed the content), - re-read the plan file and retry once with the updated content. +- Search the plan file for a \`## GSTACK REVIEW REPORT\` section **anywhere** in the file + (not just at the end — content may have been added after it). +- If found, **replace it** entirely using the Edit tool. Match from \`## GSTACK REVIEW REPORT\` + through either the next \`## \` heading or end of file, whichever comes first. This ensures + content added after the report section is preserved, not eaten. If the Edit fails + (e.g., concurrent edit changed the content), re-read the plan file and retry once. - If no such section exists, **append it** to the end of the plan file. -- Always place it as the very last section in the plan file. +- Always place it as the very last section in the plan file. If it was found mid-file, + move it: delete the old location and append at the end. ## Next Steps — Review Chaining diff --git a/plan-design-review/SKILL.md.tmpl b/plan-design-review/SKILL.md.tmpl index 96ddaa29..46e5b6f1 100644 --- a/plan-design-review/SKILL.md.tmpl +++ b/plan-design-review/SKILL.md.tmpl @@ -275,13 +275,14 @@ the same pattern. The review dashboard depends on this data. Skipping this command breaks the review readiness dashboard in /ship. ```bash -~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-design-review","timestamp":"TIMESTAMP","status":"STATUS","overall_score":N,"unresolved":N,"decisions_made":N,"commit":"COMMIT"}' +~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-design-review","timestamp":"TIMESTAMP","status":"STATUS","initial_score":N,"overall_score":N,"unresolved":N,"decisions_made":N,"commit":"COMMIT"}' ``` Substitute values from the Completion Summary: - **TIMESTAMP**: current ISO 8601 datetime - **STATUS**: "clean" if overall score 8+ AND 0 unresolved; otherwise "issues_open" -- **overall_score**: final overall design score (0-10) +- **initial_score**: initial overall design score before fixes (0-10) +- **overall_score**: final overall design score after fixes (0-10) - **unresolved**: number of unresolved design decisions - **decisions_made**: number of design decisions added to the plan - **COMMIT**: output of `git rev-parse --short HEAD` diff --git a/plan-eng-review/SKILL.md b/plan-eng-review/SKILL.md index 0a4f8d47..b3f099a0 100644 --- a/plan-eng-review/SKILL.md +++ b/plan-eng-review/SKILL.md @@ -515,7 +515,7 @@ the same pattern. The review dashboard depends on this data. Skipping this command breaks the review readiness dashboard in /ship. ```bash -~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-eng-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE","commit":"COMMIT"}' +~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-eng-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"issues_found":N,"mode":"MODE","commit":"COMMIT"}' ``` Substitute values from the Completion Summary: @@ -523,6 +523,7 @@ Substitute values from the Completion Summary: - **STATUS**: "clean" if 0 unresolved decisions AND 0 critical gaps; otherwise "issues_open" - **unresolved**: number from "Unresolved decisions" count - **critical_gaps**: number from "Failure modes: ___ critical gaps flagged" +- **issues_found**: total issues found across all review sections (Architecture + Code Quality + Performance + Test gaps) - **MODE**: FULL_REVIEW / SCOPE_REDUCED - **COMMIT**: output of `git rev-parse --short HEAD` @@ -585,17 +586,19 @@ After displaying the Review Readiness Dashboard in conversation output, also upd Read the review log output you already have from the Review Readiness Dashboard step above. Parse each JSONL entry. Each skill logs different fields: -- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} proposals, {M} accepted, {K} deferred" (from your Completion Summary) -- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`commit\` - → Findings: "{N} issues, {M} critical gaps, mode: {MODE}" -- **plan-design-review**: \`status\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` - → Findings: "score: {N}/10 → {M}/10, {K} decisions made" -- **codex-review**: \`status\`, \`gate\`, \`findings\` - → Findings: "{N} findings, {M}/{N} fixed" +- **plan-ceo-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`mode\`, \`scope_proposed\`, \`scope_accepted\`, \`scope_deferred\`, \`commit\` + → Findings: "{scope_proposed} proposals, {scope_accepted} accepted, {scope_deferred} deferred" + → If scope fields are 0 or missing (HOLD/REDUCTION mode): "mode: {mode}, {critical_gaps} critical gaps" +- **plan-eng-review**: \`status\`, \`unresolved\`, \`critical_gaps\`, \`issues_found\`, \`mode\`, \`commit\` + → Findings: "{issues_found} issues, {critical_gaps} critical gaps" +- **plan-design-review**: \`status\`, \`initial_score\`, \`overall_score\`, \`unresolved\`, \`decisions_made\`, \`commit\` + → Findings: "score: {initial_score}/10 → {overall_score}/10, {decisions_made} decisions" +- **codex-review**: \`status\`, \`gate\`, \`findings\`, \`findings_fixed\` + → Findings: "{findings} findings, {findings_fixed}/{findings} fixed" -For the review you just completed, use details from your own Completion Summary (richer -than the JSONL). For prior reviews, use the JSONL fields to reconstruct a summary. +All fields needed for the Findings column are now present in the JSONL entries. +For the review you just completed, you may use richer details from your own Completion +Summary. For prior reviews, use the JSONL fields directly — they contain all required data. Produce this markdown table: @@ -624,12 +627,15 @@ Below the table, add these lines (omit any that are empty/not applicable): file you are allowed to edit in plan mode. The plan file review report is part of the plan's living status. -- If a \`## GSTACK REVIEW REPORT\` section already exists at the end of the plan file, - **replace it** entirely using the Edit tool (match from \`## GSTACK REVIEW REPORT\` to - the end of the file). If the Edit fails (e.g., concurrent edit changed the content), - re-read the plan file and retry once with the updated content. +- Search the plan file for a \`## GSTACK REVIEW REPORT\` section **anywhere** in the file + (not just at the end — content may have been added after it). +- If found, **replace it** entirely using the Edit tool. Match from \`## GSTACK REVIEW REPORT\` + through either the next \`## \` heading or end of file, whichever comes first. This ensures + content added after the report section is preserved, not eaten. If the Edit fails + (e.g., concurrent edit changed the content), re-read the plan file and retry once. - If no such section exists, **append it** to the end of the plan file. -- Always place it as the very last section in the plan file. +- Always place it as the very last section in the plan file. If it was found mid-file, + move it: delete the old location and append at the end. ## Next Steps — Review Chaining diff --git a/plan-eng-review/SKILL.md.tmpl b/plan-eng-review/SKILL.md.tmpl index c304242f..f48bdd49 100644 --- a/plan-eng-review/SKILL.md.tmpl +++ b/plan-eng-review/SKILL.md.tmpl @@ -274,7 +274,7 @@ the same pattern. The review dashboard depends on this data. Skipping this command breaks the review readiness dashboard in /ship. ```bash -~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-eng-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE","commit":"COMMIT"}' +~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-eng-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"issues_found":N,"mode":"MODE","commit":"COMMIT"}' ``` Substitute values from the Completion Summary: @@ -282,6 +282,7 @@ Substitute values from the Completion Summary: - **STATUS**: "clean" if 0 unresolved decisions AND 0 critical gaps; otherwise "issues_open" - **unresolved**: number from "Unresolved decisions" count - **critical_gaps**: number from "Failure modes: ___ critical gaps flagged" +- **issues_found**: total issues found across all review sections (Architecture + Code Quality + Performance + Test gaps) - **MODE**: FULL_REVIEW / SCOPE_REDUCED - **COMMIT**: output of `git rev-parse --short HEAD` diff --git a/scripts/gen-skill-docs.ts b/scripts/gen-skill-docs.ts index 6a23a392..c347e69a 100644 --- a/scripts/gen-skill-docs.ts +++ b/scripts/gen-skill-docs.ts @@ -1147,17 +1147,19 @@ After displaying the Review Readiness Dashboard in conversation output, also upd Read the review log output you already have from the Review Readiness Dashboard step above. Parse each JSONL entry. Each skill logs different fields: -- **plan-ceo-review**: \\\`status\\\`, \\\`unresolved\\\`, \\\`critical_gaps\\\`, \\\`mode\\\`, \\\`commit\\\` - → Findings: "{N} proposals, {M} accepted, {K} deferred" (from your Completion Summary) -- **plan-eng-review**: \\\`status\\\`, \\\`unresolved\\\`, \\\`critical_gaps\\\`, \\\`mode\\\`, \\\`commit\\\` - → Findings: "{N} issues, {M} critical gaps, mode: {MODE}" -- **plan-design-review**: \\\`status\\\`, \\\`overall_score\\\`, \\\`unresolved\\\`, \\\`decisions_made\\\`, \\\`commit\\\` - → Findings: "score: {N}/10 → {M}/10, {K} decisions made" -- **codex-review**: \\\`status\\\`, \\\`gate\\\`, \\\`findings\\\` - → Findings: "{N} findings, {M}/{N} fixed" +- **plan-ceo-review**: \\\`status\\\`, \\\`unresolved\\\`, \\\`critical_gaps\\\`, \\\`mode\\\`, \\\`scope_proposed\\\`, \\\`scope_accepted\\\`, \\\`scope_deferred\\\`, \\\`commit\\\` + → Findings: "{scope_proposed} proposals, {scope_accepted} accepted, {scope_deferred} deferred" + → If scope fields are 0 or missing (HOLD/REDUCTION mode): "mode: {mode}, {critical_gaps} critical gaps" +- **plan-eng-review**: \\\`status\\\`, \\\`unresolved\\\`, \\\`critical_gaps\\\`, \\\`issues_found\\\`, \\\`mode\\\`, \\\`commit\\\` + → Findings: "{issues_found} issues, {critical_gaps} critical gaps" +- **plan-design-review**: \\\`status\\\`, \\\`initial_score\\\`, \\\`overall_score\\\`, \\\`unresolved\\\`, \\\`decisions_made\\\`, \\\`commit\\\` + → Findings: "score: {initial_score}/10 → {overall_score}/10, {decisions_made} decisions" +- **codex-review**: \\\`status\\\`, \\\`gate\\\`, \\\`findings\\\`, \\\`findings_fixed\\\` + → Findings: "{findings} findings, {findings_fixed}/{findings} fixed" -For the review you just completed, use details from your own Completion Summary (richer -than the JSONL). For prior reviews, use the JSONL fields to reconstruct a summary. +All fields needed for the Findings column are now present in the JSONL entries. +For the review you just completed, you may use richer details from your own Completion +Summary. For prior reviews, use the JSONL fields directly — they contain all required data. Produce this markdown table: @@ -1186,12 +1188,15 @@ Below the table, add these lines (omit any that are empty/not applicable): file you are allowed to edit in plan mode. The plan file review report is part of the plan's living status. -- If a \\\`## GSTACK REVIEW REPORT\\\` section already exists at the end of the plan file, - **replace it** entirely using the Edit tool (match from \\\`## GSTACK REVIEW REPORT\\\` to - the end of the file). If the Edit fails (e.g., concurrent edit changed the content), - re-read the plan file and retry once with the updated content. +- Search the plan file for a \\\`## GSTACK REVIEW REPORT\\\` section **anywhere** in the file + (not just at the end — content may have been added after it). +- If found, **replace it** entirely using the Edit tool. Match from \\\`## GSTACK REVIEW REPORT\\\` + through either the next \\\`## \\\` heading or end of file, whichever comes first. This ensures + content added after the report section is preserved, not eaten. If the Edit fails + (e.g., concurrent edit changed the content), re-read the plan file and retry once. - If no such section exists, **append it** to the end of the plan file. -- Always place it as the very last section in the plan file.`; +- Always place it as the very last section in the plan file. If it was found mid-file, + move it: delete the old location and append at the end.`; } function generateTestBootstrap(_ctx: TemplateContext): string {