Partial statuses are compound in the canonical layer; the FE collapses them to "Partially matched"
The canonical status (getCanonicalStatus output) encodes the terminal remainder disposition in the
status name for partially-matched orders, rather than a single partially_matched + a separate
breakdown object. The FE then collapses every partially_matched* to one "Partially matched" headline
plus the lossless breakdown detail.
Canonical match-axis statuses
partially_matched— some matched; remainder still working or awaited (non-terminal; deficit > 0 counts as awaited)partially_matched_lapsed— some matched; remainder fully lapsedpartially_matched_cancelled— some matched; remainder fully user-cancelledpartially_matched_cancelled_lapsed— some matched; remainder split cancel + lapse
Mirror set for fully-unmatched terminals: fully_lapsed, fully_cancelled, fully_cancelled_lapsed.
Compound-split suffix order is normalized to cancelled_lapsed (cancelled first) across both the
partial and fully families, for one consistent convention (supersedes the earlier fully_lapsed_cancelled
ordering).
Frontend collapse
All partially_matched* values render as a single "Partially matched" headline + the respective
detail from the lossless RemainderBreakdown (e.g. "25 lapsed · 15 cancelled"). The user never sees the
compound machine name.
Rationale
The canonical status stays machine-precise — reports, admin filters, reconciliation, and debugging
can distinguish disposition without parsing the breakdown — while the user sees one friendly label. The
RemainderBreakdown still carries the exact amounts (ADR-0003), so nothing is lost. Supersedes the
single-partially_matched display framing noted in ADR-0004.