oficina / sheets Public

Rulings 15, 16 and 17 confirmed

Paul, 2026-08-30. One RP at the home is confirmed, with his note recorded
in section 8.1: CARLOS is expected to grow per-instance auth, so this is
a staging post rather than a ceiling. The paragraph names what would
reopen it — sign-in availability becoming a real complaint, a team
needing to authenticate under its own domain for compliance, or CARLOS
shipping per-instance auth with an answer to the N-credentials problem.

That ruling also shrinks the shared gap rather than leaving it. The
cross-origin WebAuthn problem dissolves, because the ceremony finishes at
the home before any assertion exists and nothing crosses an origin. What
remains is that an instance must verify a signed identity assertion and
rastrillo has no helper for it — smaller, still shared with Docs, still
to be filed once.

Version history replays and recomputes rather than logging derived
values, with the slow-restore cost accepted explicitly. And the slice
narrowing is confirmed: charts slips first, conditional formatting
second, and version history's baseline is restore-a-cell-or-range.
Reviewed-By: Fable (dispatched; see spec status line)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01APtNStXDZ5H2fAc1ZuGqtS
Paul Campbell 282b8826c58756afbd5dc78e7609a19d883a1dda parent a49978f
1 file changed, +29 −10
  • docs/superpowers/specs/2026-08-30-sheets-design.md +29 −10
diff --git a/docs/superpowers/specs/2026-08-30-sheets-design.md b/docs/superpowers/specs/2026-08-30-sheets-design.md
index 9655e25..58c868a 100644
--- a/docs/superpowers/specs/2026-08-30-sheets-design.md
+++ b/docs/superpowers/specs/2026-08-30-sheets-design.md
@@ -46,7 +46,9 @@ value reaching the replicated SQLite file or any object storage we write.
| 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 |
-| 15 | **One RP: the home's credential origin. Instances never enroll passkeys** — §8.1 | Per-instance passkeys (three teams = three credentials) | This session, 2026-08-30 — **needs Paul's confirmation** |
+| 15 | **One RP: the home's credential origin. Instances never enroll passkeys** — §8.1 | Per-instance passkeys (three teams = three credentials) | Proposed by this session, **confirmed by Paul, 2026-08-30** |
+| 16 | **Version history replays inputs and recomputes; derived values are never logged** — §4.3 | Logging derived values (instant restore, log grows with fan-out) | Paul, 2026-08-30 |
+| 17 | **Slip order written down: charts first, conditional formatting second. Version history's baseline is restore-a-cell-or-range** — §13 | Holding all eleven at full scope; cutting charts outright today | Paul, 2026-08-30 |
---
@@ -198,8 +200,11 @@ Two record kinds, because conflating them is what made the leak list wrong:
- **Recalc markers** — one row per recalc pass: the triggering event id and
the count of derived cells touched. **Not** the derived values.
-Derived values are not logged, because logging them makes the log grow with
-the *fan-out* of every edit rather than with the number of edits (§4.5).
+Derived values are not logged (ruling 16), because logging them makes the
+log grow with the *fan-out* of every edit rather than with the number of
+edits (§4.5) — in a SQLite file Litestream ships in full, continuously.
+**The accepted cost: restoring an old version of a large sheet is a
+recalculation, so it needs a progress state rather than being instant.**
Restoring a version replays inputs and **recomputes**; that is slower than
reading stored values and it is the only version that stays honest at scale.
@@ -384,6 +389,19 @@ enroll passkeys and never mount `Gate`.
- **`§9.1` call 1 is therefore unambiguous:** the home mints the session,
the instance trusts a signed assertion. The first draft left both plausible.
+**Forward, and recorded so this is a staging post rather than a ceiling
+(Paul, 2026-08-30):** CARLOS is expected to grow support for per-instance
+auth. One RP at the home is the right answer for Sheets now, and it is
+explicitly *not* a bet against per-instance auth later — it is a bet that we
+do not need it yet.
+
+What would make us revisit: sign-in availability becoming a real complaint
+rather than a theoretical one; a team needing to authenticate against its
+own instance under its own domain for a compliance reason; or CARLOS
+shipping per-instance auth with an answer to the N-credentials problem. Any
+of those, and §8.1 is reopened with this paragraph as the reason it was
+always going to be.
+
**Named consequence:** the credential origin is an authority, and a single
point of failure for *new* sign-ins. Existing sessions keep working, and
§9.1.1's hint ruling covers the directory — but sign-in is deliberately not
@@ -800,8 +818,8 @@ waits.
10. Comments
11. **Charts**
-**Scope honesty, from the review.** Ruling 5 is Paul's and stands. What it
-costs: **three of the eleven items are subsystems, not features** — charts,
+**Scope honesty, from the review — narrowing confirmed by Paul,
+2026-08-30 (ruling 17).** Ruling 5 stands; what it costs: **three of the eleven items are subsystems, not features** — charts,
version history (restore semantics, replay, retention), and conditional
formatting (a second expression evaluator plus a rules UI). Naming charts as
the sole slip candidate understated the risk.
@@ -839,11 +857,12 @@ it is a fallback rather than a scramble.
## 15. Open
-- **Ruling 15** (one RP at the home) needs Paul's confirmation — it resolves
- a contradiction, and some resolution is required, but the shape is this
- session's call.
-- **The passkey/assertion gap is one gap with two consumers.** To be
- resolved jointly with Docs and filed once, not twice.
+- **Assertion verification is the remaining shared gap, and it is smaller
+ than the one it replaced.** Ruling 15 dissolves the cross-origin WebAuthn
+ problem — the ceremony finishes at the home before any assertion exists,
+ so nothing needs handing across origins. What is left is that an instance
+ must verify a signed identity assertion, and rastrillo has no helper for
+ it. Docs needs the identical thing. To be settled jointly and filed once.
- **Upstream recording** of `rastrillo doctor`, the pair function and
allocation (§10.1). Until done, all three are unavailable.
- **The platform provisioning credential** — filed as `carlos/platform` #4.