fix(canvas): SSOT-drive runtime picker so google-adk shows correctly #2016
Reference in New Issue
Block a user
Delete Branch "feat/google-adk-runtime-ssot"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
The ConfigTab runtime dropdown filtered
GET /templatesthrough a hardcodedSUPPORTED_RUNTIME_VALUESallowlist (claude-code/codex/openclaw/hermes).google-adkships inmanifest.jsonand the workspace-serverknownRuntimesregistry, but this frontend Set silently dropped it — so a google-adk workspace's Config tab rendered the wrong runtime option, and Save & Restart would clobber the runtime (same class as the hermes "Claude Code (default)" bug, #1894).Fix (SSOT-driven)
GET /templatesis already gated to the manifest maintained set byloadRuntimesFromManifest, so the picker should trust the backend, not re-filter it.ConfigTab.tsx: removeSUPPORTED_RUNTIME_VALUES; show every runtime/templatesserves, hiding one only when its template declaresdisplayable: false. Addgoogle-adkto the offline fallback.templates.go: add optionalDisplayable *bool(yaml+json, omitempty) plumbed config.yaml →/templates, so a runtime opts out of the picker declaratively (replaces the hardcoded frontend gate).Tests
ConfigTab.googleAdk.test.tsx— google-adk selected;displayable:falsehidden.TestTemplatesList_DisplayableFlag— nil/true/false + omitempty JSON contract.Local: vitest changed-area 76 passed;
go test ./internal/handlersok; eslint+gofmt+vet clean.🤖 Generated with Claude Code
QA review: SSOT-driven runtime picker — verified the dropdown now derives from /templates (manifest-gated) instead of the hardcoded allowlist; new ConfigTab.googleAdk test covers google-adk selected + displayable:false hidden; TestTemplatesList_DisplayableFlag covers nil/true/false + JSON omitempty. LGTM.
Security review: change is display/filtering only; no auth/secret surface touched. Displayable is an additive opt-out flag (pointer, omitempty), no privilege implications. LGTM.
/qa-recheck
/security-recheck
Re-approve after CI re-trigger empty commit (4cb9f0e2); code unchanged.
Re-approve after CI re-trigger empty commit (4cb9f0e2); code unchanged.