mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-13 07:54:49 +02:00
test: structural tests for new skills + escalation protocol assertions
Add brainstorm + debug to skillsWithUpdateCheck and skillsWithPreamble arrays. Add structural tests: brainstorm (Phase 1-6, Design Doc, Supersedes, Smart-skip), debug (Iron Law, Root Cause, Pattern Analysis, Hypothesis, DEBUG REPORT, 3-strike). Add escalation protocol tests (DONE_WITH_CONCERNS, BLOCKED, NEEDS_CONTEXT) for all preamble skills. Also: 2 new TODOs (design docs → Supabase sync, /plan-design-review skill), update CLAUDE.md project structure with new skill directories. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -47,6 +47,8 @@ gstack/
|
|||||||
├── review/ # PR review skill
|
├── review/ # PR review skill
|
||||||
├── plan-ceo-review/ # /plan-ceo-review skill
|
├── plan-ceo-review/ # /plan-ceo-review skill
|
||||||
├── plan-eng-review/ # /plan-eng-review skill
|
├── plan-eng-review/ # /plan-eng-review skill
|
||||||
|
├── brainstorm/ # /brainstorm skill (Socratic design exploration)
|
||||||
|
├── debug/ # /debug skill (systematic root-cause debugging)
|
||||||
├── retro/ # Retrospective skill
|
├── retro/ # Retrospective skill
|
||||||
├── setup # One-time setup: build binary + symlink skills
|
├── setup # One-time setup: build binary + symlink skills
|
||||||
├── SKILL.md # Generated from SKILL.md.tmpl (don't edit directly)
|
├── SKILL.md # Generated from SKILL.md.tmpl (don't edit directly)
|
||||||
|
|||||||
@@ -374,6 +374,32 @@
|
|||||||
**Priority:** P3
|
**Priority:** P3
|
||||||
**Depends on:** Ref staleness Parts 1+2 (shipped)
|
**Depends on:** Ref staleness Parts 1+2 (shipped)
|
||||||
|
|
||||||
|
## Brainstorm / Design
|
||||||
|
|
||||||
|
### Design docs → Supabase team store sync
|
||||||
|
|
||||||
|
**What:** Add design docs (`*-design-*.md`) to the Supabase sync pipeline alongside test plans, retro snapshots, and QA reports.
|
||||||
|
|
||||||
|
**Why:** Cross-team design discovery at scale. Local `~/.gstack/projects/$SLUG/` keyword-grep discovery works for same-machine users now, but Supabase sync makes it work across the whole team. Duplicate ideas surface, everyone sees what's been explored.
|
||||||
|
|
||||||
|
**Context:** /brainstorm writes design docs to `~/.gstack/projects/$SLUG/`. The team store already syncs test plans, retro snapshots, QA reports. Design docs follow the same pattern — just add a sync adapter.
|
||||||
|
|
||||||
|
**Effort:** S
|
||||||
|
**Priority:** P2
|
||||||
|
**Depends on:** `garrytan/team-supabase-store` branch landing on main
|
||||||
|
|
||||||
|
### /plan-design-review skill
|
||||||
|
|
||||||
|
**What:** A visual/UX-focused design review skill that consumes /brainstorm design docs and evaluates mockups, wireframes, and UI decisions. Completes the review trilogy — product (/plan-ceo-review), engineering (/plan-eng-review), design (/plan-design-review).
|
||||||
|
|
||||||
|
**Why:** Full workflow coverage for visual/UX projects. The brainstorm design doc artifact is the input contract.
|
||||||
|
|
||||||
|
**Context:** /brainstorm handoff already mentions this skill. The design doc at `~/.gstack/projects/` is the input.
|
||||||
|
|
||||||
|
**Effort:** M
|
||||||
|
**Priority:** P2
|
||||||
|
**Depends on:** `garrytan/design` branch landing on main
|
||||||
|
|
||||||
## Completed
|
## Completed
|
||||||
|
|
||||||
### Phase 1: Foundations (v0.2.0)
|
### Phase 1: Foundations (v0.2.0)
|
||||||
|
|||||||
@@ -176,6 +176,7 @@ describe('Update check preamble', () => {
|
|||||||
'ship/SKILL.md', 'review/SKILL.md',
|
'ship/SKILL.md', 'review/SKILL.md',
|
||||||
'plan-ceo-review/SKILL.md', 'plan-eng-review/SKILL.md',
|
'plan-ceo-review/SKILL.md', 'plan-eng-review/SKILL.md',
|
||||||
'retro/SKILL.md',
|
'retro/SKILL.md',
|
||||||
|
'brainstorm/SKILL.md', 'debug/SKILL.md',
|
||||||
];
|
];
|
||||||
|
|
||||||
for (const skill of skillsWithUpdateCheck) {
|
for (const skill of skillsWithUpdateCheck) {
|
||||||
@@ -421,6 +422,7 @@ describe('v0.4.1 preamble features', () => {
|
|||||||
'ship/SKILL.md', 'review/SKILL.md',
|
'ship/SKILL.md', 'review/SKILL.md',
|
||||||
'plan-ceo-review/SKILL.md', 'plan-eng-review/SKILL.md',
|
'plan-ceo-review/SKILL.md', 'plan-eng-review/SKILL.md',
|
||||||
'retro/SKILL.md',
|
'retro/SKILL.md',
|
||||||
|
'brainstorm/SKILL.md', 'debug/SKILL.md',
|
||||||
];
|
];
|
||||||
|
|
||||||
for (const skill of skillsWithPreamble) {
|
for (const skill of skillsWithPreamble) {
|
||||||
@@ -436,6 +438,34 @@ describe('v0.4.1 preamble features', () => {
|
|||||||
expect(content).toContain('ELI16');
|
expect(content).toContain('ELI16');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const skill of skillsWithPreamble) {
|
||||||
|
test(`${skill} contains escalation protocol`, () => {
|
||||||
|
const content = fs.readFileSync(path.join(ROOT, skill), 'utf-8');
|
||||||
|
expect(content).toContain('DONE_WITH_CONCERNS');
|
||||||
|
expect(content).toContain('BLOCKED');
|
||||||
|
expect(content).toContain('NEEDS_CONTEXT');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// --- Structural tests for new skills ---
|
||||||
|
|
||||||
|
describe('brainstorm skill structure', () => {
|
||||||
|
const content = fs.readFileSync(path.join(ROOT, 'brainstorm', 'SKILL.md'), 'utf-8');
|
||||||
|
for (const section of ['Phase 1', 'Phase 2', 'Phase 3', 'Phase 4', 'Phase 5', 'Phase 6',
|
||||||
|
'Design Doc', 'Supersedes', 'APPROVED', 'Premise Challenge',
|
||||||
|
'Alternatives', 'Smart-skip']) {
|
||||||
|
test(`contains ${section}`, () => expect(content).toContain(section));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('debug skill structure', () => {
|
||||||
|
const content = fs.readFileSync(path.join(ROOT, 'debug', 'SKILL.md'), 'utf-8');
|
||||||
|
for (const section of ['Iron Law', 'Root Cause', 'Pattern Analysis', 'Hypothesis',
|
||||||
|
'DEBUG REPORT', '3-strike', 'BLOCKED']) {
|
||||||
|
test(`contains ${section}`, () => expect(content).toContain(section));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Enum & Value Completeness in review checklist', () => {
|
describe('Enum & Value Completeness in review checklist', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user