Read-only mirror and workspace-intelligence projection
Mirror by URL pattern
The /view/[wsId]/... route tree is the sanctioned read-only view of a
workspace. It is not a fork, not a snapshot, not a separate workspace ID —
it is the same workspace projected through a route layer that globally
disables write paths.
The contract from no-user-accounts.md §"Read-only derivative" enumerates
the three properties this surface must satisfy:
- Different URL pattern, so read and write surfaces never overlap by accident.
- All write paths globally disabled — buttons hidden, not just visually disabled. The realtime channel sends sync frames in one direction only.
- Same underlying data. The read-only mode is a projection, not a fork.
The wsId is the same nanoid as the editable workspace — a "mirror id" in
the sense that the same identifier opens two contracts at two URL roots.
The realtime client at /view/... opens the channel in subscribe-only
mode; it never sends ops.
Workspace intelligence projection
components/ui/WorkspaceIntelligence.svelte is the summary panel that
renders inside both the editable and read-only surfaces. It reads the
workspace state through the same SDK that powers the dashboard but only
queries derived projections — never raw editor sub-docs — so the panel is
cheap to mount and safe to expose under the read-only contract.
Today the panel summarises:
- Job counts per phase / per view group
- Pipeline stage health (stuck stages, recent errors)
- Score distribution and unresolved K.O. flags
- Last collaborator activity, grouped by actor class
Adding a new card means adding a new projection to the SDK, not lifting raw sub-doc data into the panel. The panel must remain read-only safe — anything that would require a write button belongs in a toolbar modal, not here.
What this enables
- Share-with-mentor: paste the
/view/...link and a reviewer can read the matrix, score breakdown, and tailored snapshots without any risk of accidental edits. - Read-only collaborators: family members who want to keep an eye on progress without being asked to operate the editor.
- Status reporting: a dashboard the user can pin in a second monitor and ignore.
What this is not
- Not view-only per-collaborator links with expiring tokens. The contract
is "link = full access" or "link = full read" — there is no per-friend
RBAC tier. See
no-user-accounts.md. - Not a snapshot. The read-only view stays live; new writes from editable peers appear in the read-only mirror in real time.
- Not a substitute for the public status page. The status page is a third surface that authenticates by its own bearer and exposes only service health, not workspace contents.