#!/usr/bin/env bun // measure-working-set — CLI for the §5 polyglot workingSetFit metric. // Given a path to a checked-out Go or Rust source tree, emit the // measured ratio as JSON to stdout. // // Usage: // bun scripts/measure-working-set.ts --lang go // bun scripts/measure-working-set.ts --lang rust // // The number it emits is reproducible: given the same checked-out // source tree, every run prints the same ratio to full float precision. // Pair the output with the repo's commit SHA when reporting; see // /sama/v2 §5 (operational) for the bounds reasoning. import { measureWorkingSetForRepo } from "../src/c14_working_set_walker.ts"; import type { PolyglotLanguage } from "../src/b32_working_set_polyglot.ts"; const args = process.argv.slice(2); const usage = (): never => { console.error( "Usage: bun scripts/measure-working-set.ts --lang go|rust [--verbose]", ); process.exit(2); }; if (args.length < 3) usage(); const repoPath = args[0]!; let lang: PolyglotLanguage | null = null; let verbose = false; for (let i = 1; i < args.length; i++) { const a = args[i]; if (a === "--lang") { const v = args[++i]; if (v !== "go" && v !== "rust") { console.error(`--lang must be "go" or "rust", got: ${v}`); process.exit(2); } lang = v; } else if (a === "--verbose") { verbose = true; } else { console.error(`unknown argument: ${a}`); usage(); } } if (lang === null) usage(); const result = measureWorkingSetForRepo(repoPath, lang!); const output: Record = { language: result.language, repoPath, minLoc: result.minLoc, maxLoc: result.maxLoc, total: result.total, included: result.included, ratio: result.ratio, ratioPercent: Number((result.ratio * 100).toFixed(2)), }; if (verbose) { output.files = result.files.map((f) => ({ path: f.path, locCount: f.locCount, inBand: f.locCount >= result.minLoc && f.locCount <= result.maxLoc && !(lang === "go" && f.path.endsWith("_test.go")), })); } console.log(JSON.stringify(output, null, 2));