Summary
PR #110 (A3 barrel re-exports + A5 factory/DI/aliased clients) added detection coverage for several cross-file patterns, but the D1 benchmark corpus in recost-dev/extension-benchmark does not exercise any of them. The recall gain (+2.94pp on the global metric) is real but not measurable per-pattern, and B2 (#81) dual-location work needs these fixtures to be testable.
Fixtures to add (in recost-dev/extension-benchmark)
barrel-direct-reexport — import { X } from "./barrel" where barrel.ts does export { X } from "./real".
barrel-aliased-reexport — export { x as y } from "./real".
barrel-wildcard — export * from "./real".
barrel-default — export { default } from "./real".
factory-in-file — export function makeClient() { return new OpenAI(); } consumed in same file.
factory-cross-file — same as 5 but consumer is a sibling file.
di-typed-constructor — class C { constructor(private ai: OpenAI) {} useIt() { this.ai.method(); } }.
Each fixture: src/, expected.json listing the resolved provider, file:line of each call site.
What to do here (in recost-dev/extension)
- Once fixtures land in
extension-benchmark, refresh benchmark/baseline.json to capture the new per-fixture metrics.
- No code changes expected — A3/A5 already handles these patterns.
Acceptance criteria
Depends on
Blocks
Reference
Memory: a3_a5_pr_status.md ("Corpus gap").
Summary
PR #110 (A3 barrel re-exports + A5 factory/DI/aliased clients) added detection coverage for several cross-file patterns, but the D1 benchmark corpus in
recost-dev/extension-benchmarkdoes not exercise any of them. The recall gain (+2.94pp on the global metric) is real but not measurable per-pattern, and B2 (#81) dual-location work needs these fixtures to be testable.Fixtures to add (in
recost-dev/extension-benchmark)barrel-direct-reexport—import { X } from "./barrel"wherebarrel.tsdoesexport { X } from "./real".barrel-aliased-reexport—export { x as y } from "./real".barrel-wildcard—export * from "./real".barrel-default—export { default } from "./real".factory-in-file—export function makeClient() { return new OpenAI(); }consumed in same file.factory-cross-file— same as 5 but consumer is a sibling file.di-typed-constructor—class C { constructor(private ai: OpenAI) {} useIt() { this.ai.method(); } }.Each fixture:
src/,expected.jsonlisting the resolved provider, file:line of each call site.What to do here (in
recost-dev/extension)extension-benchmark, refreshbenchmark/baseline.jsonto capture the new per-fixture metrics.Acceptance criteria
extension-benchmarkcovering each barrel/factory/DI shape.baseline.jsonrefreshed to include them.Depends on
Blocks
Reference
Memory:
a3_a5_pr_status.md("Corpus gap").