Testability canary
Nine quality-canary skills for AI coding agents - code health, world-class rule completeness, grounding, supply chain, resilience, drift & more - plus the auto-cadence hooks that run them unprompted at session start and session end. Cross-agent, consent-gated, token-lean.
npx -y skills add HetCreep/CoalMine --skill testability-canaryAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 11 stars11 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Testability and design decoupling canary — checks for tight coupling, lack of Dependency Injection (DI), hardcoded constructors, Single Responsibility Principle (SRP) violations, and mockability gaps. Triggers on keywords: "/testability-canary", "testability-canary", "testability audit", "decoupling". Use when refactoring coupling, introducing DI, or making code unit-testable.
SKILL.md
2.2 KB, as published. Nobody here has run it
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
- Hardcoded Constructors — instantiating deps inside classes (
new DatabaseClient()) instead of injecting via constructor/factory (prevents mocking). - SRP Violations — a class or method doing too many distinct duties (e.g. a service that also parses JSON and formats UI).
- Static Dependencies — reliance on global static methods or Singletons that make test isolation impossible.
- Time & Environment Coupling — direct
DateTime.Now,fs, orprocess.envcalls without an abstraction layer (fragile time/path-sensitive tests). - 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 | severity | finding | mock strategy |
Severity: CRITICAL (un-mockable external write/network call) · HIGH (SRP violation blocking unit testing) · MEDIUM (time/env coupling) · LOW (minor static dependency)
<!-- SHARED:ORCHESTRATION --> <!-- SHARED:ESCALATION_FOOTER -->