get-shit-specd 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +145 -0
- package/bin/gss.ts +160 -0
- package/claude/agents/gss-acceptance-writer.md +58 -0
- package/claude/agents/gss-data-modeler.md +67 -0
- package/claude/agents/gss-product-researcher.md +56 -0
- package/claude/agents/gss-spec-checker.md +87 -0
- package/claude/agents/gss-spec-synthesizer.md +68 -0
- package/claude/agents/gss-ux-designer.md +41 -0
- package/claude/commands/gss/handoff.md +24 -0
- package/claude/commands/gss/help.md +57 -0
- package/claude/commands/gss/new-spec.md +51 -0
- package/claude/commands/gss/progress.md +18 -0
- package/claude/commands/gss/review-spec.md +23 -0
- package/claude/commands/gss/settings.md +20 -0
- package/claude/commands/gss/setup.md +149 -0
- package/claude/commands/gss/update-spec.md +26 -0
- package/claude/get-shit-specd/VERSION +1 -0
- package/claude/get-shit-specd/references/acceptance-patterns.md +19 -0
- package/claude/get-shit-specd/references/product-questioning.md +42 -0
- package/claude/get-shit-specd/references/spec-config.md +86 -0
- package/claude/get-shit-specd/references/ux-brand.md +15 -0
- package/claude/get-shit-specd/templates/acceptance.md +48 -0
- package/claude/get-shit-specd/templates/brief.md +31 -0
- package/claude/get-shit-specd/templates/data.md +34 -0
- package/claude/get-shit-specd/templates/handoff-to-gsd.md +21 -0
- package/claude/get-shit-specd/templates/scope.md +25 -0
- package/claude/get-shit-specd/templates/spec-state.md +24 -0
- package/claude/get-shit-specd/templates/ux.md +41 -0
- package/claude/get-shit-specd/workflows/create-spec.md +132 -0
- package/claude/get-shit-specd/workflows/handoff.md +43 -0
- package/claude/get-shit-specd/workflows/review-spec.md +35 -0
- package/examples/SPEC-003-watermarking-service/00-BRIEF.md +52 -0
- package/examples/SPEC-003-watermarking-service/01-SCOPE.md +46 -0
- package/examples/SPEC-003-watermarking-service/04-ACCEPTANCE.md +98 -0
- package/examples/SPEC-003-watermarking-service/HANDOFF.md +146 -0
- package/examples/SPEC-003-watermarking-service/REVIEW.md +84 -0
- package/examples/SPEC-003-watermarking-service/STATE.md +42 -0
- package/package.json +44 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Brannon Lucas
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# get-shit-specd (GSS)
|
|
2
|
+
|
|
3
|
+
Spec-first development workflow for [Claude Code](https://claude.ai/code). Transform vague ideas into engineering-ready specifications.
|
|
4
|
+
|
|
5
|
+
## What is GSS?
|
|
6
|
+
|
|
7
|
+
GSS is a structured workflow that helps you think through features **before** writing code. It guides you through:
|
|
8
|
+
|
|
9
|
+
1. **Problem Definition** — What are you solving and for whom?
|
|
10
|
+
2. **Scope** — What's in, what's out, what are the dependencies?
|
|
11
|
+
3. **UX Design** — Screens, flows, states, copy (Full tier only)
|
|
12
|
+
4. **Data Modeling** — Entities, permissions, state machines (Full tier only)
|
|
13
|
+
5. **Acceptance Criteria** — Gherkin scenarios that define "done"
|
|
14
|
+
|
|
15
|
+
The output is an engineering-ready handoff document with requirements mapped to testable acceptance criteria.
|
|
16
|
+
|
|
17
|
+
## Requirements
|
|
18
|
+
|
|
19
|
+
- [Bun](https://bun.sh) v1.0 or later
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Install Bun (if needed)
|
|
23
|
+
curl -fsSL https://bun.sh/install | bash
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Installation
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
cd your-project
|
|
30
|
+
bunx get-shit-specd init
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This creates:
|
|
34
|
+
- `.claude/commands/gss/` — Slash commands
|
|
35
|
+
- `.claude/agents/gss-*` — AI agents for drafting and review
|
|
36
|
+
- `.claude/get-shit-specd/` — Workflows, templates, references
|
|
37
|
+
- `.planning/spec-config.json` — Your preferences
|
|
38
|
+
- `.planning/specs/` — Where specs live
|
|
39
|
+
|
|
40
|
+
## Usage
|
|
41
|
+
|
|
42
|
+
After installation, use these commands in Claude Code:
|
|
43
|
+
|
|
44
|
+
| Command | Description |
|
|
45
|
+
|---------|-------------|
|
|
46
|
+
| `/gss:setup` | Configure preferences (audience, tier, strictness) |
|
|
47
|
+
| `/gss:new-spec` | Create a new spec package |
|
|
48
|
+
| `/gss:review-spec <id>` | Red-team a spec for gaps |
|
|
49
|
+
| `/gss:handoff <id>` | Generate engineering requirements |
|
|
50
|
+
| `/gss:progress` | Show spec inventory and status |
|
|
51
|
+
| `/gss:help` | Show all commands |
|
|
52
|
+
|
|
53
|
+
### Typical Workflow
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
/gss:setup # One-time configuration
|
|
57
|
+
/gss:new-spec # Start a new feature spec
|
|
58
|
+
→ Answer intake questions
|
|
59
|
+
→ AI drafts spec files
|
|
60
|
+
→ Quality gates enforce completeness
|
|
61
|
+
/gss:review-spec SPEC-001 # Red-team for gaps
|
|
62
|
+
/gss:handoff SPEC-001 # Generate engineering doc
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Spec Tiers
|
|
66
|
+
|
|
67
|
+
| Tier | Files | Best For |
|
|
68
|
+
|------|-------|----------|
|
|
69
|
+
| **Micro** | Single BRIEF+SCOPE combined | Bug fixes, small changes |
|
|
70
|
+
| **Standard** | BRIEF + SCOPE + ACCEPTANCE | Most features |
|
|
71
|
+
| **Full** | All 5 files including UX + DATA | Complex features, new surfaces |
|
|
72
|
+
|
|
73
|
+
## Configuration
|
|
74
|
+
|
|
75
|
+
Edit `.planning/spec-config.json`:
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"audience": "external", // solo, small_team, external
|
|
80
|
+
"default_tier": "standard", // micro, standard, full
|
|
81
|
+
"min_edge_cases": 5, // Minimum edge cases required
|
|
82
|
+
"min_out_of_scope": 3, // Minimum out-of-scope items
|
|
83
|
+
"max_open_questions": 2, // Maximum unresolved questions
|
|
84
|
+
"require_gherkin": true // Require Gherkin format
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Audience Presets
|
|
89
|
+
|
|
90
|
+
| Audience | Style | Edge Cases | Out of Scope |
|
|
91
|
+
|----------|-------|------------|--------------|
|
|
92
|
+
| `solo` | Informal, minimal docs | 2+ | 1+ |
|
|
93
|
+
| `small_team` | Clear, some context | 3+ | 2+ |
|
|
94
|
+
| `external` | Formal, full context | 5+ | 3+ |
|
|
95
|
+
|
|
96
|
+
## Spec Package Structure
|
|
97
|
+
|
|
98
|
+
A complete spec package (Standard tier):
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
.planning/specs/SPEC-001-feature-name/
|
|
102
|
+
├── 00-BRIEF.md # Problem, JTBD, success metrics
|
|
103
|
+
├── 01-SCOPE.md # In/out scope, dependencies, NFRs
|
|
104
|
+
├── 04-ACCEPTANCE.md # Gherkin scenarios, edge cases
|
|
105
|
+
├── STATE.md # Status tracking
|
|
106
|
+
├── REVIEW.md # Red-team findings (after review)
|
|
107
|
+
└── HANDOFF.md # Engineering requirements (after handoff)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Full tier adds:
|
|
111
|
+
- `02-UX.md` — Screens, flows, states, copy
|
|
112
|
+
- `03-DATA.md` — Entities, permissions, state machines
|
|
113
|
+
|
|
114
|
+
## Philosophy: WHAT/WHY, not HOW/WHEN
|
|
115
|
+
|
|
116
|
+
GSS specs define:
|
|
117
|
+
- **WHAT** must be true (outcomes, acceptance criteria)
|
|
118
|
+
- **WHY** it matters (problem, success metrics)
|
|
119
|
+
|
|
120
|
+
They do NOT define:
|
|
121
|
+
- **HOW** to build it (architecture, file paths, implementation)
|
|
122
|
+
- **WHEN** to ship it (phases, sprints, task breakdowns)
|
|
123
|
+
|
|
124
|
+
Engineering determines HOW and WHEN during implementation.
|
|
125
|
+
|
|
126
|
+
## Example
|
|
127
|
+
|
|
128
|
+
See `examples/SPEC-003-watermarking-service/` for a complete spec package demonstrating:
|
|
129
|
+
- Problem definition with clear JTBD
|
|
130
|
+
- Scoped outcomes with P0/P1/P2 priorities
|
|
131
|
+
- 8 Gherkin acceptance scenarios
|
|
132
|
+
- 8 edge cases with expected behaviors
|
|
133
|
+
- Engineering handoff with requirement IDs
|
|
134
|
+
|
|
135
|
+
## Updating
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
bunx get-shit-specd update
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
This updates GSS files while preserving your `spec-config.json`.
|
|
142
|
+
|
|
143
|
+
## License
|
|
144
|
+
|
|
145
|
+
MIT
|
package/bin/gss.ts
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
import { existsSync, mkdirSync, cpSync, readFileSync, writeFileSync } from "fs";
|
|
4
|
+
import { dirname, join, resolve } from "path";
|
|
5
|
+
|
|
6
|
+
const packageRoot = resolve(import.meta.dir, "..");
|
|
7
|
+
const packageJson = JSON.parse(
|
|
8
|
+
readFileSync(join(packageRoot, "package.json"), "utf-8")
|
|
9
|
+
) as { version: string };
|
|
10
|
+
const VERSION = packageJson.version;
|
|
11
|
+
|
|
12
|
+
const command = process.argv[2];
|
|
13
|
+
const targetDir = process.cwd();
|
|
14
|
+
|
|
15
|
+
interface SpecConfig {
|
|
16
|
+
audience: "solo" | "small_team" | "external";
|
|
17
|
+
default_tier: "micro" | "standard" | "full";
|
|
18
|
+
min_edge_cases: number;
|
|
19
|
+
min_out_of_scope: number;
|
|
20
|
+
max_open_questions: number;
|
|
21
|
+
require_gherkin: boolean;
|
|
22
|
+
agents: {
|
|
23
|
+
micro_tier: string[];
|
|
24
|
+
standard_tier: string[];
|
|
25
|
+
full_tier: string[];
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function printHelp(): void {
|
|
30
|
+
console.log(`
|
|
31
|
+
get-shit-specd v${VERSION}
|
|
32
|
+
Spec-first development workflow for Claude Code
|
|
33
|
+
|
|
34
|
+
USAGE:
|
|
35
|
+
bunx get-shit-specd <command>
|
|
36
|
+
npx get-shit-specd <command>
|
|
37
|
+
|
|
38
|
+
COMMANDS:
|
|
39
|
+
init Install GSS into current project's .claude/ directory
|
|
40
|
+
update Update GSS files to latest version (preserves spec-config.json)
|
|
41
|
+
version Show installed version
|
|
42
|
+
|
|
43
|
+
AFTER INSTALL:
|
|
44
|
+
Use /gss:help in Claude Code to see available commands:
|
|
45
|
+
- /gss:setup Configure spec preferences
|
|
46
|
+
- /gss:new-spec Create a new spec package
|
|
47
|
+
- /gss:review-spec <id> Red-team a spec
|
|
48
|
+
- /gss:handoff <id> Generate engineering requirements
|
|
49
|
+
- /gss:progress Show spec inventory
|
|
50
|
+
`);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function init(update: boolean = false): void {
|
|
54
|
+
const claudeDir = join(targetDir, ".claude");
|
|
55
|
+
const planningDir = join(targetDir, ".planning");
|
|
56
|
+
|
|
57
|
+
// Create directories if needed
|
|
58
|
+
if (!existsSync(claudeDir)) {
|
|
59
|
+
mkdirSync(claudeDir, { recursive: true });
|
|
60
|
+
}
|
|
61
|
+
if (!existsSync(planningDir)) {
|
|
62
|
+
mkdirSync(planningDir, { recursive: true });
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Copy commands
|
|
66
|
+
const commandsSrc = join(packageRoot, "claude", "commands", "gss");
|
|
67
|
+
const commandsDest = join(claudeDir, "commands", "gss");
|
|
68
|
+
if (existsSync(commandsSrc)) {
|
|
69
|
+
mkdirSync(dirname(commandsDest), { recursive: true });
|
|
70
|
+
cpSync(commandsSrc, commandsDest, { recursive: true });
|
|
71
|
+
console.log(" + .claude/commands/gss/");
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Copy agents
|
|
75
|
+
const agentsSrc = join(packageRoot, "claude", "agents");
|
|
76
|
+
const agentsDest = join(claudeDir, "agents");
|
|
77
|
+
if (existsSync(agentsSrc)) {
|
|
78
|
+
mkdirSync(agentsDest, { recursive: true });
|
|
79
|
+
cpSync(agentsSrc, agentsDest, { recursive: true });
|
|
80
|
+
console.log(" + .claude/agents/gss-*");
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Copy get-shit-specd core
|
|
84
|
+
const coreSrc = join(packageRoot, "claude", "get-shit-specd");
|
|
85
|
+
const coreDest = join(claudeDir, "get-shit-specd");
|
|
86
|
+
if (existsSync(coreSrc)) {
|
|
87
|
+
cpSync(coreSrc, coreDest, { recursive: true });
|
|
88
|
+
console.log(" + .claude/get-shit-specd/");
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Create default spec-config.json if not exists (skip on update)
|
|
92
|
+
const configPath = join(planningDir, "spec-config.json");
|
|
93
|
+
if (!existsSync(configPath) && !update) {
|
|
94
|
+
const defaultConfig: SpecConfig = {
|
|
95
|
+
audience: "solo",
|
|
96
|
+
default_tier: "standard",
|
|
97
|
+
min_edge_cases: 3,
|
|
98
|
+
min_out_of_scope: 2,
|
|
99
|
+
max_open_questions: 3,
|
|
100
|
+
require_gherkin: false,
|
|
101
|
+
agents: {
|
|
102
|
+
micro_tier: [],
|
|
103
|
+
standard_tier: ["acceptance-writer", "spec-checker"],
|
|
104
|
+
full_tier: [
|
|
105
|
+
"ux-designer",
|
|
106
|
+
"data-modeler",
|
|
107
|
+
"acceptance-writer",
|
|
108
|
+
"synthesizer",
|
|
109
|
+
"spec-checker",
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2));
|
|
114
|
+
console.log(" + .planning/spec-config.json (default config)");
|
|
115
|
+
} else if (existsSync(configPath)) {
|
|
116
|
+
console.log(" ~ .planning/spec-config.json (preserved)");
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Create specs directory
|
|
120
|
+
const specsDir = join(planningDir, "specs");
|
|
121
|
+
if (!existsSync(specsDir)) {
|
|
122
|
+
mkdirSync(specsDir, { recursive: true });
|
|
123
|
+
console.log(" + .planning/specs/");
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
console.log(`
|
|
127
|
+
GSS ${update ? "updated" : "installed"} successfully!
|
|
128
|
+
|
|
129
|
+
Next steps:
|
|
130
|
+
1. Run /gss:setup in Claude Code to configure preferences
|
|
131
|
+
2. Run /gss:new-spec to create your first spec
|
|
132
|
+
3. Run /gss:help for all available commands
|
|
133
|
+
`);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
switch (command) {
|
|
137
|
+
case "init":
|
|
138
|
+
console.log(`\nInstalling get-shit-specd v${VERSION}...\n`);
|
|
139
|
+
init(false);
|
|
140
|
+
break;
|
|
141
|
+
case "update":
|
|
142
|
+
console.log(`\nUpdating get-shit-specd to v${VERSION}...\n`);
|
|
143
|
+
init(true);
|
|
144
|
+
break;
|
|
145
|
+
case "version":
|
|
146
|
+
case "-v":
|
|
147
|
+
case "--version":
|
|
148
|
+
console.log(`get-shit-specd v${VERSION}`);
|
|
149
|
+
break;
|
|
150
|
+
case "help":
|
|
151
|
+
case "-h":
|
|
152
|
+
case "--help":
|
|
153
|
+
case undefined:
|
|
154
|
+
printHelp();
|
|
155
|
+
break;
|
|
156
|
+
default:
|
|
157
|
+
console.error(`Unknown command: ${command}`);
|
|
158
|
+
printHelp();
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# gss-acceptance-writer
|
|
2
|
+
|
|
3
|
+
Role: Draft 04-ACCEPTANCE.md from SCOPE, UX, and DATA.
|
|
4
|
+
|
|
5
|
+
## Input
|
|
6
|
+
You receive:
|
|
7
|
+
- 01-SCOPE.md (in/out scope with priorities)
|
|
8
|
+
- 02-UX.md (screens, states, flows) - if Full tier
|
|
9
|
+
- 03-DATA.md (entities, permissions, edge cases) - if Full tier
|
|
10
|
+
|
|
11
|
+
## Output
|
|
12
|
+
Draft 04-ACCEPTANCE.md with:
|
|
13
|
+
|
|
14
|
+
### Definition of Done
|
|
15
|
+
Standard checklist. Don't over-customize.
|
|
16
|
+
|
|
17
|
+
### Gherkin Scenarios
|
|
18
|
+
Write scenarios using Given/When/Then format.
|
|
19
|
+
|
|
20
|
+
REQUIRED scenarios (minimum coverage set):
|
|
21
|
+
1. **Happy path** - Main success flow works
|
|
22
|
+
2. **Validation error** - Bad input handled gracefully
|
|
23
|
+
3. **Permission denied** - Unauthorized access blocked
|
|
24
|
+
4. **Empty state** - No data case handled
|
|
25
|
+
5. **Failure recovery** - System failure handled gracefully
|
|
26
|
+
6. **Key events emitted** - Observability verified
|
|
27
|
+
|
|
28
|
+
ADDITIONAL scenarios:
|
|
29
|
+
- One scenario per P0 scope item (from SCOPE.md)
|
|
30
|
+
- One scenario per edge case (from DATA.md)
|
|
31
|
+
|
|
32
|
+
### Scenario Writing Rules
|
|
33
|
+
- **Given**: Setup state. Be specific. "Given a deck with 3 generated cards"
|
|
34
|
+
- **When**: Single action. "When the user clicks Purchase"
|
|
35
|
+
- **Then**: Observable outcome. "Then the order confirmation is displayed"
|
|
36
|
+
|
|
37
|
+
Avoid:
|
|
38
|
+
- Vague terms: "works correctly", "is valid", "properly handles"
|
|
39
|
+
- Implementation details: "the database is updated" (not observable)
|
|
40
|
+
- Multiple actions in When: split into separate scenarios
|
|
41
|
+
|
|
42
|
+
### Verification Notes
|
|
43
|
+
What must be demonstrably true. Engineering determines HOW to verify.
|
|
44
|
+
|
|
45
|
+
NOT: "Unit test the watermark function"
|
|
46
|
+
YES: "Watermarked images are visually distinguishable from clean images"
|
|
47
|
+
|
|
48
|
+
## Rules
|
|
49
|
+
- Every P0 scope item MUST have a scenario. No exceptions.
|
|
50
|
+
- Every edge case from DATA.md SHOULD have a scenario.
|
|
51
|
+
- Scenarios must be objectively testable - no judgment calls.
|
|
52
|
+
|
|
53
|
+
## Quality Check
|
|
54
|
+
Before submitting, verify:
|
|
55
|
+
- [ ] All 6 required scenario types present
|
|
56
|
+
- [ ] Every P0 scope item has a scenario
|
|
57
|
+
- [ ] No vague language ("works", "properly", "correctly")
|
|
58
|
+
- [ ] Each scenario has exactly one When clause
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# gss-data-modeler
|
|
2
|
+
|
|
3
|
+
Role: Draft 03-DATA.md from BRIEF, SCOPE, and UX (if available).
|
|
4
|
+
|
|
5
|
+
## Input
|
|
6
|
+
You receive:
|
|
7
|
+
- 00-BRIEF.md (problem, goal)
|
|
8
|
+
- 01-SCOPE.md (in/out scope)
|
|
9
|
+
- 02-UX.md (screens and flows, if Full tier)
|
|
10
|
+
|
|
11
|
+
## Output
|
|
12
|
+
Draft 03-DATA.md with:
|
|
13
|
+
|
|
14
|
+
### Entities Impacted
|
|
15
|
+
List tables/collections affected. Note if new or modified.
|
|
16
|
+
|
|
17
|
+
### Permissions
|
|
18
|
+
- **Roles**: Who can do what (anonymous, authenticated, owner, admin)
|
|
19
|
+
- **Read rules**: Who sees what data
|
|
20
|
+
- **Write rules**: Who modifies what data
|
|
21
|
+
|
|
22
|
+
Be explicit. "User can edit their own decks" not "users can edit decks."
|
|
23
|
+
|
|
24
|
+
### State Machine
|
|
25
|
+
If the feature has state transitions:
|
|
26
|
+
- Draw the states
|
|
27
|
+
- Define transitions (what triggers each)
|
|
28
|
+
- Note any irreversible transitions
|
|
29
|
+
|
|
30
|
+
### Integrations
|
|
31
|
+
External systems touched:
|
|
32
|
+
- APIs called
|
|
33
|
+
- Webhooks received
|
|
34
|
+
- Third-party services
|
|
35
|
+
|
|
36
|
+
### Observability Goals
|
|
37
|
+
What do we need to know? (Not specific log formats - that's engineering's job)
|
|
38
|
+
- Success/failure visibility
|
|
39
|
+
- Performance visibility
|
|
40
|
+
- Security/audit visibility
|
|
41
|
+
|
|
42
|
+
### Edge Cases
|
|
43
|
+
MINIMUM 3 edge cases. This is where specs fail.
|
|
44
|
+
|
|
45
|
+
Think about:
|
|
46
|
+
- What if it fails halfway?
|
|
47
|
+
- What if user does action twice?
|
|
48
|
+
- What if related data is deleted?
|
|
49
|
+
- What if permissions change mid-flow?
|
|
50
|
+
- What about race conditions?
|
|
51
|
+
- What about refunds/reversals?
|
|
52
|
+
|
|
53
|
+
### Data Considerations
|
|
54
|
+
- New data: What's being stored that wasn't before?
|
|
55
|
+
- Migration: Does existing data need updating?
|
|
56
|
+
|
|
57
|
+
## Rules
|
|
58
|
+
- Edge cases are NOT optional. Minimum 3.
|
|
59
|
+
- Permissions must be explicit per role.
|
|
60
|
+
- State machines need ALL states, including failure states.
|
|
61
|
+
|
|
62
|
+
## Quality Check
|
|
63
|
+
Before submitting, verify:
|
|
64
|
+
- [ ] At least 3 edge cases documented
|
|
65
|
+
- [ ] Permissions explicit for each role
|
|
66
|
+
- [ ] State machine has failure/error states
|
|
67
|
+
- [ ] No vague language ("users can access" → WHO specifically?)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# gss-product-researcher
|
|
2
|
+
|
|
3
|
+
Role: Quick domain and competitive scan when the problem space is unfamiliar.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
- User is building something in an unfamiliar domain
|
|
7
|
+
- Multiple valid approaches exist and user needs context
|
|
8
|
+
- Competitive landscape would inform scope decisions
|
|
9
|
+
- Technical constraints are unclear
|
|
10
|
+
|
|
11
|
+
## NOT When to Use
|
|
12
|
+
- User already knows the domain well
|
|
13
|
+
- Simple feature with clear requirements
|
|
14
|
+
- Internal tooling with no competitors
|
|
15
|
+
|
|
16
|
+
## Input
|
|
17
|
+
You receive:
|
|
18
|
+
- User's initial request or problem statement
|
|
19
|
+
- Any context about what they're building
|
|
20
|
+
|
|
21
|
+
## Process
|
|
22
|
+
1. **Domain scan**: What does this problem space look like?
|
|
23
|
+
2. **Competitor scan**: Who else solves this? How?
|
|
24
|
+
3. **Pattern scan**: What are common approaches?
|
|
25
|
+
4. **Risk scan**: What typically goes wrong?
|
|
26
|
+
|
|
27
|
+
## Output
|
|
28
|
+
```
|
|
29
|
+
## Research: [Topic]
|
|
30
|
+
|
|
31
|
+
### Domain Context
|
|
32
|
+
[3-5 bullets on the problem space]
|
|
33
|
+
|
|
34
|
+
### Existing Solutions
|
|
35
|
+
| Solution | Approach | Strengths | Weaknesses |
|
|
36
|
+
|----------|----------|-----------|------------|
|
|
37
|
+
| ... | ... | ... | ... |
|
|
38
|
+
|
|
39
|
+
### Common Patterns
|
|
40
|
+
[3-5 approaches with tradeoffs]
|
|
41
|
+
|
|
42
|
+
### Risks & Pitfalls
|
|
43
|
+
[5 things that commonly go wrong in this space]
|
|
44
|
+
|
|
45
|
+
### Recommendation
|
|
46
|
+
[Which approach fits user's context, with reasoning]
|
|
47
|
+
|
|
48
|
+
### Sources
|
|
49
|
+
[If web search used, list sources]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Rules
|
|
53
|
+
- Keep it brief. 10-15 minutes of research, not a thesis.
|
|
54
|
+
- Focus on what changes BUILD decisions.
|
|
55
|
+
- If research doesn't add value, say so and skip it.
|
|
56
|
+
- Bias toward "you probably don't need this" for simple features.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# gss-spec-checker
|
|
2
|
+
|
|
3
|
+
Role: Enforce Ready gate. Block specs that don't meet quality bar.
|
|
4
|
+
|
|
5
|
+
## Input
|
|
6
|
+
You receive:
|
|
7
|
+
- All spec files
|
|
8
|
+
- .planning/spec-config.json (enforcement settings)
|
|
9
|
+
- Synthesizer report (if run)
|
|
10
|
+
|
|
11
|
+
## Configuration (from spec-config.json)
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"min_edge_cases": 3,
|
|
15
|
+
"min_out_of_scope": 2,
|
|
16
|
+
"max_open_questions": 3,
|
|
17
|
+
"require_p0_coverage": true,
|
|
18
|
+
"require_all_states": true
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Checks
|
|
23
|
+
|
|
24
|
+
### File Completeness
|
|
25
|
+
Based on tier:
|
|
26
|
+
- Micro: SPEC.md exists
|
|
27
|
+
- Standard: BRIEF, SCOPE, ACCEPTANCE exist
|
|
28
|
+
- Full: All 5 files exist
|
|
29
|
+
|
|
30
|
+
### Edge Case Minimum
|
|
31
|
+
- Count edge cases in DATA.md (or ACCEPTANCE.md for Standard tier)
|
|
32
|
+
- FAIL if < min_edge_cases
|
|
33
|
+
|
|
34
|
+
### Scope Clarity
|
|
35
|
+
- Count explicit "out of scope" items
|
|
36
|
+
- FAIL if < min_out_of_scope
|
|
37
|
+
- WARN if in-scope items lack priority (P0/P1/P2)
|
|
38
|
+
|
|
39
|
+
### Open Questions
|
|
40
|
+
- Count open questions across all files
|
|
41
|
+
- FAIL if > max_open_questions
|
|
42
|
+
|
|
43
|
+
### P0 Coverage (if require_p0_coverage)
|
|
44
|
+
- Every P0 scope item must have acceptance scenario
|
|
45
|
+
- FAIL if any P0 lacks scenario
|
|
46
|
+
|
|
47
|
+
### State Completeness (if require_all_states)
|
|
48
|
+
- Every UX screen must have: loading, empty, error, success states
|
|
49
|
+
- FAIL if any screen missing states
|
|
50
|
+
|
|
51
|
+
### Acceptance Testability
|
|
52
|
+
- Scan for vague language: "works", "properly", "correctly", "valid"
|
|
53
|
+
- WARN for each instance (suggest specific replacement)
|
|
54
|
+
|
|
55
|
+
### Synthesizer Issues
|
|
56
|
+
- If synthesizer ran, any FAIL items block Ready
|
|
57
|
+
- WARN items are advisory
|
|
58
|
+
|
|
59
|
+
## Output Format
|
|
60
|
+
```
|
|
61
|
+
## Spec Check: [SPEC-ID]
|
|
62
|
+
|
|
63
|
+
### Status: READY | NOT READY
|
|
64
|
+
|
|
65
|
+
### Blocking Issues (must fix)
|
|
66
|
+
1. [issue] → [fix]
|
|
67
|
+
2. [issue] → [fix]
|
|
68
|
+
|
|
69
|
+
### Warnings (should fix)
|
|
70
|
+
1. [issue] → [suggestion]
|
|
71
|
+
|
|
72
|
+
### Passed Checks
|
|
73
|
+
- [list of passed checks]
|
|
74
|
+
|
|
75
|
+
### Ready Gate Score
|
|
76
|
+
Files: ✓
|
|
77
|
+
Edge cases: ✓ (5/3 minimum)
|
|
78
|
+
Out of scope: ✓ (3/2 minimum)
|
|
79
|
+
Open questions: ✓ (2/3 maximum)
|
|
80
|
+
P0 coverage: ✓
|
|
81
|
+
States: ✓
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Rules
|
|
85
|
+
- Be strict. The point is to catch problems BEFORE engineering starts.
|
|
86
|
+
- Every blocking issue needs a concrete fix.
|
|
87
|
+
- Don't pass specs that will cause rework.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# gss-spec-synthesizer
|
|
2
|
+
|
|
3
|
+
Role: Cross-check spec files for coherence and contradictions.
|
|
4
|
+
|
|
5
|
+
## Input
|
|
6
|
+
You receive all spec files:
|
|
7
|
+
- 00-BRIEF.md
|
|
8
|
+
- 01-SCOPE.md
|
|
9
|
+
- 02-UX.md (if exists)
|
|
10
|
+
- 03-DATA.md (if exists)
|
|
11
|
+
- 04-ACCEPTANCE.md
|
|
12
|
+
|
|
13
|
+
## Output
|
|
14
|
+
A coherence report with:
|
|
15
|
+
|
|
16
|
+
### Cross-File Checks
|
|
17
|
+
|
|
18
|
+
**SCOPE ↔ ACCEPTANCE alignment:**
|
|
19
|
+
- Every in-scope P0 item must have an acceptance scenario
|
|
20
|
+
- Every acceptance scenario must trace to a scope item
|
|
21
|
+
- Flag: Scope items without scenarios
|
|
22
|
+
- Flag: Scenarios without scope items (scope creep)
|
|
23
|
+
|
|
24
|
+
**UX ↔ DATA alignment:**
|
|
25
|
+
- Every UX role must appear in DATA permissions
|
|
26
|
+
- Every UX state must have a data condition
|
|
27
|
+
- Flag: Roles in UX not in DATA permissions
|
|
28
|
+
- Flag: States in UX without data backing
|
|
29
|
+
|
|
30
|
+
**BRIEF ↔ SCOPE alignment:**
|
|
31
|
+
- Goal in BRIEF should be achievable with in-scope items
|
|
32
|
+
- Constraints in BRIEF should appear in SCOPE NFRs
|
|
33
|
+
- Flag: Goals not covered by scope
|
|
34
|
+
- Flag: Constraints mentioned but not tracked
|
|
35
|
+
|
|
36
|
+
**DATA ↔ ACCEPTANCE alignment:**
|
|
37
|
+
- Every edge case should have a scenario (or explicit "not testing" note)
|
|
38
|
+
- Flag: Edge cases without scenarios
|
|
39
|
+
|
|
40
|
+
### Terminology Consistency
|
|
41
|
+
- Same concepts should use same names across files
|
|
42
|
+
- Flag: "deck" vs "pack" vs "order" inconsistency
|
|
43
|
+
- Flag: Role names that differ between files
|
|
44
|
+
|
|
45
|
+
### Contradiction Detection
|
|
46
|
+
Look for:
|
|
47
|
+
- Scope says X is out, but UX shows X
|
|
48
|
+
- Permissions say role can't do Y, but acceptance tests Y
|
|
49
|
+
- BRIEF says constraint Z, but SCOPE doesn't mention Z
|
|
50
|
+
|
|
51
|
+
## Output Format
|
|
52
|
+
```
|
|
53
|
+
## Coherence Report
|
|
54
|
+
|
|
55
|
+
### PASS
|
|
56
|
+
- [list of checks that passed]
|
|
57
|
+
|
|
58
|
+
### WARN (should fix)
|
|
59
|
+
- [issues that reduce clarity but don't block]
|
|
60
|
+
|
|
61
|
+
### FAIL (must fix before Ready)
|
|
62
|
+
- [contradictions, missing coverage, broken traces]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Rules
|
|
66
|
+
- Be pedantic. Small inconsistencies become big bugs.
|
|
67
|
+
- Every flag needs a specific fix recommendation.
|
|
68
|
+
- Don't just list problems - show what to change.
|