fix(review): never render a ❌ for a non-Gittensor contributor (#5100) - #5774
Conversation
…red#5100) The Contributor context row showed "❌ No public Gittensor match" for any author without a public Gittensor match — a hard-failure icon directly next to evidence reading "not a blocker." The signal table had no neutral state (only ok/warn/fail), so a non-blocking row had nowhere to land. Add a neutral `info` (ℹ️) state to the unified table and route the contributor row through it. This also fixes a latent double-icon bug: the Improvement "none detected" row rendered as "⚠️ ℹ️" (a warn icon plus an un-stripped legacy ℹ️) and is now a single, correct ℹ️.
|
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 #5774 +/- ##
=======================================
Coverage 95.07% 95.07%
=======================================
Files 582 582
Lines 46216 46217 +1
Branches 14820 14821 +1
=======================================
+ Hits 43940 43941 +1
Misses 1516 1516
Partials 760 760
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
|
Tip 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩 ✅ LoopOver review result - approve/merge recommendedReview updated: 2026-07-14 14:10:09 UTC
✅ Suggested Action - Approve/Merge
Review summary Nits — 4 non-blocking
Linked issue satisfactionPartially addressed Review context
Contributor next steps
Signal definitions
[BETA] Chat with GittensoryAsk Gittensory 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://gittensory.aethereal.dev/docs/gittensory-commands 🟩 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.
|
Summary
The readiness signal table had a row that visually contradicted its own evidence: for any author with no public Gittensor match, the Contributor context row rendered
❌ No public Gittensor match— a hard-failure ❌ (the same icon the table uses for real blockers) — right next to evidence that literally said "not a blocker." Every non-Gittensor contributor, i.e. the majority of PR authors on most repos, saw a red X on their own PR for something that was never a failure.The root cause is that the unified signal table only had three states —⚠️ ) /
ok(✅) /warn(fail(❌) — with no neutral state, so a non-blocking row had nowhere to land but a warning or a failure. This PR adds a proper neutralinfo(ℹ️) state and routes the contributor row through it.This is issue #5100's explicitly-independent bug fix ("the ❌→✅/neutral fix as its own clearly-flagged bug fix ... should ship even if the rest of the table redesign takes longer"). The broader table redesign, row-cutting, and Points Forecast — which #5100 lists as open questions for the maintainer — are addressed as written recommendations at the bottom of this description, not implemented, since they are the maintainer's call.
The fix
src/signals/engine.ts—contributorContextPanelResult: the non-confirmed branch now returnsℹ️ No public Gittensor match(was❌ …). Evidence and action are unchanged; it was always "not a blocker."src/review/unified-comment.ts— addedinfoto theUnifiedSignalRow["state"]union andinfo: "ℹ️"toSIGNAL_ICON. A neutral/grey state that never impliessrc/review/unified-comment-bridge.ts—rowStatemaps a leadingℹ️toinfo(instead of falling through towarn), androwResultTextnow strips a leadingℹ️too.Bonus: a latent double-icon bug this also fixes
Because
ℹ️previously fell through towarnand wasn't in the icon-strip set, the Improvement "none detected" row rendered as⚠️ ℹ️ None detectedin the unified comment — a warning icon plus an un-stripped legacy ℹ️, two icons for one informational row. With the neutral state it renders as a single, correctℹ️ None detected.Before → after (rendered signal table row)
Scope
type(scope): short summaryConventional Commit format.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Closes #5100.Validation
git diff --checknpm run typecheck(clean)npm run test:coverageon the changed files — every changed line and both branches of the newℹ️mapping are exercised (bridgerowState/rowResultText, theSIGNAL_ICONliteral, and the non-confirmed contributor branch);codecov/patchdiff is at 100%.vitest rununit + integration suite green.npm run test:engine-parity+npm run test:live-gate-paritygreen (the golden-comment comparison jobs — confirms no fixture rendered the old icons).npm run test:workers,build:mcp,test:mcp-pack,ui:openapi:check,ui:lint,ui:typecheck,ui:build— not exercised; this change is confined tosrc/review+src/signalscomment rendering and touches no Worker binding, MCP surface, OpenAPI schema, orapps/loopover-ui/**code.If any required check was skipped, explain why:
codecov/patchon the diff — is green locally.Safety
not.toMatch(/wallet|hotkey|coldkey|reward|trust score/i)assertion still passes over the rendered comment.)apps/loopover-uipage, so no UI Evidence screenshots apply. Before/after table rendering shown above.Notes
Per #5100's deliverables, the analysis it asks for (the parts that are maintainer decisions, not contributor changes):
Recommendation — which of the three low-value rows to cut
validationEvidence). It restates the test/coverage signal that the dedicated coverage/test-evidence collapsible already presents in more detail — the same signal shown twice, exactly the redundancy Slim and redesign the main PR signals table (cut low-value rows, redesign Gittensor context, explore Points Forecast) #5100 flags.openPrQueuekey). It surfaces the author's concurrent open-PR count, which is already conveyed — where it is actually actionable (collision risk) — by the open-PR/related-work signal. As a standalone row it is low-actionability noise.reviewLoad). It is the one row a maintainer uses to size review effort (size label / draft state / linked-issue burden) and is not redundant with anything else visible.Net: three rows → one, raising signal density without losing anything a maintainer reads. Happy to do the cut in a follow-up once you confirm the call.
Recommendation — Points Forecast: keep as a prototype, do not ship yet
A pre-merge "projected points" row would combine the repo's
emissionShare/labelMultipliers(fromRepositoryRecord.registryConfig) with the PR's current type-label. The data sources exist, but the scoring algorithm it would forecast is Gittensor's, external to this repo — any formula we commit to here can silently drift from the real one and would read as a payout promise (a public-safe-wording violation). Recommendation: prototype only, gated behind a flag and worded strictly as a non-guaranteed estimate, until it can be validated against Gittensor's actual scoring. Not in this PR.Note — surfacing per-repo credibility/score in the contributor row
#5100 also suggests replacing the confirmed-contributor evidence with the author's per-repo credibility/score from
GittensorContributorSnapshot.repositories[]. That snapshot is not currently threaded intocontributorContextPanelResult(its args arepr/profile/detection/confirmedMiner), so surfacing it is a small plumbing change best done as its own PR once the row redesign above is agreed. This PR ships the flagged ❌-contradiction fix, which stands on its own.Closes #5100