devlyn-cli 1.7.3 → 1.8.1
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/CLAUDE.md +20 -0
- package/README.md +23 -2
- package/config/skills/devlyn:preflight/SKILL.md +355 -0
- package/config/skills/devlyn:preflight/references/auditors/browser-auditor.md +32 -0
- package/config/skills/devlyn:preflight/references/auditors/code-auditor.md +77 -0
- package/config/skills/devlyn:preflight/references/auditors/docs-auditor.md +38 -0
- package/package.json +1 -1
package/CLAUDE.md
CHANGED
|
@@ -68,6 +68,26 @@ Optional flags:
|
|
|
68
68
|
- `--skip-docs` — skip update-docs phase
|
|
69
69
|
- `--with-codex [evaluate|review|both]` — use OpenAI Codex as cross-model evaluator/reviewer (requires codex-mcp-server)
|
|
70
70
|
|
|
71
|
+
## Preflight Check (Post-Roadmap Verification)
|
|
72
|
+
|
|
73
|
+
After completing a roadmap (or a phase), verify that everything was actually implemented correctly:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
/devlyn:preflight
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This reads every commitment from VISION.md, ROADMAP.md, and item specs, then audits the codebase evidence-based. Finds: missing features, incomplete implementations, spec divergence, bugs, stale documentation. Also checks in the browser for web projects.
|
|
80
|
+
|
|
81
|
+
Output: `.devlyn/PREFLIGHT-REPORT.md` with categorized findings (MISSING, INCOMPLETE, DIVERGENT, BROKEN, STALE_DOC). Confirmed gaps can be promoted to new roadmap items for auto-resolve.
|
|
82
|
+
|
|
83
|
+
Optional flags:
|
|
84
|
+
- `--phase N` — audit only phase N items
|
|
85
|
+
- `--autofix` — auto-promote CRITICAL/HIGH findings and run auto-resolve
|
|
86
|
+
- `--skip-browser` — skip browser validation
|
|
87
|
+
- `--skip-docs` — skip documentation audit
|
|
88
|
+
|
|
89
|
+
**Recommended workflow**: `/devlyn:ideate` → `/devlyn:auto-resolve` (repeat) → `/devlyn:preflight` → fix gaps → `/devlyn:preflight` (verify)
|
|
90
|
+
|
|
71
91
|
## Manual Pipeline (Step-by-Step Control)
|
|
72
92
|
|
|
73
93
|
When you want to run each step yourself with review between phases:
|
package/README.md
CHANGED
|
@@ -31,12 +31,12 @@ That's it. The interactive installer handles everything. Run it again anytime to
|
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
-
## How It Works —
|
|
34
|
+
## How It Works — Three Steps, Full Cycle
|
|
35
35
|
|
|
36
36
|
devlyn-cli turns Claude Code into an autonomous development pipeline. The core loop is simple:
|
|
37
37
|
|
|
38
38
|
```
|
|
39
|
-
ideate → auto-resolve →
|
|
39
|
+
ideate → auto-resolve → preflight → fix gaps → ship
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
### Step 1 — Plan with `/devlyn:ideate`
|
|
@@ -78,6 +78,26 @@ Build → Browser Test → Evaluate → Fix Loop → Simplify → Review → Sec
|
|
|
78
78
|
|
|
79
79
|
Skip phases you don't need: `--skip-browser`, `--skip-review`, `--skip-clean`, `--skip-docs`, `--max-rounds 6`
|
|
80
80
|
|
|
81
|
+
### Step 3 — Verify with `/devlyn:preflight`
|
|
82
|
+
|
|
83
|
+
After implementing all roadmap items, run a final alignment check:
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
/devlyn:preflight
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Reads every commitment from your vision, roadmap, and item specs, then audits the codebase evidence-based. Catches what you missed:
|
|
90
|
+
|
|
91
|
+
| Category | What It Finds |
|
|
92
|
+
|---|---|
|
|
93
|
+
| `MISSING` | In roadmap but not implemented |
|
|
94
|
+
| `INCOMPLETE` | Started but unfinished |
|
|
95
|
+
| `DIVERGENT` | Implemented differently than spec |
|
|
96
|
+
| `BROKEN` | Has a bug preventing it from working |
|
|
97
|
+
| `STALE_DOC` | Docs don't match current code |
|
|
98
|
+
|
|
99
|
+
Confirmed gaps become new roadmap items — feed them back into auto-resolve. Use `--autofix` to do this automatically, or `--phase 2` to check only one phase.
|
|
100
|
+
|
|
81
101
|
### Bonus — Dual-Model Mode with Codex
|
|
82
102
|
|
|
83
103
|
Install the Codex MCP server during setup, then:
|
|
@@ -127,6 +147,7 @@ When you want step-by-step control instead of the full pipeline.
|
|
|
127
147
|
|
|
128
148
|
| Command | What It Does |
|
|
129
149
|
|---|---|
|
|
150
|
+
| `/devlyn:preflight` | Verify codebase matches vision/roadmap — gap analysis with evidence |
|
|
130
151
|
| `/devlyn:product-spec` | Generate or update product specs |
|
|
131
152
|
| `/devlyn:feature-spec` | Turn product spec → implementable feature spec |
|
|
132
153
|
| `/devlyn:discover-product` | Scan codebase → auto-generate product docs |
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devlyn:preflight
|
|
3
|
+
description: >
|
|
4
|
+
Final alignment check between vision/roadmap documents and the actual codebase — the last step
|
|
5
|
+
before declaring a roadmap phase complete. Reads every commitment from VISION.md, ROADMAP.md,
|
|
6
|
+
and item specs, then audits the implementation with evidence-based analysis citing file:line
|
|
7
|
+
for every finding. Catches missing features, incomplete implementations, spec divergence, bugs,
|
|
8
|
+
and documentation drift. Also validates in the browser for web projects and checks documentation
|
|
9
|
+
alignment. Use when the user has finished implementing a roadmap and wants to verify nothing was
|
|
10
|
+
missed. Triggers on "preflight", "preflight check", "gap analysis", "gap check", "did I miss
|
|
11
|
+
anything", "check against the roadmap", "verify implementation", "alignment check", "are we done",
|
|
12
|
+
"final check before shipping", or when the user says they've finished implementing and wants
|
|
13
|
+
verification. This is different from /devlyn:evaluate (which grades a single changeset) and
|
|
14
|
+
/devlyn:review (which reviews code quality) — preflight audits the ENTIRE project against its
|
|
15
|
+
planning documents holistically.
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Vision-to-Implementation Preflight Check
|
|
19
|
+
|
|
20
|
+
The final gate before you declare "done." Read every promise the planning documents made, then verify each one against the actual codebase — evidence-based, no guessing.
|
|
21
|
+
|
|
22
|
+
<preflight_config>
|
|
23
|
+
$ARGUMENTS
|
|
24
|
+
</preflight_config>
|
|
25
|
+
|
|
26
|
+
<why_this_matters>
|
|
27
|
+
After implementing a full roadmap, gaps are almost inevitable. Features get partially implemented, edge cases from specs get skipped, implementations drift from the original design, and docs fall out of sync. These gaps compound — a missing integration here, a forgotten error state there — until the shipped product doesn't match the vision.
|
|
28
|
+
|
|
29
|
+
This skill catches those gaps systematically, before users do. The difference between "we built everything on the list" and "we actually delivered what we promised."
|
|
30
|
+
</why_this_matters>
|
|
31
|
+
|
|
32
|
+
<evidence_standard>
|
|
33
|
+
Every finding must cite evidence: file:line for code, specific doc section for documentation, screenshot for browser issues. A finding without evidence is speculation — exclude it.
|
|
34
|
+
|
|
35
|
+
The corollary: if you search thoroughly and can't find evidence that something exists, that IS evidence it's missing. "Searched for X across src/ and found no implementation" is a valid, evidence-based finding.
|
|
36
|
+
|
|
37
|
+
This matters because the report feeds into auto-resolve. Vague findings produce vague fixes.
|
|
38
|
+
</evidence_standard>
|
|
39
|
+
|
|
40
|
+
## Flags
|
|
41
|
+
|
|
42
|
+
Parse from `<preflight_config>`:
|
|
43
|
+
- `--phase N` — audit only phase N items (default: all phases)
|
|
44
|
+
- `--autofix` — auto-promote all findings to roadmap items and run auto-resolve on each
|
|
45
|
+
- `--skip-browser` — skip browser validation
|
|
46
|
+
- `--skip-docs` — skip documentation audit
|
|
47
|
+
|
|
48
|
+
Example: `/devlyn:preflight --phase 2 --skip-browser`
|
|
49
|
+
|
|
50
|
+
## PHASE 0: DISCOVER & SCOPE
|
|
51
|
+
|
|
52
|
+
1. **Find planning documents** — search in parallel:
|
|
53
|
+
- `docs/VISION.md`
|
|
54
|
+
- `docs/ROADMAP.md`
|
|
55
|
+
- `docs/roadmap/` directory (item specs)
|
|
56
|
+
- If none found, stop clearly: "No vision/roadmap documents found. Run `/devlyn:ideate` first to create them."
|
|
57
|
+
|
|
58
|
+
2. **Determine scope**:
|
|
59
|
+
- If `--phase N` specified → only read specs in `docs/roadmap/phase-N/`
|
|
60
|
+
- Otherwise → read all phases
|
|
61
|
+
- Read `docs/roadmap/backlog/` to identify deferred items (excluded from audit)
|
|
62
|
+
|
|
63
|
+
3. **Check for prior state**:
|
|
64
|
+
- If `.devlyn/PREFLIGHT-REPORT.md` exists from a previous run → note it for delta comparison in PHASE 4
|
|
65
|
+
- If `.devlyn/preflight-accepted.md` exists → load accepted divergences to filter in PHASE 4
|
|
66
|
+
|
|
67
|
+
4. **Announce**:
|
|
68
|
+
```
|
|
69
|
+
Preflight check starting
|
|
70
|
+
Scope: [Phase N / All phases]
|
|
71
|
+
Documents: VISION.md, ROADMAP.md, [N] item specs
|
|
72
|
+
Deferred items (excluded): [N]
|
|
73
|
+
Previous run: [found — will show delta / none]
|
|
74
|
+
Phases: Extract → Audit → [Browser] → [Docs] → Report → Triage
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## PHASE 1: EXTRACT COMMITMENTS
|
|
78
|
+
|
|
79
|
+
Read all in-scope planning documents and build a **commitment registry** — every concrete promise the documents make. This registry is the grading rubric for all auditors.
|
|
80
|
+
|
|
81
|
+
1. **Read in parallel**: VISION.md, ROADMAP.md, all in-scope item specs, phase `_overview.md` files
|
|
82
|
+
|
|
83
|
+
2. **Extract from each item spec**:
|
|
84
|
+
- Requirements section → each bullet becomes a `FEATURE` or `BEHAVIOR` commitment
|
|
85
|
+
- Constraints section → each becomes a `CONSTRAINT` commitment
|
|
86
|
+
- Dependencies section → each becomes an `INTEGRATION` commitment
|
|
87
|
+
- Explicit test requirements → `TEST` commitments
|
|
88
|
+
|
|
89
|
+
3. **Extract from VISION.md**: high-level success criteria — checked at a broader level ("the system supports X" rather than "file Y has function Z")
|
|
90
|
+
|
|
91
|
+
4. **Filter out** (excluded from audit entirely):
|
|
92
|
+
- Items in `backlog/` or `deferred.md`
|
|
93
|
+
- Items with `status: cut` in ROADMAP.md
|
|
94
|
+
- Out of Scope entries — these are anti-commitments (things promised NOT to build)
|
|
95
|
+
|
|
96
|
+
5. **Separate planned items**: Items with `status: planned` in their spec frontmatter or "Planned" in ROADMAP.md are NOT expected to be implemented yet. Include them in a `[PLANNED]` section of the registry for visibility, but do NOT audit them or report them as findings. This distinction matters — flagging planned items as MISSING creates noise and buries the real gaps in work that was supposed to be done.
|
|
97
|
+
|
|
98
|
+
5. **Write to `.devlyn/commitment-registry.md`**:
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
# Commitment Registry
|
|
102
|
+
Generated: [timestamp]
|
|
103
|
+
Scope: [phase N / all]
|
|
104
|
+
Total commitments: [N]
|
|
105
|
+
|
|
106
|
+
## Phase 1: [name]
|
|
107
|
+
### 1.1 [item title] (spec status: [done/in-progress/planned])
|
|
108
|
+
- [FEATURE] User can sign up with email and password
|
|
109
|
+
- [BEHAVIOR] Failed login returns 401 with specific error message
|
|
110
|
+
- [CONSTRAINT] Passwords hashed with bcrypt, min 8 characters
|
|
111
|
+
- [INTEGRATION] Auth middleware applied to all /api/* routes
|
|
112
|
+
- [TEST] Auth flow covered by E2E tests
|
|
113
|
+
|
|
114
|
+
## Anti-Commitments (Out of Scope)
|
|
115
|
+
- [item 1.1] Does NOT include social login
|
|
116
|
+
- [item 1.2] Does NOT include real-time inventory sync
|
|
117
|
+
|
|
118
|
+
## Not Started (Planned — excluded from audit)
|
|
119
|
+
### 2.1 [item title] (spec status: planned)
|
|
120
|
+
- [FEATURE] WebSocket connection on page load
|
|
121
|
+
- [FEATURE] Real-time task list updates
|
|
122
|
+
[These items are tracked for visibility but NOT audited or reported as findings]
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## PHASE 2: AUDIT
|
|
126
|
+
|
|
127
|
+
Spawn all applicable auditors in parallel. Each reads `.devlyn/commitment-registry.md` and investigates from their perspective.
|
|
128
|
+
|
|
129
|
+
### code-auditor (always)
|
|
130
|
+
|
|
131
|
+
Spawn a subagent with `mode: "bypassPermissions"`. Read the full prompt from `references/auditors/code-auditor.md` and pass it to the subagent.
|
|
132
|
+
|
|
133
|
+
The code-auditor classifies each commitment as IMPLEMENTED, MISSING, INCOMPLETE, DIVERGENT, or BROKEN — with file:line evidence. Also catches cross-feature integration gaps and constraint violations. Writes to `.devlyn/audit-code.md`.
|
|
134
|
+
|
|
135
|
+
### docs-auditor (unless --skip-docs)
|
|
136
|
+
|
|
137
|
+
Spawn a subagent with `mode: "bypassPermissions"`. Read the full prompt from `references/auditors/docs-auditor.md` and pass it to the subagent.
|
|
138
|
+
|
|
139
|
+
Checks: ROADMAP.md status accuracy, README alignment, API doc coverage, VISION.md currency, item spec status. Writes to `.devlyn/audit-docs.md`.
|
|
140
|
+
|
|
141
|
+
### browser-auditor (conditional)
|
|
142
|
+
|
|
143
|
+
**Skip conditions** (check in order):
|
|
144
|
+
1. `--skip-browser` flag → skip
|
|
145
|
+
2. No web-relevant files in project (no `*.tsx`, `*.jsx`, `*.vue`, `*.svelte`, `*.html`, `page.*`, `layout.*`) → skip with note "Browser validation skipped — no web files detected"
|
|
146
|
+
3. Otherwise → spawn
|
|
147
|
+
|
|
148
|
+
Spawn a subagent with `mode: "bypassPermissions"`. Read the full prompt from `references/auditors/browser-auditor.md` and pass it to the subagent.
|
|
149
|
+
|
|
150
|
+
Tests user-facing features in the browser against commitment registry. Writes to `.devlyn/audit-browser.md`.
|
|
151
|
+
|
|
152
|
+
**After all auditors complete**: Read each audit file and proceed to PHASE 3.
|
|
153
|
+
|
|
154
|
+
## PHASE 3: SYNTHESIZE & REPORT
|
|
155
|
+
|
|
156
|
+
After all auditors report:
|
|
157
|
+
|
|
158
|
+
1. **Read all audit files** in parallel:
|
|
159
|
+
- `.devlyn/audit-code.md`
|
|
160
|
+
- `.devlyn/audit-docs.md` (if exists)
|
|
161
|
+
- `.devlyn/audit-browser.md` (if exists)
|
|
162
|
+
|
|
163
|
+
2. **Deduplicate**: If multiple auditors flagged the same issue, merge into one finding at the highest severity.
|
|
164
|
+
|
|
165
|
+
3. **Filter accepted divergences**: If `.devlyn/preflight-accepted.md` exists, remove any findings that match accepted entries.
|
|
166
|
+
|
|
167
|
+
4. **Classify each finding** using these categories:
|
|
168
|
+
|
|
169
|
+
| Category | Description | Typical source |
|
|
170
|
+
|----------|-------------|----------------|
|
|
171
|
+
| `MISSING` | In roadmap but not implemented | code-auditor |
|
|
172
|
+
| `INCOMPLETE` | Implementation started but unfinished | code-auditor |
|
|
173
|
+
| `DIVERGENT` | Implemented differently than spec says | code-auditor |
|
|
174
|
+
| `BROKEN` | Implemented but has a bug | code-auditor, browser-auditor |
|
|
175
|
+
| `UNDOCUMENTED` | Implemented but not in docs | docs-auditor |
|
|
176
|
+
| `STALE_DOC` | Docs don't match current code | docs-auditor |
|
|
177
|
+
|
|
178
|
+
5. **Assign severity**: CRITICAL (blocks shipping), HIGH (should fix), MEDIUM (fix or accept), LOW (cosmetic)
|
|
179
|
+
|
|
180
|
+
6. **Compare with previous run** (if `.devlyn/PREFLIGHT-REPORT.md` existed):
|
|
181
|
+
- `RESOLVED`: finding from previous run no longer present
|
|
182
|
+
- `PERSISTS`: finding still present
|
|
183
|
+
- `NEW`: finding not in previous run
|
|
184
|
+
|
|
185
|
+
7. **Generate `.devlyn/PREFLIGHT-REPORT.md`**:
|
|
186
|
+
|
|
187
|
+
```markdown
|
|
188
|
+
# Preflight Report
|
|
189
|
+
Generated: [timestamp]
|
|
190
|
+
Scope: [phase N / all]
|
|
191
|
+
Previous run: [timestamp / none]
|
|
192
|
+
|
|
193
|
+
## Summary
|
|
194
|
+
| Category | Count |
|
|
195
|
+
|----------|-------|
|
|
196
|
+
| MISSING | [N] |
|
|
197
|
+
| INCOMPLETE | [N] |
|
|
198
|
+
| DIVERGENT | [N] |
|
|
199
|
+
| BROKEN | [N] |
|
|
200
|
+
| UNDOCUMENTED | [N] |
|
|
201
|
+
| STALE_DOC | [N] |
|
|
202
|
+
| **Total findings** | **[N]** |
|
|
203
|
+
|
|
204
|
+
## Delta (vs previous run)
|
|
205
|
+
- Resolved: [N]
|
|
206
|
+
- Persists: [N]
|
|
207
|
+
- New: [N]
|
|
208
|
+
|
|
209
|
+
## Commitment Coverage
|
|
210
|
+
- Active commitments (done/in-progress specs): [N]
|
|
211
|
+
- Verified (IMPLEMENTED): [N] ([%])
|
|
212
|
+
- Issues found: [N] ([%])
|
|
213
|
+
- Planned items (excluded from audit): [N] across [M] specs
|
|
214
|
+
|
|
215
|
+
## Findings
|
|
216
|
+
|
|
217
|
+
### CRITICAL
|
|
218
|
+
- **[MISSING]** `1.2` — Order cancellation flow
|
|
219
|
+
- **Commitment**: "User can cancel pending orders within 24 hours"
|
|
220
|
+
- **Evidence**: No cancellation endpoint in `src/api/orders/`. No cancel button in `src/components/OrderDetail.tsx`.
|
|
221
|
+
- **Impact**: Core user workflow completely absent.
|
|
222
|
+
|
|
223
|
+
### HIGH
|
|
224
|
+
- **[INCOMPLETE]** `1.1` — Error handling on signup
|
|
225
|
+
- **Commitment**: "Failed signup shows specific validation errors"
|
|
226
|
+
- **Evidence**: `src/api/auth/signup.ts:34` returns generic 500. No field-level validation.
|
|
227
|
+
- **Impact**: Users see "Something went wrong" instead of actionable feedback.
|
|
228
|
+
|
|
229
|
+
### MEDIUM
|
|
230
|
+
...
|
|
231
|
+
|
|
232
|
+
### LOW
|
|
233
|
+
...
|
|
234
|
+
|
|
235
|
+
## Documentation Findings
|
|
236
|
+
- [STALE_DOC] ROADMAP.md: Item 1.3 status "In Progress" → should be "Done"
|
|
237
|
+
- [UNDOCUMENTED] WebSocket real-time updates not mentioned in README
|
|
238
|
+
|
|
239
|
+
## What's Verified
|
|
240
|
+
[Explicitly list areas that passed — balanced feedback prevents over-correction]
|
|
241
|
+
- Auth flow: all 5 commitments verified (signup, login, logout, password reset, session management)
|
|
242
|
+
- Database schema: matches all spec constraints
|
|
243
|
+
|
|
244
|
+
## Not Started (Expected — Planned Items)
|
|
245
|
+
[List planned items here for visibility, not as findings]
|
|
246
|
+
- 2.1 Real-time Updates — status: planned, 5 commitments
|
|
247
|
+
- 2.2 Team Management — status: planned, 6 commitments
|
|
248
|
+
These items are acknowledged future work per the roadmap. They will be audited when their status changes to in-progress or done.
|
|
249
|
+
|
|
250
|
+
## Accepted Divergences (from previous runs)
|
|
251
|
+
- [list any, or "None"]
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
8. **Present the report** to the user with a summary.
|
|
255
|
+
|
|
256
|
+
## PHASE 4: TRIAGE & PROMOTE
|
|
257
|
+
|
|
258
|
+
How this phase runs depends on the `--autofix` flag:
|
|
259
|
+
|
|
260
|
+
### Without --autofix (default — interactive)
|
|
261
|
+
|
|
262
|
+
Present findings and guide the user through triage:
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
Preflight found [N] findings across [categories].
|
|
266
|
+
|
|
267
|
+
For each finding, you can:
|
|
268
|
+
1. **Promote** → creates a roadmap item spec, adds to ROADMAP.md
|
|
269
|
+
2. **Accept** → marks as intentional divergence (won't flag on future runs)
|
|
270
|
+
3. **Skip** → leave for later
|
|
271
|
+
|
|
272
|
+
Which findings would you like to promote to the roadmap?
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**When the user confirms findings to promote:**
|
|
276
|
+
|
|
277
|
+
1. **Generate item specs** for each confirmed finding, following the ideate template format:
|
|
278
|
+
```markdown
|
|
279
|
+
---
|
|
280
|
+
id: "[phase].[next-number]"
|
|
281
|
+
title: "[Fix/Add: description]"
|
|
282
|
+
phase: [N]
|
|
283
|
+
status: planned
|
|
284
|
+
priority: [derived from finding severity]
|
|
285
|
+
complexity: [estimated from finding scope]
|
|
286
|
+
depends-on: []
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
# [id] [Title]
|
|
290
|
+
|
|
291
|
+
## Context
|
|
292
|
+
Preflight check identified this gap against the original roadmap specification.
|
|
293
|
+
[Brief context from the original commitment and what's wrong]
|
|
294
|
+
|
|
295
|
+
## Objective
|
|
296
|
+
[What needs to be true after this is fixed]
|
|
297
|
+
|
|
298
|
+
## Requirements
|
|
299
|
+
- [ ] [Specific fix requirement derived from the finding]
|
|
300
|
+
- [ ] [Verification step]
|
|
301
|
+
|
|
302
|
+
## Constraints
|
|
303
|
+
- Must align with original spec at docs/roadmap/phase-N/[original-item].md
|
|
304
|
+
|
|
305
|
+
## Out of Scope
|
|
306
|
+
- Changes beyond what the original spec requires
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
2. **Place specs** in the appropriate roadmap phase directory (same phase as the original item, or a new "fixes" phase if multiple phases are affected)
|
|
310
|
+
|
|
311
|
+
3. **Update ROADMAP.md** with new rows for promoted findings
|
|
312
|
+
|
|
313
|
+
4. **Record accepted divergences** in `.devlyn/preflight-accepted.md`:
|
|
314
|
+
```markdown
|
|
315
|
+
# Accepted Divergences
|
|
316
|
+
# Findings marked as intentional — excluded from future preflight runs
|
|
317
|
+
|
|
318
|
+
- [item-id] [commitment]: [reason accepted]
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
5. **STALE_DOC findings**: Fix these directly — update ROADMAP.md statuses, item spec frontmatter, and VISION.md "What's Next" sections. These are factual corrections, not implementation decisions.
|
|
322
|
+
|
|
323
|
+
6. **Suggest next steps**:
|
|
324
|
+
```
|
|
325
|
+
Triage complete.
|
|
326
|
+
- [N] findings promoted to roadmap ([list item IDs])
|
|
327
|
+
- [N] divergences accepted
|
|
328
|
+
- [N] doc issues fixed directly
|
|
329
|
+
|
|
330
|
+
Next steps:
|
|
331
|
+
- To implement fixes: /devlyn:auto-resolve "Implement per spec at docs/roadmap/phase-N/[id]-[name].md"
|
|
332
|
+
- For high-stakes fixes (CRITICAL severity or complex DIVERGENT findings), add `--with-codex both` to cross-validate the fix and review with Codex
|
|
333
|
+
- To re-run preflight after fixes: /devlyn:preflight [same flags]
|
|
334
|
+
- To add new features discovered during audit: /devlyn:ideate expand
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### With --autofix
|
|
338
|
+
|
|
339
|
+
1. Auto-promote all CRITICAL and HIGH findings to roadmap items (steps 1-3 above)
|
|
340
|
+
2. Fix all STALE_DOC findings directly
|
|
341
|
+
3. MEDIUM and LOW findings are reported but not auto-promoted (include in report with note "manually promote if needed")
|
|
342
|
+
4. For each promoted item, spawn `/devlyn:auto-resolve` sequentially:
|
|
343
|
+
```
|
|
344
|
+
/devlyn:auto-resolve "Implement per spec at docs/roadmap/phase-N/[id]-[name].md"
|
|
345
|
+
```
|
|
346
|
+
5. After all auto-resolve runs complete, re-run preflight (without --autofix) as a verification pass
|
|
347
|
+
6. Present final delta report showing what was resolved
|
|
348
|
+
|
|
349
|
+
<autofix_safety>
|
|
350
|
+
Auto-promoting only CRITICAL and HIGH findings prevents noise — MEDIUM/LOW findings often benefit from human judgment on whether they're worth fixing or should be accepted as intentional divergence. The user can always manually promote remaining findings after reviewing the report.
|
|
351
|
+
</autofix_safety>
|
|
352
|
+
|
|
353
|
+
## Language
|
|
354
|
+
|
|
355
|
+
Generate all documents and reports in the language the user communicates in. Keep technical terms (file paths, code references, category names like MISSING/DIVERGENT) in English for consistency with the rest of the devlyn toolchain.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Browser Auditor Prompt
|
|
2
|
+
|
|
3
|
+
Use this as the subagent prompt when spawning the browser-auditor in PHASE 2.
|
|
4
|
+
|
|
5
|
+
**Skip conditions** (check in order before spawning):
|
|
6
|
+
1. `--skip-browser` flag → skip
|
|
7
|
+
2. No web-relevant files in project (no `*.tsx`, `*.jsx`, `*.vue`, `*.svelte`, `*.html`, `page.*`, `layout.*`) → skip with note "Browser validation skipped — no web files detected"
|
|
8
|
+
3. Otherwise → spawn
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
You are performing browser-based verification of a web application against its planning commitments.
|
|
13
|
+
|
|
14
|
+
Read `.devlyn/commitment-registry.md` for the user-facing features that should be working.
|
|
15
|
+
|
|
16
|
+
**Your workflow:**
|
|
17
|
+
1. Read `.claude/skills/devlyn:browser-validate/SKILL.md` for the browser testing methodology and tier system
|
|
18
|
+
2. Start the dev server
|
|
19
|
+
3. For each user-facing FEATURE and BEHAVIOR commitment:
|
|
20
|
+
- Navigate to the relevant page
|
|
21
|
+
- Perform the user action described in the commitment
|
|
22
|
+
- Verify the expected outcome
|
|
23
|
+
- Take screenshots as evidence
|
|
24
|
+
4. Pay special attention to:
|
|
25
|
+
- Error states: trigger errors and verify error UI appears
|
|
26
|
+
- Empty states: verify empty state UI for lists/collections
|
|
27
|
+
- Loading states: verify loading indicators during async operations
|
|
28
|
+
- Edge cases explicitly mentioned in specs
|
|
29
|
+
|
|
30
|
+
Write findings to `.devlyn/audit-browser.md` with screenshot paths as evidence.
|
|
31
|
+
|
|
32
|
+
If browser tools are unavailable, fall back to HTTP smoke testing (curl endpoints, verify response codes and shapes). Note the reduced coverage in your findings.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Code Auditor Prompt
|
|
2
|
+
|
|
3
|
+
Use this as the subagent prompt when spawning the code-auditor in PHASE 2.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are auditing a codebase against its planning commitments. Your job is to verify that every commitment was actually implemented — and implemented correctly.
|
|
8
|
+
|
|
9
|
+
Read `.devlyn/commitment-registry.md` for the full list of commitments to verify. Skip any items in the "Not Started (Planned)" section — those are acknowledged future work, not gaps.
|
|
10
|
+
|
|
11
|
+
**For each active commitment (not planned):**
|
|
12
|
+
1. Search the codebase for its implementation (use Grep, Glob, Read in parallel where possible)
|
|
13
|
+
2. Read the implementing code thoroughly — line by line for critical paths
|
|
14
|
+
3. Classify the commitment:
|
|
15
|
+
|
|
16
|
+
| Classification | Meaning | Evidence required |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| IMPLEMENTED | Code exists and fulfills the commitment | file:line showing the implementation |
|
|
19
|
+
| MISSING | No implementation found after thorough search | What you searched for and where |
|
|
20
|
+
| INCOMPLETE | Implementation started but doesn't fully satisfy | What's there + what's missing, both with file:line |
|
|
21
|
+
| DIVERGENT | Implementation does something different than specified | Spec requirement vs actual behavior, with file:line |
|
|
22
|
+
| BROKEN | Implementation exists but has a bug preventing it from working | The bug with file:line |
|
|
23
|
+
|
|
24
|
+
**Beyond the commitment checklist**, also investigate:
|
|
25
|
+
- Cross-feature integration gaps: features that should connect but don't
|
|
26
|
+
- Error handling specified in specs but not implemented in code
|
|
27
|
+
- Constraints specified but violated (e.g., spec says "use bcrypt" but code uses plaintext)
|
|
28
|
+
- Edge cases explicitly mentioned in specs but unhandled
|
|
29
|
+
|
|
30
|
+
<code_auditor_calibration>
|
|
31
|
+
Calibrate your judgment with these examples:
|
|
32
|
+
|
|
33
|
+
**This IS a finding (INCOMPLETE)**:
|
|
34
|
+
Spec says "failed API calls display an error banner with retry button."
|
|
35
|
+
Code at `src/components/Dashboard.tsx:42` has `catch (e) { console.error(e) }` — error is logged but no UI feedback. The user sees a blank screen on failure.
|
|
36
|
+
Why: logging is not user-facing error handling. The commitment specifies visible feedback.
|
|
37
|
+
|
|
38
|
+
**This IS a finding (DIVERGENT)**:
|
|
39
|
+
Spec says "alert admin via push notification when stock below threshold."
|
|
40
|
+
Code at `src/inventory/alerts.ts:28` sends an email instead.
|
|
41
|
+
Why: the channel matters — push notification has different urgency characteristics than email.
|
|
42
|
+
|
|
43
|
+
**This is NOT a finding**:
|
|
44
|
+
Spec says "store user preferences." Code stores them in localStorage instead of the database.
|
|
45
|
+
Why: unless the spec explicitly requires server-side persistence, the implementation choice is reasonable. The commitment is fulfilled.
|
|
46
|
+
|
|
47
|
+
**General rule**: focus on whether the user-facing OUTCOME matches the commitment, not on internal implementation details. But when the spec explicitly constrains HOW something should work, verify that too.
|
|
48
|
+
</code_auditor_calibration>
|
|
49
|
+
|
|
50
|
+
Write findings to `.devlyn/audit-code.md`:
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
# Code Audit Findings
|
|
54
|
+
|
|
55
|
+
## Summary
|
|
56
|
+
- Commitments checked: [N]
|
|
57
|
+
- IMPLEMENTED: [N]
|
|
58
|
+
- MISSING: [N]
|
|
59
|
+
- INCOMPLETE: [N]
|
|
60
|
+
- DIVERGENT: [N]
|
|
61
|
+
- BROKEN: [N]
|
|
62
|
+
|
|
63
|
+
## Findings
|
|
64
|
+
|
|
65
|
+
### [MISSING] 1.1 — Email validation on signup
|
|
66
|
+
**Commitment**: "Email format validated on signup"
|
|
67
|
+
**Evidence**: Searched `src/auth/`, `src/validators/`, `src/api/auth*`. No validation found. `src/api/auth/signup.ts:15` accepts email parameter without any format check.
|
|
68
|
+
**Severity**: HIGH
|
|
69
|
+
**Impact**: Invalid emails enter the database, breaking password reset flow.
|
|
70
|
+
|
|
71
|
+
### [DIVERGENT] 1.3 — Inventory threshold alerts
|
|
72
|
+
**Commitment**: "Alert admin via push notification when stock below threshold"
|
|
73
|
+
**Spec says**: Push notification
|
|
74
|
+
**Code does**: Email only (`src/inventory/alerts.ts:28`)
|
|
75
|
+
**Severity**: MEDIUM
|
|
76
|
+
**Impact**: Alerts work but through a lower-urgency channel than specified.
|
|
77
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Docs Auditor Prompt
|
|
2
|
+
|
|
3
|
+
Use this as the subagent prompt when spawning the docs-auditor in PHASE 2.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are auditing documentation alignment for a project. Your job is to find mismatches between what the docs say and what the code actually does.
|
|
8
|
+
|
|
9
|
+
Read `.devlyn/commitment-registry.md` for context on what was planned.
|
|
10
|
+
|
|
11
|
+
**Check these dimensions:**
|
|
12
|
+
|
|
13
|
+
1. **ROADMAP.md status accuracy**: For each item marked "Done" in ROADMAP.md, verify the implementation exists. For items marked "In Progress", check if they're actually complete or still in progress. Status mismatches are common and misleading.
|
|
14
|
+
|
|
15
|
+
2. **README alignment**: Compare features listed in README.md against actual implementation. Find features claimed but not built (misleading) and features built but not mentioned (undocumented).
|
|
16
|
+
|
|
17
|
+
3. **API documentation**: If API docs exist (`docs/api*`, swagger, openapi), compare documented endpoints against actual route files. Find undocumented endpoints and documented-but-missing endpoints.
|
|
18
|
+
|
|
19
|
+
4. **VISION.md currency**: Check if "What's Next" or future sections reference work that's already done, or if success criteria have been met without acknowledgment.
|
|
20
|
+
|
|
21
|
+
5. **Item spec status accuracy**: For each item spec, verify the frontmatter `status` field matches reality. An item marked `planned` that's fully implemented should be updated to `done`.
|
|
22
|
+
|
|
23
|
+
Write findings to `.devlyn/audit-docs.md`:
|
|
24
|
+
|
|
25
|
+
```markdown
|
|
26
|
+
# Documentation Audit Findings
|
|
27
|
+
|
|
28
|
+
## ROADMAP.md Status Accuracy
|
|
29
|
+
- [STALE_DOC] Item 1.3 marked "In Progress" — implementation is complete (evidence: src/inventory/ fully implemented)
|
|
30
|
+
- [STALE_DOC] Item 2.1 marked "Done" — only partially implemented (missing: webhook handler)
|
|
31
|
+
|
|
32
|
+
## README Alignment
|
|
33
|
+
- [UNDOCUMENTED] Real-time notifications exist in code but README doesn't mention them
|
|
34
|
+
- [STALE_DOC] README claims "SSO support" — no SSO implementation found
|
|
35
|
+
|
|
36
|
+
## Item Spec Status
|
|
37
|
+
- [STALE_DOC] docs/roadmap/phase-1/1.2-order-mgmt.md: status says "planned", should be "done"
|
|
38
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devlyn-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.1",
|
|
4
4
|
"description": "AI development toolkit for Claude Code — ideate, auto-resolve, and ship with context engineering and agent orchestration",
|
|
5
5
|
"homepage": "https://github.com/fysoul17/devlyn-cli#readme",
|
|
6
6
|
"bin": {
|