The controller no longer subscribes to the alive message: HostBeats, its handler, the heartbeat-gap duration and a fixed silent bound (issue 1183, AC3, AC4, AC5)
mesh/merge-gate head 19e3eac74658 merged into trunk 89cfa9431d8f — pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every …
mesh/repo-check head 19e3eac74658 merged into trunk 89cfa9431d8f — pass: its merge-check.sh passed
mesh/delivery delivered

This commit is contained in:
2026-10-19 02:16:21 +02:00
parent 863db82737
commit 19e3eac746
26 changed files with 174 additions and 160 deletions
+15 -1
View File
@@ -15,7 +15,7 @@ import (
// exists (novox/hq to-be 45 Phase 2, ADR 0227 rule 2).
func TestEveryConsumedKindHasAContract(t *testing.T) {
// What the controller can be handed, from the subjects it is granted and the ones it derives.
subjects := []string{EnrolSubject, BuiltSubject, ReportSubject("anchor"), AliveSubject("anchor"),
subjects := []string{EnrolSubject, BuiltSubject, ReportSubject("anchor"),
ToolsAliveSubject("anchor"), HealthSubject("anchor"), "mesh.mod.postgres.event.provisioner.failing"}
subjects = append(subjects, broker.ControllerFollows...)
subjects = append(subjects, broker.ControllerHears...)
@@ -83,3 +83,17 @@ func TestEveryConsumedKindHasAContract(t *testing.T) {
}
}
}
// 1183/AC3: the controller no longer takes the node-engine's alive message: its subject is no kind, so nothing is
// subscribed to it and nothing hears it. The tool runner's tools-alive stays.
func TestTheAliveMessageIsNoKindTheControllerHears(t *testing.T) { // 1183/AC3
if kind, known := kindOfSubject("mesh.control.anchor.alive"); known {
t.Fatalf("the controller still takes the alive message as %s", kind)
}
if kind, known := kindOfSubject(ToolsAliveSubject("anchor")); !known || kind != KindToolsHeartbeat {
t.Fatalf("the tool runner's tools-alive is %q, %v", kind, known)
}
if _, ok := Contracts["heartbeat"]; ok {
t.Fatal("a contract still names the alive message")
}
}