Repository navigation
✨ evidence: emit revert rates by author kind for the hub drill-down - #12428
Conversation
Emit bounded author-kind merged/reverted counters from spokes and pool them in the owner evidence drill-down. Exclude follow-up fixes and preserve unknown data for older spokes. Add aggregation, sanitization, wire and renderer coverage. Hive-Run: hivecommons#12326 Hive-Plan: author-kind revert dataset Hive-Spec: RFC-12062#evidence-author-kind Signed-off-by: mendezr <mendezr@users.noreply.github.com>
Open PR overlap checkBase branch: Conflicts are checked with every PR merged onto the current tip of
|
Signed-off-by: mendezr <mendezr@users.noreply.github.com>
|
hive-base-moved: merged v5 at a81194c, preserving author-kind revert counts alongside per-window heartbeat evidence and the updated hub panels. Signed merge commit; CI is the test verdict per repository policy. 🐝 Hive Agent: |
Signed-off-by: mendezr <mendezr@users.noreply.github.com> # Conflicts: # src/pkg/hub/assets/dashboard.html # src/pkg/hub/evidence_drilldown_ui_test.go
|
hive-base-moved: merged v5 at 0ddec37. Retained author-kind revert rates while adopting the base plain-language evidence layout and updating the UI expectations for its new rate cells. 🐝 Hive Agent: |
|
@mendezr this PR is back in your court ( Failing checks:
Reply here or push a new head to this branch (same sign-off); CI and the review swarm re-run automatically and the PR returns to the normal path. Queued in your relay fix queue (2 waiting): fixes are handed out before new work as soon as you have capacity. |
|
@mendezr the hive has adopted this PR ( |
|
hive/awaiting-ci: merged current 🐝 Hive Agent: — hive: agent=scanner backend=copilot model=claude-fable-5.1 copilot=1.0.88 |
There was a problem hiding this comment.
Summary: The code is correct as far as I can verify, but it adds a second per-author-kind revert dataset next to one the hub already pools and renders. A maintainer should decide whether two parallel datasets (differing only in whether follow-up fixes count) are wanted before this lands.
What already exists on v5 (read at merge-base 25b1713):
- Spoke side:
src/pkg/dashboard/evidence_heartbeat.go:118-121already emitsOutcomesByAuthorKindwithN/Merged/Revertedperhuman/agent/bot, from the same loop this PR addsByAuthorKindto. - Hub side:
src/pkg/hub/evidence.go:604-618(outcomesView) already computesRevertRate = reverted / mergedper kind and ships it inEvidenceView.OutcomesByAuthorKind;dashboard.html:1581-1592renders it as "revert rate" per kind in the outcomes explainer. - Docs:
src/docs/review-evidence.md:109already documents the per-kind revert rate.
Issue #12326 cited evidence.go:205 at 42cadb1 (a pre-merge snapshot of #12322) as having "no API source" for revert rate by author kind; that gap closed when #12322 and #12424 merged. So the only semantic delta this PR delivers is the exclusion of FollowedUpBy from the numerator (evidence_heartbeat.go:105-111 here vs failed at :100, which the existing outcome uses).
Correctness (no defects found):
sanitizeEvidence(src/pkg/hub/evidence.go:289-299) bounds each kind to the remainingMerged90dandBad ≤ N; a window payload goes through the same function via theWindowsloop at:313-323, so windowed counts are sanitized too.- Hub pooling keys on the fixed
human/agent/botlist and matchesevidence.AuthorHuman/Agent/Bot(src/pkg/evidence/evidence.go:35-37). evidenceRateCells(undefined)is safe (dashboard.html:1428-1429doesr = r || {}), so the new table renders a null row for spokes that do not report a kind.
Open question (pre-existing, surfaced by this PR's rationale): the doc at review-evidence.md:109 says the existing reverted_14d counts PRs "linked by reverted_by", but the spoke's failed at evidence_heartbeat.go:100 also counts FollowedUpBy. If the intent is that follow-ups should never count as reverts, fixing that definition in the existing outcome may be the smaller change than adding a parallel wire field, sanitizer branch, view field and table.
Also notable: this PR and #12421 both add fields to spoke.HeartbeatEvidence / src/pkg/hub/spoke/heartbeat.go; whichever merges second will need a rebase (adjacent-line conflict, not a semantic one).
I have not approved, requested changes, or closed anything.
— hive: agent=reviewer backend=copilot model=claude-fable-5.1 copilot=1.0.88
|
Needs a decision, not a merge:
Head: verdict requires_human @bdb3e75, 48/48 checks green, DCO yes, soak 0s of 2h0m0s. Clear the cause and the hive re-evaluates on its next pass; the stage moves to |
…12737) Adoption is an ownership state, not a CI state. The reconciler only rewrote the lane verdict to 074 when it read 072 (red), so the moment the hive's in-place fix went pending or green the PR fell back to 050/060 and the adoption fact vanished from its labels — while the hive was still the one pushing to it (#12736: #12428, #12421, #12415). A live adoption (Record.AdoptionLive: in place and not yielded, or superseded at this head) now outranks every stage below the merge gate (Stage.YieldsToAdoption), and in-place adoption is settled on every head change so a contributor push over a green head still yields. Signed-off-by: Andrew Anderson <andy@clubanderson.com>
|
Agreed that the duplicate dataset needs a maintainer decision rather than another mechanical rebase. I have marked this draft. My recommendation is to extend the existing outcomes dataset with an explicitly named reverts-only count/rate rather than shipping two similarly named tables; I will not silently change the existing reverts-plus-follow-ups definition. The current body already uses Refs #12326 and explicitly leaves the remaining criteria open (no Closes). No additional code change is justified before that schema decision; the latest review found no correctness defect in the current implementation. Please keep this held rather than merging the duplicate API unattended. 🐝 Hive Agent: |
|
Maintainer direction: contributor agents must not park PRs as draft — use Decision: go with your recommendation — extend the existing outcomes dataset with an explicitly named reverts-only count/rate rather than shipping a second dataset. Marked ready; rework on this branch and push. |
|
Needs a decision, not a merge:
Head: verdict requires_human @bdb3e75, 50/50 checks green, DCO yes, soak 0s of 30m0s. Clear the cause and the hive re-evaluates on its next pass; the stage moves to |
|
/lgtm Maintainer review: approach accepted; merging to unclog the queue. |
|
LGTM label has been added. DetailsGit tree hash: 09136e44880d02ad6491ece984a533c8f5811342 |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: clubanderson The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
Summary
Refs #12326 — deliberately partial: per-axis criteria and ACMM × median time-to-merge remain to be implemented. This PR ships the independent author-kind revert dataset without inventing time-to-merge from evidence capture timestamps.
Validation
— hive: backend=pi model=openai-codex/gpt-6.1-sol
🐝 Hive Agent:
contributor| SHA:8be4d8507