oficina / docs Public

Record oficina.works as the primary domain

Supersedes the provisional platform-default hosts
(<app>.<sqid>.oncarlos.com under Carloku account sqid bds) with the
suite's own domain:

  id.oficina.works           credential origin / RP
  oficina.works              directory, at the apex
  <team>.<app>.oficina.works one team, one instance, one hostname

The team slot is new: the provisional shape had nowhere to put the
per-team hostname that home spec S7 reserves at enqueue.

The RP rename drill (LegacyRPID + a window sized by the guest tail) did
not have to run. No app in the suite has a passkey.Config yet -- sign-in
is magic-link throughout -- so no credential was ever scoped to an
oncarlos.com host. Moving now was free; moving after passkeys ship is
not.

The full-host RP ID constraint survives the move, with a new reason:
oficina.works as an RP ID would be valid at every host in the zone,
including the directory and each team instance, collapsing the split
origins that home ruling 2 exists to create.

Specs only. No code, no behaviour change.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HJ4p3qTNQqScxS6Z6wp8Pw
Paul Campbell pushed by paul@keymail.dev e047ebdc9f366885bb4c68f63fbcafbe6c6391bd parent 855f95b
2 files changed, +20 −11
  • AGENTS.md +2 −2
  • docs/superpowers/specs/2026-08-30-docs-design.md +18 −9

CI passed — run details

diff --git a/AGENTS.md b/AGENTS.md
index f4f295f..a8a71cd 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -114,8 +114,8 @@ actually breaks is the legacy fallback path, silently: a misconfigured
origin will not show up as "the app looks broken" in ordinary manual
testing with a real browser, which is exactly why it still needs to be
right rather than merely untested. `cmd/docs/main.go` reads `$DOCS_ORIGIN`
-(the platform's real per-instance origin belongs there — spec §9.2's
-`<app>.<sqid>.oncarlos.com`) and falls back to deriving one from `-addr`
+(the real per-instance origin belongs there — spec §9.2's
+`<team>.docs.oficina.works`) and falls back to deriving one from `-addr`
only for local/dev use; with neither set, or with a value that cannot
parse as an absolute `http(s)://host[:port]`, `internal/docs.New` refuses
to start rather than silently defaulting or booting on something
diff --git a/docs/superpowers/specs/2026-08-30-docs-design.md b/docs/superpowers/specs/2026-08-30-docs-design.md
index 4bbe01e..7c5bbd7 100644
--- a/docs/superpowers/specs/2026-08-30-docs-design.md
+++ b/docs/superpowers/specs/2026-08-30-docs-design.md
@@ -597,17 +597,26 @@ Docs never sends a document title to the home.
invention. The window is still sized by the guest tail — the person who
signed in once, months ago, to comment on one document. Docs has far more
of them than Sheets does.
-- **The hostnames, recorded 2026-08-30.** The account is `oficina`, sqid
- `bds`; default addresses are `<app>.<sqid>.<apps-domain>` on the hosted
- apps-domain `oncarlos.com`. So both home origins and every Docs instance
- are distinct `oncarlos.com` hosts under `bds`. (`carloku.com` is the
- console brand and is not this.)
+- **The hostnames, revised 2026-09-03** (home ruling 16, superseding the
+ 2026-08-30 record). The suite's primary domain is **`oficina.works`**.
+ The two home origins are `id.oficina.works` (credentials, the RP) and the
+ apex `oficina.works` (directory); a Docs instance is
+ **`<team>.docs.oficina.works`**, one team to one hostname. Hosting stays
+ on Carloku with `oficina.works` as a custom domain. This replaces the
+ provisional `<app>.<sqid>.oncarlos.com` under account sqid `bds`, which
+ was a hosting artifact. (`carloku.com` was the console brand and was
+ never this.)
+- **The rename cost nothing, because it happened first.** No app in the
+ suite had a `passkey.Config` when the domain moved — sign-in is
+ magic-link throughout — so no credential was scoped to an `oncarlos.com`
+ host. The `LegacyRPID` window above is sized for a *future* move.
- **The RP ID is the full host, always** — a constraint that binds Docs even
though the RP is the home's. WebAuthn permits an RP ID that is a
- registrable suffix of the origin's hostname, so `oncarlos.com` would be
- *accepted* — and it is shared by every Carloku tenant, which would scope
- our people's credentials across other people's apps. Asserted by a test
- rather than remembered.
+ registrable suffix of the origin's hostname, so `oficina.works` would be
+ *accepted* for `id.oficina.works`. The old objection was that
+ `oncarlos.com` is shared by every Carloku tenant; on a zone we own the
+ objection is that a suffix RP ID scopes one credential across every team
+ instance under it. Asserted by a test rather than remembered.
### 9.3 The canvas preference