mesh-issues and mesh-knowledge: milestones are records of the issue tracker, and progress reads them (ADR 0493 §1 to §4, issue 1781)
mesh/delivery merged: source.main moved to novox/mesh-catalog@5a4ac4991395
mesh/delivery-group group feat/1781-milestone-records merged: every member is merged
mesh/check checking 76e4ec4dc680 on 26908a89506f | novox/mesh-catalog#506 in group feat/1781-milestone-records

mesh-issues keeps each design's milestone in the state milestones (history 5), says milestone-set and
milestone-moved, and serves milestones, milestone-set and milestone-move. An issue's milestone is its own link
of kind milestone, so at most one milestone per issue is checked inside the issue's own write; kind commit
links a fixing commit. The triage links no milestone, pull request or commit. import with milestones=N seeds
a design's table once. mesh-knowledge's progress reads issue-tracker.milestones and its table parse is gone.

Squashed from four commits so the branch history does not carry a compiled bundle that was committed by
mistake (6 MB); the path is now in .gitignore.
This commit is contained in:
2026-10-26 18:42:51 +01:00
parent 26908a8950
commit 76e4ec4dc6
24 changed files with 2912 additions and 196 deletions
+18 -1
View File
@@ -215,10 +215,18 @@ const (
LinkDesign = "design"
LinkCondition = "condition"
LinkDelivery = "delivery"
// LinkMilestone is the one milestone an issue belongs to, design/id (ADR 0493 §1, §2).
LinkMilestone = "milestone"
// LinkCommit is a commit that fixes the issue, repository@full sha (ADR 0493 §4).
LinkCommit = "commit"
)
// LinkKinds is every kind, in the order they are told.
var LinkKinds = []string{LinkDuplicates, LinkRelatesTo, LinkDependsOn, LinkPullRequest, LinkDecision, LinkDesign, LinkCondition, LinkDelivery}
var LinkKinds = []string{LinkDuplicates, LinkRelatesTo, LinkDependsOn, LinkPullRequest, LinkDecision, LinkDesign, LinkCondition, LinkDelivery,
LinkMilestone, LinkCommit}
// madeByPeople are the kinds only a person or a session links, never the triage (ADR 0493 §4).
var madeByPeople = []string{LinkPullRequest, LinkMilestone, LinkCommit}
var (
pullRequest = regexp.MustCompile(`^[a-z0-9][a-z0-9._-]{0,99}#[1-9][0-9]{0,6}$`)
@@ -280,6 +288,15 @@ func checkTarget(kind, target string) (string, error) {
case LinkDelivery:
ok, shape = deliveryID.MatchString(t), "a delivery's id as mesh-delivery names it: the repository as owner/name, @ and twelve "+
"characters of its commit, such as novox/mesh-controller@d2e9dc61590f"
case LinkMilestone:
var c string
c, ok = checkMilestoneTarget(t)
if ok {
t = c
}
shape = "a milestone as design/id, such as 47/R6"
case LinkCommit:
ok, shape = commitRef.MatchString(t), "a repository, @ and the commit's full 40-character id, such as mesh-catalog@"+strings.Repeat("0", 40)
default:
return "", fmt.Errorf("kind %q is not a kind of link: one of %s", kind, strings.Join(LinkKinds, ", "))
}