carlos / platform Public

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
Paul Campbell pushed by paul@keymail.dev 3f3070ac73b90510a014829b2d6bc83e16e8de5c parent 0646679
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) {