Skip to content

Quality metrics resolve scb-check at run time with no version pin; verbosity is not reproducible across versions #19

Description

@Mike-7777777

src/slop_code/metrics/checkpoint/driver.py:65-105 computes the composite quality metrics by shelling out to:

uvx scb-check check --report --include-all <snapshot>

There is no version constraint on that command. scb-check is not declared in pyproject.toml and does not appear anywhere in uv.lock, so the version that produces verbosity and erosion is whatever uvx resolves at run time.

Why it matters

verbosity is not stable across published scb-check releases. Same fixed input tree (the scb_check 0.1.0 package source: 21 Python files, 2178 LOC), all published releases:

scb-check verbosity flagged LOC erosion
0.1.0 0.0533 116 0.0451
0.1.1 0.0533 116 0.0451
0.1.2 0.0533 116 0.0451
0.1.3 0.1290 281 0.0451
0.2.0 0.0533 116 0.0451

0.1.3 reports 2.42x the verbosity of every other release on identical input. erosion is identical everywhere, so this is specific to the verbosity line union.

Cause: 0.1.3 added analysis/trivial_wrappers.py and analysis/syntax.py and counted their hits toward the flagged-line union; 0.2.0 reorganized them under rules/ and the flagged count returns to the 0.1.0 level on the same input.

0.1.3 was the latest release from 2026-04-28 until 0.2.0 on 2026-05-19. Any evaluation run in that window recorded verbosity values that cannot be compared with runs before or after it, and nothing in the run artifacts records which version was used.

Repro

python3 -m pip download scb-check==0.1.0 --no-deps --no-binary :all: -d /tmp/repro
tar xzf /tmp/repro/scb_check-0.1.0.tar.gz -C /tmp/repro
target=/tmp/repro/scb_check-0.1.0/src/scb_check

for v in 0.1.0 0.1.2 0.1.3 0.2.0; do
  printf '%-7s ' "$v"
  uvx "scb-check==$v" check --report --include-all "$target" \
    | python3 -c 'import sys,json;d=json.load(sys.stdin);print("verbosity=%.4f flagged=%d erosion=%.4f"%(d["verbosity"],d["verbosity_flagged_loc"],d["erosion"]))'
done

Output:

0.1.0   verbosity=0.0533 flagged=116 erosion=0.0451
0.1.2   verbosity=0.0533 flagged=116 erosion=0.0451
0.1.3   verbosity=0.1290 flagged=281 erosion=0.0451
0.2.0   verbosity=0.0533 flagged=116 erosion=0.0451

Any fixed Python tree works as the target; the specific tree above just makes the numbers above reproducible.

Related observation

The published numbers already show a verbosity split. Comparing the arXiv v2 tables with the current leaderboard, isolated solve rate and erosion agree for the shared models (GPT 5.5 erosion 0.494 vs 0.49 in Table 1), but leaderboard verbosity is 0.05 to 0.14 lower for every one of them: GPT 5.5 0.269 vs 0.32, Opus 4.5 0.297 vs 0.43, MiniMax M2.7 0.265 vs 0.47. A reader cannot currently tell which verbosity definition a given published number came from.

Suggested fix

  1. Pin the tool at the call site (uvx scb-check==X.Y.Z ... or uvx --from scb-check==X.Y.Z scb-check ...), or add it as a locked dependency.
  2. Record the resolved scb-check version in the run metadata and in the results artifact, so existing results stay interpretable.
  3. Show that version next to the quality columns on the leaderboard.

I can send a PR for 1 and 2 if that's the direction you want.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions