Make background/long/desynced turns visible and queueable, fixing the four
symptoms that survived the v0.15.0 chat reliability pass.
F1 - status-driven working signal (workspace.ts taskWorking/currentWorking =
streaming OR status in {planning,executing}). Drives the chat trace, indicator,
and activity spinner so a turn with no live stream (background resume, a dropped
SSE, an idle-close mid long turn) still looks alive.
F2 - operator messages sent during an in-flight turn are now QUEUED and
auto-run when the gate frees, replacing the "still finishing a previous step...
send it again" rejection. Per-session in-memory FIFO (messagequeue.go, capped at
20) drained one-at-a-time under the turn gate; a `queued` SSE event drives a
"Queued" hint. drainQueued releases via a per-iteration deferred closure so a
runChatTurn panic can't deadlock the session's gate.
F3 - SSE keepalive (12s `:keepalive` comment) in handleChat so 20-40s
inter-iteration gaps no longer trip a proxy/browser idle close (the desync root
cause). All SSE writes serialized through one mutex.
F4 - generation-aware activity timeline (only the last propose_plan renders;
superseded ones collapse to one "Earlier plan revised" marker; step-attribution
follows only the current generation) + debounced plan refetch on lifecycle
events so a missed plan.proposed self-heals.
Verified against the last session (23da10db: 6m33s turn, operator "status"
deferred at 19:48:05). go test ./cmd/nomos/ green (new messagequeue tests);
web vitest 72/72 (new F4 generation tests); vite build clean.
VERSION: 0.16.0 -> 0.17.0
6.5 KiB
6.5 KiB
Plans
Pre-flight runbooks for planned changes. When a plan is executed, move it to
done/ and add changelog entries on affected node pages. If things
went sideways, open an investigation.
Active
| Date | Title | Status |
|---|---|---|
| 2026-07-05 | Oikos Prometheus LXC | Planned — not started |
| 2026-07-08 | Oikos gaps, broken things, and improvements | In Progress — security items (B1-B5) and doc drift (E) still open |
| 2026-07-08 | Control room web UI | In Progress — packaging/auth sections superseded by the Wails plan's Phase 0 (client/server split); M4 still open |
| 2026-07-08 | Liveness, drift, and UX cohesion | In Progress — Phase 5 deferred |
| 2026-07-10 | General gated execution: unlimited actions, gated by risk | In Progress — request_execution enum retired (60effcb); only auto-act revival (item 10) still open |
| 2026-07-11 | Nomos agent code review: gaps and improvement plan | In Progress — only C1 (unauthenticated nomos gateway) still open, deferred |
| 2026-07-14 | Activity gaps | In Progress |
| 2026-07-14 | Activity timeline | In Progress |
| 2026-07-17 | Codebase review, lint audit, and documentation maintenance | Report delivered — doc/tooling fixes applied; code refactors pending |
| 2026-07-18 | Session review: three recent sessions | Implemented in v0.7.12 — P0.1/P0.2/P1.3/P1.4/P1.5/P1.6/P1.8/P2.10; P1.7 and P2.9 deferred (retry cap covers) |
| 2026-07-20 | Desktop mascot ("Cluck") | Implemented in v0.8.0 — see deviation note; physics/window-interaction follow-ups tracked separately |
| 2026-07-20 | Session review: past 10 sessions | Implemented in v0.7.13 — all P0/P1/P2 items landed |
| 2026-07-20 | Mascot physics/window-interaction audit | P0–P2 implemented; P3 ("cool stuff") ideas open |
| 2026-07-21 | Frontend as OS + Apps — architecture audit & refactor | Planned — Phase 1 ready |
| 2026-08-03 | Nomos chat: reliability & predictability audit | In Progress — F1–F7 shipped in v0.15.0; F8 + follow-ups open |
| 2026-08-03 | Nomos chat: working-visibility, message queue, generation-aware timeline | Implemented in v0.17.0 — F1–F4 shipped; model-efficiency + F8 follow-ups open |
Done
See done/ for executed plans:
Conventions
- File name:
YYYY-MM-DD-<slug>.md. Use the target date if known, otherwise the planning date. - Status:
Planned→In Progress→Done(move todone/on completion). - When done: add a changelog entry on every affected node page, then move the file to
done/. - Plans are append-only once execution starts — don't rewrite pre-flight intent after the fact.