Problem
No code path anywhere in this codebase creates or manages GitHub-native milestones. Every milestone reference is either the milestoned/demilestoned webhook event being tracked read-only (src/github/webhook.ts), a field on IssueRecord/backfill types, or an unrelated Linear-integration field (src/integrations/linear-adapter.ts, project-tracker-adapter.ts write to Linear, not GitHub milestones). Selfhosters have no way for ORB to group its own planned issues under a milestone.
Area
New module alongside src/services/contributor-issue-draft.ts; src/github/webhook.ts (reference only, for existing milestone-event shape); .claude/skills/contributor-pipeline-gardening/reference.md (existing human convention to match).
Proposal
- Add milestone create/list support (
POST/GET /repos/{owner}/{repo}/milestones) via sub-issue 1's write-client resolver — no separate auth path.
- Add a reuse heuristic that checks open milestones (by title/description similarity) before creating a new one, so a repeated planning run doesn't spawn a fresh milestone every time — mirroring the manual convention the
contributor-pipeline-gardening skill already follows today (reusing "Miner Wave 4.5 — AMS Hardening Round 2" across rounds rather than creating a new milestone each time).
- Extend sub-issue 2's tool with an optional milestone target: resolve-or-create, then assign generated issues to it on create.
Deliverables
Resources
src/github/webhook.ts (existing read-only milestoned/demilestoned event tracking, shape reference only)
.claude/skills/contributor-pipeline-gardening/reference.md (existing milestone-reuse convention to match, not reinvent)
Boundaries
maintainer-only. Milestone titles/descriptions/due-dates are maintainer-authored or maintainer-approved inputs — not invented by the model without a human-supplied hint.
- Creation/assignment only — must not auto-close, auto-edit, or delete existing milestones.
- Depends on sub-issue 1 (write-client resolver) and pairs with sub-issue 2 (the tool it extends).
Problem
No code path anywhere in this codebase creates or manages GitHub-native milestones. Every
milestonereference is either themilestoned/demilestonedwebhook event being tracked read-only (src/github/webhook.ts), a field onIssueRecord/backfill types, or an unrelated Linear-integration field (src/integrations/linear-adapter.ts,project-tracker-adapter.tswrite to Linear, not GitHub milestones). Selfhosters have no way for ORB to group its own planned issues under a milestone.Area
New module alongside
src/services/contributor-issue-draft.ts;src/github/webhook.ts(reference only, for existing milestone-event shape);.claude/skills/contributor-pipeline-gardening/reference.md(existing human convention to match).Proposal
POST/GET /repos/{owner}/{repo}/milestones) via sub-issue 1's write-client resolver — no separate auth path.contributor-pipeline-gardeningskill already follows today (reusing "Miner Wave 4.5 — AMS Hardening Round 2" across rounds rather than creating a new milestone each time).Deliverables
Resources
src/github/webhook.ts(existing read-onlymilestoned/demilestonedevent tracking, shape reference only).claude/skills/contributor-pipeline-gardening/reference.md(existing milestone-reuse convention to match, not reinvent)Boundaries
maintainer-only. Milestone titles/descriptions/due-dates are maintainer-authored or maintainer-approved inputs — not invented by the model without a human-supplied hint.