Repository navigation
docs: reconcile private workbook child authorization notes - #851
Merged
Merged
Conversation
Correct the Unreleased Changes.txt claim that multi-sheet import is still 409-refused for private rooms, and record that pre-fix unmarked children remain public until operator backfill.
Keep the import failure alert contract (status + body surfaced to the user) but pin it to the live DO-skew 503 message instead of a server body that private multi-sheet import no longer returns.
Hosted D1 + anonymous access probes on 2026-08-11 found zero private candidate parents among child-shaped rooms, so no remediation is required in production. Reframe invokability facts as why a sweep was never needed, and state the D1 lower-bound limits honestly.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Reconciliation after a shipped fix (PR #850 / merge
c0ba9b3), not new runtime behaviour. Production already runs parent-derived child authorization via immutablemeta:parent. These docs and one client-multi test still described the pre-fix world.What changed
AGENTS.mddecision fix dotcloud deployment #14 — distinguishes RoomDO as the sole authz enforcement boundary from where the verdict originates: top-level rooms use localmeta:access/meta:acl; parented workbook children derive the parent's verdict via immutablemeta:parent(parent RoomDO authoritative via/_do/access, fail-closed; parent marker + local ACL → deny).Changes.txt— had an outright false Unreleased claim that multi-sheet import is unavailable for private rooms (HTTP 409 because sub-sheets would publish as public). That limitation was removed by the ship that closed the exposure. Corrected to “re-enabled for private rooms” withmeta:parentinheritance. The existingmeta:parentsecurity bullet now names the confidentiality exposure it closed and records that operator backfill has not been run.API.md— private-parent multi-sheet import support was already documented in68dcce9; adds the same operator-backfill residual (pre-fix unmarked children stay world-readable until processed; private parents absent from the rooms index so inventory is incomplete).packages/client-multi/test/importWorkbook.test.ts— asserted a409body the server can no longer emit, under a name claiming a private-room refusal that no longer exists. Replaced with the live DO-skew503body (PARENTED_CHILD_DO_SKEW_MESSAGEfrompackages/worker/src/routes/multi-import.ts) and renamed to what it actually pins (server status + body surfaced in the import failure alert). The existing413cell-cap and500body-read-fallback cases are preserved — the contract got broader, not thinner. Coverage remains 100% on all four metrics.Deliberately left alone
packages/worker/src/lib/authorize.tskeeping “absent ⇒ public” is correct for that function — its contract did not change; the parent hop lives above it in RoomDO#effectiveAccess.packages/client-multi/src/importWorkbook.ts:40-45is past tense describing real history (direct sub-room PUT used to mint a public child), not a stale product claim._formdataprivate refusals inpackages/worker/src/routes/assets.tsandpackages/worker/src/lib/ws-handlers.tsremain true and were explicitly out of scope for parent inheritance — they should stay.docs/UI_BACKLOG_843.mdis not onmain(only ondocs/issue-843-assessment); content is issue Suggested UI fixes (with sample from legacy EtherCalc version) #843 UI assessment, not this confidentiality fix.docs/migration/PROD_UPGRADE_PLAN.mdhas no private-import-409 or “ACL inheritance deferred” claim. §4 Step 3c (atomic 100% for new/_do/*RPCs) is current ops truth from the append-import split incident.Test plan
vp run @ethercalc/client-multi#test:coverage— 148/148, 100% statements/branches/functions/linesvp run @ethercalc/client-multi#typecheckvp lintNo deploy — docs + test fixture only; runtime behaviour unchanged.