@arvorco/relentless 0.1.22 → 0.1.25
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.
|
@@ -7,6 +7,11 @@ description: "Execute implementation workflow phase by phase. Use after analysis
|
|
|
7
7
|
|
|
8
8
|
Guide systematic implementation of features using TDD and quality-first approach.
|
|
9
9
|
|
|
10
|
+
> **Note:** This skill uses generic placeholders. Adapt commands and paths to your project:
|
|
11
|
+
> - Quality commands: Check your `package.json`, `Makefile`, or build config
|
|
12
|
+
> - File paths: Adjust based on your project structure
|
|
13
|
+
> - Examples show common conventions - your project may differ
|
|
14
|
+
|
|
10
15
|
---
|
|
11
16
|
|
|
12
17
|
## The Job
|
|
@@ -17,27 +22,32 @@ Implement user stories one at a time, following strict TDD and updating all trac
|
|
|
17
22
|
|
|
18
23
|
## Before You Start
|
|
19
24
|
|
|
20
|
-
1. **Read the Constitution** - Review
|
|
21
|
-
2. **Read prompt.md** - Review
|
|
25
|
+
1. **Read the Constitution** - Review your project's constitution (if exists) for governance principles
|
|
26
|
+
2. **Read prompt.md** - Review workflow guidelines (if exists)
|
|
22
27
|
3. **Read progress.txt** - Check learnings from previous iterations
|
|
23
28
|
4. **Review artifacts** - Ensure spec.md, plan.md, tasks.md, checklist.md exist
|
|
24
|
-
5. **
|
|
29
|
+
5. **Identify Quality Commands** - Find your project's typecheck, lint, and test commands
|
|
25
30
|
|
|
26
31
|
---
|
|
27
32
|
|
|
28
33
|
## CRITICAL: Quality Gates (Non-Negotiable)
|
|
29
34
|
|
|
30
|
-
Before marking ANY story as complete, ALL checks must pass
|
|
35
|
+
Before marking ANY story as complete, ALL quality checks must pass.
|
|
36
|
+
|
|
37
|
+
**Find your project's commands** (examples for different ecosystems):
|
|
31
38
|
|
|
32
39
|
```bash
|
|
33
|
-
# TypeScript
|
|
34
|
-
|
|
40
|
+
# JavaScript/TypeScript (npm/yarn/bun/pnpm):
|
|
41
|
+
npm run typecheck && npm run lint && npm test
|
|
35
42
|
|
|
36
|
-
#
|
|
37
|
-
|
|
43
|
+
# Python:
|
|
44
|
+
mypy . && ruff check . && pytest
|
|
38
45
|
|
|
39
|
-
#
|
|
40
|
-
|
|
46
|
+
# Go:
|
|
47
|
+
go build ./... && golangci-lint run && go test ./...
|
|
48
|
+
|
|
49
|
+
# Rust:
|
|
50
|
+
cargo check && cargo clippy && cargo test
|
|
41
51
|
```
|
|
42
52
|
|
|
43
53
|
**If ANY check fails, DO NOT mark the story as complete. Fix the issues first.**
|
|
@@ -52,19 +62,19 @@ For EVERY story, follow strict Test-Driven Development:
|
|
|
52
62
|
```bash
|
|
53
63
|
# Create test file if needed
|
|
54
64
|
# Write tests that define expected behavior
|
|
55
|
-
|
|
65
|
+
# Run your test command - tests MUST fail initially
|
|
56
66
|
```
|
|
57
67
|
|
|
58
68
|
### Step 2: Implement Minimum Code (GREEN)
|
|
59
69
|
```bash
|
|
60
70
|
# Write only enough code to pass tests
|
|
61
|
-
|
|
71
|
+
# Run tests - they MUST pass now
|
|
62
72
|
```
|
|
63
73
|
|
|
64
74
|
### Step 3: Refactor
|
|
65
75
|
```bash
|
|
66
76
|
# Clean up while keeping tests green
|
|
67
|
-
|
|
77
|
+
# Run tests - they MUST still pass
|
|
68
78
|
```
|
|
69
79
|
|
|
70
80
|
**Do NOT skip TDD. Tests are contracts that validate your implementation.**
|
|
@@ -83,7 +93,7 @@ For each story (in dependency order):
|
|
|
83
93
|
### 2. Find Relevant Checklist Items
|
|
84
94
|
- Open `checklist.md`
|
|
85
95
|
- Find items tagged with `[US-XXX]` for this story
|
|
86
|
-
- Note
|
|
96
|
+
- Note any governance/compliance items
|
|
87
97
|
|
|
88
98
|
### 3. Implement with TDD
|
|
89
99
|
Follow the TDD workflow above for each acceptance criterion.
|
|
@@ -110,9 +120,8 @@ For each verified checklist item:
|
|
|
110
120
|
|
|
111
121
|
### 6. Run Quality Checks
|
|
112
122
|
```bash
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
bun test # All tests must pass
|
|
123
|
+
# Run your project's quality commands
|
|
124
|
+
# All must pass with 0 errors/warnings
|
|
116
125
|
```
|
|
117
126
|
|
|
118
127
|
### 7. Commit Changes
|
|
@@ -142,18 +151,15 @@ Append progress entry:
|
|
|
142
151
|
- Key decisions made
|
|
143
152
|
|
|
144
153
|
**Files Changed:**
|
|
145
|
-
- path/to/file
|
|
154
|
+
- path/to/file (new/modified)
|
|
146
155
|
|
|
147
156
|
**Tests Added:**
|
|
148
|
-
- path/to/
|
|
157
|
+
- path/to/test.file
|
|
149
158
|
|
|
150
159
|
**Learnings:**
|
|
151
160
|
- Patterns discovered
|
|
152
161
|
- Gotchas encountered
|
|
153
162
|
|
|
154
|
-
**Constitution Compliance:**
|
|
155
|
-
- Principle N: How it was followed
|
|
156
|
-
|
|
157
163
|
---
|
|
158
164
|
```
|
|
159
165
|
|
|
@@ -165,23 +171,23 @@ Append progress entry:
|
|
|
165
171
|
**Current:** US-001: Test Infrastructure Setup
|
|
166
172
|
|
|
167
173
|
**Acceptance Criteria:**
|
|
168
|
-
- [ ]
|
|
169
|
-
- [ ] Test files
|
|
170
|
-
- [ ]
|
|
171
|
-
- [ ]
|
|
172
|
-
- [ ]
|
|
174
|
+
- [ ] Test command runs successfully
|
|
175
|
+
- [ ] Test files are auto-discovered
|
|
176
|
+
- [ ] Coverage report available
|
|
177
|
+
- [ ] Type checking passes
|
|
178
|
+
- [ ] Linting passes
|
|
173
179
|
|
|
174
180
|
**Relevant Checklist Items:**
|
|
175
|
-
- [ ] CHK-001 [US-001]
|
|
176
|
-
- [ ] CHK-002 [US-001] Test files
|
|
177
|
-
- [ ] CHK-007
|
|
181
|
+
- [ ] CHK-001 [US-001] Test command executes successfully
|
|
182
|
+
- [ ] CHK-002 [US-001] Test files are auto-discovered
|
|
183
|
+
- [ ] CHK-007 Tests written BEFORE implementation
|
|
178
184
|
|
|
179
185
|
**Implementation Steps:**
|
|
180
186
|
1. Write a simple failing test first
|
|
181
|
-
2. Configure
|
|
187
|
+
2. Configure test runner for your project
|
|
182
188
|
3. Verify test discovery works
|
|
183
|
-
4. Run
|
|
184
|
-
5. Run
|
|
189
|
+
4. Run type checking - must pass
|
|
190
|
+
5. Run linting - must pass with 0 warnings
|
|
185
191
|
6. Update tasks.md - check off completed criteria
|
|
186
192
|
7. Update checklist.md - mark verified items
|
|
187
193
|
8. Commit: "feat: US-001 - Test Infrastructure Setup"
|
|
@@ -238,5 +244,4 @@ After completing each story, these files MUST be updated:
|
|
|
238
244
|
|
|
239
245
|
---
|
|
240
246
|
|
|
241
|
-
*
|
|
242
|
-
*Reference: See `relentless/constitution.md` for project principles*
|
|
247
|
+
*Adapt all commands and paths to your project's specific setup*
|
|
@@ -237,18 +237,21 @@ After creating relentless/prd.json, run the orchestrator:
|
|
|
237
237
|
|
|
238
238
|
```bash
|
|
239
239
|
# With Claude Code (default)
|
|
240
|
-
|
|
240
|
+
relentless run --feature <feature-name>
|
|
241
241
|
|
|
242
242
|
# With a specific agent
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
243
|
+
relentless run --feature <feature-name> --agent amp
|
|
244
|
+
relentless run --feature <feature-name> --agent codex
|
|
245
|
+
relentless run --feature <feature-name> --agent gemini
|
|
246
246
|
|
|
247
247
|
# Smart routing (auto-select best agent per story)
|
|
248
|
-
|
|
248
|
+
relentless run --feature <feature-name> --agent auto
|
|
249
249
|
|
|
250
250
|
# Custom max iterations
|
|
251
|
-
|
|
251
|
+
relentless run --feature <feature-name> --max-iterations 30
|
|
252
|
+
|
|
253
|
+
# With TUI interface
|
|
254
|
+
relentless run --feature <feature-name> --tui
|
|
252
255
|
```
|
|
253
256
|
|
|
254
257
|
---
|
package/package.json
CHANGED
package/src/config/loader.ts
CHANGED
|
@@ -141,6 +141,7 @@ export function parseConstitution(content: string): Constitution {
|
|
|
141
141
|
const sections = new Set<string>();
|
|
142
142
|
|
|
143
143
|
let currentSection = "";
|
|
144
|
+
let currentLevel: PrincipleLevel | null = null;
|
|
144
145
|
const lines = content.split("\n");
|
|
145
146
|
|
|
146
147
|
for (const line of lines) {
|
|
@@ -148,12 +149,37 @@ export function parseConstitution(content: string): Constitution {
|
|
|
148
149
|
if (line.startsWith("## ")) {
|
|
149
150
|
currentSection = line.replace("## ", "").trim();
|
|
150
151
|
sections.add(currentSection);
|
|
152
|
+
currentLevel = null;
|
|
151
153
|
} else if (line.startsWith("### ")) {
|
|
152
154
|
currentSection = line.replace("### ", "").trim();
|
|
153
155
|
sections.add(currentSection);
|
|
156
|
+
currentLevel = null;
|
|
154
157
|
}
|
|
155
158
|
|
|
156
|
-
//
|
|
159
|
+
// Detect MUST/SHOULD headers (format: **MUST:** or **SHOULD:**)
|
|
160
|
+
if (line.match(/^\*\*MUST:?\*\*:?\s*$/i)) {
|
|
161
|
+
currentLevel = "MUST";
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (line.match(/^\*\*SHOULD:?\*\*:?\s*$/i)) {
|
|
165
|
+
currentLevel = "SHOULD";
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Extract bullet points under current level
|
|
170
|
+
if (currentLevel && line.match(/^-\s+.+/)) {
|
|
171
|
+
const text = line.replace(/^-\s+/, "").trim();
|
|
172
|
+
if (text) {
|
|
173
|
+
principles.push({
|
|
174
|
+
level: currentLevel,
|
|
175
|
+
text,
|
|
176
|
+
section: currentSection,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Extract inline MUST/SHOULD (format: **MUST** text or **SHOULD** text)
|
|
157
183
|
const mustMatch = line.match(/\*\*MUST\*\*\s+(.+)/);
|
|
158
184
|
if (mustMatch) {
|
|
159
185
|
principles.push({
|
|
@@ -163,7 +189,6 @@ export function parseConstitution(content: string): Constitution {
|
|
|
163
189
|
});
|
|
164
190
|
}
|
|
165
191
|
|
|
166
|
-
// Extract SHOULD principles
|
|
167
192
|
const shouldMatch = line.match(/\*\*SHOULD\*\*\s+(.+)/);
|
|
168
193
|
if (shouldMatch) {
|
|
169
194
|
principles.push({
|
|
@@ -172,6 +197,11 @@ export function parseConstitution(content: string): Constitution {
|
|
|
172
197
|
section: currentSection,
|
|
173
198
|
});
|
|
174
199
|
}
|
|
200
|
+
|
|
201
|
+
// Reset level on empty line or **Rationale** or other header
|
|
202
|
+
if (line.trim() === "" || line.match(/^\*\*[^MS]/)) {
|
|
203
|
+
currentLevel = null;
|
|
204
|
+
}
|
|
175
205
|
}
|
|
176
206
|
|
|
177
207
|
return {
|