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.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: code-quality-agent
3
3
  description: Use this agent for comprehensive code quality reviews across multiple files.
4
- model: inherit
4
+ model: opus
5
5
  color: red
6
6
  ---
7
7
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-dev-env",
3
- "version": "1.86.0",
3
+ "version": "1.87.0",
4
4
  "description": "Claude Code development standards — rules, hooks, agents, commands, and skills",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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. Dedup findings; one
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; on a
348
- full pass the workflow marks `draft=false`.
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
- re-checks Copilot and Bugbot availability every round through the workflow's own
480
- pre-spawn probe, so a reviewer that is down or out of quota is never spawned in any
481
- generation; the `copilotDisabled`/`bugbotDisabled` flags each deferred PR carries
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
- - Run `check_convergence.py`. A full pass marks the PR ready (`draft=false`) and
93
- ends the run. A failure returns to CONVERGE so the next round addresses the
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 and probes
26
- mergeability and the parallel lenses run no git fetch of their own; they
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 Bash permission rule,
40
- or post the CLEAN review by hand, then re-run.
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 return null in the
62
- same round, the round is a failure, not a clean: the workflow posts no CLEAN
63
- bugteam artifact and does not advance to the Copilot gate. It re-resolves HEAD
64
- and retries on the next round, still bounded by the iteration cap.
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