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>
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 |