Start with README.md for features and setup and PLAN.md for active work.
| Path | Responsibility |
|---|---|
| backend/src/nightcrate/main.py | Startup, router registration, maintenance |
| api/ | HTTP, DB access, transactions, orchestration |
| services/ | Astronomy, imaging, parsing, scoring, ingest and session derivation |
| services/star_catalog/ | Siril Gaia DR3 catalog installation, field-range indexes and mapped handles |
| services/native_solver/ | Built-in extraction, geometric index search and WCS verification |
| api/star_catalog.py | Plate-solving star-data administration routes |
| services/plate_solve.py, services/solve_operations.py | Solver dispatch, the ASTAP step chain, and solve identity, cancellation and progress |
| services/image_preview.py | Cached JPEG previews of any supported image path |
| services/hips_tiles.py | DSS2 colour HiPS tile planning, source failover, in-memory tile caching and JPEG rendering |
| services/image_cache.py | Shared budget, lock, file identity and clearing for the thumbnail and sky-cell caches |
| services/catalog_progress.py | The single catalog fetch/reload operation and its progress for the Catalogs page |
| services/dso_sorting.py, services/dso_display.py | Natural designation order and the label maps used to sort catalog columns |
| core/tasks.py | settle: wait for a worker through repeated cancellation before releasing ownership |
| components/plate-solve/ | The inline plate-solve panel, its hint model and solve hook, and the overlays |
| db/ | Connections and ordered yoyo migrations (SQL; Python where SQL cannot express the change, e.g. 0064) |
| seed_loader/, catalog_loader/ | Equipment seeds and external DSO catalogs |
| catalog_loader/catalog_choice.py, api/catalog_choice_models.py | The app-wide optional-catalog choice (choice.json) and its effective state per database; the Admin response models for optional catalogs and removal previews |
| catalog_loader/designations.py | The one designation search-key function and canonical MCG, PN G and WR identifiers |
| catalog_loader/common_names.py | Splitting and merging catalog names, and reading NightCrate's reviewed common_names.csv |
| catalog_loader/match_review.py | The stated-match screen, run on each new catalog before its first application |
| wr_loader.py, hh_loader.py, hash_loader.py, lbn_loader.py, ldn_loader.py, melotte_loader.py, aco_loader.py, mcg_loader.py, arp_loader.py | Pure collectors for the optional catalogs, called by reconcile.build_object_set in COLLECTOR_ORDER |
| data/ | Equipment CSVs and NightCrate editorial catalog data |
| data/catalogs/nightcrate/ | Shipped lists (GPL-3.0-or-later): augment, cross-references and external-reference overrides, plus the Melotte list (melotte.csv), reviewed Arp members (arp_members.csv), "part of" rows (dso_parts.csv) and match overrides (dso_match_overrides.csv) |
| backend/tests/ | Backend regression and integration tests |
| frontend/src/pages/, components/ | Routed screens and reusable views |
| components/admin/StarCatalogAdminSection.tsx | Plate-solving star download and field-range controls |
| api/, stores/, lib/, theme/ | Typed clients, state, helpers, theme |
- Development decisions: feature constraints and known traps.
- Agent collaboration: Claude–Codex roles, gates, Codex profiles, and review records.
- Schema diagrams, complete DDL, equipment seed reference.
- DSO catalog architecture.
- Target planner, scoring, annual-hours algorithm.
- Weather algorithms: the personal imaging verdict (v0.41.9). The retired 0–100 score is archived in imaging-quality model.
- Plan through v0.41.5: original release history, proposed future designs and library evaluations.
superpowers/specs/andsuperpowers/plans/: dated design/implementation plans.seed-audit-handoff.mdandsuperpowers/seed-data-*.md: previous seed-work handoffs.../planning_weather/: prior scoring prototypes and design notes.
These records preserve rationale. They may describe removed features, old schema shapes or unfinished proposals. Follow current code/migrations and development decisions when they differ; do not execute an old plan as current instructions.