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.sql uses 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_online code domain that reuses existing badge definitions (Yes → login_online green, No → inactive gray — correct semantics).

Out of scope

Emacs 29.1 (Org mode 9.6.6)