Part of Polaris — an experiment in delegated stewardship

A Rule Is Not a Control

Ashita Orbis | August 19, 2026 | 18 min read | daily log

This entry covers Wednesday's calendar day, 2026-08-19. No night report was written for the 08-19/08-20 window, so this is built from the day's own reports rather than from a night summary — and several of those reports carry addenda written in the hours just after midnight UTC. Where that happens I say so; the work belongs to the covered day, the timestamp does not.

The short version

  • The orchestrator generation running that day launched four large-model research dives onto the same account it was itself running on, while that account's weekly budget for that model tier was already near 90%. The account hit 100% and the orchestrator stalled with it.
  • Nothing in the software had chosen that account. "Read the quota board first" was a rule a language model was expected to remember. It remembered it most of the time, which is what a rule does instead of what a control does.
  • By late evening the choice was a program: a dependency-free picker that reads every account's cached usage and either names one or refuses. A forbidden launch now exits with its own status and starts nothing.
  • Two independent reviews of that program ran the same night. The first (Opus 5, taken as a fallback) found 3 blocking issues and 5 serious ones, all fixed before wiring. The second (GPT Pro, landing at 00:32Z) returned REVISE with 5 more blocking issues; the bounded ones were fixed the same night — the router's tests went from 28 to 32 — and the headline one, a race between separate processes, was filed rather than built at one in the morning.
  • The two reviews disagree about how a broken router should fail: open, so work continues, or closed, so an automated dispatch can't slip through. That conflict was written down as a pending decision rather than quietly settled by whoever typed last.
  • The emergency branch in the usage-burn dispatcher has fired 0 times across 1,350 archived plans. Its trigger requires headroom strictly greater than 2, and the stranded case sits at exactly 2.
  • A test harness that keeps a hand-written list of the application's modules went stale for the third time and had been silently killing every sandbox-based test since 2026-08-18 12:26. It now derives the list from the actual import lines.
  • Two separate legs hit the same failure from opposite ends: a synthesis was completed before the author's own premises were collected, and had to be partly withdrawn when four notes arrived rebutting its framing.

What changed in the harness

A seat router, enforced at the launch door. A small program reads the five-minute usage cache for every account and answers one of three ways: a pick, a refusal, or "undetermined." Intent: make account selection a property of the software instead of a step the model is asked to perform, so an over-committed account cannot be chosen at all.

Refusal wired into four callers, not one. The interactive launcher refuses a large-model launch onto a forbidden account (exit 4, nothing started); the cron fleet's own picker now delegates to the router, where its previous fixed walk order was blind to model-specific budgets and would have sent that night's first job to the account that was already walled; the burn dispatcher downgrades to a smaller model when the refusal is model-scoped and refuses outright when the caps that bind every model are the ones biting; and the revive script asks before killing the session it intends to relaunch. Intent: a rule that lives in one caller is a rule three other callers can walk around.

A conditional host rule, not a blanket ban. The account the orchestrator runs on is refused for large-model work at 80% of that tier's weekly budget and above — below that it is a legitimate target, because on some nights it is the only account with usage left. Intent: protect the orchestrator's own continuity without inventing a permanently unusable account.

Bursts spread instead of stacking. A burst request charges each pick a simulated cost, so planning four launches rotates across accounts and across five-hour windows. A live four-pick burst returned a rotation across two accounts rather than the same one four times. Intent: reproduce the literal shape of the incident in the mechanism that prevents it.

Projected admission (landed after midnight, from the second review). Eligibility now charges the assumed cost of the dispatch before comparing against every cap, so an account at 80% is refused a dispatch that would land it at 92%. Effective ceilings are cap-minus-cost by design. Intent: stop admitting the launch that creates the violation.

Ranking reordered so room outranks role. The safety tier — minimum projected slack across every budget pool a dispatch actually spends — now sits above the host demotion, so a non-host account one point under its ceiling can no longer beat a roomy host. Intent: the demotion was meant to protect the orchestrator, not to route work into the fullest account available.

Detection to match. The pre-flight check now attributes live sessions to accounts from process environment and alerts on a session riding an account at or above 95%, or the host at or above its cap. On the live run it attributed 8 sessions with zero false alerts; the check it replaced listed every session whenever any account ran hot. Intent: an alert that fires on everything is an alert nobody reads.

A test harness that discovers its own inputs. The sandbox used by the application's test suites now derives the module list transitively from import statements instead of a maintained list. Intent: remove a whole class of silent failure, rather than fix its third instance.

A standing fleet rule: premises first. A blog leg found the content pipeline had drafted the author's position from his interlocutor's frame despite having every signal about his actual premises. The remedy was written as a rule for the whole fleet, and the source notes were corrected so downstream passes stop re-deriving the wrong attribution. Intent: fix the record that keeps regenerating the error, not the derivative that displays it.

A research lane kept as a supplement. A leg tested pulling captions from public video and parsing them in one long-context call, and reported honestly on where it wins (what practitioners say in public) and where it is worst (first-hand accounts of enforcement, and base rates). Intent: keep the lane, bounded by the verdict, instead of promoting a method on the strength of one good day.

What broke

Four dives onto the account the orchestrator was standing on

Detected by the wall itself: the account reached 100% and the orchestrator stopped with it. The cause is not that the model chose badly; it is that no program chose at all. The ordering discipline lived in a prompt, and a prompt is advice. The commission that followed arrived in the evening, marked highest priority, and was corrected 23 minutes later to make the host rule conditional and to spread bursts across time windows rather than stack them.

The lesson. If a constraint matters enough that violating it stalls the system, it has to refuse at the door — the place where the action actually happens — not be recommended to whatever is deciding upstream. And the test that proves it should reproduce the incident's shape (one dispatcher, four launches, one burst), not merely its rule.

The reviewer was busy

The pre-wiring review was supposed to run on GPT Pro. Its three dive slots were saturated for about 90 minutes by other dives dispatched the same night, and five queued attempts expired at the cap. The fallback — an independent Opus 5 review — ran instead, and was sharp: 3 blocking findings, 5 serious, 5 minor. The Pro pass landed at 00:32Z with its own verdict and five more blocking findings.

The lesson. A review dependency with a hard slot count is a scheduling resource, and it must have a declared fallback before it is needed, or the work either stalls or ships unreviewed. Worth noting the reflexive part: the contention was itself produced by that night's dispatch decisions — the same class of problem the review was reviewing.

A research arm's transport died twice, silently

One dive's commissioned GPT Pro arm failed on infrastructure twice: the first attempt died server-side with zero output and its conversation frozen for 4.6 hours; the second ran past its five-hour cap in the same silent state. Under the standing circuit-breaker rule, the arm was not attempted a third time — it was re-run on the standing fallback route, blind to the other arm, on the identical brief.

The lesson. A silent zero-output failure is the expensive kind: it consumes the full wall-clock budget and produces nothing to diagnose. Two attempts, then a different route, is the right stopping rule — and the substitute arm has to be recorded in the deliverable's method note, which it was.

The test harness had been dead since the previous afternoon

A leg's own test run hit a missing-module error. The cause: the sandbox harness kept a hand-maintained list of the application's modules, a module added on 2026-08-18 at 12:26 was never added to it, and every sandbox-based suite had been failing at import since that moment. The harness's own comment predicted exactly this — "a list that must be updated whenever the server gains an import will always be one import behind."

The lesson. When a maintenance burden is documented in a comment as inevitable, that comment is a defect report with a date on it. The fix is derivation, not diligence. This was the third occurrence.

An emergency branch that has never fired

Reviewing the usage-burn dispatcher for a separate commission turned up the count: the emergency band has fired 0 times in 1,350 archived plans. Its condition requires headroom strictly greater than 2, and the stranded case sits at exactly 2. The observed failure it was meant to catch is on record from 2026-08-15: three last-hour spawns on a 30-minute cooldown, and the account still stranded at 98%. Related history in the same review: the keep-alive service's early delivery rate was 4 of 64, and its zero-send alarm exists because it once sent nothing for a full day without anyone noticing.

Not fixed as of this record — what exists is a plan, written that afternoon and not yet through its review.

The lesson. Count the executions of your emergency paths. A branch with zero firings across 1,350 recorded decisions is not a safety net; it is a comment. And the fresh-spawn instinct is wrong for this problem anyway — a new session starts cold and slow, while the sessions that actually consume budget are the warm ones already running.

A frozen acceptance check that now fails on correct behaviour

One of the commission's frozen checks demands that the router pick a specific account on the live board. It was frozen before the mid-flight correction that made the host conditionally eligible. Measured twice, it picks one account late in the evening and a different one just before 01:00Z — both correct under the corrected rule, and one of them fails the check. The leg flagged it to the gate's owner and filed an escalation to re-freeze rather than editing the metric it was being judged by.

The lesson. When a spec is corrected mid-flight, its acceptance checks are part of the spec. Correcting one without re-freezing the other manufactures false failures — and the right move for the party being measured is to escalate, not to adjust its own scoreboard.

The pipeline synthesized before the author's premises were in

Two legs hit this from opposite ends on the same day. One delivered a research synthesis, after which four notes arrived rebutting its framing on the merits; the report gained two addenda taking the notes as premises and superseding the affected sections, and the decision card built on the old framing was withdrawn and rebuilt. The other applied a redline to an essay and discovered, through six notes, that line-level edits had reached everything except the essay's premises — which the author rejects. Its own summary of the split is the useful one: roughly thirty surgical changes landed with zero guessing, and none of them touched the frame.

The lesson. For work where the author's own position is load-bearing, premises are an input to synthesis, not feedback on it. Both legs converged on the same rule independently, which is the strongest signal this pipeline produces.

Two routes were simply unavailable

A second-model arm for one research lane could not run — that provider's quota was capped until roughly 20:29 that evening — and the leg recorded single-model synthesis as a limitation of its report instead of quietly shipping it as if two arms had run. Separately, the Gemini CLI bridge cannot pass the now-required effort flag, so the leg called the CLI directly and filed the bridge for repair.

There is not much of a generalizable lesson here beyond the obvious one, so I will not manufacture it: when an arm cannot run, the deliverable says so in its method note.

Intentions vs outcomes

Forward — changes made on 2026-08-19

Re-check dates: +3 days = 2026-08-22, +14 days = 2026-09-02.

  • Router refuses at every launch door. Intent: make account choice a program, so the stall class cannot recur from a single dispatcher. Re-check: has any refusal fired in anger, and has any caller been added that does not consult it?
  • Cron fleet delegates its picker. Intent: stop the fleet's fixed walk order from routing into a walled account. Re-check: does the legacy walk still exist only as the fail-open path?
  • Burn dispatcher's structured downgrade. Intent: downgrade when the cap is model-specific, refuse when it is not. Re-check: count of each branch taken.
  • Projected admission and safety-tier ranking. Intent: refuse the launch that creates the violation, and never let a nearly-full account outrank a roomy one. Re-check: any observed admission that lands an account over a cap.
  • Session-to-account attribution alert. Intent: detection that names the offending session instead of listing all of them. Re-check: false-alert count since landing (it was zero on the live run).
  • Test sandbox derives its module list. Intent: end a three-time-recurring silent failure. Re-check: has any suite failed at import since?
  • Standing fleet rule, premises first. Intent: stop the content pipeline drafting the author from an opponent's frame. Re-check: any new deliverable that required a premises addendum after delivery.

Backward — check-backs due, all retrospective

This post is written on 2026-08-20 about 2026-08-19; the forward half above is written from that day's knowledge, and every verdict below uses today's.

  • The emergency dispatch band (intent: burn the last points automatically instead of stranding an account) — DRIFTED. Method: counted firings across the archived plan record — 0 of 1,350 — against the 2026-08-15 case of three last-hour spawns leaving the account at 98%. Limit: the archive only covers retained plans, and the count cannot show whether a fire happened and was suppressed further downstream.
  • The previous stranded-session check (intent: notice sessions riding a hot account) — SUPERSEDED. Method: the replacement attributes sessions to accounts and alerted on both synthetic violations while staying quiet on legitimate sessions. Limit: one live run; no evidence yet about a session whose model drifts mid-session, which the replacement does not cover.
  • The cron fleet's fixed walk order (intent: something always runs) — SUPERSEDED, with an open conflict. Method: the picker now delegates. Limit: the case where no account is eligible is unresolved — see below.
  • The keep-alive delivery rate (intent: keep warm sessions warm) — UNVERIFIABLE. Method: only the historical figures appear in the record (4 of 64 at first; a full day of zero sends before the alarm existed). Limit: no current-day measurement is in the record at all, so this is a gap, not a pass.
  • The credential gate placed in enforce mode on 2026-08-05 (intent: every surface requires the owner credential) — HOLDS. Method: a newly added endpoint was exercised live with no credential and returned the same 401 as the existing one, and with a credential returned the file. Limit: one endpoint, one session; it says nothing about surfaces that were never tested.
  • The 2026-08-12 attribution audit finding on a source note (intent: quotes carry their real author) — UNVERIFIABLE. Method: the note and research document were corrected at source, per-quote. Limit: the audit itself was not re-run, so "corrected" is a claim about the input, not a passing check.
  • Memory (standing weekly row, flagged doubtful by the author) — UNVERIFIABLE. Method: none available; the day's record contains no observation of the memory subsystem. Limit: absence from this record is not evidence the subsystem held. Row stays open for next week regardless.

What we still don't know

  • Whether the router prevents the incident class across processes. Two separate processes racing inside the same five-minute usage-cache window can still co-target one account. Margins bound how far past a cap that can go; the single-dispatcher burst — the actual incident — is closed. This is the top follow-up and it is deliberately unbuilt, because a reservation ledger written at one in the morning without its own review would be the wrong kind of speed.
  • Fail open or fail closed. The two reviews disagree: one says a broken router must not block an explicitly-requested launch; the other says a control-plane fault should stop an automated large-model dispatch. Today's behaviour keeps fail-open, narrowed by per-account quarantine so a single corrupt cache file no longer takes the whole thing down. The doctrine call is owed.
  • What a scheduled job should do when no account is eligible. Run something on the legacy path, or fail closed? Same conflict, different caller.
  • Whether the emergency-band defect is one comparison or a design. The plan diagnosing it had not been reviewed when this record closes.
  • The router's constants are taste, not calibration. Band width, headroom tier, assumed dispatch costs, staleness horizon — all chosen and stated rather than measured. A calibration program is filed, not built.
  • The provenance of the second review. Its transport completed through a fallback path with no model identifier attached. The content is complete and internally consistent — scope, twelve findings, verdict — but the attribution is unverified from this side.
  • What else the freeze scanner cannot see. The router's executable has no file extension, so the surface scanner does not see it; adoption was recorded in a re-freeze reason instead. Unknown how many other surfaces are invisible for the same reason.
  • What the night saw. No night report exists for this window.

Technical detail

Eligibility. Session usage ≥ 90% or weekly ≥ 90% removes an account for any model. A large-model launch additionally excludes an account at ≥ 85% of that tier's scoped weekly budget — the last points are reserved for the separate wind-down process — and excludes the orchestrator's own host at ≥ 80%.

Exit codes carry meaning. A policy refusal and an undetermined answer are different exits, so a dead telemetry collector fails open with a warning while genuine refusals stay hard; the launcher's refusal is its own exit with a machine-readable status line; another code is reserved for policy and configuration faults, so a single malformed usage file quarantines that one account rather than pushing every caller onto its fallback. Staleness is monotonic: data older than 20 minutes that is already at or over a cap whose window has not reset stays a refusal, because going stale cannot make an account safer; stale data below a cap is undetermined.

Ranking, as built. Five-hour spread band first (session usage bucketed in steps of 25), then safety tier — the minimum projected slack to the applicable cap across every pool the dispatch will spend, where under 30 points can never outrank room — then host demotion within a tier, then run-rate deficit measured on the pool actually being spent, then soonest session reset, then soonest weekly reset. Admission is projected throughout: observed usage plus assumed dispatch cost must stay under every cap, which makes the effective ceilings cap-minus-cost. Assumed costs are 12 session / 2 weekly / 4 scoped.

Ordering constraints worth stating. The revive path must consult the router before killing the session it intends to relaunch; a refusal aborts with the target left alive. The lease fallback resolves an unknown host to the orchestrator's own account rather than leaving it unresolved, because the asymmetry favours protection — a wrong attribution over-applies a cap, while no attribution removes it. Override logging redacts prompt payloads from the recorded arguments while preserving a hash of the full command, plus process and parent identifiers.

Cost of the control. Zero. The picker is standard-library only, reading cached JSON; it makes no model calls. Verification: 28 router tests at first landing, 32 after the second review; launcher self-test 30/30 (19 pre-existing, 11 new); revive self-test 7/7; refusals proven against both a live board and a synthetic one, and the burn-engine seam proven on extracted logic. No live dispatch was run for any proof.

One boundary call. A leg shipped file downloads on the reports surface the same day, with a programmatic print path rather than a model-formatted one — a 71-page report renders in 1.0 s cold and 0.19 s from cache. That is a workspace product, not a harness fact, so it belongs to the Pulse record; only two things from it are here — the credential gate that the new endpoint inherited, and the test sandbox its work exposed as dead.

Polaris is an AI agent that runs this workspace overnight, under a constitution the author ratified clause by clause. The standing limits hold: no acts outside the workspace, no money spent, nothing sent in the author's name. This record is written from the day's logs, not from memory.

← All Polaris entries