Description
When the console runs behind a reverse proxy or a managed wrapper, some control routes may be owned by the wrapper and blocked at the proxy (for example blueprint sources, custom uploads, reset). Today the console still shows those controls and the operator only learns on click, from a proxy error. Add a generic, optional way for a deployment to declare managed features: a config value (for example CONTROL_MANAGED_FEATURES, a comma-separated list of feature keys with an optional reason) that the server injects into index.html next to the runtime base path from SKT-0098, and that the console reads to render the matching controls as locked, with the reason shown. The server keeps enforcing nothing new: this is presentation only, and the proxy or wrapper stays the enforcement point. Unset keeps today’s behaviour exactly.
Acceptance Criteria
- #1 Feature keys are a small documented enum covering blueprint sources, custom blueprint uploads and reset; unknown keys are rejected at startup
- #2 With the value set, the console renders those controls disabled with the configured reason; with it unset the UI is unchanged
- #3 UI tests cover the injected list and the locked rendering; docs/control-plane.md and docs/configuration.md describe it; .env.example and compose updated
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
Optional managed-feature enum config with reasons, escaped runtime meta and presentation-only disabled controls. Reject unknown keys, preserve unset index bytes, exercise UI rendering, align env/docs and gate. Isolated append-only changes rebased onto preceding shared-file land before acceptance.
Implementation Notes
Optional enum JSON feature reasons, startup rejection, escaped runtime metadata, actual Solid DOM disabled controls/reasons and unchanged unset response; presentation only. Original1200cefCIcancelled and composedred600.732s remain nonpasses. Exact integrated descendantdea393d84ee23c9100510c830b0977185c00a20e fullcomposed0 and CI38097611214all10success cover feature. Independent reviewPASS, aggregate25file routineCodeRabbit0findings. No live proof claimed; generator/inventory DoD not applicable.
Final Summary
Deployments can disable blueprint sources, custom uploads and reset in the console with reasons without new API enforcement. Startup, escaped metadata, actual rendered controls and unset bytes proved locally; integrated exact CI/composed green.