Skip to content

0.60.1

On a phone, the head tower’s page showed a wait with buttons that seemed to do nothing.

  • No link to the page you are on. “Open the tower’s comms” on the head tower’s page, and on a workspace tower’s own comms, led to that same page, so it is no longer drawn there. The tower’s card on the overview and the workspace page keeps it.
  • The link is a button. a.pair-btn sat 7 px high and underlined next to its sibling buttons; it is now centred in the same 44 px box with no underline.
  • Dismiss and Send say what happened. A dismissal the server took folds the panel and says “This wait was dismissed.” once, in a line under the rows that stays for a few seconds (the row itself goes with the next snapshot); an answer says “Sent to the tower.” the same way and keeps Handle; a refusal still shows its reason. While the stream is stale the panel says the page is offline and why Dismiss and Send are off (a polite status line, not an alert). This is the towers’ notes only: Zen’s card and the wait dialog behave as before.

The head tower’s page is the conversation

Section titled “The head tower’s page is the conversation”

Boss decisions 2026-11-06 (A / A / A). The head page carried a workspace tower’s whole comms page; most of it meant nothing for a head that does no work.

  • One page, one job. The page is the head’s conversation and its composer. End conversation, New conversation, and Close sit in one row above the composer; the ⋯ popover, the conversation line, and the 事件執行・N bar are gone from it. The memory footer shows only when the head holds a standing instruction, a decision, or a pending proposal (not for 0・0・0, not for waits alone). The head’s tool calls (tower_done, tower_send), shell lines, and the sb server’s notices and timers are no longer drawn on this page; its words, yours, and the towers’ answers stay. Zen’s history of the head draws them as before.
  • Asks are one row per broadcast. I'm up → 4 towers · 2h ago · 1/4 replied; a tap unfolds each tower’s newest answer as text, with a link to that tower’s comms. A workspace that has no tower any more and never answered shows only a muted “no tower” (no “waiting”); the line still counts it among the towers asked. A tower reads waiting, answered, or no answer (24 h): “answered” appears only with an answer (it used to mean “older than a day”). Groups quiet for 24 h fold into “Older (n)”. One boss instruction is one row however the head worded its message to each tower: asks.json gains group (the id of the first ask of the broadcast), and asks that carry the same relay (boss:<event id>) share it. An ask with no relay (an older file, the head’s own notes) is grouped by the same first line within 60 s. A file with no group is grouped the same way when read.
  • A wait stops showing when it lapses. A boss wait is shown until its own due (with none, for a day); the head’s snapshot summary leaves lapsed ones out, so the page, the Zen strip, and the alerts agree. They stay in memory.json for 7 days and /boss memory -w head lists them. The head’s footer count leaves them out too. The head’s brief names the lapsed waits for the boss (“Lapsed waits … resolve each, or ask the boss again with a new due”), so it closes or renews them when it wakes; a wait for an agent is not in that line. A workspace tower’s waits are as they were.
  • Demo. ?head=answers and ?head=waiting carry five broadcasts of four workspaces (one with no tower), a lapsed and a fresh wait, event runs, and the items the page hides.

Design: docs/specs/2026-11-06-head-page-minimal.md.

  • A session’s divider no longer lands on the strips above the composer. In the comms (Geek and Standard, phone and desktop) the hairline above the composer sat on the bottom edge of the last todo or monitor strip, so the strip’s border and the divider collided and the strip looked clipped. The divider now sits under the log, above the docked strips (queue, todos, monitors), with a 6 px gap under it and above the composer. The tower’s notes (the bordered 老闆對話 / event-run card, which sits between the log and the strips) get their own 6 px under the divider, so the card’s border is never the divider’s on the head page or on a tower’s comms without a strip. A composer with no strip above it keeps its divider where it was. Tap targets are unchanged.
  • A queued message’s label stays in one piece. On a phone the label of a queued row (排隊中・插話, 排隊中・做完再送, Queued · steer, Queued · follow-up) broke in the middle (插 | 話) when the message beside it was a long path or URL. The label no longer wraps; the message breaks where it must.