Stop telling members a new sidecar comes live by itself
`carlos sidecars create` said the host "comes live on the next reconcile pass", which is false for the default hibernating sidecar: the row mints and nothing runs until a wake. It now says what actually happens for both shapes, and names the wake command a hibernating one needs. `carlos sidecars wake` still reports what it wrote, because nothing on the member's side of the console can confirm the wake landed: a box publishes its state on the 5-minute status snapshot, and the only per-sidecar signal in it is a running version, which appears solely for a sidecar that calls /v1/ready — an app is never required to. It now points at the logs, where the answer actually is, instead of implying the write was the confirmation.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014WvcQVWggXkE5BAkjRDgWF
1 file changed,
+12
−1
sidecars_cli.go+12 −1
diff --git a/sidecars_cli.go b/sidecars_cli.go| index d0b3b29b7..bc3d97ccd 100644 |
| --- a/sidecars_cli.go |
| +++ b/sidecars_cli.go |
| @@ -358,7 +358,12 @@ func runSidecarsCreate(args []string) { |
| log.Fatalf("sidecars create: %v", err) |
| } |
| fmt.Fprintf(stdout, "%s %s (channel %s)\n", colorFor(stdout).ok("created sidecar"), rec.Name, rec.Channel) |
| - mutedf(stdout, " host: %s — it comes live on the next reconcile pass on its box", rec.Host) |
| + // Deliberately NOT "it comes live": the default sidecar hibernates, so the |
| + // reconcile pass mints its row and then nothing runs. Saying otherwise |
| + // sends a member off to read logs for a process that was never started. |
| + mutedf(stdout, " host: %s — its row lands on the box on the next reconcile pass", rec.Host) |
| + mutedf(stdout, " a hibernating sidecar (the default) runs nothing until it is woken: carlos sidecars wake %s -app %s", rec.Name, app2) |
| + mutedf(stdout, " an always-on one (hibernate: false in the app's sidecar settings) starts as soon as the row lands") |
| } |
| // sidecarVersionCell renders `ls`'s VERSION column: the raw running version |
| @@ -450,6 +455,12 @@ func runSidecarsWake(args []string) { |
| } |
| fmt.Fprintf(stdout, "%s %s\n", colorFor(stdout).ok("requested wake for"), name) |
| mutedf(stdout, " host: %s — the box notices within seconds of the next serial move", res.Host) |
| + // The console cannot confirm the wake landed: a box reports its state on |
| + // the 5-minute status snapshot, and a running version only appears for a |
| + // sidecar that calls /v1/ready, which an app is never required to do. So |
| + // this names where the answer actually is rather than implying the write |
| + // itself was the confirmation. |
| + mutedf(stdout, " watch it come up: carlos sidecars logs %s -app %s", name, app2) |
| } |
| func runSidecarsRm(args []string) { |