Skip to content

fix(dashboard): register engine schemas at startup to fix webhooks 500#896

Merged
zbigniewsobiecki merged 1 commit intodevfrom
fix/dashboard-register-engine-schemas-at-startup
Mar 16, 2026
Merged

fix(dashboard): register engine schemas at startup to fix webhooks 500#896
zbigniewsobiecki merged 1 commit intodevfrom
fix/dashboard-register-engine-schemas-at-startup

Conversation

@zbigniewsobiecki
Copy link
Copy Markdown
Member

Summary

  • webhooks.list and webhooks.create were returning HTTP 500 for any project with claude-code engineSettings configured
  • Root cause: EngineSettingsSchema uses a dynamic registry of engine-specific Zod schemas, populated by registerBuiltInEngines(). This was only called lazily from the agentConfigs tRPC handler, so cold requests through any other path (e.g. webhooks) hit validateConfig() with an empty registry and got: Unsupported engine settings for "claude-code"
  • Fix: call registerBuiltInEngines() once at dashboard startup so the registry is always populated before any request is handled

Error the user saw:

[{"code":"custom","path":["projects",0,"engineSettings","claude-code"],"message":"Unsupported engine settings for \"claude-code\""}]

Test plan

  • npm run typecheck — clean
  • npm run lint — clean
  • Pre-push hook (unit tests) — passed
  • After deploy: open PM wizard webhook step on a claude-code project → webhooks.list returns 200, webhooks.create works

🤖 Generated with Claude Code

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 zbigniewsobiecki merged commit c873238 into dev Mar 16, 2026
6 checks passed
@zbigniewsobiecki zbigniewsobiecki deleted the fix/dashboard-register-engine-schemas-at-startup branch March 16, 2026 12:53
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>
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant