# v0.35.3: Inspect crash fix, semantic self-heal, Code Health in the sidebar

A patch release fixing a background-scan crash and a stuck semantic index, surfacing codebase health in the TUI sidebar, and fixing a silent LSP auto-install failure.

## Inspect background scan no longer crashes on deep files

The duplicate-detection scanner walked each file's syntax tree recursively with no depth limit. A pathologically deep file (a minified bundle, generated code, or a very long operator/promise chain) could overflow the background worker's stack and abort the whole AFT process. The scanner now bounds its recursion and runs on a larger worker stack, so deep files are handled safely.

## Semantic index recovers from transient backend blips

If the embedding backend was briefly unavailable when an index build started (for example restarting a local LM Studio or Ollama server mid-build, or a model still loading), the index parked in a permanent `failed` state and only a restart would retry it. Transient failures, including the HTTP 400 a local backend returns while a model is loading or being unloaded, are now treated as temporary: the index stays in a `loading` state, retries with backoff, and recovers on its own once the backend answers. A genuine misconfiguration (auth, dimension mismatch) still fails fast with a clear message.

## Code Health in the TUI sidebar

The codebase-health counts that the agent sees in its status bar now also appear in the OpenCode TUI sidebar and the `/aft-status` view: live LSP errors and warnings, plus duplicate and TODO counts. The collapsed sidebar shows them as three at-a-glance traffic lights. Dead-code and unused-export counts are intentionally held back from this view for now while their accuracy on real TS/JS codebases is improved.

## LSP servers install reliably again

AFT installs language servers with `npm install --no-save` into its own cache directory. When that directory has no `package.json`, npm walks up the tree and, if any parent (for example a `package.json` in your home directory) has one, installs into that package instead. The cache directory ends up empty while npm still exits successfully, so the install silently failed and you saw a recurring "LSP binary missing" warning even with `lsp.auto_install` enabled. AFT now writes a small anchoring `package.json` into the cache directory before installing, so the server lands where AFT expects it. Affects both OpenCode and Pi.

## README

Fixed the YAML row in the Supported Languages table (wrong column count) and a missing blank line that made a horizontal rule render as a heading.

Thanks to @rustybret (#92, diagnosing the npm walk-up cause) and @Suknna (#93/#94, the README fix).

Join us on Discord: https://discord.gg/DSa65w8wuf
