testability-canarylisted
Install: claude install-skill HetCreep/CoalMine
# Testability Canary (Decoupling & Mockability Audit)
<!-- SHARED:LANGUAGE_HEADER -->
Audit code to ensure it is decoupled, modular, and easy to cover with automated tests.
## Auditing Categories
1. **Hardcoded Constructors** — instantiating deps inside classes (`new DatabaseClient()`) instead of injecting via constructor/factory (prevents mocking).
2. **SRP Violations** — a class or method doing too many distinct duties (e.g. a service that also parses JSON and formats UI).
3. **Static Dependencies** — reliance on global static methods or Singletons that make test isolation impossible.
4. **Time & Environment Coupling** — direct `DateTime.Now`, `fs`, or `process.env` calls without an abstraction layer (fragile time/path-sensitive tests).
5. **Private Logic Gaps** — complex business logic hidden in private methods that can't be tested directly (extract to testable helpers).
Per-stack patterns and the mock-strategy vocabulary: read `references/checks.md` before scanning.
## Fix mode (choice-gated)
In Agent Context, after the report, present via `ask_question`:
- **Apply safe refactoring:** extract hardcoded initializations into constructor params (DI) + add interface definitions. Each fix: checkpoint (git stash/commit in a git repo; else copy the file aside — never assume git) → apply → build + tests → auto-revert if newly red.
- **Let me pick:** user selects specific refactoring moves.
- **Report only:** exit unchanged.
## Output
`| file:line | coupling point | severi