The score breakdown (src/services/score-breakdown.ts) explains every other scoring multiplier -- density, contribution bonus, label, issue, credibility, review penalty, open-PR pressure, open-issue spam -- but silently omits the mergedHistoryMultiplier, even though it can zero the entire preview. The multiplier is already computed (src/scoring/preview.ts: a merged-PR count below MIN_VALID_MERGED_PRS zeroes it), feeds the final score, and has its own gate blocker (merged_pr_history_floor), yet it has no entry in the explainScoreBreakdown components list. Surfacing it as a breakdown component (mirroring the existing openIssueBreakdown that PR #1453 added for the sibling open-issue gate) gives a contributor an actionable lever -- land more merged PRs to clear the contributor-history floor -- instead of an opaque zero when their merged-PR history is below the upstream floor. Purely additive explanation; no scoring behavior change.
The score breakdown (src/services/score-breakdown.ts) explains every other scoring multiplier -- density, contribution bonus, label, issue, credibility, review penalty, open-PR pressure, open-issue spam -- but silently omits the mergedHistoryMultiplier, even though it can zero the entire preview. The multiplier is already computed (src/scoring/preview.ts: a merged-PR count below MIN_VALID_MERGED_PRS zeroes it), feeds the final score, and has its own gate blocker (merged_pr_history_floor), yet it has no entry in the explainScoreBreakdown components list. Surfacing it as a breakdown component (mirroring the existing openIssueBreakdown that PR #1453 added for the sibling open-issue gate) gives a contributor an actionable lever -- land more merged PRs to clear the contributor-history floor -- instead of an opaque zero when their merged-PR history is below the upstream floor. Purely additive explanation; no scoring behavior change.