plan-gates, review-dashboard: terminal-report rules without trait claims or 'prior versions' narrative (s03 M5, s03 M7)

- M5: exit gate drops 'will (correctly) reject it' and the 'Self-deception
  failure mode' aside; keeps the contract-violation sentence (pinned by
  test/gen-skill-docs.test.ts) and the body-prose-is-not-the-report rule.
- M7: report-write step states the rule and its reason (delete and append at
  EOF so the report stays last) instead of the history of how it broke.
No test pins the removed text. expected red until the regeneration commit
This commit is contained in:
garrytan committed 2026-10-03 00:14:15 +00:00
1 parent a4c649f282
commit dd2a50d342
2 files changed
+5 -9

No files matched your search

+3 -5
View File
@@ -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) ──────────────────────────────
+2 -4
View File
@@ -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;
}