← back to Terminal Status
TK-11794: green 'waiting' variant — brighter static green (0,255,120) for an idle/waiting green session
ea41eb3b5a923b75011066418aa6ea1b36e6d967 · 2026-09-15 18:47:40 -0700 · Steve Abrams
A green-only tint parallel to monitoring (teal): distinguishes an idle/waiting
green session from an actively-working one WITHOUT pulsing — green stays SOLID
per Steve's dot directive. Guarded at set-time (dropped on any non-green base),
accepted by load()/set()/set-variant validation, wired to CLI --waiting +
set-variant waiting. Variant precedence: stopped > monitoring > waiting. Render-
only rgb; stored title recomputes byte-identically so no record goes invalid.
39/39 tests pass incl test_waiting_shade_is_brighter_green_and_survives_repaint.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HKMY3eXqwFUCfqDShfUVnH
Files touched
M terminal_status.pyM test_terminal_status.py
Diff
commit ea41eb3b5a923b75011066418aa6ea1b36e6d967
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Tue Sep 15 18:47:40 2026 -0700
TK-11794: green 'waiting' variant — brighter static green (0,255,120) for an idle/waiting green session
A green-only tint parallel to monitoring (teal): distinguishes an idle/waiting
green session from an actively-working one WITHOUT pulsing — green stays SOLID
per Steve's dot directive. Guarded at set-time (dropped on any non-green base),
accepted by load()/set()/set-variant validation, wired to CLI --waiting +
set-variant waiting. Variant precedence: stopped > monitoring > waiting. Render-
only rgb; stored title recomputes byte-identically so no record goes invalid.
39/39 tests pass incl test_waiting_shade_is_brighter_green_and_survives_repaint.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HKMY3eXqwFUCfqDShfUVnH
---
terminal_status.py | 33 ++++++++++++++++++++++++++-------
test_terminal_status.py | 13 +++++++++++++
2 files changed, 39 insertions(+), 7 deletions(-)
diff --git a/terminal_status.py b/terminal_status.py
index 7f23d36..280d374 100644
--- a/terminal_status.py
+++ b/terminal_status.py
@@ -589,7 +589,17 @@ def osc_payload(record):
if record["state"] == "none":
return b"\x1b]6;1;bg;*;default\x07\x1b]1;\x07\x1b]2;\x07\x1b]1337;SetBadgeFormat=\x07"
title = display_title(record)
- rgb = (0, 150, 136) if record.get("variant") == "monitoring" else COLORS[record["state"]][1]
+ # Green VARIANT tints (both green-only, guarded at set-time): waiting = a distinct
+ # brighter STATIC green for an idle/waiting green session; monitoring = teal, a
+ # scheduled deadline. Any other variant/base uses the base colour's rgb (stopped
+ # keeps its base dot and rides the additive marker instead of changing the tint).
+ variant = record.get("variant")
+ if variant == "waiting":
+ rgb = (0, 255, 120)
+ elif variant == "monitoring":
+ rgb = (0, 150, 136)
+ else:
+ rgb = COLORS[record["state"]][1]
text = "".join(
f"\x1b]6;1;bg;{channel};brightness;{value}\x07"
for channel, value in zip(("red", "green", "blue"), rgb))
@@ -716,7 +726,7 @@ class Store:
ticket = r.get("ticket", "")
if (ticket and not re.fullmatch(r"TK-\d+", ticket)) or not isinstance(r.get("ticket_at", 0), (int, float)):
return None, "invalid"
- if r.get("variant", "") not in ("", "monitoring", "stopped"):
+ if r.get("variant", "") not in ("", "monitoring", "stopped", "waiting"):
return None, "invalid"
expected = status_title(r["state"], r["label"], ticket, r.get("variant", ""))
if r["title"] != expected or (r["state"] == "none" and r["label"]):
@@ -753,7 +763,7 @@ class Store:
def set(self, owner, color, label="", *, issued_ns=None, ticket_update=None,
variant="", deferential=False):
issued_ns = issued_ns if issued_ns is not None else issued_clock()
- if color not in COLORS or not valid_label(label) or variant not in ("", "monitoring", "stopped"):
+ if color not in COLORS or not valid_label(label) or variant not in ("", "monitoring", "stopped", "waiting"):
raise StatusError("Invalid status or label")
label, embedded_ticket = label_ticket(label)
if embedded_ticket:
@@ -858,7 +868,7 @@ class Store:
status — colour, label, ticket and timestamps are preserved. This is what the
flasher pulses, so a crashed loop can never corrupt the real dot: the worst case
is the marker left on or off beside an otherwise-correct base colour."""
- if variant not in ("", "monitoring", "stopped"):
+ if variant not in ("", "monitoring", "stopped", "waiting"):
raise StatusError("Invalid variant")
with self.lock(owner):
record, reason = self.load(owner)
@@ -866,7 +876,8 @@ class Store:
raise StatusError("Cannot set variant on unknown status: " + reason)
self.assert_owner(owner)
color = record["state"]
- if variant == "monitoring" and color != "green":
+ # monitoring AND waiting are green-only tints; drop either on a non-green base.
+ if variant in ("monitoring", "waiting") and color != "green":
variant = ""
record["variant"] = variant
record["title"] = status_title(color, record["label"], record.get("ticket", ""), variant)
@@ -999,7 +1010,7 @@ def main(argv=None):
parser = argparse.ArgumentParser(description=__doc__)
sub = parser.add_subparsers(dest="command", required=True)
sv = sub.add_parser("set-variant")
- sv.add_argument("variant", nargs="?", default="", choices=["", "monitoring", "stopped"])
+ sv.add_argument("variant", nargs="?", default="", choices=["", "monitoring", "stopped", "waiting"])
sv.add_argument("--if-blocked", action="store_true",
help="only apply when the base dot is a NEEDS-STEVE colour (yellow/purple/"
"orange); a cheap no-op otherwise. Used by the Stop hook so the 🔵 "
@@ -1031,6 +1042,9 @@ def main(argv=None):
"record must still match the live process table, so a stale "
"writer is refused exactly as for the caller's own tab.")
cmd.add_argument("--monitoring", action="store_true")
+ cmd.add_argument("--waiting", action="store_true",
+ help="brighter STATIC green (rgb 0,255,120) for an idle/"
+ "waiting green session; a green-only tint like --monitoring")
cmd.add_argument("--stopped", action="store_true",
help="keep the base colour dot and place \U0001F535 next to it "
"(any stop that requires Steve's input)")
@@ -1198,9 +1212,14 @@ def main(argv=None):
elif args.command == "repaint":
record = store.repaint(owner)
else:
+ # Variant precedence when more than one flag is somehow passed: stopped (the
+ # needs-Steve additive marker) wins over the two green tints; between the tints,
+ # monitoring (teal — an active scheduled deadline) wins over waiting (brighter
+ # idle green), since a live deadline is the more informative signal.
record = store.set(owner, color, label,
variant=("stopped" if getattr(args, "stopped", False)
- else "monitoring" if getattr(args, "monitoring", False) else ""),
+ else "monitoring" if getattr(args, "monitoring", False)
+ else "waiting" if getattr(args, "waiting", False) else ""),
deferential=getattr(args, "deferential", False))
if not getattr(args, "quiet", False):
print(f'/terminal-status → /dev/{owner.tty} {record["title"] or "CLEARED"}')
diff --git a/test_terminal_status.py b/test_terminal_status.py
index faaf347..c0744f7 100644
--- a/test_terminal_status.py
+++ b/test_terminal_status.py
@@ -83,6 +83,19 @@ class StatusTests(unittest.TestCase):
self.assertEqual(self.paints[-1]["variant"], "monitoring")
self.assertEqual(self.store.row(self.owner)["color"], "green")
+ def test_waiting_shade_is_brighter_green_and_survives_repaint(self):
+ # Parallel to the monitoring variant: waiting paints a distinct brighter STATIC
+ # green rgb(0,255,120), stays state=="green" (a green variant, not a new colour),
+ # and survives a repaint.
+ record = self.store.set(self.owner, "green", "Idle", variant="waiting")
+ packet = ts.osc_payload(record)
+ self.assertIn(b"red;brightness;0", packet)
+ self.assertIn(b"green;brightness;255", packet)
+ self.assertIn(b"blue;brightness;120", packet)
+ self.store.repaint(self.owner)
+ self.assertEqual(self.paints[-1]["variant"], "waiting")
+ self.assertEqual(self.store.row(self.owner)["color"], "green")
+
def test_lightblue_preserves_underlying_needs_steve_reason(self):
# T1-c (TK-11779): an explicit lightblue on a purple/orange/yellow base must NOT
# erase the specific reason — it rides as the additive 🔵 stopped marker on the
← 585ee06 TK-11794: pulse the 4 needs-Steve dot states; green/pink sta
·
back to Terminal Status
·
dot.sh: forward all set args so --tty/--force reach the engi a1139e9 →