crank-health
Crank health
Measure, then plan. The analyzers produce the evidence; you produce eight letters and a plan of tasks a coding agent can work and verify. Grades come from references/grading.md, the plan from assets/plan.md.
references/ and assets/ are relative to this skill's directory. The target path defaults to the current repo. Quick profile unless --deep. --only <category,…> narrows the categories; the rest read not assessed (not selected). --project repeats; the selection is the union, the rollup covers the selection only, and repo-wide tools run over the selected directories.
Every project is its own unit, so a monorepo is N projects plus the rollup: a repo-wide measure takes one pass per project directory for the project letter and one over the selection for the rollup.
Contracts
- Zero footprint. Everything you write goes under the run dir
<repo>/.crank-health/<YYYY-MM-DD>-<4 hex>/, evidence inraw/ findings/ summary/, tool caches and mirrors inscratch/. Create.crank-health/.gitignorecontaining*only if it does not exist; another run's dir beside yours is not yours to touch. Tools that write beside the code are redirected by the flags in the references. The footprint comparison in references/inventory.md must come back empty before you report. - Secrets never quoted. Each tool's redaction flag sits in its reference row, and a secret finding anchors on the rule id and the file, never the flagged line. Copies of source under
scratch/(the aislop mirror, the complexipy copy, a PR base worktree) hold every secret the repo does, soscratch/is deleted in step 7 and the run dir is grepped before you report. - Quick never executes repo code. Build, test and mutation tools run only under
--deep, and mutation tools only where the repo owns and installed them (an ephemeral copy fails confidently instead of saying "not available"). - One tool never aborts the run. A tool that fails records a state and the run continues;
assets/summary.mddefines the five states and what each must carry. Budgets: 120 s, 300 s for Go, cppcheck and build tools, 15 min for mutation, enforced withperl -e 'alarm shift; exec @ARGV' <secs> <command…>(macOS has notimeout); a killed tool istimeout. Non-zero exit is not failure: most linters exit 1 on findings. - Nothing to measure is
not assessed (reason), never A. All eight categories appear in every report.