Description
SKT-0011 scenario D3 confirmed invalid uploads return a diagnostic, but posting a documented namespaced copy of a shipped valid blueprint returned HTTP 400. A first-time operator cannot distinguish a bad request shape from a valid blueprint rejected by the upload path.
Acceptance Criteria
- #1 A documented valid custom blueprint upload succeeds and applies
- #2 An invalid custom blueprint still returns a diagnostic naming the schema or semantic problem
- #3 Focused tests reproduce the valid HTTP 400 before the fix and cover both valid and invalid requests
Definition of Done
- #1 just check (fmt-check, lint, gen-check, env-check, docs-check, test, race, hygiene, ui-check, compose-check, helm-test, lab-check, signal-fidelity)
- #2 just gen (only if a blueprint field, construct/workload config struct, or a skill under plugins/synthkit/skills/ changed)
- #3 just dump — inventory diffed against signals/
Implementation Plan
Lane B first reproduces the valid-upload HTTP 400 with a focused failing test, then fixes valid and invalid request handling.
Implementation Notes
2026-08-30 closeout: the focused test reproduced the valid-upload failure before the manager fix; invalid input still returned HTTP 400 diagnostics. A valid namespace=acceptance, name=copied request returned staged acceptance/copied, and the local wave image exposed acceptance/copied in the live schema after restart.
Final Summary
Valid namespaced custom blueprints now stage, survive restart, and apply; invalid blueprints retain actionable diagnostics.