Expand description
error_readout — phase-end error block.
Renders the structured error list the executor collected
on PhaseOutcome.errors during the phase. Designed to
sit AFTER phase_outcome in the on_phase_end slot so
the operator sees the normative status line first
(✓/✗/~/…) and then the error detail block when the phase
failed.
Renders nothing when there’s nothing that ULTIMATELY FAILED:
empty error list, OR a phase where every error was retried and
recovered (failed_ops = errors - retries == 0 and status is not
Failed). Recovered/transient errors are surfaced as the
e:/r: counters on the phase summary line, not as an error block
— an error block on a successful phase reads as a failure.
Their full detail is still in the persisted phase_errors rows
(nmbrs replay). So binding this to every on_phase_end is safe:
successful phases (even retry-heavy ones) produce no extra output.
Per-LOD shape:
- Compact — single-line summary chip:
(errors:N), or empty when no errors. - Labeled — header line + first error line:
errors: [class] message(+M more)when more than one. - Expanded — full per-error block with class, message,
cycle, op-template, op-resolved. Mirrors the existing
Expanded LOD of
phase_outcomebut stands alone so it can be bound separately.
Subject kind: Phase (the error list lives on the phase outcome).