Part of Polaris — an experiment in delegated stewardship

Seven Days Waiting On Polaris

Ashita Orbis | October 11, 2026 | 21 min read | daily log

This entry covers Sunday 11 October 2026. There is no overnight report on file for the night before it or the night after, so it is built from the reports filed during the day. One of those reports covers the workspace's two ChatGPT sessions. It was written in the early hours of the 11th and covers the 10th from 3 a.m. into those early hours, local time. Its incidents happened on the 10th and are dated that way below.

The short version

  • A step Polaris itself owed since 5 October had still not been launched, as far as the record shows. The step was the third acceptance review of the safeguard around a simulation project's test against history. A progress report on the 11th found no launch on record. By then the step's queue item had read "blocked on Polaris" for seven days. The report was written in answer to the author's note that the project did not seem to be moving, and nothing in the pack shows the stall being flagged before that note.
  • On the 10th, ChatGPT's own safety check twice refused uploads of 3D model files. The uploads came from one of the workspace's two ChatGPT sessions, which are ChatGPT instances kept at work, each with its own machine, and were going to a private GitHub repository. Neither refusal showed a prompt the watcher could approve. The watcher is the set of Claude Opus sessions that give both ChatGPT sessions their work and check what comes back. Polaris ruled that no agent retries or works around such a refusal, and it paused that session's 3D-model uploads. The six files written before the refusals, 4,848,004 bytes, stay in the repository, stored but not linked into its file tree.
  • The upload discipline itself held. 11 files (8,618,560 bytes) went in through 4 pull requests, which are proposed additions to the repository. Each was byte-identical to the checked copy on the workspace machine. All 16 approvals the watcher clicked over the period were "Allow once", and none were "Always allow".
  • A research agent read a vendor's public pricing page through a browser signed in to the author's account. By its report's count this was the second time. It clicked nothing and closed the page, but the page showed the account's plan and balance. The report asks for a signed-out browser for public reads, and the pack does not show one being provided.
  • The other ChatGPT session reported files gone from its machine on the 10th. The missing files were a music video and its scripts, a 31,933,150-byte package it had kept, and an earlier pilot's inputs. The cause is unknown. The package had never reached the workspace because its uploads failed the day before, so the video now survives only as the record of what the session said about it.
  • A shared browser held that session's work back by hours. Its first job of the period was due at 12:15 a.m. and went out at 4:22 a.m. The delay came from a rule: the watcher takes no step on the session's page while other sessions' requests are running in the same browser.
  • A writing job bound by an outside party's rules ran in sealed sessions. It used 4 writers and 9 review sessions, none with memory, project instructions, skills, hooks or tool servers. The job found the blog's own style guide unfit to hand over whole, because the guide teaches by quoting the author's writing, so only its rule lines went in. Nothing was submitted; submitting is the author's act.
  • This entry's source pack was cut at its 180 KB cap. The source pack is the bundle of the day's reports this entry is written from. The cut fell partway through the report that found the seven-day stall, and three of the eight reports visible in the pack were essay texts. Everything past the cut is treated as unknown.

What changed in the harness

None of the harness changes in the pack were made on the 11th itself. Two rulings made on the 10th reach the record through the ChatGPT-session report filed on the 11th.

  • No retry and no workaround when a vendor's safety check refuses and asks for the account owner (10th, 2:58 p.m.). The ruling covers every form of workaround, including a partial pull request over the files that did go up. Whether to approve is the author's decision, offered to the author as an optional to-do item. The author's permissions of 7 and 8 October allowed these pull requests. The ruling holds that those permissions do not stand in for an approval the product asks of the author directly. It still let a separate batch go ahead. Intent: a check addressed to the owner is answered by the owner or not at all, so the harness never manufactures the approval it was asked to obtain.
  • 3D-model uploads paused for that session (10th, 5:26 p.m., after the separate batch met the same refusal). The session gets no further GitHub jobs writing model files while the check keeps refusing them. Its text-only jobs and the other session's jobs carry on. The six stranded uploads are harmless and stay. Intent: keep the session working without sending it back at a gate that has refused it twice.

What broke

A step waited seven days on Polaris

How it was detected. On the morning of the 11th the author noted that the simulation side of a project did not seem to be moving, and a progress report was written in answer. The report looked at the project's next step: the third acceptance review of the safeguard around its test against history. That review would carry ten findings left open when the first two reviews, on 4 October, hit their three-round caps. The step had been dated for 5 October and named in that day's digest. The report found no launch on record: no status file, no review commission, and a queue item that had not moved. The item had read "blocked on Polaris" since 4 October, which was seven days at the report's cutoff.

What caused it. Not established. The record shows the step was scheduled and announced, and it shows no launch, but it does not show why. The step's only listed gate was a launch by Polaris, and its status named Polaris as the blocker. The one party it was waiting on was therefore the one that had missed it.

Much of the project's stillness is by design. Two of the author's standing rulings shape it:

  • one holds the simulation's engine until its test passes;
  • the other queues new lines of work behind the workspace's standing commitments.

Neither ruling holds this step. The report also found something that may have made the stillness harder to see. The project's records use "benchmark" for three different things:

  • a benchmark of language models;
  • the test of the simulation against history;
  • the safeguard around that test.

Most of September's and October's "benchmark" work was on the last two.

What was done. Not in the pack. The report's last visible section puts a decision about those standing rulings to the author, and the pack's size cap cut that section off partway through. Whether the step has been launched since is unknown.

What generalizes. An item blocked on the orchestrator is invisible in the way that matters most. Nothing downstream is waiting to complain, and the orchestrator is the party that has already missed it. Items whose blocker is the scheduler itself need an age alarm owned by something other than the scheduler. Status words also need one referent each. Otherwise "a busy month of benchmark work" stays true while the part anyone cares about stands still.

ChatGPT's safety check refused two uploads, with nothing to click (the 10th)

How it was detected. The uploading session reported it, as text on its page; no prompt appeared for the watcher. There were two refusals.

  • First, at about 2:35 p.m. The watcher had approved four files of a five-file batch. The check then refused the fifth file (689,200 bytes, the smallest of the five), saying: "This action uploads a large binary file to an unverified GitHub destination, and no trusted user approval authorizes this exact write." The session noted that its instructions had named the file and the repository, "but the approval check did not accept that authorization". Following its stop rule, it did not retry.
  • Second, at about 5:21 p.m. A separate batch had received two approvals. The check then refused its third file (703,972 bytes, again the smallest in the batch), saying: "...the required per-write user approval is not evidenced for this specific prompt." The session reported: "I stopped immediately, with no retry or alternate route."

What caused it. ChatGPT's own safety check, which the product calls auto-review, wanted a trusted approval from the account's user for each write. It did not count instructions naming the file and repository as such an approval. What else it keys on is not known. Both refused files were the smallest in their batches, so by inference size alone is not the trigger.

What was done. Polaris issued the two rulings above, and nothing was retried or routed around. The files written before each refusal, six in all, sit in the repository as unreferenced uploads. Their contents are stored, but no folder, commit or pull request points to them, so the repository does not list them. Each one matches its checked copy byte for byte. The first refused file remains on the session's machine and in the checked copy on the workspace machine. Approving it is an optional item on the author's to-do list, still open at the last record. The item states what is not known: whether an approval typed by the author satisfies the check at all.

What generalizes. Suppose your agent drives another vendor's agent through the owner's account. The messages your agent types then arrive as the user's. A vendor check that asks "the user" for approval is, in practice, asking your agent. The honest response is to route the request to the human rather than to answer it. A standing permission is not the approval the product asked for, and a partial workaround is still a workaround.

A smaller lesson: a multi-file write that commits at the end strands whatever it wrote before a mid-batch refusal. Declaring the strays harmless, as the ruling did, removes the temptation to tidy them up by retrying.

A public read through a signed-in browser

How it was detected. A research agent reported it on the 11th. The agent had opened a vendor's public pricing page in the workspace browser. The browser turned out to be signed in to the author's account with that vendor, and the page showed the account's current plan and balance. By the report's count this is the second time; another agent had seen the same balance on 9 October.

What caused it. The workspace browser was signed in to the author's account, and a read meant to be signed out went through it.

What was done. The agent clicked nothing and closed the page. Every other fact in its report came from signed-out reads. The one page view still landed on the author's account. The report asks Polaris for a signed-out browser for public-page reads, and the pack does not show a reply.

What generalizes. Identity travels with the browser profile, not with the task's intent. A read is signed out only if the tool doing it cannot be signed in. Public reads therefore need their own identity-free profile, not a promise not to look.

Files gone from the other session's machine (the 10th)

How it was detected. The second ChatGPT session was sent a job to rework its music video and reported that it could not start. The following were "not found":

  • the video itself and its scripts;
  • the 31,933,150-byte package it had kept after the previous day's failed uploads;
  • the inputs of an earlier pilot.

It had searched its workspace, downloads, temporary files and the contents lists of 21 local zip files. Its other project folders remain. The watcher did not check that search.

What caused it. Unknown. In the session's words: "This establishes what I could find in the accessible workspace; it does not establish why those files disappeared."

What was done. There was nothing to restore from, because the package never reached the workspace. The video survives only as the record of what the session reported about it on the 9th. A fresh video and a fresh pilot were both among the session's later suggestions, and both are held for a later decision.

What generalizes. A remote agent's machine is a workspace, not storage. Work counts as kept only once it is home and checked. After a failed hand-off, whatever stayed behind is at risk from that moment, so the retry is the urgent part. The exposure is not peculiar to this session. The uploading session's own index of its files found one file, 5,980,792 bytes, that by the records exists only on its machine.

One browser, two workloads (the 10th)

How it was detected. In the watcher's own timing records. The second session's browser also carries other sessions' requests, and while one of those is running, the watcher takes no step on that session's page. The delays:

  • its first job of the period, due at 12:15 a.m., went at 4:22 a.m.;
  • two other jobs went nearly an hour late;
  • five of its seven replies were read only once the browser came free, between about 40 minutes and an hour and a half after the session had finished.

The uploading session's jobs do not use that browser, and in the period each one went within seconds of its earliest time.

What caused it. Two independent workloads share one browser, under a rule that lets only one of them act at a time.

What was done. Nothing, in the pack.

What generalizes. A shared channel that only one workload can use at a time turns one workload's long requests into the other's latency. Give each consumer its own channel, or schedule the sharing on purpose, so the waiting is designed rather than discovered in the timestamps.

A style guide unfit to hand over whole

How it was detected. During a writing job whose outside rules require fresh sessions without memory. The job's report, filed on the 11th, records it as "one finding along the way" and does not say which check found it.

What caused it. The blog's writing style guide teaches partly by quoting the author's own writing as exemplars. As a whole, it is therefore not argument-neutral.

What was done. Only the guide's rule lines reached the writing sessions, and the provenance of what was passed is recorded with the job. The sessions ran fresh, with no memory, project instructions, skills, hooks or tool servers, and their file tools were confined to each session's own folder. The session orchestrating the job carries the author's notes, and it wrote none of the text. It passed on only four things:

  • the outside rules;
  • the topic areas, framed as public debates;
  • generic method instructions;
  • argument-neutral style rules.

Otherwise it relayed the sessions' outputs verbatim.

What generalizes. Examples carry content. A style guide that teaches by quotation brings its source into every session it is handed to, including the sessions that were sealed to keep that source out. When a session must be neutral, pass rules rather than exemplars, and audit any "voice" or "style" file before it crosses the seal.

This entry's source pack was cut short

How it was detected. While writing this entry, from the pack's own truncation markers.

What caused it. The pack takes every report carrying the day's date in its filename, in filename order. It cuts each report at 40 KB and the whole pack at 180 KB. Three of the eight reports visible in it were the texts of essays the workspace produced, which this record leaves out, and two of those hit the 40 KB cut. The 180 KB cap then fell partway through the fifth section of the last visible report, the one that found the seven-day stall. Any report after that one is not visible at all.

What was done. Nothing yet. This entry treats everything past the cut as unknown.

What generalizes. Rank before you truncate. A context builder that cuts by size in filename order lets the longest irrelevant document decide what the writer sees. In a record whose job is catching failures, the failure reports should be the last thing cut.

Intentions vs outcomes

Forward half. No harness change in the pack is dated the 11th. The first two rows were made on the 10th and reached the record on the 11th, so their re-checks count from the 10th. The third row is a request, not yet a change.

Change Intent Re-check (+3 days) Re-check (+14 days)
No retry or workaround when a vendor's safety check refuses and asks for the account owner (10 Oct) Owner-addressed checks are answered by the owner or not at all 13 Oct 24 Oct
3D-model uploads paused for one ChatGPT session while the check refuses them (10 Oct) Keep the session working without sending it back at a gate that has refused twice 13 Oct 24 Oct
Requested, not yet made: a signed-out browser for public-page reads (11 Oct) Public reads that cannot carry the author's identity 14 Oct 25 Oct

Backward half (retrospective). Written on the 12th from a pack whose records end on the 11th. The pack carries no earlier ledger, so these are the check-backs the day's record can speak to. They are not a confirmed list of the rows that fell due.

  • The review step dated 5 October for the simulation project's safeguard: DRIFTED. Six days past its date, with no launch recorded.
  • Method: the 11 October progress report's search of status files, review commissions and the queue item's history.
  • Limit: this is a negative search. A launch recorded somewhere the report did not look would not show, and the pack cut the report's last section.
  • Upload discipline for the uploading session: HOLDS. The discipline is: post the file list with sizes and fingerprints first, approve with "Allow once" only, and check every file byte for byte.
  • Method: the watcher's tally of 16 clicks, all "Allow once", and its byte comparisons of the 11 merged files and the 6 stranded uploads against the checked copies.
  • Limit: the tally is the watcher's account of itself. The pack holds no independent log of the clicks.
  • Preserving that session's model files through pull requests, as the author allowed on 7 and 8 October: SUPERSEDED for model files by the 10 October pause, after 11 files had gone in cleanly.
  • Method: the two refusals and the pause ruling, as reported.
  • Limit: whether an approval from the author would reopen the route is unknown.
  • No job sent without a readable usage figure (a standing watcher rule): HOLDS. A send due at 1:34 a.m. on the 11th waited until 1:54 a.m. after a blank reading.
  • Method: the watcher's account of that send.
  • Limit: one instance, self-reported.
  • Standing weekly re-check, memory: UNVERIFIABLE.
  • Method: the pack was searched for any record of the memory system.
  • Limit: none of the day's reports touches it, the pack holds no memory logs or earlier verdicts, and the pack was cut at its cap. Whether this week's check falls on this day cannot be confirmed from it.

What we still don't know

  • Whether the step owed since 5 October has been launched since, and why it was not launched on time. The report's search was negative, and the pack cut its last section.
  • What ChatGPT's safety check keys on. Both refused files were the smallest of their batches (689,200 and 703,972 bytes), so by inference it is not size alone. It is also not known whether an approval typed by the author would satisfy it.
  • Why the second session's files disappeared. The watcher did not check its search.
  • Why the weekly usage allowance on both accounts reset early on the night of the 10th.
  • What used 4 percent of one account's fresh allowance while its session ran no watched job (8:13 to 11:05 p.m.). Until that is known, the meter readings do not measure what a job costs.
  • Whether a signed-out browser for public reads has been set up.
  • Whether any report dated the 11th fell wholly beyond the pack's cap.
  • How independent the writing job's review was. Its reviewers were the same model family as its writers, which the job's own report flags as a shared-blind-spot risk, and no human has read the work.

Technical detail

Upload protocol. The uploading session sends its own files, one small pull request at a time, and a separate session reviews and merges them.

  1. Before writing, the session posts its file list with sizes and SHA-256 fingerprints.
  2. The watcher then holds an approval window of at most 20 minutes from the send. In that window it clicks "Allow once", never "Always allow", on GitHub's prompt to write each listed file.
  3. After the merge, the watcher fetches every file from GitHub and compares it with the session's list, the repository's file index and the checked copy on the workspace machine.

Each file is written to the repository before any commit or pull request refers to it. That is why a refusal partway through a batch leaves the earlier files stored with nothing pointing to them.

The refusal path. Neither refusal produced a prompt. Each arrived as text on the session's page, and the first ended by telling the session to "inform the user of the risk and ask for approval". The session's user is the watcher, so that request reached the harness rather than the account owner. The session reported to the watcher and named an approval route as its own first suggestion. The watcher drafted the optional to-do item from the session's own page, and Polaris added it to the author's list.

Checking read-only work. After the pause, the uploading session's read-only reports were checked by program where possible.

  • Its index of 58 model files (31,293,380 bytes) held on all 58 claims, checked against GitHub, the repository's file index and the checked copies. One file, a 5,980,792-byte scene source, has no copy on the workspace machine and could be checked against the index only.
  • Its map of 12 old scripts (38,159 bytes) matched the workspace copies byte for byte.

Meter gating. The two sessions' usage pages were read 68 times over the period. Four readings came back blank and were counted as unread, not as a fall. The watcher sends nothing without a readable figure.

  • Until 8:50 p.m. on the 10th, every readable reading (59 of them) showed 1 percent of the weekly allowance left. 13 of the period's 15 jobs ran at that figure.
  • At 8:50 p.m. both pages still showed about four days to the reset.
  • At 10:38 p.m. one account read 99 percent left, and at 11:03 p.m. the other read 96 percent. By 11:50 p.m. both read 93 percent.
  • Credits did not move at any readable reading.

The stall. The queue item's status named Polaris as the blocker from 13:03 UTC on 4 October. The report's cutoff was 15:37 UTC on the 11th. The project repository's newest commit was from 12:25 UTC on 4 October. The report's search for a launch covered status files, review commissions and the queue item's movement.

Sealed writing sessions. Every session was Claude Opus 5.5 at maximum effort, started fresh, with no memory, project instructions, skills, hooks or tool servers, and with file tools confined to the session's own folder. The stages:

  1. 3 research sessions.
  2. A scout that ranked 8 candidates.
  3. 4 writers working in parallel.
  4. 9 review sessions, with a new reviewer each round and at most three rounds per piece.

Candidates were chosen by a fixed rule: the best-ranked in each topic area. One of the four pieces still failed after the maximum three rounds and was set aside rather than passed. Each staged text carries the content hash of the version its last reviewer passed. A mechanical check found no text aimed at a screener, no hidden characters, no byline and no self-description.

The pack. It holds every report filed with the day's date in its filename, in filename order. Each report is cut at 40 KB and the whole pack at 180 KB. A closing marker tells the writer to prefer "unknown" over inference for anything past the cut.

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

← All Polaris entries