oficina / sheets Public

The RP is an oncarlos.com host, not carloku.com

Both specs named the provisional relying party as a carloku.com
subdomain. That is wrong: carloku.com is the hosted product and console
brand, and appears nowhere in platform.md. Apps serve at
<app>.<sqid>.<apps-domain>, and the hosted apps-domain is oncarlos.com.
The account is oficina, sqid bds.

Worth catching now because the RP hostname is the single most expensive
string in either document to get wrong — LegacyRPID makes the crossover
survivable but the window is still measured in months and sized by the
guest tail.

Adds the warning the correction exposed: never widen the RP ID to a
registrable suffix. WebAuthn permits an RP ID that is a suffix of the
origin's hostname, so oncarlos.com would be accepted — and it is shared
by every Carloku tenant, which would scope our credentials across other
people's apps. The RP ID is the full host, asserted by a test rather than
remembered.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01APtNStXDZ5H2fAc1ZuGqtS
Paul Campbell 511bad530d90a24a2cb71243f2c29cd97fc1e747 parent a08b38a
1 file changed, +17 −2
  • docs/superpowers/specs/2026-08-30-sheets-design.md +17 −2

No CI script — run details

diff --git a/docs/superpowers/specs/2026-08-30-sheets-design.md b/docs/superpowers/specs/2026-08-30-sheets-design.md
index cb89eef..088b680 100644
--- a/docs/superpowers/specs/2026-08-30-sheets-design.md
+++ b/docs/superpowers/specs/2026-08-30-sheets-design.md
@@ -42,7 +42,7 @@ value reaching the replicated SQLite file or any object storage we write.
| 8 | **Cell fill stored as OKLCH intent; imported hex retained** | Intent only (lossy round-trip); absolute hex (breaks in dark mode) | Paul, 2026-08-30 |
| 9 | **Provisioning: the home queues, an operator drains** | A standing console token in a web-facing app | Paul, 2026-08-30 |
| 10 | **The home is its own repo and its own spec** | Keeping it here; Docs drafting it | Paul, 2026-08-30 |
-| 11 | **Passkey RP is a carloku.com subdomain, provisionally** | A real suite domain now; no passkeys | Paul, 2026-08-30 |
+| 11 | **Passkey RP is an `oncarlos.com` host, provisionally** — §9.7 | A real suite domain now; no passkeys | Paul, 2026-08-30 |
| 12 | **Link sharing is viewer-or-commenter, never editor** | Anonymous link editing | Paul, 2026-08-30 |
| 13 | **Passkey 2FA optional per person, owner-enforceable per team** | Mandatory; none | Paul, 2026-08-30 |
| 14 | **Light/dark is a per-person preference, switchable in the editor** | Per-document; per-team; follow-OS-only | Paul, 2026-08-30 |
@@ -651,9 +651,24 @@ That sweep is a named operator verb, not an emergent behaviour.
### 9.7 The RP rename drill — smaller than the first draft thought
-Ruling 11 puts the RP on a carloku.com subdomain provisionally, which
+Ruling 11 puts the RP on a platform-default host provisionally, which
**schedules** the rename rather than avoiding it.
+**The concrete hosts, corrected 2026-08-30.** The account is `oficina`,
+sqid **`bds`** (`console.carloku.com/a/bds/`). Default addresses are
+`<app>.<sqid>.<apps-domain>` and the hosted apps-domain is **`oncarlos.com`**
+— *not* `carloku.com`, which is the console brand and appears nowhere in
+`platform.md`. So the credential origin is an `oncarlos.com` host under
+`bds`, and earlier drafts of this spec naming carloku.com were simply wrong.
+Worth catching here, because the RP hostname is the single most expensive
+string in the document to get wrong.
+
+**Never widen the RP ID to a registrable suffix on a shared platform
+domain.** WebAuthn permits an RP ID that is a suffix of the origin's
+hostname, so `oncarlos.com` would be *accepted* — and it is shared by every
+Carloku tenant, which would scope our credentials across other people's
+apps. The RP ID is the full host, always.
+
**But the mechanism already exists.** `passkey.Config.LegacyRPID` —
verified at source — is *"a relying party this instance used to be, accepted
for assertions (never registration) so a hostname move doesn't strand