You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adopt wp{issue#}-stage{n} milestone naming for work-plan stages
Proposal: when a work plan divides its work into stages, give each stage a GitHub milestone named after the work-plan issue that owns it — wp{issue#}-stage{n}, e.g. wp8-stage1 for stage 1 of the plan tracked in issue #8. Adopted ad hoc in QuantEcon/textstrata on 2026-08-25; filing it here to decide whether it becomes the documented convention for all work plans.
Why name the milestone after the plan
Milestones are a flat, repo-global namespace with no parent field, so a bare Stage 1 is ambiguous the second a repo has two work plans, and there is nothing in the milestone itself that says which plan it belongs to. Embedding the issue number makes the milestone self-describing and gives the convention four practical properties:
No label sprawl.QEP-2 keeps the label set deliberately minimal, and stage-1/stage-2/stage-3 labels would sit outside it. Milestones carry percent-complete and an issue list natively, which is exactly what a phased plan wants, so the structure lands without touching the label vocabulary.
Retirement is unambiguous. When the plan closes, its wp8-* milestones close with it. A generic Stage 2 would linger and invite a later, unrelated plan to reuse it with different meaning.
It is the only native grouping axis left when sub-issues are taken. GitHub allows one parent per issue. In the textstrata case the roadmap issues were already native sub-issues of a cross-repo programme tracker (QuantEcon/project-translation#49), so claiming them as sub-issues of the local plan was not possible without breaking that hierarchy. Milestones grouped them inside the repo while the cross-repo parentage stayed intact — a situation any repo whose work belongs to a programme tracker will hit.
First instance
QuantEcon/textstrata#8 is a phased work plan produced from a repository audit. Its stage milestones were created and assigned on 2026-08-25:
The tracker issue itself was left unmilestoned, since it spans all three stages — worth confirming as part of the convention rather than leaving to taste.
Where it would be documented
File
Section
Change
qe/skills/workplan-project/SKILL.md
step 4 (draft the work package)
The drafting rules cover labels per QEP-2 but say nothing about milestones. Add the naming rule, and that the plan table's phases are what the milestones mirror.
qe/skills/workplan-project/SKILL.md
step 5 (file it)
The creation order does not create or assign milestones. Add both steps, after the sub-issues exist.
qe/skills/workplan/SKILL.md
"The convention"
Records observed practice pending a QEP. If this is adopted, it belongs in that list alongside the untyped-plan-issues rule.
the planned work-plan QEP
—
qe/skills/workplan/SKILL.md notes that formalising the convention as a QEP is planned; if that is where naming rules should live, this issue is an input to it rather than a skill edit.
Tooling note
Milestones must exist before anything can be assigned to one, and creating them is not covered by every agent surface: in the textstrata run the available tooling could assign a milestone by number but could neither create nor list milestones, so a human created the three by hand and the numbers had to be looked up before assignment. gh can do it directly — gh api repos/{owner}/{repo}/milestones -f title=wp8-stage1 — so if this convention is adopted, workplan-project step 5 should create the milestones itself rather than leaving a manual gap in an otherwise scripted flow.
Open questions
stage or phase?Tracking: sequenced work plan for the Stage 1–3 roadmap textstrata#8's own plan table is organised by "Phase 0–5" while its milestones track the programme's Stage 1–3 — the two divisions are real and distinct there, but a convention should say which one the milestone mirrors, or allow either token.
Cross-repo plans. Milestones are per-repo. When a plan in repo A drives work in repo B, wp8-stage1 in repo B names an issue number that does not exist there. Options: accept the ambiguity, or qualify the token.
Does the tracker carry a milestone? Left unmilestoned in the first instance; needs a stated rule.
Separator and padding.wp8-stage1 as used, versus wp-8-stage-1 or zero-padded forms. Worth fixing so milestone lists sort predictably once a repo has several plans.
Adopt
wp{issue#}-stage{n}milestone naming for work-plan stagesProposal: when a work plan divides its work into stages, give each stage a GitHub milestone named after the work-plan issue that owns it —
wp{issue#}-stage{n}, e.g.wp8-stage1for stage 1 of the plan tracked in issue #8. Adopted ad hoc in QuantEcon/textstrata on 2026-08-25; filing it here to decide whether it becomes the documented convention for all work plans.Why name the milestone after the plan
Milestones are a flat, repo-global namespace with no parent field, so a bare
Stage 1is ambiguous the second a repo has two work plans, and there is nothing in the milestone itself that says which plan it belongs to. Embedding the issue number makes the milestone self-describing and gives the convention four practical properties:wp8-stage1belongs to the plan in TRACKING: work plan 2026-07-22 — rubric v2 quick-wins, merge + email, skill wiring toward the #654 re-test #8, without opening anything.stage-1/stage-2/stage-3labels would sit outside it. Milestones carry percent-complete and an issue list natively, which is exactly what a phased plan wants, so the structure lands without touching the label vocabulary.wp8-*milestones close with it. A genericStage 2would linger and invite a later, unrelated plan to reuse it with different meaning.First instance
QuantEcon/textstrata#8 is a phased work plan produced from a repository audit. Its stage milestones were created and assigned on 2026-08-25:
wp8-stage1wp8-stage2wp8-stage3The tracker issue itself was left unmilestoned, since it spans all three stages — worth confirming as part of the convention rather than leaving to taste.
Where it would be documented
qe/skills/workplan-project/SKILL.mdqe/skills/workplan-project/SKILL.mdqe/skills/workplan/SKILL.mdqe/skills/workplan/SKILL.mdnotes that formalising the convention as a QEP is planned; if that is where naming rules should live, this issue is an input to it rather than a skill edit.Tooling note
Milestones must exist before anything can be assigned to one, and creating them is not covered by every agent surface: in the textstrata run the available tooling could assign a milestone by number but could neither create nor list milestones, so a human created the three by hand and the numbers had to be looked up before assignment.
ghcan do it directly —gh api repos/{owner}/{repo}/milestones -f title=wp8-stage1— so if this convention is adopted,workplan-projectstep 5 should create the milestones itself rather than leaving a manual gap in an otherwise scripted flow.Open questions
stageorphase? Tracking: sequenced work plan for the Stage 1–3 roadmap textstrata#8's own plan table is organised by "Phase 0–5" while its milestones track the programme's Stage 1–3 — the two divisions are real and distinct there, but a convention should say which one the milestone mirrors, or allow either token.wp8-stage1in repo B names an issue number that does not exist there. Options: accept the ambiguity, or qualify the token.wp8-stage1as used, versuswp-8-stage-1or zero-padded forms. Worth fixing so milestone lists sort predictably once a repo has several plans.