The named-combos pipeline dropdown offered four engines (headroom,
session-dedup, ccr, llmlingua) that stackedPipelineStepSchema rejects, so
selecting one made PUT /api/context/combos/[id] return HTTP 400 while
saveCombo swallowed the non-OK response (if (!res.ok) return). Editing the
default 'Standard Savings' combo and changing an engine reproduced the 400.
- Add canonical STACKED_PIPELINE_ENGINE_INTENSITIES next to the schema as the
single source of truth; the client dropdown imports it so it can never drift
from the discriminated union the API validates against.
- Surface save errors and empty-name/empty-pipeline validation in the editor
instead of failing silently.
- Add a parity unit test asserting the UI engine map equals the schema union
and that every (engine, intensity) the UI emits is accepted.