Platform · pre-installed
The shell's menus, as data
Install a package and its front door appears in the top bar. Remove it and the entry goes with it. No platform build either way.

What it declares

Apps — the top-bar dropdown that collects the front doors of the packages installed on this mesh. Each entry is shipped by the package it opens, as a UiContribution node in that package's own partition.

Why a declaration is needed at all

A UiContribution names the menu it joins. The entries are decentral — they live with the package that owns them — but the menu they join has to exist, or the aggregator has nowhere to put them.

That is not a theoretical gap. Six entries (Courses, Tours, Providers & Models, Set up AI providers, Approval Desk, Feedback Inbox) shipped against an undeclared context and rendered nowhere at all: no error, no warning, no missing-area placeholder. scripts/check-menu-contexts.py now fails a PR that adds a seventh.

Who enforces visibility

The compiled aggregator, never the data. A contribution is checked against the viewer's live permissions and a closed gate vocabulary, and can only ever NARROW its own visibility — it cannot widen anything. A menu with no visible entries renders nothing.

Contents

Reconnecting…
The connection to the server was interrupted. Trying to restore it…
Trying again…
The connection could not be restored. Reloading the page…
The server was updated. Reloading the page to pick up the latest version.