Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Copilot review overview
🟢 Approval recommended
The schema change consistently matches the documented and verified managed API behavior.
Review effort: Balanced
Findings: None
What changed in this PR
Review summary
Updates the OpenAPI schema to accurately represent nullable managed configuration values.
Changes:
- Allows all 73
ManagedConfigproperties to accept strings ornull. - Enables generated SDKs to validate responses and send configuration-clearing updates.
| File | Description |
|---|---|
docs/apis/openapi.yaml |
Makes managed configuration properties nullable using OpenAPI 3.1 syntax. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
@alexluong - you may have better insight into what should actually be allowed to be |
README links the Send MCP Events Webhooks with Outpost guide and hookdeck/outpost#1133. AGENTS.md status and next steps reflect the published guide, the planned video, and the follow-up once the SDK fix ships. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
alexluong
left a comment
There was a problem hiding this comment.
Thanks Phil. The blanket approach is right. GET returns null for any key that has no override and no default, and PATCH accepts null on every key to clear it. Since one schema covers the request and both responses, every property needs to be nullable. LGTM.
One thing for the release notes: in the Go SDK every ManagedConfig field changes from *string to optionalnullable.OptionalNullable[string], so existing Go code breaks (DeliveryTimeoutSeconds: outpost.String("45") becomes optionalnullable.From(outpost.String("45"))). TS and Python only widen the type.
Problem
On managed Outpost,
GET /configreturnsnullfor keys that aren't set (51 of 73 keys in one project). TheManagedConfigschema declares every property astype: string, so the generated SDKs reject the response. With@hookdeck/outpost-sdk1.7.0:The same schema is the
PATCH /configrequest and response body. The PATCH docs say "Null values clear the configuration", but the SDK types don't allow sendingnull, and the response fails validation in the same way.Change
Every
ManagedConfigproperty is nowtype: [string, "null"], the OpenAPI 3.1 form (this spec is 3.1.0). Spec only: the SDKs pick it up when they're regenerated on the next release.Testing
speakeasy lint openapi: same result asmain(0 errors).speakeasy run -t outpost-ts, not committed). The schema becomesz.nullable(z.string()).optional(), and the typestring | null | undefined.getManagedConfig()parses the response (73 keys, 51null), andupdateManagedConfig()round-trips a no-op update.spec-sdk-testsruns against self-hosted Outpost, which has no/config, so it can't cover this endpoint.Notes
string | undefinedtostring | null | undefined. Strict TypeScript code reading them may need a null check, and Speakeasy may version that as a breaking change.nullable: true. Speakeasy accepts both; I left them alone.🤖 Generated with Claude Code