carlos / platform Public

host: the status tick publishes the self-serve block

statusLoop reads the box id once (the edges writer's value) and fills
Probes.BoxID, Lanes (CARLOS_MOVE_LANES) and Hosts (the armed worker's
per-host facts) each tick through selfServeStatusProbes; private Metrics
only.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev 0f89078198c45af956c237b50544c2ea4072b667 parent ea8fc80
1 file changed, +9 −0
  • internal/host/agent.go +9 −0
diff --git a/internal/host/agent.go b/internal/host/agent.go
index e9d7086c3..db43a997e 100644
--- a/internal/host/agent.go
+++ b/internal/host/agent.go
@@ -3739,6 +3739,11 @@ func statusLoop(reg *registry.Registry, svc *activator.Service, buildStates func
log.Printf("agent: %v โ€” heartbeat will publish under the hashed pseudonym instead", err)
}
+ // The box id the edges file publishes (edgesFileLoop's box), which a
+ // self-serve move pins a participant by: read once, as the edges writer
+ // reads it.
+ selfBoxID := metricsBoxLabel(os.Getenv, readMachineID())
+
s, target, err := openStatusStore(ctx, os.Getenv)
if err != nil {
if errors.Is(err, errNoStatusStore) {
@@ -3911,6 +3916,10 @@ func statusLoop(reg *registry.Registry, svc *activator.Service, buildStates func
// The update-settings protocol this box enforces, and root's last
// decision per instance (settings spec ยง4.3). Private Metrics only.
fillUpdateProbes(&p, reg, release.OptDir())
+ // The self-serve move's block (self-serve moves plan 2 Task 6): the
+ // box id, the staging lanes and, from the armed moves worker, every
+ // instance's lifetime, replica and files facts. Private Metrics only.
+ selfServeStatusProbes(ctx, &p, armedMovesWorker.Load(), selfBoxID, os.Getenv, routes, time.Now())
// A fleet box (CARLOS_FLEET set) never gets here as a contender: it
// self-reports only, never attempting the election at all โ€” no