Context
B-split of #14593 (horizon map v2, group B): the health swatch as its own one-PR leaf — the category-color unit the health bar (#14599) and the legend both compose.
The Fix
The per-view triplet inside the agentos FM module: (1) HealthSwatch — a --fm-state-*-keyed dot+label unit for the five categories (ok/idle/wedged/limited/off), label styling per the SSOT legend row; (2) unit specs — category→token mapping, unknown-category degrade (renders off-toned with the literal category text — never invisible), label casing; (3) NL-verifiable legend row.
Acceptance Criteria
Out of Scope
StateDot (#14593, narrowed) · FamilyRail (sibling) · the health BAR layout + animated counts (#14599).
Related
Epic #14560 (parent) · split-of #14593 · consumes merged tokens · CARD-CONTRACT (PR #14627) · #14592 (category-swing evidence).
Sweeps: current window; no equivalent; A2A clean. Structure-map: N/A.
Origin Session ID: a28f1415-37a4-4a5a-a3e4-b56dd6274ec
Retrieval Hint: "HealthSwatch primitive five category legend unit"
Context
B-split of #14593 (horizon map v2, group B): the health swatch as its own one-PR leaf — the category-color unit the health bar (#14599) and the legend both compose.
The Fix
The per-view triplet inside the agentos FM module: (1) HealthSwatch — a
--fm-state-*-keyed dot+label unit for the five categories (ok/idle/wedged/limited/off), label styling per the SSOT legend row; (2) unit specs — category→token mapping, unknown-category degrade (rendersoff-toned with the literal category text — never invisible), label casing; (3) NL-verifiable legend row.Acceptance Criteria
Out of Scope
StateDot (#14593, narrowed) · FamilyRail (sibling) · the health BAR layout + animated counts (#14599).
Related
Epic #14560 (parent) · split-of #14593 · consumes merged tokens · CARD-CONTRACT (PR #14627) · #14592 (category-swing evidence).
Sweeps: current window; no equivalent; A2A clean. Structure-map: N/A.
Origin Session ID: a28f1415-37a4-4a5a-a3e4-b56dd6274ec Retrieval Hint: "HealthSwatch primitive five category legend unit"