Skip to content

D220 — sync states the server change; only status and doctor recommend reconnect

Decision. The D142 server-change line has two wordings, one detection. status and doctor keep theirs verbatim — the fact plus "run cartographer reconnect to rebuild the client configuration". sync prints its own: the fact, that this run re-applies the current manifest, and that reconnect is needed only for files an older version wrote under names no longer in the managed set. No imperative. The line keeps its position, before the sync output.

Why. sync printed the status/doctor sentence ahead of doing the work that makes it moot. Read in order, an unhedged imperative on the first line is a prerequisite: observed on a client upgraded from a v0.12.2-era state to a v0.13.0 server, where the notice printed, the sync completed, every provider came back in-sync, and reconnect — a full disconnect + connect — was never needed. The cost is that one fact now has two sentences that can drift apart. It buys the reader, and above all the agent that runs cartographer sync at every session start through the bootstrap hook, a line it can act on correctly without having run the command first.

Alternatives rejected. - Move the line after the sync result. When a sync fails, the fact that the server changed is the most useful thing on screen, and it would be buried under the failure or lost with it. - Change the one sentence for all three commands. status and doctor only observe; naming the repairing command is the single actionable thing they can offer (D143). Softening their wording would remove the remedy from the two places that exist to point at it. - Drop the line from sync entirely. D142's invariant is that the change is reported; a silent reconfiguration against a different server is the failure mode that decision exists to prevent.

Consequences. The detection — the version comparability rule, the lockfile read, the per-provider dedup, one line per invocation — stays in a single function, and both wordings are formatting on top of it: an edge case fixed once is fixed for both. A future change here must keep the two sentences distinct; the test asserting the sync wording contains no "run cartographer reconnect" is what stops them collapsing back. No flag, config or protocol change: user-visible text only.