Per-path snapshot of analysis-pipeline findings, retained alongside the
pre-aggregated analysis_counts so that workspace- or group-scoped runs
can recompute counts without re-running the full pipeline.
Which signal places a file at its triage rank: its structural quality (low
maintainability index) or its untested complexity (CRAP risk). Surfaced per
row so the human file-scores table can label why a file sits where it does
when the two axes disagree (e.g. a low-CRAP file outranking a higher-CRAP
one because its MI is the worse signal).
Classify which concern drove score to its rank. A file with no CRAP risk
is always Structural; otherwise the larger concern wins, with ties (and
the boundary where the two are equal) resolving to Risk because untested
complexity is the more urgent signal to act on.
Resolve a relative path against the fallow project root. Returns path
unchanged when it is absolute or project_root is None. Matches the
convention every other path-shaped CLI input uses, so a monorepo CI run
invoked from the workspace root with --root sub-project finds
sub-project/relative/path.json instead of cwd/relative/path.json.