feat(plan): proportional planning via build-scale classification (v1.61.0.0)#18
Conversation
…uilds (garrytan#886) A /plan Discovery run on a for-fun terminal toy burned ~115K output tokens: 10 one-at-a-time AskUserQuestion rounds, a consent-gated web search, a wireframe, outside-voice offers, a 3-iteration adversarial review loop, and a design doc with a Distribution Plan. The office-hours specialist scales every builder session to startup-diagnostic depth because nothing classifies build scale. Evidence for upstream issue garrytan#886 (GENERAL: Reduce Token Overhead, disposition NEEDS_EVIDENCE): session transcript ~/.claude/projects/-Users-sinabina-spacegame/b01e246b-*.jsonl. The overlay classifies session-scale vs product-scale after Phase 1 and, for session-scale builder sessions, batches remaining Phase 2B questions into one round, default-skips the landscape search, gates the sketch and outside voices on an explicit ask, caps adversarial review at one iteration, and sizes Next Steps in hours, not a phased roadmap. Both approval gates and startup-mode pressure are unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…al-discovery overlay Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…across all /plan specialists The first cut only right-sized office-hours builder mode. Any planning specialist can over-treat a small ask, so scale detection now lives in the /plan dispatcher itself: a Scale header line classified from fifteen build-scale vectors (audience, users, commercial intent, deployment, horizon, maintenance, integration surface, extensibility, data sensitivity, stakes, team, codebase, reversibility, distribution, compliance). Highest vector wins; unknown vectors default low; never ask questions just to classify. "A cool space animation in my terminal" is session-scale; "a startup with customizable APIs" is venture-scale. Overlay garrytan#886 now targets all six planning specialists (office-hours, plan-ceo-review, plan-eng-review, plan-devex-review, spec, autoplan) and keys its proportionality budgets (question batching, research and outside-voice gating, review-iteration caps, artifact size, step units) off the printed Scale. product/venture scale changes nothing; STOP and approval gates are unchanged at every scale. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…anning Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…enerated Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
5022844 to
17f1e31
Compare
… read pinned blobs The generator reads pinned 1.x templates via git show at GSTACK2_BASE_SHA (bb57306), which is only reachable from codex/* branches. PR checkouts never fetch it, so every gate job that runs gen:gstack2 failed on any pull request to this repo (this workflow had never passed on a PR; its only green run was a workflow_dispatch on a codex/gstack-2-ci-* branch). A depth-1 fetch of the pinned sha gives git show the commit, trees, and blobs it needs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
1 issue found across 1 file (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name=".github/workflows/gstack2-gate.yml">
<violation number="1" location=".github/workflows/gstack2-gate.yml:28">
P3: Three jobs already fetch all branch history via `fetch-depth: 0`, so this extra fetch only adds redundant network requests (five CI executions including the OS matrix). Consider retaining it only for `installed-first-use`, whose checkout is shallow.</violation>
</file>
Reply with feedback, questions, or to request a fix.
Fix all with cubic | Re-trigger cubic
| @@ -25,6 +25,8 @@ jobs: | |||
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | |||
There was a problem hiding this comment.
P3: Three jobs already fetch all branch history via fetch-depth: 0, so this extra fetch only adds redundant network requests (five CI executions including the OS matrix). Consider retaining it only for installed-first-use, whose checkout is shallow.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .github/workflows/gstack2-gate.yml, line 28:
<comment>Three jobs already fetch all branch history via `fetch-depth: 0`, so this extra fetch only adds redundant network requests (five CI executions including the OS matrix). Consider retaining it only for `installed-first-use`, whose checkout is shallow.</comment>
<file context>
@@ -25,6 +25,8 @@ jobs:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0
+ - name: Fetch the pinned GStack 2 base commit (not reachable from PR refs)
+ run: git fetch --no-tags --depth=1 origin bb57306d98c97011b0919c6132705a15b1579781
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
</file context>
There was a problem hiding this comment.
19 issues found and verified against the latest diff
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="skills/plan/references/legacy/office-hours.md">
<violation number="1" location="skills/plan/references/legacy/office-hours.md:788">
P2: Session/hobby Phase 2B has conflicting control flow: this batches all unanswered questions, but the binding Phase 2B contract still requires a STOP and response after each question. Clarifying that the one-at-a-time/per-question STOP rule is replaced by one STOP after each batch would make proportional planning deterministic while preserving the remaining gates.</violation>
</file>
<file name="skills/plan/SKILL.md">
<violation number="1" location="skills/plan/SKILL.md:45">
P2: Scale classification remains ambiguous for many of the fifteen vectors: values such as regulated data, audited compliance, and breaking migrations are not mapped to any tier. A per-vector tier mapping would make the highest-tier-wins rule deterministic across specialists.</violation>
</file>
<file name="skills/plan/references/legacy/plan-eng-review.md">
<violation number="1" location="skills/plan/references/legacy/plan-eng-review.md:308">
P1: Session/hobby reviews now receive mutually exclusive instructions: skip web/outside voices, yet later blocking checks still require those steps to run. The scale overlay should explicitly amend the mandatory Step 0, lazy-section, and self-check rules so a proportional review can finish deterministically.</violation>
<violation number="2" location="skills/plan/references/legacy/plan-eng-review.md:311">
P2: A late upgrade to product/venture scale does not restore the full workflow because earlier scale-dependent phases may already have been skipped. Clarify that an upgrade first backfills previously omitted required phases before continuing.</violation>
</file>
<file name="CHANGELOG.md">
<violation number="1" location="CHANGELOG.md:10">
P1: The changelog now simultaneously says GStack 2 is blocked with no release/version claim and publishes 1.61.0.0 as a release. Resolve the authoritative blocked status before adding this entry, or keep the entry/version bump out until the gate clears.</violation>
<violation number="2" location="CHANGELOG.md:15">
P3: This 7-sentence lead and 387-word summary exceed the required 3–5 sentences and roughly 250–350 words. Consolidating the examples and classification details would restore the standard release-note shape.</violation>
</file>
<file name=".gitattributes">
<violation number="1" location=".gitattributes:62">
P2: Supplemental paid live-eval evidence will now be collapsed as generated even though `gen:gstack2` neither regenerates nor clean-checks it. Excluding `evals/parity/transcripts/live/**` keeps these non-deterministic results reviewable while retaining collapse behavior for deterministic parity output.</violation>
</file>
<file name="scripts/gstack2/generate-skill-tree.ts">
<violation number="1" location="scripts/gstack2/generate-skill-tree.ts:220">
P1: Scale classification diverges for common single-vector prompts: the generated `/plan` rules label hosted work as product and existing/shared work as project, while regression case 886 returns project and hobby respectively. Deriving the Build scale text from the rank map, or aligning both mappings, would keep the printed `Scale:` and proportional workflow deterministic.</violation>
</file>
<file name="scripts/gstack2/bug-fix-overlays.ts">
<violation number="1" location="scripts/gstack2/bug-fix-overlays.ts:362">
P2: The advertised vector-to-tier regression only validates the all-low `session` case, so it cannot catch tier transitions or highest-vector selection. Adding table-driven cases across all 15 vectors and all five scales would make this executable regression cover the feature's core rule.</violation>
<violation number="2" location="scripts/gstack2/bug-fix-overlays.ts:566">
P2: Trust-sensitive or migration-bearing plans can be downgraded to `session` because these documented vector values fall through the unknown-value default. Adding the missing aliases keeps “unknown vectors stay low” from applying to known signals.</violation>
<violation number="3" location="scripts/gstack2/bug-fix-overlays.ts:568">
P2: Shared work and plans in an existing repository are classified as `hobby`, although the Build scale contract makes both `project` signals. Mapping `codebase.existing` and `distribution.shared` to rank 2 would align the executable regression with the printed classifier.</violation>
<violation number="4" location="scripts/gstack2/bug-fix-overlays.ts:582">
P2: Project-scale regression output unconditionally reports question batching even for specialists whose source preserves one-question-per-STOP pressure. Representing the non-small result as the specialist default avoids certifying an unauthorized skip.</violation>
<violation number="5" location="scripts/gstack2/bug-fix-overlays.ts:585">
P2: Product and venture regression output weakens default-on outside-voice passes into an offer, contradicting the “nothing removed” contract for several targets. Non-small scales should preserve the specialist default rather than impose one shared optional behavior.</violation>
</file>
<file name="skills/plan/references/legacy/autoplan.md">
<violation number="1" location="skills/plan/references/legacy/autoplan.md:1101">
P2: Session/hobby runs cannot reliably skip outside voices: every autoplan phase and the pre-gate checklist still mandates them, so execution may run them anyway or retry and finish with an incomplete-output warning. An autoplan-specific override should mark scale-skipped voices as satisfied/skipped across phase checklists, verification, and logging.</violation>
<violation number="2" location="skills/plan/references/legacy/autoplan.md:1101">
P1: Session/hobby Full-chain runs now have a third kind of user gate: this rule sends all unanswered questions to `AskUserQuestion`, but autoplan requires every question except premise confirmation and User Challenges to be auto-decided. The proportional rule should explicitly preserve autoplan's two-gate behavior and apply batching only to interactive specialists.</violation>
</file>
<file name="docs/gstack-2/JUDGMENT-PROVENANCE.json">
<violation number="1" location="docs/gstack-2/JUDGMENT-PROVENANCE.json:7423">
P2: The provenance manifest now declares 25 bug-fix ports but contains 26, so consumers of the authoritative `counts` summary receive stale verification data. The generator should derive `bug_fix_ports` from `BUG_FIX_OVERLAYS.length` and regenerate this file.</violation>
</file>
<file name="skills/plan/references/legacy/plan-devex-review.md">
<violation number="1" location="skills/plan/references/legacy/plan-devex-review.md:698">
P2: Session/hobby DX reviews now have mutually exclusive instructions: batching all questions bypasses the per-issue STOP gates, and a near-one-page artifact conflicts with the mandatory outputs that the exit self-check requires in full. Explicitly exempt STOP-bound decisions and required outputs from proportional reductions while allowing non-gating discovery questions and prose to be condensed.</violation>
<violation number="2" location="skills/plan/references/legacy/plan-devex-review.md:703">
P3: The DX specialist prompt now carries an office-hours-only workflow paragraph whose phases do not exist in plan-devex-review, adding irrelevant instructions and token overhead to every DX run. Generate this paragraph only for the `office-hours` target, leaving the shared proportional-planning rules in the common overlay.</violation>
</file>
<file name="evals/parity/manifest.json">
<violation number="1" location="evals/parity/manifest.json:7423">
P2: Provenance now identifies issue #886 as a PR and replaces its actual title, causing generated fixtures, parity messages, and migration references to cite a nonexistent “PR #886.” Consider making the overlay reference kind explicit (`issue`/`pull-request`) and preserving the source title so issue-backed judgment overlays remain auditable.</violation>
</file>
Tip: instead of fixing issues one by one fix them all with cubic
Re-trigger cubic
|
|
||
| The /plan dispatcher prints a `Scale:` header line classified from fifteen build-scale vectors (its Build scale section). This rule authorizes every planning specialist to size its machinery to that scale while keeping every STOP gate and approval boundary; a polite user answering every question is not evidence the full machinery is wanted, and the user can always ask for the complete treatment. | ||
|
|
||
| - `session` and `hobby`: batch every question the initial prompt left unanswered into one AskUserQuestion round (two rounds for hobby); skip web or landscape research, outside voices, second opinions, and visual sketches unless the user asks (privacy gates are unchanged whenever they run); cap any adversarial or spec review loop at one iteration; keep the decision artifact near one page with next steps sized in hours (session) or days (hobby), never a phased multi-week roadmap or a distribution plan the user did not ask for. |
There was a problem hiding this comment.
P1: Session/hobby Full-chain runs now have a third kind of user gate: this rule sends all unanswered questions to AskUserQuestion, but autoplan requires every question except premise confirmation and User Challenges to be auto-decided. The proportional rule should explicitly preserve autoplan's two-gate behavior and apply batching only to interactive specialists.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At skills/plan/references/legacy/autoplan.md, line 1101:
<comment>Session/hobby Full-chain runs now have a third kind of user gate: this rule sends all unanswered questions to `AskUserQuestion`, but autoplan requires every question except premise confirmation and User Challenges to be auto-decided. The proportional rule should explicitly preserve autoplan's two-gate behavior and apply batching only to interactive specialists.</comment>
<file context>
@@ -1088,3 +1088,20 @@ Before design and DX phases, print the detected scope signals and counts that dr
+
+The /plan dispatcher prints a `Scale:` header line classified from fifteen build-scale vectors (its Build scale section). This rule authorizes every planning specialist to size its machinery to that scale while keeping every STOP gate and approval boundary; a polite user answering every question is not evidence the full machinery is wanted, and the user can always ask for the complete treatment.
+
+- `session` and `hobby`: batch every question the initial prompt left unanswered into one AskUserQuestion round (two rounds for hobby); skip web or landscape research, outside voices, second opinions, and visual sketches unless the user asks (privacy gates are unchanged whenever they run); cap any adversarial or spec review loop at one iteration; keep the decision artifact near one page with next steps sized in hours (session) or days (hobby), never a phased multi-week roadmap or a distribution plan the user did not ask for.
+- `project`: run the specialist's default workflow, batching question rounds where its source authorizes smart skips; size the roadmap in weeks.
+- `product` and `venture`: the full specialist workflow and its complete question pressure apply; this rule removes nothing.
</file context>
|
|
||
| The /plan dispatcher prints a `Scale:` header line classified from fifteen build-scale vectors (its Build scale section). This rule authorizes every planning specialist to size its machinery to that scale while keeping every STOP gate and approval boundary; a polite user answering every question is not evidence the full machinery is wanted, and the user can always ask for the complete treatment. | ||
|
|
||
| - `session` and `hobby`: batch every question the initial prompt left unanswered into one AskUserQuestion round (two rounds for hobby); skip web or landscape research, outside voices, second opinions, and visual sketches unless the user asks (privacy gates are unchanged whenever they run); cap any adversarial or spec review loop at one iteration; keep the decision artifact near one page with next steps sized in hours (session) or days (hobby), never a phased multi-week roadmap or a distribution plan the user did not ask for. |
There was a problem hiding this comment.
P1: Session/hobby reviews now receive mutually exclusive instructions: skip web/outside voices, yet later blocking checks still require those steps to run. The scale overlay should explicitly amend the mandatory Step 0, lazy-section, and self-check rules so a proportional review can finish deterministically.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At skills/plan/references/legacy/plan-eng-review.md, line 308:
<comment>Session/hobby reviews now receive mutually exclusive instructions: skip web/outside voices, yet later blocking checks still require those steps to run. The scale overlay should explicitly amend the mandatory Step 0, lazy-section, and self-check rules so a proportional review can finish deterministically.</comment>
<file context>
@@ -295,3 +295,20 @@ Persist a learning only when the interaction contains a useful, reusable signal
+
+The /plan dispatcher prints a `Scale:` header line classified from fifteen build-scale vectors (its Build scale section). This rule authorizes every planning specialist to size its machinery to that scale while keeping every STOP gate and approval boundary; a polite user answering every question is not evidence the full machinery is wanted, and the user can always ask for the complete treatment.
+
+- `session` and `hobby`: batch every question the initial prompt left unanswered into one AskUserQuestion round (two rounds for hobby); skip web or landscape research, outside voices, second opinions, and visual sketches unless the user asks (privacy gates are unchanged whenever they run); cap any adversarial or spec review loop at one iteration; keep the decision artifact near one page with next steps sized in hours (session) or days (hobby), never a phased multi-week roadmap or a distribution plan the user did not ask for.
+- `project`: run the specialist's default workflow, batching question rounds where its source authorizes smart skips; size the roadmap in weeks.
+- `product` and `venture`: the full specialist workflow and its complete question pressure apply; this rule removes nothing.
</file context>
| > completion state and remaining P0 gates. No version bump or release claim is | ||
| > made here while that status holds. | ||
|
|
||
| ## [1.61.0.0] - 2026-07-22 |
There was a problem hiding this comment.
P1: The changelog now simultaneously says GStack 2 is blocked with no release/version claim and publishes 1.61.0.0 as a release. Resolve the authoritative blocked status before adding this entry, or keep the entry/version bump out until the gate clears.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At CHANGELOG.md, line 10:
<comment>The changelog now simultaneously says GStack 2 is blocked with no release/version claim and publishes 1.61.0.0 as a release. Resolve the authoritative blocked status before adding this entry, or keep the entry/version bump out until the gate clears.</comment>
<file context>
@@ -7,6 +7,45 @@
> completion state and remaining P0 gates. No version bump or release claim is
> made here while that status holds.
+## [1.61.0.0] - 2026-07-22
+
+## **/plan now sizes its machinery to your ask.**
</file context>
|
|
||
| Vectors: audience (self → friends/team → public), expected users (none → handful → many), commercial intent (none → maybe → core), deployment target (none/local → hosted → production), time horizon (one sitting → days → weeks → months+), maintenance expectation (throwaway → kept → maintained), integration surface (standalone → consumes APIs → exposes APIs/multi-service), extensibility ask (fixed → configurable → customizable platform), data sensitivity (none → personal → regulated), failure stakes (lost fun → annoyance → money/trust/safety), team (solo → few → org), codebase (greenfield → existing repo → legacy production), reversibility (discardable → migrations/breaking changes), distribution (private → shared → published), compliance (none → some → audited). | ||
|
|
||
| The highest tier any vector demands wins: \`session\` (all vectors low — one sitting, for fun, self only), \`hobby\` (kept personal tool, days), \`project\` (shared or in a real repo, weeks), \`product\` (external users, hosted, revenue intent), \`venture\` (startup ambition, platform/API surface, team, months+). "A cool space animation in my terminal" is session-scale. "A startup with customizable APIs" is venture-scale. Print the result on the header's Scale line with the two or three vectors that decided it. |
There was a problem hiding this comment.
P1: Scale classification diverges for common single-vector prompts: the generated /plan rules label hosted work as product and existing/shared work as project, while regression case 886 returns project and hobby respectively. Deriving the Build scale text from the rank map, or aligning both mappings, would keep the printed Scale: and proportional workflow deterministic.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At scripts/gstack2/generate-skill-tree.ts, line 220:
<comment>Scale classification diverges for common single-vector prompts: the generated `/plan` rules label hosted work as product and existing/shared work as project, while regression case 886 returns project and hobby respectively. Deriving the Build scale text from the rank map, or aligning both mappings, would keep the printed `Scale:` and proportional workflow deterministic.</comment>
<file context>
@@ -203,7 +203,23 @@ function rootSkill(dispatcher: DispatcherDefinition): string {
+
+Vectors: audience (self → friends/team → public), expected users (none → handful → many), commercial intent (none → maybe → core), deployment target (none/local → hosted → production), time horizon (one sitting → days → weeks → months+), maintenance expectation (throwaway → kept → maintained), integration surface (standalone → consumes APIs → exposes APIs/multi-service), extensibility ask (fixed → configurable → customizable platform), data sensitivity (none → personal → regulated), failure stakes (lost fun → annoyance → money/trust/safety), team (solo → few → org), codebase (greenfield → existing repo → legacy production), reversibility (discardable → migrations/breaking changes), distribution (private → shared → published), compliance (none → some → audited).
+
+The highest tier any vector demands wins: \`session\` (all vectors low — one sitting, for fun, self only), \`hobby\` (kept personal tool, days), \`project\` (shared or in a real repo, weeks), \`product\` (external users, hosted, revenue intent), \`venture\` (startup ambition, platform/API surface, team, months+). "A cool space animation in my terminal" is session-scale. "A startup with customizable APIs" is venture-scale. Print the result on the header's Scale line with the two or three vectors that decided it.
+`
+ : '';
</file context>
|
|
||
| The /plan dispatcher prints a `Scale:` header line classified from fifteen build-scale vectors (its Build scale section). This rule authorizes every planning specialist to size its machinery to that scale while keeping every STOP gate and approval boundary; a polite user answering every question is not evidence the full machinery is wanted, and the user can always ask for the complete treatment. | ||
|
|
||
| - `session` and `hobby`: batch every question the initial prompt left unanswered into one AskUserQuestion round (two rounds for hobby); skip web or landscape research, outside voices, second opinions, and visual sketches unless the user asks (privacy gates are unchanged whenever they run); cap any adversarial or spec review loop at one iteration; keep the decision artifact near one page with next steps sized in hours (session) or days (hobby), never a phased multi-week roadmap or a distribution plan the user did not ask for. |
There was a problem hiding this comment.
P2: Session/hobby runs cannot reliably skip outside voices: every autoplan phase and the pre-gate checklist still mandates them, so execution may run them anyway or retry and finish with an incomplete-output warning. An autoplan-specific override should mark scale-skipped voices as satisfied/skipped across phase checklists, verification, and logging.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At skills/plan/references/legacy/autoplan.md, line 1101:
<comment>Session/hobby runs cannot reliably skip outside voices: every autoplan phase and the pre-gate checklist still mandates them, so execution may run them anyway or retry and finish with an incomplete-output warning. An autoplan-specific override should mark scale-skipped voices as satisfied/skipped across phase checklists, verification, and logging.</comment>
<file context>
@@ -1088,3 +1088,20 @@ Before design and DX phases, print the detected scope signals and counts that dr
+
+The /plan dispatcher prints a `Scale:` header line classified from fifteen build-scale vectors (its Build scale section). This rule authorizes every planning specialist to size its machinery to that scale while keeping every STOP gate and approval boundary; a polite user answering every question is not evidence the full machinery is wanted, and the user can always ask for the complete treatment.
+
+- `session` and `hobby`: batch every question the initial prompt left unanswered into one AskUserQuestion round (two rounds for hobby); skip web or landscape research, outside voices, second opinions, and visual sketches unless the user asks (privacy gates are unchanged whenever they run); cap any adversarial or spec review loop at one iteration; keep the decision artifact near one page with next steps sized in hours (session) or days (hobby), never a phased multi-week roadmap or a distribution plan the user did not ask for.
+- `project`: run the specialist's default workflow, batching question rounds where its source authorizes smart skips; size the roadmap in weeks.
+- `product` and `venture`: the full specialist workflow and its complete question pressure apply; this rule removes nothing.
</file context>
| integration: { standalone: 0, 'consumes-apis': 1, 'exposes-apis': 3, 'multi-service': 3 }, | ||
| extensibility: { fixed: 0, configurable: 2, 'customizable-platform': 4 }, | ||
| data: { none: 0, personal: 2, regulated: 4 }, | ||
| stakes: { fun: 0, annoyance: 1, money: 3, safety: 4 }, |
There was a problem hiding this comment.
P2: Trust-sensitive or migration-bearing plans can be downgraded to session because these documented vector values fall through the unknown-value default. Adding the missing aliases keeps “unknown vectors stay low” from applying to known signals.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At scripts/gstack2/bug-fix-overlays.ts, line 566:
<comment>Trust-sensitive or migration-bearing plans can be downgraded to `session` because these documented vector values fall through the unknown-value default. Adding the missing aliases keeps “unknown vectors stay low” from applying to known signals.</comment>
<file context>
@@ -531,6 +552,41 @@ export function evaluateBugFixRegression(pr: number, rawInput: unknown): Record<
+ integration: { standalone: 0, 'consumes-apis': 1, 'exposes-apis': 3, 'multi-service': 3 },
+ extensibility: { fixed: 0, configurable: 2, 'customizable-platform': 4 },
+ data: { none: 0, personal: 2, regulated: 4 },
+ stakes: { fun: 0, annoyance: 1, money: 3, safety: 4 },
+ team: { solo: 0, few: 2, org: 3 },
+ codebase: { greenfield: 0, existing: 1, 'legacy-production': 3 },
</file context>
| data: { none: 0, personal: 2, regulated: 4 }, | ||
| stakes: { fun: 0, annoyance: 1, money: 3, safety: 4 }, | ||
| team: { solo: 0, few: 2, org: 3 }, | ||
| codebase: { greenfield: 0, existing: 1, 'legacy-production': 3 }, |
There was a problem hiding this comment.
P2: Shared work and plans in an existing repository are classified as hobby, although the Build scale contract makes both project signals. Mapping codebase.existing and distribution.shared to rank 2 would align the executable regression with the printed classifier.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At scripts/gstack2/bug-fix-overlays.ts, line 568:
<comment>Shared work and plans in an existing repository are classified as `hobby`, although the Build scale contract makes both `project` signals. Mapping `codebase.existing` and `distribution.shared` to rank 2 would align the executable regression with the printed classifier.</comment>
<file context>
@@ -531,6 +552,41 @@ export function evaluateBugFixRegression(pr: number, rawInput: unknown): Record<
+ data: { none: 0, personal: 2, regulated: 4 },
+ stakes: { fun: 0, annoyance: 1, money: 3, safety: 4 },
+ team: { solo: 0, few: 2, org: 3 },
+ codebase: { greenfield: 0, existing: 1, 'legacy-production': 3 },
+ reversibility: { discardable: 0, breaking: 3 },
+ distribution: { private: 0, shared: 1, published: 3 },
</file context>
| ## **/plan now sizes its machinery to your ask.** | ||
| ## **A terminal toy gets one question round, not a startup diagnostic.** | ||
|
|
||
| Ask /plan for something small and it plans something small. The dispatcher now classifies every request on fifteen build-scale vectors (audience, users, commercial intent, deployment, time horizon, integration surface, extensibility, stakes, and so on) and prints the verdict as a `Scale:` line in the execution header: session, hobby, project, product, or venture. Every planning specialist keys its effort to that line. "A cool space animation in my terminal" is session-scale and gets one batched question round, no web research, no outside design voices, and a one-page doc with next steps in hours. "A startup with customizable APIs" is venture-scale and gets the full question pressure, exactly as before. Classification comes from your prompt and cheap repository evidence only; /plan never asks questions just to decide how many questions to ask. |
There was a problem hiding this comment.
P3: This 7-sentence lead and 387-word summary exceed the required 3–5 sentences and roughly 250–350 words. Consolidating the examples and classification details would restore the standard release-note shape.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At CHANGELOG.md, line 15:
<comment>This 7-sentence lead and 387-word summary exceed the required 3–5 sentences and roughly 250–350 words. Consolidating the examples and classification details would restore the standard release-note shape.</comment>
<file context>
@@ -7,6 +7,45 @@
+## **/plan now sizes its machinery to your ask.**
+## **A terminal toy gets one question round, not a startup diagnostic.**
+
+Ask /plan for something small and it plans something small. The dispatcher now classifies every request on fifteen build-scale vectors (audience, users, commercial intent, deployment, time horizon, integration surface, extensibility, stakes, and so on) and prints the verdict as a `Scale:` line in the execution header: session, hobby, project, product, or venture. Every planning specialist keys its effort to that line. "A cool space animation in my terminal" is session-scale and gets one batched question round, no web research, no outside design voices, and a one-page doc with next steps in hours. "A startup with customizable APIs" is venture-scale and gets the full question pressure, exactly as before. Classification comes from your prompt and cheap repository evidence only; /plan never asks questions just to decide how many questions to ask.
+
+### The numbers that matter
</file context>
| - `product` and `venture`: the full specialist workflow and its complete question pressure apply; this rule removes nothing. | ||
| - Never run a questioning round merely to classify scale. Classify from the prompt and cheap repository evidence, defaulting unknown vectors low; a specialist's own later questions may raise the scale mid-session, and an upgrade restores the full workflow from that point. | ||
|
|
||
| For office-hours specifically: at session or hobby scale, batch the Phase 2B questions (this refines the one-at-a-time rule, whose pressure exists for startup diagnostics), default-skip the Phase 2.75 landscape search, gate the visual sketch and outside design voices on an explicit ask, and cap the Spec Review Loop at one iteration. |
There was a problem hiding this comment.
P3: The DX specialist prompt now carries an office-hours-only workflow paragraph whose phases do not exist in plan-devex-review, adding irrelevant instructions and token overhead to every DX run. Generate this paragraph only for the office-hours target, leaving the shared proportional-planning rules in the common overlay.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At skills/plan/references/legacy/plan-devex-review.md, line 703:
<comment>The DX specialist prompt now carries an office-hours-only workflow paragraph whose phases do not exist in plan-devex-review, adding irrelevant instructions and token overhead to every DX run. Generate this paragraph only for the `office-hours` target, leaving the shared proportional-planning rules in the common overlay.</comment>
<file context>
@@ -685,3 +685,20 @@ Write questions, progress updates, reports, and artifacts in the language used b
+- `product` and `venture`: the full specialist workflow and its complete question pressure apply; this rule removes nothing.
+- Never run a questioning round merely to classify scale. Classify from the prompt and cheap repository evidence, defaulting unknown vectors low; a specialist's own later questions may raise the scale mid-session, and an upgrade restores the full workflow from that point.
+
+For office-hours specifically: at session or hobby scale, batch the Phase 2B questions (this refines the one-at-a-time rule, whose pressure exists for startup diagnostics), default-skip the Phase 2.75 landscape search, gate the visual sketch and outside design voices on an explicit ask, and cap the Spec Review Loop at one iteration.
+<!-- GSTACK2_BUG_FIX_END pr=886 -->
</file context>
…w repo-first (garrytan#703) The office-hours design doc lands at ~/.gstack/projects/<hashed-id>/<user>-<branch>-design-<timestamp>.md and the approval question points the user at that path. Nobody finds their design doc in a hidden hashed directory. Upstream issue garrytan#703 asks plan reviews to prefer repo-local design docs. Overlay garrytan#703 (office-hours, plan-ceo-review, plan-eng-review, plan-devex-review, autoplan): inside a repository the canonical doc goes to docs/designs/<topic>.md and every presentation or approval names that path; the $GSTACK_HOME copy is still written for downstream skills, prior-design lookup, and cross-team discovery. Outside a repository the $GSTACK_HOME path is printed in full. Reviewers prefer repo-local docs over the store when both exist. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… design-doc overlay Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
6 issues found across 24 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="skills/plan/references/legacy/plan-eng-review.md">
<violation number="1" location="skills/plan/references/legacy/plan-eng-review.md:323">
P2: Repo-local design docs are not actually discovered: the existing `Design Doc Check` only searches `$GSTACK_HOME`, so a doc under `docs/designs/` or `docs/plans/` is treated as missing and the prerequisite flow may run unnecessarily. The check should search repository-local candidates first and fall back to the cross-session store.</violation>
</file>
<file name="evals/parity/manifest.json">
<violation number="1" location="evals/parity/manifest.json:7442">
P2: The manifest now advertises 27 upstream bug-fix ports but still reports `bug_fix_ports: 25`, so consumers of the summary count receive stale parity metadata. Deriving that count from `BUG_FIX_OVERLAYS.length` in the generator and regenerating would keep the evidence artifact internally consistent.</violation>
</file>
<file name="scripts/gstack2/generate-skill-tree.ts">
<violation number="1" location="scripts/gstack2/generate-skill-tree.ts:782">
P3: The generated parity report now gives conflicting regression coverage totals: the inventory says 27 ports, but the verification list still says 25 fixtures. The latter could be updated to 27, or explicitly describe the 25 PR-backed plus 2 issue-backed fixtures.</violation>
</file>
<file name="skills/plan/references/legacy/plan-devex-review.md">
<violation number="1" location="skills/plan/references/legacy/plan-devex-review.md:713">
P2: Reviewing an existing repo-local plan can redirect the revised artifact from its supplied `docs/plans/` path into a new `docs/designs/` file, leaving the caller’s original plan stale. Consider preserving an existing or explicitly provided repo-local path and using `docs/designs/<topic>.md` only when creating a new artifact.</violation>
</file>
<file name="skills/plan/references/legacy/plan-ceo-review.md">
<violation number="1" location="skills/plan/references/legacy/plan-ceo-review.md:675">
P2: A second planning session for the same topic can overwrite the canonical repo-local document, including edits the user made since the first session. The repo-local rule should read and merge an existing `docs/designs/<topic>.md`, or preserve it/version the new artifact before replacing it.</violation>
</file>
<file name="skills/plan/references/legacy/autoplan.md">
<violation number="1" location="skills/plan/references/legacy/autoplan.md:1116">
P2: A crafted or simply path-like topic can make the agent write outside `docs/designs/` and overwrite another repository Markdown file. Resolve from `git rev-parse --show-toplevel` and require a sanitized single-component slug before writing.</violation>
</file>
Tip: instead of fixing issues one by one fix them all with cubic
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
|
|
||
| ### Repo-local design artifacts | ||
|
|
||
| When the session produces a design or plan document and the working directory is inside a repository, write it to `docs/designs/<topic>.md` in that repository (create `docs/designs/` if needed) and name that path every time the document is presented or approval is requested. A hashed home-directory path is never the thing the user is asked to open. Keep writing the cross-session copy under `"${GSTACK_HOME:-$HOME/.gstack}"/projects/<id>/` with the existing filename convention — downstream skills, prior-design lookup, and cross-team discovery depend on that store — but the repo-local file is the canonical one the user owns and edits. Outside a repository, the `$GSTACK_HOME` path remains the only copy; print it in full when asking for approval. When reviewing, prefer a repo-local design doc (`docs/designs/`, `docs/plans/`, or an explicitly provided path) over the `$GSTACK_HOME` store whenever both exist. |
There was a problem hiding this comment.
P2: Repo-local design docs are not actually discovered: the existing Design Doc Check only searches $GSTACK_HOME, so a doc under docs/designs/ or docs/plans/ is treated as missing and the prerequisite flow may run unnecessarily. The check should search repository-local candidates first and fall back to the cross-session store.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At skills/plan/references/legacy/plan-eng-review.md, line 323:
<comment>Repo-local design docs are not actually discovered: the existing `Design Doc Check` only searches `$GSTACK_HOME`, so a doc under `docs/designs/` or `docs/plans/` is treated as missing and the prerequisite flow may run unnecessarily. The check should search repository-local candidates first and fall back to the cross-session store.</comment>
<file context>
@@ -312,3 +312,13 @@ The /plan dispatcher prints a `Scale:` header line classified from fifteen build
+
+### Repo-local design artifacts
+
+When the session produces a design or plan document and the working directory is inside a repository, write it to `docs/designs/<topic>.md` in that repository (create `docs/designs/` if needed) and name that path every time the document is presented or approval is requested. A hashed home-directory path is never the thing the user is asked to open. Keep writing the cross-session copy under `"${GSTACK_HOME:-$HOME/.gstack}"/projects/<id>/` with the existing filename convention — downstream skills, prior-design lookup, and cross-team discovery depend on that store — but the repo-local file is the canonical one the user owns and edits. Outside a repository, the `$GSTACK_HOME` path remains the only copy; print it in full when asking for approval. When reviewing, prefer a repo-local design doc (`docs/designs/`, `docs/plans/`, or an explicitly provided path) over the `$GSTACK_HOME` store whenever both exist.
+<!-- GSTACK2_BUG_FIX_END pr=703 -->
</file context>
| "anchor": "GSTACK2_FIX_886_PROPORTIONAL_PLANNING" | ||
| }, | ||
| { | ||
| "pr": 703, |
There was a problem hiding this comment.
P2: The manifest now advertises 27 upstream bug-fix ports but still reports bug_fix_ports: 25, so consumers of the summary count receive stale parity metadata. Deriving that count from BUG_FIX_OVERLAYS.length in the generator and regenerating would keep the evidence artifact internally consistent.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At evals/parity/manifest.json, line 7442:
<comment>The manifest now advertises 27 upstream bug-fix ports but still reports `bug_fix_ports: 25`, so consumers of the summary count receive stale parity metadata. Deriving that count from `BUG_FIX_OVERLAYS.length` in the generator and regenerating would keep the evidence artifact internally consistent.</comment>
<file context>
@@ -7433,6 +7438,19 @@
"anchor": "GSTACK2_FIX_886_PROPORTIONAL_PLANNING"
},
+ {
+ "pr": 703,
+ "url": "https://github.com/garrytan/gstack/issues/703",
+ "title": "Write design docs repo-local and read them from the repo first",
</file context>
|
|
||
| ### Repo-local design artifacts | ||
|
|
||
| When the session produces a design or plan document and the working directory is inside a repository, write it to `docs/designs/<topic>.md` in that repository (create `docs/designs/` if needed) and name that path every time the document is presented or approval is requested. A hashed home-directory path is never the thing the user is asked to open. Keep writing the cross-session copy under `"${GSTACK_HOME:-$HOME/.gstack}"/projects/<id>/` with the existing filename convention — downstream skills, prior-design lookup, and cross-team discovery depend on that store — but the repo-local file is the canonical one the user owns and edits. Outside a repository, the `$GSTACK_HOME` path remains the only copy; print it in full when asking for approval. When reviewing, prefer a repo-local design doc (`docs/designs/`, `docs/plans/`, or an explicitly provided path) over the `$GSTACK_HOME` store whenever both exist. |
There was a problem hiding this comment.
P2: Reviewing an existing repo-local plan can redirect the revised artifact from its supplied docs/plans/ path into a new docs/designs/ file, leaving the caller’s original plan stale. Consider preserving an existing or explicitly provided repo-local path and using docs/designs/<topic>.md only when creating a new artifact.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At skills/plan/references/legacy/plan-devex-review.md, line 713:
<comment>Reviewing an existing repo-local plan can redirect the revised artifact from its supplied `docs/plans/` path into a new `docs/designs/` file, leaving the caller’s original plan stale. Consider preserving an existing or explicitly provided repo-local path and using `docs/designs/<topic>.md` only when creating a new artifact.</comment>
<file context>
@@ -702,3 +702,13 @@ The /plan dispatcher prints a `Scale:` header line classified from fifteen build
+
+### Repo-local design artifacts
+
+When the session produces a design or plan document and the working directory is inside a repository, write it to `docs/designs/<topic>.md` in that repository (create `docs/designs/` if needed) and name that path every time the document is presented or approval is requested. A hashed home-directory path is never the thing the user is asked to open. Keep writing the cross-session copy under `"${GSTACK_HOME:-$HOME/.gstack}"/projects/<id>/` with the existing filename convention — downstream skills, prior-design lookup, and cross-team discovery depend on that store — but the repo-local file is the canonical one the user owns and edits. Outside a repository, the `$GSTACK_HOME` path remains the only copy; print it in full when asking for approval. When reviewing, prefer a repo-local design doc (`docs/designs/`, `docs/plans/`, or an explicitly provided path) over the `$GSTACK_HOME` store whenever both exist.
+<!-- GSTACK2_BUG_FIX_END pr=703 -->
</file context>
|
|
||
| ### Repo-local design artifacts | ||
|
|
||
| When the session produces a design or plan document and the working directory is inside a repository, write it to `docs/designs/<topic>.md` in that repository (create `docs/designs/` if needed) and name that path every time the document is presented or approval is requested. A hashed home-directory path is never the thing the user is asked to open. Keep writing the cross-session copy under `"${GSTACK_HOME:-$HOME/.gstack}"/projects/<id>/` with the existing filename convention — downstream skills, prior-design lookup, and cross-team discovery depend on that store — but the repo-local file is the canonical one the user owns and edits. Outside a repository, the `$GSTACK_HOME` path remains the only copy; print it in full when asking for approval. When reviewing, prefer a repo-local design doc (`docs/designs/`, `docs/plans/`, or an explicitly provided path) over the `$GSTACK_HOME` store whenever both exist. |
There was a problem hiding this comment.
P2: A second planning session for the same topic can overwrite the canonical repo-local document, including edits the user made since the first session. The repo-local rule should read and merge an existing docs/designs/<topic>.md, or preserve it/version the new artifact before replacing it.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At skills/plan/references/legacy/plan-ceo-review.md, line 675:
<comment>A second planning session for the same topic can overwrite the canonical repo-local document, including edits the user made since the first session. The repo-local rule should read and merge an existing `docs/designs/<topic>.md`, or preserve it/version the new artifact before replacing it.</comment>
<file context>
@@ -664,3 +664,13 @@ The /plan dispatcher prints a `Scale:` header line classified from fifteen build
+
+### Repo-local design artifacts
+
+When the session produces a design or plan document and the working directory is inside a repository, write it to `docs/designs/<topic>.md` in that repository (create `docs/designs/` if needed) and name that path every time the document is presented or approval is requested. A hashed home-directory path is never the thing the user is asked to open. Keep writing the cross-session copy under `"${GSTACK_HOME:-$HOME/.gstack}"/projects/<id>/` with the existing filename convention — downstream skills, prior-design lookup, and cross-team discovery depend on that store — but the repo-local file is the canonical one the user owns and edits. Outside a repository, the `$GSTACK_HOME` path remains the only copy; print it in full when asking for approval. When reviewing, prefer a repo-local design doc (`docs/designs/`, `docs/plans/`, or an explicitly provided path) over the `$GSTACK_HOME` store whenever both exist.
+<!-- GSTACK2_BUG_FIX_END pr=703 -->
</file context>
| When the session produces a design or plan document and the working directory is inside a repository, write it to `docs/designs/<topic>.md` in that repository (create `docs/designs/` if needed) and name that path every time the document is presented or approval is requested. A hashed home-directory path is never the thing the user is asked to open. Keep writing the cross-session copy under `"${GSTACK_HOME:-$HOME/.gstack}"/projects/<id>/` with the existing filename convention — downstream skills, prior-design lookup, and cross-team discovery depend on that store — but the repo-local file is the canonical one the user owns and edits. Outside a repository, the `$GSTACK_HOME` path remains the only copy; print it in full when asking for approval. When reviewing, prefer a repo-local design doc (`docs/designs/`, `docs/plans/`, or an explicitly provided path) over the `$GSTACK_HOME` store whenever both exist. | |
| When the session produces a design or plan document and the working directory is inside a repository, write it to `docs/designs/<topic>.md` in that repository (create `docs/designs/` if needed) and name that path every time the document is presented or approval is requested. Before replacing an existing repo-local document, read it and preserve or merge user edits; if it represents a distinct revision, write a non-colliding filename and link it with `Supersedes:` instead. A hashed home-directory path is never the thing the user is asked to open. Keep writing the cross-session copy under `"${GSTACK_HOME:-$HOME/.gstack}"/projects/<id>/` with the existing filename convention — downstream skills, prior-design lookup, and cross-team discovery depend on that store — but the repo-local file is the canonical one the user owns and edits. Outside a repository, the `$GSTACK_HOME` path remains the only copy; print it in full when asking for approval. When reviewing, prefer a repo-local design doc (`docs/designs/`, `docs/plans/`, or an explicitly provided path) over the `$GSTACK_HOME` store whenever both exist. |
|
|
||
| ### Repo-local design artifacts | ||
|
|
||
| When the session produces a design or plan document and the working directory is inside a repository, write it to `docs/designs/<topic>.md` in that repository (create `docs/designs/` if needed) and name that path every time the document is presented or approval is requested. A hashed home-directory path is never the thing the user is asked to open. Keep writing the cross-session copy under `"${GSTACK_HOME:-$HOME/.gstack}"/projects/<id>/` with the existing filename convention — downstream skills, prior-design lookup, and cross-team discovery depend on that store — but the repo-local file is the canonical one the user owns and edits. Outside a repository, the `$GSTACK_HOME` path remains the only copy; print it in full when asking for approval. When reviewing, prefer a repo-local design doc (`docs/designs/`, `docs/plans/`, or an explicitly provided path) over the `$GSTACK_HOME` store whenever both exist. |
There was a problem hiding this comment.
P2: A crafted or simply path-like topic can make the agent write outside docs/designs/ and overwrite another repository Markdown file. Resolve from git rev-parse --show-toplevel and require a sanitized single-component slug before writing.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At skills/plan/references/legacy/autoplan.md, line 1116:
<comment>A crafted or simply path-like topic can make the agent write outside `docs/designs/` and overwrite another repository Markdown file. Resolve from `git rev-parse --show-toplevel` and require a sanitized single-component slug before writing.</comment>
<file context>
@@ -1105,3 +1105,13 @@ The /plan dispatcher prints a `Scale:` header line classified from fifteen build
+
+### Repo-local design artifacts
+
+When the session produces a design or plan document and the working directory is inside a repository, write it to `docs/designs/<topic>.md` in that repository (create `docs/designs/` if needed) and name that path every time the document is presented or approval is requested. A hashed home-directory path is never the thing the user is asked to open. Keep writing the cross-session copy under `"${GSTACK_HOME:-$HOME/.gstack}"/projects/<id>/` with the existing filename convention — downstream skills, prior-design lookup, and cross-team discovery depend on that store — but the repo-local file is the canonical one the user owns and edits. Outside a repository, the `$GSTACK_HOME` path remains the only copy; print it in full when asking for approval. When reviewing, prefer a repo-local design doc (`docs/designs/`, `docs/plans/`, or an explicitly provided path) over the `$GSTACK_HOME` store whenever both exist.
+<!-- GSTACK2_BUG_FIX_END pr=703 -->
</file context>
| Parity is executable, not a prose claim. Run \`bun run scripts/gstack2/run-parity.ts\` or the dedicated Bun tests. | ||
|
|
||
| The pinned release inventory passes **${EXPECTED_PARITY_CHECKS.toLocaleString('en-US')} checks** across 55 specialist sources, 16 carved sections, 25 routing scenarios, 25 regression ports, and **${assetCount} assets**. | ||
| The pinned release inventory passes **${EXPECTED_PARITY_CHECKS.toLocaleString('en-US')} checks** across 55 specialist sources, 16 carved sections, 25 routing scenarios, 27 regression ports, and **${assetCount} assets**. |
There was a problem hiding this comment.
P3: The generated parity report now gives conflicting regression coverage totals: the inventory says 27 ports, but the verification list still says 25 fixtures. The latter could be updated to 27, or explicitly describe the 25 PR-backed plus 2 issue-backed fixtures.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At scripts/gstack2/generate-skill-tree.ts, line 782:
<comment>The generated parity report now gives conflicting regression coverage totals: the inventory says 27 ports, but the verification list still says 25 fixtures. The latter could be updated to 27, or explicitly describe the 25 PR-backed plus 2 issue-backed fixtures.</comment>
<file context>
@@ -779,7 +779,7 @@ function parityDoc(assetCount: number): string {
Parity is executable, not a prose claim. Run \`bun run scripts/gstack2/run-parity.ts\` or the dedicated Bun tests.
-The pinned release inventory passes **${EXPECTED_PARITY_CHECKS.toLocaleString('en-US')} checks** across 55 specialist sources, 16 carved sections, 25 routing scenarios, 26 regression ports, and **${assetCount} assets**.
+The pinned release inventory passes **${EXPECTED_PARITY_CHECKS.toLocaleString('en-US')} checks** across 55 specialist sources, 16 carved sections, 25 routing scenarios, 27 regression ports, and **${assetCount} assets**.
The suite verifies:
</file context>
…a fetch GSTACK2_BASE_SHA is only reachable from codex/* branches, so any workflow or checkout that didn't fetch those refs fails every git show against the pinned tree. pinnedText now retries once after fetching the pinned sha directly, which fixes the class for all workflows instead of patching fetch steps into each one. The explicit step stays in gstack2-gate.yml for the read-only devcontainer mount, which cannot fetch at generation time. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…atches assertions Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
What this does
Also includes a CI infrastructure fix: the GStack 2 gate workflow fetches the pinned base commit
bb57306dby sha; it is only reachable fromcodex/*branches, so every gate job that rangen:gstack2failed on every PR to this repo (the workflow had never passed on a PR)./planburned ~115K output tokens planning a for-fun terminal toy (10 one-at-a-time question rounds, 2 web searches, a wireframe, outside-voice offers, a 3-iteration adversarial review loop, and a design doc with a distribution plan). Nothing in the pipeline classified how big the ask actually was.This PR makes scale detection a /plan-wide rule:
Scale:header line in the /plan dispatcher, classified from fifteen build-scale vectors (audience, users, commercial intent, deployment, horizon, maintenance, integration surface, extensibility, data sensitivity, stakes, team, codebase, reversibility, distribution, compliance). Highest vector wins; unknown vectors default low; never ask questions just to classify.docs/designs/<topic>.mdand approval questions name that path instead of a hashed~/.gstack/projects/<id>/file. The$GSTACK_HOMEcopy is still written for downstream skills and prior-design discovery; reviewers prefer the repo-local doc when both exist.linguist-generatedmarks for generator output, so this PR (and future ones) collapse the 24 regenerated files; reviewers read ~5 hand-edited files.Review guide
Real diff:
scripts/gstack2/bug-fix-overlays.ts,scripts/gstack2/generate-skill-tree.ts,scripts/gstack2/run-parity.ts,test/gstack2-skills.test.ts,.gitattributes,VERSION,CHANGELOG.md. Everything else isbun run gen:gstack2output, verified byte-for-byte bycheck:gstack2-generatedin CI.Testing
bun run test:gstack2: pass (4,909 parity checks incl. the executable vector-to-tier regression for GENERAL: Reduce Token Overhead garrytan/gstack#886)bun test: one failing test, pre-existing on main with receipts —audit-compliance > extension background.js validates message senderreadsextension/background.js, deleted on main by ab4e9ae while the test stayed. Ran the identical suite on a clean origin/main worktree: same failure there (main's clean checkout fails 5 tests; this branch fails 1). This branch introduces zero new failures.eval:select: 0/178 E2E and 0/28 LLM-judge tests triggered by this diff; no paid evals required.bun testexits 0 without printing its final summary when the run ends inbrowse/test/build-command-response.test.ts— a green exit does not prove the suite ran to completion. Worth its own issue.🤖 Generated with Claude Code