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 ### Unresolved Decisions
If any AskUserQuestion goes unanswered, note here. Never silently default. 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 ## Review Readiness Dashboard
After completing the review, read the review log and config to display the dashboard. After completing the review, read the review log and config to display the dashboard.
@@ -334,6 +334,32 @@ DX IMPLEMENTATION CHECKLIST
### Unresolved Decisions ### Unresolved Decisions
If any AskUserQuestion goes unanswered, note here. Never silently default. 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}} {{REVIEW_DASHBOARD}}
{{PLAN_FILE_REVIEW_REPORT}} {{PLAN_FILE_REVIEW_REPORT}}