Build either menu WordPress-style: drag pages in, nest into multiple levels, reorder, remove, and assign which hats can see each item. Pure App Shell is the site-wide left menu (pure-appshell.js); Admin App Shell is the menu inside /pure-admin (admin-appshell.js). Stored in pure_nav_tree.
Moving between menus also sets the page's app shell — primary items get the pure shell, admin items get the admin shell. Public full-screen pages stay untouched.
One row per link. Label, order, on/off. The pure shell reads this live (mcp_nav_modules) and the committed snapshot is regenerated from it by tools/nav-snapshot-build.mjs --write.
Takes the resolved tree (the shipped tree plus any Nav Studio overrides in this browser) and upserts it into
pure_nav_modules — the rows listed above. Admin only, and it tells you when a group carries no
usable pages instead of removing it. Editing the tree itself still happens in Nav Studio.
Every registry page that is not in a family and is not parked waits here. A page may not stay. This is the only spine whose health is measured by shrinking, so the count above is the number to drive down.
Placing a page writes mcp_spine_page_set — the same staff-gated function the spine atlas uses. Waiting pages carry no declared shell: the safe floor is how they are treated, not a decision recorded on their behalf. You declare it when you place it.
Loading the queue…
Placement belongs here; the registry belongs to Site Control. Both call the same functions — a second door is never a second implementation.
Loading…