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:

  1. Different URL pattern, so read and write surfaces never overlap by accident.
  2. All write paths globally disabled — buttons hidden, not just visually disabled. The realtime channel sends sync frames in one direction only.
  3. 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.
Source: wiki/content/canon/cv-read-only-view.md