Fixed on branch route-replication-flag. CI green.
Built the smallest useful version you described, and deliberately not the design question you left open.
carlos route --host seapointish.bag.oncarlos.com --replication daily carlos route --host ... --replication - # back to the default
The column is visible at the same moment it became settable, which was the other half of the complaint: REPL in the box-local carlos instances, and REPLICATION in the console-backed carlos routes (additive on the wire). Both NAME the empty value rather than dashing it — it prints as default — for the reason your measurement gives: this is the column where "no answer" was 97% of a day's replica traffic, so a blank cell would be the same silence in a different font.
Three things worth flagging, one of which was a live bug sitting under the feature:
Upsert was a plain overwrite on replication. So even with a setter, the provisioning reconciler — which mints routes from instance records, and records carry no class — would have returned your daily route to the every-second default within seconds of the next serial bump. Silently, at 100x the traffic the setting was chosen to avoid. It now preserves a non-empty value, joining environment, caps, tunnel, provisioned, seed, unit and fleet_box. This repo's "consumer list is everything that PARSES the shape" rule, arriving for the eighth time.
The vocabulary moved to internal/registry and the activator's constants are now aliases of it. Two independent spellings of the same three strings is how a setter and a reader drift into disagreeing about what daily means, and SetReplication validates against it — replicationSyncInterval answers an unknown class with litestream's default, so an accepted --replication dayly would be a route that quietly never left the most expensive rung.
One rail: a route that does not hibernate is refused. The class is read in exactly one place, the activator's wake path, and /etc/litestream.yml deliberately EXCLUDES hibernating databases and covers everything else at its own interval. Setting a rung on a non-hibernating route would write a column nothing reads — the same silent no-op the missing door was.
Not decided: whether a member may pick a rung, or whether it belongs to a plan tier. You filed that as a real design question and it still is; the loss window is a durability promise the platform makes, and daily means up to a day of writes lost with the box. This is the operator's door only, and nothing in it forecloses either answer.
Also unaddressed, and still true: internal/ops/litestream.go justifies its 7-day snapshot retention as "files measured in megabytes", against a database measured in hundreds. Worth its own thread rather than a quiet change to a retention budget.