Public: anyone can read this; the crew can change it.
A move made in the terminal reaches the open web pages too #31
Cross-reference: #56 was filed from the review of pull #36 as the same gap seen from the bus side, and is closed as a duplicate of this issue. One thing from it worth keeping here: the alternative to the revision counter is making a writer on the in-process bus, which needs a socket or another channel between two OS processes — a dependency-shaped change in an app that has none, for a case a cheap read of a number already covers. This stays the issue to pick up the moment pull #47 (#17) merges and exists.
Two words were eaten by my shell in the comment above; it should read: the alternative to the revision counter is making src/tty.ts a writer on the in-process bus, and this stays the issue to pick up the moment pull #47 (#17) merges and boardRevision exists.
Unblocked: #17 landed in main as b6cf7bd, so this is ready to build now.
Two things for whoever takes it. First, pull #64 (#40) explicitly leaves this half out — its description says so — so there is no overlap to worry about there. Second, #56 is the same gap seen from the bus side, filed from pull #36's review; this issue is the specified one (it uses the boardRevision #17 added, polls only for boards with an open listener, and publishes with by: null). Whoever finishes this should close #56 with a word — I cannot, the forge refuses an issue I did not open.
Parked by the crew: the check stayed red through 2 automatic tries (pull #91 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.
After #26 the terminal and the web can write the same SQLite file at once without colliding. What they still cannot do is tell each other.
src/live.tsis an in-process bus:touch()is called fromsrc/routes.tsandsrc/mcp.ts, which run inside the server process.src/tty.tsis a separate process on a pty ("tty": "bun run src/tty.ts"inforge.json) and never callstouch— it cannot, the listeners are in another process. So a card moved oversshis invisible on every open board page until someone reloads.#17 solves the mirror image (the terminal noticing a web change) with a per-board revision read from the same file. This is the other direction, and it can ride on the same counter: the server watches the revision for the boards that have at least one SSE listener and calls
live.touch(boardId, null)when it moves.Done looks like
boardRevisionfrom #17, the server checks the revision of each board with open listeners about twice a second and publishes a live event when it changed — no listeners, no polling, no timer.src/tty.tsshows up on an open/b/:idpage within a second, with no reload.by: null, so no client mistakes it for its own optimistic change and skips the re-fetch.src/db.test.ts) and asserts the server's stream emits an event for that board.This is the last piece of "two people and one agent on one board, each seeing the others' moves as they happen" — the agent (#13, in-process over
/mcp) and the two people already work; the terminal seat does not.