fix(notifications): render the dormant maintainer-recap section builders in the digest#8513
fix(notifications): render the dormant maintainer-recap section builders in the digest#8513xfodev wants to merge 1 commit into
Conversation
…ers in the digest formatMaintainerRecap hand-rolled an inline per-repo block and never called the four dedicated section builders, so a live maintainer recap never showed the Calibration, Gate-outcomes, properly-capped Per-repo, or config-drift sections despite all being built and unit-tested. Wire them in: render the Per-repo section via buildPerRepoRecapSection (capped/sorted, with the "(+N more)" remainder the inline version lacked), and add unconditional Calibration and Gate-outcomes sections via their builders — all through the same recapSectionLines/redactRecapLine path. Thread an optional configDrift option through runMaintainerRecap to formatMaintainerRecap so a caller that has a DriftRecapSection actually renders it (the cron caller supplies none yet; noted in a comment). Section order: Summary, Totals, Per-repo, Calibration, Gate outcomes, Config drift. RecapReport shape unchanged; the top-contributors section is left untouched. Closes JSONbored#8372
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8513 +/- ##
==========================================
- Coverage 92.52% 89.60% -2.92%
==========================================
Files 791 98 -693
Lines 79348 22781 -56567
Branches 23969 3893 -20076
==========================================
- Hits 73413 20414 -52999
+ Misses 4798 2187 -2611
+ Partials 1137 180 -957
Flags with carried forward coverage won't be shown. Click here to find out more.
|
|
Caution 🛑 LoopOver review result - reject/close recommendedReview updated: 2026-07-24 17:35:11 UTC
Review summary Nits — 4 non-blocking
Why this is blocked
📋 Copy for AI agents — paste into your coding agentDecision drivers
Context & advisory signals — never blocks the verdict
Linked issue satisfactionAddressed Review context
Contributor next steps
Signal definitions
🧪 Chat with LoopOverAsk LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.
Full command reference: https://loopover.ai/docs/loopover-commands 🧪 Experimental — new and may change. 🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.
|
|
LoopOver is closing this pull request on the maintainer's behalf (conflicts with the base branch — resolve and open a fresh PR; No linked issue detected). This is an automated maintenance action — to pursue this change, please open a new pull request with the issues resolved. Closed PRs may be analyzed later to improve review accuracy, but they are not automatically reopened or re-reviewed. |
Summary
The maintainer recap digest has four dedicated "content slice" section builders — all fully built and unit-tested — but
formatMaintainerRecapnever called any of them, instead hand-rolling an inline, uncapped, unsorted per-repo block. So a maintainer running the live recap never saw the Calibration, Gate-outcomes, properly-capped Per-repo, or config-drift sections.buildPerRepoRecapSection({ windowDays, repos })— now capped/sorted with the(+N more)remainder the inline version lacked — rendered under the same## Per-repoheader viarecapSectionLines/redactRecapLine.## Calibration(new): viabuildCalibrationRecapSection({ windowDays, totals }).## Gate outcomes(new): viabuildGateOutcomesRecapSection({ windowDays, totals }).configDriftthroughrunMaintainerRecaptoformatMaintainerRecap, so a caller holding aDriftRecapSectionactually renders it. No live drift is sourced here (a code comment notes the cron caller in maintainer-recap-wire.ts supplies none yet, so its live digests stay unchanged).RecapReportshape unchanged; the top-contributors section is untouched (it needs acontributorslist not present onRecapReporttoday).Behavior change (intentional)
The Calibration and Gate-outcomes sections are unconditional (their inputs — reversal/blocked/override totals — are always present on any
RecapReport), so every delivered digest now gains those two sections. This is the intended activation of already-built, already-tested dormant code, not a new feature surface.Tests
test/unit/maintainer-recap-format.test.ts+test/unit/maintainer-recap.test.ts(all maintainer-recap suites green): assert the rendered digest now contains## Calibration+## Gate outcomeswith the builders' content, that## Per-reporenders via the capped builder (a 10-repo case shows top-8 +(+2 more)), the empty-window fallbacks, and both sides of therunMaintainerRecapconfigDriftforward (present →## Config driftappears; absent → it does not).Validation
tsc --noEmitclean (changed files); all maintainer-recap test files green.main; no base conflict.RecapReportshape change; every rendered line still goes throughredactRecapLine; no secret/wallet/hotkey/trust/reward terms.Closes #8372