feat(scoring): surface the issue-discovery validity floor in the score breakdown#1874
Conversation
…e breakdown explainScoreBreakdown explained every other scoring multiplier (density, contribution bonus, label, issue, credibility, review penalty, open-PR pressure, open-issue spam, merged-PR history floor in JSONbored#1801) but silently omitted the issueDiscoveryHistoryMultiplier, even though it can zero an entire issue-discovery preview when a contributor's observed validSolvedIssues or issueCredibility falls below the upstream floors (MIN_VALID_SOLVED_ISSUES, MIN_ISSUE_CREDIBILITY). Add an issueDiscoveryHistoryBreakdown component mirroring the sibling mergedHistoryBreakdown (JSONbored#1801): neutral when no solved-issue evidence is observed (the floor is not enforced for the preview, matching preview.ts:410 issueDiscoveryHistoryKnown), full when both observed dimensions meet the upstream floors, and blocked -- with a 100-leverage "land more solved-by-PR-validated issues and grow issue credibility" lever -- when either is below the floor. Purely additive explanation; no scoring behavior change.
|
Warning 🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨 ⏸️ Gittensory review result - manual review recommendedReview updated: 2026-06-30 19:09:59 UTC
⏸️ Suggested Action - Manual Review
Review summary Nits — 6 non-blocking
Review context
Contributor next steps
Signal definitions
🟩 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 Gittensory, a quiet PR intelligence layer for OSS maintainers.
|
JSONbored
left a comment
There was a problem hiding this comment.
Please fix this:
The main visible risk is messaging precision: the new neutral branch collapses either missing evidence dimension into “no solved-issue evidence,” which can mislead when only one dimension is absent.
…wn (#1877) explainScoreBreakdown explained every other scoring multiplier (density, contribution bonus, label, issue, credibility, review penalty, open-PR pressure, open-issue spam, merged-PR history floor in #1801, and the issue-discovery validity floor now in #1874) but silently omitted the timeDecayMultiplier, even though it multiplies into the final score (preview.ts:432) and is the only remaining multiplier on scoreEstimate without a breakdown component. Add a timeDecayBreakdown: neutral when the multiplier is >= 0.99 (the PR is fresh or upstream time-decay -- env SCORING_TIME_DECAY_ENABLED, default OFF -- is disabled for the preview), and reduced with an aged-PR lever when the multiplier has decayed. Purely additive explanation; no scoring behavior change.
Summary
explainScoreBreakdown(src/services/score-breakdown.ts) explained every other scoring multiplier -- density, contribution bonus, label, issue, credibility, review penalty, open-PR pressure, open-issue spam, and now the merged-PR history floor (#1801) -- but silently omitted theissueDiscoveryHistoryMultiplier, even though it can zero an entire issue-discovery preview when a contributor's observedvalidSolvedIssuesorissueCredibilityfalls below the upstream floors (MIN_VALID_SOLVED_ISSUES,MIN_ISSUE_CREDIBILITY).What this adds
An
issueDiscoveryHistoryBreakdowncomponent mirroring the siblingmergedHistoryBreakdown(#1801):preview.ts:410issueDiscoveryHistoryKnown);A contributor in the issue-discovery lane whose evidence is below the floors now sees an actionable lever instead of an opaque zero. Purely additive explanation; no scoring behavior change. The multiplier is consulted whenever
linkedIssueMode !== "none"(independent of the per-repoissueDiscoveryPolicy), so the breakdown is real value on every issue-discovery preview.Scope
type(scope): short summaryConventional Commit format.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Validation
git diff --checknpm run actionlintnpm run typechecknpm run test:coverage--test/unit/score-breakdown.test.ts12/12 pass;src/services/score-breakdown.tsis 100% statements / 100% functions / 100% lines (the new component's three branches -- unobserved, meets-floors, below-floors -- are each covered).Targeted run:
Safety
sanitizePublicComment).UI Evidence
Not applicable -- backend score-breakdown projection with no visible UI, frontend, docs, or extension surface.