Roadmap
What's built, what's coming, what's deferred. Kept current as the project evolves (reflects the v22.2.4 build).
Built
Core
- Safety supervisor with a five-state verdict (
SAFE/WARNING/UNSAFE/
UNKNOWN / DISABLED); UNKNOWN is treated as UNSAFE, WARNING is the slow recovery dwell, and DISABLED is Manual Mode (backyard / no weather sensor)
- Manual Mode — run with no observatory or weather sensor; the verdict never reads
as unsafe and nothing is gated (you're the weather sensor)
- Pub/sub bus with ~15 topic channels in active use
- Hash-chained audit log (SQLite)
- Response engine for SAFE→UNSAFE transitions
- Two equipment transports running side-by-side: ASCOM and Alpaca
- Self-healing health monitor (memory, disk, threads, devices) with a COM-free
liveness watchdog and a Solo driver-death heartbeat
- Three isolated ASCOM worker lanes (mount / roof / everything else) with
fail-fast dispatch to a wedged lane, honest connect on both transports, and DeviceState (Platform 7) with a kill switch
- Guardian self-heal ladder: detect -> reconnect -> USB port reset -> reset all ->
escalate, "shoot what's left" by default
- A memory floor that must persist before it is an emergency, never counted during a
frame download, and an escalation that stops the running sequence first
Equipment control (Console)
- Camera capture with FITS write (live progress, abort), AIRMASS/site headers
- Camera cooling: setpoint, settle detection, manual on/off, warm-up, slow ramp
- Mount slew/sync (RA/Dec or named target), park/unpark, tracking, abort
- Focuser absolute/relative move, halt, travel limits, backlash measurement
- Filter wheel position changes by name, with per-filter focuser offsets
- Field rotator: move, halt, plate-solved sky position angle
- "Halt all" emergency stop
- Equipment dashboard: live device tiles with trends and per-device control
Autofocus
- Star detection + HFR/HFD (NumPy-only, no external astronomy deps); HFD displayed to match Voyager
- Two-button model: Adaptive First Light (self-finding step/range/backlash, no numbers) + plain Wizard, plus recipe-driven Refocus that resolves the apex around the current position
- Refocus recipe persistence, accumulating and refining per-rig across runs
- Optional slew-to-focus-star selection (RoboStar-equivalent: pick a bright, isolated catalog star; opt-in, moves the mount)
- Measured focuser backlash characterization (review-and-approve, travels with the equipment profile)
Sequencer
- Multi-target plans, rotate-per-frame and finish-each-filter modes, seven policy phases + TOML escape hatch
- Category-grouped, colour-coded action catalog (roof & cover, mount & pointing, dome, power, camera & focus, utility)
- On-start gates: wait-for-safe, wait-for-darkness (Sun below −18°), wait-until-time, altitude, max-wait
- Actions incl. precise-point, plate-solve & sync, blind-solve & sync (whole-sky recovery), home mount, connect/disconnect a power device, cool-camera with an optional over-X-minutes ramp
- Pause / resume / stop / abort, per-step error policy (abort / skip / retry) and per-action on-fail policy (cancel / pass / retry / go-to-end)
- Plan library (TOML save / load / backup / soft-delete / delete), "Save as scheduler template"
- Autofocus, cooling, constraint (altitude/HA/end-by) integration, and a meridian flip that asks the driver (DestinationSideOfPier), writes SideOfPier where the mount allows it, verifies the pier side, recenters by plate solve and resumes the interrupted exposure step
- A park wait that reads AtPark and Slewing live and says what it saw when a park does not happen
- Full PHD2 guiding: start/stop, dither cadence, settle gate, guiding-enforcement hold, optional guiding watchdog
- Per-frame quality acceptance (HFR/stars/eccentricity/background, per-filter overrides, reshoot, live tally)
- Live autofocus V-curve in the run view while a refocus runs
- Checkpoint / resume — a crash or restart mid-night resumes the session (frame-level)
Scheduler & unattended automation
- Multi-night dispatch Scheduler: projects + multi-filter per-target goals, persistent ledger, scoring/eligibility/hysteresis
- Two strategies (dispatch / finish-target) + per-project completion modes
- Per-target recipes (the templated "variable target"), and a "Scheduler Target" magic-name placeholder in a saved sequence
- Meridian preference (score boost near transit, optional hard gate) and a "don't waste a clear night" soft-constraint relaxation
- Per-filter Moon avoidance (phase-scaled separation, narrowband relaxed)
- Glass-box Schedule page — a step-by-step readiness bar, a "now imaging" panel, plain-words per-target status ("Moon too close", "still rising", "sets in 22 min"), per-filter progress bars and integration-time totals
- Save / recall / replace named schedules
- Roof management (open when dark+safe, close at dawn/unsafe/complete) with CloudWatcher as the hardwired backstop
- Blockscript state-machine night automation (startup→running→shutdown, WARNING/UNSAFE/RESUME/EMERGENCY) with device-loss recovery, a clickable lifecycle map, and typical-action one-click fills
- Blockscript Wait modes (duration / until-safe / until-time / until-dark / until-safe-dark) and a Run scheduler / Run sequence action with a saved-schedule / saved-sequence dropdown
run_schedulerblockscript action — an unattended campaign that runs every clear night until all goals complete- Auto-resume on restart (
auto_start) from the persistent ledger - Multi-night campaign simulation + "Simulate tonight" visual-timeline dry-run with per-target skip reasons
- Ask Pete pre-flight checker (sequences / blockscripts / scheduler)
- Auto Flat planner (per-filter table: shots, target ADU, tolerance, binning, exposure; one-folder or per-filter layout) + flat-cover / warm-camera epilogue actions
- Dome control + ASDM adaptive slit slaving (roll-off roof or dome), with an editable geometry diagram
Sources, targets & displays
- AAG CloudWatcher (Solo) safety driver with stale detection
- All-sky + CCTV displays, STF auto-stretched last-frame preview (the single image surface)
- Cartes du Ciel target lookup; ASTAP plate solver (CLI + WCS); precise/blind slew-solve-sync and blind-solve recovery; J2000 targets precessed to the mount's frame
- Polar alignment rebuilt (v22.1): a plate-solved two-position method with an optional third position, southern-hemisphere aware, the mount is never moved by Starship
- PHD2 guider — read-only status and commanding (set exposure, start/stop guiding, dither, settle-gate) when you allow control; auto-launch (path-resolved), profile-connect, and guiding enforcement
- Skyhunter — offline catalog (OpenNGC), tonight's visibility, planets/asteroids/comets, satellite passes, Moon×filter (BB/NB) awareness, and one-click → sequencer or scheduler
- Sky Atlas — Aladin sky view, camera FOV framing (from optics or a connected camera), mosaic planner → one-click sequence (appends, never replaces)
- Filter library — name each filter, per-filter refocus exposure, OSC support
- Alerts — outbound email + Pushover on safety and sequence events (including sequence stop/halt with reason)
Platform
- Web UI with WebSocket live updates; in-app help with Markdown topics + search
- Four themes (Original / Light / Red-night / High-contrast), saved per browser, applied instantly
- Settings (live save vs. save+restart), background job system with progress streaming
- Startup splash + Acknowledgements page crediting the standards and projects Starship builds on
- Online supporter licence in-app — a Settings → Licence tab shows edition + status, activates a subscription key, and refreshes daily against the licence server, offline-safe with a grace window
- External scripts + plugin loader (opt-in extension points)
- A COM camera's image array read straight into numpy (one frame of memory, not forty bytes per pixel)
- The full HTTP API documented in-app for scripts and AI agents (the HTTP API topic), with an operator playbook
- Ships as two editions from one codebase — Astroworx Starship (public) and Astroworx Starship Professional — the build self-identifies and the UI hides whatever isn't present
Coming next
Designed but not yet built, roughly in priority order.
- OS-level boot auto-launch — the auto-resume runs inside Starship, but on a remote
rig something still has to start the Starship process after a power cut (a Windows startup task/service). Currently parked.
- Out-of-process ASCOM driver host — isolate COM drivers so a wedged driver can't
stall the loop (the COM-free watchdog mitigates this today).
- Per-event setpoint overrides in the sequencer events table (cooling per filter) — plan-level and per-action cooling with an optional ramp are done; a per-exposure-row setpoint is not.
- Dome calibration solver — the ASDM sync-point solver that recovers the physical offsets automatically (the engine + live slaving are built; you set offsets by measurement today).
- Watchdog moving-mean for autofocus result validation across a session.
- In-app bug report / feedback + community links.
Designed, deferred
Scoped but waiting on dependencies or priority.
- Research module — blink, photometry, astrometry workflows (the Research page names the directions today; nothing runs yet)
- LocalField multi-star focusing (focus-star selection itself is built — opt-in slew-to-focus-star)
- GCN / TNS / MPC transient alerts (the alerts module today covers safety/sequence email + Pushover)
- Astroworx Native Bus + WAN Relay — multi-instance / off-site dashboards
- Stellarium as a second planetarium backend
- Linux / Raspberry Pi packaging — the core already imports clean on Linux/ARM (Alpaca-only); a supported install path + on-target test is the remaining work
Won't do
What we explicitly don't plan to build, and why.
- CCTV-based safety automation — fuzzy signals don't belong in the safety verdict. See Display vs. control.
- Built-in autoguiding — PHD2 is the standard; peer-process integration is correct.
- A bundled FITS calibration / stacking pipeline — Siril, PixInsight, APP exist and are better.
- Recording / motion detection on CCTV — existing CCTV systems do this better.