mirror of
https://github.com/garrytan/gstack.git
synced 2026-08-31 10:20:42 +02:00
v1.57.7.0 feat: GSTACK REVIEW REPORT always declares unresolved decisions (#1916)
* 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> * feat(review): make unresolved-decisions status mandatory in GSTACK REVIEW REPORT 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> * refactor(review): compress unresolved-status prose to fit parity budget After merging origin/main (v1.57.3.0), plan-devex-review exceeded the 1.05x parity ratio vs the v1.53.0.0 baseline. Rather than rebase the baseline, compressed the new prose to stay under the cap honestly: the report's unresolved-status block (~32 -> ~9 lines) and the EXIT PLAN MODE GATE's final-line check (~7 -> ~5 lines), plus the plan-devex-review review-log step. All load-bearing rules and the exact gate-checkable tokens are preserved; the static guards in gen-skill-docs.test.ts still pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test: regenerate stale ship golden fixtures (#1909 follow-up) #1909 (v1.57.3.0) added the always-loaded PR-title-version rule to ship's template and committed the regenerated ship/SKILL.md, but did not refresh the three ship golden fixtures, leaving the golden-file regression test red on main. Regenerate them from current output. The diff is purely #1909 content: the PR-title invariant line plus a previously-unresolved ${ctx.paths.binDir} placeholder that current generation correctly resolves. No feature content from this branch leaks into ship (ship does not consume the review report resolvers). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(plan-devex-review): restore TIMESTAMP fill instruction in review-log Adversarial review caught that compressing the devex review-log block dropped the TIMESTAMP substitution guidance the three sibling plan-review skills carry. A literal "timestamp":"TIMESTAMP" parses as JSON but is an unparseable date, so the Review Readiness Dashboard's 7-day freshness window silently drops the plan-devex-review row (and the report's prior-review aggregation loses it). Restore the one-line instruction. Also: the plan-review-report E2E now derives its last-line check from the report slice, not the whole file, so a mis-placed report surfaces the real trailing content in the failure message. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test(parity): rebase parity baseline v1.53.0.0 -> v1.57.7.0 The v1.53 anchor is four minor versions stale. v1.54-v1.57 (ship/plan carving, carve-guards, AUQ prose fallback, the cross-session decision-log preamble) plus this branch's mandatory unresolved-decisions status line pushed the three plan-review skills past the 5% ratchet even after exhaustive compression. The new baseline captures current UNION sizes (skeleton + sections/*.md, matching what parity-harness measures) so the per-skill 1.05 ratio keeps catching future bloat. The frozen v1.44.1 integrity anchor and the v1.47 size-budget baseline are untouched. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * chore: bump version and changelog (v1.57.7.0) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
9cc41b7163
commit
1626d4857b
@@ -1,5 +1,64 @@
|
||||
# Changelog
|
||||
|
||||
## [1.57.7.0] - 2026-06-08
|
||||
|
||||
## **Every plan review now ends by telling you, in one line, whether anything is still unresolved.**
|
||||
## **The GSTACK REVIEW REPORT closes with the open decisions, or "NO UNRESOLVED DECISIONS" in plain sight, before you approve.**
|
||||
|
||||
When a plan-review skill (/plan-ceo-review, /plan-eng-review, /plan-design-review,
|
||||
/plan-devex-review, and /codex) finishes and hands you the plan to approve, its report
|
||||
now ends with a mandatory unresolved-decisions verdict. If decisions are still open, it
|
||||
lists each one and what breaks if you ship it deferred. If nothing is open, it prints the
|
||||
exact line NO UNRESOLVED DECISIONS. A token-reduction pass had made this line optional, so
|
||||
a clean plan and a plan hiding an open question rendered the same. Now the line is never
|
||||
omitted, it is always the last thing you read before the approval prompt, and the approval
|
||||
gate refuses to let the plan through without it.
|
||||
|
||||
### What changed, before and after
|
||||
|
||||
| At plan-approval time | Before | After |
|
||||
|---|---|---|
|
||||
| Clean plan | usually no unresolved line | `NO UNRESOLVED DECISIONS` as the final line |
|
||||
| Plan with open decisions | unresolved line optional, often dropped | `**UNRESOLVED DECISIONS:**` + one bullet per open item |
|
||||
| Approval gate (ExitPlanMode) | checked the line "if applicable" | blocks unless the unresolved status is the final line |
|
||||
| /plan-devex-review review log | never written, gate uncheckable | written, so the dashboard and report see its data |
|
||||
|
||||
The unresolved count across reviews is computed without double-counting the review that
|
||||
just ran, using the same 7-day freshness window as the Review Readiness Dashboard.
|
||||
|
||||
### What this means for you
|
||||
|
||||
Every approve-plan moment now carries an explicit verdict on open questions, so a missed
|
||||
ambiguity cannot slip through looking like a clean plan. If you run the plan-review skills
|
||||
or /autoplan, you will see the unresolved status as the closing line of every report.
|
||||
Nothing to configure. Upgrade and your next plan review shows it.
|
||||
|
||||
### Itemized changes
|
||||
|
||||
#### Added
|
||||
- **Mandatory unresolved-decisions status in the GSTACK REVIEW REPORT.** Generated into
|
||||
all six report consumers (/plan-ceo-review, /plan-eng-review, /plan-design-review,
|
||||
/plan-devex-review, /codex, /devex-review) from `scripts/resolvers/review.ts`. The report
|
||||
always ends with either the exact unbolded sentinel `NO UNRESOLVED DECISIONS` or a
|
||||
`**UNRESOLVED DECISIONS:**` bullet block listing each open item; never omitted, always
|
||||
the final line.
|
||||
- **Blocking approval gate.** The EXIT PLAN MODE GATE now refuses ExitPlanMode unless the
|
||||
report's final non-whitespace line is the unresolved status (no "if applicable" escape).
|
||||
- Static and E2E tests pinning the mandatory status across every report consumer and
|
||||
gate-bearing skill, so a future compression pass cannot silently drop it again.
|
||||
|
||||
#### Fixed
|
||||
- **/plan-devex-review never logged a review entry.** It carried the approval gate but
|
||||
never called `gstack-review-log`, so the gate's "review log was called" check was
|
||||
structurally unsatisfiable and its data was invisible to the Review Readiness Dashboard
|
||||
and the report. It now logs with the correct timestamp and DX fields.
|
||||
|
||||
#### For contributors
|
||||
- Rebased the parity-suite size baseline v1.53.0.0 to v1.57.7.0 (captures current union
|
||||
sizes; keeps the per-skill 1.05 ratio so future bloat is still caught). Regenerated the
|
||||
three ship golden fixtures left stale by #1909. The frozen v1.44.1 integrity anchor and
|
||||
the v1.47 size-budget baseline are untouched.
|
||||
|
||||
## [1.57.6.0] - 2026-06-07
|
||||
|
||||
## **Eight community-filed bugs fixed in one wave, four of them security guards that were quietly failing open.**
|
||||
|
||||
Reference in New Issue
Block a user