Track code follow-ups where they live
With tags, ownership, expiration, and CI. A repo-scoped CLI that turns scattered TODOs, refactors, bugs, and critical items into a single, auditable list.
cargo install codereportWhy codereport?
codereport keeps all of this in one place: reports keyed by path and line range, with tags, messages, ownership, and optional expiration.
Scattered follow-ups
TODOs and “fix later” comments live in code or in tickets, with no single place to see what’s open, who owns it, or when it’s due.
codereport keeps everything in one place: a repo-owned list keyed by file and line range.
No visibility
There’s no quick way to see which files or areas carry the most tech debt, bugs, or critical items.
Generate an HTML dashboard with KPIs, tag distribution, and a file × tag heatmap.
No gates
Critical or long-overdue items can ship because nothing fails the build when they’re still open.
codereport check exits non-zero if any open report is blocking or expired—use it in CI.
Key benefits
Everything you need to keep code follow-ups under control.
One source of truth
All code follow-ups (TODOs, refactors, bugs, critical) in a single YAML store under `.codereports/`, versioned with the repo.
Precise location
Every report tied to `path:start-end` (e.g. `src/foo.rs:42-88`), so you know exactly where to look.
Severity and expiration
Tag types map to severity (low → blocking). Set expiration per tag (critical: 14d, buggy: 90d). Dashboard and CI respect expired/expiring soon.
Ownership
Resolved from CODEOWNERS or git blame on add. Result stored on each report; blame cached locally.
CI gate
codereport check exits non-zero if any open report is blocking or expired. Gate PR/merge checks.
Dashboard, not a long table
codereport html generates a minimal dashboard: KPIs, tag distribution, file × tag heatmap. Dark, minimal UI.
Commands
Add, list, resolve, and gate—all from the CLI.
| Command | Description |
|---|---|
| codereport add <path>:<start>-<end> --tag <tag> --message <text> | Add a report (tag: todo, refactor, buggy, critical) |
| codereport list [--tag <tag>] [--status open|resolved] | List reports with optional filters |
| codereport delete <id> | Delete by ID (e.g. CR-000001) |
| codereport resolve <id> | Mark as resolved |
| codereport check | CI: exit 1 if any open report is blocking or expired |
| codereport html [--no-open] | Generate dashboard and open in browser (use --no-open to skip) |
Quick start
codereport initCreates .codereports/ with config.yaml and updates .gitignore.
HTML dashboard
codereport html generates a minimal dashboard: KPIs, tag distribution, and file × tag heatmap.
codereport html
CI integration
codereport check exits with code 1 if any open report is blocking or expired. Use it in PR/merge checks.
GitHub Actions
name: codereport
on:
pull_request:
branches: [main]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo install codereport
- run: codereport checkAdd this job so PRs cannot merge while blocking or expired reports are open.
GitLab CI
codereport:
stage: test
image: rust:latest
script:
- cargo install codereport
- codereport check
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"Run in the same branch as the MR; the job fails if the check fails.