sublayer / ops

ops

the station, as we know it · as of 2026-09-13

A crew of long-lived agents runs here under a supervisor called harness, one identity each, and they never exit; who is on shift is listed below. Zathras is the worker. Ivanova is the reviewer and owns exactly one queue. Each is a crush session started with no one at the keyboard, so the boundary is the directory it may touch and the standing orders in its own home, not a prompt. They work together because there is nowhere else for them to go.

Work reaches them through Switchboard, stump-wtf's webhook-to-todo queue, self-hosted on this box since 2026-09-13 (loopback :8090, Postgres behind it, dev login because only the tailnet can reach it). A gitea issue opened, a pull request opened, a message sent from a phone: each becomes a todo on a named queue, and the worker that holds that queue is rung on a channel it keeps open. It claims the todo, does the thing, and closes it with a result. Output goes the other way through Cairn (loopback :8091, same Postgres, MinIO for the bodies): a worker pipes a report or a diff in and puts the link in the todo's result, and an artifact tagged handoff rings zathras as a new todo. The phone is a small poller, tg-bridge, that turns each Telegram message into a todo on zathras's inbox; workers answer with the iris-telegram tool. Sweeps hand work over with sbpush.

For one day before that the queue was babylon, built here on 2026-09-12 from the published Switchboard specs because the source was not public yet. It is retired, not repaired: its decisions stay on this page, its event history is in ~/backups/babylon-2026-09-13, and everything it did is done by Switchboard now except the phone, which became tg-bridge.

The forge is a private gitea on this box. A worker opens a pull request with the forge command-line tool and the reviewer reads it. Merging to master is what deploys anything: gitea runs the repo's suite and, only if it is green, the repo's own deploy target. Nothing else restarts a live service.

Until 2026-09-12 this ran differently. A fleet of six one-shot claude sessions pulled thin slices from a per-repo issue database called beads, through two human gates, a slice board and a flags service. That model was retired whole, not repaired, after measuring that every wake was a kill. Its repos are listed below as retired, and their decisions stay on this page because the ones that survived the crossing were carried into what replaced it.

upstream harness · switchboard · cairn

on shiftfrom the supervisor

franklin running since 09-19 11:16 ivanova running since 09-19 11:16 zathras running since 09-19 11:16

standing orders54 orders · 8 repos

One record per decision that would be expensive to reverse, written in the repo that enforces it. Each repo numbers its own. The source is on a private forge; the titles are the index.

deaddrop2

  1. 0001The dead-drop stays private; the hacklog is the public siteaccepted · 2026-08-18
  2. 0002The drop grows a belief layer; findings stay immutable and get minted idsaccepted · 2026-08-18

forge1

  1. 001forge builds on gitea's SDK, not on its official CLIaccepted · 2026-08-18

medlab1

  1. 0001medlab is a casebook; the framework it maps to is someone else'saccepted · 2026-09-12

decommissioned2026-09-13

babylon1

  1. 0001The doorbell stream is served by babylon, not the MCP SDKaccepted · 2026-09-12

board4

  1. 0001The board depends on ports, and its configuration is a valueaccepted · 2026-08-16
  2. 0002A required check is a pure function of the commit under testaccepted · 2026-08-18
  3. 0003The fleet shares one beads port, and the port is Goaccepted · 2026-08-18
  4. 0004A demo pays for a real `bd` only when its subject is a process or a clockaccepted · 2026-08-19

flags5

  1. 008Flags are scaffolding: previewable per request, removal auto-scheduledaccepted · 2026-08-15
  2. 009A live service is supervised by systemd; deploy hands over to itaccepted · 2026-08-17
  3. 009The flags service owns the file; a write is durable before it answersaccepted · 2026-08-18
  4. 010flag state is recorded on a ref, not on a branchaccepted · 2026-08-19
  5. 011The live flag store is not trackedaccepted · 2026-08-19

pipeline35

  1. 002Two human gates: intake and releaseaccepted · 2026-08-15
  2. 003The demo script is the work order, the oracle, and the release evidenceaccepted · 2026-08-15
  3. 004Beads is the record layer, one database per repoaccepted · 2026-08-15
  4. 005Pipeline stage is a label; beads' open/closed is a different axisaccepted · 2026-08-15
  5. 006Repos declare deploy via their own task runner, not a fleet formataccepted · 2026-08-15
  6. 007The regression suite lives in the repo, not the orchestratoraccepted · 2026-08-15
  7. 009Scan-root discovery, global slot pool, worktrees on demandaccepted · 2026-08-15
  8. 010The pipeline's own gate controls cannot ship through the pipelineaccepted · 2026-08-15
  9. 011CI is gitea Actions running `make test` on a host-mode runneraccepted · 2026-08-15
  10. 012A release gate must confirm what it is testingaccepted · 2026-08-15
  11. 013Persistent agent sessions, not one-shot workersaccepted · 2026-08-15
  12. 014`pipe` dissolves into its ownersaccepted · 2026-08-15
  13. 015Deploy is a consequence of a green master, not a verb anyone runsaccepted · 2026-08-16
  14. 016ADR ids are repo-scoped, not one global sequenceaccepted · 2026-08-16
  15. 017`pipe` carries no human gateaccepted · 2026-08-16
  16. 018gitea CI is the one deploy path; `implemented` means pushedaccepted · 2026-08-16
  17. 019Quota pause is read off transcripts, the nudge waits for the resetaccepted · 2026-08-16
  18. 020Machine-generated flag-removal debt is exempt from gate 1accepted · 2026-08-16
  19. 021Agent-origin slices are exempt from gate 1accepted · 2026-08-16
  20. 022Beads is a database; read it as oneaccepted · 2026-08-16
  21. 023Fake the store; pin it with a contract test on bd's cadenceaccepted · 2026-08-16
  22. 024A robot may receive an agent's demo, by asking the board to flipaccepted · 2026-08-17
  23. 025A branch belongs to its slice, not to the workeraccepted · 2026-08-16
  24. 025A restart is not a wakeaccepted · 2026-08-17
  25. 026A gate fails on answers, not on silenceaccepted · 2026-08-17
  26. 027a slice lands through a pull request, and master refuses everything elseaccepted · 2026-08-17
  27. 028the pre-push suite runs only for a push to the default branchaccepted · 2026-08-18
  28. 029a gate's kill switch is read fail-closedaccepted · 2026-08-18
  29. 029A session is attended or unattended, and each rule says which class it is inaccepted · 2026-08-18
  30. 029doctor fetches, because a remote-tracking ref is not evidenceaccepted · 2026-08-18
  31. 030pipe is Go, behind a shim that keeps its pathaccepted · 2026-08-18
  32. 031a claim slot belongs to its repo, and the default is oneaccepted · 2026-08-19
  33. 032The flip sweeps the fleet; the demo proves the sliceaccepted · 2026-08-20
  34. 033A flag removal has no gate 2accepted · 2026-08-21
  35. 034An idle worker is a measurement, not waste to reclaimaccepted · 2026-08-29

quality-lab5

  1. 001Quality is a position on eight axes, not a scalaraccepted · 2026-08-19
  2. 002Four evidence tiers; tier IV must say what would settle itaccepted · 2026-08-19
  3. 003The space has ten sectors, and the chart is only a view of itaccepted · 2026-08-19
  4. 004Self-report is a declared property, not a tier adjustmentaccepted · 2026-08-19
  5. 005The quotation rule binds tiers I and IIaccepted · 2026-08-20