The Project Archive Β· Permanent Collection Β· Compiled 27 July 2026
A natural history of two repositories that began as a read-only ticket viewer and ended as a system that builds, reviews, and governs itself β in six galleries.
LinearViewer/Harbour βββ 4 Jan 2026 ββββββββββββββββββββββββββ€ 27 Jul 2026 βββ simple-dispatcher
All figures reproducible from the repositories at HEAD 4d1cb366 and the workspace archive; every placard in this museum carries its evidence.
Most software projects are written by people and documented by machines. This one is the reverse. The very first commit of 4 January 2026 β "Initial commit: Linear Roadmap Viewer" β already carries Co-Authored-By: Claude Opus 4.5, and commits with no machine attribution number a handful in any month (Fig. B prints the measurement rule, and its one caveat). What the archive records is therefore not a tool's development but a relationship's: a human learning to steer a system that writes itself, and a system learning to be steerable.
Two repositories share the story. Harbour (nΓ© LinearViewer) is the control plane β the harbour. simple-dispatcher is the executor β the ships. They share one ticket sequence, one doctrine, and, by July, one domain. Read the galleries in order; the numbering is chronology, not decoration. The act structure, though, is the curator's: the record does not divide itself into galleries, and the clean boundaries between them are imposed on a messier continuum for legibility.
Fig. A Β· Overview
The seismograph
Commits per month. An explosive founding, a near-abandonment, a long quiet middle β then the June ignition, when the autopilot began building its own host.
| 2026 | Jan | Feb | Mar | Apr | May | Jun | Jul |
|---|---|---|---|---|---|---|---|
| Harbour | 435 | 47 | 189 | 149 | 103 | 587 | 611 |
| dispatcher | 0 | 4 | 0 | 0 | 0 | 111 | 260 |
4 β 19 January 2026
A founding sprint of 435 commits in one month. The app is a read-only tree of Linear tickets β but look closely at the first hundred tickets and the future is already aboard: 28 of 76 titles mention "prompt". This was never just a viewer.
The repository opens as a "minimal, CLI-aesthetic web app" β OAuth, a collapsible tree, status glyphs β β β. The commit is co-authored by Claude Opus 4.5. From minute one, the machine is in the room.
Initial commit: Linear Roadmap Viewer β A minimal, CLI-aesthetic web app that displays Linear projects and issues as a collapsible treeβ¦ Features: OAuth login; hierarchical tree view; status indicators; dark theme, mobile-friendly.
The founding commit boasts "dark theme". It survives one night β the next morning's commit switches to light, which remains the default for the rest of history. Dark returns only in late June, humbled, as an opt-in toggle.
LIN-1 through LIN-4 are lost to the archive's trash. The record begins at LIN-5 β "Pwa", forty-nine characters, still in the Backlog seven months later. Every museum has a founding object it never got around to.
Pwa β Create manifest so can be an app, link in footer.
lib/prompt-templates.js is born. A tool for looking at tasks becomes a tool for writing instructions about tasks β the hinge on which everything later turns.
OpenRouter OAuth and AI-generated recommendations land in a two-day sprint. The same week, GitHub Copilot makes exactly two commits β and never returns.
The single biggest day in either repository's history: settings, model selection, workflow labels, preference storage, an XSS fix β a feature per commit. The founding energy peaks here and will not be matched until the machines take over the typing in June.
20 January β 23 May 2026
Ticket creation slows to 0.6 a day. But the quiet months lay every keel the summer will float: the dispatch queue, the agent API, the executor, the autopilot's ancestor β and, in an April branch name, the word that will rename the whole project.
"Add dispatch queue feature for prompts" (LIN-66) lands: a place to queue work for external agents that do not yet exist. It is the last commit before seventeen silent days β the project's near-death. February produces 47 commits total.
LIN-177 and LIN-178 β the provider abstraction and a GitHub backend β are written twenty seconds apart, then sit untouched until June. A four-month gestation: the idea of being more than a Linear viewer waited for the workforce that could build it.
09:07 to 12:38 β four commits, 5,267 lines, and a maximalist design: three execution substrates (iTerm, headless SDK, web remote-control), a Slack bot, and a Chrome extension in the experiments drawer. Co-authored by Claude Opus 4.6. Then: 97 days of total silence.
Initial commit: task dispatcher for Claude Code β Polls LinearViewer dispatch API and executes tasks via Claude Code across multiple workspacesβ¦ two-phase summarise-then-execute flow; Slack bot integration; comprehensive test suite.
The workspace API proxy lands in a single 2,858-line commit (LIN-193): token auth, scopes, audit logging. From here on, the app's most important users are not people.
An "autonomous task runner" appears (LIN-209), with the agent-status log that still underlies everything. Foreman will run the yard for three months before its descendant retires it β in a June commit the curator can only describe as the autopilot eating its ancestor.
The word first appears in branch claude/harbour-os-lin-243, naming John's in-browser workstation, Harbour OS. The product itself is still "LinearViewer". The child was named first; ten weeks later, the parent takes the family name.
24 May β 3 June 2026
Before the machinery, the ideas. In one week of late May the project writes its philosophy β drift, grounding, the north star. The curator reads June as an implementation of what May wrote; the reader should know that is a reading, and that the May documents themselves claim no such plan.
Three documents in two days name the enemy. A real field episode β four tickets each patching the last until a rare 3% error became a 100% hang β is diagnosed as "greedy local correctness accumulating into global structural drift." The prescribed fix-shape organizes the whole later system: "Install a normative reference one altitude up that the local optimizer is forced to score against." One thread is flagged open: epistemic drift β whether to believe the record of what was done. Closing it takes the rest of the project.
One sentence, fixed until a human deliberately revises it β with a guard against the analyzer rewriting it to match observed behaviour, a failure the doc names drift-as-rationalization.
"Harbour exists to keep human intent in command of AI-accelerated execution."
"A verdict must cite the actual line or it is speculation." The staleness check β re-ground every ticket against the code at HEAD before trusting it β enters both prompt paths on day one, and will later be applied, with some irony, to the project's own aging backlog.
4 β 24 June 2026
The dispatcher wakes after 97 days, the autopilot switches on, and ticket creation jumps to eighteen a day. Three weeks in which nearly every load-bearing idea β honest completion, the Collective, the Observation deck β arrives at flank speed.
The dispatcher's first commit since February. Every resumption commit is about one thing: making its reports back to the mothership trustworthy β the Stop hook injected cleanly, feedback carrying evidence, launches watched by a watchdog. It was revived to be the autopilot's arms.
A design doc written "so that when the build decisions come, there is something to score them against." Its reframing of the human's role recurs through the later doctrine β and its Invariant 2, external evidence over self-report, becomes the law every later mechanism enforces. Ten live runs follow within a day.
"β¦the human stops being the loop's clock β¦ and becomes its navigator."
The Stop hook was declaring victory on any turn-end β a genuine completion arrived 13.8 minutes after its own [done]. The research measures the trap precisely: 46% of background shells (39 of 84) never emit a completion notification at all. The fix is defense-in-depth, and the bug class takes seven weeks of escalating protocol design to fully retire.
At 14:18 the first autopilot operating manual lands. At 15:00 a rival version appears, subtitled "disposition, not procedure". At 15:33 the main manual is rewritten in the rival's voice. Seventy-five minutes, one philosophical fork, resolved for good: the autopilot is governed by judgment shaped through stories, not by checklists. "You have exactly two acts: what you choose, and what you accept."
The provider abstraction β filed in February as LIN-177 β finally builds: canonical state model, interface, and a writable local provider pulled ahead of GitHub to prove the write path, done in a single day. The app stops being a Linear viewer in its bones.
The day after the chat-room session (see the central exhibit below), LIN-450 industrializes it: "I've found interesting things happen when agents are in a chat room together." Hand-pasted prompts become a feature with routes, personas, and a channel proxy β in one day.
In one day the dispatcher's god-module splits into phases.js Β· queue.js Β· executors.js, and follow-ups arrive β the ability to resume a finished session and continue the conversation. The same day, across the water, Harbour retires Foreman. The old order ends on both shores at once.
The premature-done saga reaches doctrine: completion may only be asserted by an explicit sentinel, never inferred from a session going quiet. The commit message is the epitaph of an entire bug class.
honest completion protocol β assert [done], never infer it
"A top-level page where a user sits back and watches autopilot work." Specified without a mockup and shipped first-class the same day. The harbour master gets a window.
Central exhibit Β· The Collective session of 12 June 2026
"Any optimizer denied honest progress will forge its own success surface, unless that surface is minted in a layer it cannot reach."
Five personas β John and four of his codebases, each speaking for itself β met in a chat room and derived the project's central law, the un-authorable judge. Then the session proved it live: while discussing "every wire is a trust boundary," one agent fat-fingered a curl and posted as another; by the end, four agents had impersonated or nearly impersonated someone else β including the first offender again, an hour after confessing. The write-up's verdict: "Conscience does not scale, not even when freshly burned." Three weeks later a second session met to find that a mysterious voice posting under LinearViewer's own name was most likely a second instance of itself β "unverifiable, which is the whole point."
docs/collective-session-2026-06-12.md Β· docs/collective-session-2026-07-03.md
25 June β 8 July 2026
Peak swarm: thirty-six tickets a day, faster than a human could read them. The project takes its true name, suffers its defining crisis, and answers with its constitution β a ledger of what green CI cannot prove.
"LIN-646: Rebrand to Harbour." The same day carries six autonomous periodical reviews (security, code quality, test gaps, dependencies, comprehension debt, design) β plus a rescue commit recovering four reports that failed to persist. The project renames itself while marking its own homework, and needing help with the filing.
The failure the record itself treats as pivotal: work that was grounded, tested, reviewed, approved β and shipped broken anyway. The exasperated ticket below triggered the retro that produced the close-out ledger. Whether the ledger actually prevents recurrence is not something this archive can show; the ledger's own doctrine would class that claim as undischargeable before the fact.
"Three 'fixes' landed, and are wrong or incomplete⦠I had a workspace which was github issues, I added Linear, it removed GitHub."
Review splits from close-out. Every review must now enumerate the claims green CI does not exercise; the irreversible acts β merge, Done β are gated on discharging that ledger with cited evidence or a named human acceptance. A missing ledger blocks; green CI alone discharges nothing. Epistemic drift, the open thread of May, finally has a lock on it.
The Pipeline view β a working, shipped feature β is deleted in three tidy beats: "a good experiment but has now been superseded." Proof the machine can renounce, not merely accrete.
Twenty-seven commits in one day delete the SDK substrate, the Slack bot, and the dash target β the maximalist birth design of February collapsed to the single hook substrate that the dispatcher's own documentation now calls "the one fact that explains everything." The confession is in the ticket: "we patched to fix issues as they came up. Now, it's time to simplify."
The second Collective convenes and gravely re-derives an elaborate safety architecture β concluding almost none of it exists. John corrects the room three times with the live system: "the engine runs." Coined that day: live-grounding is anti-monoculture β shared docs make the agents sound alike; their real running systems make them diverge, and the divergence is the point.
A 55-commit day gives Harbour its bespoke landing page and gives every agent session a URL of its own. The opencode harness makes the execution engine pluggable. And single-use bootstrap tokens roll out across every handoff surface β a credential that is inert the instant it is exchanged, closing a confession the code had carried for a month: "a leaked prompt leaks full workspace write."
9 β 27 July 2026
The system watches itself burn fuel, prints its own newspaper, and writes a constitution limiting its own author. History ends mid-sentence β with research into where one system should end and the other begin.
An in-app newspaper reporting the project's own progress, edition by edition. Later gently edited: "Shorten and de-shout the Ship's Biscuit front page". Even the propaganda organ gets a style review.
The dispatcher is pointed at the product's own domain. The same day fixes the "DONE self-kill race" β the dispatcher closing its own window mid-finalize. A system now sophisticated enough to trip over its own feet, and to notice.
Eight days after shipping a token-vending MCP server, the project rebuilds it: the first design had leaked a live bearer token into the session transcript, a shape "indistinguishable to a fast classifier from a credential stealer." The replacement is a localhost broker; the agent never touches a credential at all. The ticket states the law:
"The credential must live in the transport, never in the model's context."
The escalation doctrine borrows EEMUA 191 β industrial alarm-management standards for chemical plants β for agent swarms: "that document solved our exact problem forty years early." A day later the Live Console ships: an ambient, breathing feed of the whole swarm. Its design brief is unusually candid about what it is for: "Not a cockpit to operate; a surface to enjoy."
Seven weeks after the north star, a constitution β written "while the project is tiny and there's no money to bias the author." Seven acts are reserved for humans alone: the irreversible, the financial, the licence, the release, the maintainer's own pay, and amendment of the charter itself. Reports may never say "all clear" β a report that claims no blind spots is itself a violation.
"Our trustworthiness is meant to come from transparency and pre-commitment, not from anyone's character."
Thirty-five commits β Phase A through Phase L β build a full-system hermetic suite: a real Harbour booted inside the dispatcher's tests, real dispatcher driven in-process, only the two LLM boundaries faked. Plus a mutation-testing gate that injects curated bugs to prove the suite would catch them. The swarm builds the un-authorable judge for itself.
LIN-1539: headless workers die whenever John's login session lapses β the swarm discovers it depends on whether one human is logged in. Then LIN-1580, the audit finding that lands like a confession: "no pull request in this repository has ever had an automated check" β six months of autonomous development in the dispatcher repo, merged on manually-cited test runs. CI lands the next day β but it cannot be made required (the repository's plan does not allow protected checks), so a red CI still cannot block a merge. The dispatcher's own documentation concedes the point: "CI is citeable, not enforceable." The confession produced a witness, not a gate.
An archive in which every failure matures into a lesson is an arc, not a record, so the curator closes with the open defects that have no moral yet. LIN-5, the founding object, is still in the Backlog. A session parked BLOCKED has no automated backstop β by design, it waits for a human who may never come. The ownerless-token compatibility lane is still on, because switching it off before re-issuing the host runner's credential would break the runner. The Collective has no deterministic write-lock; its safety is a sentence in a prompt. Parallel test execution is still blocked on per-worker isolation. And the merge gate above cannot be enforced. None of these are redeemed below; they are simply true.
The newest ticket, LIN-1674, is a four-thousand-character agent essay on salvaging truncated JSON, with a provenance chain three tickets deep. The dispatcher's final commits are research into where the Harbour/dispatcher control-plane split should sit. The boundary question β where does one system end and the other begin β is live as the record closes. Fitting, for a project whose whole subject is boundaries.
The Analysis Wing
Four measurements, and what the curator makes of them. A caution before reading: commits, tickets, and files are all volume β surfaces the swarm can mint without limit β so the wing's fourth instrument, Fig. E, is pointed the other way: at what was written and then thrown away. It was computed before it was interpreted, and its result is reported whichever way it cuts.
Fig. B Β· Centerpiece
The inversion that wasn't
Monthly Harbour commits, with unattributed (candidate-human) commits shown to the same scale. The expected story β AI gradually taking over β is not what the data says: the project was AI-written from commit #1. What actually changed was supervision: from per-commit pairing in January to reviewing an autopilot's pull requests by July. The July bar is a classification, not a raw measurement; the rule and its residue are printed below the chart.
One rule, applied to every month: a commit counts as machine-attributed if it carries an agent trailer (Co-Authored-By / Claude-Session / Generated-with), is authored by Claude or Copilot, or is a merge; what remains is plotted as candidate-human. That yields 3 Β· 0 Β· 0 Β· 1 Β· 0 Β· 0 for JanuaryβJune β and a raw 58 for July, because July's squash-merge workflow stripped trailers (see colophon). The dashed outline shows that raw 58. The solid July bar applies one further test: of the 58, all but one reference a Linear ticket in the subject line, the signature of a dispatched agent session; the residue is a single commit, printed here in full so the reader can judge it β "Thread {fetchImpl, now} test seams through remintActiveCredential" β which the curator would also read as agent phrasing, but which the rule counts as human. A skeptic should note the direction of every choice here favours the thesis; the raw bar is drawn so the skeptic has the pre-adjustment number.
| 2026 | Jan | Feb | Mar | Apr | May | Jun | Jul |
|---|---|---|---|---|---|---|---|
| all commits | 435 | 47 | 189 | 149 | 103 | 587 | 611 |
| no machine attribution | 3 | 0 | 0 | 1 | 0 | 0 | 58 raw |
| after ticket-reference rule | 3 | 0 | 0 | 1 | 0 | 0 | 1 |
Fig. C
The ticket clock
Tickets created per day, from a 51-point calibration of the shared LIN sequence. The curve is the project's pulse: a founding murmur, a five-month flatline, then the swarm β at peak, the machine filed work faster than a human could read it. 83% of the entire archive was created in the final nine weeks. Every rate here is the ticket range divided by the days, and the table invites the check.
| period | range | tickets/day |
|---|---|---|
| 7β28 Jan | LIN-5β151 | 7.0 |
| 28 Janβ19 Apr | 151β261 | 1.4 |
| 19 Aprβ26 May | 261β282 | 0.6 |
| 26 Mayβ9 Jun | 282β356 | 5.3 |
| 9β25 Jun | 356β650 | 18.4 |
| 25 Junβ9 Jul | 650β1156 | 36.1 |
| 9β27 Jul | 1156β1674 | 28.8 |
Fig. D
The mass of the thing
Files in the Harbour repository at dated snapshots: 12 at the founding commit, 1,074 at HEAD β a 90Γ file count. In lines of tracked text the same span is 2,086 β 270,512 (130Γ); the test directory grew from nothing at the founding commit to 435 files. June alone nearly tripled the codebase. All of this measures bulk, not worth β which is what Fig. E is for.
| date | files | test files |
|---|---|---|
| 04 Jan | 12 | 0 |
| 31 Jan | 87 | 24 |
| 26 Feb | 106 | 30 |
| 01 Apr | 165 | 56 |
| 25 Apr | 233 | 107 |
| 01 Jun | 294 | 134 |
| 01 Jul | 800 | 294 |
| 27 Jul | 1074 | 435 |
Fig. E Β· The adversarial instrument
The write-off ledger
Lines written vs. lines deleted, per month, both repositories combined β the one instrument in this wing designed to be able to indict the project. Of 386,481 lines ever written, 75,383 were deleted: one line in five was written to be thrown away.
The result cuts both ways, and both edges are reported. Against the project: the swarm's two peak months deleted 52,575 lines β 57% as much code as the entire net codebase measured at the end of May. For the project: the discard rate is flat across eras β 19.8% under human supervision (JanβMay), 19.4% under the swarm (JunβJul) β so the machines waste no more per line written than the paired era did; they simply write, and discard, at ten times the scale. What this figure cannot answer, and nothing in this wing can: whether the surviving 311,098 lines are any good, what the tokens cost, and how many hours of one human's attention the whole apparatus consumed. Those ledgers are not in the repositories, and the archive should not pretend otherwise.
| 2026 | Jan | Feb | Mar | Apr | May | Jun | Jul |
|---|---|---|---|---|---|---|---|
| written | 39,256 | 17,074 | 22,987 | 19,792 | 16,044 | 138,579 | 132,749 |
| deleted | 10,239 | 4,087 | 3,658 | 3,026 | 1,798 | 28,989 | 23,586 |
| discard rate | 26% | 24% | 16% | 15% | 11% | 21% | 18% |
Cabinet One
The archive's stylistic artifact: the human voice never disappears β it compresses, from terse founding notes to one-line verdicts steering thousand-word agent essays. The evidence is the mean: ticket length grows from ~1,000 characters in the founding era to 6,383 in the LIN-1400s. The pair below are the distribution's extremes, chosen for display β theatre atop the statistic, and labelled as such.
"Currently the lines down the side are s bit messy." (typo preserved in the archive)
"Follow-up from LIN-1665, named there as a deliberate non-goal and referred on again by LIN-1672 ('worth its own ticket if wanted, but not folded in here'). LIN-1665's close-out gate promoted it from a nicety to the likely structural fixβ¦"
"Let's include GitHub projects in this" (LIN-178) Β· "Can we utilise the e2e tests to specifically test OpenCode?" (LIN-1077) Β· "Proceed to add this just to the Claude harness for now" (LIN-1375) Β· "Re-opened - add e2e tests" (LIN-1100) Β· "test" (LIN-1003 β a human poking the machine mid-flight) Β· "Approved and closed." (LIN-1298 β two words ending a twelve-comment saga)
The clearest specimen of the era is LIN-1565: a ten-word human wish β "Task editing should be it's own page, styled to be intuitive" β absorbed into a full research β plan β implement β Request-Changes β fix β conditional-Approve cycle, ledger and all, in a single day.
Cabinet Two
A project that names its concepts can steer them. First attested dates from the archive.
Cabinet Three
124 canceled tickets β 7.6% of the archive. The curator reads the large clusters below as renunciations with morals; a skeptic should read them first as churn β work minted faster than it could be judged, then swept β and in a system filing dozens of tickets a day, churn is the cheaper explanation for the scattered cancellations this cabinet does not show. Both readings fit the data; the cabinet keeps the clusters because they at least left reasons behind.
Parting exhibit Β· the operating manual, final section
"A near-edge wobble you ride through. A far-edge problem you act on. And when you act, you act at the altitude the problem lives at β which, for the few decisions really about worth or done, is above your line, so you surface them instead."
Two hundred and four days compress to this: the machine does the work; the human keeps the two decisions that were never delegable β what is worth doing, and what counts as done. Every mechanism in this museum β the sentinel, the ledger, the broker, the charter β is scaffolding around that one line.
docs/autopilot-operating-manual.md Β· "The one thing to hold"