Skip to content
Development
Skill

/absolute-debt

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

From plugin
absolute
20711 skills
Install
$ npx -y skills add absolutelyskilled/absolutelyskilled --skill absolute-debt --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition β†’
  • You can call itInvoke it directly when you want it.
  • Slash command/absolute-debt

Context preview

The summary Claude sees to decide when to auto-load this skill.

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

SKILL.md

absolute-debt.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.
Read more
Ships withabsolute

A development workflow engine for AI coding agents. Eleven separate skills β€” a one-time absolute-init (interview + stack detection β†’ config), a build loop you run every day (think β†’ spec β†’ plan β†’ build β†’ polish β†’ document), plus an engineering-health family

Get the whole plugin

Other skills on absolute.