gap-scan
Survey one or more repos (code, commits, docs, tests, issues) and return a ranked, evidence-cited list of gaps, bugs, and extension ideas as issue-ready items. Read-only apart from its report. Use for
SKILL.mdgap-scan/SKILL.md
GitHubRead-only. The one write is the report under skilleddocs/gaps/. Issues, comments, labels, and board changes each need an explicit yes for that action. Every gh call targets the repo resolved per the next skill's BOARD.md, Target repo section (-R <o>/<r>); on a fork, the yes for a write also names the repo it goes to.
No argument: current repo. Several: §1–3 per repo, one combined report. --commits N (default 20).
1. Sync
- Dirty = tracked changes, or untracked files outside
skilleddocs/(git status --porcelain -- . ':!skilleddocs'), so this skill's own report never makes the next run dirty. Dirty → skip the pull and say so; survey as-is. - No upstream (
git rev-parse --abbrev-ref @{u}fails) or no remote (git remoteprints nothing) → skip the pull, say so (no upstream, pull skipped); never set one yourself. - Clean with an upstream →
git pull --ff-only; diverged → report it like dirty. - Fork →
git fetch upstream; report ahead/behind; also list the parent's opengood first issues (gh issue list -R <parent> --label "good first issue"; reading the parent is fine).
2. Survey
- Docs vs code: every README/docs/roadmap claim the code contradicts (or code the docs miss), cited
doc:linebesidecode:line. - Commits: reverts, repeated fixes to one area (fragile spot), messages admitting shortcuts.
TODO|FIXME|XXXin code, byfile:line.- Tests: find the command. Cheap (no network, GPU, paid calls, credentials) → run it, report failures. Otherwise "tests not run: <why>".
- Open issues:
gh issue list -R <o>/<r> --state open --json number,title,labels. A gap matching one is already tracked: #n, listed but not re-proposed.ghcan't reach issues (non-GitHub remote, not authed, no remote) →Issues: not checked (<why>), and every item's status isnew (issues unchecked). - UI apps only (frontend, served site, dashboard), with the
runskill or a screenshot tool: screenshot the main views and note layout, spacing, style, and dead-link problems, citing screenshot + component. Otherwise "visual pass: skipped (<not a UI app | no tool>)".
3. Rank
Value for effort, highest first; the trade-off in one clause. Size S (one session, one area) or L (multi-area or needs a design call → divide candidate). Evidence or drop it: every item cites file:line, a SHA, or #n. A secret is cited by file:line or SHA only, never its value, in the report and the reply.
4. Report
skilleddocs/gaps/<local-date>.md, uncommitted unless asked. Untracked → exclude skilleddocs/ per TRACKING.md so the next run's tree is clean and pip install . isn't broken by it. Per item:
### <title>
- Why: <what's missing/broken and why it matters>
- Evidence: <file:line | SHA | #n>
- Size: S | L
- Suggested labels: <bug, enhancement, ...>
- Status: new | new (issues unchecked) | already tracked: #<n>
Chat reply:
Scanned <repo> (synced clean | dirty, pull skipped | no upstream, pull skipped). 12 candidates → 5 after filters.
Report: skilleddocs/gaps/<date>.md
1. [S] <title> — <why> (path/file.py:42)
2. [L] <title> — <why> (a1b2c3d)
Issues: <N open, M matched | not checked (why)>
Tests: <N passed/failed | not run: why> Visual: <findings | skipped: why>
Then offer, don't run: kanban-setup (user-only: tell them to type /kanban-setup; board from this list), divide (split an L), grill-docs (stress-test a big call).