Reported by @rusak47 as a follow-up on #37 — thank you, this was a good catch and the second half was worse than reported.
Blocked tasks are marked in the epic tree
A blocked row now shows ⛔ in place of its status dot — the same glyph the drawer banner and subtask rows already used, so the tree was simply the omission. The tooltip names what it waits on:
Blocked by Sign the artifacts
so the tree answers why without opening the task. The epic header carries a ⛔ badge counting blocked tasks, so a collapsed epic still shows something is stuck.
Blocked no longer looks like critical
The colours were not merely ambiguous — they were the same hex:
--blocked: #d64545 --critical: #d64545 (light)
--blocked: #f07171 --critical: #f07171 (dark)
A blocked low-priority task and an unblocked critical one were painted identically. Critical is now the only filled pill on the page, so the two are separated by form rather than hue — which survives greyscale and colour blindness in a way a second red never would.
Contrast, measured
Having made an accessibility argument, it seemed only fair to check it:
| ratio | ||
|---|---|---|
white on plain --critical #d64545 |
4.38:1 | fails AA for 11px text |
white on new --critical-fill #c62f2f |
5.46:1 | passes |
dark ink on #f07171 (dark theme) |
5.97:1 | passes |
The test computes the WCAG ratio from the stylesheet rather than trusting a hand-picked hex.
Verified
268 unit tests (9 new), confirmed to fail when the old behaviour is restored; 14 live checks against a running server with seeded data; 90 end-to-end checks against the packed tarball.
Install: npx saga-mcp@1.14.0
🤖 Generated with Claude Code