You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
record:path marks an unreached won terminus with colour alone — after #5916 it still announces as a plain upcoming stage #5957
Found while implementing #5916, in the same file and the same WCAG class, but needing a copy decision rather than a mechanical fix — filing rather than folding in.
What is left
#5916 gave every stage an accessible name carrying travelled / current / upcoming / lost-terminal. It deliberately did not give the won terminus a state of its own, so a won stage announces through the ordinary three.
The renderer still distinguishes it visually, and only visually:
The file's own comment states the intent: "an unreached won terminus stays a faint emerald so the goal is legible without being a surface you could press." That legibility is carried by hue alone. Two stages ahead of the record — say 已接受 (the successful terminus) and 已过期 — paint differently and announce identically ({{stage}}, upcoming). Same SC 1.4.1 Use of Color class as #5916, on the one distinction #5916 left behind.
classify() reaches won both from an explicit terminal: 'won' in the stage config and from the WON_TOKENS heuristic (won|success|成交|赢|完成), so this is reachable without authors opting in.
#5916's fence was travelled / upcoming / lost, and the fix here is not mechanical: it needs a decision about what a goal stage should say, which is new user-facing copy in ten packs, not a spelling correction to an existing string. Nothing in the tree pins the right wording, so it fails the bounded-in-place bar and would have been unreviewable scope creep on that PR.
Shape of a change
Probably one more key pair alongside detail.pathStage* (e.g. a won-terminus variant of the upcoming and completed states), following the composition #5916 established. Worth deciding at the same time whether a reachedwon terminus should announce differently from an ordinary completed stage — today it does not.
Related: #5916 (established the mechanism and the key namespace), #5956 (the other leftover in this file).
Rationale: record:path renderer (published components — ui lane per the three-stream split). Colour-only state for an unreached won terminus is the same a11y class #5916 just closed; this is its named residue, filed as a follow-on. Serial note: same renderer file as #5956 — the taking seat answers fold-or-serial under the five gates (likely fold: same file, same renderer, both already graded).
Claim: PM loop round 36 — folded into #5956 (chain head)
Session: session_01CSoz9uGhaaSgiq3hshtN7L
Branch: claude/issue-5956-record-path-a11y-residue — shared with the chain head; this card has no branch of its own, by design
Worktree: objectui-issue-5956
Domain: domain:ui
File surface: as declared on #5956 — packages/plugin-detail/src/renderers/record-path.tsx, packages/i18n/src/locales/*.ts, the renderer's __tests__, + a changeset
Container & model: M, mode:subagent, model: opus
Clause-②: no
Serial constraints cleared: the full check is recorded on the chain head, #5956 — see that comment.
Why folded rather than serialized: this card and #5956 write the same file and add keys to the same ten locale packs, so concurrent dispatch would race the identical region, and serial dispatch would pay the search-and-merge cost twice on a file with zero slack. The five gates are answered in full on #5956; ⑤ the exclusion list names #5916 as merged and NOT a member.
This card's own independently checkable criterion — the fold does not let it be silently under-delivered: an unreached won terminus must reach the accessible name as something other than a plain {{stage}}, upcoming, so that two upcoming stages which paint differently no longer announce identically. It is reachable without authors opting in — classify() reaches won both from an explicit terminal: 'won' and from the WON_TOKENS heuristic (won|success|成交|赢|完成).
⚠️ The copy decision this needs (what a goal stage should say, and whether a reachedwon terminus should differ from an ordinary completed stage) is an accessibility judgement inside the fence — make it and justify it; ⛔ do not escalate a wording choice, and ⛔ do not stop at #5956's half and call the pair done.
Activity
os-zhuang commentedon Aug 24, 2026
Triage (Routine seat, hourly round): →
pm:queue+domain:ui, type Bug.Rationale:
record:pathrenderer (published components — ui lane per the three-stream split). Colour-only state for an unreachedwonterminus is the same a11y class #5916 just closed; this is its named residue, filed as a follow-on. Serial note: same renderer file as #5956 — the taking seat answers fold-or-serial under the five gates (likely fold: same file, same renderer, both already graded).Generated by Claude Code
yinlianghui commentedon Aug 24, 2026
Claim: PM loop round 36 — folded into #5956 (chain head)
Session:
session_01CSoz9uGhaaSgiq3hshtN7LBranch:
claude/issue-5956-record-path-a11y-residue— shared with the chain head; this card has no branch of its own, by designWorktree:
objectui-issue-5956Domain:
domain:uiFile surface: as declared on #5956 —
packages/plugin-detail/src/renderers/record-path.tsx,packages/i18n/src/locales/*.ts, the renderer's__tests__, + a changesetContainer & model:
M,mode:subagent,model: opusClause-②: no
Serial constraints cleared: the full check is recorded on the chain head, #5956 — see that comment.
Why folded rather than serialized: this card and #5956 write the same file and add keys to the same ten locale packs, so concurrent dispatch would race the identical region, and serial dispatch would pay the search-and-merge cost twice on a file with zero slack. The five gates are answered in full on #5956; ⑤ the exclusion list names #5916 as merged and NOT a member.
This card's own independently checkable criterion — the fold does not let it be silently under-delivered: an unreached
wonterminus must reach the accessible name as something other than a plain{{stage}}, upcoming, so that two upcoming stages which paint differently no longer announce identically. It is reachable without authors opting in —classify()reacheswonboth from an explicitterminal: 'won'and from theWON_TOKENSheuristic (won|success|成交|赢|完成).wonterminus should differ from an ordinary completed stage) is an accessibility judgement inside the fence — make it and justify it; ⛔ do not escalate a wording choice, and ⛔ do not stop at #5956's half and call the pair done.The PR carries
Fixes #5957on its own line.Generated by Claude Code