# Phase 3c — amendment

**Plan said:** inline `src/verification/predicate-runner.ts` (75 LOC) into `run-verifier.ts` (643 LOC) — "the dispatcher is small enough that the indirection costs more than it saves." The plan modelled predicate-runner as a thin internal dispatcher in front of the v8 verification core.

**Code disagreed.** `predicate-runner.ts` is a shared shell-predicate utility (`runPredicate` + `checkPredicateBaseline`), not a dispatcher in front of `run-verifier.ts`. `grep -rn` confirms run-verifier.ts has zero imports from predicate-runner.ts. The actual consumers are `src/contract/compiler.ts` (tautology-check at compile time), `src/falsification/adapters/codex/predicate-runner.ts` (wraps both functions), and the file's own test suite. Inlining into run-verifier.ts would have coupled two unrelated subsystems (contract-compile, codex-falsification) to a verification module they don't conceptually depend on — a structural regression, not an improvement. predicate-runner.ts stays where it is.

**Revised 3c scope:** structural trim of `live-cost-tracker.ts` (WHAT-comments per CLAUDE.md, `usageToUsd` inlined into its one in-class caller, cap/spent/projected accessors tightened — Anthropic cost path, Sonnet-4 price constants, and `usageToUsd`'s pricing logic left untouched per Phase 5's clean halt boundary on Anthropic-provider token regression), plus a comment/redundant-filter-loop trim in `pre-generation.ts` and the v8 portion of `index.ts`'s re-exports. v6 battery re-exports in index.ts stay (Phase 6 deletes them). Target: −60 to −110 LOC. Phase 3 close lands within the relaxed ≤54,100 budget.
