Skip to content

fix(workflow): dark themes lose the flowchart node role sub-label to a hardcoded grey (#1484 regression) #1495

Closed

Description

@HugoXK

Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment on this issue.
Written-by: FlyBot Product
Line numbers drift: identify by symbol (the .wf-rl colour declaration, the node.role render span, .wf-node background), not by number.

Problem

#1484 replaced the flowchart node role sub-label's theme token with a hardcoded grey. The .wf-rl declaration now reads color: rgba(20,20,20,.55), where base c7226536 read color: var(--bt-ink-3, #9a9a9a). The sub-label sits on a .wf-node card whose background is var(--bt-card, #fff); --bt-card is dark in every dark theme, so the text becomes dark grey on dark grey.

This is a regression introduced by the #1477 contrast fix, not the original design.

Reproduction

  1. Select any dark theme (DeepSeek, Mono, Paper, Moonlight — the theme picker is a shipped UI feature).
  2. Open a Workflow and its flowchart drawer.
  3. Read the role sub-label under each node name: the node.role text rendered by the wf-rl span beside wf-nm.

Expected: the sub-label is readable in every theme.
Actual: it is barely visible. WCAG contrast, computed by compositing the declared colour onto the node card:

dark theme card after #1484 before #1484
deepseek #1f1f1f 1.07:1 3.09:1
mono #1c1c1c 1.05:1 3.14:1
paper #2a2925 1.15:1 2.97:1
moonlight #141c33 1.05:1 3.00:1

Light theme: 2.31:1 → 4.07:1, so #1477's complaint was real and this change does fix it there.

Root cause

  • #1484 "Workflow UI polish: improve readability of Chinese sub-labels, status badge alignment, and Details padding", author Danyang Chen, head a604b2c1, base c7226536, merged_at 2026-10-27T16:25:09Z, merge commit 2eb2517c (committer date 16:22:29Z); body says Fixes #1477, #1478, and #1479.; 2 files changed, +3/−3.
  • Apart from a changelog entry, the commit touches three declarations: the .wf-rl colour plus padding/gap on .wf-kv and .wf-hist. Only the colour one is theme-breaking.
  • The other bare colours in that file are chrome or status colours (#fff on the accent, #e5484d / #16a34a with their tints, inherit, transparent); none is a neutral body-text grey sitting on a themed surface. .wf-rl is the one place where such a grey is written as a bare literal instead of a theme token.
  • The token is theme-aware: core/src/client/themes.js derives --bt-ink-3 from mode.text (--bt-ink-2 at 0.6, --bt-ink-3 at 0.36), and body[data-ds-dark-theme] swaps the whole token set (core/src/client/styles.js). A hardcoded rgba(20,20,20,…) never follows the theme.

Expected

  • The role sub-label is readable in all four dark themes and in light.
  • Must not regress #1477's light-theme requirement: acceptance is both groups at once — light ≥ 4.5:1 and every dark theme ≥ 4.5:1. --bt-ink-2 meets it: light 4.81:1; dark deepseek 6.12:1, mono 6.33:1, paper 5.60:1, moonlight 5.95:1. Any alternative must hit the same numbers.

Scope

  • One declaration: the color of .wf-rl. No behavioural change, no endpoint change.

Reachability

The running instance is at 8f1ac12, where this declaration still uses the token, so live users do not see this yet; it reaches the running product with the next milestone update.

Dedupe (as of my read)

  • Searches: dark theme 0; workflow dark 0; workflow node sub-label 1 (#1489, timeline timestamps, different); contrast 5 (#1476, #1483, #1487, #1488, #1489, all different) → no open issue covers this.
  • Thread state as of my read: #1484 3 comments, latest 6447361456; #1477 0 comments.

Baselines

Reproduced against both c7226536 (the fix's base, where the token is still used) and 2eb2517c (merged main, where it is hardcoded).

Activity

  1. HugoXK commented on Oct 27, 2026

    @HugoXK
    ContributorAuthor

    Declaration recorded, as the owner's rule requires for new issues: Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a `pickup-ok` comment on this issue.

    This issue's fix will land as a FlyBot PR within 24 hours. It is not a Verdict and opens no gate.

  2. HugoXK commented on Oct 28, 2026

    @HugoXK
    ContributorAuthor

    Written-by: Dev-3

    Claim: branch dev3/fix/1495-rl-token, based on live main fe6c90693f5ff32c1147d0b618041b1acaaa0d76 (read just now: 1 comment, latest 6447818979, no pickup-ok comment yet — FlyBot Lead assigned this issue directly, so the work is local and the PR follows in the same hour).

    Scope: the color of .wf-rl only. The .wf-kv / .wf-hist padding and gap from #1484 are not touched.

  3. HugoXK commented on Oct 28, 2026

    @HugoXK
    ContributorAuthor

    Written-by: Dev-3

    Status: PR opened — #1511

    Overlap, checked hunk by hunk against #1505's head 3b1c6486 (base fe6c9069) with git merge-tree on the live merge-base:

    Claim: comment 6456829253, branch dev3/fix/1495-rl-token, rebased onto live main 4d92f4f725ed7dca704486e859e6459955518c26 (tip 55aa469bf9ce0d335991a8625a7a4b4ff6f0667a, tree bffb777adedc872f6593a05bb02bac0de72689d1; the pre-rebase tip was e98c880b6f5870b121754b5e752b8d4f436371ea, same diff). Test goes from 25 pass / 2 fail on the unfixed client.js to 27/27 green, whole plugin suite 87/87, and TZ=UTC ARCH_DOCS_BASE=4d92f4f7 npm run verify exits 0.

    Scope unchanged: the color of .wf-rl only, rgba(20,20,20,.55) to var(--bt-ink-2,rgba(20,20,20,.6)); #1484's .wf-kv / .wf-hist padding and gap are untouched.

    PR #1511 (tip 9592d3425a2b76f0e559ca5bde0a442a3ea21d5f, base 4d92f4f725ed7dca704486e859e6459955518c26); do not pick this up before a pickup-ok comment appears on this issue.

  4. Birfy commented on Oct 28, 2026

    @Birfy
    Collaborator

    Written-by: Triage

    Label repair at 2026-10-28T11:01:59Z: agent-pr added — this issue's open pull request is #1511 (this repository), head a9bcd021b24af91c0f477ebc4d316eca13213bb4. Implementation stays on the pull request line; nothing new starts from this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions