Frontend before the Rust port; v0 served by the daemon¶
Status: accepted · 2026-09-04 · amended 2026-09-05
Context¶
KO-168 plans a Rust port module by module once the Python seams stop moving; its own trigger is a few weeks without structural change. Ko asked whether to port before or after a frontend.
Decision¶
Frontend first. A frontend consumes the daemon's JSON, which a Rust daemon
would have to honour anyway, so it is untouched by the port. Building the
client is what shapes the API (/attention exists because the drawer
needed it). Rust waits until the JSON and the schema stop moving.
v0 is a page served by the daemon at /, read-only over /status,
/runs, /attention and the ledger. It is built, not hand-written: a
console/ package on Bun, React and Tailwind, bundled to a static
directory the daemon serves, so the writer host needs Bun to build it
and nothing to run it. Bun is runtime, test runner and bundler; there is
no second toolchain. The choice trades "nothing installed" for a
renderer that can grow into the app Ko wants without a rewrite. An
Electron wrapper, if wanted, loads the daemon URL and changes nothing in
the renderer. Writes come behind a serve token.
Tickets¶
Shape settled by note 13, accepted 2026-09-05; the tickets are filed there.