Part of Polaris — an experiment in delegated stewardship

Prose Promises Don't Survive Event Load

Ashita Orbis | August 1, 2026 | 24 min read | daily log

Covers the calendar day of 2026-08-01. There is no night report in the standing report directory for this date — the report covering the 07-31 evening to 08-01 morning window was written and filed into the day's working directory instead, so this entry is built from that directory's record: the orchestrator's own pass ledger, the worker reports and status files dated to the day, the decision ledger, the question queue, and the overnight session closer's state file.

The short version

  • One orchestrator generation held the whole day. It took the lease at 20:08:57Z the previous evening and was still holding it at midnight; its own ledger carries fifty-five numbered passes timestamped inside the calendar day. Nothing knocked the lease holder off its model tier — a change from four days earlier, when a safety classifier silently downgraded it four times in ninety minutes. One worker was downgraded to Opus 4.8 in the evening by the same mechanism.
  • Three things the orchestrator had been doing by remembering became automatic checks, all on the same day — and each conversion happened only after the remembered version had already failed. The largest: twenty drafted questions from ten different workers were sitting unqueued, never asked, because "queue these next pass" had been written as a note in a ledger rather than built as a mechanism.
  • The orchestrator minted eight registry rows at numbers another writer had already used, because it inserted after the highest row it had seen rather than the highest row in the file. Two completion stamps consequently landed on unrelated work. Repaired the same morning; the rows were renumbered and every stamp re-verified.
  • A long private document printed three copies. A worker submitted a print job, saw no paper, and submitted again. The print queue holds every submission and releases one more at each power-on. A ghost fourth copy was caught mid-page and cancelled.
  • An audit of how the author's instructions get into the work found eight that had gone nowhere at all. Of 323 directives extracted from 161 flagged answer records, 229 were done, 80 registered, 6 were extraction errors, and 8 had simply fallen through. Separately, 17 substantive answers had no extraction record of any kind — the pipeline had never looked at them.
  • A monitoring sweep had been running with its output thrown away. To clear a pending event, several passes ran the full sweep and discarded what it printed. The cursor advanced; the alerts were never read. An escalation went four hours unanswered before a backstop caught it.
  • The overnight session closer evaluated 352 sessions, attempted exactly one close, and closed nothing. It recorded its own outcome as blocked. Twenty-two sessions were skipped as recently active, eight because their identity could not be resolved, and one — the orchestrator's own seat — because the identity lookup disagreed with the lease record.
  • A safety test inside a scheduled job failed for the second day running while passing when run by hand. The evaluation policy has no branch distinguishing "the proposal failed the test" from "the test did not run", so roughly ten records were closed to a permanent rejected state citing evidence a working test does not support.

What changed in the harness

Three checks the orchestrator used to perform from memory became code in the per-pass sweep. All three follow the same pattern: a rule the orchestrator was supposed to apply every pass, that it stopped applying under load, converted into something that fires whether anyone remembers or not.

  • A drafted-question reconciliation. Intent: no question a worker drafts for the author can sit unasked, because every draft file is diffed against the live queue on every sweep and orphans are named. Installed in the evening after the author reported the backlog.
  • An end-of-window allowance alert. Intent: an accounting rule that only existed in the orchestrator's head — spend the allowance that is about to expire — fires as an alert when more than ten points sit unspent inside the final five hours.
  • A linear pace alert. Intent: catch under-spend at any point in the week, not only in the last forty-eight hours, which is the only window the previous check covered.

Registry rows are now minted at dispatch time rather than at close. Intent: work that was commissioned, executed correctly and finished should be findable by the recovery machinery, which keys entirely off registry rows and therefore cannot see anything that never got one. Adopted from a sweep finding in the small hours and first used the same night.

The next row number is now computed as the maximum across the whole file, at mint time. Intent: two writers appending to the same registry must not be able to choose the same number.

A standing printer protocol. Intent: an action whose effect the agent cannot directly observe is verified against the system's own record, never against the physical result, and "nothing appeared" escalates instead of retrying. System defaults were also set to double-sided and a single copy, so a count can only rise by explicit instruction.

Sweep output must be read, not merely produced. Intent: no monitor advances its cursor past content nobody looked at. The habit of running a sweep and discarding its output to consume a pending event was abolished outright.

No worker gets nudged without reading its status file in the same pass. Intent: stop spending orchestrator actions on workers that already finished. It paid within one pass — three of four workers flagged as needing attention turned out to be complete.

Dispatch routing switched to soonest-reset-first. Intent: consume the allowance that expires soonest before the allowance that does not, so nothing evaporates unused. Recorded as a standing rule with four ordered overrides — tier fit, sticky context, one editor per tree, and a reserve floor so a mid-emergency handoff can never be blocked for want of capacity (D-P24-2).

Credential-shaped files were excluded from cross-machine replication. Intent: a file written with restrictive permissions should stay restricted, which it does not when it is replicated — the receiving side re-widens it. The deliberate cost is that the second machine no longer receives fresh configuration and must be provisioned by hand.

Corrections now regenerate their audio reading in the same deploy. Intent: a corrected text and the recording that narrates it can never diverge on the live site.

What broke

Twenty questions that were never asked

How it was detected. The author reported it. The orchestrator's own accounting then found the report had undersold the problem.

What actually caused it. Twenty cards drafted by ten different workers were sitting in draft files, never queued to the author. The cause was structural rather than any one mistake: workers draft questions, the orchestrator hand-carries them to the queue, and the carrying step lived only as prose — "queue these next pass" — written into a ledger. Under a day of inbound events, two of the orchestrator's own such notes were simply overwritten by what came next.

What was done. All twenty were queued the same pass, each attributed to the worker that drafted it, with an honest accounting sent to the author. Then the carrying step was replaced with a mechanical reconciliation: every draft file diffed against the queue on every sweep, orphans alerted by name.

The lesson that generalizes. A promise recorded in an agent's working notes is not a mechanism; it is a memory, and memory is exactly what fails under load. If a handoff between two parts of your system exists only as a sentence one part wrote to itself, it will hold on quiet days and fail on the days that matter. The test is whether the step survives the agent forgetting it.

The mechanism's first real catch came about forty minutes after install: three cards drafted less than half an hour earlier, named by the sweep, queued the same pass. That is one catch on the day it shipped, which is encouraging and is not evidence it survives a handover.

Eight rows at numbers that were already taken

How it was detected. A completion stamp landed on the wrong work. Checking why exposed the rest.

What actually caused it. The orchestrator minted eight new registry rows by inserting after the highest row number it had seen during its own session. It never read the file's true maximum. A worker had appended a block of rows at those same numbers.

What was done. The eight were renumbered, with aliases so that primers and status files citing the old numbers still resolve; the two false completion stamps were stripped; the registry was verified to contain no duplicate number.

The lesson that generalizes. Bare ordinals are unsafe identifiers the moment more than one process can write. The detail worth keeping is which stamps survived: every stamp that day which addressed its target by content landed correctly, and the only two that mis-landed were the two that addressed it by bare number. If several writers share a record, address rows by what they say, not by where they sit.

A related finding, from a registry sweep earlier the same night: the assumption that the registry file has a single writer is not currently true — it took a concurrent write during the sweep. The sweep's edits happened to be surgical string replacements, so both survived.

The printer that kept printing

How it was detected. The author reported that a long private document had printed three copies, and that an earlier document had over-printed too. The orchestrator caught the ghost fourth copy printing live, mid-page, at the moment a power-on released it, and cancelled it.

What actually caused it. Resubmit-on-uncertainty. A worker submits a job, no paper appears because the printer is asleep or off, and the worker submits again. The queue keeps every submission and releases one more each time the printer wakes — so the copies arrive later, seemingly on their own.

What was done. A standing protocol: check the queue and the recent-jobs history before submitting, submit exactly once, capture the job identifier, and verify by watching that identifier leave the queue and appear in the completed list. A queued job with no paper is an escalation, never a resubmission. Defaults were set so that a copy count above one requires explicit instruction.

The lesson that generalizes. This is the general shape of every duplicated side effect an agent will ever cause. When the action's real effect is not directly observable, the agent substitutes an observable proxy — paper in the tray — and the proxy fails independently of the action. The fix is not "be more careful"; it is to verify against the system's own record of the request, and to make the absence of an observed effect an escalation rather than a retry.

The sweep that ate its own alerts

How it was detected. A backstop that fires when an escalation goes more than four hours unanswered.

What actually caused it. Pending guard events have to be consumed. Several passes consumed them by running the full monitoring sweep and redirecting its output away. The event was cleared, the read cursor advanced, and the alerts inside that output were never seen. One escalation was answered four hours late as a direct result.

What was done. The habit was abolished — every sweep's output is now checked — and the rule was written into the briefing the next generation inherits.

The lesson that generalizes. Consuming an event and reading it are different operations, and a system that lets you do the first without the second has a silent-swallow path through the middle of its alerting. If marking-as-read is separable from surfacing content, something will eventually separate them, usually for a locally sensible reason.

The intake path, audited

How it was detected. A sweep commissioned specifically to walk the extraction store — the record of every directive pulled out of the author's answers — and adjudicate each entry against the registry, status files, reports, decision ledger and queues.

What actually caused it. Two distinct leaks. First, eight directives were extracted correctly and then never registered, carded, queued or acted on; they existed in the extraction store and nowhere else. Second, seventeen substantive answers had no extraction record at all, including one that a batch-window seam had dropped: one pass read answers through 05:20Z, the next started at 05:24Z, and an answer left at 05:21Z fell into the gap.

What was done. The eight were written up as a requeue list for registration. Extraction was run over the seventeen, and every newly-flagged record adjudicated. The pending-extraction check now returns clean up to its own timestamp, and the standing note is to run it even when the tail of the queue looks processed.

The lesson that generalizes. Two things. Cursor-based batch processing where each batch picks its own window will drop whatever lands between the windows — the gap is invisible from inside either batch, and only an absence check finds it. And an extraction pipeline needs "there is no record for this input" to be a queryable state, distinct from "the record says nothing was found"; the store's whole value is that absence means unexamined.

The audit is honest about its own reach: it verified that a directive was carried, not that the carried work was any good.

The night that closed nothing

How it was detected. The closer writes its own state file, including its counts.

What actually caused it. For the night beginning 08-01, the closer evaluated 352 sessions, attempted a single close, and closed nothing. Its outcome field reads blocked. Of the 31 skips: 22 sessions had been active within the last thirty minutes, 8 had no resolvable session identity, and one was the orchestrator's own seat, exempted with a note that the identity lookup and the lease record disagreed about which session it was. The single close attempt was deferred because the target's input frame could not be read unambiguously.

What was done. Nothing, on the day. The counts were recorded and the night ended.

The lesson that generalizes. A conservative closer that skips everything doubtful is the right design and produces a number — zero — that looks identical whether the caution is working or the mechanism is dead. Twenty-two of the skips were sessions that genuinely were active, which is the correct answer. Nothing in the state file distinguishes that from the case where the closer would never close anything. See the ledger below for what the following week says about which it was.

A gate with no third outcome

How it was detected. The previous day's observation of the scheduled-job fleet had pre-registered a trigger: if this safety harness misses a second time, run it by hand before trusting any rejection it produces. It missed a second time, and the trigger was executed.

What actually caused it. Unknown, and deliberately left unknown. Run by hand, the safety harness passes cleanly. It fails only inside the scheduled run, on two consecutive days, with near-identical signatures. The observer could not isolate the cause, declined to guess, and declined to fix it — noting that the usual explanations do not apply, because the harness already invokes its inner process with the caller's environment stripped.

What was done. Escalated to an incident, with a standing instruction that every rejection citing a failed safety test be treated as unverified until the environment is fixed. The downstream effect was recorded plainly: because the evaluation policy says a failed test sets the score to zero and rejects automatically, and has no branch for the test did not run, roughly ten records were driven to a permanent rejected state on evidence that does not exist. The direction of failure is safe — it rejects rather than approves — so nothing unvetted was integrated. The damage is to the record, not the runtime.

The lesson that generalizes. Any automated gate needs three outcomes, not two: passed, failed, and could not be evaluated. Collapsing the third into the second converts every environmental fault into a permanent verdict about the subject, and it does so invisibly, because the pipeline reports healthy while silently refusing an entire class of input.

Three corrections, all the orchestrator's own

Smaller, and grouped because they share a cause. In each case the orchestrator acted on a picture of the world it had not refreshed.

  • A measurement of the wrong thing. A status endpoint returns an object with three keys; the orchestrator measured its length, got three, and reported that a route was serving three items. It was serving twenty-two throughout, and the worker's contrary verifications had been right all along. Retracted to the worker with an apology and corrected in the ledger. Verify the shape of a response before trusting a measurement of it.
  • An order given on a stale picture. The orchestrator ordered a same-day structural change based on a forty-minute-old reading, and marked it urgent. The worker filed a blocking counter and was right twice over — the deploys it was told to make had already succeeded, and the surface the change was meant to protect reads its content from a different place. The order was rescinded and replaced with a validation step at staging time. A worker that refuses an order and shows its work is doing its job.
  • Four nudges to a worker that had finished. A verification probe was wrong about a worker's state; four escalating prompts were spent on a session that had closed hours earlier, and a dependent piece of work stayed blocked five hours for no reason. This is what produced the status-head-first rule above.

There is a fourth, mechanical rather than epistemic, worth recording for anyone whose agent runs shell commands: the working directory persists between tool calls, and a relative-path write after a directory change silently landed in the wrong tree. Twice in one hour. The session moved to absolute paths only.

Intentions vs outcomes

Forward — changes made 2026-08-01

Re-check dates: +3 days is 2026-08-04, +14 days is 2026-08-15.

Change Intent Recheck
Drafted-question reconciliation in the per-pass sweep No question drafted for the author sits unasked 08-04 · 08-15
End-of-window and linear pace allowance alerts as code Spend rules fire without the orchestrator remembering them 08-04 · 08-15
Registry rows minted at dispatch, not at close Commissioned work is findable by machinery that keys off rows 08-04 · 08-15
Next row number = maximum of the whole file, computed at mint Two writers cannot select the same identifier 08-04 · 08-15
Printer protocol: verify by job identifier, escalate on no effect An unobservable side effect is never retried into duplicates 08-04 · 08-15
Sweep output must be read, never discarded to clear an event No monitor advances its cursor over content nobody read 08-04 · 08-15
Status file read in the same pass before any nudge No orchestrator action is taken against a stale picture 08-04 · 08-15
Soonest-reset-first dispatch routing, four ordered overrides Expiring capacity is consumed before durable capacity 08-04 · 08-15
Credential-shaped files excluded from cross-machine replication Restrictive permissions are not silently widened by copying 08-04 · 08-15
Corrections regenerate their audio reading in the same deploy A corrected text and its narration cannot diverge live 08-04 · 08-15

One same-day observation, recorded rather than counted as a result: the drafted-question reconciliation caught three real orphans about forty minutes after it was installed. That is the mechanism working once, on the day it shipped, under the attention of the person who built it.

Backward — check-backs, all retrospective

These are written from the record as it stands on 2026-08-07, not from 08-01's knowledge, and are labelled retrospective for that reason.

Memory extraction and recall — intended 07-19 through 07-20; the author's standing doubt. Intent: a searchable, verifiable memory across the whole workspace. HOLDS, mechanically. Method, and the reason this row is here at all: on 08-01 a worker re-ran all 21 benchmark queries against the live index and reported measured numbers rather than an impression — median latency 443.6 ms, 95th percentile 663.4 ms, and 18 hits against 1 miss on the 19 queries that can be scored mechanically. Two prior misses now hit; no regression. Limit: the benchmark suite was authored against the index it tests, two of its queries need human judgment, and none of this measures whether recall answers the questions that actually get asked. The same session found the real instrument for that — a telemetry log of live lookups — holds 18 events per day and zero fully-labelled failure cases, which means the honest answer to "is recall good" is still weeks of accumulation away. This row stays open on the standing weekly re-check until the author closes it himself.

The content firewall and tier stability — intended 07-28. Intent: keep classifier-tripping material out of the orchestrator's context so the lease holder stops falling off its model tier. HOLDS for the orchestrator on this day. Method: the generation's own ledger shows a single lease holder from 20:08:57Z the previous evening through the end of 08-01, across fifty-five passes, with no downgrade recorded against itself — where four days earlier the same ledger recorded four. Limit: the absence of a recorded downgrade in a session's own ledger is not proof none occurred, and it says nothing about workers. One worker was downgraded to Opus 4.8 that evening by the same fallback mechanism, in violation of a standing rule against that tier; it was instructed to flag everything it produced afterwards for re-evaluation.

The overnight session closer — intended 07-28, designed to reap finished sessions with no model in the kill path. DRIFTED. Method: reading every state file the closer has written. It runs, it decides, and it records — and on every night with a state file from 2026-07-20 through 2026-08-06, sixteen nights, the outcome field reads blocked and the closed count is zero. On 08-01 specifically it evaluated 352 sessions and attempted one close. Limit: this counts closes, not correctness. On a night where every candidate is genuinely active, zero is the right answer, and 22 of 08-01's 31 skips were exactly that case — but that does not explain the other fifteen nights. A repair row is owed, and a later investigation has since been commissioned into this class of silent stall.

Dispatch-artifact integrity — no prior intent row; opened here. DRIFTED, found by accident. Method: a registry sweep on 08-01 reviewing reaped workers found that one worker's briefing file had been written as zero bytes the previous day. The worker reconstructed its mission from surrounding context and completed the job correctly. Limit: one observed instance, found incidentally; nothing measures how often a dispatcher emits an empty or wrong briefing, and a briefing that is merely wrong would not announce itself the way an empty one does.

The deploy branch pin — intended 07-24, repaired 07-28. UNVERIFIABLE from this day's record. Method: none available — nothing in the 08-01 sources fetches a public URL to confirm which environment a deploy reached. Per the standing rule, the row stays open rather than being retired on the assumption that a fix held.

What we still don't know

  • Why the safety test passes by hand and fails inside the scheduled run. The observer explicitly declined to guess and recorded the failure as unexplained. Whether the roughly ten records rejected on its false evidence have since been reopened is not established by any source here.
  • Whether the drafted-question reconciliation survives a handover. It caught real orphans within an hour of being installed, watched by the session that installed it. Nothing yet says it still fires after the generation that built it hands off.
  • Whether the night closer's zero is caution or death. Sixteen consecutive nights of the same result is a strong signal and not a diagnosis; the state files record what was decided, not whether any candidate deserved closing.
  • Whether eight dropped directives is the whole leak. The audit verified that each surviving directive was carried, not that the work it produced was any good, and its own-verdict spot-checks covered five sampled entries out of hundreds.
  • How often two writers collide on the shared registry. The single-writer assumption was shown false on 08-01. The new minting rule prevents identical numbers; nothing measures how often concurrent writes happen or what else they can disturb.
  • Whether recall is good in the sense the author means. Every check available measures the machinery. The instrument that would measure the answers is accumulating at eighteen lookups a day with nothing labelled yet.

Technical detail

Generation and pass shape. One lease holder for the entire calendar day, claimed at 20:08:57Z on 07-31 as a downgrade succession. Its ledger carries 55 pass entries timestamped within 08-01, mixing scheduled economy passes, event-driven wakes from the guard, gate-result wakes, and passes triggered by inbound author messages. Thirty-nine answers from the author were recorded that day, thirty-two of them inside a fifty-minute burst before dawn; fifty-six new questions were queued back.

What the per-pass check gained. Three mechanisms, all added the same day and all syntax-checked and live-verified against a real condition before being trusted: an alert when more than ten points of an expiring allowance remain unspent within five hours of its reset; an alert when spend is more than twelve points behind a linear pace at any horizon; and a reconciliation that diffs every drafted-question file against the live queue on each sweep and names orphans individually. The first of these fired immediately and correctly on the state that prompted it, and will keep firing every sweep until the condition clears — which is the intended behaviour for a real condition rather than a notification.

Identifier discipline. The registry collision is a clean natural experiment. Within the same session, completion stamps that located their target by a content marker all landed correctly; the two that located it by a bare row number were exactly the two that mis-landed after a concurrent writer occupied those numbers. The corrective rule computes the next number from the file's global maximum at mint time, and the repair preserved old numbers as aliases so that already-dispatched briefings and status files keep resolving.

The closer's skip taxonomy. For the 08-01 night: 352 sessions evaluated, 31 skipped, 1 close attempted, 0 closed, 0 errors. Skips break down as 22 for activity inside the last thirty minutes, 8 for an unresolvable session identity, and 1 exemption for the orchestrator's own seat — recorded with the note that the row's identity resolution disagreed with the lease record, which is itself worth flagging: two independent sources of truth about which session is which, disagreeing, on the one session that must never be closed by mistake. The single close attempt was deferred because the target's input state could not be parsed unambiguously.

Print queue semantics. Every submission is retained and released at the next device wake, so a resubmission is not idempotent and its effect is deferred past the point where the agent is still watching. The protocol therefore verifies by request identifier — job present in the queue, then job present in the completed history — and treats queued-with-no-output as a device state to escalate, never as a reason to submit again.

Permissions across replication. Restrictive file modes are not preserved by the replication layer between machines; the receiving side re-creates files with wider modes. A secret written with owner-only permissions inside a replicated tree is therefore not protected by those permissions on any other machine. The remedy applied was exclusion by filename pattern at the replication layer, with the accepted cost that the second machine must be configured by hand.

Authority limits observed. The orchestrator could not write a scheduled-job entry or terminate finished worker panes itself — both are refused by its own safety layer — so the scheduling line was delivered to the author as a paste-ready block and finished sessions accumulated on a stand-down list awaiting his action. The relevant point for anyone building this: capability boundaries inside the agent produce queues outside it, and those queues need an owner and a cadence or they become the bottleneck.


Polaris is an AI agent that runs this workspace overnight under a constitution the author ratified clause by clause. The standing limits have not moved since the first night: 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