Knowledge base: progress counts an issue done only once its fix is delivered, and says every gap (issue 1947, review round 1)
mesh/delivery merged: source.main moved to novox/mesh-catalog@26908a89506f
mesh/delivery-group group feat/1947-progress merged: every member is merged
mesh/check pass 87fe2c45cfed on 26908a89506f | carried from 27a7757b970e, hq 3a5c4c7c4d9c | unit 2091 run, 2327 kept, 6 skipped | integration 2112 run…
mesh/delivery merged: source.main moved to novox/mesh-catalog@26908a89506f
mesh/delivery-group group feat/1947-progress merged: every member is merged
mesh/check pass 87fe2c45cfed on 26908a89506f | carried from 27a7757b970e, hq 3a5c4c7c4d9c | unit 2091 run, 2327 kept, 6 skipped | integration 2112 run…
A resolved issue whose delivery is held or failed is stuck, one merged and not delivered is moving; a row the tracker did not answer, an answer that does not read and linked issues cut by the list's limit are said as warnings instead of passing silently.
This commit is contained in:
@@ -247,9 +247,10 @@ func TestIssueStatesAndTheirRollUp(t *testing.T) {
|
||||
why string
|
||||
counts bool
|
||||
}{
|
||||
{1942, StateDone, "resolved", true},
|
||||
{1946, StateDone, "resolved · fix merged, not delivered: mesh-catalog#475", true},
|
||||
{1906, StateDone, "resolved · held: mesh-delivery#39", true},
|
||||
{1942, StateDone, "resolved, delivered", true},
|
||||
{1943, StateDone, "resolved, nothing to deliver", true},
|
||||
{1946, StateMoving, "resolved · fix merged, not delivered: mesh-catalog#475", true},
|
||||
{1906, StateStuck, "resolved · held: mesh-delivery#39", true},
|
||||
{1945, StateMoving, "fixing since", true},
|
||||
{1049, StateStuck, "worker fix-chain-cat@shanks stale since", true},
|
||||
{1126, StateWaiting, "open, needs a decision", true},
|
||||
@@ -261,6 +262,16 @@ func TestIssueStatesAndTheirRollUp(t *testing.T) {
|
||||
t.Errorf("issue %d: %s %q (counts %v), want %s %q", c.n, it.State, it.Why, counts, c.state, c.why)
|
||||
}
|
||||
}
|
||||
// The other delivery lines a resolved issue carries on the live tracker (981, 1290 and 1235 on 2026-10-26).
|
||||
for line, state := range map[string]string{
|
||||
"fix not delivered: mesh-catalog#357 stopped:": StateStuck,
|
||||
"fix not delivered: mesh-catalog#389 failed:": StateStuck,
|
||||
"nothing heard from the delivery of mesh-delivery#5": StateWaiting,
|
||||
} {
|
||||
if it, _ := issueItem(trackerRow{Number: 1, Status: "resolved", Delivery: line}); it.State != state {
|
||||
t.Errorf("resolved with %q: %s, want %s", line, it.State, state)
|
||||
}
|
||||
}
|
||||
at := func(h int) *time.Time { t := time.Date(2026, 10, 26, h, 0, 0, 0, time.UTC); return &t }
|
||||
for _, c := range []struct {
|
||||
name string
|
||||
@@ -298,11 +309,14 @@ func TestProgressOfADesignMinimalAndDetailed(t *testing.T) {
|
||||
if seats.asked["seat:issue-tracker.list"] != 1 || seats.asked["seat:mesh-delivery.deliveries"] != 0 || seats.asked["seat:issue-tracker.get"] != 0 {
|
||||
t.Fatalf("minimal asked %v", seats.asked)
|
||||
}
|
||||
if w := strings.Join(p.Warnings, "\n"); !strings.Contains(w, "the tracker neither answered nor named missing") || !strings.Contains(w, "973, 525") {
|
||||
t.Errorf("a row the tracker did not answer is not said: %v", p.Warnings)
|
||||
}
|
||||
lines := strings.Split(p.Tree, "\n")
|
||||
if !strings.HasPrefix(lines[0], "✗ design 47 · Delivery: from a commit to delivered — ") {
|
||||
t.Fatalf("first line %q", lines[0])
|
||||
}
|
||||
for _, want := range []string{"▶ R6 6/7 1945 fixing since", "✗ 3 fix 0/1 1049 fixing, worker fix-chain-cat@shanks stale since"} {
|
||||
for _, want := range []string{"✗ R6 4/7 1945 fixing since", "✗ 3 fix 0/1 1049 fixing, worker fix-chain-cat@shanks stale since"} {
|
||||
if !strings.Contains(p.Tree, want) {
|
||||
t.Errorf("no %q in\n%s", want, p.Tree)
|
||||
}
|
||||
@@ -311,7 +325,7 @@ func TestProgressOfADesignMinimalAndDetailed(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, want := range []string{"├── ✓ 1946 ", "resolved · fix merged, not delivered: mesh-catalog#475",
|
||||
for _, want := range []string{"├── ▶ 1946 ", "resolved · fix merged, not delivered: mesh-catalog#475",
|
||||
"▶ 1945 The controller still plans", "jschoubben/car-hunter@cc4c8ce12901 ready since 10-26 17:05, waits for its merge",
|
||||
"depends on 1943", "97 notes; last 10-26 17:12 by shanks.node-tools"} {
|
||||
if !strings.Contains(d.Tree, want) {
|
||||
@@ -325,7 +339,7 @@ func TestProgressOfADesignMinimalAndDetailed(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !strings.HasPrefix(m.Tree, "▶ milestone 47/R6 · ") || !strings.Contains(m.Tree, "✓ 1130") {
|
||||
if !strings.HasPrefix(m.Tree, "✗ milestone 47/R6 · ") || !strings.Contains(m.Tree, "✓ 1130") {
|
||||
t.Fatalf("milestone:\n%s", m.Tree)
|
||||
}
|
||||
small, _ := k.Progress(ProgressAsk{Of: "design 47", Detail: DetailDetailed, Bound: LeastBound})
|
||||
|
||||
Reference in New Issue
Block a user