replica-placements-162
The platform half of discussion #162 (edge checkout).
Ask 1 lands on the edge, not on titogo's router: on CARLOS the edge owns host routing, and a request for an account host that reaches a non-home box is backhauled (internal/edge/edge.go). So "served locally instead of hairpinned" means the replica box holds a local route row for the account's public host pointing at the replica instance's socket, and backhaul — which only fires on an upstream miss — never runs there. The replica box publishes those entries in its edges file under role "replica", which homemap.go already ignores, so every other box keeps backhauling to the real home and the home map stays single-valued.
Ask 2 is three additive record fields: Role ("" | "replica"), Replicas (the home record's opt-in placement set, the residence gate) and Home (the replica's link to what it mirrors), plus the instance API and CLI that expose them.
Ask 3 needs no new channel. An instance dials a sibling at that box's EIP with the real hostname as SNI, which is what backhaul already does and which bypasses the local edge, so a replica can reach home without landing on itself. The platform supplies the addresses and a per-account key shared by home and its replicas; titogo signs and shapes the lease and drain calls itself.
Steering needs no change: desiredState already emits a latency record per armed edge for every steered host, so buyers already land on the nearest edge.
Design, spec, plan and implementation all run on this branch, each with a Fable review round.
Discussions
- No discussions on this branch yet.
Tasks 15/15 done
- Design sketch reviewed by Fable Done
- Spec written, Fable-reviewed, revised Done
- Implementation plan written and reviewed Done
- Record fields: Role, Replicas, Home (+ validation) Done
- Reconcile mints the replica's public-host rows Done
Activity
- task updated: Branch green on amadan CI, handoff written
- task updated: Security rounds: fail-safe cross-record rails (4 rounds, 3 adversarial reviews)
- claude agent, operated by paul@keymail.dev added task Security rounds: fail-safe cross-record rails (4 rounds, 3 adversarial reviews)
- claude agent, operated by paul@keymail.dev pushed 6166d85e3 #162: why the shared-flat-directory refusal removes where a contested host holds
- claude agent, operated by paul@keymail.dev pushed d270633d1 #162: a refusal is not a withdrawal — the siblings half of the fail-safe rails
- claude agent, operated by paul@keymail.dev pushed f0ea03866 #162: sort order is not authority — a contested host vouches for nothing
- claude agent, operated by paul@keymail.dev pushed adf29ebdb #162: the shadow-record bypass — key the record map by identity, not by host
- claude agent, operated by paul@keymail.dev pushed 1a5f819f2 #162: the branch review's five findings — tenancy rails, gate, channel door
- claude agent, operated by paul@keymail.dev pushed 9308de551 #162: branch review findings, and the three that are spec text not code
- task updated: Instance API and CLI expose role/home/replicas
- task updated: Docs: cli.md, spec cross-references
- claude agent, operated by paul@keymail.dev pushed 73dfb4615 #162: role and home on the instance surface, CLI and docs
- claude agent, operated by paul@keymail.dev pushed 8682268b7 #162: spec — the flat layout cannot carry the siblings file safely
- task updated: Sibling addressing + per-account key in unit env
- claude agent, operated by paul@keymail.dev pushed 7114b7626 #162: the siblings file — addresses and per-pair keys, no new channel
- claude agent, operated by paul@keymail.dev pushed 7b62b624d #162: console doors for replica creation, the opt-in and its refusals
- task updated: Edge: foldHomes ignores role replica; no-backhaul proof
- claude agent, operated by paul@keymail.dev added task Edge: foldHomes ignores role replica; no-backhaul proof
- claude agent, operated by paul@keymail.dev pushed e3b5cdc9f #162: foldHomes ignores role replica as a decision, not an accident
- task updated: Edges file publishes role=replica entries
- claude agent, operated by paul@keymail.dev pushed 112f5e072 #162: publish the replica alias as role replica, stamp or no stamp
- task updated: Reconcile mints the replica's public-host rows
- claude agent, operated by paul@keymail.dev pushed e5c88872b #162: mint a replica route with its home's channel and replica_of
- task updated: Registry: routes.replica_of column and SetReplicaOf
- task updated: Domains pass derives the replica alias (account host + custom domains)
- task updated: Record fields: Role, Replicas, Home (+ validation)
- task updated: Certificates: no code needed (spec §8 records why)
- claude agent, operated by paul@keymail.dev added task Registry: routes.replica_of column and SetReplicaOf
- claude agent, operated by paul@keymail.dev added task Domains pass derives the replica alias (account host + custom domains)
- claude agent, operated by paul@keymail.dev pushed 4fb82f27b #162: the domains pass derives a replica's alias from replica_of