Skip to content

feat: colour the launch and teardown narration, and release v0.5.0 - #12

Merged
jayhesselberth merged 2 commits into
mainfrom
worktree-startup-color
Aug 26, 2026
Merged

feat: colour the launch and teardown narration, and release v0.5.0#12
jayhesselberth merged 2 commits into
mainfrom
worktree-startup-color

Conversation

@jayhesselberth

Copy link
Copy Markdown
Member

Colour for the launch and teardown narration, plus the v0.5.0 bump.

Two commits: the feature, then the release.

Colour

Launching a session prints a dozen lines of which exactly one matters — that
it is ready, and where. Dimming the narration and leaving the result bright
makes the block scannable without changing what it says.

! Maintenance (monthly-maint) starts Thu Aug 27 06:00.          ← yellow
  Shortened the request from 24:00:00 to 16:54:48 …             ← dim, time bold

Note: you already have 4 running sessions …                     ← dim
Submitted job 245380, waiting for it to start.                  ← dim, id teal
 ⠹ waiting for free resources — est. start 13:42 (12s elapsed)  ← teal spinner
Allocated compute07 — bringing up the session...                ← node teal

✓ Session 245380 is ready on compute07.                         ← green ✓, bold

  Attach:   sinteractive --attach analysis                      ← keys yellow
  Status:   sinteractive --status analysis
  Cancel:   sinteractive --cancel analysis
⠿ Detached. Job 245380 is still running on compute07.           ← yellow ⠿

  Reconnect:  sinteractive --attach analysis
  Cancel:     scancel 245380

✓ Cancelled session 245380 (analysis) on compute07.             ← green ✓

Four roles, not a rainbow. Teal marks identifiers — job ids and node
names — echoing the #2DBFB8 the status bar already uses for those same
things, so the launch output and the session you land in agree about what an
identifier is. Dim carries progress. Yellow marks keys and warnings,
red errors, green the two moments worth noticing.

Gating

The auto test is on standard error, not standard output, because that is
where all of this is written. The two differ in exactly the case that matters:
sinteractive --detach ... > file should still narrate to your terminal,
while 2>log must not collect escapes.

Condition Colour
2>file off — verified, 0 escape sequences
NO_COLOR set (any value) off
TERM=dumb or unset off
SINTERACTIVE_COLOR=never off
SINTERACTIVE_COLOR=always on, even through a pipe

With colour off every variable is the empty string rather than each use being
guarded, so one set of format strings serves both cases and there is no
second, less-tested path.

Two messages were tightened while being rewritten anyway: Interactive job with ID N submitted, please waitSubmitted job N, waiting for it to start, and the detach block's prose To reconnect: / To cancel the job:
became an aligned Reconnect: / Cancel: pair matching the one already shown
at launch.

Release v0.5.0

Bumps all four places the version lives, plus the sample output in
docs/deploy.md:

File
sinteractive:22 VERSION='0.5.0'
pixi.toml:4 version = "0.5.0"
man/sinteractive.1:1 .TH line
CHANGELOG.md [0.5.0] - 2026-08-26 + compare links

make nodes-check scrapes the version with sed -n "s/^VERSION=.\(.*\)./\1/p",
so that line's quoting and column-0 position matter — confirmed it still
returns 0.5.0, and --version agrees.

Shipping in 0.5.0: the quota notice and --check-quota (#11, closes #8),
maintenance-shortened sessions, and this.

All four validate.yml gates pass locally.

🤖 Generated with Claude Code

jayhesselberth and others added 2 commits August 26, 2026 14:22
Launching a session prints a dozen lines of which exactly one matters — that
it is ready, and where. Everything else is progress narration that has to be
read past. Dimming the narration and leaving the result bright makes the block
scannable without changing what it says.

Four roles, not a rainbow. Teal marks identifiers — job ids and node names —
echoing the #2DBFB8 the status bar already uses for those same things, so the
launch output and the session you land in agree about what an identifier is.
Dim carries progress. Yellow marks keys and warnings, red marks errors, and
green marks the two moments worth noticing: the session coming up and a
cancel landing.

The auto-detection tests standard error, not standard output, because that is
where all of this is written. The two differ in exactly the case that matters:
`sinteractive --detach ... > file` should still narrate to the terminal, while
`2>log` must not collect escape sequences. SINTERACTIVE_COLOR takes
always/never/auto and NO_COLOR is honoured whatever its value, with an
explicit always winning over both for piping into something that renders
escapes itself.

With colour off every variable is the empty string rather than each use being
guarded, so one set of format strings serves both cases and there is no
second, less-tested code path.

Two messages were tightened while here, since they were being rewritten
anyway: "Interactive job with ID N submitted, please wait" is now "Submitted
job N, waiting for it to start", and the detach block's prose "To reconnect:"
/ "To cancel the job:" became an aligned "Reconnect:" / "Cancel:" pair
matching the one already shown at launch.

Verified that a redirect collects no escapes at all, and that NO_COLOR and
TERM=dumb both suppress colour on a real pty.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Storage quota and maintenance-shortened sessions in the notice line, and
colour in the launch and teardown narration.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jayhesselberth
jayhesselberth merged commit 6b98246 into main Aug 26, 2026
1 check passed
@jayhesselberth
jayhesselberth deleted the worktree-startup-color branch August 26, 2026 20:24
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.

Warn in the pane border when over storage quota (blocked: quota_check is login-node only)

1 participant