High-level backlog and decisions to drive the next milestones.
- Core:
Response::json<T: serde::Serialize>behindserdefeature - Fastly proxy: add tests for backend send + header/body mapping
- Cloudflare streaming: map
Response::with_chunkstoReadableStreamwith backpressure - Core proxy: add async fetch facade (feature
async-client) and implement Cloudflare proxy async fetch facade (featureasync-client) and implement Cloudflare proxy
- Fastly demo: add optional backend example to validate
req.send("backend") - Core: utility to serve embedded static files via
include_str!/include_bytes!with proper Content-Type and HEAD (no body) handling - Docs: document header/method/status mapping to
httpcrate - Docs: add RouteOptions + streaming policy section (examples done; expand README section)
- CLI: manifest-driven
edgezero build --adapter fastly|cloudflare|axumwiring viacrates/edgezero-cli/src/main.rs+ adapter manifests. - CLI: manifest-driven
edgezero deploy --adapter fastly|cloudflarewrappers that call Fastly CLI orwranglerper manifest config. - CI: workspace
fmt,clippy, andtestworkflows (.github/workflows/format.yml,.github/workflows/test.yml). - Cloudflare demo: runnable
wranglerexample underexamples/app-demo/crates/app-demo-adapter-cloudflare(withwrangler.toml+ README instructions). - Core: helper to fetch all header values for a name (multi-value support)
- Docs: clean stale references to removed hello example from README/targets
- Docs: highlight controller-based workflow and update examples
- Controllers: add
edgezero-controller+edgezero-macroswith typed extractors and#[action]helpers
- Adapters: introduce Fastly/Cloudflare mapping tests (headers, streaming, proxy failure) to catch glue regressions.
- Adapters: assert error-path mapping for Fastly/Cloudflare request conversion and re-enable the ignored Cloudflare response header test.
- CLI: add integration tests for
edgezero newscaffolding, feature-flag builds, anddevfallback app. - CLI: cover
dev_server, generator, and template scaffolding flows with tempdir-based integration tests to guard manual HTTP parsing and shell commands. - CI: verify feature combinations (without
dev-example,json,form) compile and run basic smoke tests. - Macros: add trybuild coverage for
app!manifest expansion (route/middleware generation and error surfacing). - Core: unit-test
App::build_app/Hookswiring andPathParams::deserializeedge cases beyond indirect coverage. (Added targeted unit tests incrates/edgezero-core/src/app.rsandcrates/edgezero-core/src/params.rs.) - Coverage hygiene: consolidate duplicate router/extractor request-parsing tests and share adapter contract fixtures to reduce redundant maintenance. (Router duplicates trimmed; extractor suite now owns request parsing checks.)
- Router: add regression cases for overlapping routes, prefix/nest behaviour, and BodyMode error handling (
StreamingvsBuffered). - Controller: cover negative paths (
State<T>missing,ValidatedJsonerrors) and assert returned status/body.
- Fastly adapter MVP
- Map Fastly Request ->
edgezero-core::Request - Map
edgezero-core::Response-> Fastly Response (headers/body) - Handle binary/text bodies and content-length
- Example: runnable Fastly demo (
examples/app-demo/crates/app-demo-adapter-fastly) with wasm32-wasip1 target and explicit logger init - Streaming: native streaming on Fastly via
stream_to_client(wasm32-wasip1), buffered fallback elsewhere
- Map Fastly Request ->
- Cloudflare Workers adapter MVP
- Basic mapping: Workers Request -> EdgeZero Request
- Basic mapping: EdgeZero Response -> Workers Response (buffered bodies)
- Streaming behavior (ReadableStream) and backpressure
- Example: deploy sample with
wrangler(examples/app-demo/crates/app-demo-adapter-cloudflare)
- CLI
-
edgezero new <name>: scaffold an app (lib withbuild_app()) -
edgezero build --adapter fastly|cloudflare -
edgezero deploy --adapter fastly|cloudflare -
edgezero devimprovements: better HTTP parsing, hot-reload
-
- Config
-
edgezero.toml: app name, routes, provider-specific settings - Secrets/ENV strategy and provider bindings
-
- Observability
- Logging levels; feature-gated tracing
- Metrics hooks; request timing middleware
- Router
- Wildcards (
*), optional segments, query params helpers - HEAD/OPTIONS helpers; 405 handling
- 501 handling
- Wildcards (
- Responses
- JSON helper (serde optional feature)
- Streaming/chunked support
- Errors
- Unified error type in core; map provider errors to HTTP 5xx
- Docs
- Provider guides (Fastly, Cloudflare)
- CLI reference
- Example cookbook
- CI
- Run
cargo fmt,cargo clippy, and tests
- Run
- Adapter stability: formalise the provider adapter contract (request/response mapping, streaming guarantees, proxy hooks) and capture it in shared docs + integration tests so new targets plug in safely. (
docs/adapter-contract.md, Fastly contract tests undercrates/edgezero-adapter-fastly/tests/contract.rs, Cloudflare contract tests undercrates/edgezero-adapter-cloudflare/tests/contract.rs, manifest schema indocs/manifest.md) - Provider additions: prototype a third adapter (e.g. AWS Lambda@Edge or Vercel Edge Functions) using the stabilized adapter API to validate cross-provider abstractions.
- Manifest ergonomics: design an
edgezero.tomlschema that mirrors Spin’s manifest convenience (route triggers, env/secrets, build targets) while remaining provider-agnostic; update CLI scaffolding accordingly. (crates/edgezero-cli/src/manifest.rs, templates incrates/edgezero-cli/src/templates/root/edgezero.toml.hbs, docdocs/manifest.md, app-demo manifestexamples/app-demo/edgezero.toml) - Tooling parity: extend
edgezero-cliwith template/plugin style commands (similar to Spin templates) to streamline new app scaffolds and provider-specific wiring. - CLI parity backlog: add
edgezero --list-adapters, standardize exit codes, search up foredgezero.toml, respectRUST_LOGfor dev output, and bake in hot reload foredgezero dev.
- Provider priorities: focus on Fastly Compute@Edge, then Cloudflare Workers.
- Minimum Rust version (MSRV) target.
- Async story: keep core sync or introduce async features (Tokio) behind flags?
- Request/Response mapping rules (header casing, multi-value headers, binary bodies).
- Caching/edge-specific headers: how much to standardize (e.g., Surrogate-Control)?
- Dev UX: integrate a local hyper server behind a feature vs. keeping zero-deps TCP server.
- Packaging/deploy: preferred tooling (Fastly CLI/API; AWS SAM/CDK or native Lambda tooling).
- Config format: TOML/JSON/YAML; env overlays.
License and contribution guidelines.License set to Apache-2.0.
- Review repository guides (
README.md,AGENTS.md) to capture stated goals and workflows. - Map the crate layout by skimming
Cargo.tomland key crate README/doc comments. - Summarize findings on EdgeZero architecture, adapters, and tooling for the user's quick reference.
- EdgeZero centres around
edgezero-core, which provides provider-neutral HTTP primitives, routing, middleware, logging, and proxy abstractions; adapters reuse these types to stay DRY. - Controller ergonomics live in
edgezero-controllerplusedgezero-macros, offering#[action]functions that extract typed inputs and returnResponders. - Provider adapters (
edgezero-adapter-fastly,edgezero-adapter-cloudflare) are feature-gated; each exposeshandleplus logging/proxy helpers while delegating behaviour to the core crate. - Supporting crates include
edgezero-stdfor stdout logging,edgezero-clifor dev server + scaffolding, and demo workspaces underexamples/app-demoto validate provider flows. - Workspace
Cargo.tomlkeeps default members lean (core only) to support offline builds; additional crates are opt-in via features when targeting specific adapters.
- Review existing parameter/body extractors to identify integration points for validator-backed wrappers.
- Implement validated variants for path/query (and other relevant) extractors reusing
validator::Validate. - Add unit tests covering success and failure cases for the new extractors.
- Update public exports/docs to surface the new API and capture the change in this TODO review.
- Confirm existing JSON validation support and identify changes needed for
ValidateJsonergonomics. - Introduce a
ValidateJsonalias (or equivalent helper) that reusesValidatedJson<T>. - Update docs/tests to reference the new alias where appropriate and log the change in this TODO review.
- Remove the
ValidateJsonwrapper from extractors/tests/exports, keepingValidatedJsonas the canonical helper. - Revert docs and TODO review notes referencing
ValidateJson. - Re-run controller crate tests to confirm everything still passes.
- Recorded a three-step familiarization plan, executed documentation + crate walkthrough, and captured architectural notes under the plan section.
- Assumed existing docs (
README.md,AGENTS.md) are the latest sources of truth; no discrepancies observed during review. - No outstanding issues or errors encountered; no code changes outside TODO.md updates.
- Introduced
ValidatedPathandValidatedQueryextractors leveragingvalidator::Validate, re-exported them, and broadened docs inREADME.md. - Added targeted unit tests verifying both success and failure cases for validated path/query extraction;
cargo test -p edgezero-controllerpasses. - No additional assumptions beyond existing validation behaviour; no unresolved issues noted.
- Removed the redundant
ValidateJson<T>wrapper per updated guidance, keepingValidatedJson<T>as the single validator-backed JSON extractor. - Cleaned README/TODO references accordingly and pruned alias-specific tests;
cargo test -p edgezero-controllerstill passes. - Validator helpers now cover path, query, and JSON via
Validated*types only.
- Implemented
edgezero build|deploy --adapter fastlyby wiring cargo wasm32 builds and Fastly CLI invocation in the CLI. - Documented optional
dev-exampledependency inedgezero-cli/README.mdand added error handling for unsupported adapters. - Verified builds with
cargo test -p edgezero-cli.
- Moved Fastly build/deploy/serve helpers into
edgezero-fastlybehind aclifeature and updatededgezero-clito call through the provider abstraction. - Improved Fastly manifest discovery to prefer the nearest crate manifest and added unit coverage for the new path logic.
cargo test -p edgezero-fastly --features cli,cargo test -p edgezero-cli.
- Confirm current workspace layout to know which
cargocommands exercise all crates. - Advise user on running full test suite and targeted variants as needed.
- Reproduce
cargo test -p edgezero-fastlyfailure to capture the exact error. (Unable to reproduce; command succeeds locally.) - Inspect relevant sources/tests to identify root cause. (Fastly feature requires
wasm32-wasip1target; host builds fall back to stub with no tests.) - Implement minimal fix addressing the failure while staying within adapter boundaries. (Blocked:
cargo test --features fastly --target wasm32-wasip1currently fails under Viceroy with macOS keychain access errors.) - Re-run targeted tests (and any impacted suite) to confirm resolution. (Blocked.)
- Summarize work and outcomes in TODO review section with timestamp. (Blocked.)
- Audit required commands for workspace + feature coverage including Fastly wasm build.
- Implement shell script to orchestrate the checks with Fastly-specific handling.
- Document script usage and outcomes in TODO review section with timestamp.
- Define the reduced test-only scope for
scripts/run_tests.sh, including Fastly wasm coverage. - Update the script to drop fmt/clippy/build steps and run the desired test commands (host + wasm).
- Ensure script messaging guides users when Fastly wasm tests cannot run (e.g., Viceroy keychain issues).
- Record the changes and remaining caveats in TODO review section with timestamp.
- Decide on section markers/format for clearer script output.
- Update
scripts/run_tests.shto print section headers around each major test group. - Verify the script still exits with helpful guidance on wasm failures.
- Log the changes in TODO review section with timestamp.
- Remove custom failure messaging in
scripts/run_tests.shso wasm tests fail like other sections. - Verify script behaviour post-change.
- Update TODO review section with outcome and timestamp.
- Consolidate binary/target verification at the top of
scripts/run_tests.sh. - Ensure checks cover both
cargo,rustup, and wasm target before any tests run. - Validate script after refactor and document changes in TODO review.
- Inspect controller
RouteSet/RouteSpecto identify extension points for route-level body mode. - Implement API changes allowing controllers to opt into streaming/buffered modes and wire through to core router.
- Add tests covering streaming behaviour via controller routes.
- Document changes in TODO review section with timestamp.
- Audit the app-demo crates to map controller-era APIs to the redesigned
edgezero-coreinterfaces. - Refactor
app-demo-corehandlers and routing to the new builder/extractor patterns, keeping streaming coverage intact. - Update Fastly/Cloudflare entrypoints (and related metadata) so they compile against the redesigned core hooks.
- Run targeted tests for the app-demo crates and prepare review notes for TODO.md.
- Pinpoint the dependency pulling in
worker 0.0.24and decide whether to remove or upgrade it so builds only useworker 0.6.x. - Adjust the Cloudflare adapter to drop the outdated logger dependency (or replace it) while keeping logging behaviour sensible.
- Ensure workspace manifests stop requesting the older crate and update docs if they reference it.
- Re-run
cargo test(or equivalent host checks) to confirm the build completes, then capture the outcome in TODO review notes.
- Add a dedicated
logger.rsto the Fastly adapter mirroring the Cloudflare structure. - Re-export the new logger helper from
lib.rsand update call sites if needed. - Ensure any docs or templates referencing Fastly logging stay accurate.
- Run
cargo testto confirm the refactor behaves as before.
- Survey current test command usage to see if any coverage tooling is documented or scripted.
- Evaluate Rust-friendly coverage options (e.g.
cargo llvm-cov,grcov) for compatibility with the workspace (wasm targets, feature flags). - Prototype a coverage run on a representative crate (likely
edgezero-core) to gauge feasibility and capture required tooling steps. - Summarize recommended approach, prerequisites, and open questions in TODO review notes.
- Expand unit tests for
edgezero_core::context::RequestContextto cover extraction success/failure, JSON/form parsing, and path/query edge cases. - Add tests for
edgezero_core::error::EdgeErrorconstructors and conversion paths, ensuring status codes + messages are asserted. - Exercise middleware chaining (
middleware.rs) with mock handlers to cover both middleware execution and early returns. - Write targeted tests for
Bodyconversions (streaming JSON failure,into_bytespanic guard, etc.) andResponsehelper methods. - Introduce extractor/responder tests to lift coverage in
extractor.rsandresponder.rs. - Add compile-fail or snapshot tests for the
edgezero-macros::actionproc macro to cover unsupported inputs. - Run
cargo llvm-cov --package edgezero-core(and any new test suites) to validate coverage improvements.
- Switch app-demo crates to consume workspace-shared dependencies (
{ workspace = true }) for core libraries and tooling. - Ensure root
Cargo.tomlworkspace dependencies cover the required crates (adding any missing entries). - Update adapter/demo crate manifests to drop redundant version/specification lines in favour of workspace references.
- Run
cargo test(or targeted checks) to confirm builds remain healthy.
- Update the Fastly adapter to compile against
fastly0.11 APIs (request building, async streaming, response conversion). - Adjust logging helper to the new log-fastly builder API.
- Ensure proxy tests/builds pass for streaming + compression paths.
- Verify the app demos compile for
wasm32-wasip1with the updated SDK.
- Rebuilt
app-demo-coreagainst the redesignededgezero-coreby wiring routes throughRouterService::builder, swapping controller extractors foredgezero_coreequivalents, and preserving the streaming example viaBody::stream. - Updated Fastly and Cloudflare entrypoints to rely on the adapter
dispatchhelpers, returning converted fallback responses when adapter conversion fails so we avoid propagating runtime errors. - Tests:
cargo test -p app-demo-core,cargo check -p app-demo-adapter-fastly; Cloudflare host build (cargo check -p app-demo-adapter-cloudflare) still fails inworker0.0.24 becausejs_sys::Iteratorlacksunwrapon this toolchain—matches the prior dev warning and needs upstream crate updates for host checks. - Assumptions: routing defaults (no auto OPTIONS) remain acceptable for the demo; Cloudflare fallback uses
Response::errorto surface adapter failures untilworkerexposes richer constructors.
- Removed the
worker_loggerdependency (source of the legacyworker 0.0.24transitive pull) and replaced it with a minimalconsole_log!-backed logger insideedgezero-adapter-cloudflare, so host builds only compile the currentworker 0.6tree. - Updated the Fastly/Cloudflare demos to call the adapter crates directly (correct crate ids) and gated the Cloudflare fetch handler behind
target_arch = "wasm32"so x86 test builds don’t require Worker-only APIs. - Docs now reference the new logging flow, and
cargo testacross the workspace succeeds after the change.
- Split Fastly logging into a
logger.rsmodule (mirroring Cloudflare) and re-exported it from the adapter, keepinglog_fastlyusage behind the wasm+feature gate. - No call-site changes were required—existing demos already target
edgezero_adapter_fastly::init_logger()—but the shared structure makes the adapters consistent. cargo teststill passes; thelog_fastlymanifest warning persists (pre-existing).
- Confirmed coverage isn’t wired into existing scripts;
scripts/run_tests.shstrictly runs host + wasm tests without instrumentation. - Verified
cargo-llvm-covis available viaasdfand works against host crates:cargo llvm-cov --package edgezero-core --lcov --output-path target/coverage/edgezero-core.lcovproduced an LCOV file and summary (~52% line coverage foredgezero-core,procmodules currently untested). - Suggested path forward: document
cargo llvm-covusage (including creatingtarget/coverage/), limit runs to host-capable crates, and treat wasm-only crates as out-of-scope unless a wasm coverage workflow is introduced. - Next steps could include adding a helper script and/or CI job if coverage reporting becomes a target metric.
- Added focused unit tests across
edgezero-corefor request contexts (path/query/json/form), error helpers, middleware chaining, bodies/responses, extractors, and responders; mirrored coverage for the#[action]macro via directexpand_action_implassertions. - Reworked Clockflare/Fastly-specific comparisons where necessary (stringy path params, async middleware helpers) so the new tests reflect real behaviour.
cargo testpasses, andcargo llvm-cov --package edgezero-core --summary-onlynow reports ~69% line coverage (up from ~52%); extractor/macro modules remain partially uncovered but key runtime surfaces are exercised.
- Added workspace dependency bindings for
edgezero-core, adapters, demos,fastly, andworkerin the root manifest, then pointed the app-demo crates at them so they share versions with the framework. - Demo manifests now rely on
{ workspace = true }foredgezero-adapter-*,app-demo-core,log,serde,fastly, andworker, removing bespoke paths/versions. cargo testpasses across the workspace after the manifest refactors.
- Temporary stopgap: adapter builds against Fastly 0.11 by buffering request/response bodies and wiring a new logging helper; wasm demo (
cargo build -p app-demo-adapter-fastly --target wasm32-wasip1) andcargo testnow succeed. - Regression: streaming proxy behaviour (and streaming decompression) is currently disabled because bodies are buffered; follow-up work is required to restore async streaming under the new SDK.
- Updated
edgezero_adapter_fastly::dispatchto surfacefastly::Errordirectly; demo entrypoints can now returndispatch(&app, req)without hand-rolling fallback responses. - Header and request conversions match the Fastly 0.11 API,
cargo testandcargo build -p app-demo-adapter-fastly --target wasm32-wasip1remain green.
- Noted workspace members/default-members to explain why
cargo testcovers only core by default. - Documented commands for running all workspace tests plus targeted crates and feature gates.
- No code changes required; guidance only.
- Added
scripts/run_tests.sh(initiallyrun_all_checks.sh) to bundle fmt, clippy, and workspace tests while excluding the wasm-only Fastly demo during host runs. - Script verifies
wasm32-wasip1availability and builds both the Fastly adapter (edgezero-fastlywithfastlyfeature) and demo binary for the wasm target to cover edge-only code paths. - Provides a single entry point for comprehensive validation; Fastly tests remain blocked on native hosts, so wasm builds act as the smoke check.
- Trimmed
scripts/run_tests.shto a test-only flow: workspace tests (excludingapp-demo-adapter-fastly), Fastly CLI tests, and wasm32fastlyfeature tests run from the adapter crate. - Added failure guidance when Viceroy cannot access macOS keychain certificates; users can set
SSL_CERT_FILEor run where a keychain is available before retrying. - Command still surfaces the Fastly wasm failure in this sandbox (certificate issue), but other suites pass; no additional code changes required.
- Added bold section separators around workspace, Fastly CLI, and wasm test phases in
scripts/run_tests.shfor easier scanning. - Confirmed the wasm phase still surfaces the keychain guidance when Viceroy fails; other sections remain unaffected.
- No code changes beyond the script; tests behave as before (wasm step still blocked in sandbox environment).
- Dropped the custom Viceroy guidance in
scripts/run_tests.sh; now all phases userunand rely onset -efor failures. - Confirmed workspace and Fastly CLI sections still pass while wasm tests fail with the raw keychain error (expected in this sandbox).
- No additional adjustments required.
- Preflight now checks for
cargo,rustup, and thewasm32-wasip1target before any test phases run, ensuring early exits on missing tooling. - Post-change run confirms behaviour: host tests pass, Fastly wasm still fails due to Viceroy keychain access in this sandbox—expected.
- No further adjustments needed.
- Added per-route body mode to controller
RouteSpec/RouteEntry, enabling callers to supplyRouteOptions(e.g. streaming/buffered) that are preserved when applying routes to the core app. - Introduced
RouteSet::push_entryhelper so nested/merged route sets keep their body configuration. - Extended controller tests to cover streaming coercion and buffered rejection paths via the new API;
cargo test -p edgezero-controllerpasses.
- Identify the best documentation spot (likely
README.md) for Wasmtime/Viceroy installation instructions. - Draft concise install steps for Wasmtime and Viceroy, ensuring commands work on macOS/Linux.
- Update the chosen doc section with the new prerequisites and cross-check formatting/links.
- Reproduce the failing Fastly wasm tests via
cargo test --features fastly --target wasm32-wasip1incrates/edgezero-adapter-fastly. - Inspect recent Fastly runtime changes to pinpoint incompatibilities (target env, required runner, feature flags).
- Identify minimal fixes or configuration adjustments to get wasm tests passing again (no implementation yet).
- Summarize findings and proposed solution in response; note blockers if unresolved.
- Add
async-compressiondependency (using workspace versioning) and wire it into Fastly/Cloudflare adapter manifests. - Refactor Fastly adapter response/body decoding to use
GzipDecoder/BrotliDecoderfromasync-compression, removing customflate2state machines. - Mirror the same decompression helper in the Cloudflare adapter so both adapters share behaviour.
- Run targeted tests (
cargo test --features fastly,cargo test --features cloudflare) to confirm gzip/brotli decoding paths. - Update docs (if needed) to reflect the new dependency or behaviour.
- Introduce a compression helper module in
edgezero-corethat exposes shared gzip/brotli decoding forTryStream<Result<Vec<u8>>>inputs. - Update Fastly adapter to use the new core helper instead of its local
decode_*implementations. - Update Cloudflare adapter to use the same helper, removing duplicate code and imports.
- Add unit tests in
edgezero-corecovering gzip/brotli decoding via the helper. - Re-run adapter/core tests to confirm everything compiles and passes.
- Restore the
TryStreamExtimport in the Cloudflare adapter somap_errresolves for wasm builds. - Run
cargo test --features cloudflare --target wasm32-wasip1 -- --nocaptureto confirm the wasm build clears (runner failures aside).
- Add the missing
mainentrypoint inexamples/app-demo/crates/app-demo-adapter-cloudflare/src/main.rs(call the adapter handler). - Bring
edgezero_core::response::IntoResponseinto scope or adjust error handling soEdgeErrorconverts correctly. - Drop unused
Writeimport in the Cloudflare adapter after the refactor. - Re-run
cargo build -p app-demo-adapter-cloudflare --features cloudflare --target wasm32-unknown-unknownto confirm the demo compiles.
- Update Cloudflare adapter
dispatchto returnworker::Resultso callers can propagate errors directly. - Simplify the demo entrypoint to mirror the Fastly example (build app, init logger, call
dispatch). - Rebuild the Cloudflare demo for wasm to confirm no regressions.
- Added Wasmtime/Viceroy installation guidance plus runner instructions to
README.mdso wasm tests list their runtime prerequisites explicitly. - Reproduced the Fastly wasm test failure: Viceroy runner aborts with “No keychain is available” while loading native certs, preventing tests from executing.
- Proposed using Wasmtime as the
wasm32-wasip1test runner (via env override or.cargo/configadjustment) or configuring Viceroy to skip the system trust store; left implementation for follow-up. - Logged the failing
cargo testoutput indebug.mdfor future reference; no code changes were made to the adapter runtime itself.
- Added
async-compressionas a workspace dependency and enabled it in both adapter manifests to centralise gzip/brotli handling. - Replaced the bespoke
flate2/brotlistate machines in Fastly and Cloudflare adapters with sharedGzipDecoder/BrotliDecoderpipelines overStreamReader. - Host-side adapter tests pass (
cargo test -p edgezero-adapter-fastly,cargo test -p edgezero-adapter-cloudflare); wasm targets still require platform runners but behaviour is unchanged. - Documentation already covered gzip/brotli support, so no content updates were necessary beyond noting the new dependency in review.
- Added
compression.rstoedgezero-coreexposing shareddecode_gzip_stream/decode_brotli_streamhelpers overasync-compression, plus unit tests that confirm round-tripping gzip and brotli blocks. - Fastly and Cloudflare adapters now call the core helpers, removing duplicated decoder loops and dropping their direct
async-compressiondependency. - Workspace dependencies updated (
async-streamshared,futurespromoted for core) and host tests pass (cargo test -p edgezero-core,cargo test -p edgezero-adapter-fastly,cargo test -p edgezero-adapter-cloudflare).
- Re-added
futures_util::TryStreamExtto the Cloudflare adapter soByteStream::map_errcompiles for wasm targets. cargo test --features cloudflare --target wasm32-wasip1 -- --nocapturenow builds the wasm binary; execution still fails under Wasmtime because Workers headers rely on wasm-bindgen imports unavailable in this runtime, which matches prior expectations.
- Added
#![cfg_attr(target_arch = "wasm32", no_main)]and importededgezero_core::response::IntoResponseso the Cloudflare demo binary compiles to wasm without missing entrypoint errors; error handling now convertsEdgeErrorviainto_response. - Cleaned up the Cloudflare adapter’s stale
Writeimport and set the demo crate to depend onedgezero-coreexplicitly. cargo build -p app-demo-adapter-cloudflare --features cloudflare --target wasm32-unknown-unknowncompletes successfully (only standard warnings remain).
edgezero_adapter_cloudflare::dispatchnow returnsworker::Result<Response>after converting internalEdgeErrors toworker::Error, eliminating the need for a separate helper.- The Cloudflare demo entrypoint matches the Fastly style: build the app, init the logger, and await
dispatch. cargo build -p app-demo-adapter-cloudflare --features cloudflare --target wasm32-unknown-unknownstays green (standard brotli warning only).- Updated CLI templates so newly scaffolded apps use
edgezero_adapter_fastly::dispatch/edgezero_adapter_cloudflare::dispatchwith logger init, matching the demos.
- Audit
expand_action_implbehaviour to list any untested code paths or edge cases (e.g., tuple destructuring errors, non-RC tuple structs, extractor invocation). - Add focused tests in
crates/edgezero-macros/src/action.rsto cover the missing scenarios while keeping contract unchanged. - Simplify the implementation if warranted (e.g., helper extraction, clearer error handling) without altering observable behaviour; highlight the deltas in the review section.
- Run
cargo testworkspace-wide and note results. - Record a new review entry summarising the changes, assumptions, and outstanding items.
- Summary: Extracted RequestContext pattern normalisation into a helper for clearer error aggregation and broadened the macro tests to cover attribute arguments, self receivers, tuple binding mistakes, and extractor codegen so
expand_action_implremains well-specified. - Assumptions: String-matching the generated
FromRequestcall stays stable because we don't plan to rename that trait or method; tuple destructuring for RequestContext will continue to expect a single binding. - Outstanding: None;
cargo test(workspace) succeeded after the new tests.
- Update
crates/edgezero-cli/src/templates/core/src/handlers.rs.hbsso the generatedproxy_demomatches the example handler (#[action]+RequestContext(ctx): RequestContextbinding). - Run
cargo testto ensure the template change doesn’t break the workspace. - Capture a review entry summarising the template update and any follow-ups.
- Summary: Aligned the CLI template’s
proxy_demodefinition with the app demo (now tagged with#[action]and destructuringRequestContext) so generated projects inherit the same extractor ergonomics. - Assumptions: Template consumers expect the proxy route to behave like the example app; no additional template files reference the old signature.
- Outstanding: None;
cargo testacross the workspace passed after the template tweak.
- Teach the
#[action]macro to accept tuple-struct style parameters likeRequestContext(ctx): RequestContextby normalising that pattern to the owned context argument (ensure the same ownership semantics and keep duplicate checks). - Update the
proxy_demohandler inexamples/app-demo/crates/app-demo-core/src/handlers.rsto demonstrate the new binding style. - Run
cargo testfor the workspace and fix any regressions. - Append a new review entry (summary, assumptions, outstanding items) once the change is complete.
- Summary: Normalised
RequestContextparameters passed through#[action]so tuple-style bindings (e.g.RequestContext(ctx): RequestContext) collapse to the owned context, added regression tests covering the pattern, and showcased the syntax onproxy_demo. - Assumptions: Only one owned
RequestContextparameter should exist per handler; tuple-style bindings only contain a single pattern element. - Outstanding: None;
cargo testpassed for the entire workspace (no warnings after the final iteration).
- Summary: Extended
#[action]to accept a singleRequestContextparameter (with duplicate detection and helper tests) and applied the attribute toproxy_demo, relying on the original handler logic. - Assumptions:
RequestContextparameters are owned values (no reference variants needed) and only one is expected per handler. - Outstanding: None;
cargo testacross the workspace passed after the macro test adjustment.
- Diff
mainvs current branch to scope doc-related changes. - Review updated/new docs for redundancy, inconsistency, missing coverage, and verbosity.
- Check overall documentation thoroughness and note gaps vs the framework surface area.
- Compile review findings with file references and prioritized severity.
- Summary: Compared
mainagainst thefeature/vitepressbranch, audited the new VitePress guide set plus CLI/adapter docs, and assembled a prioritized findings list focused on inaccuracies, redundancy, missing coverage, and verbosity. - Assumptions: Documentation review targets current source behavior (not proposed future APIs); adapter contract expectations should reflect existing Fastly/Cloudflare/Axum implementations unless explicitly labeled aspirational.
- Outstanding: None (review-only; no code changes applied).
- Summary: Aligned guide content with current EdgeZero APIs (App::build_app, adapter entrypoints, middleware signature, proxy clients), corrected routing/streaming/handlers/CLI details, and refreshed manifest/logging docs; added the missing CLI/dev features list to the roadmap.
- Assumptions: Docs now reflect current behavior for Fastly/Cloudflare/Axum adapters and the CLI; future features are captured explicitly in the roadmap rather than implied in guides.
- Outstanding: None (docs-only updates).
- Summary: Condensed the proxying guide into a single end-to-end example that uses adapter proxy handles, and added short logging-status callouts to the Fastly, Cloudflare, and Axum adapter docs.
- Assumptions: The proxy handle approach is the preferred public pattern; adapter logging notes should stay concise and match current defaults.
- Outstanding: None (docs-only updates).
- Summary: Added a dedicated
docs/guide/roadmap.mdpage containing the current roadmap and design questions, and linked it in the VitePress sidebar. - Assumptions: The roadmap page mirrors
TODO.mdand is a public-facing summary of ongoing planning work. - Outstanding: None (docs-only updates).
- Summary: Expanded the roadmap page with doc/CLI alignment gaps found during review and added an explicit Spin support item.
- Assumptions: The new roadmap bullets are directional and do not imply implementation order.
- Outstanding: None (docs-only updates).
- Diff
mainvs current branch to scope doc-related changes post-merge. - Re-review docs for redundancy, inconsistencies, missing coverage, thoroughness, and verbosity.
- Summarize findings with file references and prioritized issues.
- Summary: Re-ran the post-merge documentation audit against
main, flagging the top doc/behavior mismatches (CLI flags, trigger adapter filtering, Fastly backend wording) plus missing manifest field coverage and CLI passthrough docs. - Assumptions: Review targets current runtime behavior; undocumented manifest fields and adapter filters should be explicitly labeled as reserved/ignored if they remain unimplemented.
- Outstanding: None (review-only; no code changes applied).
- Align CLI usage docs with actual flags (
edgezero new, passthrough args) and remove/replace unsupported examples. - Reconcile adapter/proxy docs (Cloudflare vs Fastly outbound request wording; adapter filtering behavior).
- Document or mark reserved manifest fields (
app.version,app.kind) and trim duplicate CLI install instructions. - Summarize changes with file references in TODO review entry.
- Summary: Aligned CLI and configuration docs with actual flags and manifest behavior, clarified Fastly/Cloudflare outbound request wording, and trimmed duplicate CLI install guidance; captured test failures in
debug.md. - Assumptions: Manifest
versionandkindremain reserved fields until the parser is extended; adapter filters stay informational unlessapp!adds enforcement. - Outstanding:
cargo testfailed inedgezero-adapter-axumintegration tests due to local port bind permissions (seedebug.md).
- Summary: Cleaned the roadmap to focus on forward-looking items, moved completed work into a "Completed (Recent)" section, removed the stale date header, and tightened Spin wording to "mirror" rather than "match."
- Assumptions: The completed items reflect the current docs/tests baseline; future roadmap entries should be updated as features land.
- Outstanding:
cargo testfailed inedgezero-adapter-axumintegration tests due to local port bind permissions (seedebug.md).
- Summary: Pruned the open design questions to only unresolved items, and moved resolved topics (platform focus, adapter mapping rules) into the completed section.
- Assumptions: Remaining open questions reflect genuine policy decisions rather than already-shipped behavior.
- Outstanding:
cargo testfailed inedgezero-adapter-axumintegration tests due to local port bind permissions (seedebug.md).
- Audit
docs/guide/roadmap.mdfor redundancy, stale dating, and overlapping bullets. - Restructure the roadmap into clearer groupings (e.g., near-term vs later, or by theme) and tighten wording.
- Keep Spin-related intent but ensure it reads as “mirrors” and does not overpromise; remove any duplicate items.
- Update TODO review entry with summary and file references.
- Review
docs/guide/roadmap.md"Open Design Questions" and identify which are already resolved. - Remove resolved items or move them into "Completed (Recent)" with brief phrasing.
- Keep only genuinely open questions, tightening wording to avoid duplication.
- Update TODO review entry with summary and file references.
- Add a dedicated roadmap page under
docs/guide/roadmap.md. - Populate it with the roadmap content (including the CLI parity backlog list).
- Wire the roadmap page into the VitePress sidebar/navigation.
- Add the key doc/CLI gaps found during the review to the roadmap page.
- Add an explicit roadmap item for Spin support (define scope at the doc level).
- Condense proxying guide into a single end-to-end example using adapter proxy handles.
- Add a short logging status callout to the adapter docs (Axum/Cloudflare/Fastly).
- Update guides to reflect current APIs (App::build_app, adapter entrypoints, middleware signature, proxy client usage).
- Correct routing, streaming, handlers, and CLI reference docs to match current behavior.
- Refresh configuration docs to align with manifest schema and loader APIs.
- Add missing-feature backlog (list-adapters, exit codes, manifest search-up, RUST_LOG, hot reload) to the roadmap section.
- Canonicalize the Apache-2.0
LICENSEappendix URL wording to match standard text. - Regenerate
docs/package-lock.jsonmetadata so the root package license matchesdocs/package.json. - Standardize license wording in user-facing docs (
README.md, docs footer) for consistency. - Run
cargo testand record outcomes in a review entry with timestamp.
- Summary: Canonicalized Apache-2.0 appendix wording in
LICENSE, aligned docs package root license metadata by regeneratingdocs/package-lock.json, and standardized user-facing license text to "Apache License 2.0" inREADME.mdanddocs/.vitepress/config.mts. - Assumptions: Keeping transitive dependency
licensefields unchanged indocs/package-lock.jsonis correct; only the root package license needed alignment. - Outstanding: No functional issues found;
cargo testpasses when run without sandbox socket restrictions.