The #2843 loading-skeleton rollout covered first-paint page loads. Sub-region spinners — tab bodies and panels that refetch after the surrounding page has already rendered — are untouched and still render bare BrailleSpinners. Confirmed still present by grep:
client/src/pages/Brain.jsx:148 — Suspense fallback: <div className="flex items-center justify-center h-64"><BrailleSpinner text="Loading" /></div>
client/src/pages/Goals.jsx:81 — Suspense fallback: <div className="flex items-center justify-center h-full"><BrailleSpinner text="Loading" /></div>
client/src/pages/DigitalTwin.jsx:170 — Suspense fallback: <div className="flex justify-center py-12"><BrailleSpinner text="Loading" /></div>
client/src/pages/Apps.jsx:618 — per-app expansion: <BrailleSpinner text="" />
client/src/pages/DataManager.jsx:288 — category detail: <BrailleSpinner text="Loading" />
client/src/pages/UsagePage.jsx:128,298 — provider-quota section: <BrailleSpinner /> / <BrailleSpinner text="Reading provider usage" />
client/src/pages/CharacterSheet.jsx:484 — sync panel: <BrailleSpinner />
Lower value than first-paint skeletons (the surrounding page layout is already reserved by the time these fire, so there's no first-paint layout shift), but the taller/wider ones (Brain/Goals/DigitalTwin Suspense fallbacks spanning h-64/h-full/py-12, and DataManager's category detail panel) would benefit from a scoped skeleton shape instead of a centered spinner, since they cover a large content region for a noticeable duration.
Fix shape
For each sub-region above, replace the bare BrailleSpinner with a skeleton shaped to that region's actual content (e.g. a card/row skeleton sized to the panel, reusing PageSkeleton's internal placeholder primitives or a lighter-weight local skeleton block) — prioritize the Suspense fallbacks (Brain/Goals/DigitalTwin) and DataManager's category detail first, since those are the tallest/most visible. Apps.jsx's per-app expansion and UsagePage.jsx's smaller spinners are lower priority (text="" / narrow inline spinners rather than full-region loads).
Migrated from PLAN.md by /do:replan --issues. Follow-up to #2843.
The #2843 loading-skeleton rollout covered first-paint page loads. Sub-region spinners — tab bodies and panels that refetch after the surrounding page has already rendered — are untouched and still render bare
BrailleSpinners. Confirmed still present by grep:client/src/pages/Brain.jsx:148— Suspense fallback:<div className="flex items-center justify-center h-64"><BrailleSpinner text="Loading" /></div>client/src/pages/Goals.jsx:81— Suspense fallback:<div className="flex items-center justify-center h-full"><BrailleSpinner text="Loading" /></div>client/src/pages/DigitalTwin.jsx:170— Suspense fallback:<div className="flex justify-center py-12"><BrailleSpinner text="Loading" /></div>client/src/pages/Apps.jsx:618— per-app expansion:<BrailleSpinner text="" />client/src/pages/DataManager.jsx:288— category detail:<BrailleSpinner text="Loading" />client/src/pages/UsagePage.jsx:128,298— provider-quota section:<BrailleSpinner />/<BrailleSpinner text="Reading provider usage" />client/src/pages/CharacterSheet.jsx:484— sync panel:<BrailleSpinner />Lower value than first-paint skeletons (the surrounding page layout is already reserved by the time these fire, so there's no first-paint layout shift), but the taller/wider ones (Brain/Goals/DigitalTwin Suspense fallbacks spanning
h-64/h-full/py-12, and DataManager's category detail panel) would benefit from a scoped skeleton shape instead of a centered spinner, since they cover a large content region for a noticeable duration.Fix shape
For each sub-region above, replace the bare
BrailleSpinnerwith a skeleton shaped to that region's actual content (e.g. a card/row skeleton sized to the panel, reusingPageSkeleton's internal placeholder primitives or a lighter-weight local skeleton block) — prioritize the Suspense fallbacks (Brain/Goals/DigitalTwin) and DataManager's category detail first, since those are the tallest/most visible.Apps.jsx's per-app expansion andUsagePage.jsx's smaller spinners are lower priority (text=""/ narrow inline spinners rather than full-region loads).Migrated from PLAN.md by /do:replan --issues. Follow-up to #2843.