Files
platform/TODO.md
T
pastilhasandClaude Opus 5 0096392cde a task the agent woke up to starts a turn
Refreshing a chat lost the agent's answers: the turn folded to a seam and
printed "Turn finished · no closing message" over a turn that had plainly
answered. Reported against a commander, where it happened on most refreshes.

The durable log was innocent. A refresh renders from Claude's .jsonl, and the
harness delivers a finished background task as the agent's next user message —
a <task-notification> envelope. The parser dropped it so it would not replay as
a raw XML bubble you appear to have typed, and dropped a turn boundary with it,
because turn-rows derives turns from the message list. The woken turn merged
into the one before it, so that turn's closing prose became mid-turn work and
folded, and the merged segment ended on a tool call, which earned the marker.

Measured on the reported session: 30 messages, one user message, one fold
hiding seven answers, the marker reproduced at 21 of 30 refresh points.

The envelope now rebuilds into the same task row a live task:notification
produces, carrying startsTurn. buildRows makes that a boundary and buildTurn
exposes it as the turn's opener. Separately, the marker is withheld when a
segment ends on a tool call we never saw come back — still running, or cut off
holding it. A completed trailing tool call keeps its marker, so the test
pinning that live behaviour is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Officer-Session: f7a62308-0977-4cf4-aa29-c020853fd420
2026-08-25 06:37:21 +00:00

5.7 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

Themes

91 open, 30 closed, across 31 themes.

Theme Open Closed
Affordances 2 0
Agents coordinating agents 2 0
Speaking into a session from the backend 1 1
Backburner 3 0
Background jobs 2 1
Chat interface 1 0
Code editor 1 0
Components — the shared UI layer 1 0
File watchers 1 0
Fleet — one command across every server 5 2
Headscale 0 5
Infra (alpha) 7 0
Known bugs 3 3
Mobile apps 3 0
Multi-user 16 5
Notifications 1 0
Plugin ecosystem — before it opens to third parties (2026-08-18) 3 0
Plugin infrastructure 2 0
Plugin repos — what writing their READMEs turned up 10 9
Plugin system — gaps the email extraction found (2026-08-18) 3 0
Prompt library 1 0
SendOff 1 0
Settings — portable, and readable by an agent 2 0
Shell — spotlight and the dock 4 1
Sub-agents — agents spawning agents 0 2
Sudo terminal modal 1 0
Tooling — the list about the list 0 1
Transmission 6 0
URL state — routing, query strings and selection 4 0
Waiting on the owner to run it 3 0
Workspaces & Panels 2 0

Records — no items, kept for the reasoning

Newest ten