Skeleton only: each section becomes its own design pass (and its own PyAutoMind prompt) when its predecessor nears shipping. Nothing here is committed design; it exists so phase-1 code doesn't paint us into a corner.
The one thing phase 1 must get right for everything below: pipeline stages
(acquire/align/drizzle/noise/psf/package) speak to instruments
only through an adapter in autoreduce.instruments that owns detector
geometry, calibrated-product naming (_flc vs _flt vs _cal), units and
gain, recommended combine parameters, and the PSF-model source. ACS/WFC is
adapter #1; nothing outside instruments/ may mention a detector by name.
- Design deltas live in
wfc3.md; adapterswfc3_uvis/wfc3_irimplemented. UVIS is ACS-like (CTE-corrected_flc); IR differs (_flt, no CTE correction, up-the-ramp CR rejection, 0.128″ native → recommended 0.065″ output). - Other ACS/WFC3 filters (F435W, F606W…) are config, not code: the adapter already parameterizes the filter-dependent pieces.
- Design deltas live in
jwst.md; adaptersnircam_sw/nircam_lw- the combine-backend dispatch (
astrodrizzle|jwst_image3) implemented; noise = read propagated ERR × R; validated on the COSMOS-Web ring, four bands, against the autolens_assistant demo dataset.
- the combine-backend dispatch (
- PSF: STPSF tier-2 back-end still open (tier-1 ePSF carries over).
- Design deltas live in
keck_ao.md; adaptersnirc2_narrow/nirc2_wide, the acquire-backend seam (archive: koa | mast, PyKOA), the ground pre-combine stages (calibrate,sky), thenirc2_nativecombine backend (distortion-as-drizzle-pixmap), and the provisional-PSF contract (tier-A PSF-star candidates) implemented. SHARP-grounded (Lagattuta 2012; Chen 2016/2019); validation anchor B1938+666. - Open: wide-camera distortion, subarrays, MULTISAM read noise, north-up resampling (see keck_ao.md open items).
- Design lives in
alma.md; the first visibility-domain product family: calibrated measurement sets → theal.Interferometer.from_fitstriplet (visibilities / uv_wavelengths / noise_map,(Nvis, 2)), via the visibility branch acquire → split → extract → assemble → package. - Headless modular CASA (
casatools/casatasks) replaces the interactivecasashell; grounded in an active ALMA modeler's continuum recipe; validation anchor 2016.1.00282.S / G09v1.40. - Open: scriptForPI restore automation, emission-line/cube extraction
(reduction side of the shipped
alma-datacubemodelling work).
Shipped (HST) as the opt-in TargetSpec.frame_products packaging mode —
per-exposure cutouts, ERR-based native-pixel noise maps, DQ + deepCR
cosmic-ray masks, the WCS manifest with measured relative registration
(issue #19), and tier-1 native ePSFs per frame (issue #21); design in
hst_acs_pipeline.md ("Per-exposure frame products"). Open items:
- Tier-2 model PSF, HST side (TinyTim / focus-diverse ePSF grid) — the
fallback for HST frames whose star field cannot support a tier-1 ePSF
(recorded per frame in the manifest today); shared with the mosaic path's
psf/fallback.model_psfstub. The JWST side is live (issue #29, STPSF tier-2b —jwst.mdPSF tiering). JWST analogue— shipped (issue #27): frames/registration/PSF chain extended to NIRCam perjwst.md§"Per-exposure frame products — feasibility" (_crfinputs, native MJy/sr, DO_NOT_USE-only masking).- Per-adapter
dq_bad_bits— refinement of the any-nonzero-bit masking policy, if a consumer ever needs to keep e.g. warm-pixel bits.
- Ground-based (e.g. archival CFHT/Subaru for environment studies) and other space missions as need arises — adapters again.
- Euclid VIS is explicitly out of scope: Euclid reduction and
lens-modeling glue live in
euclid_strong_lens_modeling_pipeline.
- Sample-level driver: table in → datasets out, streaming acquire→evict.
- PSF-model library caching (focus-diverse ePSFs, STPSF grids) in the size- capped cache.
verify_install-style smoke path once the package is released.