Visible Not Accessible¶
Verified against the code · 4996d1ceb770fb4545edebc5fd140792bfb23830 · 2026-10-20
956 D1b-4 (2026-10-20): 1 finding(s) fixed — enforced_by now lists the Add-Information filter (_visibleDomDefs, app.js:9874) that drops a registry-hidden domain as a new-relation target (Document excepted); resolution of existing relations is unaffected. Re-verified against main 4996d1ce.¶
Guarantee¶
A hidden domain remains fully accessible via IAM-gated routes. Domain visibility controls (Layer 1 hidden: true in the registry, or Layer 2 per-user localStorage toggle) are UI/tree-surface controls only — they never gate routing, proxy forwarding, cross-domain relations, global search, or direct /node/{id} access. Node access is always governed exclusively by IAM AccessRules.
Enforced By¶
- domain-registry (hidden field gates only UI surfaces: the tree-fetch filter, the domain-tab render, and the Add-Information Phase-1 relation list — _visibleDomDefs (frontend/app.js:9874) drops a registry-hidden domain's offered_relations, so it is not offered as a new-relation target, Document excepted; never proxy route registration, baseURI resolution or resolution of existing relations)
- frontend-crud (_isHiddenDomainBase is explicitly a UI-only guard; domain-routing.js stays hidden-blind)
Violated By¶
Using d.hidden or getHiddenDomainKeys() as an access gate in routing, proxy forwarding, backend permission checks, or IAM evaluation. The function _isHiddenDomainBase in frontend/app.js is explicitly documented as a UI-only guard; frontend/plugins/domain-routing.js is explicitly hidden-blind.