Story: Badge colour semantics: reserve gray for inactive states
Table of Contents
This page documents a story in Sprint 19. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
Goal
Establish and enforce the badge colour language: gray exclusively means
inactive, off, "no" or otherwise negative/dormant states. The Service
account-type badge (delivered gray by Display account type as badge)
prompted the rule; an audit found two further violations
(account_unlocked, state_done) and a systemic one — the missing-badge-
definition fallback across all delegates is also gray, making "definition
missing" indistinguishable from "inactive". Recolour the violations, move
the fallback to orange (previously unused in the palette), surface badges
in the account detail dialog, and start the UX language documentation that
records these rules alongside icons and entity window anatomy.
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 19 |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing — story closed. |
| Last touched | 2026-06-04 |
Acceptance
- No badge definition in
dq_badge_system_populate.sqluses gray for a positive or neutral-active state (account_type_service→ teal,account_unlocked→ green,state_done→ green). - The unresolved-badge-definition fallback is orange
(
color_constants::badge_fallback,#f97316) in every delegate and MDI window badge resolver; gray fallbacks are gone. - Semantic grays are untouched (
inactive,login_never,fsm_draft,treatment_raw, the "No"disabled badges, "Pending""Unsent" result states). - Account detail dialog shows Online and Locked as DB-driven badges
(
BadgeLabelUtils), consistent with the list view. - UX language doc started per the documentation task.
- Full build green.
Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Fix gray badge misuses; orange fallback; detail dialog badges | DONE | 2026-06-04 | 2026-06-04 | Recolour service/unlocked/done; orange fallback in all badge resolvers; BadgeLabelUtils; account detail dialog badges. PR #1044. |
| Start the UX language documentation: colours, icons, entity window anatomy | DONE | 2026-06-04 | 2026-06-04 | doc/knowledge/ui/ux_language.org: colour semantics, badge catalogue, icon link, entity window anatomy, links incl. Developer Links. |
Decisions
- Gray (
#6b7280) is reserved for inactive/off/no/negative states across the entire UX. Positive ("Unlocked"), completed ("Done") and neutral-classification ("Service") badges must not be gray. - The missing-definition fallback must be visually distinct from any
semantic state: orange
#f97316, previously unused in the badge palette. A missing definition is a gap to fix, not an inactive record. account_type_service→ teal#14b8a6(also previously unused), keeping the four account types visually distinct: user blue, service teal, algorithm amber, llm violet.- The account detail dialog's boolean Online indicator resolves via a new
account_onlinecode domain that reuses existing badge definitions (Yes →login_onlinegreen, No →inactivegray — correct semantics).
Out of scope
- Recolouring semantic grays (they comply with the rule).
- Wt badge rendering (CSS class hints unchanged).
- The account type badge wiring itself — delivered by Display account type as badge in Qt accounts list (PR #1038).