oficina / home Public

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

carloku.com is the console and product brand; apps serve at
<app>.<sqid>.<apps-domain>, hosted apps-domain oncarlos.com. Account
oficina, sqid bds. Both origins are distinct oncarlos.com hosts under it.

Adds ruling 13 and the warning the correction exposed: never widen the RP
ID to a registrable suffix. WebAuthn permits a suffix of the origin's
hostname, so oncarlos.com would be accepted — and it is shared by every
Carloku tenant, which would scope this suite's credentials across other
people's apps. The RP ID is the full host, asserted by a test.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01APtNStXDZ5H2fAc1ZuGqtS
Paul Campbell pushed by paul@keymail.dev a26f821653518ac2774dd4286015a33def48446e parent 68c055c
1 file changed, +14 −3
  • docs/superpowers/specs/2026-08-30-home-design.md +14 −3

No CI script — run details

diff --git a/docs/superpowers/specs/2026-08-30-home-design.md b/docs/superpowers/specs/2026-08-30-home-design.md
index 0b971dc..751c7cf 100644
--- a/docs/superpowers/specs/2026-08-30-home-design.md
+++ b/docs/superpowers/specs/2026-08-30-home-design.md
@@ -34,6 +34,7 @@ blind, replaceable* — and `AGENTS.md` opens with this rule verbatim.
| # | Ruling | Rejected | Who, when |
|---|---|---|---|
| 1 | **One RP: the home's credential origin. Instances never enroll passkeys** | Per-instance passkeys (three teams = three credentials) | Paul, 2026-08-30 |
+| 13 | **Provisional origins are `oncarlos.com` hosts under account `bds`; the RP ID is always the full host** — §4 | `carloku.com` (the console brand, not the apps domain); a suffix RP ID | Corrected 2026-08-30 |
| 2 | **Split origins: credentials and directory on different hostnames** | One origin, mitigated with strict rendering + CSP | This session, 2026-08-30 |
| 3 | **Directory is a blind index: `HMAC(pepper, lowercased address)`** | Readable addresses; a sealed per-person vault blob | This session, 2026-08-30 |
| 4 | **The home hashes; instances never hold the pepper** | Instances hashing (a suite-wide secret on every instance) | This session, 2026-08-30 |
@@ -169,9 +170,19 @@ because it is not the same origin.
wanting to render account-authored content on the credential origin is
refused, and this sentence is the reason.
-**Provisional hostnames (Paul, 2026-08-30):** both origins are carloku.com
-subdomains for now, which **schedules** the RP rename drill rather than
-avoiding it — §5.5.
+**Provisional hostnames (Paul, 2026-08-30; corrected same day).** The
+account is `oficina`, sqid **`bds`**. Default addresses are
+`<app>.<sqid>.<apps-domain>`, and the hosted apps-domain is
+**`oncarlos.com`** — *not* `carloku.com`, which is the console brand
+(`console.carloku.com`) and appears nowhere in `platform.md`. Both origins
+are therefore distinct `oncarlos.com` hosts under `bds`. Using them now
+**schedules** the RP rename drill rather than avoiding it — §5.5.
+
+**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,
+always**, and it is asserted by a test rather than remembered.
---