Stage 2 of decision 0023, alone and on published gpui 0.2.2, so that a lint
change and a framework API change cannot be mistaken for each other later.
Zed's revision ce48461e pins Rust 1.97.1; staying on 1.94.1 would mean taking
the compiler move and the dependency move in one unattributable step.
The record warned that three minor versions of new pedantic lints would land
as hard errors under -D warnings. They did not: the whole workspace produced
one lint at four sites, all of them a Duration built from a smaller unit than
it needed. Five minutes, not a day. Recorded because the estimate was wrong in
the cheap direction and the next person planning this should know the shape of
it.
Published gpui 0.2.2 compiles unchanged on 1.97.1; the UI gate passes with 79
tests. That was the one thing this stage existed to find out.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SPYebLiN2w4TqnHUYGdECq
Decision 0015 rejected the account usage endpoint because AGENTS.md forbade
reading a harness's credential. The rule was written to stop one program
helping itself to another's secrets, and it was catching a legitimate use with
it: the user asking about their own subscription, through software they
installed to do that. AGENTS.md now states the narrow allowance instead of an
absolute the project does not hold, and 0016 records it.
The status line stays. It is free and it speaks every turn. What it cannot do
is report the per-model weekly limits a Max plan meters separately, or answer
at all before a session has taken a turn. The first live reading found the
account-wide seven-day window at 38% left and a per-model weekly window at 77%
left — a second ceiling the footer previously could not see.
Constraints the credential is read under, all enforced in code: access token
only, never the refresh token; zeroed on drop, along with the file buffer it
was borrowed out of; unprintable by construction, since HarnessError carries no
owned strings and AccessToken's Debug is hand-written; identified as
lumbridge/<version>, because sending claude-code/2.1.0 would make our traffic
indistinguishable from the harness's in Anthropic's logs; and off entirely
under LUMBRIDGE_CLAUDE_OAUTH=0.
The request runs on a detached thread with a slow refresh and a 429 backoff, so
a ten-second round trip cannot stall the transcript follower or make quitting
wait on the network, and one surface failing does not fault the other two.
Footer polish on top: the harness name prints once per group instead of in
front of each of its four windows, each quota carries a short scope pill
(5h, 7d, Fable wk, tokens) where an invisible BORDER-weight label used to be,
quotas sort ahead of spend, and a window under ten percent turns its headline
amber — value colour on the number, provenance colour on the meter, never
mixed.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>