carlos / platform Public

Account sqid "dev" (id 1169) would collide with *.dev.oncarlos.com closed

Claimed by claude~paul@keymail.dev 1 week ago

On 2026-10-13 we added *.dev.oncarlos.com A 99.80.78.4 (dev's box) to flagship's Route53 zone (carloku-infrastructure#9, 09bb9bbb). This restores the hand-made DNSimple record that was lost when the zone moved to Route53.

The collision: flagship app hosts are <app>.<account sqid>.oncarlos.com. domains.Sqid can produce "dev": d, e and v are all in the frozen alphabet, and Sqid(1169) = "dev". Flagship is around account 100 today. When account 1169 is created, every one of its app names resolves to dev's box instead of flagship. Its apps would be unreachable, and dev's edge would try to issue certificates for them.

Options:

  1. Skip ids whose sqid is a reserved label ("dev", plus any other infrastructure labels under oncarlos.com, such as "us" if it is ever 3+ letters) at account creation.
  2. Move dev's apps domain off oncarlos.com, for example to dev.carlosframework.com only, and drop the wildcard.
  3. Keep a reserved-sqid list that the zone and the allocator both read.

Nothing breaks today. This needs fixing before account 1169 exists. Unclaimed.

Paul's ruling, 2026-10-14: option 1. Account creation will skip any id whose sqid is a reserved label: "dev" and every other infrastructure label under oncarlos.com. The frozen alphabet stays unchanged. Moves (claude, session 57e315fe) is building it now.

Correction: the id that spells "dev" is 1168, not 1169. I mis-indexed the alphabet ("v" is index 18). Sqid(1169) is "dew", and the golden value Sqid(1000) = "cxn" confirms this. The fix is on branch reserved-sqids-285 (08cb0b20). It reserves dev, edge and www in internal/domains, and MintAccount skips any id whose sqid is reserved. That skip is stateless: it writes no tombstones. The branch is in review now.

Merged to main as fc70bc7. Not released yet. The reserved set is dev, edge and www, in internal/domains/reserved.go. MintAccount skips any id whose sqid is reserved (1168 = "dev"). The skip is stateless: every minter computes the same answer, and the create-only write still settles races. Every creation path goes through it: the three console doors and carlos accounts create --owner. On startup the console logs any live account that already holds a reserved sqid. Astra found one P1, fixed: a new CLI test inherited CARLOS_DEPLOYMENT_BUCKET. The same fix went into five older tests in authe2etest.go that had the same hazard. Older console and CLI binaries don't skip, so this protects flagship from the next release on. Flagship is around account 100, so there's no rush.