{"id":31916967,"url":"https://github.com/srdjan/gitodos","last_synced_at":"2026-04-16T11:02:33.062Z","repository":{"id":313928369,"uuid":"1052942921","full_name":"srdjan/gitodos","owner":"srdjan","description":"A tiny, dependency‑free scanner that collects inline code issues (e.g., TODO/BUG) ","archived":false,"fork":false,"pushed_at":"2025-09-09T21:32:29.000Z","size":85,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-08T12:35:28.897Z","etag":null,"topics":["git","issues-tracker","todo","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/srdjan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-09-08T19:05:38.000Z","updated_at":"2025-09-09T21:32:33.000Z","dependencies_parsed_at":"2025-09-09T16:45:27.265Z","dependency_job_id":"64f3d764-7938-4170-9caa-906390f488a7","html_url":"https://github.com/srdjan/gitodos","commit_stats":null,"previous_names":["srdjan/gitodos"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/srdjan/gitodos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srdjan%2Fgitodos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srdjan%2Fgitodos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srdjan%2Fgitodos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srdjan%2Fgitodos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/srdjan","download_url":"https://codeload.github.com/srdjan/gitodos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srdjan%2Fgitodos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31882886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T09:23:21.276Z","status":"ssl_error","status_checked_at":"2026-04-16T09:23:15.028Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","issues-tracker","todo","typescript"],"created_at":"2025-10-13T20:16:21.494Z","updated_at":"2026-04-16T11:02:33.047Z","avatar_url":"https://github.com/srdjan.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Inline Code Issues Dashboard\n\nMinimal, dependency‑free tooling to scan inline TODO/BUG/FIXME comments and generate a local HTML\ndashboard.\n\n- Scanner: `.git-bin/git-issues.ts` (writes `.git-bin/.issues` and subset `.git-bin/.bugs`)\n- Dashboard: `.git-bin/issues-web.ts` → `.git-bin/issues.html`\n- Optional: post‑commit hook to auto‑refresh on every commit\n\n## Requirements\n\n- Deno 2.x\n- Git on PATH\n\n## Quick start\n\n```\n# 1) Generate snapshots\ndeno task issues:scan        # → .git-bin/.issues (full repo)\n\n# 2) Build and open the HTML dashboard\ndeno task issues:web         # builds (if needed) and opens .git-bin/issues.html\n\n# Optional: install a post‑commit hook to auto‑refresh after every commit\ndeno task issues:hook:install\n```\n\n## Outputs\n\n- `.git-bin/.issues` — full snapshot (timestamp, path:line, tag, message)\n- `.git-bin/.bugs` — subset snapshot (currently scanning src/)\n- `.git-bin/issues.html` — static, responsive dashboard with filtering and sorting\n\nTip: If the page looks empty, run the scan tasks first, then rebuild the HTML.\n\n---\n\n# Inline Issue \u0026 Bug Tracker (.git-bin/git-issues.ts)\n\nThis repository includes a tiny, dependency‑free scanner that collects inline code issues (e.g.,\nTODO/BUG) and writes a snapshot into files under `.git-bin/`.\n\n- Default scan: whole repo → `.git-bin/.issues`\n- Subset scan: `src/` only (TODO/BUG) → `.git-bin/.bugs`\n- Optional Git hook: automatically refresh after every commit\n\nThe scanner is fast, portable, and works across any language as long as comments contain\nrecognizable tags (e.g., `// TODO: …`, `# BUG: …`).\n\n## Requirements\n\n- Git available on PATH\n- Deno (1.41+ recommended)\n\n## Conventions\n\n- Tags: only `TODO` and `BUG`.\n- Priority: tight `!` after the tag means high (e.g., `TODO!:` / `BUG!:`). A single space is allowed\n  before the colon (e.g., `BUG! : message`).\n- Colon: immediate or one space before it (e.g., `TODO:` or `TODO :`).\n- Comments scanned (configurable): `// …`, `/* … */`, `# …`, `\u003c!-- … --\u003e`.\n- Markdown: scanned with a tiny heuristic — fenced code is ignored and inline backticks are stripped\n  before matching.\n\n## Outputs\n\nEach generated file contains a header with the snapshot time and aligned columns per line:\n\n- `timestamp` — when the snapshot was generated\n- `path:line` — file path relative to repo + line number\n- `tag` — the matched tag\n- `priority` — priority level (high/normal)\n- `owner` — assigned person (if specified)\n- `date` — due date or date marker (if specified)\n- `category` — category/module (if specified)\n- `id` — issue/ticket ID (if specified)\n- `message` — the textual description\n\nExample excerpt:\n\n```\n# Inline-issue snapshot 2025-09-08 19:47:06\n# Columns:  timestamp  path:line  tag  priority  owner  date  category  id  message\n2025-09-08 19:47:06  test.md:22  TODO  high      alice  2025-01-10  -  -  Deploy hotfix for payment processing\n2025-09-08 19:47:06  api.ts:14   BUG   high      -      -           api  #99  Rate limiting not working correctly\n```\n\nJSON outputs are also generated alongside the text snapshots for tooling/CI:\n\n- `.git-bin/issues.json` and `.git-bin/bugs.json` — array of entries:\n  `{ ts, file, line, tag, message, priority, owner?, date?, category?, id? }`.\n\n## Dashboards\n\n- Active: `.git-bin/issues.html` — search, tag filters, sort (priority/file/line/tag/time), group by\n  directory, keyboard shortcuts (`/`, `g`, `Esc`).\n- History: `.git-bin/history.html` — journal-backed view with search, type/status filters, high-only\n  toggle, and sort (created/completed/priority/type).\n\nQuick usage:\n\n```\ndeno task issues:scan        # write .issues\ndeno task issues:scan:src    # write .bugs\ndeno task issues:web         # build issues.html\ndeno task issues:web:open    # open issues.html (cross‑platform)\ndeno task issues:history     # build and open history.html\n```\n\n## Tasks (deno.json)\n\n- `issues:scan`, `issues:scan:src`, `issues:web`, `issues:web:open`\n- `issues:history`\n- `issues:hook:install` — installs a post‑commit hook to refresh everything\n\n## Git Hook\n\nThe hook created by `issues:hook:install` writes a `post-commit` script that regenerates both\nsnapshots and the HTML dashboard automatically:\n\n```\n#!/bin/sh\n.git-bin/git-issues.ts --out .git-bin/.issues\n.git-bin/git-issues.ts --path src --out .git-bin/.bugs\n.git-bin/issues-web.ts\ndeno run -A .git-bin/history-web.ts\n```\n\nNotes:\n\n- The installer also marks the scripts as executable to avoid permission errors.\n- You can open the HTML afterwards with `deno task issues:web:open` (macOS) or by opening\n  `.git-bin/issues.html` directly.\n\n## .gitodos (config)\n\n```ini\n# Patterns to ignore (comma-separated)\nignore=vendor/,node_modules/,dist/,.git/,*.min.js\n\n# Comment styles to scan (comma-separated):\n# slash (//), block (/* */), hash (#), html (\u003c!-- --\u003e)\ncomments=slash,block,hash,html\n```\n\n## Customization\n\nCommand-line options:\n\n- Path scope: `--path \u003cdir\u003e` (default: `.`)\n- Output file: `--out \u003cfile\u003e` (default: `.git-bin/.issues`)\n\nYou can add more tasks in `deno.json` for frequently used combinations.\n\n## Tips\n\n- Keep comments short and actionable; one TODO/BUG per line is ideal.\n- Remove the colon if you want a line ignored: `// TODO later` (no match).\n- Use the history page to track completion trends.\n\n## Known limitations\n\n- It matches `TAG:` with a colon; lines like `// TODO something` (no colon) are intentionally\n  ignored to reduce false positives.\n- The per‑line `timestamp` reflects when the snapshot was taken, not when a comment was added.\n- Only files listed by `git ls-files --cached --others --exclude-standard` are scanned; ignored\n  files (per `.gitignore`) are skipped by design.\n- Minimal parser: only `TODO:` and `BUG:`. A tight `!` after the tag marks high (e.g., `TODO!:` /\n  `BUG!:`). Colon may have one space before it. Metadata (`@owner`, `[date|category]`,\n  `(#id)`/`(ABC-123)`) is parsed only at the start of the message if present.\n\n## Recent Enhancements\n\n✅ **Tight priority marker** — `TODO!:` / `BUG!:` (no space before `!`) ✅ **Colon flexibility** —\nallow one space before the colon (`TODO :`) ✅ **Comment toggles** — `.gitodos` controls `//`,\n`/* */`, `#`, `\u003c!-- --\u003e` ✅ **Markdown heuristic** — ignore fenced code; strip inline backticks ✅\n**JSON snapshots** — `.git-bin/issues.json`, `.git-bin/bugs.json` ✅ **Journal + history** — SQLite\nsync and `history.html` ✅ **Dashboards** — search/filters/sort; group-by for active view ✅\n**Watch + open** — live rebuild, cross‑platform opener ✅ **Minimal, non‑regex parser** — small,\npredictable scanner\n\n## Roadmap ideas\n\n- Context lines - Show code around issues\n- Issue age tracking - Using git blame\n- Thresholds for CI - Fail build if high-priority issues exist\n- Export formats - JSON/CSV/Markdown reports\n- VSCode integration - Quick navigation to issues\n- Duplicate detection - Find similar issues\n- Time tracking - Estimate/actual time metadata\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrdjan%2Fgitodos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsrdjan%2Fgitodos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrdjan%2Fgitodos/lists"}