@mindfoldhq/trellis 0.2.7 → 0.2.9
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 → README.md} +11 -38
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +37 -57
- package/dist/commands/init.js.map +1 -1
- package/dist/templates/claude/commands/update-spec.md +213 -0
- package/dist/templates/cursor/commands/update-spec.md +213 -0
- package/package.json +1 -1
package/{readme.md → README.md}
RENAMED
|
@@ -3,7 +3,11 @@
|
|
|
3
3
|
</p>-->
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<
|
|
6
|
+
<picture>
|
|
7
|
+
<source srcset="assets/trellis.png" media="(prefers-color-scheme: dark)">
|
|
8
|
+
<source srcset="assets/trellis.png" media="(prefers-color-scheme: light)">
|
|
9
|
+
<img src="assets/trellis.png" alt="Trellis Logo" width="500" style="image-rendering: -webkit-optimize-contrast; image-rendering: crisp-edges;">
|
|
10
|
+
</picture>
|
|
7
11
|
</p>
|
|
8
12
|
|
|
9
13
|
<p align="center">
|
|
@@ -96,8 +100,7 @@ AI: [Plan] Analyze codebase, write PRD
|
|
|
96
100
|
|
|
97
101
|
## How It Works
|
|
98
102
|
|
|
99
|
-
|
|
100
|
-
<summary><strong>Project Structure</strong></summary>
|
|
103
|
+
### Project Structure
|
|
101
104
|
|
|
102
105
|
```
|
|
103
106
|
.trellis/
|
|
@@ -125,41 +128,11 @@ AI: [Plan] Analyze codebase, write PRD
|
|
|
125
128
|
└── ralph-loop.py # Quality control loop
|
|
126
129
|
```
|
|
127
130
|
|
|
128
|
-
</details>
|
|
129
|
-
|
|
130
131
|
### Workflow Diagram
|
|
131
132
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
│ Hook auto-injects: workflow.md + spec indexes + current state │
|
|
136
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
137
|
-
│
|
|
138
|
-
▼
|
|
139
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
140
|
-
│ Task Classification │
|
|
141
|
-
│ Question → Answer directly │
|
|
142
|
-
│ Trivial fix → Direct edit │
|
|
143
|
-
│ Development → Task Workflow (with spec injection) │
|
|
144
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
145
|
-
│
|
|
146
|
-
┌─────────────────────┼─────────────────────┐
|
|
147
|
-
▼ ▼ ▼
|
|
148
|
-
┌─────────┐ ┌──────────┐ ┌─────────┐
|
|
149
|
-
│Research │ │Implement │ │ Check │
|
|
150
|
-
│ Agent │ → │ Agent │ → │ Agent │
|
|
151
|
-
└─────────┘ └──────────┘ └─────────┘
|
|
152
|
-
Find specs Specs injected Specs injected
|
|
153
|
-
& patterns via Hook via Hook
|
|
154
|
-
│
|
|
155
|
-
▼
|
|
156
|
-
┌──────────────────┐
|
|
157
|
-
│ Ralph Loop │
|
|
158
|
-
│ (Quality Gate) │
|
|
159
|
-
└──────────────────┘
|
|
160
|
-
Verify: lint, typecheck
|
|
161
|
-
Retry if failed (max 5x)
|
|
162
|
-
```
|
|
133
|
+
<p align="center">
|
|
134
|
+
<img src="assets/workflow.png" alt="Trellis Workflow Diagram" />
|
|
135
|
+
</p>
|
|
163
136
|
|
|
164
137
|
|
|
165
138
|
## Roadmap
|
|
@@ -208,9 +181,9 @@ No. Each person has their own space at `.trellis/workspace/{name}/`. Spec files
|
|
|
208
181
|
|
|
209
182
|
<p align="center">
|
|
210
183
|
<a href="https://github.com/mindfold-ai/Trellis/blob/main/LICENSE">FSL License</a> •
|
|
211
|
-
Made with care by
|
|
184
|
+
Made with care by Mindfold</a>
|
|
212
185
|
</p>
|
|
213
186
|
|
|
214
187
|
<p align="center">
|
|
215
|
-
<sub>
|
|
188
|
+
<sub>Found Trellis useful? Please consider giving it a ⭐</sub>
|
|
216
189
|
</p>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA6BA,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAMD,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2M9D"}
|
package/dist/commands/init.js
CHANGED
|
@@ -17,14 +17,14 @@ import { DIR_NAMES, PATHS } from "../constants/paths.js";
|
|
|
17
17
|
import { VERSION } from "../cli/index.js";
|
|
18
18
|
import { agentsMdContent } from "../templates/markdown/index.js";
|
|
19
19
|
import { setWriteMode, writeFile, } from "../utils/file-writer.js";
|
|
20
|
-
import { detectProjectType,
|
|
20
|
+
import { detectProjectType, } from "../utils/project-detector.js";
|
|
21
21
|
import { initializeHashes } from "../utils/template-hash.js";
|
|
22
22
|
export async function init(options) {
|
|
23
23
|
const cwd = process.cwd();
|
|
24
24
|
// Generate ASCII art banner dynamically using FIGlet "Rebel" font
|
|
25
25
|
const banner = figlet.textSync("Trellis", { font: "Rebel" });
|
|
26
26
|
console.log(chalk.cyan(`\n${banner.trimEnd()}`));
|
|
27
|
-
console.log(chalk.gray("\n
|
|
27
|
+
console.log(chalk.gray("\n All-in-one AI framework & toolkit for Claude Code & Cursor\n"));
|
|
28
28
|
// Set write mode based on options
|
|
29
29
|
let writeMode = "ask";
|
|
30
30
|
if (options.force) {
|
|
@@ -68,9 +68,8 @@ export async function init(options) {
|
|
|
68
68
|
}
|
|
69
69
|
console.log(chalk.blue("👤 Developer:"), chalk.gray(developerName));
|
|
70
70
|
}
|
|
71
|
-
// Detect project type
|
|
71
|
+
// Detect project type (silent - no output)
|
|
72
72
|
const detectedType = detectProjectType(cwd);
|
|
73
|
-
console.log(chalk.blue("🔍 Project type:"), chalk.gray(getProjectTypeDescription(detectedType)));
|
|
74
73
|
let tools;
|
|
75
74
|
let projectType = detectedType;
|
|
76
75
|
if (options.yes) {
|
|
@@ -127,8 +126,7 @@ export async function init(options) {
|
|
|
127
126
|
console.log(chalk.yellow("No tools selected. At least one tool is required."));
|
|
128
127
|
return;
|
|
129
128
|
}
|
|
130
|
-
|
|
131
|
-
console.log(chalk.gray(`Project type: ${getProjectTypeDescription(projectType)}\n`));
|
|
129
|
+
// Silent - no "Configuring" output
|
|
132
130
|
// Create workflow structure with project type
|
|
133
131
|
// Multi-agent is enabled by default
|
|
134
132
|
console.log(chalk.blue("📁 Creating workflow structure..."));
|
|
@@ -162,71 +160,27 @@ export async function init(options) {
|
|
|
162
160
|
if (hashedCount > 0) {
|
|
163
161
|
console.log(chalk.gray(`📋 Tracking ${hashedCount} template files for updates`));
|
|
164
162
|
}
|
|
165
|
-
// Initialize developer identity (
|
|
166
|
-
let developerInitialized = false;
|
|
167
|
-
let bootstrapCreated = false;
|
|
163
|
+
// Initialize developer identity (silent - no output)
|
|
168
164
|
if (developerName) {
|
|
169
165
|
try {
|
|
170
166
|
const scriptPath = path.join(cwd, PATHS.SCRIPTS, "init-developer.sh");
|
|
171
167
|
execSync(`bash "${scriptPath}" "${developerName}"`, {
|
|
172
168
|
cwd,
|
|
173
|
-
stdio: "
|
|
169
|
+
stdio: "pipe", // Silent
|
|
174
170
|
});
|
|
175
|
-
developerInitialized = true;
|
|
176
171
|
// Create bootstrap feature to guide user through filling guidelines
|
|
177
172
|
const bootstrapScriptPath = path.join(cwd, PATHS.SCRIPTS, "create-bootstrap.sh");
|
|
178
173
|
execSync(`bash "${bootstrapScriptPath}" "${projectType}"`, {
|
|
179
174
|
cwd,
|
|
180
|
-
stdio: "pipe", // Silent
|
|
175
|
+
stdio: "pipe", // Silent
|
|
181
176
|
});
|
|
182
|
-
bootstrapCreated = true;
|
|
183
177
|
}
|
|
184
|
-
catch
|
|
185
|
-
|
|
178
|
+
catch {
|
|
179
|
+
// Silent failure - user can run init-developer.sh manually
|
|
186
180
|
}
|
|
187
181
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
console.log(chalk.cyan("Next steps:"));
|
|
191
|
-
let stepNum = 1;
|
|
192
|
-
if (!developerInitialized) {
|
|
193
|
-
console.log(chalk.gray(`${stepNum}. Run `) +
|
|
194
|
-
chalk.white(`./${PATHS.SCRIPTS}/init-developer.sh <your-name>`) +
|
|
195
|
-
chalk.gray(" to set up your developer identity"));
|
|
196
|
-
stepNum++;
|
|
197
|
-
console.log(chalk.gray(`${stepNum}. Fill in `) +
|
|
198
|
-
chalk.white(`${PATHS.SPEC}/`) +
|
|
199
|
-
chalk.gray(" with your project-specific guidelines"));
|
|
200
|
-
stepNum++;
|
|
201
|
-
}
|
|
202
|
-
else if (bootstrapCreated) {
|
|
203
|
-
console.log(chalk.gray(`${stepNum}. Use `) +
|
|
204
|
-
chalk.white("/start") +
|
|
205
|
-
chalk.gray(" command in your AI tool to begin a session"));
|
|
206
|
-
stepNum++;
|
|
207
|
-
console.log(chalk.gray(`${stepNum}. Ask AI to help you `) +
|
|
208
|
-
chalk.white("fill in project guidelines") +
|
|
209
|
-
chalk.gray(` in ${PATHS.SPEC}/\n`));
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
console.log(chalk.gray(`${stepNum}. Use `) +
|
|
213
|
-
chalk.white("/start") +
|
|
214
|
-
chalk.gray(" command in your AI tool to begin a session\n"));
|
|
215
|
-
}
|
|
216
|
-
// Print structure info
|
|
217
|
-
console.log(chalk.cyan("Generated structure files:"));
|
|
218
|
-
console.log(chalk.gray(` ${PATHS.SPEC}/guides/ - Thinking guides (filled)`));
|
|
219
|
-
if (projectType === "frontend" ||
|
|
220
|
-
projectType === "fullstack" ||
|
|
221
|
-
projectType === "unknown") {
|
|
222
|
-
console.log(chalk.gray(` ${PATHS.SPEC}/frontend/ - Frontend guidelines (to fill)`));
|
|
223
|
-
}
|
|
224
|
-
if (projectType === "backend" ||
|
|
225
|
-
projectType === "fullstack" ||
|
|
226
|
-
projectType === "unknown") {
|
|
227
|
-
console.log(chalk.gray(` ${PATHS.SPEC}/backend/ - Backend guidelines (to fill)`));
|
|
228
|
-
}
|
|
229
|
-
console.log("");
|
|
182
|
+
// Print "What We Solve" section
|
|
183
|
+
printWhatWeSolve();
|
|
230
184
|
}
|
|
231
185
|
/**
|
|
232
186
|
* Simple readline-based input (no flickering like inquirer)
|
|
@@ -251,4 +205,30 @@ async function createRootFiles(cwd) {
|
|
|
251
205
|
console.log(chalk.blue("📄 Created AGENTS.md"));
|
|
252
206
|
}
|
|
253
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* Print "What We Solve" section showing Trellis value proposition
|
|
210
|
+
* Styled like a meme/rant to resonate with developer pain points
|
|
211
|
+
*/
|
|
212
|
+
function printWhatWeSolve() {
|
|
213
|
+
console.log(chalk.gray("\nSound familiar? ") +
|
|
214
|
+
chalk.bold("You'll never say these again!!\n"));
|
|
215
|
+
// Pain point 1: Bug loop → Thinking Guides + Ralph Loop
|
|
216
|
+
console.log(chalk.gray("✗ ") + '"Fix A → break B → fix B → break A..."');
|
|
217
|
+
console.log(chalk.green(" ✓ ") +
|
|
218
|
+
chalk.white("Thinking Guides + Ralph Loop: Think first, verify after"));
|
|
219
|
+
// Pain point 2: Instructions ignored/forgotten → Sub-agents + per-agent spec injection
|
|
220
|
+
console.log(chalk.gray("✗ ") +
|
|
221
|
+
'"Wrote CLAUDE.md, AI ignored it. Reminded AI, it forgot 5 turns later."');
|
|
222
|
+
console.log(chalk.green(" ✓ ") +
|
|
223
|
+
chalk.white("Spec Injection: Rules enforced per task, not per chat"));
|
|
224
|
+
// Pain point 3: Missing connections → Cross-Layer Guide
|
|
225
|
+
console.log(chalk.gray("✗ ") + '"Code works but nothing connects..."');
|
|
226
|
+
console.log(chalk.green(" ✓ ") +
|
|
227
|
+
chalk.white("Cross-Layer Guide: Map data flow before coding"));
|
|
228
|
+
// Pain point 4: Code explosion → Plan Agent
|
|
229
|
+
console.log(chalk.gray("✗ ") + '"Asked for a button, got 9000 lines"');
|
|
230
|
+
console.log(chalk.green(" ✓ ") +
|
|
231
|
+
chalk.white("Plan Agent: Rejects and splits oversized tasks"));
|
|
232
|
+
console.log("");
|
|
233
|
+
}
|
|
254
234
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,kDAAkD;AAClD,WAAW;AACX,uBAAuB;AACvB,6BAA6B;AAC7B,yCAAyC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACL,YAAY,EACZ,SAAS,GAEV,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# Update Spec - Capture Knowledge into Specifications
|
|
2
|
+
|
|
3
|
+
When you learn something valuable (from debugging, implementing, or discussion), use this command to update the relevant spec documents.
|
|
4
|
+
|
|
5
|
+
**Timing**: After completing a task, fixing a bug, or discovering a new pattern
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## When to Update Specs
|
|
10
|
+
|
|
11
|
+
| Trigger | Example | Target Spec |
|
|
12
|
+
|---------|---------|-------------|
|
|
13
|
+
| **Fixed a bug** | Found a subtle issue with error handling | `backend/error-handling.md` |
|
|
14
|
+
| **Discovered a pattern** | Found a better way to structure code | Relevant guidelines file |
|
|
15
|
+
| **Hit a gotcha** | Learned that X must be done before Y | Relevant spec + "Common Mistakes" section |
|
|
16
|
+
| **Established a convention** | Team agreed on naming pattern | `quality-guidelines.md` |
|
|
17
|
+
| **Cross-layer insight** | Understood how data flows between layers | `guides/cross-layer-thinking-guide.md` |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Spec Structure Overview
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
.trellis/spec/
|
|
25
|
+
├── backend/ # Backend development standards
|
|
26
|
+
│ ├── index.md # Overview and links
|
|
27
|
+
│ └── *.md # Topic-specific guidelines
|
|
28
|
+
├── frontend/ # Frontend development standards
|
|
29
|
+
│ ├── index.md # Overview and links
|
|
30
|
+
│ └── *.md # Topic-specific guidelines
|
|
31
|
+
└── guides/ # Thinking guides
|
|
32
|
+
├── index.md # Guide index
|
|
33
|
+
└── *.md # Topic-specific guides
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Update Process
|
|
39
|
+
|
|
40
|
+
### Step 1: Identify What You Learned
|
|
41
|
+
|
|
42
|
+
Answer these questions:
|
|
43
|
+
|
|
44
|
+
1. **What did you learn?** (Be specific)
|
|
45
|
+
2. **Why is it important?** (What problem does it prevent?)
|
|
46
|
+
3. **Where does it belong?** (Which spec file?)
|
|
47
|
+
|
|
48
|
+
### Step 2: Classify the Update Type
|
|
49
|
+
|
|
50
|
+
| Type | Description | Action |
|
|
51
|
+
|------|-------------|--------|
|
|
52
|
+
| **New Pattern** | A reusable approach discovered | Add to "Patterns" section |
|
|
53
|
+
| **Forbidden Pattern** | Something that causes problems | Add to "Anti-patterns" or "Don't" section |
|
|
54
|
+
| **Common Mistake** | Easy-to-make error | Add to "Common Mistakes" section |
|
|
55
|
+
| **Convention** | Agreed-upon standard | Add to relevant section |
|
|
56
|
+
| **Gotcha** | Non-obvious behavior | Add warning callout |
|
|
57
|
+
|
|
58
|
+
### Step 3: Read the Target Spec
|
|
59
|
+
|
|
60
|
+
Before editing, read the current spec to:
|
|
61
|
+
- Understand existing structure
|
|
62
|
+
- Avoid duplicating content
|
|
63
|
+
- Find the right section for your update
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
cat .trellis/spec/<category>/<file>.md
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Step 4: Make the Update
|
|
70
|
+
|
|
71
|
+
Follow these principles:
|
|
72
|
+
|
|
73
|
+
1. **Be Specific**: Include concrete examples, not just abstract rules
|
|
74
|
+
2. **Explain Why**: State the problem this prevents
|
|
75
|
+
3. **Show Code**: Add code snippets for patterns
|
|
76
|
+
4. **Keep it Short**: One concept per section
|
|
77
|
+
|
|
78
|
+
### Step 5: Update the Index (if needed)
|
|
79
|
+
|
|
80
|
+
If you added a new section or the spec status changed, update the category's `index.md`.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Update Templates
|
|
85
|
+
|
|
86
|
+
### Adding a New Pattern
|
|
87
|
+
|
|
88
|
+
```markdown
|
|
89
|
+
### Pattern Name
|
|
90
|
+
|
|
91
|
+
**Problem**: What problem does this solve?
|
|
92
|
+
|
|
93
|
+
**Solution**: Brief description of the approach.
|
|
94
|
+
|
|
95
|
+
**Example**:
|
|
96
|
+
\`\`\`
|
|
97
|
+
// Good
|
|
98
|
+
code example
|
|
99
|
+
|
|
100
|
+
// Bad
|
|
101
|
+
code example
|
|
102
|
+
\`\`\`
|
|
103
|
+
|
|
104
|
+
**Why**: Explanation of why this works better.
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Adding a Forbidden Pattern
|
|
108
|
+
|
|
109
|
+
```markdown
|
|
110
|
+
### Don't: Pattern Name
|
|
111
|
+
|
|
112
|
+
**Problem**:
|
|
113
|
+
\`\`\`
|
|
114
|
+
// Don't do this
|
|
115
|
+
bad code example
|
|
116
|
+
\`\`\`
|
|
117
|
+
|
|
118
|
+
**Why it's bad**: Explanation of the issue.
|
|
119
|
+
|
|
120
|
+
**Instead**:
|
|
121
|
+
\`\`\`
|
|
122
|
+
// Do this instead
|
|
123
|
+
good code example
|
|
124
|
+
\`\`\`
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Adding a Common Mistake
|
|
128
|
+
|
|
129
|
+
```markdown
|
|
130
|
+
### Common Mistake: Description
|
|
131
|
+
|
|
132
|
+
**Symptom**: What goes wrong
|
|
133
|
+
|
|
134
|
+
**Cause**: Why this happens
|
|
135
|
+
|
|
136
|
+
**Fix**: How to correct it
|
|
137
|
+
|
|
138
|
+
**Prevention**: How to avoid it in the future
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Adding a Gotcha
|
|
142
|
+
|
|
143
|
+
```markdown
|
|
144
|
+
> **Warning**: Brief description of the non-obvious behavior.
|
|
145
|
+
>
|
|
146
|
+
> Details about when this happens and how to handle it.
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Interactive Mode
|
|
152
|
+
|
|
153
|
+
If you're unsure what to update, answer these prompts:
|
|
154
|
+
|
|
155
|
+
1. **What did you just finish?**
|
|
156
|
+
- [ ] Fixed a bug
|
|
157
|
+
- [ ] Implemented a feature
|
|
158
|
+
- [ ] Refactored code
|
|
159
|
+
- [ ] Had a discussion about approach
|
|
160
|
+
|
|
161
|
+
2. **What surprised you or was non-obvious?**
|
|
162
|
+
- (Describe the insight)
|
|
163
|
+
|
|
164
|
+
3. **Would this help someone else avoid the same problem?**
|
|
165
|
+
- Yes → Proceed to update spec
|
|
166
|
+
- No → Maybe not worth documenting
|
|
167
|
+
|
|
168
|
+
4. **Which area does it relate to?**
|
|
169
|
+
- [ ] Backend code
|
|
170
|
+
- [ ] Frontend code
|
|
171
|
+
- [ ] Cross-layer data flow
|
|
172
|
+
- [ ] Code organization/reuse
|
|
173
|
+
- [ ] Quality/testing
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Quality Checklist
|
|
178
|
+
|
|
179
|
+
Before finishing your spec update:
|
|
180
|
+
|
|
181
|
+
- [ ] Is the content specific and actionable?
|
|
182
|
+
- [ ] Did you include a code example?
|
|
183
|
+
- [ ] Did you explain WHY, not just WHAT?
|
|
184
|
+
- [ ] Is it in the right spec file?
|
|
185
|
+
- [ ] Does it duplicate existing content?
|
|
186
|
+
- [ ] Would a new team member understand it?
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Relationship to Other Commands
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
Development Flow:
|
|
194
|
+
Learn something → /update-spec → Knowledge captured
|
|
195
|
+
↑ ↓
|
|
196
|
+
/break-loop ←──────────────────── Future sessions benefit
|
|
197
|
+
(deep bug analysis)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
- `/break-loop` - Analyzes bugs deeply, often reveals spec updates needed
|
|
201
|
+
- `/update-spec` - Actually makes the updates (this command)
|
|
202
|
+
- `/finish-work` - Reminds you to check if specs need updates
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Core Philosophy
|
|
207
|
+
|
|
208
|
+
> **Specs are living documents. Every debugging session, every "aha moment" is an opportunity to make the spec better.**
|
|
209
|
+
|
|
210
|
+
The goal is **institutional memory**:
|
|
211
|
+
- What one person learns, everyone benefits from
|
|
212
|
+
- What AI learns in one session, persists to future sessions
|
|
213
|
+
- Mistakes become documented guardrails
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# Update Spec - Capture Knowledge into Specifications
|
|
2
|
+
|
|
3
|
+
When you learn something valuable (from debugging, implementing, or discussion), use this command to update the relevant spec documents.
|
|
4
|
+
|
|
5
|
+
**Timing**: After completing a task, fixing a bug, or discovering a new pattern
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## When to Update Specs
|
|
10
|
+
|
|
11
|
+
| Trigger | Example | Target Spec |
|
|
12
|
+
|---------|---------|-------------|
|
|
13
|
+
| **Fixed a bug** | Found a subtle issue with error handling | `backend/error-handling.md` |
|
|
14
|
+
| **Discovered a pattern** | Found a better way to structure code | Relevant guidelines file |
|
|
15
|
+
| **Hit a gotcha** | Learned that X must be done before Y | Relevant spec + "Common Mistakes" section |
|
|
16
|
+
| **Established a convention** | Team agreed on naming pattern | `quality-guidelines.md` |
|
|
17
|
+
| **Cross-layer insight** | Understood how data flows between layers | `guides/cross-layer-thinking-guide.md` |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Spec Structure Overview
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
.trellis/spec/
|
|
25
|
+
├── backend/ # Backend development standards
|
|
26
|
+
│ ├── index.md # Overview and links
|
|
27
|
+
│ └── *.md # Topic-specific guidelines
|
|
28
|
+
├── frontend/ # Frontend development standards
|
|
29
|
+
│ ├── index.md # Overview and links
|
|
30
|
+
│ └── *.md # Topic-specific guidelines
|
|
31
|
+
└── guides/ # Thinking guides
|
|
32
|
+
├── index.md # Guide index
|
|
33
|
+
└── *.md # Topic-specific guides
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Update Process
|
|
39
|
+
|
|
40
|
+
### Step 1: Identify What You Learned
|
|
41
|
+
|
|
42
|
+
Answer these questions:
|
|
43
|
+
|
|
44
|
+
1. **What did you learn?** (Be specific)
|
|
45
|
+
2. **Why is it important?** (What problem does it prevent?)
|
|
46
|
+
3. **Where does it belong?** (Which spec file?)
|
|
47
|
+
|
|
48
|
+
### Step 2: Classify the Update Type
|
|
49
|
+
|
|
50
|
+
| Type | Description | Action |
|
|
51
|
+
|------|-------------|--------|
|
|
52
|
+
| **New Pattern** | A reusable approach discovered | Add to "Patterns" section |
|
|
53
|
+
| **Forbidden Pattern** | Something that causes problems | Add to "Anti-patterns" or "Don't" section |
|
|
54
|
+
| **Common Mistake** | Easy-to-make error | Add to "Common Mistakes" section |
|
|
55
|
+
| **Convention** | Agreed-upon standard | Add to relevant section |
|
|
56
|
+
| **Gotcha** | Non-obvious behavior | Add warning callout |
|
|
57
|
+
|
|
58
|
+
### Step 3: Read the Target Spec
|
|
59
|
+
|
|
60
|
+
Before editing, read the current spec to:
|
|
61
|
+
- Understand existing structure
|
|
62
|
+
- Avoid duplicating content
|
|
63
|
+
- Find the right section for your update
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
cat .trellis/spec/<category>/<file>.md
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Step 4: Make the Update
|
|
70
|
+
|
|
71
|
+
Follow these principles:
|
|
72
|
+
|
|
73
|
+
1. **Be Specific**: Include concrete examples, not just abstract rules
|
|
74
|
+
2. **Explain Why**: State the problem this prevents
|
|
75
|
+
3. **Show Code**: Add code snippets for patterns
|
|
76
|
+
4. **Keep it Short**: One concept per section
|
|
77
|
+
|
|
78
|
+
### Step 5: Update the Index (if needed)
|
|
79
|
+
|
|
80
|
+
If you added a new section or the spec status changed, update the category's `index.md`.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Update Templates
|
|
85
|
+
|
|
86
|
+
### Adding a New Pattern
|
|
87
|
+
|
|
88
|
+
```markdown
|
|
89
|
+
### Pattern Name
|
|
90
|
+
|
|
91
|
+
**Problem**: What problem does this solve?
|
|
92
|
+
|
|
93
|
+
**Solution**: Brief description of the approach.
|
|
94
|
+
|
|
95
|
+
**Example**:
|
|
96
|
+
\`\`\`
|
|
97
|
+
// Good
|
|
98
|
+
code example
|
|
99
|
+
|
|
100
|
+
// Bad
|
|
101
|
+
code example
|
|
102
|
+
\`\`\`
|
|
103
|
+
|
|
104
|
+
**Why**: Explanation of why this works better.
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Adding a Forbidden Pattern
|
|
108
|
+
|
|
109
|
+
```markdown
|
|
110
|
+
### Don't: Pattern Name
|
|
111
|
+
|
|
112
|
+
**Problem**:
|
|
113
|
+
\`\`\`
|
|
114
|
+
// Don't do this
|
|
115
|
+
bad code example
|
|
116
|
+
\`\`\`
|
|
117
|
+
|
|
118
|
+
**Why it's bad**: Explanation of the issue.
|
|
119
|
+
|
|
120
|
+
**Instead**:
|
|
121
|
+
\`\`\`
|
|
122
|
+
// Do this instead
|
|
123
|
+
good code example
|
|
124
|
+
\`\`\`
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Adding a Common Mistake
|
|
128
|
+
|
|
129
|
+
```markdown
|
|
130
|
+
### Common Mistake: Description
|
|
131
|
+
|
|
132
|
+
**Symptom**: What goes wrong
|
|
133
|
+
|
|
134
|
+
**Cause**: Why this happens
|
|
135
|
+
|
|
136
|
+
**Fix**: How to correct it
|
|
137
|
+
|
|
138
|
+
**Prevention**: How to avoid it in the future
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Adding a Gotcha
|
|
142
|
+
|
|
143
|
+
```markdown
|
|
144
|
+
> **Warning**: Brief description of the non-obvious behavior.
|
|
145
|
+
>
|
|
146
|
+
> Details about when this happens and how to handle it.
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Interactive Mode
|
|
152
|
+
|
|
153
|
+
If you're unsure what to update, answer these prompts:
|
|
154
|
+
|
|
155
|
+
1. **What did you just finish?**
|
|
156
|
+
- [ ] Fixed a bug
|
|
157
|
+
- [ ] Implemented a feature
|
|
158
|
+
- [ ] Refactored code
|
|
159
|
+
- [ ] Had a discussion about approach
|
|
160
|
+
|
|
161
|
+
2. **What surprised you or was non-obvious?**
|
|
162
|
+
- (Describe the insight)
|
|
163
|
+
|
|
164
|
+
3. **Would this help someone else avoid the same problem?**
|
|
165
|
+
- Yes → Proceed to update spec
|
|
166
|
+
- No → Maybe not worth documenting
|
|
167
|
+
|
|
168
|
+
4. **Which area does it relate to?**
|
|
169
|
+
- [ ] Backend code
|
|
170
|
+
- [ ] Frontend code
|
|
171
|
+
- [ ] Cross-layer data flow
|
|
172
|
+
- [ ] Code organization/reuse
|
|
173
|
+
- [ ] Quality/testing
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Quality Checklist
|
|
178
|
+
|
|
179
|
+
Before finishing your spec update:
|
|
180
|
+
|
|
181
|
+
- [ ] Is the content specific and actionable?
|
|
182
|
+
- [ ] Did you include a code example?
|
|
183
|
+
- [ ] Did you explain WHY, not just WHAT?
|
|
184
|
+
- [ ] Is it in the right spec file?
|
|
185
|
+
- [ ] Does it duplicate existing content?
|
|
186
|
+
- [ ] Would a new team member understand it?
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Relationship to Other Commands
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
Development Flow:
|
|
194
|
+
Learn something → /update-spec → Knowledge captured
|
|
195
|
+
↑ ↓
|
|
196
|
+
/break-loop ←──────────────────── Future sessions benefit
|
|
197
|
+
(deep bug analysis)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
- `/break-loop` - Analyzes bugs deeply, often reveals spec updates needed
|
|
201
|
+
- `/update-spec` - Actually makes the updates (this command)
|
|
202
|
+
- `/finish-work` - Reminds you to check if specs need updates
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Core Philosophy
|
|
207
|
+
|
|
208
|
+
> **Specs are living documents. Every debugging session, every "aha moment" is an opportunity to make the spec better.**
|
|
209
|
+
|
|
210
|
+
The goal is **institutional memory**:
|
|
211
|
+
- What one person learns, everyone benefits from
|
|
212
|
+
- What AI learns in one session, persists to future sessions
|
|
213
|
+
- Mistakes become documented guardrails
|
package/package.json
CHANGED