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 codereport
View on crates.io

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

todorefactorbuggycritical

Commands

Add, list, resolve, and gate—all from the CLI.

CommandDescription
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 checkCI: 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 init

Creates .codereports/ with config.yaml and updates .gitignore.

HTML dashboard

codereport html generates a minimal dashboard: KPIs, tag distribution, and file × tag heatmap.

codereport html
.codereports/html/index.html
codereport HTML dashboard showing KPIs, tag distribution, and file heatmap

CI integration

codereport check exits with code 1 if any open report is blocking or expired. Use it in PR/merge checks.

Zero-setup CI/CD integration

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 check

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

Get started

Install from crates.io and run codereport init in your repo.

cargo install codereport