Migrated from recost-dev/extension#134 — the original explicitly flagged that this corpus-labeling decision belongs in the repo where the fixtures live.
Context
Follow-up to recost-dev/extension#117 (FN #1) and recost-dev/extension#132. #117 bundled two C1 false negatives; #132 recovered the unbatched_parallel FN but deferred the Python cross-function batch FN after attempting and reverting a fix.
The reverted attempt (a module-scope (provider, methodChain) batching pass in recost-dev/extension's src/scanner/python-waste-detector.ts) proved this is not a detector gap — it's a corpus-labeling inconsistency. This issue tracks the corpus-side decision that #117's original "design sketch" did not anticipate.
The problem
The corpus labels exactly one batch FN:
flask-mixed-providers/src/providers/anthropic_helper.py:11 — two calls to _client.messages.create(...) across two module-level functions (summarize, summarize_with_style).
But sibling helpers in the same fixture — openai_helper.py, cohere_helper.py — have structurally identical two-calls-across-two-functions shapes and are not labeled as batch findings. Any cross-function pass precise enough to fire on the Anthropic helper also fires on the siblings → 6 FPs, batch precision drops to 14.3%. No AST signal distinguishes the labeled case from the unlabeled-but-identical ones (would require cross-file call-graph signal the scanner doesn't currently expose).
Decision needed — pick one
Option A — Relabel (recover the FN). Add batch-finding labels to the structurally-identical sibling helpers (openai_helper.py, cohere_helper.py, and any others) so the cross-function pass becomes precise. Then re-implement the reverted (provider, methodChain) module-scope pass in python-waste-detector.ts (in recost-dev/extension).
Option B — Accept (drop the FN from the recall target). Formally mark the anthropic_helper.py:11 batch case as unrecoverable without cross-file call-graph signal in the corpus, removing it from the batch recall denominator. python-waste-detector.ts stays byte-identical to main.
Acceptance criteria
Do NOT
Re-add the (provider, methodChain) pass without first resolving the labeling — recost-dev/extension#132 already proved it regresses batch precision to 14.3% on the current corpus.
Links
Context
Follow-up to recost-dev/extension#117 (FN #1) and recost-dev/extension#132. #117 bundled two C1 false negatives; #132 recovered the
unbatched_parallelFN but deferred the Python cross-functionbatchFN after attempting and reverting a fix.The reverted attempt (a module-scope
(provider, methodChain)batching pass inrecost-dev/extension'ssrc/scanner/python-waste-detector.ts) proved this is not a detector gap — it's a corpus-labeling inconsistency. This issue tracks the corpus-side decision that #117's original "design sketch" did not anticipate.The problem
The corpus labels exactly one batch FN:
flask-mixed-providers/src/providers/anthropic_helper.py:11— two calls to_client.messages.create(...)across two module-level functions (summarize,summarize_with_style).But sibling helpers in the same fixture —
openai_helper.py,cohere_helper.py— have structurally identical two-calls-across-two-functions shapes and are not labeled as batch findings. Any cross-function pass precise enough to fire on the Anthropic helper also fires on the siblings → 6 FPs,batchprecision drops to 14.3%. No AST signal distinguishes the labeled case from the unlabeled-but-identical ones (would require cross-file call-graph signal the scanner doesn't currently expose).Decision needed — pick one
Option A — Relabel (recover the FN). Add
batch-finding labels to the structurally-identical sibling helpers (openai_helper.py,cohere_helper.py, and any others) so the cross-function pass becomes precise. Then re-implement the reverted(provider, methodChain)module-scope pass inpython-waste-detector.ts(inrecost-dev/extension).Option B — Accept (drop the FN from the recall target). Formally mark the
anthropic_helper.py:11batch case as unrecoverable without cross-file call-graph signal in the corpus, removing it from thebatchrecall denominator.python-waste-detector.tsstays byte-identical tomain.Acceptance criteria
extension-benchmark.recost-dev/extension);npm run benchmarkshowsbatchat TP 1+ / FP 0 / FN 0; no regression to the 7 existing C1 tests; per-type precision stays 100%.batchrecall target adjusted;baseline.jsonregenerated so the row is no longer counted as an outstanding FN.Do NOT
Re-add the
(provider, methodChain)pass without first resolving the labeling — recost-dev/extension#132 already proved it regressesbatchprecision to 14.3% on the current corpus.Links
batchFN: relabel sibling helpers or accept as unrecoverable extension#134