slash-do 1.9.0 → 2.1.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 +3 -2
- package/commands/do/better-swift.md +28 -10
- package/commands/do/better.md +59 -18
- package/commands/do/depfree.md +525 -0
- package/commands/do/goals.md +26 -15
- package/commands/do/help.md +1 -0
- package/commands/do/release.md +9 -4
- package/commands/do/replan.md +35 -10
- package/commands/do/review.md +30 -2
- package/commands/do/rpr.md +15 -5
- package/lib/code-review-checklist.md +19 -12
- package/lib/copilot-review-loop.md +10 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
<p align="center">
|
|
25
25
|
<img src="https://img.shields.io/npm/v/slash-do?style=flat-square&color=blue" alt="npm version" />
|
|
26
26
|
<img src="https://img.shields.io/badge/environments-4-green?style=flat-square" alt="environments" />
|
|
27
|
-
<img src="https://img.shields.io/badge/commands-
|
|
27
|
+
<img src="https://img.shields.io/badge/commands-14-orange?style=flat-square" alt="commands" />
|
|
28
28
|
<img src="https://img.shields.io/badge/license-MIT-lightgrey?style=flat-square" alt="license" />
|
|
29
29
|
</p>
|
|
30
30
|
|
|
@@ -60,8 +60,9 @@ All commands live under the `do:` namespace:
|
|
|
60
60
|
| `/do:rpr` | Resolve PR review feedback with parallel agents |
|
|
61
61
|
| `/do:release` | Create a release PR with version bump and changelog |
|
|
62
62
|
| `/do:review` | Deep code review against best practices |
|
|
63
|
-
| `/do:better` | Full DevSecOps audit with
|
|
63
|
+
| `/do:better` | Full DevSecOps audit with 8-agent scan and remediation |
|
|
64
64
|
| `/do:better-swift` | SwiftUI DevSecOps audit with multi-platform coverage |
|
|
65
|
+
| `/do:depfree` | Audit dependencies, remove unnecessary ones, write replacement code |
|
|
65
66
|
| `/do:goals` | Generate GOALS.md from codebase analysis |
|
|
66
67
|
| `/do:replan` | Review and clean up PLAN.md |
|
|
67
68
|
| `/do:omd` | Audit and optimize markdown files |
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: SwiftUI DevSecOps audit, remediation, test enhancement, per-category PRs, CI verification, and Copilot review loop with worktree isolation — optimized for multi-platform Swift/SwiftUI apps (iOS, macOS, watchOS, tvOS, visionOS)
|
|
3
|
-
argument-hint: "[--scan-only] [--no-merge] [path filter or focus areas]"
|
|
3
|
+
argument-hint: "[--interactive] [--scan-only] [--no-merge] [path filter or focus areas]"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Better Swift — Unified DevSecOps Pipeline for SwiftUI Apps
|
|
7
7
|
|
|
8
8
|
Run the full DevSecOps lifecycle optimized for Swift/SwiftUI multi-platform projects: audit the codebase with 7 deduplicated agents, consolidate findings, remediate in an isolated worktree, create **separate PRs per category** with SemVer bump, verify CI, run Copilot review loops, and merge.
|
|
9
9
|
|
|
10
|
+
**Default mode: fully autonomous.** Uses Balanced model profile, proceeds through all phases without prompting, auto-merges PRs with clean reviews.
|
|
11
|
+
|
|
12
|
+
**`--interactive` mode:** Pauses for model profile selection, review findings approval, guardrail decisions, and merge confirmation.
|
|
13
|
+
|
|
10
14
|
Parse `$ARGUMENTS` for:
|
|
15
|
+
- **`--interactive`**: pause at each decision point for user approval
|
|
11
16
|
- **`--scan-only`**: run Phase 0 + 1 + 2 only (audit and plan), skip remediation
|
|
12
17
|
- **`--no-merge`**: run through PR creation (Phase 5), skip Copilot review and merge
|
|
13
18
|
- **Path filter**: limit scanning scope to specific directories or files
|
|
@@ -15,7 +20,13 @@ Parse `$ARGUMENTS` for:
|
|
|
15
20
|
|
|
16
21
|
## Configuration
|
|
17
22
|
|
|
18
|
-
|
|
23
|
+
### Default Mode (autonomous)
|
|
24
|
+
|
|
25
|
+
Use the **Balanced** model profile automatically (`AUDIT_MODEL=sonnet`, `REMEDIATION_MODEL=sonnet`).
|
|
26
|
+
|
|
27
|
+
### Interactive Mode (`--interactive`)
|
|
28
|
+
|
|
29
|
+
Present the user with configuration options using `AskUserQuestion`:
|
|
19
30
|
|
|
20
31
|
```
|
|
21
32
|
AskUserQuestion([
|
|
@@ -562,7 +573,8 @@ Before creating PRs, run a deep code review on all remediation changes to catch
|
|
|
562
573
|
3. For each issue found:
|
|
563
574
|
- Fix in a new commit: `fix: {description of review finding}`
|
|
564
575
|
- Re-run `{BUILD_CMD}` and `{TEST_CMD}` on ALL platforms to verify
|
|
565
|
-
4.
|
|
576
|
+
4. **Default mode**: Print a brief summary of findings and fixes, then proceed to PR creation automatically.
|
|
577
|
+
**Interactive mode (`--interactive`)**: Present a summary to the user via `AskUserQuestion`:
|
|
566
578
|
```
|
|
567
579
|
AskUserQuestion([{
|
|
568
580
|
question: "Code review complete. {N} issues found and fixed. {list}. All {PLATFORMS} platforms build and test successfully. Proceed to PR creation?",
|
|
@@ -574,7 +586,7 @@ Before creating PRs, run a deep code review on all remediation changes to catch
|
|
|
574
586
|
]
|
|
575
587
|
}])
|
|
576
588
|
```
|
|
577
|
-
5. If "Show diff" selected, print the diff and re-ask. If "Abort", stop and print the worktree path.
|
|
589
|
+
5. (Interactive only) If "Show diff" selected, print the diff and re-ask. If "Abort", stop and print the worktree path.
|
|
578
590
|
6. If "Commit directly" selected:
|
|
579
591
|
- All remediation and review fixes are already committed incrementally in the worktree branch `better-swift/{DATE}`. If any uncommitted changes remain, stage and commit them now:
|
|
580
592
|
```bash
|
|
@@ -850,7 +862,7 @@ After creating all PRs, verify CI passes on each one:
|
|
|
850
862
|
|
|
851
863
|
## Phase 6: Copilot Review Loop (GitHub only)
|
|
852
864
|
|
|
853
|
-
Loop until Copilot returns zero new comments (no fixed iteration limit). Sub-agents enforce a 10-iteration guardrail: at iteration 10 the sub-agent stops and returns a "guardrail" status
|
|
865
|
+
Loop until Copilot returns zero new comments (no fixed iteration limit). Sub-agents enforce a 10-iteration guardrail: at iteration 10 the sub-agent stops and returns a "guardrail" status. **Default mode**: auto-stop at the guardrail. **Interactive mode (`--interactive`)**: prompt the parent agent to ask the user whether to continue or stop.
|
|
854
866
|
|
|
855
867
|
**Sub-agent delegation** (prevents context exhaustion): delegate each PR's review loop to a **separate general-purpose sub-agent** via the Agent tool. Launch sub-agents in parallel (one per PR). Each sub-agent runs the full loop (request → wait → check → fix → re-request) autonomously and returns only the final status.
|
|
856
868
|
|
|
@@ -870,13 +882,19 @@ Launch all PR sub-agents in parallel. Wait for all to complete.
|
|
|
870
882
|
|
|
871
883
|
For each sub-agent result:
|
|
872
884
|
- **clean**: mark PR as ready to merge
|
|
873
|
-
- **timeout**:
|
|
874
|
-
- **error**: inform the user and ask whether to retry or skip
|
|
875
|
-
- **guardrail**: the sub-agent hit the 10-iteration limit
|
|
885
|
+
- **timeout**: **Default mode**: skip the timed-out PR and continue. **Interactive mode**: inform the user and ask whether to continue waiting, re-request, or skip
|
|
886
|
+
- **error**: **Default mode**: retry up to 3 times, then skip. **Interactive mode**: inform the user and ask whether to retry or skip
|
|
887
|
+
- **guardrail**: the sub-agent hit the 10-iteration limit. **Default mode**: auto-stop and mark as best-effort. **Interactive mode**: ask the user whether to continue with more iterations or stop
|
|
876
888
|
|
|
877
889
|
### 6.3: Merge Gate (MANDATORY)
|
|
878
890
|
|
|
879
|
-
**Do NOT merge any PR until Copilot review has completed (approved or commented
|
|
891
|
+
**Do NOT merge any PR until its own Copilot review has completed (approved or commented with zero unresolved issues).**
|
|
892
|
+
|
|
893
|
+
### Default Mode (autonomous)
|
|
894
|
+
|
|
895
|
+
Print the review status summary, then auto-merge all PRs whose reviews completed cleanly. PRs that timed out, hit guardrails, or still have unresolved comments are left open for manual review. Print which PRs were merged and which were left open.
|
|
896
|
+
|
|
897
|
+
### Interactive Mode (`--interactive`)
|
|
880
898
|
|
|
881
899
|
Present the review status summary to the user via `AskUserQuestion`:
|
|
882
900
|
```
|
|
@@ -891,7 +909,7 @@ AskUserQuestion([{
|
|
|
891
909
|
}])
|
|
892
910
|
```
|
|
893
911
|
|
|
894
|
-
Only proceed with merging based on the user's selection.
|
|
912
|
+
Only proceed with merging based on the user's selection.
|
|
895
913
|
|
|
896
914
|
### 6.4: Merge
|
|
897
915
|
|
package/commands/do/better.md
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Unified DevSecOps audit, remediation, test enhancement, per-category PRs, CI verification, and Copilot review loop with worktree isolation
|
|
3
|
-
argument-hint: "[--scan-only] [--no-merge] [path filter or focus areas]"
|
|
3
|
+
argument-hint: "[--interactive] [--scan-only] [--no-merge] [path filter or focus areas]"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Better — Unified DevSecOps Pipeline
|
|
7
7
|
|
|
8
|
-
Run the full DevSecOps lifecycle: audit the codebase with
|
|
8
|
+
Run the full DevSecOps lifecycle: audit the codebase with 8 deduplicated agents, consolidate findings, remediate in an isolated worktree, create **separate PRs per category** with SemVer bump, verify CI, run Copilot review loops, and merge.
|
|
9
|
+
|
|
10
|
+
**Default mode: fully autonomous.** Uses Balanced model profile, proceeds through all phases without prompting, auto-merges PRs with clean reviews.
|
|
11
|
+
|
|
12
|
+
**`--interactive` mode:** Pauses for model profile selection, review findings approval, guardrail decisions, and merge confirmation.
|
|
9
13
|
|
|
10
14
|
Parse `$ARGUMENTS` for:
|
|
15
|
+
- **`--interactive`**: pause at each decision point for user approval
|
|
11
16
|
- **`--scan-only`**: run Phase 0 + 1 + 2 only (audit and plan), skip remediation
|
|
12
17
|
- **`--no-merge`**: run through PR creation (Phase 5), skip Copilot review and merge
|
|
13
18
|
- **Path filter**: limit scanning scope to specific directories or files
|
|
@@ -15,7 +20,13 @@ Parse `$ARGUMENTS` for:
|
|
|
15
20
|
|
|
16
21
|
## Configuration
|
|
17
22
|
|
|
18
|
-
|
|
23
|
+
### Default Mode (autonomous)
|
|
24
|
+
|
|
25
|
+
Use the **Balanced** model profile automatically (`AUDIT_MODEL=sonnet`, `REMEDIATION_MODEL=sonnet`).
|
|
26
|
+
|
|
27
|
+
### Interactive Mode (`--interactive`)
|
|
28
|
+
|
|
29
|
+
Present the user with configuration options using `AskUserQuestion`:
|
|
19
30
|
|
|
20
31
|
```
|
|
21
32
|
AskUserQuestion([
|
|
@@ -36,7 +47,7 @@ Record the selection as `MODEL_PROFILE` and derive agent models from this table:
|
|
|
36
47
|
|
|
37
48
|
| Agent Role | Quality | Balanced | Budget |
|
|
38
49
|
|------------|---------|----------|--------|
|
|
39
|
-
| Audit agents (
|
|
50
|
+
| Audit agents (8 Explore agents, Phase 1) | opus | sonnet | haiku |
|
|
40
51
|
| Remediation agents (general-purpose, Phase 3) | opus | sonnet | sonnet |
|
|
41
52
|
|
|
42
53
|
Derive two variables:
|
|
@@ -110,7 +121,7 @@ Record as `BUILD_CMD` and `TEST_CMD`.
|
|
|
110
121
|
|
|
111
122
|
Project conventions are already in your context. Pass relevant conventions to each agent.
|
|
112
123
|
|
|
113
|
-
Launch
|
|
124
|
+
Launch 8 Explore agents in two batches. Each agent must report findings in this format:
|
|
114
125
|
```
|
|
115
126
|
- **[CRITICAL/HIGH/MEDIUM/LOW]** `file:line` - Description. Suggested fix: ... Complexity: Simple/Medium/Complex
|
|
116
127
|
```
|
|
@@ -163,7 +174,7 @@ Skip step 4 if steps 1-3 reveal the code is correct.
|
|
|
163
174
|
Resilience: external calls without timeouts, missing fallback for unavailable downstream services, retry without backoff ceiling/jitter, missing health check endpoints
|
|
164
175
|
Observability: production paths without structured logging, error logs missing reproduction context (request ID, input params), async flows without correlation IDs
|
|
165
176
|
|
|
166
|
-
### Batch 2 (
|
|
177
|
+
### Batch 2 (3 agents after Batch 1 completes):
|
|
167
178
|
|
|
168
179
|
**Model**: Same `AUDIT_MODEL` as Batch 1.
|
|
169
180
|
|
|
@@ -177,14 +188,27 @@ Skip step 4 if steps 1-3 reveal the code is correct.
|
|
|
177
188
|
- **Database migrations**: exclusive-lock ALTER TABLE on large tables, CREATE INDEX without CONCURRENTLY, missing down migrations or untested rollback paths
|
|
178
189
|
- General: framework-specific security issues, language-specific gotchas, domain-specific compliance, environment variable hygiene (missing `.env.example`, required env vars not validated at startup, secrets in config files that should be in env)
|
|
179
190
|
|
|
180
|
-
7. **
|
|
191
|
+
7. **Dependency Freedom**
|
|
192
|
+
Audit all third-party dependencies for necessity. Every small library is an attack surface — supply chain compromises are real and common.
|
|
193
|
+
Focus:
|
|
194
|
+
- Extract the full dependency list from the project manifest (`package.json`, `Cargo.toml`, `pyproject.toml`, `go.mod`, `Gemfile`, etc.)
|
|
195
|
+
- Classify each dependency into tiers:
|
|
196
|
+
- **Acceptable**: large, widely-audited libraries (react, express, d3, three.js, next, vue, fastify, typescript, eslint, prisma, tailwindcss, tokio, serde, django, flask, pandas, etc.) — skip these
|
|
197
|
+
- **Suspect**: smaller libraries where we may only use 1-2 functions, wrappers over built-in APIs, single-purpose utilities
|
|
198
|
+
- **Removable**: libraries where the used functionality is <50 lines to implement, wraps a now-native API (e.g., `crypto.randomUUID()` replacing uuid, `structuredClone` replacing lodash.cloneDeep, `Array.prototype.flat` replacing array-flatten, `node:fs/promises` replacing fs-extra for most uses), unmaintained with known vulnerabilities, or micro-packages (is-odd, is-number, left-pad tier)
|
|
199
|
+
- For each suspect/removable dependency: search all source files for imports, list every function/class/type used, count call sites, assess replacement complexity (Trivial <20 lines, Moderate 20-100, Complex 100-300, Infeasible 300+)
|
|
200
|
+
- Check maintenance status: last publish date, open security issues, known CVEs
|
|
201
|
+
- Report format: `**[SEVERITY]** {package-name} — {Tier}. Uses: {functions}. Call sites: {N} in {M} files. Replacement: {complexity}. Reason: {why removable}`
|
|
202
|
+
- Severity mapping: unmaintained with CVEs → CRITICAL, unmaintained without CVEs → HIGH, replaceable single-function usage → MEDIUM, suspect but complex replacement → LOW
|
|
203
|
+
|
|
204
|
+
8. **Test Quality & Coverage**
|
|
181
205
|
Uses Batch 1 findings as context to prioritize.
|
|
182
206
|
Focus areas:
|
|
183
207
|
|
|
184
208
|
**Coverage gaps:**
|
|
185
209
|
- Missing test files for critical modules, untested edge cases, tests that only cover happy paths
|
|
186
210
|
- Areas with high complexity (identified by agents 1-5) but no tests
|
|
187
|
-
- Remediation changes from agents 1-
|
|
211
|
+
- Remediation changes from agents 1-7 that lack corresponding test coverage
|
|
188
212
|
|
|
189
213
|
**Vacuous tests (tests that don't actually test anything):**
|
|
190
214
|
- Tests that assert on mocked return values instead of real behavior (testing the mock, not the code)
|
|
@@ -246,6 +270,7 @@ For each file touched by multiple categories, document why it was assigned to on
|
|
|
246
270
|
### Architecture & SOLID
|
|
247
271
|
### Bugs, Performance & Error Handling
|
|
248
272
|
### Stack-Specific
|
|
273
|
+
### Dependency Freedom
|
|
249
274
|
### Test Quality & Coverage
|
|
250
275
|
```
|
|
251
276
|
|
|
@@ -256,6 +281,7 @@ For each file touched by multiple categories, document why it was assigned to on
|
|
|
256
281
|
- Architecture → Architecture & SOLID → `architecture`
|
|
257
282
|
- Bugs & Perf → Bugs, Performance & Error Handling → `bugs-perf`
|
|
258
283
|
- Stack-Specific → Stack-Specific → `stack-specific`
|
|
284
|
+
- Dep Freedom → Dependency Freedom → `deps`
|
|
259
285
|
- Tests → Test Quality & Coverage → `tests`
|
|
260
286
|
|
|
261
287
|
```
|
|
@@ -267,6 +293,7 @@ For each file touched by multiple categories, document why it was assigned to on
|
|
|
267
293
|
| Architecture | ... | ... | ... | ... | ... |
|
|
268
294
|
| Bugs & Perf | ... | ... | ... | ... | ... |
|
|
269
295
|
| Stack-Specific | ... | ... | ... | ... | ... |
|
|
296
|
+
| Dep Freedom | ... | ... | ... | ... | ... |
|
|
270
297
|
| Tests | ... | ... | ... | ... | ... |
|
|
271
298
|
| TOTAL | ... | ... | ... | ... | ... |
|
|
272
299
|
```
|
|
@@ -321,6 +348,7 @@ If no shared utilities were identified, skip this step.
|
|
|
321
348
|
- Architecture & SOLID
|
|
322
349
|
- Bugs, Performance & Error Handling
|
|
323
350
|
- Stack-Specific
|
|
351
|
+
- Dependency Freedom
|
|
324
352
|
3. Only create tasks for categories that have actionable findings
|
|
325
353
|
4. Spawn up to 5 general-purpose agents as teammates. **Pass `REMEDIATION_MODEL` as the `model` parameter on each agent.** If `REMEDIATION_MODEL` is `opus`, omit the parameter to inherit from session.
|
|
326
354
|
|
|
@@ -328,9 +356,13 @@ If no shared utilities were identified, skip this step.
|
|
|
328
356
|
|
|
329
357
|
!`cat ~/.claude/lib/remediation-agent-template.md`
|
|
330
358
|
|
|
359
|
+
### Dependency Freedom agent — special instructions:
|
|
360
|
+
The Dependency Freedom remediation agent has a unique task: for each removable dependency, it must (1) write replacement code (utility function or inline native API call), (2) update ALL import/require statements across the codebase, (3) remove the package from the manifest, and (4) regenerate the lock file (`npm install` / `cargo update` / etc.). After all replacements, verify no source file still references the removed package. See `/do:depfree` Phase 3b for the full agent template.
|
|
361
|
+
|
|
331
362
|
### Conflict avoidance:
|
|
332
363
|
- Review all findings before task assignment. If two categories touch the same file, assign both sets of findings to the same agent.
|
|
333
364
|
- Security agent gets priority on validation logic; DRY agent gets priority on import consolidation.
|
|
365
|
+
- Dependency Freedom agent gets priority on files that are solely import/usage sites of a removed package.
|
|
334
366
|
|
|
335
367
|
</plan_and_remediate>
|
|
336
368
|
|
|
@@ -370,7 +402,8 @@ Before creating PRs, run a deep code review on all remediation changes to catch
|
|
|
370
402
|
3. For each issue found:
|
|
371
403
|
- Fix in a new commit: `fix: {description of review finding}`
|
|
372
404
|
- Re-run `{BUILD_CMD}` and `{TEST_CMD}` to verify
|
|
373
|
-
4.
|
|
405
|
+
4. **Default mode**: Print a brief summary of findings and fixes, then proceed to PR creation automatically.
|
|
406
|
+
**Interactive mode (`--interactive`)**: Present a summary to the user via `AskUserQuestion`:
|
|
374
407
|
```
|
|
375
408
|
AskUserQuestion([{
|
|
376
409
|
question: "Code review complete. {N} issues found and fixed. {list}. Proceed to PR creation?",
|
|
@@ -382,7 +415,7 @@ Before creating PRs, run a deep code review on all remediation changes to catch
|
|
|
382
415
|
]
|
|
383
416
|
}])
|
|
384
417
|
```
|
|
385
|
-
5. If "Show diff" selected, print the diff and re-ask. If "Abort", stop and print the worktree path.
|
|
418
|
+
5. (Interactive only) If "Show diff" selected, print the diff and re-ask. If "Abort", stop and print the worktree path.
|
|
386
419
|
6. If "Commit directly" selected:
|
|
387
420
|
- All remediation and review fixes are already committed incrementally in the worktree branch `better/{DATE}`. If any uncommitted changes remain, stage and commit them now:
|
|
388
421
|
```bash
|
|
@@ -421,7 +454,7 @@ PHASE_4C_START_SHA="$(git rev-parse HEAD)"
|
|
|
421
454
|
|
|
422
455
|
### 4c.1: Test Audit Triage
|
|
423
456
|
|
|
424
|
-
Review Agent
|
|
457
|
+
Review Agent 8 (Test Quality & Coverage) findings from Phase 1 and categorize them:
|
|
425
458
|
|
|
426
459
|
1. **`[VACUOUS]` findings** — tests that exist but don't test real behavior. These are the highest priority because they create a false sense of safety.
|
|
427
460
|
2. **`[WEAK]` findings** — tests that partially cover behavior but miss important cases. Strengthen with additional assertions and edge cases.
|
|
@@ -523,7 +556,7 @@ Initialize `CREATED_CATEGORY_SLUGS=""` (empty space-delimited string). After eac
|
|
|
523
556
|
For each category that has findings:
|
|
524
557
|
1. Switch to `{DEFAULT_BRANCH}`: `git checkout {DEFAULT_BRANCH}`
|
|
525
558
|
2. Create a category branch: `git checkout -b better/{CATEGORY_SLUG}`
|
|
526
|
-
- Use slugs: `security`, `code-quality`, `dry`, `architecture`, `bugs-perf`, `stack-specific`, `tests`
|
|
559
|
+
- Use slugs: `security`, `code-quality`, `dry`, `architecture`, `bugs-perf`, `stack-specific`, `deps`, `tests`
|
|
527
560
|
3. For each file assigned to this category in `FILE_OWNER_MAP`:
|
|
528
561
|
- **Modified files**: `git checkout better/{DATE} -- {file_path}`
|
|
529
562
|
- **New files (Added)**: `git checkout better/{DATE} -- {file_path}`
|
|
@@ -638,7 +671,7 @@ After creating all PRs, verify CI passes on each one:
|
|
|
638
671
|
|
|
639
672
|
## Phase 6: Copilot Review Loop (GitHub only)
|
|
640
673
|
|
|
641
|
-
Loop until Copilot returns zero new comments (no fixed iteration limit). Sub-agents enforce a 10-iteration guardrail: at iteration 10 the sub-agent stops and returns a "guardrail" status
|
|
674
|
+
Loop until Copilot returns zero new comments (no fixed iteration limit). Sub-agents enforce a 10-iteration guardrail: at iteration 10 the sub-agent stops and returns a "guardrail" status. **Default mode**: auto-stop at the guardrail. **Interactive mode (`--interactive`)**: prompt the parent agent to ask the user whether to continue or stop.
|
|
642
675
|
|
|
643
676
|
**Sub-agent delegation** (prevents context exhaustion): delegate each PR's review loop to a **separate general-purpose sub-agent** via the Agent tool. Launch sub-agents in parallel (one per PR). Each sub-agent runs the full loop (request → wait → check → fix → re-request) autonomously and returns only the final status.
|
|
644
677
|
|
|
@@ -656,13 +689,19 @@ Launch all PR sub-agents in parallel. Wait for all to complete.
|
|
|
656
689
|
|
|
657
690
|
For each sub-agent result:
|
|
658
691
|
- **clean**: mark PR as ready to merge
|
|
659
|
-
- **timeout**:
|
|
660
|
-
- **error**: inform the user and ask whether to retry or skip
|
|
661
|
-
- **guardrail**: the sub-agent hit the 10-iteration limit
|
|
692
|
+
- **timeout**: **Default mode**: skip the timed-out PR and continue. **Interactive mode**: inform the user and ask whether to continue waiting, re-request, or skip
|
|
693
|
+
- **error**: **Default mode**: retry up to 3 times, then skip. **Interactive mode**: inform the user and ask whether to retry or skip
|
|
694
|
+
- **guardrail**: the sub-agent hit the 10-iteration limit. **Default mode**: auto-stop and mark as best-effort. **Interactive mode**: ask the user whether to continue with more iterations or stop
|
|
662
695
|
|
|
663
696
|
### 6.3: Merge Gate (MANDATORY)
|
|
664
697
|
|
|
665
|
-
**Do NOT merge any PR until Copilot review has completed (approved or commented
|
|
698
|
+
**Do NOT merge any PR until its own Copilot review has completed (approved or commented with zero unresolved issues).**
|
|
699
|
+
|
|
700
|
+
### Default Mode (autonomous)
|
|
701
|
+
|
|
702
|
+
Print the review status summary, then auto-merge all PRs whose reviews completed cleanly. PRs that timed out, hit guardrails, or still have unresolved comments are left open for manual review. Print which PRs were merged and which were left open.
|
|
703
|
+
|
|
704
|
+
### Interactive Mode (`--interactive`)
|
|
666
705
|
|
|
667
706
|
Present the review status summary to the user via `AskUserQuestion`:
|
|
668
707
|
```
|
|
@@ -677,7 +716,7 @@ AskUserQuestion([{
|
|
|
677
716
|
}])
|
|
678
717
|
```
|
|
679
718
|
|
|
680
|
-
Only proceed with merging based on the user's selection.
|
|
719
|
+
Only proceed with merging based on the user's selection.
|
|
681
720
|
|
|
682
721
|
### 6.4: Merge
|
|
683
722
|
|
|
@@ -739,6 +778,7 @@ If merge fails (e.g., branch protection, merge conflicts from a prior PR):
|
|
|
739
778
|
| Architecture | ... | ... | ... | #number | pass | approved |
|
|
740
779
|
| Bugs & Perf | ... | ... | ... | #number | pass | approved |
|
|
741
780
|
| Stack-Specific | ... | ... | ... | #number | pass | approved |
|
|
781
|
+
| Dep Freedom | ... | ... | ... | #number | pass | approved |
|
|
742
782
|
| Tests | ... | ... | ... | #number | pass | approved |
|
|
743
783
|
| TOTAL | ... | ... | ... | N PRs | | |
|
|
744
784
|
|
|
@@ -773,6 +813,7 @@ Test Enhancement Stats:
|
|
|
773
813
|
- When extracting modules, always add backward-compatible re-exports in the original module to prevent cross-PR breakage
|
|
774
814
|
- Version bump happens exactly once on the first category branch based on aggregate commit analysis
|
|
775
815
|
- Only CRITICAL, HIGH, and MEDIUM findings are auto-remediated for code categories; LOW findings remain tracked in PLAN.md
|
|
816
|
+
- Dependency Freedom findings replace unnecessary third-party packages with owned code — see `/do:depfree` for standalone usage
|
|
776
817
|
- Test Quality & Coverage findings are remediated in Phase 4c with a dedicated test enhancement agent that verifies tests fail when code is broken
|
|
777
818
|
- GitLab projects skip the Copilot review loop entirely (Phase 6) and stop after MR creation
|
|
778
819
|
- CI must pass on each PR before requesting Copilot review or merging
|