# Stage 15: Shared Frontend Shell and Page Registry

## Runtime Page Registry

`static/pages.config.js` is the build-free runtime representation of
`config/pages.config.json`. It registers every primary workspace plus the internal strategy
tracking workspace. Automated parity checks prevent titles, feature ownership, access labels,
groups, default-page selection, and layout metadata from drifting between the two registries.

Legacy route aliases are resolved by the registry instead of page business code. The registry
describes navigation and presentation metadata only; backend authorization remains
authoritative.

## Shared Shell

`static/shared/shell.js` now owns:

- sidebar initialization, persistence, collapse state, and responsive control labels;
- primary and mobile navigation binding and active-state synchronization;
- workspace mounting, entry animation, URL state, and scroll reset;
- header command-menu lifecycle;
- market-summary expansion;
- status-bar page titles and data dates;
- the single-open-dialog lifecycle used by global application dialogs.

`static/app.js` retains feature-specific enter and leave behavior, such as stopping Wentian
animations or loading auction data. It asks the shell to mount a registered page and no longer
mutates global page geometry directly.

## Compatibility

- Existing DOM IDs, CSS classes, query parameters, page animations, and mobile navigation are
  unchanged.
- `screenerTrackingView` continues to highlight the Intelligent Screener navigation item.
- Existing function entry points remain as thin compatibility facades where feature code still
  calls status, dialog, or command-menu services.

## Residual Risk

Feature renderers and feature event binding still share `static/app.js`. Their state ownership
is now explicit and their shell dependencies are removed, so later page-module extraction can
be performed one feature at a time instead of as a single rewrite.
