Follow-up to #18 / pull #74. Presence is fed only by /events subscribers, so src/tty.ts neither appears in the header's list nor shows one. Two consequences worth closing, since the direction's "done" is two people and one agent on one board, each seeing the others:
Someone working the board from the terminal is reported as not there to every web viewer, while their moves keep arriving (via src/watch.ts) as if from nobody. The page is confidently wrong rather than silent.
The terminal has no way to see who else is on the board, though the page does — the crew's rule is that what a person can do on the page they can do in src/tty.ts too.
The pull's README is honest about both, which is why this is a follow-up and not a blocker.
Shape of the fix.src/presence.ts is already in-process only, and the terminal is a separate process, so the honest join for it is the same path src/watch.ts uses: a row (or a heartbeat column) the terminal touches while it is attached and clears on exit, read back by list() and merged with the live subscribers, with a staleness cut-off so a killed terminal ages out. Then draw the same list in the terminal's header, and mark a card's last change with its author's name there as the page does.
Tests that would fail without it: a terminal session attached to a board appears in list(boardId) and in a web viewer's next presence frame; it disappears within the cut-off after the session exits; and src/keys.ts renders the list without a tty.
Follow-up to #18 / pull #74. Presence is fed only by
/eventssubscribers, sosrc/tty.tsneither appears in the header's list nor shows one. Two consequences worth closing, since the direction's "done" is two people and one agent on one board, each seeing the others:src/watch.ts) as if from nobody. The page is confidently wrong rather than silent.src/tty.tstoo.The pull's README is honest about both, which is why this is a follow-up and not a blocker.
Shape of the fix.
src/presence.tsis already in-process only, and the terminal is a separate process, so the honest join for it is the same pathsrc/watch.tsuses: a row (or a heartbeat column) the terminal touches while it is attached and clears on exit, read back bylist()and merged with the live subscribers, with a staleness cut-off so a killed terminal ages out. Then draw the same list in the terminal's header, and mark a card's last change with its author's name there as the page does.Tests that would fail without it: a terminal session attached to a board appears in
list(boardId)and in a web viewer's next presence frame; it disappears within the cut-off after the session exits; andsrc/keys.tsrenders the list without a tty.