Skip to content

feat(read-only-viewer): editor viewer mode + kicadSetReadOnly binding#36

Closed
matejcsok-ee wants to merge 1 commit into
mainfrom
feature/read-only-viewer
Closed

feat(read-only-viewer): editor viewer mode + kicadSetReadOnly binding#36
matejcsok-ee wants to merge 1 commit into
mainfrom
feature/read-only-viewer

Conversation

@matejcsok-ee

Copy link
Copy Markdown
Contributor

Part of the read-only-viewer feature (GPL editor half). Depends on:

  • kicad-source-mirror#8 (PCBJAM_READ_ONLY gates — bumped here)
  • pcbjam-shared#1 (access field — bumped here)

Server-side enforcement lives in the closed pcbjam-private PR.

What

Anonymous / non-member sessions open PUBLIC projects as read-only viewers.

  • kicadSetReadOnly(bool) embind (merged kicad_editor + pcbnew/eeschema/pl_editor TUs): sets the PCBJAM_READ_ONLY flag + Prj().SetReadOnly (greys the setup dialogs). Polls until the frame exists.
  • read-only-mode.tsresolveReadOnly(access, win): server access:"read" or ?readonly=1 (narrow-only; there is deliberately no ?readonly=0). ToolPage threads it in and omits saveBytes (MEMFS-only saves).
  • WasmTool: chrome force-hidden with a "View only" pill (toggle + Cmd+\ disabled), presence/cross-app/comments/drift skipped, save-driven room writers unregistered, wasm frame locked via kicadSetReadOnly failing CLOSED (a stale bundle without the export → boot error overlay, never a writable frame).
  • collab: bindKicadCollab {readOnly} — inert DOWN hook, never seeds a room; the UP observer + adopt branch stay live so peer edits render. index.ts / sheet-manager thread readOnly and drop the initial awareness state (invisible observer).
  • Reference backend emits access:"write".

Tests

  • tests/web/read-only-editor.spec.ts — viewer + writer two-tab: chrome-less viewer, real-path click/Delete inert, zoom alive, viewer never seeds. (The live-stream assertion is a documented test.fixme — blocked by a pre-existing applyItems layer-count regression at the current kicad rev, verified failing for two fully writable tabs; see docs/features/read-only-viewer in the pcbjam-private PR.)
  • Unit: read-only-mode.test.ts, kicad-binding.test.ts read-only cases.

🤖 Generated with Claude Code

https://claude.ai/code/session_012DN9py5GuPdExaaFzE4k27

@vercel

vercel Bot commented Jul 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
pcbjam Ready Ready Preview, Comment Jul 10, 2026 7:40pm

Request Review

Anonymous / non-member sessions open PUBLIC projects as read-only viewers.

- kicadSetReadOnly(bool) embind (merged kicad_editor + pcbnew/eeschema/
  pl_editor TUs): sets the PCBJAM_READ_ONLY flag + Prj().SetReadOnly (greys
  the setup dialogs). Polls until the frame exists.
- read-only-mode.ts: resolveReadOnly(access, win) — server `access:"read"` or
  ?readonly=1 (narrow-only; no ?readonly=0). ToolPage threads it in, omits
  saveBytes (MEMFS-only saves).
- WasmTool: chrome force-hidden with a "View only" pill (toggle + Cmd+\
  disabled), presence/cross-app/comments/drift skipped, save-driven room
  writers unregistered, wasm frame locked via kicadSetReadOnly failing CLOSED
  (stale bundle → boot error, never a writable frame).
- collab: bindKicadCollab {readOnly} — inert DOWN hook, never seeds a room;
  UP observer + adopt stay live so peer edits render. index.ts / sheet-manager
  thread readOnly + drop initial awareness (invisible observer).
- Reference backend emits access:"write".

Bumps kicad + web/pcbjam-shared to the read-only-viewer commits.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012DN9py5GuPdExaaFzE4k27
@matejcsok-ee

Copy link
Copy Markdown
Contributor Author

Landed on main (pcbjam at 93af288) via the finish flow — fast-forwarded, not a GitHub merge, so it shows Closed not Merged. Main CI (full build + KiCad e2e) is green after a flaky-3D-suite re-run. Closing as landed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant