Skip to content

v0.5.1: give every session notice a line of its own - #13

Merged
jayhesselberth merged 2 commits into
mainfrom
notice-lines
Aug 26, 2026
Merged

v0.5.1: give every session notice a line of its own#13
jayhesselberth merged 2 commits into
mainfrom
notice-lines

Conversation

@jayhesselberth

Copy link
Copy Markdown
Member

The pane border had become the place everything went: OVER QUOTA, SHORT SESSION, and a scrolling offer to install the Claude Code hooks, three unrelated things sharing one rule and taking turns for it — directly above the one line you glance at for the job id.

They move below the status bar instead, onto tmux status lines of their own.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ● session 245772 | compute07                                     Help: Ctrl+b h | Detach: Ctrl+b d
 ⚠ OVER QUOTA  30.2T / 30T · over by 204.8G │ SHORT SESSION · ends before monthly-maint at Thu 06:00
 Claude Code: run sinteractive --install-claude to enable the skills and hooks
  • Warnings nearest the session line (both hold for the whole session, so they share a line); the Claude hint furthest away, since it is only an offer.
  • Each line exists only while it has something on it, so a session with nothing to say is exactly as tall as before, and the pane gets its row back the moment a warning clears.
  • The hint no longer scrolls — a full-width line fits the whole sentence at 80 columns, which retires the 0.3s redraw the marquee forced on every session that showed it.
  • The pane border is back to a plain rule with no text.

One tmux subtlety, found by rendering against a live client rather than by reading the manual: setting one element of an option array at session scope replaces the whole array for that session instead of overlaying the global one. A session-scoped status-format[1] therefore leaves status-format[0] empty and the session line silently disappears. The extra indices are set globally instead.

Verified by attaching a real client at 100 and 80 columns across every combination: nothing, hint alone, quota alone, quota + short session + hint, and back to nothing. At 80 columns the hint fits whole and the warnings truncate from the right, which is the correct end to lose.

Docs updated in README, the man page, docs/scripting.md, the bodhi-storage skill, and the --agent-context briefing. Release commit bumps VERSION, pixi.toml, the man page .TH, and the docs/deploy.md example to 0.5.1.

🤖 Generated with Claude Code

jayhesselberth and others added 2 commits August 26, 2026 17:25
The pane border had become the place everything went. It carried OVER QUOTA,
SHORT SESSION and a scrolling offer to install the Claude Code hooks — three
unrelated things sharing one rule and taking turns for it, immediately above
the one line you actually glance at for the job id. Two of them were warnings
you cannot act on without reading, and reading them meant picking them out of
a line that was also a decoration.

So they move below the status bar instead, onto tmux status lines of their
own: warnings nearest the session line, since they are the ones you may have
to act on and both hold for the life of the session, then the Claude hint
furthest away, since it is only an offer. Each line exists solely while it
has something on it, so a session with nothing to say is exactly as tall as
it was before, and the pane gets its row back the moment a warning clears —
which is what makes `--check-quota` after a deletion feel like it did
something.

The hint stops scrolling. It scrolled because 44 columns was all the border
could lend it without swallowing the rule; a full-width line fits the whole
sentence at 80 columns. That also retires the 0.3s redraw the marquee forced
on every session that showed it, along with the offset arithmetic and the
byte-slicing that made the message ASCII-only.

One tmux subtlety, found by rendering it against a live client rather than by
reading the manual: setting one element of an option array at session scope
replaces the whole array for that session instead of overlaying the global
one. A session-scoped status-format[1] therefore leaves status-format[0]
empty, and the session line — the thing the notices are meant to sit under —
silently disappears. The extra indices are set globally, which leaves the
default index 0 alone; every job has its own tmux server, so that is still
one session's worth of scope.

Verified by attaching a real client at 100 and 80 columns across every
combination: nothing, hint alone, quota alone, quota + short session + hint,
and back to nothing. At 80 columns the hint fits whole and the warnings
truncate from the right, which is the correct end to lose — align=left keeps
the overage figure, the part that is news.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Every session notice — over quota, short session, and the Claude Code hint —
moves off the pane border and onto status lines of its own below the session
line.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jayhesselberth
jayhesselberth merged commit b751a56 into main Aug 26, 2026
1 check passed
@jayhesselberth
jayhesselberth deleted the notice-lines branch August 26, 2026 23:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant