"Turn finished · no closing message" kept appearing over an agent that was plainly still working, with output resuming a moment later. isGenerating was set in exactly three places: sendPrompt, and the two reconnect handshakes. So it answered "am I waiting for a reply I asked for", never "is this conversation working". Every other way a turn begins left it false — a commander waking on its own schedule, a queued prompt the server delivered, another tab driving the same session, or a turn that started before this tab was looking. The events still render, but buildRows reads isGenerating to decide whether the last turn is finished, so a live turn was `complete` and the moment it sat on a completed tool call with nothing said after it, the banner fired. Same gap left the composer enabled mid-turn, and a message typed then was not marked injected — which splits the live turn and prints the banner a second way, the exact failure injected exists to prevent. session:claude now sets it: the harness's own turn-start signal, and the only one that arrives before any work does. tool:start sets it too, because session:claude is not durable and a socket connecting mid-turn never receives one, while a tool cannot start outside a turn. Two candidates were measured rather than argued. A genuinely silent turn ending earns the banner honestly, but 667 of 673 recorded turns end with assistant:text immediately before result, so that is ~1% and cannot be it. And a stale sync:live is real but rare: correlating every attach in the officer log against the agent's own later output, 15 of 549 "not generating" attaches were contradicted and one provably so. That residue is left alone — the tool:start fallback now corrects it on the next event — and noted on the refresh card, which is the same seam. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Officer-Session: f7a62308-0977-4cf4-aa29-c020853fd420
5.9 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
Themes
97 open, 31 closed, across 32 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-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-harnesses2026-08-25Resurrect Projects/Apps — backburner/resurrect-projects-apps2026-08-25Refresh mid-turn folds the live tool call — it reads as finished while still running — known-bugs/refresh-mid-tool-call-renders-the-turn-folded2026-08-25The model picker showsclaude-codeinstead of the model that is running — known-bugs/the-model-picker-shows-the-bare-harness2026-08-25Understand how Claude and opencode do memory, then centralize both into one vector database — memory/understand-and-centralize-agent-memory-into-a2026-08-25Deep-link a todo notification straight to that item's markdown — mobile-apps/deep-link-a-todo-notification-to-its-file2026-08-25Add a favorites tab/panel to the file browser — multi-user/add-a-favorites-tab-panel-to-the-file-browser2026-08-23A worker cannot verify that the owner delegated to a manager, so it has to ask every time — agent-coordination/a-peer-cannot-verify-a-delegation2026-08-23An agent cannot learn its own transcript id, so it cannot sign its own work — agent-coordination/an-agent-cannot-learn-its-own-session-id