claude-dev-env 1.86.0 → 1.87.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/agents/code-quality-agent.md +1 -1
- package/package.json +1 -1
- package/skills/autoconverge/SKILL.md +14 -7
- package/skills/autoconverge/reference/convergence.md +25 -5
- package/skills/autoconverge/reference/gotchas.md +3 -2
- package/skills/autoconverge/reference/stop-conditions.md +22 -6
- package/skills/autoconverge/workflow/converge.clean-audit.test.mjs +528 -1
- package/skills/autoconverge/workflow/converge.contract.test.mjs +204 -26
- package/skills/autoconverge/workflow/converge.copilot-gate.test.mjs +90 -21
- package/skills/autoconverge/workflow/converge.mjs +581 -136
package/package.json
CHANGED
|
@@ -324,7 +324,10 @@ out of a Bash command string entirely and independent of which auto-allow path
|
|
|
324
324
|
matches.
|
|
325
325
|
|
|
326
326
|
- **Converge:** `parallel([Bugbot lens, code-review lens, bug-audit lens])` on
|
|
327
|
-
the current HEAD, full `origin/main...HEAD` diff.
|
|
327
|
+
the current HEAD, full `origin/main...HEAD` diff. The preflight step fetches
|
|
328
|
+
`origin/main` once for the round and enumerates the diff (changed-file list plus
|
|
329
|
+
diffstat); each lens receives that list and reads only the files it needs rather
|
|
330
|
+
than re-deriving the diff, forming its own review judgment. Dedup findings; one
|
|
328
331
|
`clean-coder` applies the round's fixes per the `pr-fix-protocol` skill
|
|
329
332
|
(`../pr-fix-protocol/SKILL.md`) — fix, reply, resolve — landing every fix in
|
|
330
333
|
one commit per round, which the workflow journal records; re-verify next
|
|
@@ -344,8 +347,12 @@ matches.
|
|
|
344
347
|
out-of-usage notice (the requester hit their quota) on the HEAD, or surfaces no
|
|
345
348
|
review at all after the configured cap — the gate logs a notice and the run marks the PR
|
|
346
349
|
ready with the Copilot gate bypassed. `copilotNote` records the bypass.
|
|
347
|
-
- **Convergence check:** `check_convergence.py` is the authoritative gate;
|
|
348
|
-
full pass
|
|
350
|
+
- **Convergence check:** `check_convergence.py` is the authoritative gate; one
|
|
351
|
+
agent runs it and, on a full pass, marks `draft=false` in the same turn. Each
|
|
352
|
+
spawned agent runs on the model tier its role needs — opus/medium for the review
|
|
353
|
+
lenses and the code-editing fix steps, sonnet/medium for the verify, commit, and
|
|
354
|
+
recovery steps, haiku/low for the mechanical probes (preflight, Copilot gate,
|
|
355
|
+
CLEAN-audit post, convergence check).
|
|
349
356
|
|
|
350
357
|
## Multiple PRs
|
|
351
358
|
|
|
@@ -476,10 +483,10 @@ and `jl-cmd/claude-code-config` for rules and skills both appear):
|
|
|
476
483
|
2. **Converge the generation.** Launch `workflow/converge_multi.mjs` with one
|
|
477
484
|
entry per checked-out deferred PR, exactly as the
|
|
478
485
|
[multi-PR launch](#launch-the-multi-pr-workflow) describes. Each child run
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
generation; the `copilotDisabled`/`bugbotDisabled` flags each
|
|
482
|
-
seed that check for the first round.
|
|
486
|
+
checks Copilot and Bugbot availability through the workflow's own preflight-git
|
|
487
|
+
probe, carried across rounds, so a reviewer that is down or out of quota is never
|
|
488
|
+
spawned in any generation; the `copilotDisabled`/`bugbotDisabled` flags each
|
|
489
|
+
deferred PR carries seed that check for the first round.
|
|
483
490
|
3. **Tear down.** Run the [multi-PR teardown](#multi-pr-teardown-on-workflow-completion)
|
|
484
491
|
over the generation's `results`, and revoke project permissions once per
|
|
485
492
|
repository.
|
|
@@ -46,9 +46,14 @@ tracks CONVERGE passes only and is never the cap.
|
|
|
46
46
|
|
|
47
47
|
**CONVERGE** (one round = one parallel sweep):
|
|
48
48
|
|
|
49
|
-
1. Resolve the current PR HEAD SHA.
|
|
49
|
+
1. Resolve the current PR HEAD SHA. The same preflight step also fetches
|
|
50
|
+
`origin/main` once for the round and enumerates the diff — the
|
|
51
|
+
`git diff --name-status origin/main...HEAD` changed-file list and the
|
|
52
|
+
`git diff --stat` diffstat — and carries both into the round.
|
|
50
53
|
2. Run three lenses in parallel on that HEAD, each over the full
|
|
51
|
-
`origin/main...HEAD` diff
|
|
54
|
+
`origin/main...HEAD` diff. Each lens receives the preflight's changed-file
|
|
55
|
+
list and diffstat and reads only the files it needs from that list rather than
|
|
56
|
+
re-deriving the diff; each lens forms its own review judgment.
|
|
52
57
|
- **Bugbot lens** — drive Cursor Bugbot to a verdict on HEAD (trigger and
|
|
53
58
|
poll its CI check run when needed) and return its findings, or mark itself
|
|
54
59
|
down when Bugbot is opted out or unreachable.
|
|
@@ -89,9 +94,24 @@ tracks CONVERGE passes only and is never the cap.
|
|
|
89
94
|
|
|
90
95
|
**Convergence check**:
|
|
91
96
|
|
|
92
|
-
-
|
|
93
|
-
|
|
94
|
-
failing gate
|
|
97
|
+
- One agent runs `check_convergence.py` and, on a full pass, marks the PR ready
|
|
98
|
+
(`draft=false`) in the same turn, ending the run. A failure returns to CONVERGE
|
|
99
|
+
so the next round addresses the failing gate; the repair path re-runs this same
|
|
100
|
+
check, and only a passing check marks the PR ready.
|
|
101
|
+
|
|
102
|
+
## Model tiers
|
|
103
|
+
|
|
104
|
+
Each spawned agent runs on the model and effort its role needs, so the run spends
|
|
105
|
+
the strongest model only where judgment is dense:
|
|
106
|
+
|
|
107
|
+
- **opus / medium** — the review lenses (Bugbot, code-review, bug-audit, reuse)
|
|
108
|
+
and the code-editing steps that fix findings (fix-edit, conflict-edit,
|
|
109
|
+
repair-edit, standards-edit).
|
|
110
|
+
- **sonnet / medium** — the verify steps, the commit steps, and the recovery
|
|
111
|
+
edits that clear a commit-gate or verdict rejection.
|
|
112
|
+
- **haiku / low** — the mechanical steps: the preflight git-and-availability
|
|
113
|
+
probe, the Copilot gate, the CLEAN-audit post, and the convergence check that
|
|
114
|
+
marks the PR ready.
|
|
95
115
|
|
|
96
116
|
## Full-diff rule
|
|
97
117
|
|
|
@@ -22,8 +22,9 @@ fails in a new way.
|
|
|
22
22
|
bug-audit lenses both diff against `origin/main`. Concurrent `git fetch` calls
|
|
23
23
|
contend on the worktree `.git` lock and fail intermittently, so the workflow
|
|
24
24
|
runs a single serial `git fetch origin main` inside the merged `preflight-git`
|
|
25
|
-
step — the one git-utility agent that also resolves the PR HEAD SHA
|
|
26
|
-
mergeability
|
|
25
|
+
step — the one git-utility agent that also resolves the PR HEAD SHA, probes
|
|
26
|
+
mergeability, and checks Copilot and Bugbot availability — and the parallel
|
|
27
|
+
lenses run no git fetch of their own; they
|
|
27
28
|
diff against the already-current ref. The workflow threads the resolved HEAD
|
|
28
29
|
through the rounds and re-runs `preflight-git` only after a push or rebase
|
|
29
30
|
invalidates it, so a round on an unchanged HEAD spawns no git agent at all.
|
|
@@ -36,8 +36,22 @@ skill still runs teardown (revoke permissions, final report).
|
|
|
36
36
|
denied, errors, or its agent dies). The convergence gate's bugteam-review
|
|
37
37
|
check can never pass without that CLEAN review, so the run stops rather than
|
|
38
38
|
re-converge to the iteration cap. The `blocker` names the post failure and the
|
|
39
|
-
HEAD. Unblock by allowing `post_audit_thread.py` with a
|
|
40
|
-
|
|
39
|
+
HEAD. Unblock a permission denial by allowing `post_audit_thread.py` with a
|
|
40
|
+
Bash permission rule. Unblock any other failure by creating a fresh temporary
|
|
41
|
+
file whose exact content is an empty JSON array (`[]`) and re-running the run's
|
|
42
|
+
own `post_audit_thread.py --skill bugteam --state CLEAN` command for the
|
|
43
|
+
lens-verified HEAD with that file as `--findings-json`; then re-run the
|
|
44
|
+
workflow. A CLEAN post carries an empty findings array by construction, so this
|
|
45
|
+
re-issues the run's own command for the outcome the lenses already established
|
|
46
|
+
for that HEAD.
|
|
47
|
+
- **No review lens reviewed HEAD** — a round can end with no lens having reviewed
|
|
48
|
+
the HEAD three ways: the preflight resolves no SHA, every lens agent dies, or
|
|
49
|
+
every lens is down or disabled. A single such round retries on the next round.
|
|
50
|
+
Three consecutive no-lens-reviewed rounds (any mix of the three causes) reach
|
|
51
|
+
`CONFIG.maxConsecutiveNoLensRounds` and stop the run with a `blocker` that names
|
|
52
|
+
the consecutive count and only the causes that actually occurred, rather than
|
|
53
|
+
looping to the iteration cap. Any round in which at least one lens reviews the
|
|
54
|
+
HEAD resets the consecutive count.
|
|
41
55
|
|
|
42
56
|
## Not a blocker (the run continues)
|
|
43
57
|
|
|
@@ -58,10 +72,12 @@ skill still runs teardown (revoke permissions, final report).
|
|
|
58
72
|
Bugbot lens (null result) counts as down for that HEAD, so the convergence
|
|
59
73
|
check runs with `--bugbot-down` rather than demanding a Bugbot verdict the
|
|
60
74
|
dead agent never produced.
|
|
61
|
-
- **Every lens agent dies** — when all three parallel lenses
|
|
62
|
-
same round, the round is a failure, not a clean: the
|
|
63
|
-
bugteam artifact and does not advance to the Copilot
|
|
64
|
-
and retries on the next round
|
|
75
|
+
- **Every lens agent dies (a single round)** — when all three parallel lenses
|
|
76
|
+
return null in the same round, the round is a failure, not a clean: the
|
|
77
|
+
workflow posts no CLEAN bugteam artifact and does not advance to the Copilot
|
|
78
|
+
gate. It re-resolves HEAD and retries on the next round. This is a
|
|
79
|
+
no-lens-reviewed round, so consecutive occurrences are bounded by the
|
|
80
|
+
no-review-lens cap in the blockers above, not just the iteration cap.
|
|
65
81
|
|
|
66
82
|
## User stop
|
|
67
83
|
|