MF-7: Label + milestone bootstrap across forges #298
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks#298
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
As an operator, I want the first-run label + milestone reconcile to work against Forgejo, GitHub, and GitLab, producing the same canonical
area:*/type:*set on every forge so that routing and milestone queries work uniformly.Acceptance criteria
Labels reconcile
labels.tsreconcile loop iteratesconfig.repos, callsforgePort.listRepoLabelsand the adapter's label-create surface per forge."d97706"(no#). The adapter layer handles translation (Forgejo wants#-prefixed; GitHub/GitLab want bare hex).Milestones
ForgePortwithlistMilestones+createMilestone.just labels-bootstrapcreates any missing milestone on the active repo set.Known-quirk documentation
Tests
labels.test.ts: reconcile on each forge stub produces the identical canonical set (verified vialistRepoLabels)."d97706"→ adapter → round-trip listing → domain"d97706".createMilestoneidempotent across re-runs.Out of scope
References
specs/multi-forge.md§ MF-7.apps/server/src/infrastructure/forge/labels.ts— current reconcile entry.Dependencies
ForgePortsurface (addslistMilestones/createMilestone); Forgejo adapter implements them first, others inherit the contract and close it in their adapter stories.