Problem
Epic #8211 track A. Drift alerts are point-in-time; the weekly maintainer recap (src/services/maintainer-recap.ts + maintainer-recap-calibration.ts) is where a standing drift should be impossible to miss. Today the recap's calibration section knows nothing about drift.
Requirements
⚠️ Required pattern. Mirror buildCalibrationRecapSection (src/services/maintainer-recap-calibration.ts) exactly: a pure section builder over a plain source struct, wired into the recap assembly the same way, with the same public-safe boundary (aggregate numbers + knob ids only — never corpus content).
- Pure section builder: given each live knob's current drift report (the shape the sentinel already computes), render: clean knobs as one summary line; each drifting knob with direction, live vs dominating value, corpus sizes, and how long the episode has stood (from the sentinel's fingerprint timestamp).
- Explicit empty-state line when the sentinel flag is off ('drift sentinel disabled') — absence of data must be distinguishable from absence of drift.
- Wire into the recap assembly behind the existing recap plumbing; no new scheduling.
Deliverables
Links & Resources
#8211 (epic), the sentinel sub-issue (blocked-by), src/services/maintainer-recap-calibration.ts
Boundaries
Read-and-render only. Do not modify the sentinel or the knobs endpoint.
Problem
Epic #8211 track A. Drift alerts are point-in-time; the weekly maintainer recap (src/services/maintainer-recap.ts + maintainer-recap-calibration.ts) is where a standing drift should be impossible to miss. Today the recap's calibration section knows nothing about drift.
Requirements
Deliverables
Links & Resources
#8211 (epic), the sentinel sub-issue (blocked-by), src/services/maintainer-recap-calibration.ts
Boundaries
Read-and-render only. Do not modify the sentinel or the knobs endpoint.