get-shit-done-cc 1.10.0-experimental.0 → 1.10.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/README.md +16 -17
- package/agents/gsd-executor.md +375 -37
- package/agents/gsd-planner.md +108 -15
- package/bin/install.js +163 -238
- package/commands/gsd/help.md +0 -43
- package/commands/gsd/new-project.md +8 -94
- package/commands/gsd/plan-phase.md +5 -35
- package/get-shit-done/references/verification-patterns.md +1 -1
- package/get-shit-done/templates/phase-prompt.md +4 -4
- package/get-shit-done/templates/state.md +0 -37
- package/get-shit-done/workflows/execute-phase.md +1 -44
- package/get-shit-done/workflows/execute-plan.md +856 -34
- package/hooks/dist/gsd-statusline.js +9 -6
- package/package.json +7 -10
- package/agents/design-specialist.md +0 -222
- package/commands/gsd/autopilot.md +0 -518
- package/commands/gsd/checkpoints.md +0 -229
- package/commands/gsd/design-system.md +0 -70
- package/commands/gsd/discuss-design.md +0 -77
- package/commands/gsd/extend.md +0 -80
- package/get-shit-done/references/ccr-integration.md +0 -468
- package/get-shit-done/references/checkpoint-execution.md +0 -369
- package/get-shit-done/references/checkpoint-types.md +0 -728
- package/get-shit-done/references/deviation-rules.md +0 -215
- package/get-shit-done/references/framework-patterns.md +0 -543
- package/get-shit-done/references/ui-principles.md +0 -258
- package/get-shit-done/skills/gsd-extend/SKILL.md +0 -154
- package/get-shit-done/skills/gsd-extend/references/agent-structure.md +0 -305
- package/get-shit-done/skills/gsd-extend/references/extension-anatomy.md +0 -123
- package/get-shit-done/skills/gsd-extend/references/reference-structure.md +0 -408
- package/get-shit-done/skills/gsd-extend/references/template-structure.md +0 -370
- package/get-shit-done/skills/gsd-extend/references/validation-rules.md +0 -140
- package/get-shit-done/skills/gsd-extend/references/workflow-structure.md +0 -253
- package/get-shit-done/skills/gsd-extend/templates/agent-template.md +0 -234
- package/get-shit-done/skills/gsd-extend/templates/reference-template.md +0 -239
- package/get-shit-done/skills/gsd-extend/templates/workflow-template.md +0 -169
- package/get-shit-done/skills/gsd-extend/workflows/create-approach.md +0 -332
- package/get-shit-done/skills/gsd-extend/workflows/list-extensions.md +0 -133
- package/get-shit-done/skills/gsd-extend/workflows/remove-extension.md +0 -93
- package/get-shit-done/skills/gsd-extend/workflows/validate-extension.md +0 -184
- package/get-shit-done/templates/autopilot-script-simple.sh +0 -181
- package/get-shit-done/templates/autopilot-script.sh +0 -1142
- package/get-shit-done/templates/autopilot-script.sh.backup +0 -1142
- package/get-shit-done/templates/design-system.md +0 -238
- package/get-shit-done/templates/phase-design.md +0 -205
- package/get-shit-done/templates/phase-models-template.json +0 -71
- package/get-shit-done/tui/App.tsx +0 -169
- package/get-shit-done/tui/README.md +0 -107
- package/get-shit-done/tui/build.js +0 -37
- package/get-shit-done/tui/components/ActivityFeed.tsx +0 -126
- package/get-shit-done/tui/components/PhaseCard.tsx +0 -86
- package/get-shit-done/tui/components/StatsBar.tsx +0 -147
- package/get-shit-done/tui/dist/index.js +0 -387
- package/get-shit-done/tui/index.tsx +0 -12
- package/get-shit-done/tui/package-lock.json +0 -1074
- package/get-shit-done/tui/package.json +0 -22
- package/get-shit-done/tui/utils/pipeReader.ts +0 -129
- package/get-shit-done/workflows/design-system.md +0 -245
- package/get-shit-done/workflows/discuss-design.md +0 -330
- package/get-shit-done/workflows/execute-plan-auth.md +0 -122
- package/get-shit-done/workflows/execute-plan-checkpoints.md +0 -541
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
<extension_anatomy>
|
|
2
|
-
|
|
3
|
-
## How Extensions Work
|
|
4
|
-
|
|
5
|
-
GSD extensions are markdown files that integrate into the GSD lifecycle. They follow the same meta-prompting patterns as built-in GSD components.
|
|
6
|
-
|
|
7
|
-
## Discovery Mechanism
|
|
8
|
-
|
|
9
|
-
When GSD needs a workflow, agent, reference, or template:
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
# 1. Check project extensions first
|
|
13
|
-
ls .planning/extensions/{type}/{name}.md 2>/dev/null
|
|
14
|
-
|
|
15
|
-
# 2. Check global extensions
|
|
16
|
-
ls ~/.claude/gsd-extensions/{type}/{name}.md 2>/dev/null
|
|
17
|
-
|
|
18
|
-
# 3. Fall back to built-in
|
|
19
|
-
ls ~/.claude/get-shit-done/{type}/{name}.md 2>/dev/null
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
First match wins. This allows project-specific overrides.
|
|
23
|
-
|
|
24
|
-
## Extension Lifecycle
|
|
25
|
-
|
|
26
|
-
**1. Creation** - User creates extension file with proper structure
|
|
27
|
-
**2. Validation** - GSD validates frontmatter and structure
|
|
28
|
-
**3. Registration** - Extension becomes discoverable
|
|
29
|
-
**4. Triggering** - Extension activates based on conditions
|
|
30
|
-
**5. Execution** - Extension content is loaded and processed
|
|
31
|
-
**6. Completion** - Extension produces expected output
|
|
32
|
-
|
|
33
|
-
## Integration Points
|
|
34
|
-
|
|
35
|
-
Extensions integrate with GSD at specific hook points:
|
|
36
|
-
|
|
37
|
-
| Hook Point | What Happens | Extension Types |
|
|
38
|
-
|------------|--------------|-----------------|
|
|
39
|
-
| `pre-planning` | Before phase planning begins | workflows, references |
|
|
40
|
-
| `post-planning` | After plans created | workflows, agents |
|
|
41
|
-
| `pre-execution` | Before task execution | workflows, references |
|
|
42
|
-
| `post-execution` | After task completes | workflows, templates |
|
|
43
|
-
| `verification` | During verification phase | agents, workflows |
|
|
44
|
-
| `decision` | At decision checkpoints | agents, references |
|
|
45
|
-
| `always` | Whenever type is loaded | references |
|
|
46
|
-
|
|
47
|
-
## Content Model
|
|
48
|
-
|
|
49
|
-
All extensions follow the GSD content model:
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
┌─────────────────────────────────────┐
|
|
53
|
-
│ YAML Frontmatter │
|
|
54
|
-
│ - name, description │
|
|
55
|
-
│ - type-specific fields │
|
|
56
|
-
├─────────────────────────────────────┤
|
|
57
|
-
│ XML Structure │
|
|
58
|
-
│ - Semantic containers │
|
|
59
|
-
│ - Process steps (for workflows) │
|
|
60
|
-
│ - Role definition (for agents) │
|
|
61
|
-
│ - Content body (for references) │
|
|
62
|
-
│ - Template format (for templates) │
|
|
63
|
-
└─────────────────────────────────────┘
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## File Naming
|
|
67
|
-
|
|
68
|
-
Extension filenames become their identifiers:
|
|
69
|
-
|
|
70
|
-
```
|
|
71
|
-
my-custom-workflow.md → triggers as "my-custom-workflow"
|
|
72
|
-
security-auditor.md → spawns as "security-auditor" agent
|
|
73
|
-
react-patterns.md → loads as "react-patterns" reference
|
|
74
|
-
api-spec.md → uses as "api-spec" template
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Use kebab-case. Name should be descriptive of function.
|
|
78
|
-
|
|
79
|
-
## Scope Selection
|
|
80
|
-
|
|
81
|
-
**Use project scope (`.planning/extensions/`) when:**
|
|
82
|
-
- Extension is specific to this project
|
|
83
|
-
- Extension uses project-specific patterns
|
|
84
|
-
- Extension shouldn't affect other projects
|
|
85
|
-
- Extension is experimental
|
|
86
|
-
|
|
87
|
-
**Use global scope (`~/.claude/gsd-extensions/`) when:**
|
|
88
|
-
- Extension is generally useful across projects
|
|
89
|
-
- Extension represents your personal workflow preferences
|
|
90
|
-
- Extension is mature and tested
|
|
91
|
-
- Extension doesn't contain project-specific details
|
|
92
|
-
|
|
93
|
-
## Overriding Built-ins
|
|
94
|
-
|
|
95
|
-
To replace a built-in GSD component:
|
|
96
|
-
|
|
97
|
-
1. Create extension with same name as built-in
|
|
98
|
-
2. Place in project or global extensions directory
|
|
99
|
-
3. GSD will use your extension instead
|
|
100
|
-
|
|
101
|
-
Example: Override execute-plan workflow:
|
|
102
|
-
```
|
|
103
|
-
~/.claude/gsd-extensions/workflows/execute-plan.md
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
This completely replaces the built-in execute-plan.md for all projects.
|
|
107
|
-
|
|
108
|
-
**Warning:** Overriding built-ins requires deep understanding of GSD internals. Test thoroughly.
|
|
109
|
-
|
|
110
|
-
## Extension Dependencies
|
|
111
|
-
|
|
112
|
-
Extensions can reference other extensions or built-in components:
|
|
113
|
-
|
|
114
|
-
```markdown
|
|
115
|
-
<required_reading>
|
|
116
|
-
@~/.claude/get-shit-done/references/deviation-rules.md
|
|
117
|
-
@~/.claude/gsd-extensions/references/my-patterns.md
|
|
118
|
-
</required_reading>
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
Resolution order applies to @-references too.
|
|
122
|
-
|
|
123
|
-
</extension_anatomy>
|
|
@@ -1,408 +0,0 @@
|
|
|
1
|
-
<reference_structure>
|
|
2
|
-
|
|
3
|
-
## Reference Extensions
|
|
4
|
-
|
|
5
|
-
References are domain knowledge files loaded during GSD operations. They provide context, patterns, best practices, and project-specific conventions.
|
|
6
|
-
|
|
7
|
-
## Required Frontmatter
|
|
8
|
-
|
|
9
|
-
```yaml
|
|
10
|
-
---
|
|
11
|
-
name: reference-name
|
|
12
|
-
description: What knowledge this provides
|
|
13
|
-
load_when:
|
|
14
|
-
- keyword1 # Load when phase/plan mentions this
|
|
15
|
-
- keyword2 # Multiple keywords supported
|
|
16
|
-
- always # Load for every operation
|
|
17
|
-
auto_load_for:
|
|
18
|
-
- plan-phase # Auto-load during planning
|
|
19
|
-
- execute-plan # Auto-load during execution
|
|
20
|
-
- verify-phase # Auto-load during verification
|
|
21
|
-
---
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Reference Body Structure
|
|
25
|
-
|
|
26
|
-
```xml
|
|
27
|
-
<{reference_topic}>
|
|
28
|
-
|
|
29
|
-
## Overview
|
|
30
|
-
|
|
31
|
-
High-level summary of this knowledge domain.
|
|
32
|
-
|
|
33
|
-
## Core Concepts
|
|
34
|
-
|
|
35
|
-
### Concept 1
|
|
36
|
-
|
|
37
|
-
Explanation of first concept.
|
|
38
|
-
|
|
39
|
-
**Key points:**
|
|
40
|
-
- Point one
|
|
41
|
-
- Point two
|
|
42
|
-
|
|
43
|
-
**Example:**
|
|
44
|
-
```code
|
|
45
|
-
example here
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Concept 2
|
|
49
|
-
|
|
50
|
-
Explanation of second concept.
|
|
51
|
-
|
|
52
|
-
## Patterns
|
|
53
|
-
|
|
54
|
-
### Pattern Name
|
|
55
|
-
|
|
56
|
-
**When to use:** Conditions for this pattern
|
|
57
|
-
|
|
58
|
-
**Implementation:**
|
|
59
|
-
```code
|
|
60
|
-
pattern implementation
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
**Avoid:** Common mistakes
|
|
64
|
-
|
|
65
|
-
## Anti-Patterns
|
|
66
|
-
|
|
67
|
-
### Anti-Pattern Name
|
|
68
|
-
|
|
69
|
-
**Problem:** What goes wrong
|
|
70
|
-
|
|
71
|
-
**Why it happens:** Root cause
|
|
72
|
-
|
|
73
|
-
**Better approach:** What to do instead
|
|
74
|
-
|
|
75
|
-
## Quick Reference
|
|
76
|
-
|
|
77
|
-
| Term | Definition |
|
|
78
|
-
|------|------------|
|
|
79
|
-
| term1 | definition |
|
|
80
|
-
| term2 | definition |
|
|
81
|
-
|
|
82
|
-
</{reference_topic}>
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## Load Triggers
|
|
86
|
-
|
|
87
|
-
References load based on context matching:
|
|
88
|
-
|
|
89
|
-
**Keyword matching:**
|
|
90
|
-
```yaml
|
|
91
|
-
load_when:
|
|
92
|
-
- authentication
|
|
93
|
-
- auth
|
|
94
|
-
- login
|
|
95
|
-
- jwt
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
When any planning/execution content mentions these keywords, reference is loaded.
|
|
99
|
-
|
|
100
|
-
**Phase name matching:**
|
|
101
|
-
```yaml
|
|
102
|
-
load_when:
|
|
103
|
-
- "*-auth-*" # Any phase with "auth" in name
|
|
104
|
-
- "01-*" # First phase only
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
**Always load:**
|
|
108
|
-
```yaml
|
|
109
|
-
load_when:
|
|
110
|
-
- always
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
Use sparingly - adds to every context.
|
|
114
|
-
|
|
115
|
-
## Auto-loading
|
|
116
|
-
|
|
117
|
-
References can auto-load for specific operations:
|
|
118
|
-
|
|
119
|
-
```yaml
|
|
120
|
-
auto_load_for:
|
|
121
|
-
- plan-phase # Loaded when planning any phase
|
|
122
|
-
- execute-plan # Loaded when executing any plan
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
This is independent of keyword matching.
|
|
126
|
-
|
|
127
|
-
## Example: React Patterns Reference
|
|
128
|
-
|
|
129
|
-
```yaml
|
|
130
|
-
---
|
|
131
|
-
name: react-patterns
|
|
132
|
-
description: React 19 patterns and conventions for this project
|
|
133
|
-
load_when:
|
|
134
|
-
- react
|
|
135
|
-
- component
|
|
136
|
-
- hook
|
|
137
|
-
- tsx
|
|
138
|
-
- jsx
|
|
139
|
-
- frontend
|
|
140
|
-
- ui
|
|
141
|
-
auto_load_for: []
|
|
142
|
-
---
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
```xml
|
|
146
|
-
<react_patterns>
|
|
147
|
-
|
|
148
|
-
## Overview
|
|
149
|
-
|
|
150
|
-
This project uses React 19 with Server Components as default.
|
|
151
|
-
All components are server components unless marked with 'use client'.
|
|
152
|
-
|
|
153
|
-
## Component Conventions
|
|
154
|
-
|
|
155
|
-
### File Naming
|
|
156
|
-
|
|
157
|
-
- Components: `PascalCase.tsx` (e.g., `UserProfile.tsx`)
|
|
158
|
-
- Hooks: `useCamelCase.ts` (e.g., `useAuth.ts`)
|
|
159
|
-
- Utils: `camelCase.ts` (e.g., `formatDate.ts`)
|
|
160
|
-
|
|
161
|
-
### Component Structure
|
|
162
|
-
|
|
163
|
-
```tsx
|
|
164
|
-
// components/UserProfile.tsx
|
|
165
|
-
|
|
166
|
-
interface UserProfileProps {
|
|
167
|
-
userId: string;
|
|
168
|
-
showEmail?: boolean;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
export function UserProfile({ userId, showEmail = false }: UserProfileProps) {
|
|
172
|
-
// Implementation
|
|
173
|
-
}
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
**Rules:**
|
|
177
|
-
- Named exports (not default)
|
|
178
|
-
- Props interface above component
|
|
179
|
-
- Destructure props in signature
|
|
180
|
-
- Optional props have defaults
|
|
181
|
-
|
|
182
|
-
### Client Components
|
|
183
|
-
|
|
184
|
-
```tsx
|
|
185
|
-
'use client';
|
|
186
|
-
|
|
187
|
-
import { useState } from 'react';
|
|
188
|
-
|
|
189
|
-
export function Counter() {
|
|
190
|
-
const [count, setCount] = useState(0);
|
|
191
|
-
// ...
|
|
192
|
-
}
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
Mark as client component when:
|
|
196
|
-
- Using useState, useEffect, useReducer
|
|
197
|
-
- Using browser APIs (localStorage, window)
|
|
198
|
-
- Using event handlers (onClick, onChange)
|
|
199
|
-
- Using third-party client libraries
|
|
200
|
-
|
|
201
|
-
## Data Fetching
|
|
202
|
-
|
|
203
|
-
### Server Components (preferred)
|
|
204
|
-
|
|
205
|
-
```tsx
|
|
206
|
-
// Fetches at request time
|
|
207
|
-
async function UserList() {
|
|
208
|
-
const users = await db.user.findMany();
|
|
209
|
-
return <ul>{users.map(u => <li key={u.id}>{u.name}</li>)}</ul>;
|
|
210
|
-
}
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### Client Components (when needed)
|
|
214
|
-
|
|
215
|
-
```tsx
|
|
216
|
-
'use client';
|
|
217
|
-
|
|
218
|
-
import useSWR from 'swr';
|
|
219
|
-
|
|
220
|
-
function UserList() {
|
|
221
|
-
const { data: users } = useSWR('/api/users', fetcher);
|
|
222
|
-
// ...
|
|
223
|
-
}
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
## State Management
|
|
227
|
-
|
|
228
|
-
### Local State
|
|
229
|
-
|
|
230
|
-
Use `useState` for component-local state.
|
|
231
|
-
|
|
232
|
-
### Shared State
|
|
233
|
-
|
|
234
|
-
Use React Context for:
|
|
235
|
-
- Theme/appearance preferences
|
|
236
|
-
- User session
|
|
237
|
-
- Feature flags
|
|
238
|
-
|
|
239
|
-
Do NOT use Context for:
|
|
240
|
-
- Server data (use SWR/React Query)
|
|
241
|
-
- Form state (use react-hook-form)
|
|
242
|
-
|
|
243
|
-
## Forms
|
|
244
|
-
|
|
245
|
-
```tsx
|
|
246
|
-
'use client';
|
|
247
|
-
|
|
248
|
-
import { useForm } from 'react-hook-form';
|
|
249
|
-
import { zodResolver } from '@hookform/resolvers/zod';
|
|
250
|
-
|
|
251
|
-
const schema = z.object({
|
|
252
|
-
email: z.string().email(),
|
|
253
|
-
password: z.string().min(8),
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
function LoginForm() {
|
|
257
|
-
const { register, handleSubmit, formState } = useForm({
|
|
258
|
-
resolver: zodResolver(schema),
|
|
259
|
-
});
|
|
260
|
-
// ...
|
|
261
|
-
}
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
## Anti-Patterns
|
|
265
|
-
|
|
266
|
-
### Prop Drilling
|
|
267
|
-
|
|
268
|
-
**Bad:**
|
|
269
|
-
```tsx
|
|
270
|
-
<App user={user}>
|
|
271
|
-
<Layout user={user}>
|
|
272
|
-
<Sidebar user={user}>
|
|
273
|
-
<UserInfo user={user} />
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
**Good:** Use Context or component composition.
|
|
277
|
-
|
|
278
|
-
### useEffect for Data Fetching
|
|
279
|
-
|
|
280
|
-
**Bad:**
|
|
281
|
-
```tsx
|
|
282
|
-
useEffect(() => {
|
|
283
|
-
fetch('/api/users').then(setUsers);
|
|
284
|
-
}, []);
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
**Good:** Use server components or SWR.
|
|
288
|
-
|
|
289
|
-
### Inline Object Creation
|
|
290
|
-
|
|
291
|
-
**Bad:**
|
|
292
|
-
```tsx
|
|
293
|
-
<Component style={{ color: 'red' }} />
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
**Good:**
|
|
297
|
-
```tsx
|
|
298
|
-
const styles = { color: 'red' };
|
|
299
|
-
<Component style={styles} />
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
## Quick Reference
|
|
303
|
-
|
|
304
|
-
| Pattern | Use For |
|
|
305
|
-
|---------|---------|
|
|
306
|
-
| Server Component | Data fetching, static content |
|
|
307
|
-
| Client Component | Interactivity, browser APIs |
|
|
308
|
-
| Context | Theme, auth, app-wide settings |
|
|
309
|
-
| SWR | Client-side data fetching |
|
|
310
|
-
| react-hook-form | Complex forms |
|
|
311
|
-
| Suspense | Loading states |
|
|
312
|
-
|
|
313
|
-
</react_patterns>
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
## Example: Project Conventions Reference
|
|
317
|
-
|
|
318
|
-
```yaml
|
|
319
|
-
---
|
|
320
|
-
name: project-conventions
|
|
321
|
-
description: Project-specific coding conventions
|
|
322
|
-
load_when:
|
|
323
|
-
- always
|
|
324
|
-
auto_load_for:
|
|
325
|
-
- plan-phase
|
|
326
|
-
- execute-plan
|
|
327
|
-
---
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
```xml
|
|
331
|
-
<project_conventions>
|
|
332
|
-
|
|
333
|
-
## Overview
|
|
334
|
-
|
|
335
|
-
Conventions specific to this project. These override general best practices
|
|
336
|
-
where they conflict.
|
|
337
|
-
|
|
338
|
-
## API Endpoints
|
|
339
|
-
|
|
340
|
-
All API routes follow pattern:
|
|
341
|
-
```
|
|
342
|
-
/api/{resource}/{action}
|
|
343
|
-
|
|
344
|
-
GET /api/users # List
|
|
345
|
-
GET /api/users/:id # Get one
|
|
346
|
-
POST /api/users # Create
|
|
347
|
-
PATCH /api/users/:id # Update
|
|
348
|
-
DELETE /api/users/:id # Delete
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
## Error Handling
|
|
352
|
-
|
|
353
|
-
API errors return:
|
|
354
|
-
```json
|
|
355
|
-
{
|
|
356
|
-
"error": {
|
|
357
|
-
"code": "VALIDATION_ERROR",
|
|
358
|
-
"message": "Human readable message",
|
|
359
|
-
"details": {}
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
## Database
|
|
365
|
-
|
|
366
|
-
- All tables have `id` (UUID), `created_at`, `updated_at`
|
|
367
|
-
- Soft delete via `deleted_at` timestamp
|
|
368
|
-
- Use Prisma for all database access
|
|
369
|
-
|
|
370
|
-
## Testing
|
|
371
|
-
|
|
372
|
-
- Unit tests: `*.test.ts` co-located with source
|
|
373
|
-
- Integration tests: `tests/integration/`
|
|
374
|
-
- E2E tests: `tests/e2e/`
|
|
375
|
-
|
|
376
|
-
Run with `npm test` (unit) or `npm run test:e2e` (e2e)
|
|
377
|
-
|
|
378
|
-
## Git
|
|
379
|
-
|
|
380
|
-
- Branch naming: `feature/description`, `fix/description`
|
|
381
|
-
- Commits: Conventional commits format
|
|
382
|
-
- PRs: Require at least description and test plan
|
|
383
|
-
|
|
384
|
-
</project_conventions>
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
## Reference Best Practices
|
|
388
|
-
|
|
389
|
-
**1. Be specific**
|
|
390
|
-
Generic knowledge is less useful. Include project-specific details.
|
|
391
|
-
|
|
392
|
-
**2. Include examples**
|
|
393
|
-
Code examples are worth 1000 words of explanation.
|
|
394
|
-
|
|
395
|
-
**3. Document anti-patterns**
|
|
396
|
-
Knowing what NOT to do is as valuable as knowing what to do.
|
|
397
|
-
|
|
398
|
-
**4. Keep updated**
|
|
399
|
-
References reflect current state. Update when patterns change.
|
|
400
|
-
|
|
401
|
-
**5. Use appropriate load triggers**
|
|
402
|
-
Too many triggers = loaded when not relevant.
|
|
403
|
-
Too few triggers = not loaded when needed.
|
|
404
|
-
|
|
405
|
-
**6. Avoid duplication**
|
|
406
|
-
Don't repeat built-in GSD references. Extend or override them.
|
|
407
|
-
|
|
408
|
-
</reference_structure>
|