Wrap the status line rather than drop the per-model limit
The measured ladder tried every single-line variant before considering a second line, so whenever line one plus the full group did not fit — from around 92 usable columns upwards, depending on how long the branch, cwd and model names are — it emitted rl_bare (5h and 7d only) and silently dropped the per-model (Fable) bar that is the main reason the group is worth rendering. On a 110-column laptop the limit was invisible. Reorder so a second line beats losing that bar: one line rich/mid/lean, then wrap, and rl_bare only when WRAP_NARROW is false. Reset times and extra-usage credits are still given up rather than wrapped for, which makes the rendered content non-monotone in width; the comment on the ladder spells that out. Also stop the tests writing fixtures to the caches the live status line reads. ~/.claude/statusline.sh is a symlink to the script, so a test run was visibly rendering fabricated usage — a Fable bar at 10%, extra-usage credits of $1234.56/$2000.00 — in whatever session happened to be open, and a run killed before its trap fired would have left that in place for an hour. The cache directory is now $STATUSLINE_CACHE_DIR (default /tmp/claude) and each suite points it at a temporary directory, which also removes the backup/restore dance and the deletion of the live git-status cache. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
697ad5055f
commit
c88a291047
5 changed files with 56 additions and 44 deletions
|
|
@ -9,18 +9,14 @@
|
|||
# particular the per-model ("weekly_scoped") limit such as Fable, and how the
|
||||
# renderer degrades when the group will not fit.
|
||||
SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/statusline.isaacaudet.sh"
|
||||
CACHE="/tmp/claude/statusline-usage-cache.json"
|
||||
BACKUP="$(mktemp)"
|
||||
# Render into a throwaway cache directory. The live cache must not be touched:
|
||||
# ~/.claude/statusline.sh is a symlink to the script under test, so a fixture
|
||||
# written there is shown in the running TUI as real usage until it expires.
|
||||
export STATUSLINE_CACHE_DIR="$(mktemp -d)"
|
||||
CACHE="$STATUSLINE_CACHE_DIR/statusline-usage-cache.json"
|
||||
REPO="$(mktemp -d)"
|
||||
[ -f "$CACHE" ] && cp "$CACHE" "$BACKUP"
|
||||
|
||||
# Restore the real cache. If there was no cache to begin with, REMOVE the
|
||||
# fixture rather than leaving it: the status line treats a fixture as a fresh
|
||||
# response for api_cache_max (1h) and would report fabricated usage.
|
||||
cleanup() {
|
||||
if [ -s "$BACKUP" ]; then cp "$BACKUP" "$CACHE"; else rm -f "$CACHE"; fi
|
||||
rm -f "$BACKUP"; rm -rf "$REPO"
|
||||
}
|
||||
cleanup() { rm -rf "$STATUSLINE_CACHE_DIR" "$REPO"; }
|
||||
trap cleanup EXIT
|
||||
|
||||
git -C "$REPO" init -q 2>/dev/null
|
||||
|
|
@ -80,6 +76,16 @@ case "$(nth "$out" 2)" in *"Fable"*"10%"*) ok "narrow: Fable is on line two" ;;
|
|||
case "$(nth "$out" 1)" in *"Fable"*) bad "narrow: Fable not duplicated on line one" "$out" ;;
|
||||
*) ok "narrow: Fable not duplicated on line one" ;; esac
|
||||
|
||||
# The per-model bar is the reason the group exists on a Fable-capable account,
|
||||
# so it must survive by wrapping and never be dropped to squeeze the group onto
|
||||
# one line. Regression: on a ~110-column laptop it vanished silently.
|
||||
echo "Mid widths keep the per-model bar (wrapping if need be):"
|
||||
for w in 105 110 116 120; do
|
||||
out=$(render "$w" "$REPO" "Opus 5 (1M context)")
|
||||
case "$out" in *"Fable"*"10%"*) ok "width $w: Fable still shown" ;;
|
||||
*) bad "width $w: Fable still shown" "$out" ;; esac
|
||||
done
|
||||
|
||||
# The label must come from the payload, not be hardcoded.
|
||||
fixture <<JSON
|
||||
{$BASE,"extra_usage":{"is_enabled":false},
|
||||
|
|
|
|||
Loading…
Reference in a new issue