The dataset resources an instance's active mutation guards can live in: the
engine's own state dataset (self-guards on the instance) plus every dataset a
currently-observed content ref points at (a guard co-locates with the subject
it locks). documents is the session's watch-set — the workflow-scope refs +
the open stage's refs — which is exactly where guards that can deny right now
live (deployed on stage entry, deleted on exit). Deduped by project+dataset;
non-dataset: refs (canvas / media-library / dashboard) are skipped (guards
are dataset docs). Drives the reactive observeGuards fan-out so the guard
stream spans those resources, not only the engine's dataset.
It does NOT span datasets named only by a closed prior stage's stage-scoped
refs: those guards are already deleted, so a current-locks view omits them by
design. The engine's all-stages housekeeping (guardsForInstance) is
the path that walks every stage.
The dataset resources an instance's active mutation guards can live in: the engine's own state dataset (self-guards on the instance) plus every dataset a currently-observed content ref points at (a guard co-locates with the subject it locks).
documentsis the session's watch-set — the workflow-scope refs + the open stage's refs — which is exactly where guards that can deny right now live (deployed on stage entry, deleted on exit). Deduped by project+dataset; non-dataset:refs (canvas / media-library / dashboard) are skipped (guards are dataset docs). Drives the reactiveobserveGuardsfan-out so the guard stream spans those resources, not only the engine's dataset.It does NOT span datasets named only by a closed prior stage's stage-scoped refs: those guards are already deleted, so a current-locks view omits them by design. The engine's all-stages housekeeping (
guardsForInstance) is the path that walks every stage.