diff --git a/scripts/resolvers/plan-gates.ts b/scripts/resolvers/plan-gates.ts index 63a430e93..682606e62 100644 --- a/scripts/resolvers/plan-gates.ts +++ b/scripts/resolvers/plan-gates.ts @@ -179,11 +179,9 @@ ${approvals}1. Read the plan file with the Read tool (after your most recent wri short-circuit when no plan file exists. Failing this gate and calling ExitPlanMode anyway is a contract violation — -the user will see a plan whose review report is missing or stale, and will -(correctly) reject it. Self-deception failure mode to watch for: feeling -"done" after writing review prose into the plan body. The body prose is not -the report. The report is a separate, structured, table-bearing section that -must be the file's terminal heading.`; +the user sees a plan whose review report is missing or stale. Review prose in +the plan body is not the report: the report is a separate, structured, +table-bearing section that must be the file's terminal heading.`; } // ─── Plan File Discovery (shared helper) ────────────────────────────── diff --git a/scripts/resolvers/review-dashboard.ts b/scripts/resolvers/review-dashboard.ts index bb1be3789..b90183ff4 100644 --- a/scripts/resolvers/review-dashboard.ts +++ b/scripts/resolvers/review-dashboard.ts @@ -238,9 +238,7 @@ ${beforeLog ? `4. **Read-back gate:** Read the saved file. Verify the accepted c \\\`## \\\` heading in the file before continuing. If it isn't, repeat steps 2-3 once.`} -${ceo || ctx.skillName === 'plan-eng-review' ? 'Do NOT replace the section in place; delete it and append the new report at EOF.' : `Do NOT replace the section in place. The "replace mid-file" path is what allowed -prior versions to leave the report mid-file when an older report already lived -there — the user then sees a plan whose review report is not at the bottom and -(correctly) rejects it.`}`; +${ceo || ctx.skillName === 'plan-eng-review' ? 'Do NOT replace the section in place; delete it and append the new report at EOF.' : `Do NOT replace the section in place; delete it and append the new report at EOF, +so the review report is always the plan's last section.`}`; return conditionalWrites ? result.replaceAll('\\`', '`') : result; }