/** * `graph-equivalence-check` — the REAL-REPO sharded≡exact equivalence guardrail * command handler. * * Builds BOTH catalogs on the target repo (default: cwd) with the REAL language * adapter — so workspace `@scope/pkg` imports resolve through Node16 to built * `dist/*.d.ts`, the exact divergence class the exact-engine-under-resolution * bug lived in (which the SYNTHETIC in-test harness cannot model): * - EXACT single-program catalog via `runGraph` (the `--exact` path), and * - SHARDED catalog via `runShardedGraph`, sharded the SAME way a production * `graph` run shards (`resolveShardsForCwd`). * Both COLD + no-cache + no datastore (a fresh in-memory oracle every run), and * with an EMPTY rule set (the catalog — functions + edges + SCCs — is the diff * currency; rules only produce signals, so skipping them keeps the run lean). * * It then diffs (`diffCatalogs`), classifies the residual by OWNER FILE * (test/fixture-owned ⇒ gate-invisible/benign; production ⇒ the meaningful * signal), and compares the PRODUCTION count to the committed budget * (`.config/graph-equivalence-budget.json`). Exits non-zero on a budget breach * (a regression) or any function-set / SCC divergence. A decrease passes with a * tighten hint. `--update-budget` rewrites the budget to the observed production * count (capture the initial residual / tighten the ratchet). * * Heap: the exact build over ~1500 files needs adequate heap; the CI step runs * the compiled engine under `NODE_OPTIONS=--max-old-space-size=...` (see * `.github/workflows/ci.yml`). This command does NOT run heap-preflight (that is * the interactive `graph` path); it relies on the CI step's NODE_OPTIONS. */ import type { ToolCliContext } from '@opensip-cli/core'; export interface EquivalenceCheckOptions { readonly cwd: string; /** Override the budget file path (relative to cwd or absolute). */ readonly budget?: string; /** Rewrite the budget file to the observed production divergence count. */ readonly updateBudget?: boolean; } /** * Run the real-repo sharded≡exact equivalence guardrail and set the process * exit code via `cli.setExitCode`. Never propagates: every error raised in the * body (no CLI entry script, non-shardable repo, a failed catalog build, a * missing/invalid budget) is caught locally and converted to * `EXIT_CODES.RUNTIME_ERROR` — so this function does not throw to its caller. */ export declare function executeEquivalenceCheck(opts: EquivalenceCheckOptions, cli: ToolCliContext): Promise; //# sourceMappingURL=equivalence-check-command.d.ts.map