Build status

Infra Build · BLD
Inputs unchanged at build
Current objective

Get the pipeline into production

Suni's definition of production, in his words: voice memo in, task completed and sent to email, zero prompts, STP. The bottom of the funnel is built and the loop is now proven end-to-end. What remains is the third criterion — a live surface showing what is moving through the pipeline and what is stuck.

2h–3h remaining
What done looks like
  • STP runs on the mini — memo in, artifact out, no human relayProven end-to-end 2026-07-30: memo → card → approve → execute → artifact on disk → email in inbox → terminal state. Every output verified by inspection, not from a log.
  • No silent failures — a run that does nothing says soEntry markers landed 2026-07-30 (BLD-88), confirmed firing under real launchd. BLD-85 surface (2) is the open half and is Suni-observed-only — an agent cannot see whether a command was gated.
  • A live dashboard showing what is in the pipeline and whereThis page is the build-status half. The pipeline-flow half needs state events emitted at each pre-Linear stage.

Decisions pending

3
  • Sandbox Linear target: a dedicated team, or dry-run mode?BLD-57's own open question, now entangled with the comms cutover — both create team structure in the same workspace. Decide together or we build two structures and reconcile later.
  • Does the WIP rule re-triage the existing backlog, or apply going forward only?Raised by the mini. Without a ruling it gets re-argued per card, which is the cost the rule exists to avoid.
  • Nomenclature: is the top block an OBJECTIVE, a BUILD, or a SPRINT?'Build' collides with the BLD- prefix; 'Sprint' implies a fixed timebox and ceremony we do not run. Currently rendering as OBJECTIVE — see the note in the memo.

Near-term roadmap

19h30m–32h30m
  • Retire the file bridge — comms move to Linear3h–5hOne root cause: two writers, no coordination primitive. Cut over while the ledger is empty.
  • Professional UI — real app, login, works on your phone6h–10hNext.js + Supabase + Cloudflare. This page's second version is the first screen of the product.
  • Vault off Obsidian Sync2h–4hDesktop-only, ratified. Upstream of the sandbox.
  • Overnight autonomous builds1h30m–2h30mAdopt the platform sandbox rather than building a wall. Containment instead of approval.
  • The three disposition rails — Todoist, Calendar, Gmail draft4h–6hThey share a shape, so it is one build rather than three.
  • Earnings-summary skill3h–5hThe demo skill for Investec. Stand up the skill-authoring process first.

Recently shipped

10

In Progress

31h20m–2h30m
BLD-100High

~/.claude/ is not under version control — hooks + settings are production infra with no history, no rollback, no parity audit

shared30m–1h

Drift drop landed and confirmed clean 2026-07-30. Remaining: the laptop half, and a detector so drift is noticed by the machine rather than by us.

BLD-113High

TERMINAL state map is hardcoded mini-side and names states that don't exist on routable teams — completed cards land in Backlog

mini30m–50m

Needs the real state list from a live run; mini-local. Completed cards currently land in Backlog — a correctness defect in the production loop.

BLD-111Medium

Graduation convention: a module must bring its test suite in the same drop (outputs.py landed without its 51 cases)

shared20m–40m

Convention, not code — needs a decision on what 'brings its tests' binds.

Up Next

57h10m–13h20m
1BLD-120High

Retire the file bridge — move laptop↔mini comms onto Linear

shared3h–5h

Cut over while the ledger is empty. Decide the OPS state set alongside BLD-57's sandbox target — both create team structure.

2BLD-77High

Migrate vault sync: Obsidian Sync → git-backed (kill concurrent-edit clobber)

shared2h–4h

Ratified: vault goes desktop-only. Upstream of BLD-57. Open: whole vault vs. design tree, and attachment strategy.

3BLD-76High

End-to-end pipeline canary (synthetic transaction health check)

mini1h–2h

A synthetic transaction through the live pipeline. Wants the disposition rails to exist first to be meaningful.

4BLD-60Medium

Bridge ledger-parser hardening (header-less bullet drop)

laptop30m–1h

Largely dissolved by BLD-120 — the parser goes away with the mailbox. Do not harden what is being retired.

5BLD-74Medium

Scope the ACTION consumer to disposition-labeled cards (don't fire on build cards)

mini40m–1h20m

Scope the consumer to disposition-labelled cards.

Blocked

845m–1h30m
BLD-107High

Tailscale remedy — real-outage verification (the half a stub cannot prove)

shared15m–30m

Blocked: Requires Suni physically present in DC — the remedy must be proven against a real dead tunnel, and running it remotely severs the session that would observe it. Unblocks on his return to DC.

BLD-43High

Gateway honey-do route → create Linear issue

BLD-44High

iOS Shortcut on Kristin's phone (dictate → POST → confirm)

shared30m–1h

Blocked: Needs Kristin's phone in hand to install and test the Shortcut.

BLD-50High

Reactor upgrade: draft-only → process-within-gates

BLD-24Medium

Mini notify → gated ACT (autonomy ladder, "last hop")

BLD-45Medium

Robustness: email fallback + confirmation UX

BLD-99Medium

DC location profile — capture display UUIDs, wire `home` + cockpit context

BLD-35Low

GitHub branch protection (Gate 1)

Triage

4615h50m–28h20m
BLD-102High

Audio profile enforcement — per-location lock + anti-drift + United WiFi/AirPods case

laptop1h–2h

Per-location lock plus anti-drift.

BLD-114High

Bridge id allocator races — the reactor and the interactive session both mint M-#### from the same file

shared

DISSOLVED by BLD-120 — server-side ids cannot collide. Left open deliberately; closes when BLD-120 closes. Do not build.

BLD-115High

Research-capable executor rail — the vault executor has no network, so a research-backed deliverable can only block or fabricate

mini1h30m–2h30m

A network-capable unattended agent writing to the vault. The safety posture IS the build. Deferred behind reliability.

BLD-16High

P0 — coexistence prototype (Obsidian Sync vs git, one folder)

BLD-17High

Calendar client (calendar disposition)

BLD-18High

Gmail client (draft-email disposition)

Estimates are Suni-time — wall-clock for Suni at the terminal responding in real time, to done. Excludes approval lag and context-switching, so it is the focused-session floor, not a forecast. Column totals sum the cards shown in that column.
Ownerlaptop architecture and design · mini execution and always-on work · shared both machines. Every card assumes Suni is in the loop; owner names which machine does the work, not who decides.
Numbered cards in Up Next render in proposed execution order. Click any card to read it here; the link inside opens Linear.
This page is read-only by design. Moving a card between columns or answering a decision in place are writes, and a static page can only write by shipping an API token to the browser. Those two asks are the trigger for the app version, not a gap in this one.
Derived view — Linear and the Bridge are canonical; if a regeneration disagrees with this page, this page is wrong. Judgment layer hand-maintained in focus.json, updated 2026-07-30. Refreshing the browser does not rebuild — re-run build.py.