Skip to content

feat(gstack2)!: remove /design skill — canonical surface is now 5 (plan/qa/debug/review/ship) - #28

Merged
time-attack merged 7 commits into
mainfrom
remove-design-skill-6to5
Jul 23, 2026
Merged

feat(gstack2)!: remove /design skill — canonical surface is now 5 (plan/qa/debug/review/ship)#28
time-attack merged 7 commits into
mainfrom
remove-design-skill-6to5

Conversation

@time-attack

@time-attack time-attack commented Jul 23, 2026

Copy link
Copy Markdown
Owner

Removes the /design skill entirely. Canonical surface 6→5.

🤖 Generated with Claude Code


Summary by cubic

Remove the /design dispatcher and all design skills, making the public surface five skills: /plan, /qa, /debug, /review, and /ship. Parity for surviving skills is unchanged; only the eight design sources were dropped.

Written for commit 83ce3a0. Summary will update on new commits.

Review in cubic

claude added 7 commits July 23, 2026 11:05
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Remove the four design-only bug-fix overlays (garrytan#696, garrytan#1777, garrytan#1920, garrytan#2189),
prune design modules from the multi-target garrytan#2030 overlay, and lower the
overlay count guards from 29 to 25.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Delete the six design skill source dirs (design-consultation, design-shotgun,
design-html, plan-design-review, design-review, ios-design-review) and diagram/,
plus make-pdf's skill template (its runtime binary source is kept). De-reference
the removed skills from the free-suite tests and skill-list helpers, dropping the
public surface from six dispatchers to five (plan, qa, debug, review, ship).

The design/diagram/pdf runtime capability binaries are intentionally kept: they
are mandatory runtime payloads wired through runtime/install.js and asserted by
RUNTIME.md parity guards and the runtime test suite, which the skill removal does
not touch.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Regenerate the GStack 2 tree for the five-skill surface: update assertInventory
and parity count guards (47 sources, 25 mandatory, 14 sections, 19 scenarios,
25 overlays, 48 compat files, 47 aliases), recompute EXPECTED_PARITY_CHECKS to
4336, drop the eight design source keys from the immutable baseline render
oracle, and remove the design-html pretext asset. A ported-render transform in
render-legacy de-references autoplan's removed plan-design-review Phase 2 so the
canonical carve never packages a deleted module; the immutable baseline render
(renderLegacyBody) is byte-unchanged. The five surviving dispatchers and their
module render hashes are unchanged apart from autoplan's intentional
de-reference and the removed design sources.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Update the public-surface contract, dispatcher tree, and inventory counts in
CLAUDE.md, README.md, docs/gstack-2/ARCHITECTURE.md, and docs/gstack-2/STATUS.md
to describe five skills (plan, qa, debug, review, ship). The retained 1.x
review-army/design-voice prose (Garry's voice, community-PR guarded) and the
kept design/diagram/PDF runtime-capability evidence are left intact.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ests

Drop design from the browser-provider TREES list (five skills) and move the
stale-pruning fixture's planted asset from the removed skills/design tree to a
surviving tree (skills/qa) so regeneration still prunes it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Reconcile branch worktree-agent-ae65a7436747fff7e (design removal, 6→5
dispatchers) onto current main. Resolve source files as a union of both
intents and regenerate all generated output.

- Keep main's founder-resources overlay garrytan#538 and its case in
  evaluateBugFixRegression; keep VERSION 1.61.2.0, the founder_resources
  config key, and the /plan empty-target fast path.
- Drop the /design dispatcher, its 8 source modules, 6 routing scenarios,
  2 carved sections, and 4 design-only overlays (garrytan#696/garrytan#1777/garrytan#1920/garrytan#2189);
  prune design targets from garrytan#2030.
- Net counts: 5 dispatchers, 47 source modules, 14 sections, 19 scenarios,
  26 judgment overlays, 4341 parity checks.
- Regenerated skills/, compat/, evals/parity/, and docs/gstack-2 evidence
  via gen:skill-docs + gen:gstack2. Design runtime binaries (design/src,
  make-pdf/src, lib/diagram-render) kept as mandatory runtime payloads.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@cursor

cursor Bot commented Jul 23, 2026

Copy link
Copy Markdown

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.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

12 issues found across 183 files

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="scripts/gstack2/render-legacy.ts">

<violation number="1" location="scripts/gstack2/render-legacy.ts:225">
P2: Some legacy `/plan-design-review` pointers still survive the new retirement rewrite, so generated docs can reference a removed module path. Expanding this neutralization to all known path forms (host root, `~/.claude/...`, and `$CLAUDE_SKILL_DIR` variants) would keep the five-skill surface consistent and avoid dangling `references/legacy/plan-design-review.md` links.</violation>
</file>

<file name="docs/gstack-2/ARCHITECTURE.md">

<violation number="1" location="docs/gstack-2/ARCHITECTURE.md:9">
P2: Repository agents still receive a conflicting six-skill contract and may try to route through the removed `/design` tree. Update `AGENTS.md` to list the five canonical skills and remove its `/design` requirements in the same change.</violation>

<violation number="2" location="docs/gstack-2/ARCHITECTURE.md:39">
P3: The architecture now gives conflicting section inventory/evidence totals: 14 carved sections here versus 16 later. Refresh the downstream parity/semantic counts, or distinguish the inventories explicitly if they intentionally measure different section sets.</violation>
</file>

<file name="scripts/gstack2/host-adversarial.ts">

<violation number="1" location="scripts/gstack2/host-adversarial.ts:434">
P3: The mismatch error message is manually tied to today’s skill count instead of the actual PUBLIC_SKILLS set. Using PUBLIC_SKILLS.length keeps this guard accurate when canonical skills change again.</violation>
</file>

<file name="scripts/gstack2/generate-skill-tree.ts">

<violation number="1" location="scripts/gstack2/generate-skill-tree.ts:767">
P3: Generated migration docs now undercount bug-fix overlay sources, which can mislead maintainers during parity/audit review. The template string still says "24 upstream PRs" even though the generator enforces 26 overlays; updating the literal keeps docs aligned with actual inventory.</violation>

<violation number="2" location="scripts/gstack2/generate-skill-tree.ts:788">
P3: The parity summary text now reports fewer regression ports than are actually generated. Changing this hardcoded count to 26 prevents stale inventory claims in `JUDGMENT-PARITY.md`.</violation>

<violation number="3" location="scripts/gstack2/generate-skill-tree.ts:947">
P2: The generated provenance manifest will advertise `bug_fix_ports: 24` while containing 26 bug-fix overlays, creating inconsistent machine-readable metadata for downstream checks. Aligning `counts.bug_fix_ports` with the actual overlay set avoids false drift and parsing ambiguity.</violation>
</file>

<file name="test/skill-validation.test.ts">

<violation number="1" location="test/skill-validation.test.ts:9">
P3: The public surface is now five dispatchers, but this test is still named for six, which makes failure output and test coverage documentation misleading. Updating the title to “five public dispatchers” would keep the validation suite self-consistent.</violation>
</file>

<file name="docs/gstack-2/STATUS.md">

<violation number="1" location="docs/gstack-2/STATUS.md:50">
P2: The new inventory still undercounts regression definitions: the surviving overlay source and generated fixtures both contain 26, not 25. Both changed `25 ... regression definitions` claims should be updated together.</violation>

<violation number="2" location="docs/gstack-2/STATUS.md:55">
P2: The status underreports the parity result by five checks, conflicting with both the executable oracle and parity document. This should read 4,341.</violation>

<violation number="3" location="docs/gstack-2/STATUS.md:57">
P2: The authoritative status now contradicts its linked evidence documents and its own Evidence index, so readers cannot verify the new post-design counts. Regenerating/updating those evidence rows and documents alongside this claim would keep the gate evidence coherent.</violation>
</file>

<file name="CLAUDE.md">

<violation number="1" location="CLAUDE.md:5">
P2: Agent routing is now contradictory: `CLAUDE.md` presents five canonical skills while `AGENTS.md` still instructs agents that `/design` is a sixth public skill and routes design aliases to it. Updating the canonical contract without updating `AGENTS.md` can cause agents to discover or invoke the retired dispatcher.</violation>
</file>

Tip: instead of fixing issues one by one fix them all with cubic

Re-trigger cubic

Comment on lines +225 to +227
'$GSTACK_ROOT/plan-design-review/SKILL.md',
'the retired design-review phase (removed from the five public skills; skip it)',
)

@cubic-dev-ai cubic-dev-ai Bot Jul 23, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Some legacy /plan-design-review pointers still survive the new retirement rewrite, so generated docs can reference a removed module path. Expanding this neutralization to all known path forms (host root, ~/.claude/..., and $CLAUDE_SKILL_DIR variants) would keep the five-skill surface consistent and avoid dangling references/legacy/plan-design-review.md links.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At scripts/gstack2/render-legacy.ts, line 225:

<comment>Some legacy `/plan-design-review` pointers still survive the new retirement rewrite, so generated docs can reference a removed module path. Expanding this neutralization to all known path forms (host root, `~/.claude/...`, and `$CLAUDE_SKILL_DIR` variants) would keep the five-skill surface consistent and avoid dangling `references/legacy/plan-design-review.md` links.</comment>

<file context>
@@ -209,9 +209,26 @@ function portLegacyText(value: string, source: string): string {
+  // dangling module pointer is neutralized rather than repackaged.
+  body = body
+    .replaceAll(
+      '$GSTACK_ROOT/plan-design-review/SKILL.md',
+      'the retired design-review phase (removed from the five public skills; skip it)',
+    )
</file context>
Suggested change
'$GSTACK_ROOT/plan-design-review/SKILL.md',
'the retired design-review phase (removed from the five public skills; skip it)',
)
'$GSTACK_ROOT/plan-design-review/SKILL.md',
'the retired design-review phase (removed from the five public skills; skip it)',
)
.replaceAll(
'~/.claude/skills/gstack/plan-design-review/SKILL.md',
'the retired design-review phase (removed from the five public skills; skip it)',
)
.replaceAll(
'${CLAUDE_SKILL_DIR}/../plan-design-review/SKILL.md',
'the retired design-review phase (removed from the five public skills; skip it)',
)
.replaceAll(
'$CLAUDE_SKILL_DIR/../plan-design-review/SKILL.md',
'the retired design-review phase (removed from the five public skills; skip it)',
)
Fix with cubic

## Product boundary

GStack 2 is an engineering judgment layer with exactly six public skills:
GStack 2 is an engineering judgment layer with exactly five public skills:

@cubic-dev-ai cubic-dev-ai Bot Jul 23, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Repository agents still receive a conflicting six-skill contract and may try to route through the removed /design tree. Update AGENTS.md to list the five canonical skills and remove its /design requirements in the same change.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/gstack-2/ARCHITECTURE.md, line 9:

<comment>Repository agents still receive a conflicting six-skill contract and may try to route through the removed `/design` tree. Update `AGENTS.md` to list the five canonical skills and remove its `/design` requirements in the same change.</comment>

<file context>
@@ -6,10 +6,10 @@ The authoritative gate state is [STATUS.md](./STATUS.md).
 ## Product boundary
 
-GStack 2 is an engineering judgment layer with exactly six public skills:
+GStack 2 is an engineering judgment layer with exactly five public skills:
 
 ```text
</file context>
Fix with cubic

base_sha: GSTACK2_BASE_SHA,
public_skills: [...TREE_NAMES],
counts: { public_skills: 6, mandatory_inputs: 31, templates: 55, section_templates: 16, packaged_section_copies: sectionCopies.length, internal_execution_adapters: 1, scenarios: 25, bug_fix_ports: 28, assets: assets.length, dependency_copies: dependencyCopies.length, runtime_helpers: runtimeHelpers.length },
counts: { public_skills: 5, mandatory_inputs: 25, templates: 47, section_templates: 14, packaged_section_copies: sectionCopies.length, internal_execution_adapters: 1, scenarios: 19, bug_fix_ports: 24, assets: assets.length, dependency_copies: dependencyCopies.length, runtime_helpers: runtimeHelpers.length },

@cubic-dev-ai cubic-dev-ai Bot Jul 23, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The generated provenance manifest will advertise bug_fix_ports: 24 while containing 26 bug-fix overlays, creating inconsistent machine-readable metadata for downstream checks. Aligning counts.bug_fix_ports with the actual overlay set avoids false drift and parsing ambiguity.

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 947:

<comment>The generated provenance manifest will advertise `bug_fix_ports: 24` while containing 26 bug-fix overlays, creating inconsistent machine-readable metadata for downstream checks. Aligning `counts.bug_fix_ports` with the actual overlay set avoids false drift and parsing ambiguity.</comment>

<file context>
@@ -945,7 +944,7 @@ function main(): void {
     base_sha: GSTACK2_BASE_SHA,
     public_skills: [...TREE_NAMES],
-    counts: { public_skills: 6, mandatory_inputs: 31, templates: 55, section_templates: 16, packaged_section_copies: sectionCopies.length, internal_execution_adapters: 1, scenarios: 25, bug_fix_ports: 28, assets: assets.length, dependency_copies: dependencyCopies.length, runtime_helpers: runtimeHelpers.length },
+    counts: { public_skills: 5, mandatory_inputs: 25, templates: 47, section_templates: 14, packaged_section_copies: sectionCopies.length, internal_execution_adapters: 1, scenarios: 19, bug_fix_ports: 24, assets: assets.length, dependency_copies: dependencyCopies.length, runtime_helpers: runtimeHelpers.length },
     sources: sourceRecords,
     sections: sectionRecords,
</file context>
Suggested change
counts: { public_skills: 5, mandatory_inputs: 25, templates: 47, section_templates: 14, packaged_section_copies: sectionCopies.length, internal_execution_adapters: 1, scenarios: 19, bug_fix_ports: 24, assets: assets.length, dependency_copies: dependencyCopies.length, runtime_helpers: runtimeHelpers.length },
counts: { public_skills: 5, mandatory_inputs: 25, templates: 47, section_templates: 14, packaged_section_copies: sectionCopies.length, internal_execution_adapters: 1, scenarios: 19, bug_fix_ports: 26, assets: assets.length, dependency_copies: dependencyCopies.length, runtime_helpers: runtimeHelpers.length },
Fix with cubic

Comment thread docs/gstack-2/STATUS.md
@@ -23,8 +23,9 @@ PR, or PR-ready claim is authorized by this status.
them candidate regressions.

@cubic-dev-ai cubic-dev-ai Bot Jul 23, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The new inventory still undercounts regression definitions: the surviving overlay source and generated fixtures both contain 26, not 25. Both changed 25 ... regression definitions claims should be updated together.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/gstack-2/STATUS.md, line 50:

<comment>The new inventory still undercounts regression definitions: the surviving overlay source and generated fixtures both contain 26, not 25. Both changed `25 ... regression definitions` claims should be updated together.</comment>

<file context>
@@ -34,27 +35,27 @@ PR, or PR-ready claim is authorized by this status.
+  1.x baseline of about 1,100 token-equivalents; `test/gstack2-skills.test.ts`
+  enforces the 75%-below ceiling on every run.
+- [x] Generated inventory contains 47 preserved modules, 14 carved sections,
+  19 scenarios, 25 regression definitions, and 72 assets.
+- [x] Compatibility aliases remain opt-in and outside default five-skill
   discovery; each prints its replacement and contains no copied judgment.
</file context>
Fix with cubic

Comment thread docs/gstack-2/STATUS.md
@@ -23,8 +23,9 @@ PR, or PR-ready claim is authorized by this status.
them candidate regressions.

@cubic-dev-ai cubic-dev-ai Bot Jul 23, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The authoritative status now contradicts its linked evidence documents and its own Evidence index, so readers cannot verify the new post-design counts. Regenerating/updating those evidence rows and documents alongside this claim would keep the gate evidence coherent.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/gstack-2/STATUS.md, line 57:

<comment>The authoritative status now contradicts its linked evidence documents and its own Evidence index, so readers cannot verify the new post-design counts. Regenerating/updating those evidence rows and documents alongside this claim would keep the gate evidence coherent.</comment>

<file context>
@@ -34,27 +35,27 @@ PR, or PR-ready claim is authorized by this status.
-  executions, 15 comparison dimensions, 16 carved sections, and nine
+- [x] The regenerated parity rerun is green: 4,336 checks covering
+  47 modules, 14 sections, 19 scenarios, 25 regressions, and 72 assets.
+- [x] Deterministic semantic parity is green: 238 checks across 11 suites, 12
+  executions, 15 comparison dimensions, 14 carved sections, and eight
   authority-policy unit cases, including unsupported numeric claims. Exact
</file context>
Fix with cubic

@@ -6,10 +6,10 @@ The authoritative gate state is [STATUS.md](./STATUS.md).

@cubic-dev-ai cubic-dev-ai Bot Jul 23, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: The architecture now gives conflicting section inventory/evidence totals: 14 carved sections here versus 16 later. Refresh the downstream parity/semantic counts, or distinguish the inventories explicitly if they intentionally measure different section sets.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/gstack-2/ARCHITECTURE.md, line 39:

<comment>The architecture now gives conflicting section inventory/evidence totals: 14 carved sections here versus 16 later. Refresh the downstream parity/semantic counts, or distinguish the inventories explicitly if they intentionally measure different section sets.</comment>

<file context>
@@ -35,8 +35,8 @@ compat/*.md                     internal aliases, never default skills
-`scripts/gstack2/generate-skill-tree.ts` mechanically renders 55 pinned legacy
-modules, inlines 16 carved sections, and carries 78 assets. The generator
+`scripts/gstack2/generate-skill-tree.ts` mechanically renders 47 pinned legacy
+modules, inlines 14 carved sections, and carries 72 assets. The generator
 records source Git blob IDs and normalized render hashes. It adds only reviewed
 upstream bug-fix overlays, each with a PR link, stable anchor, and regression fixture. The parity
</file context>
Fix with cubic

const entries = fs.readdirSync(destinationRoot).sort();
if (stableJson(entries) !== stableJson([...PUBLIC_SKILLS].sort())) {
throw new Error(`Installed skill tree must contain exactly six skills, got: ${entries.join(', ')}`);
throw new Error(`Installed skill tree must contain exactly five skills, got: ${entries.join(', ')}`);

@cubic-dev-ai cubic-dev-ai Bot Jul 23, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: The mismatch error message is manually tied to today’s skill count instead of the actual PUBLIC_SKILLS set. Using PUBLIC_SKILLS.length keeps this guard accurate when canonical skills change again.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At scripts/gstack2/host-adversarial.ts, line 434:

<comment>The mismatch error message is manually tied to today’s skill count instead of the actual PUBLIC_SKILLS set. Using PUBLIC_SKILLS.length keeps this guard accurate when canonical skills change again.</comment>

<file context>
@@ -431,7 +431,7 @@ export function copyCanonicalSkills(canonicalRoot: string, destinationRoot: stri
   const entries = fs.readdirSync(destinationRoot).sort();
   if (stableJson(entries) !== stableJson([...PUBLIC_SKILLS].sort())) {
-    throw new Error(`Installed skill tree must contain exactly six skills, got: ${entries.join(', ')}`);
+    throw new Error(`Installed skill tree must contain exactly five skills, got: ${entries.join(', ')}`);
   }
   return snapshotTree(destinationRoot);
</file context>
Suggested change
throw new Error(`Installed skill tree must contain exactly five skills, got: ${entries.join(', ')}`);
throw new Error(`Installed skill tree must contain exactly ${PUBLIC_SKILLS.length} skills, got: ${entries.join(', ')}`);
Fix with cubic

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, 28 regression ports, and **${assetCount} assets**.
The pinned release inventory passes **${EXPECTED_PARITY_CHECKS.toLocaleString('en-US')} checks** across 47 specialist sources, 14 carved sections, 19 routing scenarios, 24 regression ports, and **${assetCount} assets**.

@cubic-dev-ai cubic-dev-ai Bot Jul 23, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: The parity summary text now reports fewer regression ports than are actually generated. Changing this hardcoded count to 26 prevents stale inventory claims in JUDGMENT-PARITY.md.

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 788:

<comment>The parity summary text now reports fewer regression ports than are actually generated. Changing this hardcoded count to 26 prevents stale inventory claims in `JUDGMENT-PARITY.md`.</comment>

<file context>
@@ -786,16 +785,16 @@ 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, 28 regression ports, and **${assetCount} assets**.
+The pinned release inventory passes **${EXPECTED_PARITY_CHECKS.toLocaleString('en-US')} checks** across 47 specialist sources, 14 carved sections, 19 routing scenarios, 24 regression ports, and **${assetCount} assets**.
 
 The suite verifies:
</file context>
Suggested change
The pinned release inventory passes **${EXPECTED_PARITY_CHECKS.toLocaleString('en-US')} checks** across 47 specialist sources, 14 carved sections, 19 routing scenarios, 24 regression ports, and **${assetCount} assets**.
The pinned release inventory passes **${EXPECTED_PARITY_CHECKS.toLocaleString('en-US')} checks** across 47 specialist sources, 14 carved sections, 19 routing scenarios, 26 regression ports, and **${assetCount} assets**.
Fix with cubic

- \`JUDGMENT_PRESERVING_CARVE\`: pinned specialist workflow with the retired shared onboarding wrapper excluded, retired invocations resolved to six public routes, host/runtime paths normalized, and large carved phases loaded lazily from package-local pinned references.
- \`BUG_FIX\`: the canonical carved body plus a clearly delimited judgment overlay sourced from one of the 28 upstream PRs and issues and its regression fixture.
- \`JUDGMENT_PRESERVING_CARVE\`: pinned specialist workflow with the retired shared onboarding wrapper excluded, retired invocations resolved to five public routes, host/runtime paths normalized, and large carved phases loaded lazily from package-local pinned references.
- \`BUG_FIX\`: the canonical carved body plus a clearly delimited judgment overlay sourced from one of the 24 upstream PRs and issues and its regression fixture.

@cubic-dev-ai cubic-dev-ai Bot Jul 23, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: Generated migration docs now undercount bug-fix overlay sources, which can mislead maintainers during parity/audit review. The template string still says "24 upstream PRs" even though the generator enforces 26 overlays; updating the literal keeps docs aligned with actual inventory.

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 767:

<comment>Generated migration docs now undercount bug-fix overlay sources, which can mislead maintainers during parity/audit review. The template string still says "24 upstream PRs" even though the generator enforces 26 overlays; updating the literal keeps docs aligned with actual inventory.</comment>

<file context>
@@ -764,16 +763,16 @@ ${rows}
-- \`JUDGMENT_PRESERVING_CARVE\`: pinned specialist workflow with the retired shared onboarding wrapper excluded, retired invocations resolved to six public routes, host/runtime paths normalized, and large carved phases loaded lazily from package-local pinned references.
-- \`BUG_FIX\`: the canonical carved body plus a clearly delimited judgment overlay sourced from one of the 28 upstream PRs and issues and its regression fixture.
+- \`JUDGMENT_PRESERVING_CARVE\`: pinned specialist workflow with the retired shared onboarding wrapper excluded, retired invocations resolved to five public routes, host/runtime paths normalized, and large carved phases loaded lazily from package-local pinned references.
+- \`BUG_FIX\`: the canonical carved body plus a clearly delimited judgment overlay sourced from one of the 24 upstream PRs and issues and its regression fixture.
 - Asset relocation is byte-for-byte from the pinned Git blob and is indexed per tree.
 `;
</file context>
Suggested change
- \`BUG_FIX\`: the canonical carved body plus a clearly delimited judgment overlay sourced from one of the 24 upstream PRs and issues and its regression fixture.
- \`BUG_FIX\`: the canonical carved body plus a clearly delimited judgment overlay sourced from one of the 26 upstream PRs and issues and its regression fixture.
Fix with cubic

@@ -6,7 +6,7 @@ import * as fs from 'fs';
import * as path from 'path';

const ROOT = path.resolve(import.meta.dir, '..');
const PUBLIC_SKILLS = ['debug', 'design', 'plan', 'qa', 'review', 'ship'] as const;
const PUBLIC_SKILLS = ['debug', 'plan', 'qa', 'review', 'ship'] as const;

@cubic-dev-ai cubic-dev-ai Bot Jul 23, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: The public surface is now five dispatchers, but this test is still named for six, which makes failure output and test coverage documentation misleading. Updating the title to “five public dispatchers” would keep the validation suite self-consistent.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At test/skill-validation.test.ts, line 9:

<comment>The public surface is now five dispatchers, but this test is still named for six, which makes failure output and test coverage documentation misleading. Updating the title to “five public dispatchers” would keep the validation suite self-consistent.</comment>

<file context>
@@ -6,7 +6,7 @@ import * as fs from 'fs';
 
 const ROOT = path.resolve(import.meta.dir, '..');
-const PUBLIC_SKILLS = ['debug', 'design', 'plan', 'qa', 'review', 'ship'] as const;
+const PUBLIC_SKILLS = ['debug', 'plan', 'qa', 'review', 'ship'] as const;
 
 function publicSkillPath(skill: string): string {
</file context>
Fix with cubic

@time-attack
time-attack merged commit 3b826bf into main Jul 23, 2026
1 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants