sequant 2.1.2 → 2.2.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/dist/bin/cli.js +1 -0
- package/dist/src/commands/init.d.ts +1 -0
- package/dist/src/commands/init.js +118 -0
- package/dist/src/commands/run-display.d.ts +17 -0
- package/dist/src/commands/run-display.js +116 -0
- package/dist/src/commands/run.js +12 -64
- package/dist/src/commands/status.js +15 -1
- package/dist/src/lib/skill-version.d.ts +19 -0
- package/dist/src/lib/skill-version.js +68 -0
- package/dist/src/lib/templates.d.ts +1 -0
- package/dist/src/lib/templates.js +1 -1
- package/dist/src/lib/workflow/batch-executor.js +1 -1
- package/dist/src/lib/workflow/phase-executor.d.ts +31 -0
- package/dist/src/lib/workflow/phase-executor.js +129 -46
- package/dist/src/lib/workflow/run-orchestrator.d.ts +37 -0
- package/dist/src/lib/workflow/run-orchestrator.js +42 -14
- package/dist/src/lib/workflow/worktree-manager.d.ts +4 -3
- package/dist/src/lib/workflow/worktree-manager.js +61 -11
- package/package.json +1 -1
- package/templates/skills/assess/SKILL.md +176 -63
- package/templates/skills/exec/SKILL.md +0 -41
- package/templates/skills/fullsolve/SKILL.md +1 -27
- package/templates/skills/qa/SKILL.md +19 -0
- package/templates/skills/qa/scripts/quality-checks.sh +47 -1
- package/templates/skills/spec/SKILL.md +183 -982
- package/templates/skills/spec/references/quality-checklist.md +75 -0
- package/templates/skills/test/SKILL.md +0 -27
- package/templates/skills/testgen/SKILL.md +0 -27
|
@@ -115,6 +115,7 @@ Surface red flags. Only track signals that change the recommendation.
|
|
|
115
115
|
| security, auth, authentication, permissions | Domain | `spec → security-review → exec → qa` |
|
|
116
116
|
| ui, frontend, admin, web, browser | Domain | `spec → exec → test → qa` |
|
|
117
117
|
| complex, refactor, breaking, major | Modifier | `spec → exec → qa` + `-q` |
|
|
118
|
+
| (ui/frontend) + (enhancement/feature), or testable-AC signals | Modifier | inserts `testgen` before `exec` (see Testgen detection below) |
|
|
118
119
|
| enhancement, feature (default) | Generic | `spec → exec → qa` |
|
|
119
120
|
| bug, fix, hotfix, patch | Generic | `exec → qa` |
|
|
120
121
|
| docs, documentation, readme | Generic | `exec → qa` |
|
|
@@ -131,10 +132,24 @@ Surface red flags. Only track signals that change the recommendation.
|
|
|
131
132
|
|
|
132
133
|
**Quality loop (`-q`):** Recommend for everything except simple bug fixes and docs-only.
|
|
133
134
|
|
|
134
|
-
**
|
|
135
|
-
-
|
|
136
|
-
-
|
|
137
|
-
|
|
135
|
+
**Testgen detection:** Add `testgen` to the workflow when any apply:
|
|
136
|
+
- Labels include (`ui` or `frontend`) AND (`enhancement` or `feature`)
|
|
137
|
+
- ACs reference "unit test", "integration test", or list "Automated Test" as a verification method
|
|
138
|
+
|
|
139
|
+
Skip when: only `bug`/`fix` labels present, only `docs` label present, or a prior `testgen` phase marker exists in issue comments.
|
|
140
|
+
|
|
141
|
+
**Chain detection (suggest-only, never auto-apply):** When 2+ assessed issues have a detected dependency, emit a `Chain:` line alongside (not replacing) the default per-issue commands. False dependency inference produces silently-wrong branch topology, so the user decides.
|
|
142
|
+
|
|
143
|
+
Triggers (any one):
|
|
144
|
+
- Issue body or comments mention `"depends on #N"`, `"blocked by #N"`, or `"after #N"`
|
|
145
|
+
- One issue's described output is another issue's input (e.g., A changes a function signature that B consumes)
|
|
146
|
+
|
|
147
|
+
Format: `Chain: npx sequant run <N1> <N2> --chain --qa-gate -q <phases> # alternative — <one-line reason>`
|
|
148
|
+
|
|
149
|
+
Flag references:
|
|
150
|
+
- `--chain` chains issues (each branches from previous; implies `--sequential`)
|
|
151
|
+
- `--qa-gate` pauses chain on QA failure (requires `--chain`)
|
|
152
|
+
- `--base <branch>` — issue references a feature branch
|
|
138
153
|
|
|
139
154
|
### Step 5: Conflict Detection
|
|
140
155
|
|
|
@@ -155,20 +170,25 @@ For each active worktree, check `git diff --name-only main...HEAD` for file over
|
|
|
155
170
|
**Table column rules:** The "Reason" column must not be truncated mid-word. If a row's reason text would exceed the column width, prefer abbreviating the reason to a shorter synonym rather than cutting a word in half. Column widths should adapt to content — do not force a fixed table width.
|
|
156
171
|
|
|
157
172
|
```
|
|
158
|
-
# Action Reason Run
|
|
159
|
-
<N> <ACTION> <short reason> <workflow or symbol>
|
|
160
|
-
<N> <ACTION> <short reason> <workflow or symbol>
|
|
173
|
+
# Action [ACs] Reason Run
|
|
174
|
+
<N> <ACTION> [N] <short reason> <workflow or symbol>
|
|
175
|
+
<N> <ACTION> [N] <short reason> <workflow or symbol>
|
|
161
176
|
...
|
|
162
177
|
────────────────────────────────────────────────────────────────
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
178
|
+
Commands:
|
|
179
|
+
npx sequant run <N1> <N2> <flags>
|
|
180
|
+
npx sequant run <N3> <flags> # resume
|
|
167
181
|
────────────────────────────────────────────────────────────────
|
|
168
|
-
Order: <N> → <N> (<
|
|
182
|
+
Order: <N> → <N> (<dependency reason>)
|
|
169
183
|
|
|
170
184
|
⚠ #<N> <warning>
|
|
171
185
|
⚠ #<N> <warning>
|
|
186
|
+
|
|
187
|
+
Chain: npx sequant run <N1> <N2> --chain --qa-gate -q <phases> # alternative — <reason>
|
|
188
|
+
|
|
189
|
+
Flags:
|
|
190
|
+
<flag> <one-line reason>
|
|
191
|
+
<flag> <one-line reason>
|
|
172
192
|
────────────────────────────────────────────────────────────────
|
|
173
193
|
Cleanup:
|
|
174
194
|
<executable command> # reason
|
|
@@ -181,6 +201,8 @@ Cleanup:
|
|
|
181
201
|
<!-- assess:quality-loop=<bool> -->
|
|
182
202
|
```
|
|
183
203
|
|
|
204
|
+
**`ACs` column (conditional):** Include the `ACs` column only when every assessed issue has at least one explicit `- [ ]` checkbox AC in its body. Otherwise omit the column entirely — do not show partial values. The counter prevents eroding table trust when some issues use implicit/narrative ACs.
|
|
205
|
+
|
|
184
206
|
#### Run Column Symbols
|
|
185
207
|
|
|
186
208
|
| Symbol | Meaning | Example |
|
|
@@ -195,26 +217,51 @@ Cleanup:
|
|
|
195
217
|
| `‖` | Blocked/deferred | Dependency or manual |
|
|
196
218
|
| `—` | No action needed | Already closed/merged |
|
|
197
219
|
|
|
198
|
-
####
|
|
220
|
+
#### Commands Block Rules
|
|
221
|
+
|
|
222
|
+
The commands block is headed by `Commands:` — no box-drawing, no character counting. The header label is the visual anchor.
|
|
199
223
|
|
|
200
224
|
1. Only PROCEED and REWRITE issues get commands
|
|
201
225
|
2. Group by identical phases + flags → same line
|
|
202
226
|
3. Resume issues get `# resume` comment
|
|
203
227
|
4. Rewrite issues get `# restart` comment
|
|
204
|
-
5. Chain mode issues use `--chain` flag
|
|
228
|
+
5. Chain mode issues use `--chain` flag (see `Chain:` annotation rules below)
|
|
205
229
|
6. If ALL issues share the same workflow, emit a single command
|
|
206
230
|
7. **Line splitting:** When a single command would contain more than 6 issue numbers, split into multiple commands of at most 6 issues each, grouped by compatible workflow. Example: 11 issues → two commands (6 + 5)
|
|
207
231
|
|
|
208
232
|
#### Annotation Rules
|
|
209
233
|
|
|
210
|
-
|
|
211
|
-
|
|
234
|
+
Emit annotations in this order between the separators that follow `Commands:`:
|
|
235
|
+
`Order:` → `⚠` warnings → `Chain:` → `Flags:`. `Cleanup:` goes in its own block after. Omit any section (and its surrounding blank line) when it has no content.
|
|
236
|
+
|
|
237
|
+
- **`Order:`** — Only when sequencing matters. Include the **reason** for the ordering, not just `(<filename>)`. Prefer dependency reasoning over filename.
|
|
238
|
+
- Good: `Order: 185 → 186 (185 changes fetchApi error format that 186 consumes)`
|
|
239
|
+
- Good: `Order: 460 → 461 (460 adds batch-executor tests that 461's label matching depends on)`
|
|
240
|
+
- Avoid bare filenames when a reason is clearer.
|
|
241
|
+
|
|
242
|
+
- **`⚠` warnings** — Only non-obvious signals (complexity, staleness, dual concerns, partial-AC satisfaction). One line each, prefixed with issue number. Warnings can note when part of an AC is already satisfied in the codebase:
|
|
243
|
+
- `⚠ #185 Domain errors already exist in repository layer — scope may be smaller than expected`
|
|
244
|
+
- `⚠ #412 bug + auth labels — domain label (auth) takes priority over bug`
|
|
245
|
+
|
|
246
|
+
- **`Chain:`** — Only when 2+ PROCEED issues have a detected dependency (see "Chain detection" in Step 4). Suggests an alternative execution topology. Does not replace the default per-issue commands. Format:
|
|
247
|
+
`Chain: npx sequant run <N1> <N2> --chain --qa-gate -q <phases> # alternative — <one-line reason>`
|
|
248
|
+
|
|
249
|
+
- **`Flags:`** — Only when non-default flags appear in the commands and the reason isn't obvious. One line per **distinct** flag used across all commands. Omit entire section when `-q` is the only non-default flag AND its reason is obvious (e.g., all issues are enhancements). Format:
|
|
250
|
+
```
|
|
251
|
+
Flags:
|
|
252
|
+
-q 9+ ACs or multi-file scope
|
|
253
|
+
--testgen testable ACs detected (UI hooks + API integration)
|
|
254
|
+
--phases ...,test ui label → browser verification
|
|
255
|
+
```
|
|
256
|
+
|
|
212
257
|
- **`Cleanup:`** — Only when actionable (stale branches, merged-but-open issues, label changes). Show as executable commands with `# reason` comments.
|
|
213
|
-
|
|
258
|
+
|
|
214
259
|
- **"All clear" is silence** — no annotation means no issues.
|
|
215
260
|
|
|
216
261
|
#### Batch Example (mixed states, with label priority)
|
|
217
262
|
|
|
263
|
+
Not all issues have explicit `- [ ]` checkboxes, so the `ACs` column is omitted.
|
|
264
|
+
|
|
218
265
|
```
|
|
219
266
|
# Action Reason Run
|
|
220
267
|
462 PARK Manual measurement task ‖
|
|
@@ -227,19 +274,22 @@ Cleanup:
|
|
|
227
274
|
411 PROCEED Config path normalization ◂ exec → qa
|
|
228
275
|
405 REWRITE PR #380 200+ commits behind ⟳ spec → exec → qa
|
|
229
276
|
────────────────────────────────────────────────────────────────
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
277
|
+
Commands:
|
|
278
|
+
npx sequant run 461 460 -q --phases exec,qa
|
|
279
|
+
npx sequant run 458 443 -q
|
|
280
|
+
npx sequant run 412 -q --phases spec,security-review,exec,qa
|
|
281
|
+
npx sequant run 411 -q --phases exec,qa # resume
|
|
282
|
+
npx sequant run 405 -q # restart
|
|
237
283
|
────────────────────────────────────────────────────────────────
|
|
238
|
-
Order: 460 → 461 (batch-executor
|
|
284
|
+
Order: 460 → 461 (460 adds batch-executor tests that 461's label matching depends on)
|
|
239
285
|
|
|
240
286
|
⚠ #458 Dual concern (UX + race) across 4 files
|
|
241
287
|
⚠ #405 Stale 30+ days, ACs still valid
|
|
242
288
|
⚠ #412 bug + auth labels — domain label (auth) takes priority over bug
|
|
289
|
+
|
|
290
|
+
Flags:
|
|
291
|
+
-q multi-file scope across most PROCEED issues
|
|
292
|
+
--phases spec,... spec phase added for 458/443/412/405 (standard features)
|
|
243
293
|
────────────────────────────────────────────────────────────────
|
|
244
294
|
Cleanup:
|
|
245
295
|
git worktree remove .../447-... # merged, stale worktree
|
|
@@ -258,9 +308,39 @@ Cleanup:
|
|
|
258
308
|
<!-- #405 assess:action=REWRITE assess:phases=spec,exec,qa assess:quality-loop=true -->
|
|
259
309
|
```
|
|
260
310
|
|
|
311
|
+
#### Batch Example (dependent issues with testgen, chain suggestion)
|
|
312
|
+
|
|
313
|
+
All issues have explicit checkbox ACs, so the `ACs` column is shown. A dependency is detected (185 → 186), so a `Chain:` suggestion appears alongside the default commands.
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
# Action ACs Reason Run
|
|
317
|
+
185 PROCEED 6 Domain error standardization spec → exec → qa
|
|
318
|
+
186 PROCEED 9 React Query hooks migration spec → testgen → exec → test → qa
|
|
319
|
+
────────────────────────────────────────────────────────────────
|
|
320
|
+
Commands:
|
|
321
|
+
npx sequant run 185 -q
|
|
322
|
+
npx sequant run 186 -q --phases spec,testgen,exec,test,qa
|
|
323
|
+
────────────────────────────────────────────────────────────────
|
|
324
|
+
Order: 185 → 186 (185 changes fetchApi error format that 186 consumes)
|
|
325
|
+
|
|
326
|
+
⚠ #185 Domain errors already exist in repository layer — scope may be smaller than expected
|
|
327
|
+
⚠ #186 @tanstack/react-query not installed; large scope (9 hooks + optimistic updates)
|
|
328
|
+
|
|
329
|
+
Chain: npx sequant run 185 186 --chain --qa-gate -q --phases spec,testgen,exec,test,qa
|
|
330
|
+
# alternative — use if 186 should branch from 185's work
|
|
331
|
+
|
|
332
|
+
Flags:
|
|
333
|
+
--testgen #186 has testable ACs (UI hooks + API integration)
|
|
334
|
+
--phases ...,test #186 ui label → browser verification
|
|
335
|
+
────────────────────────────────────────────────────────────────
|
|
336
|
+
|
|
337
|
+
<!-- #185 assess:action=PROCEED assess:phases=spec,exec,qa assess:quality-loop=true -->
|
|
338
|
+
<!-- #186 assess:action=PROCEED assess:phases=spec,testgen,exec,test,qa assess:quality-loop=true -->
|
|
339
|
+
```
|
|
340
|
+
|
|
261
341
|
#### Batch Example (all clean)
|
|
262
342
|
|
|
263
|
-
When every issue is PROCEED with no warnings, the output is minimal
|
|
343
|
+
When every issue is PROCEED with no warnings, no dependencies, and no non-default flags beyond an obvious `-q`, the output is minimal. The `Flags:` section is omitted because `-q` is obvious here (all PROCEED enhancements).
|
|
264
344
|
|
|
265
345
|
```
|
|
266
346
|
# Action Reason Run
|
|
@@ -268,10 +348,9 @@ When every issue is PROCEED with no warnings, the output is minimal:
|
|
|
268
348
|
460 PROCEED batch-executor tests exec → qa
|
|
269
349
|
443 PROCEED Consolidate gh calls spec → exec → qa
|
|
270
350
|
────────────────────────────────────────────────────────────────
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
351
|
+
Commands:
|
|
352
|
+
npx sequant run 461 460 -q --phases exec,qa
|
|
353
|
+
npx sequant run 443 -q
|
|
275
354
|
────────────────────────────────────────────────────────────────
|
|
276
355
|
|
|
277
356
|
<!-- #461 assess:action=PROCEED assess:phases=exec,qa assess:quality-loop=true -->
|
|
@@ -279,9 +358,11 @@ When every issue is PROCEED with no warnings, the output is minimal:
|
|
|
279
358
|
<!-- #443 assess:action=PROCEED assess:phases=spec,exec,qa assess:quality-loop=true -->
|
|
280
359
|
```
|
|
281
360
|
|
|
361
|
+
Silence means clean — no `Order:`, no `⚠`, no `Chain:`, no `Flags:`, no `Cleanup:`.
|
|
362
|
+
|
|
282
363
|
#### Batch Example (large batch, 13 issues with Rule 7 split)
|
|
283
364
|
|
|
284
|
-
When assessing 9+ issues, commands are split per Rule 7 (max 6 issue numbers per line), and the table adapts to content width
|
|
365
|
+
When assessing 9+ issues, commands are split per Rule 7 (max 6 issue numbers per line), and the table adapts to content width. Mixed AC styles across issues → `ACs` column omitted.
|
|
285
366
|
|
|
286
367
|
```
|
|
287
368
|
# Action Reason Run
|
|
@@ -299,18 +380,21 @@ When assessing 9+ issues, commands are split per Rule 7 (max 6 issue numbers per
|
|
|
299
380
|
492 PROCEED Add export command spec → exec → qa
|
|
300
381
|
491 PROCEED Normalize config paths exec → qa
|
|
301
382
|
────────────────────────────────────────────────────────────────
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
383
|
+
Commands:
|
|
384
|
+
npx sequant run 503 502 501 498 495 494 -q --phases exec,qa
|
|
385
|
+
npx sequant run 491 -q --phases exec,qa
|
|
386
|
+
npx sequant run 499 -q --phases spec,exec,test,qa
|
|
387
|
+
npx sequant run 500 -q --phases spec,security-review,exec,qa
|
|
388
|
+
npx sequant run 497 492 -q
|
|
309
389
|
────────────────────────────────────────────────────────────────
|
|
310
|
-
Order: 497 → 492 (batch-executor
|
|
390
|
+
Order: 497 → 492 (497 refactors batch-executor internals that 492's export command uses)
|
|
311
391
|
|
|
312
392
|
⚠ #500 bug + auth labels — domain label takes priority
|
|
313
393
|
⚠ #499 bug + ui labels — domain label triggers test phase
|
|
394
|
+
|
|
395
|
+
Flags:
|
|
396
|
+
--phases ...,security-review #500 auth label → security review required
|
|
397
|
+
--phases ...,test #499 ui label → browser verification
|
|
314
398
|
────────────────────────────────────────────────────────────────
|
|
315
399
|
Cleanup:
|
|
316
400
|
gh issue close 493 # duplicate of #491
|
|
@@ -346,9 +430,13 @@ More context since you're focused on one issue. Separators between every section
|
|
|
346
430
|
|
|
347
431
|
→ PROCEED — <one-line reason>
|
|
348
432
|
|
|
349
|
-
|
|
433
|
+
Commands:
|
|
434
|
+
npx sequant run <N> <flags>
|
|
435
|
+
|
|
436
|
+
<phases> · <N> ACs
|
|
350
437
|
|
|
351
|
-
|
|
438
|
+
Flags:
|
|
439
|
+
<flag> <one-line reason>
|
|
352
440
|
────────────────────────────────────────────────────────────────
|
|
353
441
|
⚠ <warning if any>
|
|
354
442
|
⚠ Conflict: #<N> also modifies <path>
|
|
@@ -359,7 +447,9 @@ More context since you're focused on one issue. Separators between every section
|
|
|
359
447
|
<!-- assess:quality-loop=<bool> -->
|
|
360
448
|
```
|
|
361
449
|
|
|
362
|
-
|
|
450
|
+
**`Flags:` (single mode):** Indented list of each enabled non-default flag with a one-line reason. Omit the entire `Flags:` section when `-q` is the only non-default flag AND the reason is obvious (e.g., a straightforward enhancement). Do not repeat obvious flags.
|
|
451
|
+
|
|
452
|
+
Example with `Flags:` (non-obvious `-q` + `--testgen`):
|
|
363
453
|
|
|
364
454
|
```
|
|
365
455
|
#458 — Parallel run UX freeze + reconcileState race condition
|
|
@@ -368,9 +458,33 @@ Open · bug, enhancement, cli
|
|
|
368
458
|
|
|
369
459
|
→ PROCEED — Both root causes confirmed in codebase
|
|
370
460
|
|
|
371
|
-
|
|
461
|
+
Commands:
|
|
462
|
+
npx sequant run 458 -q
|
|
463
|
+
|
|
464
|
+
spec → exec → qa · 8 ACs
|
|
465
|
+
|
|
466
|
+
Flags:
|
|
467
|
+
-q dual concern across 4 files
|
|
468
|
+
────────────────────────────────────────────────────────────────
|
|
469
|
+
|
|
470
|
+
<!-- assess:action=PROCEED -->
|
|
471
|
+
<!-- assess:phases=spec,exec,qa -->
|
|
472
|
+
<!-- assess:quality-loop=true -->
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
Example omitting `Flags:` (obvious `-q` for a standard enhancement):
|
|
476
|
+
|
|
477
|
+
```
|
|
478
|
+
#443 — Consolidate gh CLI calls
|
|
479
|
+
Open · enhancement
|
|
480
|
+
────────────────────────────────────────────────────────────────
|
|
372
481
|
|
|
373
|
-
|
|
482
|
+
→ PROCEED — Codebase matches spec, 5 ACs
|
|
483
|
+
|
|
484
|
+
Commands:
|
|
485
|
+
npx sequant run 443 -q
|
|
486
|
+
|
|
487
|
+
spec → exec → qa · 5 ACs
|
|
374
488
|
────────────────────────────────────────────────────────────────
|
|
375
489
|
|
|
376
490
|
<!-- assess:action=PROCEED -->
|
|
@@ -448,7 +562,8 @@ Need: <specific information required>
|
|
|
448
562
|
|
|
449
563
|
→ REWRITE — <reason>
|
|
450
564
|
|
|
451
|
-
|
|
565
|
+
Commands:
|
|
566
|
+
npx sequant run <N> <flags> # fresh start
|
|
452
567
|
|
|
453
568
|
<phases> · <N> ACs
|
|
454
569
|
────────────────────────────────────────────────────────────────
|
|
@@ -466,27 +581,19 @@ Need: <specific information required>
|
|
|
466
581
|
|
|
467
582
|
| Section | Show when |
|
|
468
583
|
|---------|-----------|
|
|
469
|
-
|
|
|
584
|
+
| `ACs` column (batch) | Every assessed issue has ≥1 explicit `- [ ]` checkbox AC |
|
|
585
|
+
| `Commands:` block | At least one PROCEED or REWRITE issue |
|
|
470
586
|
| `Order:` | File conflicts or dependencies require sequencing |
|
|
471
|
-
| `⚠` warnings | Non-obvious signals exist |
|
|
587
|
+
| `⚠` warnings | Non-obvious signals exist (complexity, staleness, dual concerns, partial-AC satisfaction) |
|
|
588
|
+
| `Chain:` | 2+ PROCEED issues with detected dependency (suggest-only) |
|
|
589
|
+
| `Flags:` | Non-default flags appear AND `-q` is not the sole flag with an obvious reason |
|
|
472
590
|
| `Cleanup:` | Stale branches, merged-but-open issues, or label changes |
|
|
473
591
|
| Separators | Between sections that are both shown; omit if adjacent section is omitted |
|
|
474
592
|
|
|
475
|
-
Every separator and section is conditional. If there are no warnings and no cleanup, the output is just: table → separator →
|
|
593
|
+
Every separator and section is conditional. If there are no warnings, no chain, no flags, and no cleanup, the output is just: table → separator → `Commands:` block → separator → markers.
|
|
476
594
|
|
|
477
595
|
---
|
|
478
596
|
|
|
479
|
-
## State Tracking
|
|
480
|
-
|
|
481
|
-
Initialize state for each assessed issue:
|
|
482
|
-
|
|
483
|
-
```bash
|
|
484
|
-
TITLE=$(gh issue view <N> --json title -q '.title')
|
|
485
|
-
npx tsx scripts/state/update.ts init <N> "$TITLE"
|
|
486
|
-
```
|
|
487
|
-
|
|
488
|
-
Note: `/assess` only initializes issues — actual phase tracking happens during workflow execution.
|
|
489
|
-
|
|
490
597
|
## Persist Analysis
|
|
491
598
|
|
|
492
599
|
After displaying output, prompt the user to save using `AskUserQuestion` with options "Yes (Recommended)" and "No".
|
|
@@ -516,10 +623,16 @@ If confirmed, post a structured comment to each issue via `gh issue comment`. Ea
|
|
|
516
623
|
|
|
517
624
|
- [ ] Every issue has exactly one action in the table
|
|
518
625
|
- [ ] Run column uses correct symbol for the action/state
|
|
519
|
-
- [ ]
|
|
520
|
-
- [ ] Commands
|
|
521
|
-
- [ ]
|
|
522
|
-
- [ ]
|
|
626
|
+
- [ ] `ACs` column included only when every issue has explicit `- [ ]` checkboxes
|
|
627
|
+
- [ ] Commands appear under a `Commands:` header (no bare indented block, no box-drawing)
|
|
628
|
+
- [ ] Commands block only contains PROCEED and REWRITE issues, grouped by compatible workflow
|
|
629
|
+
- [ ] `testgen` included when ui/frontend + enhancement/feature labels OR testable-AC signals
|
|
630
|
+
- [ ] `Chain:` suggested (not auto-applied) when 2+ PROCEED issues have a detected dependency
|
|
631
|
+
- [ ] `Flags:` section present when non-default flags appear (unless only obvious `-q`)
|
|
632
|
+
- [ ] `Order:` annotations carry dependency **reasoning**, not bare filenames
|
|
633
|
+
- [ ] `⚠` warnings include partial-AC satisfaction where applicable
|
|
634
|
+
- [ ] Separators appear between every shown section; omitted when adjacent section is omitted
|
|
635
|
+
- [ ] Annotations/sections omitted when not applicable (silence = healthy)
|
|
523
636
|
- [ ] HTML markers present for every assessed issue
|
|
524
637
|
- [ ] Batch mode: table is the primary output, no per-issue detail sections
|
|
525
638
|
- [ ] Single mode: focused summary with separators between sections
|
|
@@ -806,16 +806,6 @@ After implementation is complete and all checks pass, create and verify the PR:
|
|
|
806
806
|
- If PR exists: Record the URL from `gh pr view` output
|
|
807
807
|
- If PR creation failed: Record the error and include manual creation instructions
|
|
808
808
|
|
|
809
|
-
6. **Record PR info in workflow state:**
|
|
810
|
-
```bash
|
|
811
|
-
# Extract PR number and URL from gh pr view output, then update state
|
|
812
|
-
PR_INFO=$(gh pr view --json number,url)
|
|
813
|
-
PR_NUMBER=$(echo "$PR_INFO" | jq -r '.number')
|
|
814
|
-
PR_URL=$(echo "$PR_INFO" | jq -r '.url')
|
|
815
|
-
npx tsx scripts/state/update.ts pr <issue-number> "$PR_NUMBER" "$PR_URL"
|
|
816
|
-
```
|
|
817
|
-
This enables `--cleanup` to detect merged PRs and auto-remove state entries.
|
|
818
|
-
|
|
819
809
|
**PR Verification Failure Handling:**
|
|
820
810
|
|
|
821
811
|
If `gh pr view` fails after retry:
|
|
@@ -1924,37 +1914,6 @@ You may be invoked multiple times for the same issue. Each time, re-establish co
|
|
|
1924
1914
|
|
|
1925
1915
|
---
|
|
1926
1916
|
|
|
1927
|
-
## State Tracking
|
|
1928
|
-
|
|
1929
|
-
**IMPORTANT:** Update workflow state when running standalone (not orchestrated).
|
|
1930
|
-
|
|
1931
|
-
### Check Orchestration Mode
|
|
1932
|
-
|
|
1933
|
-
The orchestration check happens automatically when you run the state update script - it exits silently if `SEQUANT_ORCHESTRATOR` is set.
|
|
1934
|
-
|
|
1935
|
-
### State Updates (Standalone Only)
|
|
1936
|
-
|
|
1937
|
-
When NOT orchestrated (`SEQUANT_ORCHESTRATOR` is not set):
|
|
1938
|
-
|
|
1939
|
-
**At skill start:**
|
|
1940
|
-
```bash
|
|
1941
|
-
npx tsx scripts/state/update.ts start <issue-number> exec
|
|
1942
|
-
```
|
|
1943
|
-
|
|
1944
|
-
**On successful completion:**
|
|
1945
|
-
```bash
|
|
1946
|
-
npx tsx scripts/state/update.ts complete <issue-number> exec
|
|
1947
|
-
```
|
|
1948
|
-
|
|
1949
|
-
**On failure:**
|
|
1950
|
-
```bash
|
|
1951
|
-
npx tsx scripts/state/update.ts fail <issue-number> exec "Error description"
|
|
1952
|
-
```
|
|
1953
|
-
|
|
1954
|
-
**Why this matters:** State tracking enables dashboard visibility, resume capability, and workflow orchestration. Skills update state when standalone; orchestrators handle state when running workflows.
|
|
1955
|
-
|
|
1956
|
-
---
|
|
1957
|
-
|
|
1958
1917
|
## Output Verification
|
|
1959
1918
|
|
|
1960
1919
|
**Before responding, verify your output includes ALL of these:**
|
|
@@ -854,33 +854,7 @@ As an orchestrator, `/fullsolve` must:
|
|
|
854
854
|
export SEQUANT_WORKTREE=<worktree-path>
|
|
855
855
|
```
|
|
856
856
|
|
|
857
|
-
2. **
|
|
858
|
-
```bash
|
|
859
|
-
npx tsx scripts/state/update.ts init <issue-number> "<issue-title>"
|
|
860
|
-
```
|
|
861
|
-
|
|
862
|
-
3. **Update phase status** at each transition:
|
|
863
|
-
```bash
|
|
864
|
-
# Before invoking child skill
|
|
865
|
-
npx tsx scripts/state/update.ts start <issue-number> <phase>
|
|
866
|
-
|
|
867
|
-
# After child skill completes
|
|
868
|
-
npx tsx scripts/state/update.ts complete <issue-number> <phase>
|
|
869
|
-
|
|
870
|
-
# If child skill fails
|
|
871
|
-
npx tsx scripts/state/update.ts fail <issue-number> <phase> "Error"
|
|
872
|
-
```
|
|
873
|
-
|
|
874
|
-
4. **Update final status** after workflow completes:
|
|
875
|
-
```bash
|
|
876
|
-
# On READY_FOR_MERGE
|
|
877
|
-
npx tsx scripts/state/update.ts status <issue-number> ready_for_merge
|
|
878
|
-
|
|
879
|
-
# On failure
|
|
880
|
-
npx tsx scripts/state/update.ts status <issue-number> blocked
|
|
881
|
-
```
|
|
882
|
-
|
|
883
|
-
**Why child skills skip state updates:** When `SEQUANT_ORCHESTRATOR` is set, child skills defer state management to the orchestrator to avoid duplicate updates.
|
|
857
|
+
2. **State tracking** is handled automatically by the orchestrator runtime when `SEQUANT_ORCHESTRATOR` is set. Child skills defer state management to the orchestrator to avoid duplicate updates.
|
|
884
858
|
|
|
885
859
|
---
|
|
886
860
|
|
|
@@ -122,10 +122,23 @@ Include this marker in every `gh issue comment` that represents QA completion.
|
|
|
122
122
|
Invocation:
|
|
123
123
|
|
|
124
124
|
- `/qa 123`: Treat `123` as the GitHub issue/PR identifier in context.
|
|
125
|
+
- `/qa 123 172`: Treat both as issue numbers — process each sequentially.
|
|
125
126
|
- `/qa <freeform description>`: Treat the text as context about the change to review.
|
|
126
127
|
- `/qa 123 --parallel`: Force parallel agent execution (faster, higher token usage).
|
|
127
128
|
- `/qa 123 --sequential`: Force sequential agent execution (slower, lower token usage).
|
|
128
129
|
|
|
130
|
+
### Multi-Issue Invocation
|
|
131
|
+
|
|
132
|
+
When multiple issue numbers are provided (e.g., `/qa 167 172`):
|
|
133
|
+
|
|
134
|
+
1. **Parse all issue numbers** from args
|
|
135
|
+
2. **Process each issue sequentially** with inline code review — do NOT spawn ad-hoc background agents for the diff reading or AC verification portions
|
|
136
|
+
3. The built-in `sequant-qa-checker` sub-agents (type safety, scope, security) continue to run per the size gate rules for each issue
|
|
137
|
+
4. Each issue gets its own full QA cycle: context fetch → diff review → quality checks → verdict → comment
|
|
138
|
+
5. Post a **separate QA comment** to each issue's GitHub thread
|
|
139
|
+
|
|
140
|
+
**Why sequential with inline review:** Ad-hoc background agents for code review are unreliable — they hallucinate about file existence, misattribute API patterns, and hit permission issues on worktree reads. The narrowly-scoped `sequant-qa-checker` agents work well because they have specific, bounded tasks. The code review portion must stay inline for accuracy.
|
|
141
|
+
|
|
129
142
|
### Agent Execution Mode
|
|
130
143
|
|
|
131
144
|
Before spawning quality check agents, determine the execution mode:
|
|
@@ -838,6 +851,12 @@ issue_type="${SEQUANT_ISSUE_TYPE:-}"
|
|
|
838
851
|
admin_modified=$(git diff main...HEAD --name-only | grep -E "^app/admin/" | head -1 || true)
|
|
839
852
|
```
|
|
840
853
|
|
|
854
|
+
**Add skill sync check if skill files modified:**
|
|
855
|
+
```bash
|
|
856
|
+
skill_modified=$(git diff main...HEAD --name-only | grep -E "^\.(claude/skills|skills|templates/skills)/" | head -1 || true)
|
|
857
|
+
```
|
|
858
|
+
If skill files are modified, the quality-checks.sh script automatically runs the three-directory sync check (section 12). If divergence is detected, this blocks `READY_FOR_MERGE` — verdict becomes `AC_MET_BUT_NOT_A_PLUS` with a note to run `npx tsx scripts/check-skill-sync.ts --fix`.
|
|
859
|
+
|
|
841
860
|
See [quality-gates.md](references/quality-gates.md) for detailed verdict synthesis.
|
|
842
861
|
|
|
843
862
|
### Using MCP Tools (Optional)
|
|
@@ -385,7 +385,53 @@ else
|
|
|
385
385
|
fi
|
|
386
386
|
|
|
387
387
|
# =============================================================================
|
|
388
|
-
#
|
|
388
|
+
# =============================================================================
|
|
389
|
+
# 11.5. Skill Sync Check (when skill files modified)
|
|
390
|
+
# =============================================================================
|
|
391
|
+
echo ""
|
|
392
|
+
skill_files_changed=$(git diff main...HEAD --name-only | grep -E '^\.(claude/skills|skills|templates/skills)/' || true)
|
|
393
|
+
if [[ -n "$skill_files_changed" ]]; then
|
|
394
|
+
echo "🔍 Checking three-directory skill sync..."
|
|
395
|
+
if [[ -f "scripts/check-skill-sync.ts" ]]; then
|
|
396
|
+
sync_output=$(npx tsx scripts/check-skill-sync.ts 2>&1 || true)
|
|
397
|
+
sync_exit=$?
|
|
398
|
+
sync_summary=$(echo "$sync_output" | grep "^Summary:" || true)
|
|
399
|
+
if [[ $sync_exit -ne 0 ]]; then
|
|
400
|
+
echo "⚠️ Skill sync: DIVERGENCE DETECTED"
|
|
401
|
+
echo "$sync_summary"
|
|
402
|
+
echo " Run: npx tsx scripts/check-skill-sync.ts --fix"
|
|
403
|
+
else
|
|
404
|
+
echo "✅ Skill sync: All files synced across 3 directories"
|
|
405
|
+
fi
|
|
406
|
+
else
|
|
407
|
+
echo " (scripts/check-skill-sync.ts not found — using inline diff)"
|
|
408
|
+
diverged=0
|
|
409
|
+
for f in $skill_files_changed; do
|
|
410
|
+
if [[ "$f" == .claude/skills/* ]]; then
|
|
411
|
+
rel="${f#.claude/skills/}"
|
|
412
|
+
for mirror in "templates/skills" "skills"; do
|
|
413
|
+
if [[ -f "${mirror}/${rel}" ]]; then
|
|
414
|
+
if ! diff -q ".claude/skills/${rel}" "${mirror}/${rel}" > /dev/null 2>&1; then
|
|
415
|
+
echo " ⚠️ DIVERGED: ${rel} (.claude/skills vs ${mirror})"
|
|
416
|
+
diverged=$((diverged + 1))
|
|
417
|
+
fi
|
|
418
|
+
fi
|
|
419
|
+
done
|
|
420
|
+
fi
|
|
421
|
+
done
|
|
422
|
+
if [[ $diverged -eq 0 ]]; then
|
|
423
|
+
echo "✅ Skill sync: Changed skill files are synced"
|
|
424
|
+
else
|
|
425
|
+
echo "⚠️ Skill sync: ${diverged} file(s) diverged"
|
|
426
|
+
echo " Fix: copy from .claude/skills/ to templates/skills/ and skills/"
|
|
427
|
+
fi
|
|
428
|
+
fi
|
|
429
|
+
else
|
|
430
|
+
echo "🔍 Skill sync: No skill files changed (skipped)"
|
|
431
|
+
fi
|
|
432
|
+
|
|
433
|
+
# =============================================================================
|
|
434
|
+
# 12. Build Verification (cacheable - expensive operation)
|
|
389
435
|
# =============================================================================
|
|
390
436
|
|
|
391
437
|
verify_build_against_main() {
|