Repository navigation
Enforce Viewer access and protect local text edits - #1046
Merged
Merged
Conversation
callumalpass
marked this pull request as ready for review
October 29, 2026 14:48
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Oct 29, 2026
callumalpass
force-pushed
the
fix/viewer-write-refusal
branch
from
October 29, 2026 16:49
8ab0f32 to
6e95e95
Compare
Partition refused definitions before catalog preparation, share hold lookups, and bound hold commits by count and text bytes. Keep ordinary edits in the daemon queue and retain original observation ownership on failures. Keep stable grant identity and actionable shared error guidance. Safe Viewer-only copy and action-loop trims still leave the application SDK entry slightly above its 196 KiB regression tripwire. Set the measured-size ceiling to 197 KiB rather than weakening copy or handover correctness; the thin client remains capped at 68 KiB.
callumalpass
force-pushed
the
fix/viewer-write-refusal
branch
from
October 29, 2026 18:42
dd37121 to
76d642d
Compare
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.
Viewers could make locally visible Editor changes and disk edits that stayed pending and could sync after an upgrade. The Editor shaped controls from the local Host grant, which reported Owner, although the SDK already exposes the collection membership role. Local Host submission and disk capture also bypassed that role boundary.
Evidence: R3-4, R3-4b.
Changes:
Rebase and SDK size follow-up:
8ef11cde454f6fc45a3e86f42c328fca328551b4, including Fix daemon sync progress and connection status #1042 sync status/progress, Prepare collection mode controller and service readiness #1033 collection-mode readiness, and fix: propagate deleted collections to joined computers #1041 collection-deletion propagation. The last rebase resolved only adjacent desktop tests and SDK test imports; a range comparison confirms the Viewer production patches replayed unchanged. Ordinary edits keep the bounded daemon queue and indexed pending lookup. Viewer and held-path text observations are partitioned before catalog preparation and become durable holds before the scan returns, preventing an upgrade between scan and drain from silently submitting them.read_onlyis registered in the user-facing problem catalog. Late receipt/await regressions isolate the receipt from valid automatic status pushes, retaining the existing retired-session guard. Stablehelloidentity is preserved through direct grant field comparisons, including UUID-bearing grants.Validation on final rebased source:
rcargo build --locked -p mdbn-daemonpassed. All 45 replica disk tests passed on the final runtime, including Fix daemon sync progress and connection status #1042's scan/batching regressions and Viewer explicit-choice holds. Replica all-target Clippy with warnings denied and runtime architecture (27 crates) passed.rpnpmunder Node 24.13.1 using fresh WASM built byrcargofrom the exact final runtime: all 167 Vitest files passed (2,111 tests; one Git-history-dependent test skipped because the builder omits.git), plus all 20 Node tests. SDK typecheck and build passed.npm run sizepassed: root SDK 196.1 KiB gzip / 757.6 KiB raw against the justified 197 KiB ceiling; thin client 67.3 KiB gzip against the unchanged 68 KiB ceiling.ci:local --nodepassed build, typechecks, tests, generated/release checks, dependency audit, and package audit. This includes all 888 Editor tests. Its only failing step was architecture, because the remote runner omits Git metadata; the final local architecture check passes. The fresh desktop renderer build and all 19 isolated mocked Chromium UX tests passed, including both the deleted-collection/skipped-file notice and explicit Viewer discard confirmation.ci:local --rustattempt on the preceding rebase encountered Rust 1.99 Clippy warnings in unchanged files and a linker failure reportingfailed to write to an output file. Disk full?/Bus error. Root Rust sources and its CI harness are identical across the final rebase. A separate root workspace/all-target Clippy run with CI's Rust 1.94 and warnings denied passed. These limitations are not clean-main rerun claims.pnpm e2e --no-prepareattempt stopped at the missing local clientdist/crypto-entry.jsprerequisite. No production or personal daemon/desktop was used. Full E2E/artifact qualification is still a release prerequisite.Follow-ups / release prerequisites: