fix(plan-devex-review): add missing gstack-review-log step

plan-devex-review carried the EXIT PLAN MODE GATE but never wrote a
review-log entry, so the gate's 'review log was called' check was
structurally unsatisfiable and the Review Readiness Dashboard / GSTACK
REVIEW REPORT had no plan-devex-review data to read. Add a Review Log
section before the dashboard read, logging the devex fields the report
parser already expects (status, scores, product_type, tthw, persona,
competitive_tier, unresolved, commit).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Garry Tan
2026-06-07 22:39:20 -07:00
parent 476b0ec597
commit ebe2a22731
2 changed files with 52 additions and 0 deletions
@@ -576,6 +576,32 @@ this run (an empty file means "ran, no findings" — distinct from "didn't run")
### Unresolved Decisions
If any AskUserQuestion goes unanswered, note here. Never silently default.
## Review Log
After producing the DX Scorecard above, persist the review result. Without this step
the Review Readiness Dashboard and the GSTACK REVIEW REPORT have no plan-devex-review
data to read, and the EXIT PLAN MODE GATE's "review log was called" check cannot pass.
**PLAN MODE EXCEPTION — ALWAYS RUN:** This command writes review metadata to
`~/.gstack/` (user config directory, not project files). The skill preamble
already writes to `~/.gstack/sessions/` and `~/.gstack/analytics/` — this is
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-devex-review","timestamp":"TIMESTAMP","status":"STATUS","initial_score":N,"overall_score":N,"product_type":"PRODUCT_TYPE","tthw_current":"TTHW_CURRENT","tthw_target":"TTHW_TARGET","mode":"MODE","persona":"PERSONA","competitive_tier":"COMPETITIVE_TIER","unresolved":N,"commit":"COMMIT"}'
```
Substitute values from the DX Scorecard and Step 0 setup:
- **TIMESTAMP**: current ISO 8601 datetime
- **STATUS**: "clean" if overall score 8+ AND 0 unresolved; otherwise "issues_open"
- **initial_score**: initial overall DX score before fixes (0-10)
- **overall_score**: final overall DX score after fixes (0-10)
- **product_type / persona / competitive_tier / mode**: from Step 0 setup
- **tthw_current / tthw_target**: time-to-hello-world now vs target
- **unresolved**: number of unresolved decisions
- **COMMIT**: output of `git rev-parse --short HEAD`
## Review Readiness Dashboard
After completing the review, read the review log and config to display the dashboard.
@@ -334,6 +334,32 @@ DX IMPLEMENTATION CHECKLIST
### Unresolved Decisions
If any AskUserQuestion goes unanswered, note here. Never silently default.
## Review Log
After producing the DX Scorecard above, persist the review result. Without this step
the Review Readiness Dashboard and the GSTACK REVIEW REPORT have no plan-devex-review
data to read, and the EXIT PLAN MODE GATE's "review log was called" check cannot pass.
**PLAN MODE EXCEPTION — ALWAYS RUN:** This command writes review metadata to
`~/.gstack/` (user config directory, not project files). The skill preamble
already writes to `~/.gstack/sessions/` and `~/.gstack/analytics/` — this is
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-devex-review","timestamp":"TIMESTAMP","status":"STATUS","initial_score":N,"overall_score":N,"product_type":"PRODUCT_TYPE","tthw_current":"TTHW_CURRENT","tthw_target":"TTHW_TARGET","mode":"MODE","persona":"PERSONA","competitive_tier":"COMPETITIVE_TIER","unresolved":N,"commit":"COMMIT"}'
```
Substitute values from the DX Scorecard and Step 0 setup:
- **TIMESTAMP**: current ISO 8601 datetime
- **STATUS**: "clean" if overall score 8+ AND 0 unresolved; otherwise "issues_open"
- **initial_score**: initial overall DX score before fixes (0-10)
- **overall_score**: final overall DX score after fixes (0-10)
- **product_type / persona / competitive_tier / mode**: from Step 0 setup
- **tthw_current / tthw_target**: time-to-hello-world now vs target
- **unresolved**: number of unresolved decisions
- **COMMIT**: output of `git rev-parse --short HEAD`
{{REVIEW_DASHBOARD}}
{{PLAN_FILE_REVIEW_REPORT}}