docs/panels/strategic-posture.mdx
The AI Strategic Posture panel (internal id strategic-posture) surfaces theater-level military posture assessments — the cached "seed" view of each theater blended in real time with live military-vessel movements so the rendered posture reflects today's deployments, not yesterday's.
A vertical list of theater posture cards. Each card includes the theater name, the current posture summary, and click-through affordances: selecting a theater fires an optional location-click callback so the host can zoom the map to its coordinates.
The panel's internal loading UX is notable: it tracks elapsed time with a setInterval while waiting for the posture + vessels fetch to resolve, so the reader gets a visible progress signal on slow runs. When the seed is stale, the panel sets a stale indicator (isStale) so the card surface can flag it.
Under the hood the panel:
fetchCachedTheaterPosture().fetchMilitaryVessels().recalcPostureWithVessels() so the displayed summary is a fresh surge estimate, not just the cached value.Panel id is strategic-posture; canonical component is src/components/StrategicPosturePanel.ts. Title resolves from i18n (panels.strategicPosture); config sets 'AI Strategic Posture' at src/config/panels.ts:23.
{ premium: 'enhanced' as const } into the config so the panel becomes enhanced-gated on the desktop build. Source: 'strategic-posture' entry in FULL_PANELS at src/config/panels.ts:23 (no premium set; desktop variants elsewhere layer on enhanced gating per the _desktop && pattern).@/services/cached-theater-posture.@/services/military-vessels (the same feed that drives the military map layer).recalcPostureWithVessels() in @/services/military-surge blends cached baseline with today's vessel positions to produce the displayed TheaterPostureSummary.The panel does not call every military route directly. It reads bootstrap/cache posture data first, then uses the generated MilitaryService client only when the local posture cache needs a fresh server value.
| Method | Route | What it feeds |
|---|---|---|
GET | /api/military/v1/get-theater-posture | Primary posture RPC for the card list. The browser checks bootstrap theaterPosture, circuit-breaker cache, and IndexedDB before falling through to this route. |
GET | /api/military/v1/list-military-flights | Source feed for aircraft-driven posture and surge calculations upstream of the cached posture payload; the panel normally consumes the computed posture output rather than refetching flights itself. |
The panel is not on a polling timer — it fetches on mount and re-renders on relevant external triggers. The underlying posture seed refreshes on the military cron; live vessel positions refresh with the AIS relay.
Free on web; enhanced on desktop. Registered without premium in the full-variant FULL_PANELS entry (src/config/panels.ts:23), so the web build doesn't gate it. The desktop build layers on premium: 'enhanced' in other variant contexts — this is why the panel appears free on web but behind an upgrade CTA on the desktop app.