Harness Configurator: stack → tools and DoD
An interactive tool of the Harness Engineering series: pick a stack (JS/TS, Python, Java/Kotlin, Go, PHP) and get a personal setup. A role → tool table (boundary linter, dead code, strict types, cycles, security, pre-commit), a Definition of Done checklist across all rollout phases (0→8), and ready copy/download artifacts for your stack: an AGENTS.md skeleton, a pre-commit config and an ExecPlan template. The role is universal, the tool is an example to choose and pin once in an ADR. Stack-agnostic.
The role is universal, the tool fits the stack
🟦 Role (universal)
- Module-boundary linter
- Dead-code finder
- Strict types
- The same on any stack
🟩 Tool (per stack, in an ADR)
- dependency-cruiser · import-linter · ArchUnit · deptrac
- knip · vulture · deadcode · Psalm
- tsc · mypy · PHPStan · compiler
- Pick one and pin it in an ADR
Assemble your setup: pick a stack
Harness Configurator
STACK → SETUPPick a stack — get a personal setup: a role → tool table, a per-phase Definition of Done checklist, and ready artifacts (AGENTS.md, pre-commit, ExecPlan) you can copy or download. The role is universal, the tool is an example to choose; you pin it once in an ADR.
| Role | Tool | Phase |
|---|---|---|
Formatter one style, zero review bikeshedding | Prettier · Biome | Phase 3 · barriers |
General-purpose linter common bugs and anti-patterns | ESLint · Biome | Phase 3 · barriers |
Module-boundary linter dependency direction, no bypassing the public API | dependency-cruiser · eslint-plugin-boundaries | Phase 3 · barriers |
Strict types environment legibility — the agent improvises less | tsc --strict | Phase 3 · barriers |
Dependency cycles cycles erode the boundaries the architecture rests on | madge | Phase 3 · barriers |
Dead-code finder orphan code the agent starts 'fixing' | knip · ts-prune | Phase 5 · GC |
Security / dependency scanner CVEs and dependency drift | npm audit · osv-scanner | Phase 5 · GC |
Pre-commit orchestrator the enforcement point before commit (CI repeats on full) | husky + lint-staged | Phase 3 · barriers |
Tools are examples to choose from, not the law. Pick one per role for your project and pin it in ADR 0001-tool-selection. lefthook and pre-commit (framework) are stack-agnostic and work as an orchestrator anywhere.
Don't hunt for 'one tool for everything'
Tool-selection discipline
Artifacts: skeletons that get enforced
# AGENTS.md — sensors section (auto-filled from the matrix for your stack)
## Sensors (Definition of Done — all must be green)
- boundaries: <module-boundary linter> # e.g. dependency-cruiser / import-linter
- types: <strict type checker> # e.g. tsc --strict / mypy --strict
- dead code: <dead-code finder> # e.g. knip / vulture
- tests green; test-integrity — do NOT weaken / delete / skip existing tests
(checked by diff in CI). Coverage is a SIGNAL, not a target.
Enforcement: <pre-commit orchestrator> on commit (diff), CI on the full base.The funnel: mode → stack → setup
Result
The configurator turns the harness's abstract roles into a concrete setup for your stack: a role → tool table, a Definition of Done checklist across all phases, and copy/download artifacts (AGENTS.md, pre-commit, ExecPlan). You understand that the role is universal while the tool is chosen per stack and pinned in an ADR; that barriers must be enforced mechanically (pre-commit + CI), and tests rest on test-integrity, not a coverage mandate. This is the last link in the series funnel: mode → stack → setup. Next: phases 0→8 via the recipes in the hub.