Skip to content

test(experiment): generate a 281-task panel from the index - #105

Merged
ManSio merged 2 commits into
mainfrom
exp/scale-panel
Nov 10, 2026
Merged

ManSio merged 2 commits into
mainfrom
exp/scale-panel

Conversation

@ManSio

@ManSio ManSio commented Nov 10, 2026

Copy link
Copy Markdown
Owner

test(experiment): generate a 281-task panel from the index and calibrate it

The 41-task panel makes one task worth 6 points, and every rate we publish is a
point estimate with a wide interval. This adds a panel built by a generator
instead of by hand: symbols are taken from the index, the sample is seeded by
sha256(commit), and a symbol is used only if its gold file literally defines
it. 160 name + 40 qualified + 40 negative + the 41 existing anchors.

Frozen predictions all pass:

bucket                    n   top1    any   chars/top1
name                    160    154    157        2163
qualified                40     38     40        2669
negative                 40     40     40         332
anchor:xerj/positive     16      6     10        5894
anchor:mcp_audit/pos     17     11     14        3442

S3 is the point: the anchors reproduce E65's weights arm exactly (6/16,
11/17), so the instrument is stable enough to compare experiments against.
The generated rate is not a quality headline - the questions contain the
identifier, so they measure the symbol channel; prose is hints (E64).

Building the panel surfaced two index defects, both recorded rather than
silently absorbed into the rate: the graph returns nodes whose file is not in
this project (src/sources/manifest/extract.py), and it labels a call
expression as a Function (callable in di_container.py:160). The evidence
gate survives the second - the row gets no ✓def and the verdict is
caveat (0.40) - but the symbol channel ranks a non-definition.

phantom_gold = 0 on the shipped panel: every gold was checked against the
source at build time, so a miss is a retrieval miss, not a broken task.

…ate it

The 41-task panel makes one task worth 6 points, and every rate we publish is a
point estimate with a wide interval. This adds a panel built by a generator
instead of by hand: symbols are taken from the index, the sample is seeded by
`sha256(commit)`, and a symbol is used only if its gold file literally defines
it. 160 `name` + 40 `qualified` + 40 `negative` + the 41 existing anchors.

Frozen predictions all pass:

    bucket                    n   top1    any   chars/top1
    name                    160    154    157        2163
    qualified                40     38     40        2669
    negative                 40     40     40         332
    anchor:xerj/positive     16      6     10        5894
    anchor:mcp_audit/pos     17     11     14        3442

S3 is the point: the anchors reproduce E65's `weights` arm exactly (6/16,
11/17), so the instrument is stable enough to compare experiments against.
The generated rate is not a quality headline - the questions contain the
identifier, so they measure the symbol channel; prose is `hints` (E64).

Building the panel surfaced two index defects, both recorded rather than
silently absorbed into the rate: the graph returns nodes whose file is not in
this project (`src/sources/manifest/extract.py`), and it labels a call
expression as a `Function` (`callable` in `di_container.py:160`). The evidence
gate survives the second - the row gets no `✓def` and the verdict is
`caveat (0.40)` - but the symbol channel ranks a non-definition.

`phantom_gold = 0` on the shipped panel: every gold was checked against the
source at build time, so a miss is a retrieval miss, not a broken task.
@coderabbitai

coderabbitai Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

Important

  • Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 04a7121e-73f8-4d38-a336-7a7c3b640fa7
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Three controls on the E66 panel, and one of them changes what the number may be
used for.

Grep baseline (a file that literally defines the symbol, first in path order):

    bucket       grep top1   tool top1   grep any   tool any
    name         147/160     154/160     160/160    157/160
    qualified     23/40       38/40       33/40      40/40

The `name` bucket is close to a grep test (91.9% vs 96.3%); `qualified` is where
the tool actually separates (57.5% vs 95%). So 0.963 is a regression detector,
not a quality claim, and the report now says that next to the number.

The three `any` misses are one bug, not three: `risk_level`, `module_of` and
`referenced_modules` live in `src/core/test_impact.py`, and the bucket
classifier penalises it by -2.0 because the file name starts with `test_`.
Blast radius: 926 tracked .py files, 271 match the test regex, 260 of them are
real tests, 1 production module is misclassified. `src/core/test_impact.py` is
exactly the file that computes test impact, so the penalty is backwards. Fixing
it is E67 with its own frozen bar, not a silent edit inside this PR.

Determinism: 24 tasks x 3 repeats are stable, but one task
(`MultiProjectSearcher.cross_repo_search`) scored False in the original run and
True in all three repeats afterwards. Single-run rates carry session noise, so
published numbers from this panel need 3 repeats, as in E65.

Also recorded: selection bias (791 eligible name symbols, 160 sampled, short and
dunder names dropped) and the leakage the panel cannot see (gold comes from the
index, so indexing gaps are invisible).
@ManSio
ManSio merged commit 331d308 into main Nov 10, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant