2026-10-20 buildout — operations index
Written: 2026-10-20, after the day’s waves landed.
Scope: what shipped, what is deployed, what proved it, what is still open, and
where the money and credential gaps are. One page, with the runbooks in
docs/runbooks/ holding the detail.
This is a record, not a live status. Every row carries its evidence and the time
it was observed. status.json and gate-results.json are snapshots; the live
probe results below were taken while writing this file. Anything not observed is
marked unknown, never inferred from a merge.
1. Release and pull-request ledger
Section titled “1. Release and pull-request ledger”Observed with authenticated gh against each repository on 2026-10-20. #128
appears twice on purpose: acumen and fox both have one.
| Repo | PR | What it changed | State | Merged (UTC) |
|---|---|---|---|---|
| tcpsystems/acumen | #133 | Cost truth: settle from live-overlaid prices, unify cache-write accounting, failover per-attempt accounting | merged | 19:16:56 |
| tcpsystems/acumen | #131 | Closes C1: consumer keys limited to chat/embeddings, admin operator-only, atomic key+grant writes, capped count_tokens | merged | 19:01:53 |
| tcpsystems/acumen | #130 | Gateway overhead benchmark with path-verifying scenarios | merged | 19:00:43 |
| tcpsystems/acumen | #128 | Security: verify the tailnet-only admin edge | open | — |
| foxcorecloud/fox | #128 | Read-only capacity ledger and shared design language | merged | 18:41:44 |
| tcpsystems/radar | #1 | Production packaging, honest health, release builds (repo moved from foxcore-cloud) | merged | 18:51:56 |
| foxcorecloud/floki | #5 | Define domains from real files; enforce the VPS NIC contract | merged | 18:49:36 |
| foxcorecloud/foxd | #41 | Sentry reporting for panics and boundary errors | merged | 19:11:04 |
Tagged releases observed: acumen v0.1.2, published 2026-10-19T08:00:35Z, the
latest tag; the C1 line has moved past it. No tags or GitHub releases were
observed for fox, radar, foxd, floki or this harness, so radar’s “release builds”
means buildable artefacts, not a published release.
2. Deploy state
Section titled “2. Deploy state”| Surface | State | Evidence |
|---|---|---|
acumen C1 consumer plane, ai.tcp.systems | live | GET / returned 200 (title acumen); /signin 200, /app 303, /healthz 200 (ok), /v1/models 401, /readyz 401 — probed 2026-10-20 while writing this file |
| acumen operator surfaces | tailnet-only | 100.64.0.5:8088 listener; public :8088 refuses; /console, /metrics and /v1/router/stats returned 404 on the public host (edge runbook, verified 18:33) |
| acumen binary | C1 main, ahead of v0.1.2 | PRs #131/#133 merged onto the C1 line; the deployed commit was not re-read from the host in this pass — unknown |
Self-hosted Sentry, sentry.tcp.systems | live | GET / 302 to the sign-in route; 28/28 compose services running at 26.10.0 (sentry-local runbook) |
| Hindsight memory (core) | healthy | GET core.ts.tcp.systems:8888/health → {"status":"healthy","database":"connected",...}; control plane :9999 not reachable from the edge |
| tcp harness gate | not green at HEAD | node harness/check.mjs 10 pass · 1 warn · 2 fail at 675d39f; failures are the gitignored memory consent policy and three citations that depend on it, plus a missing peer checkout. Pre-existing, not introduced by this change |
| fox / radar / floki / foxd | merged, deploy not observed | Merge state read from GitHub; no host or Worker read was made in this pass — unknown |
The last committed snapshot (status.json, generated 2026-10-20T17:36:58Z) says
12 gates, one product (harness) passing, 8 wayfinder tickets with an empty
frontier, and a dirty tree at 7ce9612. HEAD has since moved to 675d39f. Treat
the snapshot as evidence at 17:36, not now.
3. Verification evidence
Section titled “3. Verification evidence”Commands run for this page, with the result that matters:
node harness/check.mjs 10 passed · 1 warning · 2 failed · 128 ms (exit 1)curl -o /dev/null -w '%{http_code}' https://ai.tcp.systems/ 200curl -o /dev/null -w '%{http_code}' https://ai.tcp.systems/signin 200curl -o /dev/null -w '%{http_code}' https://ai.tcp.systems/app 303curl -o /dev/null -w '%{http_code}' https://ai.tcp.systems/v1/models 401curl -o /dev/null -w '%{http_code}' https://sentry.tcp.systems/ 302curl http://core.ts.tcp.systems:8888/health status healthy, database connectedgh pr view <n> --repo <repo> --json state,mergedAt eight PRs, table aboveWhat the day’s PRs say they proved, in their own words: #133 ran build, vet, all
tests, gofmt, diff-check and race across both the C1 and cost suites; #130 adds
path-verifying benchmark scenarios; #131 closes C1 with build, vet, 24 packages,
gofmt, diff-check and race/shuffle. Those are the authors’ gate reports, not
re-runs here.
Edge verification is recorded separately in the edge runbook: the console bind,
the off-tailnet 404, the Grafana http_addr, and the public-port refusals were
re-read on the host at 18:33 after the fix, and the exposed admin key was rotated.
4. The five recoveries
Section titled “4. The five recoveries”The day’s non-PR work, each with the one fact that makes it more than a claim:
- acumen C1 live. The consumer plane answers on the public origin while every operator route stays 404 there; the machine API still requires a key (401 without one). See the consumer launch spec and edge runbook.
- Local Sentry. Self-hosted on
core, 28/28 services, one test event created and read back through the public hostname. No cloud Sentry account is involved. - Hindsight memory. Server reinstalled on 2026-10-20 behind a stable client endpoint; its health route reports a connected database. Its earlier failure mode is in the logs: reflect returned 401 “virtual key required” when the memory bank routed through acumen without a key — fixed by the key file created during the reinstall.
- Routing / cost recovery. Routing now ranks and settles on live-overlaid prices instead of the compiled catalog (#133), so a vendor price change no longer silently distorts routing or margin. The known residual is issue #132: the prepaid gate still reserves from the compiled tier, measured at a 2.4× shortfall on one xAI model. Settlement is correct; the reserve is not.
- Edge exposure. Two operator surfaces that answered anonymously on the public IP are closed: the acumen console and Grafana. The fix is applied on the host; the verification PR (#128) is still open.
5. Open risks
Section titled “5. Open risks”Ordered by what would hurt first.
| Risk | Where | State |
|---|---|---|
| Prepaid budget gate under-reserves on tiered models (2.4× measured) | acumen #132 | open, known, settlement unaffected |
| Tailnet edge verification not in the repo | acumen #128 | open PR |
Host firewall is absent: ufw inactive, no Hetzner cloud firewall | tcp | open — the binds are the only control (edge runbook) |
| Sentry has no offsite backup, no HA, no SMTP, no alerting | core | open, recorded as gaps 1–6 |
| Radar intentionally commits credential material and serves an unauthenticated JSON API | radar | open; must move before any wider share |
| Fox’s server-side Sentry capture was wired but never initialised | fox | was a no-op; foxd #41 landed node reporting, Worker capture still needs verification |
| Harness gate is red on a fresh checkout | this repo | open: memory consent policy is gitignored, so three citations cannot resolve |
| Snapshot is stale relative to HEAD | this repo | status.json at 7ce9612/17:36, HEAD 675d39f |
6. Funding and credential gaps
Section titled “6. Funding and credential gaps”Funding. No funding record exists in this tree, and none was observed today:
workspace.json records stage venture, with no investor, grant or runway
figure. Treat funding as unknown, not as zero and not as secured. What is
known is the margin-sensitive pair: cost truth landed (#133) and the reserve
shortfall is open (#132). Pricing and market context live in the buildout
research notes, not here.
Credentials. From the local-versus-production gap table (35 rows: 29 agent auth rows, 3 console rows, 3 CLI stores):
- 47 of 77 non-directory catalog seats are keyed on
tcp; the ~147dir-*seats are placeholders with no credentials. - Of the 35 local rows: 12 wired with an identical key, 10 wired with a different key, 1 key local-only, 5 with no local seat, 4 OAuth-versus-key mismatches, 3 file seats unplaced.
- One credential is installable as a static env value without an expiry problem. Three file seats (claude, codex, grok) are installable only as files with expiry constraints; two OAuth sets are already expired.
- 28 seats have no local source at all.
- Sentry admin, DSN and tunnel material live in root-only files (
0600) outside the repository; the admin password has no rotation record beyond the edge rotation of the acumen key.
No credential value is reproduced in this repository. The gap table itself is operator-local because it enumerates stores; this section carries only counts and classes.
7. Runbooks
Section titled “7. Runbooks”All seven were copied from the day’s working notes and sanitized (no credential values, no personal identifiers, absolute home paths normalized). See the runbooks index for what each one answers and whether it records a plan or an applied change.
| Runbook | Answers |
|---|---|
| sentry-local.md | How the self-hosted Sentry runs, is verified, backed up and restored |
| sentry-rollout.md | Per-service SDK plan, blockers, PII rules and rollout order |
| TOOLPLANE.md | Which MCP tools and credentials are connected, and their blast radius |
| consumer-launch-spec.md | The public consumer plane: routes, limits, rollout, rollback |
| edge-security.md | What the internet can reach on tcp, and the fixes applied |
| opencode-cache-report.md | Prompt-cache behaviour and what it costs per session |
| opencode-skills-audit.md | Which skills are installed, duplicated, shadowed or stale |
8. Provenance
Section titled “8. Provenance”Source: the operator’s harness-rescue working notes of 2026-10-20. Copied with these transformations only:
- personal mailboxes and account identifiers replaced with a role address or
<redacted>; - absolute operator home paths normalized to
~, and session identifiers redacted; - external host paths that are not repository files left in prose rather than backticked, because the gate’s citation check treats a backticked path as a repository claim.
No other edit was made to the runbook bodies. If a runbook and a live probe disagree, the probe wins and the runbook needs a dated correction.