Skip to content

batch: executable autonomy caps, and three planner bugs found by use - #320

Merged
Jammy2211 merged 1 commit into
mainfrom
claude/autonomous-task-batching-k8lw9t
Aug 30, 2026
Merged

batch: executable autonomy caps, and three planner bugs found by use#320
Jammy2211 merged 1 commit into
mainfrom
claude/autonomous-task-batching-k8lw9t

Conversation

@Jammy2211

Copy link
Copy Markdown
Contributor

What it takes to run the first real batch tomorrow. Found by running batch plan against the live backlog and reading what it picked — all three faults would have made batch 1 deliver nothing.

1. It proposed work that would park

Unattended: ready says a task fits one unattended run. It says nothing about whether the run may finish it — that is Autonomy: capped by work-type, and until now min(header, cap) existed only as prose in AUTONOMY.md, applied by whichever agent happened to read the doctrine. Nothing could compute it, so the planner could not see that both its picks were bug prompts capped at supervised, which stop at the ship checkpoint the moment they get there.

autonomy_cap and effective_autonomy now live in the sizing faculty beside effective_difficulty, which carries the same lesson: a rule every consumer re-applies by hand is a rule each of them applies differently.

Of 101 ready prompts, 31 resolve to safe. That is what a batch can actually dispatch, and it is the number that decides whether tomorrow works.

2. It proposed work already done

A prompt whose own Status: says shipped or superseded but which still sits in draft/ is a recorded failure mode — it renders as pickable backlog until someone retires it. Dispatching one wastes a whole shift re-doing finished work. Now excluded, mirroring intake's DONE_STATUSES.

3. It proposed epic phases out of order

One-slice-per-epic caps how many members run; it does not decide which. An epic now offers only its lowest un-shipped phase, so phase 6 cannot be proposed while phase 3 is open.

Also

batch plan prints the exact dispatch payloads. The launch is the human's act (AUTONOMY.md, "What a batch launch is"), so what they perform should carry no decisions left in it.

The conductor's AGENTS.md gains "Running a batch by hand". Phase 5 — automatic fan-out — is deliberately unbuilt: the manual loop works today, costs about two minutes of tapping, and is the honest way to learn what a dispatcher needs before writing one. It includes the leg that must not be skipped: the independent adversary, run in a session using a different model from the one that wrote the branch.

Validation

691 tests pass, 9 new. Each of the three bugs has a test naming how it was found, so the next person reads the failure mode rather than the rule.


Generated by Claude Code

…found by use

Running `batch plan` against the live backlog and reading what it picked found
three faults, all of which would have made the first real batch deliver nothing.

1. IT PROPOSED WORK THAT WOULD PARK. `Unattended: ready` says a task FITS one
   unattended run; it says nothing about whether the run may FINISH it. That is
   `Autonomy:` capped by work-type — and until now `min(header, cap)` existed
   ONLY as prose in AUTONOMY.md, applied by whichever agent happened to read the
   doctrine. Nothing could compute it, so the planner could not see that both
   its picks were `bug` prompts capped at `supervised` and would stop at the
   ship checkpoint the moment they got there. `autonomy_cap` and
   `effective_autonomy` now live in the sizing faculty beside
   `effective_difficulty`, which carries the same lesson: a rule every consumer
   re-applies by hand is a rule each of them applies differently.

   Of 101 `ready` prompts, 31 resolve to `safe`. Those are what a batch can
   actually dispatch.

2. IT PROPOSED WORK ALREADY DONE. A prompt whose own `Status:` says shipped or
   superseded but which still sits in draft/ is a recorded failure mode, and it
   renders as pickable backlog until someone retires it. Dispatching one wastes
   a whole shift re-doing finished work. Now excluded, mirroring intake's
   DONE_STATUSES.

3. IT PROPOSED EPIC PHASES OUT OF ORDER. One-slice-per-epic caps how many
   members run; it does not decide WHICH. An epic now offers only its lowest
   un-shipped phase, so phase 6 cannot be proposed while phase 3 is open.

Also: `batch plan` now prints the exact dispatch payloads. The launch is the
human's act, so what they perform should carry no decisions left in it —
everything decided was decided when they approved the batch.

The conductor's AGENTS.md gains "Running a batch by hand", because phase 5 is
deliberately unbuilt: the manual loop works today, costs two minutes of tapping,
and is the honest way to learn what a dispatcher needs before writing one. It
includes the leg that must not be skipped — the independent adversary, run in a
session using a different model from the one that wrote the branch.

9 new tests, 691 pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQeMJZznA3xTQXX4PqWg1v
@Jammy2211
Jammy2211 merged commit dab3d5d into main Aug 30, 2026
2 checks passed
@Jammy2211
Jammy2211 deleted the claude/autonomous-task-batching-k8lw9t branch August 30, 2026 23:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant