Mavis
07cc5321d1
Phase 2c: eclipse/overpass calculators + live-map camera polish
...
CI / Lint, typecheck, test, build (pull_request) Failing after 9s
Calculators (apps/live-map/src/calculators/):
- eclipse.ts: findEclipseWindows(bodies, opts) — coarse scan with
threshold-crossing detection, bisection to refine start/end,
ternary search to find peak. Handles eclipse already in progress
at scan-start. Uses sun = parentId===null body.
- overpass.ts: findOverpasses(opts) — coarse scan for local distance
minima, ternary refinement. Targets: vessel, body, ground station
(lat/lon/alt → heliocentric).
UI:
- panels/CalculatorsPanel.tsx: collapsible bottom-center panel with
two tabs. Eclipse form: observer, eclipser, from UT → 3 windows.
Overpass form: observer vessel, target kind+id, max dist → 5 passes.
- timeFormat.ts: shared KSP-time formatters.
Live-map camera polish (apps/live-map/src/scene/):
- camera.ts: CameraController — log-scale distance (z→exp(z)*1e8 m,
range -3..12), spherical orbit around target, smooth lerp to
selected body/vessel. Mouse wheel zooms, drag rotates, click
raycasts for track toggle. Pointer-move-distance gate to
distinguish click from drag.
- glow.ts: additive shader-based atmospheric halo (rim-falloff
fragment shader, BackSide) attached as child of body mesh.
- layout.ts: bodyPositionAt now returns true heliocentric (walks
parent chain); previous version returned parent-relative for
non-root children which broke the eclipse calculator.
Bug fix:
- packages/orbital-math/src/occultation.ts: sign of projection check
was inverted. `proj <= 0` correctly returns 0 (occluder behind
observer), `proj > 0` triggers eclipse computation.
Tests: 28 live-map tests (10 scene + 12 calculator + 6 camera),
45 total across the workspace, all passing.
2026-06-02 19:46:00 +00:00
Mavis
9e76ec9328
Phase 2: 3D live map driven by API WebSocket
...
CI / Lint, typecheck, test, build (pull_request) Failing after 9s
- apps/live-map/src/hooks/useLiveState.ts: WebSocket subscription
with exponential-backoff reconnect, polling fallback, status tracking
- apps/live-map/src/scene/Scene.tsx: refactored Three.js scene with
per-frame orbit propagation, vessel marker color-coding by owner,
orbit-line visibility tied to focus filters, smooth camera follow
on selected vessel/body
- apps/live-map/src/scene/layout.ts: bodyPositionAt / vesselPositionAt
helpers (heliocentric frame, walk up the parent chain), logScale
helpers for the system view
- apps/live-map/src/scene/color.ts: per-body and per-owner color maps
- apps/live-map/src/panels/TimeControls.tsx: play/pause/reverse/reset
buttons, ×1/×10/×100/×1k/×10k/×100k speeds, UT scrub slider,
live-edge indicator (LIVE / Nh behind / Nh ahead)
- apps/live-map/src/panels/VesselList.tsx: vessel sidebar with click-
to-track; color-coded by owner (KASA=blue, SPES=orange)
- apps/live-map/src/panels/FocusPanel.tsx: planet/moon/vessel orbit
visibility toggles
- apps/live-map/src/panels/StatusPill.tsx: WS status (LIVE/POLLING/
OFFLINE/STALE), body + vessel + message counts
- tests/scene.test.ts: 10 tests for layout helpers (periodicity,
vessel-centered positioning, logScale round-trips)
End-to-end verified: mock publisher → API → live-map WebSocket →
scene re-renders with the new vessel positions and orbits.
2026-06-02 19:18:22 +00:00
Mavis
a457b9d96f
Phase 1: data pipeline (Postgres+Redis with in-memory fallback, mock telemetry publisher, WebSocket fan-out, hub /debug page)
...
CI / Lint, typecheck, test, build (pull_request) Failing after 10s
- packages/db: postgres.js + ioredis wrapper, StateStore interface with
InMemory + Postgres implementations, schema migration runner
- apps/api: refactored to use @kerbal-rt/db; live WebSocket hub subscribes
to store changes and broadcasts to all clients
- apps/tools/mock-telemetry: Node script that generates realistic KSP
state and POSTs to /api/v1/ingest at 1Hz (uses same keplerian math
as the live-map renderer)
- apps/hub: new /debug page that connects to /api/v1/live and shows
the live state
- ksp/README.md: documents Phase 1c (real kRPC bridge) and the two
implementation options
- Tests: 17 total (5 kepler math, 5 db store, 5 API health/state,
2 API WebSocket fan-out)
End-to-end verified: mock publisher → API → hub /debug page,
11 snapshots/5s over WebSocket, vessels advancing in mean anomaly.
2026-06-02 18:54:46 +00:00
Mavis
938ba042b3
Phase 0: fix typecheck, format, build; remove stray emit; pin port via env
CI / Lint, typecheck, test, build (push) Failing after 22s
2026-06-02 16:07:09 +00:00
Mavis
7b19c54943
Phase 0: monorepo skeleton (hub, live-map, api, packages, infra, CI)
2026-06-02 15:47:28 +00:00