Absolute debt
Absolute Skills to 10x your Development Lifecycle
npx -y skills add maddhruv/absolute --skill absolute-debtAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Lint and typecheck debt paydown: clear pre-existing repo-wide lint/type violations and suppressions (@ts-ignore, # type: ignore) one rule per wave, fixing causes not symptoms. Runs on green main. For diff-scoped quality use absolute-simplify. Triggers on "absolute debt", "fix our lint warnings", "clear the type errors", "get to strict mode", "burn down suppressions".
The file declares its own license as MIT. That is the authorβs claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
4.2 KB, as published. Nobody here has run it
Start your first response with the π§Ύ emoji.
Absolute Debt
Pay down accumulated lint and type-checker debt across the repo β existing warnings,
errors, and suppressions that built up over time β in safe waves, by rule, with tests green
after each. The goal is a genuinely clean lint + typecheck, not a quieter one.
Runs the shared engine in references/health-engine.md β read it for the
DETECT β SCAN β TRIAGE β FIX β VERIFY β REPORT loop and the safety contract. This file
covers only what's specific to lint/type debt.
When to use
- "Fix our lint warnings", "clean up the type errors", "get the codebase to strict mode".
- Tightening config (enable a rule, raise
tsconfigstrictness) and clearing the fallout. - Burning down accumulated
eslint-disable/@ts-ignore/# type: ignoresuppressions.
debt vs simplify: simplify improves your working diff's quality. debt clears
pre-existing repo-wide lint/type violations on green main. Use debt for standing
cleanup, not for changes you're actively making.
What it scans
| Ecosystem | Lint debt | Type debt |
|---|---|---|
| JS/TS | eslint . (full report, by rule) | tsc --noEmit |
| Python | ruff check / flake8 | mypy / pyright |
| Go | golangci-lint run | go vet ./..., staticcheck |
Also inventory suppressions as debt in their own right: eslint-disable*,
@ts-ignore/@ts-expect-error, # type: ignore, # noqa, //nolint. Each is a hidden
violation. Count violations grouped by rule (not by file) β that's how you wave them.
Risk ranking (TRIAGE)
| Wave | Class | Default |
|---|---|---|
| 1 | autofixable lint (eslint --fix, ruff --fix, gofmt) | fix now β mechanical, safe |
| 2 | manual lint by rule, low behavioral risk (unused, style, imports) | fix this pass, one rule at a time |
| 3 | type errors, and lint rules that can change behavior if "fixed" wrong | gated β review each, may need real logic |
| 4 | removing suppressions (@ts-ignore etc.) | gated β each may surface a real bug |
Fix one rule across the repo per wave, not one file across all rules β keeps diffs reviewable and regressions bisectable. Config tightening (enable rule / raise strictness) is itself a finding: propose it, then clear what it surfaces.
Fix & verify
- Run the autofixers first (wave 1), commit-ready, then re-scan to see what's truly manual.
- Manual fixes: address the cause, not the symptom. A type error means the types are
wrong somewhere β fix the type, don't cast to
any/add# type: ignore. - Never clear a violation by suppressing it. Removing suppressions is the goal, not a tool.
- After each wave: full test + lint + typecheck + build. The violation count must drop and nothing regress.
Gotchas
- Fixing by suppressing.
@ts-ignoreto clear a type error adds debt. Forbidden here. any/castto win. Silences the checker, keeps the bug. Fix the real type.- One-file-all-rules waves. Mixes concerns, unreviewable. Go one-rule-all-files.
- Autofix without review.
--fixcan change behavior (e.g.prefer-conston a reassigned var via a bug). Run tests after autofix too. - Disabling the rule instead of fixing. Loosening config to hit zero is debt laundering, not paydown.
Companion commands
/absolute simplifyβ quality of code you're currently changing./absolute pruneβ many unused-var/import warnings vanish once dead code is pruned./absolute workβ if clearing the debt needs real refactoring, hand off.