code-healthlisted
Install: claude install-skill ramboz/jig
> Spec 060 introduced `code-health` as the **static-analysis sibling of
> `tdd-loop`**, under [ADR-0017](../../docs/decisions/adr-0017-scaffolded-code-health.md)'s
> "detect the language → drive its blessed tools → normalize → degrade
> gracefully" framing. Like `tdd.py`, the deterministic detection +
> subprocess invocation live in `health.py`; this SKILL.md drives the
> judgment layer. If another installed skill's description identifies it as
> handling linting / static analysis / code quality, the Claude Code skill
> router prefers it — the deferral is **category-based**.
## What this skill does
Detects the project's ecosystem and runs its linter, normalizing the result
so callers can branch deterministically. Ecosystem detection is
**table-driven** — each ecosystem (Python, Node) is a data-structure entry,
so adding a language is an entry, not a control-flow fork. Current scope:
**Python (ruff) + Node (eslint)**, each with **advisory** secondary signals.
- A `.jig/lint-command` override always wins and **bypasses ecosystem
detection entirely** (honored verbatim — same semantics as `tdd.py`'s
`.jig/test-command`).
- Otherwise detects the ecosystem by marker files (`pyproject.toml` / `*.py`
for Python; `package.json` for Node) and resolves its primary linter:
- **Python** — `ruff` on `PATH` → `uvx ruff` → `pipx run ruff` (ephemeral),
invoked as `ruff check --output-format=json <dir>`.
- **Node** — `eslint` on `PATH` → `npx eslint` (ephemeral), invoked as