Skip to content

feat(catalog): add observable asteroids - #29

Closed
mrosseel wants to merge 25 commits into
deepchartfrom
feature/observable-asteroids
Closed

feat(catalog): add observable asteroids#29
mrosseel wants to merge 25 commits into
deepchartfrom
feature/observable-asteroids

Conversation

@mrosseel

Copy link
Copy Markdown
Owner

Summary

  • add an MPC Soft00Bright-based minor-planet catalog with stable asteroid numbers and an amateur-oriented magnitude cutoff
  • calculate apparent position, H-G magnitude, Earth/Sun distance, opposition or greatest elongation, peak brightness, and topocentric sky motion in arcseconds per hour
  • add Nearby, Opposition, Brightest, and Standard asteroid sorting with compact display names and a dedicated asteroid marker
  • share atomic background element downloads between comets and asteroids, retaining old data while showing download progress
  • migrate saved catalog filters so existing installations gain the asteroid catalog

Based directly on origin/deepchart at 03eebe1244b3.

Validation

  • focused non-UI unit tests: 28 passed
  • Ruff passed
  • UI test collection currently requires the deepchart healpy dependency, which is absent from this workspace venv

@mrosseel mrosseel added the testable Builds the PR and publishes it to the unstable update channel label Jul 15, 2026
@mrosseel
mrosseel force-pushed the feature/observable-asteroids branch from 6050553 to 340bdae Compare July 15, 2026 18:10
@mrosseel
mrosseel force-pushed the feature/observable-asteroids branch from 340bdae to 0cae884 Compare July 15, 2026 19:06
@mrosseel
mrosseel force-pushed the feature/observable-asteroids branch 2 times, most recently from e7ce693 to 71b9e67 Compare July 15, 2026 20:26
@mrosseel
mrosseel force-pushed the deepchart branch 2 times, most recently from 6337356 to d4cba06 Compare July 15, 2026 20:37
@mrosseel
mrosseel force-pushed the feature/observable-asteroids branch from 71b9e67 to f4f02d6 Compare July 15, 2026 20:37
@mrosseel
mrosseel force-pushed the feature/observable-asteroids branch from f4f02d6 to b95cf39 Compare July 16, 2026 09:37
Coordinate/altitude fields on the web location add & edit forms were
<input type="number">. In a comma-decimal browser locale the browser
returns an empty .value for a period-formatted number (and vice-versa),
so the client-side validation saw the field as empty and silently
blocked submit — the Save button appeared active but did nothing.
Integer entries (no separator) worked, decimals did not.

Switch the numeric inputs to type=text inputmode=decimal, normalise
both separators to a period in JS before validation and submit, and
add a tolerant parse_coordinate() on the server so a stray comma yields
a friendly validation message instead of a 500.

Same bug class as brickbots#291 (equipment focal-length decimal crash).
@mrosseel
mrosseel force-pushed the feature/observable-asteroids branch from 7b85bf2 to 3214d9a Compare July 16, 2026 12:57
@mrosseel
mrosseel force-pushed the feature/observable-asteroids branch from 3214d9a to f447639 Compare July 16, 2026 13:14
@mrosseel
mrosseel force-pushed the feature/observable-asteroids branch 4 times, most recently from e665495 to de82f60 Compare July 16, 2026 16:46
mrosseel added 3 commits July 16, 2026 19:28
- Cache the update manifest on disk and fetch refreshes in a background
  thread: the screen renders the last-known list immediately on entry,
  with a dim bottom-line indicator while checking and on check failure.
  SQUARE re-fetches manually with the same feedback.
- Unstable rows lead with the bare PR number (fixed) followed by the PR
  title (scrolls when focused); the focused row and confirm screen show
  'built <age> · <hash>'. Trunk rows show the branch name after the dot
  and appear only when their branch carries flake.nix. Focused rows are
  bright, the rest dim.
- CI stamps built_at into every manifest entry (needs the same change on
  the branch pull_request_target reads trusted scripts from).
- Replace both 7x-square gestures with explicit menu items under
  Tools > Experimental > Dev Tools: a Dev Mode on/off toggle and a
  NixOS Migration entry (inert on systems already running NixOS).
- Rollback targets are validated like manifest entries so a misbehaving
  sys_utils cannot crash the screen.
@mrosseel
mrosseel force-pushed the feature/observable-asteroids branch from de82f60 to 190ac91 Compare July 16, 2026 17:28
@mrosseel
mrosseel force-pushed the feature/observable-asteroids branch from 62b351f to b4088f9 Compare July 17, 2026 07:27
mrosseel added 3 commits July 17, 2026 15:02
BlackLevelTracker fits the sky-vs-exposure intercept from naturally varying
exposures to recover the wandering sensor pedestal, gated on transmission-
stable frames, feeding pedestal_override. CloudEstimator gains the sky-excess
guard: cloud (dims stars AND brightens sky) is distinguished from dew/optics
(dims stars, sky follows) so only genuine cloud is flagged and corrected;
baselines become asymmetric medians of clear-flagged frames, factory-seeded.
@mrosseel
mrosseel force-pushed the feature/observable-asteroids branch from 145a559 to 7cbc62c Compare July 17, 2026 21:43
@mrosseel
mrosseel force-pushed the feature/observable-asteroids branch from 7cbc62c to be8b7b6 Compare July 17, 2026 21:44
mrosseel and others added 5 commits July 18, 2026 18:22
Syncs nixos (result-symlink untrack, test_ui_modules migration-ref fix,
radiometer/black-level/telemetry). Adopts nixos's solver.py wholesale: restores
the PR#24 cedar shmem reopen handshake + tetra3 load-by-name, and drops SQM
Correct (removed on nixos in feat(sqm)!). Conflicts in main.py /
camera_interface.py / update_manifest.py resolved to the shared-state form both
sides had converged on; uv.lock regenerated from the merged pyproject.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PXDxJkU5CzAegv3FcMEwEq
test_radec_entry exercised an older dependency-injection API (BlinkingCursor
time_provider; CoordinateConverter/CoordinateEntryLogic calc_utils_provider;
LayoutConfig no-arg) that radec_entry dropped for module-level calc_utils/time.
Patch calc_utils/time at the module level and pass a display stub to
LayoutConfig so the suite matches the implementation. 6 stale tests were failing.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PXDxJkU5CzAegv3FcMEwEq
Bring the per-frame optical-black pedestal (IMX290/462), its docs/ADR, and the
runtime source-closure slimming onto the observable-asteroids branch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015EWb2JET2JE1t4ya3HZPNL
@mrosseel mrosseel added testable Builds the PR and publishes it to the unstable update channel and removed testable Builds the PR and publishes it to the unstable update channel labels Jul 21, 2026
mrosseel added 7 commits July 21, 2026 23:04
Telemetry menu under Settings > Telemetry:
- Record: inline On/Off toggle (no submenu), same pattern as Test Mode.
- Sections: one multi-select checklist with inline checkmarks (like the
  Catalogs filter) for what to record — IMU, SQM, Solves, Targets and
  Images. Toggling applies live to an in-progress recording.
- Max Size: session cap (250 MB / 500 MB / 1 GB / 2 GB / Unlimited).
- Load: unchanged.

Images ships OFF by default, preserving the old telemetry_images=false:
one 512x512 PNG is written per solve, so at ~1 solve/s it costs roughly
300 MB/hour against a few MB/hour for every other section combined.

Session size cap. Frames are written by the camera process, so the
recorder measures the session directory from its flush loop rather than
counting its own writes. On reaching the cap, frame capture is suspended
(the one unbounded consumer) while the event log keeps running, so a
capped session stays useful instead of going dark. Default 1 GB.

Also logs the SQM *ingredients*, not just the end products, so a session
stays recomputable if the SQM/airglow maths changes in code later:
- radio event gains the raw per-frame inputs — red/blue Bayer backgrounds,
  optical-black pedestal, photometry image size (green bg and exposure
  were already there).
- the session header snapshots the FULL camera profile constants plus the
  airglow calibration and camera_type — the constants those ingredients
  were produced under.
The derived published 'sqm' and applied 'floor' are still logged, but
explicitly as a what-the-device-showed audit trail, not ground truth.

The airglow import is optional: the model is part of the SQM stack only on
branches that carry it (deepchart has the radiometer but not airglow), and
there a session simply records no airglow constants.
@mrosseel

Copy link
Copy Markdown
Owner Author

Closing the fork-side stack PR; the asteroid work remains tracked upstream in brickbots#534. The branch itself has been updated onto the latest deepchart, which now contains current nixos.

@mrosseel mrosseel closed this Aug 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

testable Builds the PR and publishes it to the unstable update channel

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant