Skip to content

Add the new Slate interface as the default, with the classic console opt-in - #117

Merged
AndrewCTF merged 2 commits into
masterfrom
slate-ui-2026-10
Oct 23, 2026
Merged

AndrewCTF merged 2 commits into
masterfrom
slate-ui-2026-10

Conversation

@AndrewCTF

Copy link
Copy Markdown
Owner

What

  • New interface (default, WIP): the Slate scheme swaps the desktop shell for the new workspace layout (banner, doc tabs, menu row, app rail, Situations / Ops / Data panel, action timeline). Ported surfaces under apps/web/src/slate/features read live routes. Phones keep the phone-first console.
  • Classic console (opt-in): Settings → Interface. Keeps its clock-state line, marking pill and inspector.
  • Sign-in before the dashboard when accounts are configured.
  • Map overlays drawn on the map (country names, selection ring and glows) so they no longer trail a pan.
  • Backend: /api/space/gp serves the saved catalogue when CelesTrak is unreachable (was a 500); new /api/status/host.
  • Anchored-vessel situation detection, Models / Quiver / Vertex / Workshop apps, layer style editor, map defaults.

Merge notes

Rebased onto current master by applying the branch's new work on top of #97–#103; nine conflicts resolved, mainly keeping #98's phone layout alongside the desktop redesign.

Checks

  • pnpm -r typecheck: clean
  • eslint: clean
  • web unit tests: 151 files, 1159 passed
  • backend: 3283 passed, 21 skipped

Known gaps

Tracked as #104–#116 (label new-ui): fixed-size layouts on some pages, dead controls, missing off switches and panels, and the walkthrough harness that should gate this work. The merged tree was not browser-checked after conflict resolution; the classic console and phone layout need a look.

…opt-in

The Slate scheme swaps the desktop shell for the new workspace layout:
banner, doc-tab bar, menu row, app rail, the Situations / Ops / Data panel with
detected anchorages and recommended actions, and the action timeline. Ported
surfaces live under src/slate/features (situations and object panels, target
board, video, AI terminal and registry pages, Europa reports, the Explorer
workspace and Foundry apps), each reading live routes. Phones keep the
phone-first console.

Settings gains an Interface choice: the new interface is the default and is
marked WIP with a preview picture; the classic console is the opt-in and keeps
its clock-state line, marking pill and inspector.

Signing in happens before the dashboard when accounts are configured; a
dev-server-only session flag lets headless screenshot runs skip it.

Map overlays that trailed the globe during a pan (country names, the selection
ring and its contact glows) are drawn on the map. CelesTrak outages now serve
the saved satellite catalogue instead of a 500, and /api/status/host reports
the machine's readings for the ground-station pages.

Also: anchored-vessel situation detection, four new apps (Models, Quiver,
Vertex, Workshop), a layer style editor, map defaults in Settings, and the
satellite sensor catalogue ids corrected against CelesTrak names.

Known gaps are tracked as issues #104-#116 (label new-ui).
@coderabbitai

coderabbitai Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 242 files, which is 142 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
📥 Commits

Reviewing files that changed from the base of the PR and between 4d6d507 and a0c746b.

⛔ Files ignored due to path filters: 3
  • apps/web/public/bp-sprite.svg is excluded by !**/*.svg
  • apps/web/public/ui-preview-slate.jpg is excluded by !**/*.jpg
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing: 242
  • README.md
  • apps/api/app/intel/anchorage.py
  • apps/api/app/main.py
  • apps/api/app/routes/host.py
  • apps/api/app/routes/situations.py
  • apps/api/app/routes/space.py
  • apps/api/tests/test_readme_claims.py
  • apps/api/tests/test_situation_detect.py
  • apps/api/tests/test_space_gp_not_modified.py
  • apps/api/tests/test_status_host.py
  • apps/web/package.json
  • apps/web/src/App.tsx
  • apps/web/src/AppRouter.tsx
  • apps/web/src/alerts/AlertsPanel.tsx
  • apps/web/src/auth/userData.ts
  • apps/web/src/command-bar/AgentConsole.tsx
  • apps/web/src/entity-panel/AcarsCard.tsx
  • apps/web/src/entity-panel/CameraCard.tsx
  • apps/web/src/entity-panel/ObjectInspector.tsx
  • apps/web/src/explorer/SearchObjectsSidebar.tsx
  • apps/web/src/fmv/VideoApp.tsx
  • apps/web/src/foundry/BuildsView.tsx
  • apps/web/src/foundry/DatasetsView.tsx
  • apps/web/src/foundry/HomeView.tsx
  • apps/web/src/foundry/PipelineView.tsx
  • apps/web/src/foundry/WorkbenchTabs.tsx
  • apps/web/src/foundry/ui.tsx
  • apps/web/src/globe/ContextMenu.tsx
  • apps/web/src/globe/DetectedLayer.ts
  • apps/web/src/globe/GlobeCanvas.tsx
  • apps/web/src/globe/GlobeFx.tsx
  • apps/web/src/globe/GlobeOverlays.tsx
  • apps/web/src/globe/GlobeToolbar.tsx
  • apps/web/src/globe/LayerCompositor.ts
  • apps/web/src/globe/MavenMap.tsx
  • apps/web/src/globe/adapters/AisWsAdapter.ts
  • apps/web/src/globe/adapters/PollGeoJsonAdapter.ts
  • apps/web/src/globe/adapters/PrimitiveEntityLayer.ts
  • apps/web/src/globe/adapters/SatelliteAdapter.ts
  • apps/web/src/globe/adapters/labelStyle.ts
  • apps/web/src/globe/adapters/styles.ts
  • apps/web/src/globe/camera.ts
  • apps/web/src/globe/contextMenu.css
  • apps/web/src/globe/mapActions.ts
  • apps/web/src/globe/mavenMap.css
  • apps/web/src/globe/mavenStore.ts
  • apps/web/src/ground/PanoramaViewer.tsx
  • apps/web/src/ground/detectionOverlay.tsx
  • apps/web/src/inbox/InboxPanel.tsx
  • apps/web/src/layer-editor/LayerEditorPanel.tsx
  • apps/web/src/layer-editor/layerStyleStore.test.ts
  • apps/web/src/layer-editor/layerStyleStore.ts
  • apps/web/src/layer-rail/LayerRail.tsx
  • apps/web/src/main.tsx
  • apps/web/src/maplibre/MapLibreCanvas.tsx
  • apps/web/src/models/ModelsApp.test.tsx
  • apps/web/src/models/ModelsApp.tsx
  • apps/web/src/quiver/QuiverApp.test.tsx
  • apps/web/src/quiver/QuiverApp.tsx
  • apps/web/src/registry/sensorSats.ts
  • apps/web/src/reports/AuditPanel.tsx
  • apps/web/src/reports/BriefPanel.tsx
  • apps/web/src/settings/MapDefaults.test.tsx
  • apps/web/src/settings/SettingsModal.tsx
  • apps/web/src/settings/localAi/EnginePicker.tsx
  • apps/web/src/shell/ActionBar.tsx
  • apps/web/src/shell/AppRail.tsx
  • apps/web/src/shell/AppSurface.tsx
  • apps/web/src/shell/AppSwitcher.tsx
  • apps/web/src/shell/BpIcon.tsx
  • apps/web/src/shell/Console.tsx
  • apps/web/src/shell/FloatingPanel.tsx
  • apps/web/src/shell/LeftIconRail.tsx
  • apps/web/src/shell/LeftPanels.tsx
  • apps/web/src/shell/TabbedPanel.tsx
  • apps/web/src/shell/TimeDock.tsx
  • apps/web/src/shell/TimelinePanel.test.tsx
  • apps/web/src/shell/TimelinePanel.tsx
  • apps/web/src/shell/TitleBar.menus.test.ts
  • apps/web/src/shell/TitleBar.tsx
  • apps/web/src/shell/appGlyphs.ts
  • apps/web/src/shell/console.css
  • apps/web/src/shell/instruments.tsx
  • apps/web/src/shell/panels.ts
  • apps/web/src/shell/panels/LayersPanel.tsx
  • apps/web/src/shell/panels/WorldPanel.tsx
  • apps/web/src/shell/rehoming.test.ts
  • apps/web/src/situations/CoaCards.tsx
  • apps/web/src/situations/DetectedSituation.test.ts
  • apps/web/src/situations/DetectedSituation.tsx
  • apps/web/src/situations/SituationsPanel.tsx
  • apps/web/src/situations/detectedStore.ts
  • apps/web/src/slate/SlateShell.tsx
  • apps/web/src/slate/SlateSituations.tsx
  • apps/web/src/slate/features/aip/AipApp.tsx
  • apps/web/src/slate/features/aip/Board.tsx
  • apps/web/src/slate/features/aip/ControlPanel.tsx
  • apps/web/src/slate/features/aip/Lineage.tsx
  • apps/web/src/slate/features/aip/MapApp.tsx
  • apps/web/src/slate/features/aip/Registry.tsx
  • apps/web/src/slate/features/aip/Terminal.tsx
  • apps/web/src/slate/features/aip/Titan.tsx
  • apps/web/src/slate/features/aip/Transforms.tsx
  • apps/web/src/slate/features/aip/aip.css
  • apps/web/src/slate/features/aip/data.test.ts
  • apps/web/src/slate/features/aip/data.ts
  • apps/web/src/slate/features/aip/dataB.test.ts
  • apps/web/src/slate/features/aip/dataB.ts
  • apps/web/src/slate/features/aip/ui.tsx
  • apps/web/src/slate/features/dossier/DocPins.tsx
  • apps/web/src/slate/features/dossier/Dossier.tsx
  • apps/web/src/slate/features/dossier/data.test.ts
  • apps/web/src/slate/features/dossier/data.ts
  • apps/web/src/slate/features/dossier/dossier.css
  • apps/web/src/slate/features/europa/Chat.tsx
  • apps/web/src/slate/features/europa/EuropaApp.tsx
  • apps/web/src/slate/features/europa/Gaia.tsx
  • apps/web/src/slate/features/europa/Graph.tsx
  • apps/web/src/slate/features/europa/Lineage.tsx
  • apps/web/src/slate/features/europa/Meta.tsx
  • apps/web/src/slate/features/europa/SatMap.tsx
  • apps/web/src/slate/features/europa/Slides.tsx
  • apps/web/src/slate/features/europa/data.test.ts
  • apps/web/src/slate/features/europa/data.ts
  • apps/web/src/slate/features/europa/drag.ts
  • apps/web/src/slate/features/europa/europa.css
  • apps/web/src/slate/features/europa/preview.html
  • apps/web/src/slate/features/europa/preview.tsx
  • apps/web/src/slate/features/europa/ui.tsx
  • apps/web/src/slate/features/foundry/ControlPanel.tsx
  • apps/web/src/slate/features/foundry/FoundryApp.tsx
  • apps/web/src/slate/features/foundry/LegacyMap.tsx
  • apps/web/src/slate/features/foundry/Marketplace.tsx
  • apps/web/src/slate/features/foundry/Ontology.tsx
  • apps/web/src/slate/features/foundry/Params.tsx
  • apps/web/src/slate/features/foundry/Plate.tsx
  • apps/web/src/slate/features/foundry/WorkshopConfig.tsx
  • apps/web/src/slate/features/foundry/WorkshopMap.tsx
  • apps/web/src/slate/features/foundry/countries.gen.py
  • apps/web/src/slate/features/foundry/countries.json
  • apps/web/src/slate/features/foundry/data.test.ts
  • apps/web/src/slate/features/foundry/data.ts
  • apps/web/src/slate/features/foundry/foundry.css
  • apps/web/src/slate/features/foundry/kit.tsx
  • apps/web/src/slate/features/foundry/mapkit.tsx
  • apps/web/src/slate/features/foundry/nav.ts
  • apps/web/src/slate/features/foundry/preview.html
  • apps/web/src/slate/features/foundry/preview.tsx
  • apps/web/src/slate/features/imagery/ImageryWorkspace.tsx
  • apps/web/src/slate/features/imagery/imagery.css
  • apps/web/src/slate/features/imagery/sun.test.ts
  • apps/web/src/slate/features/imagery/sun.ts
  • apps/web/src/slate/features/mapfx/MapFx.tsx
  • apps/web/src/slate/features/mapfx/mapfx.css
  • apps/web/src/slate/features/mapfx/store.ts
  • apps/web/src/slate/features/maven/CreateLayer.tsx
  • apps/web/src/slate/features/maven/Fmv.tsx
  • apps/web/src/slate/features/maven/MavenTargeting.tsx
  • apps/web/src/slate/features/maven/ObjectPanel.tsx
  • apps/web/src/slate/features/maven/Panels.tsx
  • apps/web/src/slate/features/maven/Strip.tsx
  • apps/web/src/slate/features/maven/ToolCatalog.tsx
  • apps/web/src/slate/features/maven/Workspace.tsx
  • apps/web/src/slate/features/maven/fmv.css
  • apps/web/src/slate/features/maven/fmvPlate.ts
  • apps/web/src/slate/features/maven/geo.ts
  • apps/web/src/slate/features/maven/maven.css
  • apps/web/src/slate/features/maven/maven.test.ts
  • apps/web/src/slate/features/maven/recommend.ts
  • apps/web/src/slate/features/maven/taskings.ts
  • apps/web/src/slate/features/maven/toolCatalog.css
  • apps/web/src/slate/features/maven/ui.ts
  • apps/web/src/slate/features/object/SlateObject.tsx
  • apps/web/src/slate/features/object/VesselPanel.tsx
  • apps/web/src/slate/features/object/activity.test.ts
  • apps/web/src/slate/features/object/activity.ts
  • apps/web/src/slate/features/object/archive.test.ts
  • apps/web/src/slate/features/object/archive.ts
  • apps/web/src/slate/features/object/object.css
  • apps/web/src/slate/features/observation/ObsPopover.tsx
  • apps/web/src/slate/features/observation/ProjectToast.tsx
  • apps/web/src/slate/features/observation/observation.css
  • apps/web/src/slate/features/pdf/Browser.tsx
  • apps/web/src/slate/features/pdf/Chat.tsx
  • apps/web/src/slate/features/pdf/Cov.tsx
  • apps/web/src/slate/features/pdf/Dossier.tsx
  • apps/web/src/slate/features/pdf/Explorer.tsx
  • apps/web/src/slate/features/pdf/Gaia.tsx
  • apps/web/src/slate/features/pdf/Graph.tsx
  • apps/web/src/slate/features/pdf/Inbox.tsx
  • apps/web/src/slate/features/pdf/PdfApp.tsx
  • apps/web/src/slate/features/pdf/Slides.tsx
  • apps/web/src/slate/features/pdf/Timeline.tsx
  • apps/web/src/slate/features/pdf/Video.tsx
  • apps/web/src/slate/features/pdf/data.test.ts
  • apps/web/src/slate/features/pdf/data.ts
  • apps/web/src/slate/features/pdf/kit.tsx
  • apps/web/src/slate/features/pdf/model.ts
  • apps/web/src/slate/features/pdf/pdf.css
  • apps/web/src/slate/features/places/SlatePlaces.test.ts
  • apps/web/src/slate/features/places/SlatePlaces.tsx
  • apps/web/src/slate/features/places/countryLabels.gen.py
  • apps/web/src/slate/features/places/countryLabels.json
  • apps/web/src/slate/features/situation/ActionCards.tsx
  • apps/web/src/slate/features/situation/ActivityCard.tsx
  • apps/web/src/slate/features/situation/SituationObject.tsx
  • apps/web/src/slate/features/situation/actions.css
  • apps/web/src/slate/features/situation/flow.tsx
  • apps/web/src/slate/features/situation/model.test.ts
  • apps/web/src/slate/features/situation/model.ts
  • apps/web/src/slate/features/situation/situation.css
  • apps/web/src/slate/features/tasking/Assets.tsx
  • apps/web/src/slate/features/tasking/TaskFlow.tsx
  • apps/web/src/slate/features/tasking/orders.tsx
  • apps/web/src/slate/features/tasking/tasking.css
  • apps/web/src/slate/pages/MavenLayers.tsx
  • apps/web/src/slate/pages/TargetBoard.tsx
  • apps/web/src/slate/pages/mavenLayers.css
  • apps/web/src/slate/pages/targetBoard.css
  • apps/web/src/slate/slate.css
  • apps/web/src/slides/SlidesDeck.tsx
  • apps/web/src/state/appView.ts
  • apps/web/src/state/dashboardMode.ts
  • apps/web/src/state/settings.test.ts
  • apps/web/src/state/settings.ts
  • apps/web/src/state/situationFocus.ts
  • apps/web/src/state/stores.ts
  • apps/web/src/state/theme.test.ts
  • apps/web/src/state/theme.ts
  • apps/web/src/target-kanban/TargetKanbanPanel.tsx
  • apps/web/src/theme/schemes.ts
  • apps/web/src/theme/tokens.css
  • apps/web/src/ui/kit.css
  • apps/web/src/vertex/VertexApp.test.tsx
  • apps/web/src/vertex/VertexApp.tsx
  • apps/web/src/vertex/useJson.ts
  • apps/web/src/weather/WeatherPanel.tsx
  • apps/web/src/workshop/WorkshopApp.test.tsx
  • apps/web/src/workshop/WorkshopApp.tsx
  • docker-compose.yml
  • docs/security/asvs-l2-assessment.md
  • infra/docker/nginx.Dockerfile

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AndrewCTF
AndrewCTF enabled auto-merge (squash) October 23, 2026 08:02
The scene plates, globe textures and world map lifted from reference frames
are removed; the pages draw on a flat background instead, with a shortcut
note at each site. The vendor ring logo on the AI terminal tile and the video
header is replaced by the app's own mark.

The web image builds from apps/web alone, so the Marketplace page's two
manifest imports from the repo root failed the image build. They now load
through eager globs and fall back to "—" when absent.

nginx moves to 1.30.6 for CVE-2026-15176, CVE-2026-93479 and CVE-2026-97205.
@AndrewCTF
AndrewCTF disabled auto-merge October 23, 2026 08:21
@AndrewCTF
AndrewCTF merged commit 283b9ca into master Oct 23, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant