v0.45.0
v0.45.0
Code Health accuracy release. A 12-repository field audit (Next.js, NestJS, SvelteKit, Vite, Express, Rust workspaces, Tauri, Go, Python, Java/Kotlin, mixed monorepos, codegen-heavy) drove a set of dead-code and unused-export correctness fixes, re-verified against the same repositories after the fixes.
aft_inspect correctness
- No fabricated results for outline-tier languages. Dead code is now reported only for languages with a real liveness substrate (TS/JS via oxc; Rust, Go, C, C++, C#, Zig via the call graph). Java, Kotlin, and other outline-tier languages are excluded and listed as
not analyzedinstead of producing false findings. On OkHttp this removes 8,122 spurious dead-code items. - Dead code no longer sticks at
unavailableor serves stale counts. Fixed a harness-storage mismatch that left dead code permanently unavailable on some large repos even after warmup (Biome: unavailable → available), and a cache-reuse gap where watcher-driven file changes and deletions didn't refresh the call-graph projection, pinning stale counts. - Same-file references keep exports alive. Exported functions called earlier in the same file (or captured via object shorthand) were flagged dead under entry-point reachability. Found live in Vite (
createParseErrorInfo,updateStyle). - Convention entry points. Tool config defaults (
*.config.tsfor Playwright, ESLint, tsup, tsdown, oxlint, Vitest), Storybook CSF story exports, Mocha root hooks referenced frompackage.json, and SvelteKithooks.server/clientspecial exports are now framework-called liveness roots. SvelteKit$lib/*imports resolve without a generated tsconfig, ambient.d.tsdeclaration-module exports are no longer dead-code candidates, andpackage.jsonexportssubpaths (including conditional and build-output targets) propagate public-API liveness through barrels. - Rust call resolution. Function-scoped
use ... asmodule aliases, module-qualified calls to inline sibling modules, cross-cratepub usere-exports, and turbofish method calls now resolve to their targets. Calls inside macro token trees (json!, custom UI macros) remain a known limitation. - Go interface dispatch. Methods invoked only through interfaces (
sort.Interface'sLen/Less/Swap, Bubble Tea'sFilterValue) are no longer flagged dead. The new method-only gate also stops dispatch names from accidentally rescuing same-named plain functions, so some Go repos report a more honest, higher count. - Generated code is bucketed, not mixed in. Dead code, unused exports, and duplicates split generated files (gen/ trees,
*_pb.ts,@generated/DO NOT EDITbanners) out of the headline count into agenerated: Nbucket. On protobuf-es the dead-code headline drops from 5,091 to 52 with 2,283 bucketed as generated. Totals always add up; nothing is hidden.
CLI
- Fixed
npx @cortexkit/aft doctor --fixandsetupfailing to download the binary ("Stripping types is currently unsupported for files under node_modules"). The published CLI resolved an installed dependency at runtime instead of bundling it; the bundle is now fully self-contained, with a regression guard. wait-release-style release tooling: run discovery now attaches to already-running workflows.
Reliability
- Bridges detect when the on-disk
aftbinary changed (e.g. after an update) and gracefully respawn onto the new binary at the next idle window instead of running the old one until restart. - Bumped
@cortexkit/subc-clientto 0.3.0 (timeout arbitration recovers replies raced by request deadlines under heavy load).
Field audit harness
- New
benchmarks/inspect-field-audit/harness: clones 12 repository categories, runs warmup +aft_inspect, and produces per-repo verification reports. Used as the acceptance gate for this release and rerunnable for future correctness work.