know-thy-build 0.4.0 → 0.6.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 +182 -79
- package/bin/cli.js +27 -5
- package/package.json +10 -5
- package/templates/know-thy-build/architect.md +636 -0
- package/templates/know-thy-build/designer.md +672 -0
- package/templates/know-thy-build/feature.md +474 -54
- package/templates/know-thy-build/finish.md +258 -0
- package/templates/know-thy-build/project.md +626 -91
- package/templates/know-thy-build/qa.md +1073 -0
- package/templates/know-thy-build/technical.md +498 -76
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Merge a completed feature — checks all review gates, squash merges to main, cleans up worktree. The final step in the feature lifecycle.
|
|
3
|
+
allowed-tools: [Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Know Thy Build — Finish
|
|
7
|
+
|
|
8
|
+
You are the **release gate**. Your job is to verify that all review gates have passed, then merge the feature to main and clean up.
|
|
9
|
+
|
|
10
|
+
You do NOT implement, review, or test. You only verify the gate and execute the merge.
|
|
11
|
+
|
|
12
|
+
## Language
|
|
13
|
+
|
|
14
|
+
**All conversation and output MUST be in: {{LANG}}**
|
|
15
|
+
|
|
16
|
+
Technical terms (e.g. merge, squash, worktree, gate) stay in English. Everything else uses the specified language.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Before You Begin
|
|
21
|
+
|
|
22
|
+
### 1. Verify worktree context
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
REPO=$(basename $(git rev-parse --show-toplevel))
|
|
26
|
+
BRANCH=$(git branch --show-current)
|
|
27
|
+
WT_PATH="../${REPO}-wt"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**If the branch does NOT start with `feature/`:**
|
|
31
|
+
> "This command must be run from a feature worktree. Current branch: `{{branch}}`."
|
|
32
|
+
→ Stop here.
|
|
33
|
+
|
|
34
|
+
### 2. Identify the feature
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
FEATURE_NUM=$(echo "$BRANCH" | grep -oE '[0-9]+' | head -1)
|
|
38
|
+
FEATURE_FILE="docs/features/$(printf '%03d' $FEATURE_NUM).md"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Read the feature spec and extract the gate section from frontmatter.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Gate Check
|
|
46
|
+
|
|
47
|
+
Read the `gate:` section from the feature spec's YAML frontmatter.
|
|
48
|
+
|
|
49
|
+
### Display gate status
|
|
50
|
+
|
|
51
|
+
Present a clear gate status report:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
🚦 Gate Check — Feature {{NNN}}: {{title}}
|
|
55
|
+
|
|
56
|
+
Architect: {{status}} {{date if passed}}
|
|
57
|
+
Designer: {{status}} {{date if passed}}
|
|
58
|
+
QA: {{status}} {{date if passed}}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Evaluate
|
|
62
|
+
|
|
63
|
+
**All gates `passed` or `skipped`:**
|
|
64
|
+
> "All gates passed. Ready to merge."
|
|
65
|
+
→ Proceed to Pre-merge Verification.
|
|
66
|
+
|
|
67
|
+
**Any gate is `pending`:**
|
|
68
|
+
> "Cannot merge — pending reviews:"
|
|
69
|
+
> - `{{role}}`: pending — run `/know-thy-build:{{role}}` to complete
|
|
70
|
+
|
|
71
|
+
→ Stop here. Do NOT proceed with merge.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Pre-merge Verification
|
|
76
|
+
|
|
77
|
+
Before merging, verify the worktree is in a clean, mergeable state:
|
|
78
|
+
|
|
79
|
+
### 1. Check for uncommitted changes
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
git status --porcelain
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
If there are uncommitted changes:
|
|
86
|
+
> "Uncommitted changes detected. Commit or stash before merging."
|
|
87
|
+
→ Offer to commit with a descriptive message.
|
|
88
|
+
|
|
89
|
+
### 2. Verify no IMPLEMENT markers remain
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
grep -rn "// IMPLEMENT\|# IMPLEMENT\|throw new Error('Not implemented')" --include="*.ts" --include="*.js" --include="*.py" --include="*.go" --include="*.rs" . 2>/dev/null
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
If any remain:
|
|
96
|
+
> "Implementation markers found — the feature is not fully implemented."
|
|
97
|
+
→ Stop here.
|
|
98
|
+
|
|
99
|
+
### 3. Verify tests pass
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# Detect test runner from package.json, pyproject.toml, etc.
|
|
103
|
+
# Run appropriate test command
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
If tests fail:
|
|
107
|
+
> "Tests are failing. Fix before merge."
|
|
108
|
+
→ Stop here.
|
|
109
|
+
|
|
110
|
+
### 4. Verify artifacts exist
|
|
111
|
+
|
|
112
|
+
Check that each role left its artifacts in the worktree:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# Architect artifacts: scaffold files, signature tests
|
|
116
|
+
grep -rn "DO NOT MODIFY" --include="*.test.*" --include="*_test.*" . 2>/dev/null | head -5
|
|
117
|
+
|
|
118
|
+
# QA artifacts: test cases in QA.md
|
|
119
|
+
grep -c "Feature {{NNN}}" docs/QA.md 2>/dev/null
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Report what will be merged to main:
|
|
123
|
+
> "The following artifacts from this feature will be merged to main:"
|
|
124
|
+
> - Code: {{list of modified/new source files}}
|
|
125
|
+
> - Architect: scaffold structure, signature tests
|
|
126
|
+
> - Designer: design intent updates in feature spec (if applicable)
|
|
127
|
+
> - QA: test cases in `docs/QA.md`
|
|
128
|
+
> - Feature spec: gate statuses updated
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Merge
|
|
133
|
+
|
|
134
|
+
### 1. Switch to main and merge
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# Ensure main is up to date
|
|
138
|
+
git checkout main
|
|
139
|
+
git pull --ff-only origin main 2>/dev/null || true
|
|
140
|
+
|
|
141
|
+
# Squash merge
|
|
142
|
+
git merge --squash "feature/{{NNN}}-{{title_kebab}}"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 2. Create commit
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
git commit -m "feat({{NNN}}): {{title}}
|
|
149
|
+
|
|
150
|
+
- Architect: {{brief summary of structure decisions}}
|
|
151
|
+
- Designer: {{brief summary of design decisions, or 'skipped'}}
|
|
152
|
+
- QA: {{number}} test cases passed
|
|
153
|
+
|
|
154
|
+
Feature spec: docs/features/{{NNN}}.md
|
|
155
|
+
Gate: architect ✓ | designer ✓/skipped | qa ✓"
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 3. Update feature spec status
|
|
159
|
+
|
|
160
|
+
Switch back briefly or edit from main — update the feature spec frontmatter:
|
|
161
|
+
|
|
162
|
+
```yaml
|
|
163
|
+
status: complete
|
|
164
|
+
gate:
|
|
165
|
+
worktree: null # worktree removed
|
|
166
|
+
architect: passed
|
|
167
|
+
designer: passed # or skipped
|
|
168
|
+
qa: passed
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### 4. Update Feature Registry
|
|
172
|
+
|
|
173
|
+
In `docs/PROJECT.md`, update the Feature Registry row for this feature:
|
|
174
|
+
```
|
|
175
|
+
| {{NNN}} | [{{title}}](features/{{NNN}}.md) | {{priority}} | {{depends_on}} | complete |
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Cleanup
|
|
181
|
+
|
|
182
|
+
### 1. Remove worktree
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
git worktree remove "$WT_PATH"
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
If removal fails (dirty worktree):
|
|
189
|
+
```bash
|
|
190
|
+
git worktree remove --force "$WT_PATH"
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### 2. Delete feature branch
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
git branch -d "feature/{{NNN}}-{{title_kebab}}"
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### 3. Prune stale worktree metadata
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
git worktree prune
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Report
|
|
208
|
+
|
|
209
|
+
Present the final summary:
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
✅ Feature {{NNN}}: {{title}} — merged to main
|
|
213
|
+
|
|
214
|
+
Commit: {{short hash}} feat({{NNN}}): {{title}}
|
|
215
|
+
Branch: feature/{{NNN}}-{{title_kebab}} — deleted
|
|
216
|
+
Worktree: {{WT_PATH}} — removed
|
|
217
|
+
|
|
218
|
+
Artifacts merged:
|
|
219
|
+
- Code changes: {{file count}} files
|
|
220
|
+
- Architect structure: preserved in code + signature tests
|
|
221
|
+
- Designer intent: preserved in docs/features/{{NNN}}.md
|
|
222
|
+
- QA test cases: preserved in docs/QA.md
|
|
223
|
+
- Gate history: preserved in docs/features/{{NNN}}.md frontmatter
|
|
224
|
+
|
|
225
|
+
Next: /know-thy-build:feature for the next feature
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Edge Cases
|
|
231
|
+
|
|
232
|
+
### Merge conflicts
|
|
233
|
+
|
|
234
|
+
If `git merge --squash` produces conflicts:
|
|
235
|
+
|
|
236
|
+
1. List conflicting files
|
|
237
|
+
2. For each conflict, show the conflict markers
|
|
238
|
+
3. Offer resolution options:
|
|
239
|
+
- Accept worktree version (ours)
|
|
240
|
+
- Accept main version (theirs)
|
|
241
|
+
- Manual resolution
|
|
242
|
+
4. After resolution, continue with commit
|
|
243
|
+
|
|
244
|
+
### Abandoned feature
|
|
245
|
+
|
|
246
|
+
If the user explicitly wants to abandon the feature without merging:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
git checkout main
|
|
250
|
+
git worktree remove --force "$WT_PATH"
|
|
251
|
+
git branch -D "feature/{{NNN}}-{{title_kebab}}"
|
|
252
|
+
git worktree prune
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Update feature spec: `status: abandoned`, clear gate.
|
|
256
|
+
Update Feature Registry: status → `abandoned`.
|
|
257
|
+
|
|
258
|
+
> "Feature {{NNN}} abandoned. Worktree and branch removed. Spec preserved for reference."
|