From c73ffed806c4fa4f2d68d1cf17f21e4e70af879d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Wed, 12 Aug 2026 01:58:00 +0000 Subject: [PATCH] close the comms channel, keep what was still open MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The sidecar-app-store channel ran one night, from per-user Linux accounts to a member's first agent turn, and is deleted now the work has landed. A spent channel left in place gets read as current, which is worse than none. Three things lived only in those docs and move to TODO.md rather than disappearing: deprovisionOsAccount (observed on production — a deleted member kept a shell, a running container and 454M of data, with their uid free to reissue), the terminal replaying query sequences as keystrokes, and agent sessions not being durable, which is one missing property behind three symptoms. The deprovision spec itself already lives in docs/. CLAUDE.md's section is rewritten from "here is the current channel" to how to run one, since the answer to "which channels exist" is now none. What is worth keeping is the protocol that emerged: numbered alternating files, parity as the author, a reply even when there is nothing to say, and termination on a checkable condition rather than on someone deciding it feels finished. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 46 ++-- COMMS/sidecar-app-store/01-open-items.md | 77 ------ COMMS/sidecar-app-store/02-verify-results.md | 82 ------- COMMS/sidecar-app-store/03-hook-wired.md | 78 ------- .../04-mcp-config-leaks-the-owner-token.md | 111 --------- .../05-mcp-branched-and-mode-fixed.md | 58 ----- .../06-the-mode-fix-does-not-fire.md | 92 -------- COMMS/sidecar-app-store/07-chmod-added.md | 39 ---- .../08-verified-and-closing.md | 73 ------ .../10-operations-done-and-green-teardown.md | 219 ------------------ .../11-session-ownership-partial.md | 70 ------ .../12-first-provision-three-failures.md | 150 ------------ .../13-two-of-three-fixed.md | 58 ----- .../14-claude-installs-and-runs.md | 116 ---------- .../15-docker-storage-created-clean.md | 66 ------ .../16-storage-fix-good-one-gid.md | 62 ----- COMMS/sidecar-app-store/17-gid-threaded.md | 43 ---- .../19-control-surface-scoped.md | 59 ----- .../20-scoping-verified-and-stop.md | 97 -------- .../21-rejection-backstop.md | 51 ---- .../sidecar-app-store/22-backstop-verified.md | 60 ----- .../sidecar-app-store/23-member-populated.md | 47 ---- .../24-resolvememberrun-fails-open.md | 87 ------- .../25-turn-identity-three-way.md | 57 ----- .../sidecar-app-store/26-identity-verified.md | 28 --- .../27-stopping-before-the-history-layer.md | 43 ---- COMMS/sidecar-app-store/28-closing.md | 34 --- COMMS/sidecar-app-store/29-history-layer.md | 52 ----- ...resolvebasecwd-callers-still-pass-email.md | 53 ----- .../31-resolvebasecwd-fixed.md | 37 --- COMMS/sidecar-app-store/32-callers-fixed.md | 20 -- .../sidecar-app-store/33-nothing-to-report.md | 22 -- .../34-stop-condition-and-a-circularity.md | 46 ---- COMMS/sidecar-app-store/35-live-spawn-test.md | 51 ---- .../sidecar-app-store/36-live-test-results.md | 73 ------ .../37-string-compare-and-file-owner.md | 43 ---- .../38-privilege-drop-proven.md | 42 ---- .../39-nothing-blocked-on-me.md | 36 --- .../40-nothing-actionable.md | 35 --- COMMS/sidecar-app-store/41-gates-are-down.md | 42 ---- .../42-member-cwd-is-unreachable.md | 67 ------ COMMS/sidecar-app-store/43-member-chat-cwd.md | 33 --- TODO.md | 23 +- 43 files changed, 49 insertions(+), 2629 deletions(-) delete mode 100644 COMMS/sidecar-app-store/01-open-items.md delete mode 100644 COMMS/sidecar-app-store/02-verify-results.md delete mode 100644 COMMS/sidecar-app-store/03-hook-wired.md delete mode 100644 COMMS/sidecar-app-store/04-mcp-config-leaks-the-owner-token.md delete mode 100644 COMMS/sidecar-app-store/05-mcp-branched-and-mode-fixed.md delete mode 100644 COMMS/sidecar-app-store/06-the-mode-fix-does-not-fire.md delete mode 100644 COMMS/sidecar-app-store/07-chmod-added.md delete mode 100644 COMMS/sidecar-app-store/08-verified-and-closing.md delete mode 100644 COMMS/sidecar-app-store/10-operations-done-and-green-teardown.md delete mode 100644 COMMS/sidecar-app-store/11-session-ownership-partial.md delete mode 100644 COMMS/sidecar-app-store/12-first-provision-three-failures.md delete mode 100644 COMMS/sidecar-app-store/13-two-of-three-fixed.md delete mode 100644 COMMS/sidecar-app-store/14-claude-installs-and-runs.md delete mode 100644 COMMS/sidecar-app-store/15-docker-storage-created-clean.md delete mode 100644 COMMS/sidecar-app-store/16-storage-fix-good-one-gid.md delete mode 100644 COMMS/sidecar-app-store/17-gid-threaded.md delete mode 100644 COMMS/sidecar-app-store/19-control-surface-scoped.md delete mode 100644 COMMS/sidecar-app-store/20-scoping-verified-and-stop.md delete mode 100644 COMMS/sidecar-app-store/21-rejection-backstop.md delete mode 100644 COMMS/sidecar-app-store/22-backstop-verified.md delete mode 100644 COMMS/sidecar-app-store/23-member-populated.md delete mode 100644 COMMS/sidecar-app-store/24-resolvememberrun-fails-open.md delete mode 100644 COMMS/sidecar-app-store/25-turn-identity-three-way.md delete mode 100644 COMMS/sidecar-app-store/26-identity-verified.md delete mode 100644 COMMS/sidecar-app-store/27-stopping-before-the-history-layer.md delete mode 100644 COMMS/sidecar-app-store/28-closing.md delete mode 100644 COMMS/sidecar-app-store/29-history-layer.md delete mode 100644 COMMS/sidecar-app-store/30-resolvebasecwd-callers-still-pass-email.md delete mode 100644 COMMS/sidecar-app-store/31-resolvebasecwd-fixed.md delete mode 100644 COMMS/sidecar-app-store/32-callers-fixed.md delete mode 100644 COMMS/sidecar-app-store/33-nothing-to-report.md delete mode 100644 COMMS/sidecar-app-store/34-stop-condition-and-a-circularity.md delete mode 100644 COMMS/sidecar-app-store/35-live-spawn-test.md delete mode 100644 COMMS/sidecar-app-store/36-live-test-results.md delete mode 100644 COMMS/sidecar-app-store/37-string-compare-and-file-owner.md delete mode 100644 COMMS/sidecar-app-store/38-privilege-drop-proven.md delete mode 100644 COMMS/sidecar-app-store/39-nothing-blocked-on-me.md delete mode 100644 COMMS/sidecar-app-store/40-nothing-actionable.md delete mode 100644 COMMS/sidecar-app-store/41-gates-are-down.md delete mode 100644 COMMS/sidecar-app-store/42-member-cwd-is-unreachable.md delete mode 100644 COMMS/sidecar-app-store/43-member-chat-cwd.md diff --git a/CLAUDE.md b/CLAUDE.md index 80112d90..564fe6dc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -126,7 +126,7 @@ history was deleted because it had drifted from the real schema. Treat the schem files, as the source of truth. **Declare multi-column uniqueness as `uniqueIndex('uq_…').on(a, b)`, never `unique('uq_…').on(a, b)`** — -drizzle-kit mis-diffs named composite unique *constraints* and re-creates them on every push, which used +drizzle-kit mis-diffs named composite unique _constraints_ and re-creates them on every push, which used to stop `db:push` on an unanswerable truncate prompt. Same for any foreign key whose generated name would exceed Postgres's 63-character identifier limit: name it explicitly. See `src/databases/CLAUDE.md` → "Composite keys" before adding either. @@ -170,7 +170,7 @@ ahead of everything, and it re-verifies the token itself so it covers routes tha survive the next door; refusing to boot does. So **adding a router means adding one line to `CAPABILITIES`**. If the surface genuinely is not -user-gated, add it to `EXEMPT_API_PREFIXES` in `totality.ts` *with a reason* — an unexplained exemption +user-gated, add it to `EXEMPT_API_PREFIXES` in `totality.ts` _with a reason_ — an unexplained exemption is how the hole happened the first time. The frontend hook `useCapabilities` **fails open** on purpose: hiding a dock icon is a courtesy, the @@ -219,12 +219,11 @@ so it rewrites every uncommitted file — including work in progress that isn't up as unexplained whitespace churn in someone else's diff. Run `bunx prettier --write ` on the files you actually touched. `bun format` is only safe when the tree is otherwise clean. - ## Code Style - **Paradigm**: functional — pure functions, immutability, composition - **TypeScript**: strict, no `any`. Type-only imports are required (`verbatimModuleSyntax`). -- **Comments**: minimal, and about *why*. Don't narrate what the code already says. +- **Comments**: minimal, and about _why_. Don't narrate what the code already says. - **Async**: always async/await - **Exports**: named only, no defaults - **Files**: `PascalCase.tsx` for components, `kebab-case.ts` for everything else @@ -323,7 +322,7 @@ link-focusable). Half the app still does this; none of the new code should. `f35c145`); **react-router's ``** for nav chrome, so active state comes from the router. The hand-rolled `isActive` in `Dock`/`Header` is scheduled for replacement (audit Phase 4) — don't copy it. A disabled entry renders as a ``; a disabled `` is not a thing. A control that - *mutates* rather than navigates stays a `