Skip to content
Back to skills

Absolute Debt

ASecurity

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".

  • 209 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added August 31, 2026
ai-agentstypescriptpythongorefactoringgit

Works with

  • cli
  • mcp

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned August 31, 2026

npx -y skills add maddhruv/absolute --skill absolute-debt --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Absolute Debt?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Absolute Debt
[![Security: A β€” Skills Directory](https://www.skillsdirectory.com/api/skills/maddhruv-absolute-debt/badge)](https://www.skillsdirectory.com/skills/maddhruv-absolute-debt)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: absolute-debt
version: 0.5.0
description: >
  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".
category: workflow
tags:
  - workflow
  - maintenance
  - linting
  - typescript
  - debt
platforms:
  - claude-code
  - gemini-cli
  - openai-codex
  - mcp
user-invocable: true
argument-hint: "[target]"
license: MIT
maintainers:
  - github: maddhruv
---

> 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 `tsconfig` strictness) and clearing the fallout.
- Burning down accumulated `eslint-disable` / `@ts-ignore` / `# type: ignore` suppressions.

**`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

1. **Fixing by suppressing.** `@ts-ignore` to clear a type error *adds* debt. Forbidden here.
2. **`any` / `cast` to win.** Silences the checker, keeps the bug. Fix the real type.
3. **One-file-all-rules waves.** Mixes concerns, unreviewable. Go one-rule-all-files.
4. **Autofix without review.** `--fix` can change behavior (e.g. `prefer-const` on a
   reassigned var via a bug). Run tests after autofix too.
5. **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.

Files in this skill

  • README.md729 B
  • SKILL.md4.2 KB
  • references/health-engine.md5.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.