fix(dashboard): register engine schemas at startup to fix webhooks 500#896
Merged
zbigniewsobiecki merged 1 commit intodevfrom Mar 16, 2026
Merged
Conversation
EngineSettingsSchema uses a dynamic registry populated by registerBuiltInEngines(). Previously this was only called lazily inside the agentConfigs router handler, so any tRPC call that loaded project config before agentConfigs was ever touched would fail validation with: Unsupported engine settings for "claude-code" This caused webhooks.list and webhooks.create to return HTTP 500 for any project with claude-code engineSettings configured, because resolveProjectContext() calls findProjectByIdFromDb() which runs validateConfig() which runs EngineSettingsSchema. Fix: call registerBuiltInEngines() once at dashboard startup so the registry is always populated before any request is handled. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
zbigniewsobiecki
added a commit
that referenced
this pull request
Mar 16, 2026
…sing The router's loadProjectConfig() calls validateConfig() which runs EngineSettingsSchema — a Zod schema that validates against a dynamic registry populated by registerBuiltInEngines(). Without calling registerBuiltInEngines() at startup, any project with claude-code, codex, or opencode engineSettings configured causes a ZodError: Unsupported engine settings for "claude-code" This error is thrown inside TrelloRouterAdapter.parseWebhook() and JiraRouterAdapter.parseWebhook(), which return null on any unhandled exception — so all webhooks for affected projects are silently dropped with no job enqueued and no agent triggered. Fix: call registerBuiltInEngines() once at router startup, before any request handler runs. Identical to the dashboard fix in #896. Affected projects: any project with per-project engineSettings using claude-code, codex, or opencode backend. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5 tasks
zbigniewsobiecki
added a commit
that referenced
this pull request
Mar 16, 2026
…sing (#899) The router's loadProjectConfig() calls validateConfig() which runs EngineSettingsSchema — a Zod schema that validates against a dynamic registry populated by registerBuiltInEngines(). Without calling registerBuiltInEngines() at startup, any project with claude-code, codex, or opencode engineSettings configured causes a ZodError: Unsupported engine settings for "claude-code" This error is thrown inside TrelloRouterAdapter.parseWebhook() and JiraRouterAdapter.parseWebhook(), which return null on any unhandled exception — so all webhooks for affected projects are silently dropped with no job enqueued and no agent triggered. Fix: call registerBuiltInEngines() once at router startup, before any request handler runs. Identical to the dashboard fix in #896. Affected projects: any project with per-project engineSettings using claude-code, codex, or opencode backend. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
zbigniewsobiecki
added a commit
that referenced
this pull request
Mar 16, 2026
Same bug as router (#899) and dashboard (#896): worker-entry.ts calls loadConfig() at line 253 which runs EngineSettingsSchema validation. The dynamic ENGINE_SETTINGS_SCHEMAS registry was empty because registerBuiltInEngines() had not yet been called — it only runs later when createAgentRegistry() initializes. This caused every worker container to crash immediately with: ZodError: Unsupported engine settings for "claude-code" ...for any project with claude-code/codex/opencode engineSettings, making all Trello/JIRA/GitHub agent runs fail at job start. Fix: call registerBuiltInEngines() once before loadConfig(). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
zbigniewsobiecki
added a commit
that referenced
this pull request
Mar 16, 2026
…#900) Same bug as router (#899) and dashboard (#896): worker-entry.ts calls loadConfig() at line 253 which runs EngineSettingsSchema validation. The dynamic ENGINE_SETTINGS_SCHEMAS registry was empty because registerBuiltInEngines() had not yet been called — it only runs later when createAgentRegistry() initializes. This caused every worker container to crash immediately with: ZodError: Unsupported engine settings for "claude-code" ...for any project with claude-code/codex/opencode engineSettings, making all Trello/JIRA/GitHub agent runs fail at job start. Fix: call registerBuiltInEngines() once before loadConfig(). Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
webhooks.listandwebhooks.createwere returning HTTP 500 for any project withclaude-codeengineSettingsconfiguredEngineSettingsSchemauses a dynamic registry of engine-specific Zod schemas, populated byregisterBuiltInEngines(). This was only called lazily from theagentConfigstRPC handler, so cold requests through any other path (e.g. webhooks) hitvalidateConfig()with an empty registry and got:Unsupported engine settings for "claude-code"registerBuiltInEngines()once at dashboard startup so the registry is always populated before any request is handledError the user saw:
Test plan
npm run typecheck— cleannpm run lint— cleanclaude-codeproject →webhooks.listreturns 200,webhooks.createworks🤖 Generated with Claude Code