March 20: From Signal Fading to Palette Lerping
The big multi-instrument compositing push. Started with per-channel feathering that couldn't fix the MIRI color palette shift, evolved to instrument-level blending, then realized signal fading destroys detail and invented color-contribution feathering — lerping between palette interpretations instead of fading signals.
Developer Journal
The MIRI boundary problem
Multi-instrument composites (MIRI + NIRCAM) had a visible color palette shift at the MIRI FOV boundary. All MIRI channels share the same field of view footprint, so per-channel feathering produced identical masks for all of them — they all faded in lockstep. The result was an abrupt 6-channel to 4-channel palette change regardless of feather strength.
Instrument-level blending (attempt 1)
The first fix grouped channels by instrument, produced per-group RGB images, and blended them with equal weight using instrument-level coverage masks. This worked for the yellow/green channels (F770W) — smooth transitions, no hard edge. But the red (F1500W) transition to background remained sharp, and cranking up the feather width just washed out detail in the transition zone.
The insight: feather the color, not the signal
The key realization came from looking at what feathering actually does — it fades the entire signal (structure + color) to zero. But what you actually want is to preserve all structural detail and only transition the color palette. The fix: compute two RGB images (full 6-channel palette and NIRCAM-only palette) and lerp between them using the MIRI coverage mask. NIRCAM structure exists in both images, so nothing is lost in the transition.
CEO review auto-progression
Also improved the workflow tooling — the CEO review skill now automatically progresses to the engineering review when the verdict is "proceed," eliminating the manual handoff that was slowing down the implementation pipeline.
What shipped
| PR | Title |
|---|---|
| #890 | fix: color-contribution feathering for multi-instrument composites |
| #888 | fix: instrument-level blending for multi-instrument composites |
| #887 | chore: process improvements — trim AGENTS.md, add skills, docs audit |
| #886 | fix: use line content as React key instead of array index |
| #884 | fix: auto-enable feathering for multi-instrument composites |
| #881 | fix: resolution blur, per-channel feathering, and instrument-aware stretch |
| #880 | fix: exclude background/calibration targets from recipe generation |