[object Object]

← back to Terminal Status

stopped marker must not reuse the lightblue base codepoint

4e63168d5c4d2cd0225bf3759e1e05f8d2806c74 · 2026-09-13 09:43:33 -0700 · Steve Abrams

STOPPED_MARK was U+1F535 -- byte-identical to the lightblue base colour. Since
status_title() flattens state + variant into one string, 'state=lightblue' and
'state=purple, variant=stopped' rendered IDENTICALLY. No string-level reader, and
no human eye on the tab bar, could tell 'this tab is generically needs-Steve' from
'this gated tab has gone idle'. Two already-distinct canonical fields were being
collapsed onto one glyph, and the consumer disagreements chased this week all
traced back to it.

Now U+1F6D1 (stop sign): different SHAPE (octagon vs circle) and different hue (red
is unused in the palette), so the second axis rides a second visual channel instead
of overloading colour.

Safe by construction: STOPPED_MARK has exactly one render site and nothing parses
it, so no reader can break. color_of() matches title.startswith(base dot) and is
unaffected. Consumers that classify read canonical state/variant; the few that still
grep a glyph only OVER-report during the repaint window, never under-report.
Side benefit: lightblue+stopped rendered a doubled 🔵🔵 and now reads 🔵🛑.

Tests: 26 run, 1 failure -- test_headless_nested_agent_cannot_paint_parent, which
fails identically BEFORE this change. No new failures.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vbtgv1MuWftpd3hfWEiZYG

Files touched

Diff

commit 4e63168d5c4d2cd0225bf3759e1e05f8d2806c74
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sun Sep 13 09:43:33 2026 -0700

    stopped marker must not reuse the lightblue base codepoint
    
    STOPPED_MARK was U+1F535 -- byte-identical to the lightblue base colour. Since
    status_title() flattens state + variant into one string, 'state=lightblue' and
    'state=purple, variant=stopped' rendered IDENTICALLY. No string-level reader, and
    no human eye on the tab bar, could tell 'this tab is generically needs-Steve' from
    'this gated tab has gone idle'. Two already-distinct canonical fields were being
    collapsed onto one glyph, and the consumer disagreements chased this week all
    traced back to it.
    
    Now U+1F6D1 (stop sign): different SHAPE (octagon vs circle) and different hue (red
    is unused in the palette), so the second axis rides a second visual channel instead
    of overloading colour.
    
    Safe by construction: STOPPED_MARK has exactly one render site and nothing parses
    it, so no reader can break. color_of() matches title.startswith(base dot) and is
    unaffected. Consumers that classify read canonical state/variant; the few that still
    grep a glyph only OVER-report during the repaint window, never under-report.
    Side benefit: lightblue+stopped rendered a doubled 🔵🔵 and now reads 🔵🛑.
    
    Tests: 26 run, 1 failure -- test_headless_nested_agent_cannot_paint_parent, which
    fails identically BEFORE this change. No new failures.
    
    Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01Vbtgv1MuWftpd3hfWEiZYG
---
 terminal_status.py | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/terminal_status.py b/terminal_status.py
index 0ac9fa3..efe0a2a 100644
--- a/terminal_status.py
+++ b/terminal_status.py
@@ -104,7 +104,20 @@ def issued_clock():
     return time.clock_gettime_ns(getattr(time, "CLOCK_MONOTONIC_RAW", time.CLOCK_MONOTONIC))
 
 
-STOPPED_MARK = "\U0001F535"   # 🔵 — "stopped, needs Steve", shown NEXT TO the base dot
+# STOPPED_MARK must NOT be the same codepoint as any BASE colour dot (fixed 2026-09-13).
+# It was "\U0001F535", which is byte-identical to the lightblue base colour on line 59.
+# status_title() renders state + variant into ONE string, so "state=lightblue" and
+# "state=purple, variant=stopped" came out visually IDENTICAL -- no string-level reader,
+# and no human eye on the tab bar, could tell "this tab's whole purpose is needs-Steve"
+# from "this gated tab has gone idle". Two already-distinct canonical fields were being
+# collapsed onto one glyph, and every downstream consumer disagreement traced back here.
+# \U0001F6D1 (stop sign) differs in BOTH shape (octagon vs circle) and hue (red is unused
+# in the palette), so the second axis now rides a second visual channel instead of
+# overloading colour. Nothing parses this mark -- it has exactly one render site below --
+# so changing it cannot break a reader; consumers that classify read the canonical
+# `state`/`variant` fields, and the ones that still grep a glyph only ever OVER-report
+# during the repaint window, never under-report.
+STOPPED_MARK = "\U0001F6D1"   # 🛑 — "stopped, needs Steve", shown NEXT TO the base dot
 
 
 def status_title(color, label, ticket="", variant=""):

← 1c16fa2 fix: cache ps scan + fix 60s ceiling exit-code in terminal-s  ·  back to Terminal Status  ·  bind a session by its launcher-declared TK_AGENT, so a slug 2315808 →