Repository navigation
Description
Context
PR #1049's documentation refresh recorded unimplemented adapter stores and dead manifest declarations. That finding is historical. At 666953a0d, Cloudflare and Spin build request-time config and KV adapters from EdgeZero context handles; Spin also loads startup configuration from its default KV-backed config store. Axum reads configuration and secrets from environment variables and has no request-time KV implementation. Cloudflare startup still reads a nested TRUSTED_SERVER_CONFIG Worker variable, and its admin EC lookup and key-management routes return unsupported responses. The current Cloudflare guide still says its request-time stores are unwired, which disagrees with platform.rs.
Desired outcome
Every declared adapter store has a documented purpose and a tested path from the runtime binding to the feature that consumes it. Unsupported capabilities are accurately described and are not implied by a manifest entry.
Scoped work
- Reconcile
edgezero.tomland adapter manifests with the current Cloudflare, Spin, and Axum implementations. For each declared config, KV, and secret store, record its startup and request-time use or its unsupported status. - For a genuinely dead declaration, either implement the intended adapter path and tests or remove the declaration and narrow the associated API and deployment documentation. Keep this choice with maintainers; the PR Add full-surface documentation refresh spec #1049 finding alone does not justify removing a now-used store.
- Check request-signing metadata and key access against Spin's current default KV and encoded secret-variable scheme; the original claim that
kidvariables are unreachable is no longer sufficient evidence by itself. - Correct the Cloudflare guide's stale request-time-store statement and any other matrix entries that disagree with the verified behavior.
Done when
- A store inventory identifies every adapter manifest declaration and the code path or explicit unsupported contract for it.
- Tests exercise supported store reads through each adapter's actual binding or context path, and unsupported paths return documented results.
- Dead declarations, if any, are removed or implemented according to the recorded decision.
- Deployment and API documentation matches the tested adapter behavior.
Evidence
Source finding: PR #1049 documentation refresh. Current code inspected at 666953a0d: Cloudflare and Spin platform.rs, Axum platform.rs, adapter startup loaders, edgezero.toml, and docs/guide/cloudflare.md. This is an inventory task, not a claim that all PR #1049 gaps still exist.
Activity
erik-sv commentedon Oct 5, 2026
We need runtime KV on all four adapters for an integration we are building, so we traced how
RuntimeServices::kv_store()is wired at666953a0. Three findings may help the inventory:ctx.kv_store_default(). Only the Fastly adapter implementsHooks::stores(), so EdgeZero builds an empty KV registry on Cloudflare and Spin, and the default handle isNone. The result isUnavailableKvStoreeven withTRUSTED_SERVER_KVbound inwrangler.toml.trusted_server_kv, butRuntimeServicesreceivesUnavailableKvStore.Hooks::stores()would make it mandatory. On Cloudflare, EdgeZero resolves a declared binding as required and fails the request before routing when it is missing. Spin returns an error when a declared label cannot be opened. Either would break every publisher who has not created the namespace or label, including those who never use KV.No production code calls
kv_store()at the pin, only tests, so wiring it changes no current behavior.We have a branch that opens the store as optional on each adapter. A missing binding keeps today's behavior,
KvError::Unavailable, and requests are still served.TRUSTED_SERVER_KVbinding per request.trusted_server_kvlabel on first use. It never opensdefault, which holds startup config and signing metadata.TRUSTED_SERVER_KV_PATHis set. It runs store operations on the blocking pool, so a slow write cannot hold the request task.The branch leaves
edgezero.tomland the adapter manifests alone; that decision stays with you, as this issue says. It adds tests for each adapter's selection and open logic and corrects the stale line in the Cloudflare guide. We have also run it onwrangler dev --localandspin upwith the binding present and absent.Would a PR that references this issue, without closing it, be useful? We would rebase it on current
mainfirst.aram356 commentedon Nov 13, 2026
CREATOR: This issue is now part of #1558, server-side identity on every adapter. It is planned in an
anyrow (no fixed wave; starts when its decision or reviewer is ready; after the MVP); priority P3, size M.Blocked by: nothing.
Design: spec; order and dependencies: plan.