Skip to content

V5 Worker Full Retirement (Post-Hoc)

ADR-065: V5 Worker Full Retirement (Post-Hoc)

Status: Accepted Date: 2026-05-20 Author: Claude Code (claude/v5-retirement-2026-05-20) Supersedes: ADR-057 §“V5 Worker (frozen)” row — V5 is no longer a frozen fallback; it is retired. Related: ADR-053 (lean stack), ADR-054 (side-channel retirement), ADR-061 (Pipedream gap-fill), ADR-063 (doc consolidation)


Context

ADR-057 (2026-05-19) designated the V5 Worker (ascend-gateway-v5.ascendgtm.workers.dev) as a “frozen fallback” — kept deployed for AWS / LLM / call_api / batch_execute / discover_apis while Composio became the canonical OAuth SaaS layer. The freeze was meant to last “until usage drops to zero or a critical bug forces a deploy.”

Investigation 2026-05-20 found:

  1. Prod V5 is already gone. GET https://ascend-gateway-v5.ascendgtm.workers.dev/health → 404. The custom-domain route is unrouted. No prod worker exists in the CF account under that name.
  2. R2 archive exists. Bucket gateway-v5-archive-2026-05-17 was created on 2026-05-17 — intentional decommission, not an outage. The retirement physically happened three days before this ADR; this document is post-hoc capture.
  3. Staging + dev workers still alive. ascend-gateway-v5-staging (tag 6d09c5defbf04255b86af945d44ecffa) and ascend-gateway-v5-dev (tag 6f542284c6964d5f872444f5b7729b18) still respond 200. These are zombie remnants — no consumer points at them, no CI deploys to them, no rotation cron writes to their KV.
  4. Orphan D1. ascend-gateway-db (uuid f9eb1ad6-b3a8-46d7-b433-2717267085cb), 0 tables, 106KB, created 2026-05-20T00:05Z. Generated by a stray wrangler.toml reference during the archive; no data at risk.
  5. net.ascendgtm/gateway v5.3.0 still listed in the public MCP registry (api.anthropic.com/mcp-registry). External consumers discovering the URL would 404 immediately. This is a stale public listing.
  6. AWS tools still register against V5. aws_bedrock_invoke, aws_bedrock_converse, aws_ses_send, aws_textract route through the V5 worker. With V5 gone in prod, these calls fail closed.
  7. 15 V5 invariants in .claude/rules/v5-invariants.md describe a single-plane CF Workers gateway that no longer exists in production. Pre-commit drift check #19 enforces these invariants against code that has been deleted.

The “frozen fallback” framing is no longer accurate. The honest description is: V5 is retired. The platform runs on Composio (OAuth SaaS) + Pipedream Connect (gap-fill) + ascend-side-channel (LLM/web/AWS) + Mem0 (memory) + direct CF bindings (KV/D1/R2/Vectorize via MCP).

Decision

V5 Worker is fully retired as of 2026-05-17 (archive date), with this ADR ratifying the retirement post-hoc on 2026-05-20.

What gets deleted

AssetActionReason
Prod worker ascend-gateway-v5 (custom domain)Already gone (verified 404)Mishaal archived 2026-05-17
Worker ascend-gateway-v5-stagingDELETE this PRZombie remnant
Worker ascend-gateway-v5-devDELETE this PRZombie remnant
D1 ascend-gateway-db (f9eb1ad6-…)DELETE this PROrphan, 0 tables, no data
Public MCP registry entry net.ascendgtm/gateway v5.3.0Deregister this PRStale public listing pointing at 404
V5 KV namespace 3c4d67dc67d040c4a40db5deb02db0f3KEEP — review separatelyMay still hold AWS/Anthropic creds; needs migration before delete
R2 gateway-v5-archive-2026-05-17KEEP indefinitelyForensic archive of last working state

What gets re-homed

The following V5 tools must migrate to ascend-side-channel (separate worker, separate repo) before deleting V5 KV:

  • aws_bedrock_invoke
  • aws_bedrock_converse
  • aws_ses_send
  • aws_textract

llm_invoke, claude, web_fetch, perplexity_search already exist in ascend-side-channel.

call_api, batch_execute, discover_apis — these were V5-platform tools tied to V5’s tenant_auth+KV-config-router design. They do not survive the retirement; tool calls now go directly via Composio MCP, Pipedream Connect MCP, or mcp__cloudflare-*__execute per the toolkit registry vendor column.

What gets retired (invariants)

The 15 invariants in .claude/rules/v5-invariants.md describe a single CF Worker plane that no longer exists. They are RETIRED as architecture rules and PRESERVED as historical record. The file is renamed .claude/rules/v5-invariants-retired.md and the drift check #19 is updated to skip the retired file.

A successor invariants doc will be drafted in a follow-up ADR once the post-V5 architecture (Composio + Pipedream + side-channel + direct bindings) stabilises. Until then, the invariants worth preserving across the cutover are:

  • No retries in caller paths. Callers retry. Composio / Pipedream / side-channel do not.
  • 30s timeout on every outbound fetch (applies to side-channel + any future worker).
  • Every LLM call through AI Gateway (applies to side-channel + future workers).
  • Tenant isolation via Composio user_id / Pipedream external_user_id (replaces V5’s KV tokens:{tenant}:… pattern for SaaS).
  • AWS credentials in side-channel KV tokens:{tenant}:aws:{account_id} (preserves V5’s multi-account pattern; explicitly scoped to AWS+Anthropic only since Composio owns SaaS OAuth).

These five rules are reaffirmed in this ADR and will land in the successor invariants doc.

What gets scrubbed

Canonical docs referencing V5 as “frozen fallback” or “still deployed” must be updated:

  • docs/CURRENT-STACK.md — V5 row moves to “Retired” section.
  • AGENTS.md — MCP architecture table + ASCII diagram updated.
  • .claude/CLAUDE.md — “What This Repo Contains” + MCP table updated.
  • .claude/rules/v5-invariants.mdv5-invariants-retired.md.
  • .claude/rules/reference.md — V5 internals → historical archive.
  • docs/projects/LEDGER.md — V5 row closed.
  • docs/composio/toolkit-registry.mdV5_CALL_API vendor entries removed; tools rerouted.
  • .mcp.json — already clean (ascend-gateway entry was removed prior).

Pre-commit check #22 (retired-names) extends to add ascend-gateway-v5 patterns to the allow-list for historical files (ADRs, archived docs) and reject occurrences in live code/config.

Consequences

Positive

  • Canonical stack matches reality. Fresh sessions stop reaching for the “frozen fallback” pattern that returns 404.
  • 15 invariants reduce to 5 (carried into successor doc). Reasoning load drops materially.
  • AWS tools move to ascend-side-channel — fewer planes, simpler routing.
  • Public MCP registry stops advertising a dead endpoint.
  • ~$5/mo CF Workers cost removed (staging + dev).

Negative

  • AWS tool calls break until cross-repo migration completes (next session, ascend-side-channel repo). Mitigation: those tools are infrequent (Bedrock/Textract/SES not on hot path); known-broken window measured in hours.
  • Any external integration that hardcoded https://ascend-gateway-v5.ascendgtm.workers.dev/mcp 404s — same status as today (V5 prod is already 404). No regression.
  • Historical context for “what was V5” requires reading the retired invariants doc + ADR-031 / ADR-032 / ADR-038 / ADR-057. Acceptable — that’s what archived docs are for.

Reversal triggers

This ADR is reversible only by:

  1. Restoring ascend-gateway-v5-* workers from the R2 archive (gateway-v5-archive-2026-05-17).
  2. Re-routing AWS tools back to a V5-style plane.
  3. Re-registering the public MCP entry.

No anticipated reason to do any of the above. Replace-don’t-restore is the default for any future need.

Implementation order (this PR)

  1. Write this ADR. ✅
  2. Delete orphan D1 ascend-gateway-db via mcp__cloudflare-bindings__d1_database_delete.
  3. Scrub canonical docs (parallel Edits): wrangler.toml, AGENTS.md, .claude/CLAUDE.md, docs/CURRENT-STACK.md, docs/projects/LEDGER.md, docs/composio/toolkit-registry.md, .claude/rules/reference.md.
  4. Rename .claude/rules/v5-invariants.mdv5-invariants-retired.md; update drift check #19 + check #22 allow-list.
  5. Update HANDOVER.md with retirement entry.
  6. npm run check:pre-commit — expect retired-names hits, fix or allow-list.
  7. Commit, push, open PR.
  8. After merge: delete CF workers staging + dev via mcp__cloudflare-bindings__execute.
  9. After merge: deregister net.ascendgtm/gateway v5.3.0 via api.anthropic.com/mcp-registry.
  10. File cross-repo task in ascend-side-channel: migrate AWS tools.
  11. Update Mem0 with retirement-complete entries.

Open

  • V5 KV namespace 3c4d67dc67d040c4a40db5deb02db0f3 audit + migration plan — separate ADR after AWS tool migration lands.
  • Successor invariants doc — separate ADR once side-channel surface stabilises.
  • Kahuna Pipedream GTM consent (unrelated carryover, Mishaal action).