Record a drill through its own verb, so S15 never counts a deliberate test as a repair
Two ADR 0240 drills recorded with hand-act record --cause drill raised mesh.hand-acts.drill.healer-wanted. hand-act drill (seat verb drill) records them as a person's decision; hand-act record now refuses the cause, so the two recorded before it clear on the next tick and a repair cannot pass for a drill by the word it gives.
This commit is contained in:
@@ -550,3 +550,47 @@ func TestAWalkWaitingFourHoursIsUrgentAndNamesTheWayOn(t *testing.T) {
|
||||
t.Fatalf("it does not say how on: %q", got[0].Summary)
|
||||
}
|
||||
}
|
||||
|
||||
// **A drill is a person's deliberate test, never a repair** — the log of 2026-10-07: two drills of ADR
|
||||
// 0240 recorded through `hand-act record --cause drill` before `hand-act drill` existed raised
|
||||
// `mesh.hand-acts.drill.healer-wanted`. A drill through its own verb never counts, the two recorded
|
||||
// before it clear on the next tick, and the cause word alone on any other verb still counts — whether
|
||||
// an act is a drill is said by the verb chosen, not by a word typed into a repair's cause.
|
||||
func TestADrillIsNoRepairAndItsHealerWantedClears(t *testing.T) {
|
||||
now := time.Date(2026, 10, 7, 12, 0, 0, 0, time.UTC)
|
||||
f := calm(now)
|
||||
f.handActs = []link.HandAct{actOf(now.Add(-26*time.Hour), "hand-act drill", causeDrill),
|
||||
actOf(now.Add(-time.Hour), "hand-act drill", causeDrill), actOf(now.Add(-time.Minute), "hand-act drill", causeDrill)}
|
||||
if got := watchHandActs(f); len(got) != 0 {
|
||||
t.Errorf("drills repeated asked for a healer: %+v", got)
|
||||
}
|
||||
for _, verb := range []string{"push", "conditions silence", "plans close", "a verb nobody listed"} {
|
||||
f := calm(now)
|
||||
f.handActs = []link.HandAct{actOf(now.Add(-26*time.Hour), verb, causeDrill), actOf(now.Add(-time.Hour), verb, causeDrill)}
|
||||
if got := watchHandActs(f); len(got) != 1 {
|
||||
t.Errorf("%s with the cause %q passed for a drill: %+v", verb, causeDrill, got)
|
||||
}
|
||||
}
|
||||
|
||||
store := conditions.NewInMemory()
|
||||
k := conditions.NewKeeper(t.Context(), conditions.Options{Store: store, History: store,
|
||||
Teller: &conditions.Told{}, Now: func() time.Time { return now }})
|
||||
defer k.Close(context.Background())
|
||||
before := []conditions.Observation{{Scope: conditions.ScopeMesh, ID: "hand-acts." + causeDrill,
|
||||
Token: "healer-wanted", Kind: "healer-wanted", Severity: conditions.Warning,
|
||||
Summary: "\"drill\" was repaired by hand 2 times in 14 days"}}
|
||||
if err := k.Reconcile(t.Context(), "S15", before); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if open, _ := k.Open(t.Context()); len(open) != 1 {
|
||||
t.Fatalf("the condition of the build before was not open: %+v", open)
|
||||
}
|
||||
f = calm(now)
|
||||
f.handActs = []link.HandAct{actOf(now.Add(-11*time.Hour), "hand-act record", causeDrill),
|
||||
actOf(now.Add(-30*time.Minute), "hand-act record", causeDrill)}
|
||||
w := &watchdogs{keeper: k, started: now.Add(-time.Hour)}
|
||||
w.see(t.Context(), f)
|
||||
if open, _ := k.Open(t.Context()); len(open) != 0 {
|
||||
t.Fatalf("a healer-wanted for two drills stayed open: %+v", open)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user