feat(risk): render risk posture across all surfaces (Arc B parity)#40
Merged
Conversation
… parse via build_risk_lookup
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.
Arc B — risk render parity
Surfaces the already-computed risk posture across the render surfaces that were missing it, so all surfaces tell the same risk story.
What changed
build_risk_lookup(output_dir)— new canonical per-repo risk reader (report_enrichment.py);_extract_risk_posturenow derives from it (one fewer truth-JSON parse).### Risk Postureaggregate section + per-repo**Risk Tier:**line (was the only surface with zero risk).Riskcolumn in the All Repos table; replaced a duplicate inline truth parse withbuild_risk_lookup.Verification
make workbook-gateautomated checks pass (manual desktop-Excel signoff pending as usual).Reviewer disclosures
reporter.pydiff is large but mostlyruff formatnormalization. The file had drifted from the project formatter; the PostToolUseruff formathook normalized it (quote style + line wrapping). The actual risk logic is ~30 lines; the rest is semantics-preserving formatting.risk_lookupkeys by portfolio-truthdisplay_name(local dir name) while consumers look up by auditmetadata.name(GitHub repo name). For repos where these differ (~24% in a sample; includes spaced names like "Devil's Advocate", "Signal & Noise"), risk renders blank. This is the same convention the already-shipped All Repos risk column uses, so it is pre-existing and shared — this PR makes the other four surfaces consistent with All Repos, not worse. The real fix is cross-source identity reconciliation (display_name ↔ GitHub name), a separate arc that also touches the shipped path.