What problem does it solve?
Use when auditing a research or data codebase for technical debt — the cruft that accretes when exploratory analysis lives next to production pipelines. Identify, categorize, and prioritize that debt: use for a periodic code-health triage, cleaning up before handing a project to someone else, deciding what to refactor next, or asking what's safe to delete here?. Trigger on: abandoned approaches in archive/ or old/ dirs, scratch/scratchpad notebooks sitting beside production modules, duplicated v1/v2 scripts or whole repos (e.g. alt_nfp vs alt-nfp vs alt_nfp_bsts), hardcoded /Users/ or absolute file paths, type-checker-silenced regions (type: ignore, sprawling Optional/Any), complex modules with no tests, empty or placeholder READMEs and "Add your description here" pyproject descriptions, committed .env files with API keys, raise NotImplementedError / TODO / FIXME placeholders, and reproducibility hazards (wall-clock time leaking into a pipeline, missing seeds, as-of/vintage joins without guards). Also trigger when asked to estimate refactor effort, build a maintenance backlog, or distinguish dead exploratory code (DELETE) from load-bearing-but-fragile code (HARDEN). Tuned for a Polars / NumPyro / PyMC / BLS-ETL / Trino stack.
Core Features & Use Cases
- Sweep and classify debt signals across a repository to surface candidates for review.
- Decide DELETE vs HARDEN to keep production paths healthy while discarding throwaway explorations.
- Prioritize findings by impact and effort to generate a minimal, actionable backlog for maintenance.
- Use on Polars / NumPyro / PyMC / BLS ETL / Trino stacks to improve reproducibility and maintainability.
Quick Start
Run scripts/scan.sh <repo> to surface debt signals and begin triage.