Milestone track
READ-ONLY roadmap status rollup for a PRD_ROADMAP.md-style doc. Parses markdown checkboxes ("- [ ]"/"- [x]"), table-cell glyphs (☐/☑), ~~struck~~ items (counted as dropped/folded, NEVER as open), and milestone headings ("## N.", "### M...", rows of a MILESTONES table), then rolls up per-milestone done/open/struck counts, an overall completion %, and the FIRST open item as "next:". Fork-aware: if a "## CURRENT DIRECTION" heading exists, default scope is that fork section only (--all covers the whole file), and the output says which scope it used. Use when the user says "milestone status", "roadmap rollup", "how much of the PRD is done", "what's next on the roadmap", "PRD progress", or "milestone-track". Never edits the PRD. Deterministic, zero dependencies, no model calls.From its SKILL.md
npx -y skills add Evan-Daruwalla/claude-skill-suite --skill milestone-trackAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.8 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
milestone-track — roadmap status rollup
The engine is milestone-track.js (portable Node, zero deps). It reads a PRD in
this common markdown-roadmap format and reports, per milestone, how many status
items are done vs open vs struck, an overall completion percentage, and the
first open item to work next. It is a report, not a gate — it never touches
the PRD and exits 0 even when work is open. It understands two common PRD
mutation idioms: ~~struck~~ items are counted as dropped/folded (never as
open — "REMOVE by striking through in place"), and a ## CURRENT DIRECTION
heading means only the current tree is rolled up by default ("exactly one
current direction").
What it counts
- Checkboxes —
- [x]done,- [ ]open (SUCCESS CRITERIA lists). - Table glyphs —
☑done,☐open in any table cell (e.g. the F-M0 OUTPUT survivors table's "built?" column). - Struck items — anything wrapped in
~~...~~(a struck checkbox or a struck bullet) is counted as struck, separately, and excluded from the done/open percentage denominator. - Milestones — items bucket under the nearest preceding milestone marker:
a
## N./### M...heading, or a row of a MILESTONES table. A heading and a table row that share a label (e.g.### M1and| M1 | ... |) merge into one bucket. Milestones with zero status items are omitted from the report.
Commands
node milestone-track.js [--file <path>] [--all]
node milestone-track.js --canary
node milestone-track.js --help
- default reads
PRD_ROADMAP.mdin the current directory. If a## CURRENT DIRECTIONheading exists, the rollup is scoped to that fork section (heading → end of file); the output line names the scope. - --all ignores the fork and rolls up the entire file (both the superseded original tree and the current fork).
- --file
<path>points at a different roadmap. - --canary self-test (below).
Examples
- A PRD with a superseded tree and an active fork:
node milestone-track.jsrolls up just the## CURRENT DIRECTIONsection — its success criteria and milestone tables — with the first open item asnext:. - Whole-file view including the completed original tree:
node milestone-track.js --all— adds the original success-criteria bucket alongside the fork's. - A different project's PRD:
node milestone-track.js --file /path/to/PRD_ROADMAP.md.
Scope & percentage semantics
- Fork scope (default when
## CURRENT DIRECTIONis present) = from that heading to EOF — deliberately NOT "until the next##", because the fork's own F1/F2/…/F-M0 sections are all##headings that belong to it. The report always prints which scope ran, so a fork rollup is never mistaken for a whole-file one. - Overall % = done / (done + open). Struck items are excluded from the
denominator (they are neither open work nor a completed criterion). A milestone
with no done/open items shows
n/a.
Windows notes
- Pure Node stdlib; no shell quoting traps. Handles both
\nand\r\nline endings, so a CRLF-saved PRD parses identically. - Reads the file as UTF-8, so
☐/☑glyphs and em-dashes are matched correctly (no PowerShellSet-ContentANSI round-trip involved — the tool only reads).
Exit codes
0 always — it is a report, not a gate (open work does not fail it) ·
2 usage/parse error only (unknown flag, or a missing/unreadable --file).
Verification (the done-check)
node milestone-track.js --canary
Self-tests both directions on a bundled fixture (modeled on a typical PRD: a
## CURRENT DIRECTION fork, - [x]/- [ ] checkboxes, a ☑/☐ glyph table, a
MILESTONES table whose rows merge with ### M... headings by label, and one
~~struck~~ item). It asserts exact per-milestone counts, correct next-item
detection, that struck items never inflate done/open, and that default (fork)
scope genuinely differs from --all. MUST print CANARY PASS 16/16 before you
trust a rollup.
What ships with it: 1 file
14.0 KB alongside SKILL.md, 1 of them executable
- milestone-track.jsruns14.0 KB