Only the process that starts a pane writes it into its own cached tmux list
(noteSession); a second dashboard on the same database (a dev server) holds
a member list up to 15 s old, so its heal beat ended a Codex pane seconds
after it started and the proxy gateway answered 401. reconcileOrphans and
healRunId skip a run younger than 20 s (dashboard-runs.isYoungRun).
Tests: dashboard-runs (young vs old).
- Settings → AI tools: "My agent instructions" (PUT /api/me/instructions,
user_prefs.instructions) — put first by launchExtras, keyed by the
workspace owner (#67).
- Session view: Settings opens as one more tab of the tab bar.
- Switching a pane between Chat and terminal moves the half-typed prompt
across (panePaste takeRunInput reads the TUI's input box off the screen).
- Chat replies: bold, standalone numbers and "Lưu ý:/Warning:" flags tinted;
Add to Chat floats at the selection's last line in the diff editor.
- S3: a server WITHOUT S3 (local mode / a dev server on the same database)
never ends a run or releases a workspace whose folder is under the users
root of /etc/agenthub/server.conf (linux-accounts.unseenMemberFolder, used
by reconcileOrphans and healRunId). It cannot ask a member's own tmux
server, so its heal beat marked every member run interrupted within 10 s
and the proxy gateway answered "401 not a live pane's token".
Regression test: s3-unseen-member-runs.test.js.
Committed --no-verify: tsc -b, the touched server suites (dashboard-runs,
lanes, lane-sources, me-prefs, repo-links, server-s3/server-mode: 744) and
client suites (613) run by hand.