Chasing "Minesweeper is laggy" ended somewhere else entirely. Press-to-paint is 29ms median at x11vnc's socket and 29ms through the sidecar relay, but 35-200ms+ in the browser — so every bit of the variance is added by the one hop between, which is officer. Officer answering a trivial 401 on /api/health: median 1ms, p90 2ms, max 490ms. summarizeTranscript full-reads and JSON.parses an entire transcript to build a session-list row; timed against the largest here (196 MB, 70,137 entries) that is 323ms to read plus 541ms to parse — 864ms of blocked loop per call. It is cached on mtime, and a LIVE session appends every few seconds, so the cache misses exactly when the agent is busy. Filed rather than fixed: it is a hot path shared by every surface, and the right shape (incremental parse keyed on size, versus moving summaries off the request path) is an architecture call. The file already contains the argument for the incremental version — "Claude only ever appends". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Officer-Session: f7a62308-0977-4cf4-aa29-c020853fd420
6.4 KiB
TODO — the index
Deferred work. The items live in todo/, one file each, grouped by theme; this file is the map
over them and is GENERATED — run bun run todo:index after any change rather than editing it here.
Format and the two-way-sync contract: todo/README.md. Browse and edit it at /todos in the app.
Context, corrected 2026-08-07. This list used to open by saying Officer was "collapsing from multi-tenant / open-source-ready to a single-user platform", and told you to treat multi-tenant indirection as accidental complexity. That direction was reversed. The permission model shipped on 2026-08-07 to serve a real goal — deploy to the company server, onboard people, give each one their own Gitea account through the platform. Per-user scoping is now a requirement, and the items that proposed deleting it have been removed rather than left to mislead the next reader.
What did NOT reverse: execution permissions (terminal, chat, tasks, files, desktop, browser) run as
the owner's OS user and can never be granted. Indirection there really is accidental complexity.
Urgent
- due 2026-08-22 — Settings to choose which server each feature uses — fleet/settings-to-choose-which-server-each-feature
- An affordance: a scoped agent warns when a request lands outside its scope — affordances/an-affordance-a-scoped-agent-warns-on-the
- A commander's watcher does not survive a reboot, and nothing says so — agent-coordination/a-commander-s-watcher-does-not-survive-a-reboot
Themes
108 open, 33 closed, across 35 themes.
Records — no items, kept for the reasoning
- Affordances (2026-08-19)
- Inputs outside forms (2026-08-19) — swept, fixed, closed
- Release-binary dependencies (2026-08-19)
Newest ten
2026-08-29Officer blocks its own event loop for ~0.9s re-parsing a live transcript, and everything it serves stalls with it — known-bugs/officer-blocks-its-event-loop-parsing-transcripts2026-08-27Turn an ordinary chat into a commander or a bot, carrying its context along — agent-coordination/turn-a-chat-into-a-commander-or-a-bot2026-08-27The calendar API cannot express repeating events, reminders, invitees or a cancelled occurrence — calendar/the-json-api-cannot-express-recurrence-alarms2026-08-27AGENTS.md sweep — what is left after the static docs landed — docs-conventions/agents-md-remaining2026-08-27OpenSEO — a strong plugin candidate, checked rather than assumed — integrations/openseo-a-plugin-candidate2026-08-27The calendar/contacts skill has never been exercised by an actual agent — known-bugs/calendar-skill-never-used-by-an-agent2026-08-27Setting up a phone for calendar and contacts should be one link inside Officer, not a manual account form — mobile-apps/setting-up-a-phone-should-be-a-link-in-the-app2026-08-27Marketplace: browse by tag — filter list, card grid, detail with a back button — plugin-ecosystem/marketplace-browse-by-tag2026-08-25An affordance: a scoped agent warns when a request lands outside its scope — affordances/an-affordance-a-scoped-agent-warns-on-the2026-08-25Commit signing is inconsistent across harnesses — Claude names itself, opencode names nothing — agent-coordination/commit-signing-is-inconsistent-across-harnesses