pipelines/DIRECTOR_RUNBOOK.md
T99-operational. Sets no world canon. This is the ONE document the Saturday director boots into,
written so the next seat never re-derives the operating loop. It does not restate doctrine that
already has a home — it points at the home and says when to open it.
Doctrine homes this file defers to, never duplicates:
build/ops/CAPACITY_ROTATION.md — the truth table (:15-26), the pacingconstant (:52-58), the burn law (:60-66), the balancing protocol (:68-86), and the 2026-08-10
reporting-direction tail (:110-125).
docs/ROADMAP_VERTICAL_SLICE_2026-08.md §6 (:796-861) — steady-stateseat duties, burn targets, and the wave-close ritual.
docs/HANDOFF_2026-08-05_ACCOUNT_SWITCH.md §8.15(:4249) → §8.15a stand-down (:4275) → §8.15b/c/d/e work-orders (:4289, :4329, :4468, :4480).
monitoring-never-wakes-premium-sessions, permanent-orchestrator-usage-rotation, session-boot-capped-reorientation,
decision-analysis-standing-protocol, agent-frame-claims-need-director-reread,
boards-publish-phone-first, creation-first-law-gate-moratorium,
fable-flags-ch2-content-route-to-opus, cross-repo-state-build-repo-is-authority.
Each is a named test case. A change to this runbook that reopens one of them is a defect.
acknowledged routine seat heartbeats. Closed by §2 (the NEVER list) and §5 (the only wake trigger).
because the bare name claude fell out of their PATH snapshot; nothing detected it. Closed by the
absolute path now in C:\Users\joshu\claude-accounts\runner-loop.cmd:56 (the claude.exe invocation) and by §2's liveness
triad. STILL OPEN in one place — see §7 DEFECT 1.
deployed with it; the live site still showed the stale refusal text. Josh looked, found nothing,
and was right. Closed by §2's site-staleness check and §3's on-the-site rule.
it. Closed by §2 (owed items live on a surface) and §5 (the escalation channel).
Closed by §2's deploy-record test, which is the only claim about the site the director trusts.
Boot is a VERIFY, never a re-derivation (memory: session-boot-capped-reorientation; switches and
compactions have burned 20%+ on re-challenging settled state). Read these five, in this order, and
nothing else until a decision actually demands a sixth file:
1. docs/HANDOFF_2026-08-05_ACCOUNT_SWITCH.md — the tail block only, from §8.15 (:4249) to the
end of file. That is the state-of-the-board plus every live work-order. Do not read the file.
2. build/ops/WORK_ORDERS.md — the board of record for open seat work-orders: every standing
order, its status, its claimant, and evidence a reader can open. It landed 2026-08-10 as the
successor to the ad-hoc §8.15b-e handoff appends, which stay as the orders' provenance. When the
board and the handoff disagree about STATUS the board wins; about INTENT, the handoff's original
wording wins. *(This entry read docs/WORK_ORDERS.md until 2026-08-10 — a path that has never
existed. A boot step that opens nothing reads exactly like a boot step with nothing to say.)*
3. build/ops/SEAT_REPORTS.md — the tail, newest blocks last; read the last block per seat, not
the file. Each block is one turn close: time, seat, commits with hashes, blocked-on.
4. build/ops/usage_status.md — the meter. Read the LIVE METERS block and each loop's
LIMIT STATE. Read §7 DEFECT 1 before trusting the live-meter lines.
5. build/ops/NEEDS_DIRECTOR.md — every line is a genuine escalation awaiting a ruling. This is
the work; §5 is how it is discharged.
Then, and only then, one command for orientation the files cannot give:
git -C C:/dev/humanity-forgotten log --oneline -12 git -C C:/dev/humanity-forgotten rev-parse --short HEAD
Not in the boot set, deliberately: seat logs, the roadmap body, the pipeline ledger, DOC_MAP, any
docs/pipeline_review/ dossier, any 3D or audio evidence JSON. Each is opened only when a specific
decision names it. docs/START_HERE.md:22-29 remains the ▶ NOW pointer for anyone who needs the
corpus map — the director does not, at boot.
The director is not a service that runs. It is a seat that WAKES for three reasons and reads only
what the wake is for.
names, act, and answer him in his own register (§3).
build/ops/NEEDS_DIRECTOR.md, or an unhealable failuresignature (PATH, auth, hang). Nothing else in the system is permitted to wake the director
(build/ops/CAPACITY_ROTATION.md:120-124).
re-targeting, and the site check happen. A SEAT's close is not a wake. Three seats close
every few minutes; a subscription to that beat is F1 exactly, and F1 cost 20% of a weekly limit
in one night acknowledging heartbeats. Seat closes are READ at a touchpoint the director is
already awake for, never delivered to it (build/ops/COMMS_PROTOCOL.md §6: "only when it is
already awake for real work"). If a monitor exists at all, its filter emits **additions to
NEEDS_DIRECTOR.md and nothing else** — healthy path, zero events, zero wakes.
There is no automated wake today, and that is a stated state rather than a gap to paper over.
The channel is PULL: escalations are seen at the next boot or touchpoint (§1 item 5). What closes
the latency for the failures that cost money is not a wake — it is peer recovery
(build/ops/COMMS_PROTOCOL.md §8): a mechanically dead seat is relaunched by whichever seat is
still up, within a turn, with no premium session involved at all. Only rulings, credentials and
logins actually wait for the director.
is the live surface he was looking at, not the repo record that claims it exists (F3).
the decision turns on. Three reads, typically.
usage_status.md → git log --oneline since the lastboundary → the deploy-record check below. Four reads, all cheap.
THE SITE-STALENESS CHECK (closes F3/F5). One command, and it reads PRODUCTION rather than a
record of production:
python harness/site/site_ritual.py --check
Exit 0 = production already IS this build, proven against the live bytes. Exit 6 = the gates
pass and production is behind — a deploy is owed, and the ritual has already written the OPEN block
to build/ops/SITE_DEBTS.md. Exit 2/3/4 = a refusal, also now on that surface. Nothing is deployed
by --check and the local mirror is held aside and put back.
Why not the record alone. build/site_deploy_record.json is written only on a successful deploy
(harness/site/build_progress_site.py:3795 land_on_disk), so it describes the last deploy that
worked and says nothing about the refusals since — that is F5's exact shape. And a zero exit from
wrangler pages deploy without --branch main lands a PREVIEW while production keeps serving the
old build (build_progress_site.py:3831-3834), which is F3's. The record's sha is still a useful
cheap glance —
python -c "import json;print(json.load(open('build/site_deploy_record.json'))['canon_sha'])"
git rev-parse --short HEAD
— but read it as a floor, never as proof: a commit message is not evidence (F4), and disk is not
either, because a lane once deployed from a worktree so disk lied about production
(harness/site/build_progress_site.py:3761). At this writing the record reads 6cdb86b3 against
HEAD c4ea97e1 — 22 commits behind, which is the F3 shape, live, right now. Full contract:
docs/pipeline_review/SITE_RELIABILITY.md.
THE LIVENESS CHECK (closes F2). The director does not correlate seat state by hand any more —
a zero-model watchdog does it every ten minutes and escalates only what a loop cannot heal
(C:\Users\joshu\claude-accounts\watchdog.ps1; the six reasons are listed in
build/ops/COMMS_PROTOCOL.md §3). So the director's check is on the watcher, not the seats:
type C:\Users\joshu\claude-accounts\watchdog_heartbeat.json
No file at all = it has never run for real — a -DryRun writes only the self-log, and that is
precisely the state the red team found it in on 2026-08-10: the script existed, the scheduled task
had never been registered, and a whole reliability wave had assumed otherwise. A beat older than
~15 minutes = the scheduled task is down. Older than ~35 minutes = the runner loops are not firing
it either (they each run it at the top of every turn), which means no seat is looping. Fix it
before reading anything else — §8 item 3 is the one command.
The old hand-correlated triad (limit banner + turn count + report freshness) is what the watchdog
now automates; keep it only as the manual fallback when the heartbeat is missing and you need an
answer before the watch is back up. A loop whose turn count climbs while SEAT_REPORTS stays
frozen is F2's exact signature.
THE OWED-WORK CHECK (closes F4). Every SEAT_REPORTS block's blocked-on line, plus every open
NEEDS_DIRECTOR line, is owed work. Owed work lives on a surface — SEAT_REPORTS, NEEDS_DIRECTOR,
WORK_ORDERS, or the site. A debt mentioned only in a commit message does not exist, and the
director's response to finding one is to put it on a surface, not to remember it.
C:\Users\joshu\claude-accounts\logs\*.log). The seats report up; thedirector does not consume down. This is Josh's ruling, verbatim: "Updates should be coming from
those terminals to you not you consuming everything."
monitor's filter emits only NEEDS_DIRECTOR additions and unhealable failures. Healthy path = zero
events = zero wakes.
scheduled task or cron: no wake whose only job is to confirm health.
loop backs off 30 minutes and retries (runner-loop.cmd:57-59, the errorlevel 1 branch), and the burn law says a wall costs
nothing (build/ops/CAPACITY_ROTATION.md:63-66).
landed a scored artifact with its evidence path, the director checks that the path exists and the
number matches — it does not re-run the instrument.
git add -A. Explicit paths only; multiple lanes share this tree./usage per seat in a loop. Read the meter file; probe live only before an actual launch decision (build/ops/CAPACITY_ROTATION.md:69-72).
The one named exception to spot-checking: claims about how something LOOKS or PLAYS. The
director re-reads the deciding frames itself rather than accepting an agent's description of them
(memory: agent-frame-claims-need-director-reread; docs/ROADMAP_VERTICAL_SLICE_2026-08.md:804-807).
That is a read of the image, not a re-derivation of the pipeline — it stays cheap.
A brief is produced at a wave boundary, when Josh asks, or when a READY-FOR-JOSH gate goes green. It
is short, it is finished work only, and it has pictures.
commit hash. Nothing in-flight, nothing "in progress," nothing that needs a caveat to be true.
SendUserFile the actual renders, sheets, before/afters, or screenshots — the visible-delta KPI (docs/HANDOFF_2026-08-05_ACCOUNT_SWITCH.md:4338-4341): a wave close that puts
no new visible artifact in front of Josh is un-DONE regardless of how many instruments it armed.
Site links are for depth; the pictures come to him.
seat is on it right now. Four lines, always in the same order (workhorse, josh.milks, jmilks3790,
joshua.milks90).
unblocks it. Currently standing: his three open music reviews (the Tyrant boss pair + the Flores
Finality phase-3 morph edit) — nothing else. *(Two items closed 2026-08-10 by the remote director
sitting: the ElevenLabs downloads Allow was executed directly — a per-profile automatic-downloads
allow for [*.]elevenlabs.io written into all four Chrome profiles on Milks5090, Chrome
restarted with session restore, plus the pacing law that no two download triggers ever fire in
the same second. The 5c9ce40e two-clicks item was SUPERSEDED by Josh's ruling — no review.
subdomain at all; the site lives at the apex humanityrpg.com (+www) with /review as a
path — and executed in-browser: the review.humanityrpg.com custom domain and its CNAME are
removed, apex + www + /review verified 200. **The apex carries NO Access wall by that same
ruling: every site surface is PUBLIC and no publish-gate waiver may rely on a wall** — that
posture stands until Josh orders a wall. The handoff §8.16 and the DECISIONS tail carry the
record.)* *(The older standing item here — "the one-time Cloudflare MCP OAuth that unblocks the
review domain", build/ops/CAPACITY_ROTATION.md:94-99 — is STALE and was removed 2026-08-10:
the custom domains have been live and answering 200 unauthenticated all along; it is the
pages.dev URL that is Access-walled. docs/pipeline_review/SITE_RELIABILITY.md carries the
verification.)*
are claims. Run the §2.3 checks and state the checked fact, or say nothing. Josh's answer to a
claim he could not see was "I dont see an L12 on record. The site fucking sucks."
does not exist for Josh (:4336-4337). If the site is stale by the §2.3 check, deploy before
briefing or name the staleness in the brief.
refusals," no "the lens floors cleared," no gate names, no lane letters, no seat numbers. Say what
a person would see. Internal routing vocabulary never reaches a Josh surface.
something was. Completed work and pictures.
a parenthetical, never only in a commit.
never borrow final language (docs/ROADMAP_VERTICAL_SLICE_2026-08.md:858-861).
The truth table is build/ops/CAPACITY_ROTATION.md:15-26 and it wins over any conflicting line
anywhere (including §7 DEFECT 2):
| Account | Seats on it | Weekly reset (ET) |
|---|---|---|
| josh@humanityrpg.com (the workhorse) | desktop director + claude-jmilks loop | SAT ~1:00am |
| josh.milks | claude-milks loop | SUN ~10:00pm |
| jmilks3790 | claude-hf loop | TUE ~3:00am |
| joshua.milks90 | stitched terminal lane | TUE ~7:00pm |
The pool is per ACCOUNT, not per seat. Every seat on an account draws the same weekly limit —
and so does Josh's own desktop use of that account (build/ops/CAPACITY_ROTATION.md:24-26). Through
this week Josh drives each account to ~50% himself while the loops burn the same pools; the Saturday
director inherits the sum, not his half (:4275-4288).
Josh's math (build/ops/CAPACITY_ROTATION.md:52-58): 15.6% of a 5-hour limit per session, and 500%
of 5-hour limits equals 100% weekly. Therefore **one seat running continuously delivers about 0.62%
of an account's weekly pool per hour** — which is what lands 100% on a Max x20 running 24/7.
required rate = remaining % ÷ hours to that account's reset seats needed = required rate ÷ 0.62
Ranked launch priority is simply the highest required rate first — that is the routing rule
(:74-76) made computable. Worked at the Saturday 1am boot, assuming each inherited account sits at
~50% (RECOMPUTE against the real meter; this is the method, not the answer):
| Account | Remaining | Hours to reset | Required %/h | Seats needed |
|---|---|---|---|---|
| josh.milks | ~50% | ~45 (SUN 10pm) | 1.11 | ~1.8 |
| jmilks3790 | ~50% | ~74 (TUE 3am) | 0.68 | ~1.1 |
| joshua.milks90 | ~50% | ~90 (TUE 7pm) | 0.56 | ~0.9 |
| workhorse | 100% fresh | 168 (SAT 1am) | 0.60 | ~1.0 |
Reading: josh.milks is the tightest window and takes volume FIRST and WIDEST — one loop cannot
reach its floor by Sunday night, so it needs a second seat or heavier per-wave fan-out. The workhorse
looks comfortable but shares its pool with the director's own spend, so its ~1.0 is really "one loop
plus a thin director" — every hour the director spends on it must come off a loop's width.
can land before that account's wall.
account per week; the target is 99-100% (docs/ROADMAP_VERTICAL_SLICE_2026-08.md:829-831).
the reset boundary costs nothing (build/ops/CAPACITY_ROTATION.md:63-66). Never thin a wave to
avoid a limit.
building, carving, rendering, baking, indexing, measuring (:61-62).
briefs; anything else on that pool is a loop's width taken away.
IN. build/ops/NEEDS_DIRECTOR.md — one line per genuine escalation, written by the seat that is
blocked. It is the only thing that wakes a director. A seat's routine progress belongs in
SEAT_REPORTS, never here.
OUT. A decision-protocol brief — never a bare question (CLAUDE.md decision protocol; memory
decision-analysis-standing-protocol). Steelmanned alternatives including the status quo, each
grounded and adversarially checked, presented with pros, cons, reasoning, a RECOMMENDATION, and the
strongest objection to it. Two destinations:
It does not go to Josh. Only genuine ambiguity, cardinal canon, or a vision fork does (memory:
no-veto-lists-only-genuine-forks).
the §3 register, still never a bare question.
ACK. The ruling is written BACK into build/ops/NEEDS_DIRECTOR.md on the line it answers —
appended to that line, never on a new one — and it ends with the uppercase token RESOLVED:
... | blocks: <what was stopped> | RULED <date> — <the ruling in one sentence> — landed at <sha> | RESOLVED
Both halves are load-bearing and they do different jobs. RULED: is the human register and carries
the ruling; RESOLVED is the machine token and is the only thing that moves the item out of the
site's open list (harness/site/seats.py:99 _NEEDS_CLOSED; the other accepted closers are CLOSED,
ANSWERED, WITHDRAWN, DISCHARGED, SUPERSEDED, uppercase by design). RULED alone is NOT a
closer. The line stays in the file as history; it is never deleted.
This was got wrong within an hour of the rule being written, so it is worth the extra sentence.
The apex-exposure ruling of 2026-08-10 (5c9ce40e) landed as a NEW flush-left line beginning
- RULED (director...). A flush-left line is a NEW escalation to the parser, and neither line
carried a closer — so a discharged escalation rendered on Josh's status feed as two open items,
and would have woken the next director for a question already answered. Repaired in place. If the
ruling leaves a residual action for Josh, that action moves to IN YOUR COURT (§3.1); it does not
justify leaving the escalation open.
SAME-DAY. Escalations are discharged the day they appear. A seat that escalated is a seat that
is blocked, and a blocked seat is stranded budget on a metered account.
NOT AN ESCALATION. If a line is routine progress, a usage wall, or a self-healing backoff, ack it
NOT AN ESCALATION — <why> | WITHDRAWN and fix the source: the seat's close duty is defined in the
runner prompt (C:\Users\joshu\claude-accounts\runner-loop.cmd:56), and the bar for this file
belongs there.
NOT THE DIRECTOR'S AT ALL. A WATCHDOG line reading PATH_BROKEN, LOOP_SILENT or
LOG_MISSING is a mechanically dead seat, and the live seats recover it themselves within a turn
(build/ops/COMMS_PROTOCOL.md §8) — ack-first, relaunch, confirm, close. If one is still open when
the director boots, peer recovery did not happen and THAT is the thing to fix. AUTH_FAILED is
genuinely the director's: it needs a human login.
Full statement: CLAUDE.md "Model seats" and build/ops/CAPACITY_ROTATION.md:77-79; memory
fable-flags-ch2-content-route-to-opus.
integration, landings, and canon-sensitive authoring. The director never volume-codes.
model explicitly to the top Opus. Nothing inherits a premium sessionmodel. One 8-agent inherited fan-out once cost ~20% of a weekly limit.
Monitoring, format triage, and registry applies are script-tier — never a model wake (F1).
plus fresh-context adversarial critics stay at full strength always. Never skip verification to
save budget.
verification, or is volume authoring. Everything else stays inline.
DEFECT 1 — the meter is dark, and it is F2 again. harness/ops/usage_monitor.ps1:17 invokes the
CLI by bare name (& claude -p "/usage"), the same PATH assumption that killed all three runner
loops. All four LIVE METERS lines in build/ops/usage_status.md:5-11 currently read
poll failed: The term 'claude' is not recognized. Fix: the absolute path already proven in
runner-loop.cmd:56 — C:\Users\joshu\.local\bin\claude.exe. Until it lands, the live-meter block
is worthless and only the per-loop LIMIT STATE banners (usage_status.md:13-28, scraped from the
logs) carry information. This surface was unclaimed and clean at 02:02 when this runbook was
written; it belongs to whichever lane owns harness/ops/.
DEFECT 2 — a monitor line contradicts the truth table. harness/ops/usage_monitor.ps1:40
hardcodes "jmilks3790 Sun ~10pm ET; josh.milks Tue ~3am ET" and stamps it into
build/ops/usage_status.md:137 as "Reset schedule of record." Those two accounts are swapped
relative to the Josh-corrected truth table (build/ops/CAPACITY_ROTATION.md:17-22, corroborated by
runner-loop.cmd:15-17). The truth table wins. A director that routes volume off line 137 will aim
a wave at the wrong wall.
DEFECT 3 — the watchdog is WRITTEN but was never REGISTERED. *(Updated 2026-08-10 by the
failure red-team, which is how it was caught.)* The zero-model, OS-level watchdog now exists at
C:\Users\joshu\claude-accounts\watchdog.ps1 and it works — but the scheduled task it needs was
never created: schtasks /Query /TN HumanityFactory-SeatWatchdog returned "cannot find the file
specified", there was no watchdog_heartbeat.json on disk, and its self-log carried nothing but two
-DryRun passes. A staged watchdog watches nothing, and the reliability wave that built it had
already been described as closing F2. The one command, run once, on the box:
C:\Users\joshu\claude-accounts\install-watchdog.cmd
It dry-runs first and refuses to register if the dry run is unclean. Two mitigations landed with
this finding, so the class does not recur: **every runner loop now fires the watchdog itself at the
top of every turn** (runner-loop.cmd:47-55), which means the watch survives the scheduled task
dying and only fails when no seat is looping at all; and concurrent runs take an atomic lock, so
the four callers cannot corrupt each other's dedupe state. The install remains worth doing — it is
what watches the seats when every loop is walled.
DEFECT 4 — the prescribed pull silently ate escalation lines. `pull --rebase --autostash
-X theirs (docs/HANDOFF_2026-08-05_ACCOUNT_SWITCH.md:109`) resolved a two-seat append conflict by
discarding one side — reproduced on a scratch repo 2026-08-10, seat A's escalation gone with no
conflict and exit zero. Closed by merge=union on the three ops channels in .gitattributes; the
detail and the fixture are in build/ops/COMMS_PROTOCOL.md §7. **Never resolve a WORK_ORDERS.md
conflict with -X theirs** — there the conflict is the feature, and the rule is first-committed-wins.
1. BOOT CAPPED. The five reads of §1, in order, and stop. Do not open the roadmap body, the
ledger, or any evidence dossier yet. Budget: minutes, not a context window.
2. REPAIR THE METER. Apply DEFECT 1 and DEFECT 2 (§7) — the absolute CLI path and the corrected
reset line — then re-run harness/ops/usage_monitor.ps1 and read a real number for all four
accounts. Every capacity decision below this line is guesswork until this passes.
3. CONFIRM THE WATCH — and do not accept a script on disk as a watch. Two commands, in order:
schtasks /Query /TN HumanityFactory-SeatWatchdog type C:\Users\joshu\claude-accounts\watchdog_heartbeat.json
Either one failing means nothing is watching the seats (§7 DEFECT 3 — this is exactly how the
red team found the task had never been registered). Register it with
C:\Users\joshu\claude-accounts\install-watchdog.cmd, which dry-runs first and refuses on an
unclean run, then re-read the heartbeat and confirm every seat is listed. A wave launched under
a dead watch repeats F2.
4. PROVE THE SITE, DO NOT ASSUME IT. python harness/site/site_ritual.py --check (§2.3). Exit 6
means a deploy is owed — run python harness/site/site_ritual.py and let it PROVE the push is
live against the deployed bytes; exit 5 means treat the push as unlanded no matter what wrangler
said. Production was 22 commits behind at this writing. The first brief of the day must describe
a site Josh can actually open, so the scored L12 and every other landed result stop being
invisible (F3). Then read build/ops/SITE_DEBTS.md: an ## OPEN block is a push production
still owes.
5. DO THE CAPACITY MATH AND LAUNCH. Fill §4.2's table with the real percentages from step 2,
rank by required rate, and launch volume in that order — josh.milks first on the current board,
its wall being the nearest. Then discharge every open NEEDS_DIRECTOR line same-day (§5), and brief
Josh in the §3 format with pictures.
Every figure below is measured off disk on 2026-08-10 at ~06:20 local, or off the runner logs, which
are zero-token evidence. Byte counts are facts; token counts are bytes ÷ 4, the working
convention for markdown prose in this repo — stated so a later reader can re-derive rather than
trust. Where a number is an estimate rather than a measurement it says so on its face.
The purpose of this section is not thrift. It is F1: the burn happened because nobody had priced a
wake, so ~25 of them looked free. A cost that is written down can be refused.
The §1 five reads, at their real sizes:
| Boot item | Bytes | ~Tokens |
|---|---|---|
docs/HANDOFF_2026-08-05_ACCOUNT_SWITCH.md, §8.15 (:4249) → EOF — 332 lines | 28,405 | 7,100 |
build/ops/WORK_ORDERS.md — 183 lines | 11,522 | 2,880 |
build/ops/SEAT_REPORTS.md — 16 lines today, append-only and unbounded | 1,301 | 325 |
build/ops/usage_status.md — 137 lines | 5,041 | 1,260 |
build/ops/NEEDS_DIRECTOR.md — 3 lines | 739 | 185 |
git log --oneline -12 + rev-parse output | ~1,600 | 400 |
| read subtotal | 48,608 | 12,150 |
Add what the session is charged before it reads anything at all — the preamble is not free and is
not optional:
| Always injected | Bytes | ~Tokens |
|---|---|---|
CLAUDE.md (project) | 26,716 | 6,680 |
~/.claude/CLAUDE.md (global) | 3,839 | 960 |
~/.claude/projects/C--dev-humanity-forgotten/memory/MEMORY.md (the index) | 16,601 | 4,150 |
| preamble subtotal | 47,156 | 11,790 |
| system prompt + tool schemas — ESTIMATE, not measured | — | ~8,000–12,000 |
BOOT TOTAL ≈ 32,000–36,000 tokens. Call it 34k. That is the whole price of arriving oriented,
and it is paid once per cold session.
Two boot defects were found here, and both were repaired on 2026-08-10; they are kept as the
record of a class that recurs:
docs/WORK_ORDERS.md, which has never existed. The file is build/ops/WORK_ORDERS.md (183 lines, board table at :34-43). A boot read that misses is a boot
that re-derives the board from the handoff — the exact cost §1 exists to avoid. Fixed in place.
more often than this runbook. They were stale by ~7 lines when this section was written, and the
red-team's own change (firing the watchdog per turn) moved them again the same night. As of
2026-08-10 the absolute CLI path and the seat's close duty are one line —
C:\Users\joshu\claude-accounts\runner-loop.cmd:56 — the watchdog call is :47-55, and the
30-minute backoff is :57-59. Cite the symbol, not the number, and treat any runner-loop.cmd:NN
in this file as advisory: the durable anchors are :loop, the claude.exe invocation, and the
errorlevel 1 branch.
The board table alone is 1,050 bytes (~260 tokens). A director that reads §1 item 2 as "the
board table plus the body of any row a decision turns on" pays ~600 tokens instead of 2,880 and
loses nothing, because the row bodies are reference text for the seat executing them.
| Touchpoint | What is read | ~Tokens |
|---|---|---|
| Healthy path | nothing — the monitor's filter emits no event | 0 |
| Wave boundary (§2.2) | SEAT_REPORTS last 3 blocks (300) + usage_status (1,260) + git log (400) + deploy-record one-liner (50) | ~2,000 |
| Escalation ruling (§5) | the NEEDS line (185) + the seat's last close block (100) + the ONE deciding artifact (~5,000) + the brief written out (~1,500) | ~6,800 |
| Josh brief (§3) | the wave-boundary reads (2,000) + brief prose out (800) + SendUserFile calls (150) | ~3,000 |
| Josh message | the artifact he named (~5,000) + the answer (~700) | ~5,700 |
The wave boundary is the cheapest useful thing the director does: **four reads, ~2k tokens, and it
answers "is the factory healthy and where is the budget" completely.** That is the number that makes
the NEVER list affordable — the director does not need to consume the seats, because 2k buys the
same knowledge that tailing three logs would buy for fifty times the price.
Steady state, SAT 1am → SAT 1am, three loops running:
| Line | Count | Unit | Total |
|---|---|---|---|
| Cold boot | 1 | 34,000 | 34,000 |
| Wave boundaries | 4/day × 7 | 2,000 | 56,000 |
| Josh briefs | 2/day × 7 | 3,000 | 42,000 |
| Escalation rulings | 3/day × 7 | 6,800 | 143,000 |
| Josh messages | 3/day × 7 | 5,700 | 120,000 |
| Healthy-path monitoring wakes | 0 | — | 0 |
| Director operating overhead | ≈ 395,000 tokens/week |
Rulings, contested adjudication, integration, and landings are excluded deliberately — that is the
director's JOB, not its overhead. This line prices only the cost of *running the system*.
The healthy-path wake count is ZERO and that is a hard requirement, not a target. A monitor that
emits on turn-start, turn-complete, a usage wall, or a backoff has reopened F1 regardless of how
cheap each event looks. The only two emitters are a new NEEDS_DIRECTOR.md line and an unhealable
watchdog signature.
The one measured anchor is Josh's own observation, F1: **~25 monitor wakes acknowledging routine
seat heartbeats cost 20%+ of a weekly limit.** Everything below is derived from it.
3.8–5.0M tokens ≈ 20% → weekly pool ≈ 19–25M tokens. Working figure: 20M. (Derived, not
measured; it is the one soft number in this section, and every ratio below moves with it.)
weekly pool.**
| Comparison | Old | New | Ratio |
|---|---|---|---|
| One night of monitoring vs one WEEK of operating | 20% of weekly | 2.0% of weekly | 10 : 1 |
| Per night, normalised (395k ÷ 7 = 56k/night = 0.28%) | 20% | 0.28% | ~70 : 1 |
| Monitoring wakes on a healthy day | ~25 | 0 | the category is gone |
The third row is the real one. The first two price a system; the third prices a law. Twenty-five
wakes bought zero rulings — every one of them was the director paying to be told nothing was wrong.
Measured from the runner logs for the night of 2026-08-09 23:00 → 2026-08-10 06:16 (zero-token
evidence; C:\Users\joshu\claude-accounts\logs\*.log, turn-start/turn-complete markers written by
runner-loop.cmd:56,61):
| Seat | Completed turns | Mean | Median | Range | Failed starts |
|---|---|---|---|---|---|
claude-jmilks | 12 | 24.5 min | 18.7 min | 1.5–71.3 min | 2 |
claude-milks | 10 | 21.5 min | 20.3 min | 17.1–36.1 min | 4 |
claude-hf | 0 | — | — | — | every start since 08-06 |
claude-hf is not broken — it is at its weekly wall, banner resets Aug 11, 3am, and has spawned
117 processes that each die in ~2 seconds at zero model cost. That is the backoff working. It
does mean the account behind it (jmilks3790, per runner-loop.cmd:16-19) is spent, not half-spent.
Turn rate: 22 completed turns across two seats in 6.6 hours = ~1.65 turns/hour/seat. At three
live seats that is ~120 turns/day, and every one of them is a cold -p process that pays the
whole boot again:
| Per-turn fixed cost, before the seat opens a work artifact | Bytes | ~Tokens |
|---|---|---|
| Injected preamble (CLAUDE.md + global + MEMORY index) | 47,156 | 11,790 |
build/ops/WORK_ORDERS.md (boot item 1, runner-loop.cmd:56) | 11,522 | 2,880 |
build/ops/COMMS_PROTOCOL.md (boot item 3) | 12,673 | 3,170 |
| Handoff "tail" — BEST case, anchored to §8.15 → EOF | 28,405 | 7,100 |
| Fixed boot, best case | 99,756 | ~25,000 |
Handoff "tail" — NAIVE case: Read defaults to 2,000 lines from offset 0, so it returns the *wrong end* of a 4,580-line file | ~160,000 | ~40,000 |
| Fixed boot, naive case — expensive AND wrong | ~231,000 | ~58,000 |
120 turns/day × 25k = ~3.0M tokens/day of pure re-boot, best case; ~7.0M/day naive. Against a
~20M weekly pool per account, boot is the single largest line item in the whole factory — larger
than any wave it precedes.
And it multiplies. The injected preamble is charged to **every fan-out lane as well as every seat
turn** — verifiable directly: a subagent's opening context carries the full project CLAUDE.md and
the full MEMORY.md index before it reads one file. Commit 8c18537f ran nine lanes wide; that
wave paid ~106k tokens of preamble before any lane opened anything.
The ranked fixes, highest leverage first. Each is a one-file edit; none touches a gate, a critic,
or the quality bar (§6: efficiency is tiering, never thinness):
1. Trim the always-injected preamble. CLAUDE.md is 26,716 bytes and marks its own §"Next
session — start here" as historical; MEMORY.md's index is 16,601 bytes. Cut to current law
(~8k + ~6k) with the history moved to a linked file. Saves ~7,300 tokens on **every seat turn and
every fan-out lane** — ~0.9M/day at the seat level alone, several times that across lanes.
2. Anchor the handoff read and cap it. runner-loop.cmd:56 says "the handoff tail" with no line
and no N against a 386,522-byte file. Name the command in the prompt — the last ~120 lines — and
the wrong-end failure disappears with ~4,600 tokens/turn.
3. Stop re-reading COMMS_PROTOCOL every turn. The prompt says "read it once, follow it every
turn" and build/ops/COMMS_PROTOCOL.md:184 says "do not re-read it every turn" — both are
unexecutable, because a -p turn is a fresh process with no memory of the last one. Put the
15-line close-block template inline in the runner prompt; keep the protocol file as the reference
for whoever changes the parser. Saves 3,170 tokens/turn and removes the failure where a seat
skips the read and files an unparseable block.
4. Read the board, not the whole board file. Board table + the claimed row's body ≈ 900 tokens
against 2,880.
Together: boot falls from ~25k to ~7.9k, a 3.2× cut, ~2.0M tokens/day recovered at the seat
level before counting lanes.
120 seconds between turns is right; leave it. At a 21–24 minute mean turn it is 8.0–8.4% of wall
clock. Shortening it buys back ~6% of throughput and spends it immediately on more cold boots at 25k
each — the lever is LONGER turns, not shorter gaps. The cadence is not the defect.
The collision is the defect, and it is structural. runner-loop.cmd:56 hardcodes the same
PRIMARY MISSION — WO-07 and WO-08 — into all three seats, so all three boot aimed at the same two
rows and the losers spend their opening minutes claiming and yielding. Tonight's record, in one
52-minute window: 392f4a55 (05:24) "finds the board saturated and stands down… touches nothing
else" — a whole turn, no artifact; 3f7e92ea (05:45) claim → 20e08cd5 (05:48) claim →
ddc291cf (05:51) "yields three minutes too late"; 662562c5 (06:10) "yields the ladders it was
sent for and picks the surface off the floor". Roughly **three of six seat turns in that window
produced no new artifact.** At ~22 minutes and ~1.65 turns/hour, a yielded turn is not a rounding
error — it is 40% of that account's hour, on a metered week, against Josh's "no seat idle while
budget remains".
The fix is one sentence in the prompt: the mission line points at the BOARD ("claim the
highest-priority OPEN row you can hold; the board's order is the priority"), plus a per-seat
preferred-surface hint so three seats aim at three surfaces by default and collide only when the
board is genuinely narrow. Priority then lives in WORK_ORDERS.md, where it can be changed without
editing three scripts.
The meter is already free, and DEFECT 1 is paying for it. The logs carry the exact reset stamps
the director needs — resets Aug 11, 3am, resets 4:30am, resets 3:40am — and the monitor already
scrapes them into build/ops/usage_status.md:13-28. The broken /usage poll
(harness/ops/usage_monitor.ps1:17) is spending model calls to buy what the banners give for
nothing. Scrape the banner, stamp DARK UNTIL <reset> per seat, and the live-meter block becomes
zero-cost and honest.
Two corollaries, both cheap:
claude-hf has spawned 117processes since 08-06 for a wall that clears Aug 11. It costs no tokens, but it inflates the
turns attempted counter that §2.3's liveness triad reads as evidence of life.
usage_status.md:137 mislabels the one measured banner. It reads "josh@humanityrpg Tue Aug 11 3am ET (measured)", but that banner came from the claude-hf log, which is jmilks3790
(runner-loop.cmd:16-19); josh@humanityrpg resets SAT 1am. A director routing off that line aims
the workhorse's volume at the wrong wall — DEFECT 2's failure, now with a third mislabel on the
same line. The §4.1 truth table wins, always.