mirror of https://github.com/garrytan/gstack.git
The report's UNRESOLVED line was optional ('omit if empty') and the EXIT
PLAN MODE GATE only checked it 'if applicable', so a plan could ship with
no statement about open decisions at all — a missed ambiguity read
identically to a clean plan. Now every report ends with a mandatory
unresolved-decisions status as its final line: either the exact unbolded
sentinel 'NO UNRESOLVED DECISIONS', or a '**UNRESOLVED DECISIONS:**' block
of bullets. The gate blocks ExitPlanMode unless that final line is present.
generatePlanFileReviewReport: current-review items are listed from context;
prior reviews contribute an aggregate count computed as latest-fresh-row-
per-skill minus the current run (no double-count, dashboard 7-day window).
generateExitPlanModeGate: check #3 is now blocking with no 'if applicable'
escape; bolded sentinel does not satisfy it.
Tests: static guard in gen-skill-docs.test.ts asserts the mandatory status
across all six report consumers and the gate across gate-bearing skills;
skill-e2e-plan.test.ts asserts the written report's final line is the
status (and fixes a stale 'four review rows' -> five-row prompt).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| preamble | ||
| browse.ts | ||
| codex-helpers.ts | ||
| composition.ts | ||
| confidence.ts | ||
| constants.ts | ||
| design.ts | ||
| dx.ts | ||
| gbrain.ts | ||
| index.ts | ||
| learnings.ts | ||
| make-pdf.ts | ||
| model-overlay.ts | ||
| preamble.ts | ||
| question-tuning.ts | ||
| redact-doc.ts | ||
| review-army.ts | ||
| review.ts | ||
| sections.ts | ||
| tasks-section.ts | ||
| testing.ts | ||
| types.ts | ||
| utility.ts | ||