Remove the mentor immersive rules in shared/shell.css that hid the module nav, header actions, market tape, overview strip and status bar while mentorView was active, which made the page look like an independent site. Mentor now stays inside the canonical 小白复盘 shell and owns its own "问师 + 数据日期" title header inside #mentorView (B-92 content intact). Also fix the shell's latent 1024px overflow: .main min-width 1080 now only applies at >=1280, and the overview strip scrolls internally instead of clipping its right side when it is wider than the content column. Update the contract and e2e baselines to assert the shell stays visible and usable on mentor, page switching leaves no residue, and add a dedicated shell-integration e2e test. Co-authored-by: multica-agent <github@multica.ai>
Governance Registries
These registries describe the approved product surface of the standalone application.
pages.config.json: primary page identity, navigation group, access expectation, scrolling, and mobile composition policy.features.config.json: feature ownership, backend access class, data scope, and availability.api.config.json: current routes generated from the preservedserver.pyAPI surface, with one feature owner and backend access class per route. Its dispatcher implementation lives inbackend/application.py.architecture-inventory.json: generated inventory of current pages, routes, tables, providers, model entry points, CSS layers, and remaining code hotspots.data-fields.config.json: canonical data products, provider eligibility, intended use, and known blocked datasets.data-quality.config.json: freshness, coverage, units, adjustment, point-in-time, and fail-closed rules for every canonical data product.jobs.config.json: background schedules, dependencies, lock keys, retry policy, timeouts, and output versions.
The registries are governance contracts, not substitutes for runtime authorization. Backend
access in backend/http/routes.py is authoritative; frontend visibility is only a presentation
concern and never grants access.
Regenerate the transitional API inventory after a route change:
python tools/build_api_registry.py
python tools/build_api_registry.py --check
python tools/build_architecture_inventory.py
python tools/build_architecture_inventory.py --check