Full report
Alert summary
A GET /api/external-tools/65/config request in GKE (runllm-prod, app/server, us-central1) returned HTTP 500 due to a Pydantic validation failure when parsing Jira external tool config from Vault (GCP Errors).
Investigation plan
Treat this as a schema-drift check: align deploy time and PR 37ceda3 with the error window, compare Vault payloads for tool 65 to the tightened JiraToolConfig model (ConfigDict(extra="forbid")), and use Grafana route metrics to confirm the blast radius matches a single read path.
Root cause hypothesis
The handler crashes in read_from_vault(...) → JiraToolConfig(**data) with ConfigDict(extra="forbid"). The raised pydantic_core.ValidationError
lists unrecognized keys: jira_pat, api_version, and fast_thread_token. Commit 37ceda3 (PR #4275) tightened the JiraToolConfig schema; Grafana route metrics show the failure rate at ~20% on the day of
deploy vs 0% the prior day.
Remediation suggestions
Implement backward-compatible read handling: map legacy Vault keys to the new fields, or migrate stored
payloads to the updated schema before enforcing extra="forbid" on read paths.
Full report
Alert summary
A GET /api/external-tools/65/config request in GKE (runllm-prod, app/server, us-central1) returned HTTP 500 due to a Pydantic validation failure when parsing Jira external tool config from Vault (GCP Errors).
Investigation plan
Rule out bad Vault data: verify whether configuration for tool 65 could be malformed or carry unexpected keys for JiraToolConfig independent of a recent application deploy.
Hypothesis validation
We read the live Vault entry for tool 65 and validated JSON shape and key set against the expected
template. The payload was well-formed; no spurious or corrupted fields were detected. The agent ran an
authenticated probe against Jira using the stored credential reference; the request completed
successfully, confirming the secret material resolves and authorizes correctly.
Conclusion
Hypothesis B (Bad Vault Data) is not supported by evidence: the Vault entry is not malformed, and the
credential check passed.
Full report
Alert summary
A GET /api/external-tools/65/config request in GKE (runllm-prod, app/server, us-central1) returned HTTP 500 due to a Pydantic validation failure when parsing Jira external tool config from Vault (GCP Errors).
Investigation plan
Rule out a tool-type mismatch: verify whether JiraToolConfig is being applied to the wrong record or whether id 65 maps to a different integration in the database.
Hypothesis validation
We inspected the external_tools record for id 65 and verified tool_type_id
matches the Jira integration. Related auth and deployment rows were consistent; there was no
cross-type mapping or stale foreign key that would load another tool type’s Vault payload.
Conclusion
Hypothesis C (Tool Type Bug) is not supported by evidence: the database row is valid and consistent
with a Jira external tool.