Skip to content

Epic: v3.0.0 — Outpost support, Gateway MCP write mode, and the gateway_ rename #354

Description

@leggetter

Status: implementation complete, awaiting beta

Everything below is on feat/outpost-api-client in #348, with CI green across all four acceptance slices.

This epic was originally scoped as three parked breaking changes (#340, #347, #352). That is no longer what 3.0.0 is. It grew to carry Outpost support and Gateway MCP write mode, and two of the original three did not make it. Scope as it actually stands is below; the deferred items are at the end.

What is in 3.0.0

Breaking

Features

Fixes found by review

Seven release blockers, all fixed in #348:

  • Path traversal in resource IDs — an id like src_1/../../destinations/des_2 retargeted the request, so "delete this source" deleted an unrelated destination while reporting the id it was given. Fixed at two layers with a 57-method table test.
  • HOOKDECK_API_KEY printed by --help and, via the reference generator, committable to this public repo.
  • Quoted booleans and numbers silently dropped filters{"verified": "false"} returned every request and reported them as unverified.
  • Tool and env-var names that do not exist in user-facing text, including a README instruction to use HOOKDECK_API_KEY for MCP publishing, which the code deliberately refuses.
  • outpost destination update rejected every partial update, making credential rotation impossible.
  • outpost_destinations create omitted required topics, producing a 422 the CLI never hits.
  • ReadOnlyHint: true on a tool offering pause — a client auto-approving read-only tools would have halted production delivery without asking.

Plus, from review of the PR itself:

  • reauth no longer clears stored credentials before the sign-in completes — an abandoned browser flow used to sign the user out everywhere for nothing.
  • ToolSpec.DefaultAction removed as dead API.
  • go vet ./... clean repo-wide (unbuffered signal channel in pkg/login).

Testing

  • Coverage gates in both MCP packages that fail when an action ships without a successful-call test. Gateway went from 7 of 55 actions covered to 55 of 55.
  • Tests assert the wire request (method, path, query, body), not "did not error".
  • The outpostlive suite runs nightly instead of never.
  • HOOKDECK_CLI_TESTING_CLI_KEY wired into the acceptance job — project list/use had been skipping in CI since March.

Path to GA

  • Manual review of pkg/mcpcore/toolspec.go and pkg/gateway/mcp/tools.go. ~500 lines that construct every tool in both servers. Copilot declined the PR for exceeding its 20,000-line limit, so no automated reviewer has seen it either.
  • Cut v3.0.0-beta.1 from feat/outpost-api-client. Not from main — betas ship from the branch.
  • Beta validation. Point a real MCP client at both servers, read-only then --allow-write. Note that the beta channel is 1–9 organisations, so do not wait on external beta feedback — it does not arrive. This is dogfooding and rename-derisking.
  • Merge v3.0.0: Outpost support, Gateway MCP write mode, and the gateway_ tool rename #348 to main.
  • Release notes leading with the rename, including the before/after mapping and an explicit "you must re-grant tool permissions".
  • Tag v3.0.0.
  • Post-release watch, two weeks, named owner. Error rate per command against the Gateway baseline (10.36% CLI / 3.36% MCP non-2xx over 30 days), drop-off after project use, first external Outpost MCP tool call, --allow-write uptake, first non-webhook destination created. GA-then-fix is only honest if the fix half is real.

Known gaps at GA

Accepted, not blocking:

  • Non-webhook destination types (AWS, GCP, Azure, RabbitMQ, Kafka) are validated against the live schema but have never been created against real infrastructure. Only a real user closes this — worth recruiting a design partner already running one.
  • Outpost MCP write mode has never been exercised end-to-end against a real project. The actions call the same client methods the CLI commands do, and those are covered; the MCP-specific argument-to-request layer is covered by wire-shape unit tests.
  • outpost config set does not validate values. MAX_RETRY_LIMIT=notanumber is accepted with a success message. Per AGENTS.md we do not duplicate API validation client-side, but this is a footgun worth raising server-side.

Follow-ups (explicitly not blocking)

Deferred out of 3.0.0

These were in the original scope of this epic and are not in the release:

Both are genuinely breaking, so parking them again has a real cost: the next major is now the third time they have been deferred. Worth deciding whether the additive half of #347 (accept both formats) ships as a minor soon, rather than waiting.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions