fix(corroborate): PARTIAL rollup for incomplete phase coverage#1503
Merged
Conversation
…rview The recipe-wide overview rollup picked the worst row state with UNTESTED ranked above SINGLE/CONFIRMED, so a single not-run row (e.g. a phase a contributor lacked the hardware to run, such as performance) dragged the whole recipe badge to UNTESTED — hiding the coverage it did have. Add a PARTIAL rollup state used only by rollupRecipe (the overview badge, landing tallies, and tree dot): a recipe with positive coverage on some phases plus any not-run rows now reads PARTIAL instead of UNTESTED. Real problems still dominate (CONTESTED/FAILING win); fully-covered recipes stay CONFIRMED/SINGLE; recipes with no positive coverage stay UNTESTED. Renderer-only and display-only: PARTIAL is derived client-side from the per-row consensus already in index.json. The grid, per-phase cells, dashboards, and per-run views keep UNTESTED/not-run unchanged, and the evidence/ingest format, meta.json, and baked JSON schema are untouched. Signed-off-by: Nathan Hensley <[email protected]>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Enterprise Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThe renderer adds a new PARTIAL consensus state. It introduces PARTIAL styling and state metadata, updates rollup logic so some UNTESTED results become PARTIAL when confirmed or single counts exist, and extends the landing overview to count and display PARTIAL in the bar order. Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
mchmarny
approved these changes
Jun 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
On the dashboard overview, a recipe corroborated on some phases but missing others (e.g. a contributor without the hardware to run the performance phase) was dragged to
UNTESTED, hiding the coverage it did have. This adds aPARTIALrollup state so incomplete-but-clean coverage reads honestly.Motivation / Context
The recipe-wide overview rollup (
rollupRecipe) picks the worst row state, andUNTESTEDranks aboveSINGLE/CONFIRMED. So a single not-run row flipped the entire recipe badge toUNTESTED— making a well-corroborated recipe look untested purely because one phase (commonly performance) was never run on the available hardware.Fixes: N/A
Related: #1404 (GP4 corroborate generator), #1400 (interim evidence dashboard epic)
Type of Change
Component(s) Affected
pkg/corroboratedashboard renderer (display-only)Implementation Notes
PARTIALstate used only byrollupRecipe(the overview badge, landing tallies, and left-tree dot) — never a per-row or per-phase state.PARTIAL. Real problems still dominate (CONTESTED/FAILINGwin); fully-covered recipes stayCONFIRMED/SINGLE; recipes with no positive coverage anywhere stayUNTESTED.--partial:#a78bfa); amber was alreadyCONTESTED.PARTIALis derived client-side from the per-rowconsensusalready present inindex.json. The grid, per-phase cells, dashboards, and per-run views keepUNTESTED/not-run unchanged. No change to the evidence/ingest format,meta.json, the baked JSON schema, or the Go consensus model — a re-publish of the same evidence just renders the overview badge correctly. Byte-determinism of the emit is preserved (static asset).Testing
No Go source files changed (HTML renderer only), so the Go lint gate is N/A.
Risk Assessment
Rollout notes: Takes effect on the next dashboard publish; no data migration. Backwards-compatible (reads existing
index.json).Checklist
make testwith-race) —go test -race ./pkg/corroborate/...make lint) — no Go files changed; renderer JS syntax checked vianode --checkgit commit -S)