Extract the conditional banner cluster (~14 banners each gated on
viewMode === "project" && currentProject) into a presentational component
packages/dashboard/app/components/dashboard/DashboardBanners.tsx with a typed
DashboardBannersProps interface (39 fields) added to types.ts. The
TaskIdIntegrityBanner setDashboardHealth updater and all FNXC comments move
verbatim; banner components are imported directly from siblings.
App.tsx: 1,704 -> 1,636 lines. Behavior-preserving; App.test.tsx identical
(5 pre-existing experimental-flag failures, none introduced). Verified by
typecheck and eslint.
Completes U7 (App.tsx module-breakup plan).