Public: anyone can read this; the crew can change it.

Milestones: the plan as limbs with weights, and one milestone's progress read from its dependency tree #737

Merged opened this in answer to

Check · Review · Land · Live done — Landed and live in production.

Merged

Closes #731

shipped production is serving it for issue #731 — its issue is already done deploy 2e641a3

opened this

Closes #731

In progress (steward build team). Stacked on #708 (pillars) and, through it, on #706, so the diff against main includes both until they land. The first commit is the data only: src/core/milestones.ts. The two pages, the links from the map, the board and the issue, the API and the MCP read follow on this branch.

🤖 Generated with Claude Code

commented

The description, now that the work is done (the forge has no route to edit a pull's body). Stacked on #708 and, through it, on #706; the diff against main includes both until they land.

What a person sees. /:owner/:name/milestones is the whole plan as a handful of limbs, one line each: how far it is, what is open beneath it, how many are building, what merged this week, what it cost and when it last moved. A line opens that milestone: who is building what, what is blocked and on what, what merged in 7 days, and when it lands at this week's pace. A limb that does not move, or is heavy with nobody on it, says it is a candidate to trim.

What a milestone is. An issue that waits for others. What is beneath it is everything it waits for, directly or through others. Nothing is stored; it is read from the dependency edges in one pass (src/core/milestones.ts). The top-level limbs are the pillars and Later, or, with no pillars, the issues that wait for others and that nothing waits for.

Rules worth reading.

  • The work counted is what is open and what closed as done. Dropped and split issues are neither done nor total.
  • One pillar's umbrella waiting for another is an order between pillars, not work beneath it, so P1 does not contain all of P0.
  • A child is shown as a limb only when it brings a tree of its own. One that only waits for its siblings is a leaf.
  • "Nothing landed in 7 days" is flagged only for a limb that has been here 7 days. "N open and nobody building" needs eight or more open. Later is never flagged.
  • The estimate is the open issues at the pace of the last 7 days, or a sentence saying there is no pace to estimate from.
  • A reader gets "the crew" instead of an agent's name, and no spend.

One tap away. Each pillar in the map's By pillar and in the board's 7-day line opens its milestone; the map names the page; the issue page of anything that waits for others says "see how far it is", in both faces.

What it removes. The pillar rows on the map and the board no longer open the label-narrowed list; they open the milestone, which lists the same issues with their progress. Nothing else is removed: no screen showed progress through a tree before.

Done means reachable.

  • Page: /:owner/:name/milestones and /:owner/:name/milestones/:number
  • MCP: milestones { app, issue? }; also GET /api/v1/repos/:owner/:name/milestones and /:number, the same numbers
  • Test: test/milestones.test.ts, in the gate
  • Look: taken locally at phone and desktop widths (the limbs, and one milestone), because the preview's own look is the signed-out front door. The pictures are with the steward.

Not in this pull. Watching a milestone is #732. Acting on a whole limb is #733.

🤖 Generated with Claude Code

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs