Mount one controller provider for persistent operational state shared across a
shell. Pages, dialogs, topbars, and docks consume that owner instead of
instantiating parallel stateful hooks.
Keep providers for disjoint org, portal, and platform branches separate.
Build adjacent actions with ButtonGroup; never overlay a parent-owned button
on another component's interactive bounds.
Mark genuine coordinate-space controls with data-interactive-overlay, keep
decorative overlays pointer-transparent, and use semantic z-index utilities.
Run pnpm --filter @starter/app architecture:guard after changing providers,
compound controls, overlays, or stacking.
Remove empty folders that no longer carry active responsibility.
Keep shared folders small and intentional.
Put route-owned hooks in _hooks and non-component models, schemas, and
types in _lib.
Use responsibility folders such as dialogs, editor, navigation, or
sections when three or more related components make a flat _components
directory hard to scan.
Use concrete support filenames instead of generic types.ts, schemas.ts,
model.ts, or helpers.ts.
Do not leave archived client docs in the live starter folders.
docs/dev/README.md is the developer-docs entrypoint.
docs/app should teach the starter kit, not a client implementation.
Client-specific material should not live in docs/app; keep starter docs product-agnostic and move temporary client notes into non-source-of-truth working docs outside docs/app.
When docs move, update references in the same change.
When instructions change under .__ai-rules/*, run pnpm sync:agents in the same change.