- Shipped
- September 5, 2026 at 2:17 AM UTC
- Author
- Kamo
- Commit
- 91e538d
A member with six terminals minimized has one question about each: is that one waiting for me? The head now answers it in a colour. green working — nothing is wanted from you amber waiting for you, and you have not looked since it started waiting grey waiting, and you have seen it Three states and no more. A fourth would have to be read rather than glanced at, and a glance is the whole point of a colour. Green and amber are the emulator's own — the same green the terminal list already uses for "this shell is attached" — so somebody who has learned one has learned the other. Grey is deliberately not a colour: a terminal you have already seen should recede, and the way to recede is to stop being coloured. The busy/waiting half comes from the machine (a shell's foreground command, a machine can say a terminal is waiting, but only this browser knows whether the person has since looked at it — and without that distinction six idle terminals glow for attention for ever and the colour stops meaning anything. Reviewed means seen SINCE IT STARTED WAITING, not seen ever. A terminal you opened, read and put away, which then went off and did more work and stopped again, is asking for you a second time; a rule that only remembered "you have looked at this one" could never say so. So the moment a terminal stops being busy is recorded and compared against. The TRANSITION is what is recorded, never the state — a terminal already waiting when the page loaded had none, and stamping "now" would mark every terminal on the machine unreviewed after every refresh. Keyed on the shell's session id, not the tool window's: window ids come from a counter that resets on every page load, so a review recorded against one would follow whichever terminal happened to open first after a refresh. Polls at 3s rather than the panel's 10s — a list is something you go and read, but a colour is something you notice, and one that takes ten seconds to go amber after a build finishes is a colour you learn not to trust. Only while something is actually minimized, so a member with no heads out pays nothing. The colour is pushed only when it has CHANGED, so a head that has been amber for ten minutes does not re-render every three seconds. HexHeadTerminalStateSync sits beside HexHeadUnreadSync and exists for the same reason: it is the only thing that can see both the window list and a data source the hexhead engine knows nothing about. 13 guards and 5381 tests. check-i18n-keys stays red on another session's subscription work, nothing here.