Repository navigation
Conversation
Round 50 — Fastly SDK correctness pass (commit
|
Round 51 — round-50 carry-overs + Spin WASI write mechanics (commit
|
Address review thread 4491179083. Document default per-request assembly, first-request retained assembly and caller-owned manual construction without changing lifecycle behavior.
Address review thread 4491180233. Describe OutboundBatchResults and its positional states, and make GET/HEAD body suppression explicit in the forwarding example.
Address review thread 4491180088. Show head normalization, route resolution and admission, matched-route middleware, and an owned egress envelope. Keep all five lifecycle rows at the 63-character box width.
Address review thread 4491179802. Mention begun requests as well as batches, migrate both qualification classifiers, and verify that Send and Follow remain supported.
aram356
left a comment
There was a problem hiding this comment.
REQUEST_CHANGES (GitHub blocked this review event: "Can not request changes on your own pull request". This review is from the PR author's account, so it is submitted as a comment. It is not an approval; the changes requested below stand.)
Re-review of head 598f0a2a490eb83dd31c06c024a0cefa8e049628, which is 43 commits after the previously reviewed 9b31a697. Scope: only the 40 Trusted Server threads from review 5798502238; no other reviewer's threads were touched.
I verified each disposition against the fixing commit and the code at this head, not against the reply. For code fixes I checked that the regression test exercises the defective path and would fail against the pre-fix code, and I ran two probes (below). 34 threads are verified and resolved. 6 remain open, each with a reply saying exactly what is left:
| Thread | Severity | What remains |
|---|---|---|
| EZ-6.11 / cross-cutting 5 | blocking | One Fastly check() still does not record a buffered slot whose head and whole body have arrived. The probe shows the item first appears on the 2nd, 3rd or 4th observation (0 B, 100 B, 32 KiB). docs/guide/proxying.md:92-93 is also now stale. |
| EZ-10.4 | should-fix | The code fix holds. EZ-10/acceptance/02 is still bound only to RequestContext::new tests, not to the new routed tests, and has no routed expired-deadline case. |
| EZ-23 criterion 12 | should-fix | Plan :3698 is still an open checkbox for criterion 12. |
| EZ-9.9 | should-fix | docs/guide/proxying.md:242-243 still names an "idle policy" that does not exist. |
| Status table | nit | The corrected text names acceptance criteria with requirement IDs (EZ-16.4, EZ-17.6, EZ-22.7). |
| EZ-Q1.8 tooling | nit | The positive deferral test was lost in the move to Rust. The mutation below passes every harness test. |
For the requester, not the author. Two of the resolved threads leave a contract decision that only the requester can make:
- EZ-16 criteria 3 and 4 still say a closed port's detail names "the send phase", while the requested fix now reports a refused connect at the head poll as
ResponseHeaders.EZ-16/acceptance/04records this as abinding_gap. - The approval log records "Preserve suppression; leave parity gate open" for EZ-18.4, so bodiless SDK parity stays an open gate.
Verification. I ran a local replay at 598f0a2a on macOS arm64 (Rust 1.98.1, Node 24.20.0) covering every run: step of .github/workflows/test.yml and format.yml at this head, in CI order, including the new "Build native test harness" step and the Rust acceptance evidence steps.
- CI plumbing was skipped and setup actions were emulated at the pinned versions.
- Fastly used the repaired Viceroy built by
scripts/ci_viceroy.sh repair. - Cloudflare used Chrome for Testing 154.0.8037.92.
| Job | Command (key steps) | Exit and result |
|---|---|---|
| format | cargo fmt --all -- --check (and nested manifests), cargo clippy --workspace --all-targets --all-features -- -D warnings, fixture, Fastly and app-demo clippy |
all 0 |
| adapter-clippy | cloudflare, fastly, spin, axum | all 0 |
| format-docs | install, lint, Prettier, build | all 0 |
| host-tests workspace | cargo test --workspace --all-targets |
0; 33 binaries, 2682 passed, 0 failed, 1 ignored |
| host-tests workspace | lifecycle fixture host tests | 0; 703 passed, 2 ignored |
| host-tests workspace | "$EDGEZERO_TEST_HARNESS_BIN" acceptance --manifest |
0; {"criteria":255,"legs":511,"planned":212,"qualified":false,"status":"valid-inventory"} |
| host-tests workspace | "$EDGEZERO_TEST_HARNESS_BIN" acceptance --coverage |
0; local_bindings_complete: true, required-local 217 ready / 0 planned |
| host-tests workspace | remaining static, doc, pin, policy and feature-matrix steps | all 0 |
| host-tests cli | cargo test -p edgezero-cli --all-targets; adapter CLI dispatch tests |
0; 256 passed, 1 ignored; 791 passed |
| host-tests axum | ./scripts/test_integration.sh --adapter axum --suite ci |
0 |
| host-tests app-demo | cargo test --locked --workspace --all-targets and wasm checks |
0; 66 passed |
| adapter-wasm-tests fastly | ./scripts/test_integration.sh --adapter fastly --suite ci |
0, {"exit_code":0} |
| adapter-wasm-tests spin | ./scripts/test_integration.sh --adapter spin --suite ci |
0, {"exit_code":0}; this leg failed to link on macOS at 9b31a697 |
| adapter-wasm-tests cloudflare | ./scripts/test_integration.sh --adapter cloudflare --suite ci |
0, {"exit_code":0} (see note) |
Note on Cloudflare: my first run had no Chrome download in the replay's temp directory, so the browser leg failed. The next attempt refused to overwrite that run's evidence ("output directory must be empty"). Into a fresh output directory, as on a CI runner, the suite exits 0. These were replay environment faults, not PR results.
Probes, run in a separate detached worktree at this head:
- EZ-6.11. A test copied from
batch_readiness_records_arrival_before_later_collection, adding a body lease.cargo test --offline --locked -p edgezero-adapter-fastly --lib review_probe -- --nocaptureexits 0 and printsitem_on_observation=Some((2, ..)),Some((3, ..))andSome((4, ..))for 0 B, 100 B and 32 KiB bodies. The full output is in the thread. - EZ-Q1.8. I changed
crates/edgezero-test-harness/src/evidence/cutover/record.rs:548back to the lowercase condition and rancargo test --offline --locked --manifest-path crates/edgezero-test-harness/Cargo.toml. It exits 0 with625 passed; 0 failed; 2 ignored.
GitHub Actions at this head reports 30 of 30 checks passing. That is CI's own result on its Linux runners, not part of the local run.
TS Repair HandoffPRfection phase: implementation, review repairs. Refs #436; delivery remains PR #275.
Six Dispositions
Each linked original thread has its correction, fixing commit/location, exact verification commands, exit codes and actual successful result lines. All six remain open for REVIEWER; other review threads were not changed. Executed ValidationAll commands were run locally at this exact commit with Rust 1.98.1: cargo fmt --all -- --check
cargo clippy --offline --locked --workspace --all-targets --all-features -- -D warnings
cargo test --workspace --all-targets
cargo check --workspace --all-targets --features "fastly cloudflare spin"
cargo check --offline --locked -p edgezero-adapter-spin --target wasm32-wasip2 --features spin
bash scripts/run_tests.shEvery command exited 0. The full script printed The four adapter CI suites each returned The temporary lowercase deferral mutation failed the new test (exit 101); restored production code passed. Earlier terminal-stdin and mismatched local-tool failures are retained, not presented as successful runs. Final execution used closed stdin, pinned Chrome, the ingress lock-matched wasm-bindgen and the tracked repaired Viceroy. None of these local results is hosted qualification. Two independent read-only investigations/reviews supported the minimal productive-turn plus existing-wake-helper repair and found no remaining scoped defect. Snapshot review confirmed all prior acceptance identities, decisions, source hashes, 223 scenarios and 140 titles are preserved. Cleanup And Next Actor
|
aram356
left a comment
There was a problem hiding this comment.
APPROVE (GitHub blocked formal approval: "Can not approve your own pull request". This review is from the PR author's account, so it is submitted as a comment. It is not a formal approval and does not make the PR merge-ready.)
Re-review of head 6f0cc74ce9d9cb4acb284f97626ac28c6828aad9, one commit after 598f0a2a. The scope, set by the requester, is the 40 Trusted Server threads from review 5798502238. This verdict covers only those threads.
The six threads that review 5810546608 left open are now verified and resolved, so all 40 Trusted Server threads are resolved:
| Thread | How it was verified |
|---|---|
| EZ-6.11 / cross-cutting 5 | My probe now records a buffered slot on the first observation for 0 B, 100 B and 32 KiB bodies, with zero waits. The same probe needed 2, 3 and 4 observations at 598f0a2a. |
| EZ-10.4 | AC2 now lists the two routed tests plus a new routed expired-deadline test, and all three exist. The unit/core leg passes. |
| EZ-23 criterion 12 | The plan checkbox is ticked, and criterion 13 is split out as its own open item. |
| EZ-9.9 | The "idle policy" claim is removed, and the docs contract pins the corrected fragment. |
| Status table | The table uses acceptance-criterion IDs, and no dotted forms remain. |
| EZ-Q1.8 tooling | My mutation now fails the new test with "unjustified applicability deferral" (625 passed, 1 failed). At 598f0a2a it passed all 625. |
Not covered by this verdict.
- Other reviewers' threads: 32 are still open, and two other reviewers' change requests stand.
- The EZ-Q1 qualification record is not produced.
- Two contract decisions belong to the requester: the "send phase" wording in EZ-16 criteria 3 and 4, and the EZ-18.4 bodiless-parity gate, which stays open per the recorded decision.
So this is not a merge-readiness claim.
Verification. I ran a local replay at 6f0cc74c on macOS arm64 (Rust 1.98.1, Node 24.20.0). It covered every run: step of .github/workflows/test.yml and format.yml at this head, in CI order. CI plumbing was skipped, setup actions were emulated at the pinned versions, Fastly used the repaired Viceroy from scripts/ci_viceroy.sh repair, and Cloudflare used Chrome for Testing 154.0.8037.92.
| Job | Command (key steps) | Exit and result |
|---|---|---|
| format | cargo fmt --all -- --check (and nested manifests), cargo clippy --workspace --all-targets --all-features -- -D warnings, fixture, Fastly and app-demo clippy |
all 0 |
| adapter-clippy | cloudflare, fastly, spin, axum | all 0 |
| format-docs | install, lint, Prettier, build | all 0 |
| host-tests workspace | cargo test --workspace --all-targets |
0; 33 binaries, 2685 passed, 0 failed, 1 ignored |
| host-tests workspace | lifecycle fixture host tests | 0; 704 passed, 2 ignored |
| host-tests workspace | scripts/run_test_nonzero.sh --inventory unit/core cargo test --offline --locked -p edgezero-core --features test-utils --lib |
first attempt 101, then 0 and 0 (see note) |
| host-tests workspace | "$EDGEZERO_TEST_HARNESS_BIN" acceptance --manifest and --coverage |
0; {"criteria":255,"legs":511,"planned":212,"qualified":false,"status":"valid-inventory"}, required-local 217 ready / 0 planned, local_bindings_complete: true |
| host-tests workspace | remaining static, doc, pin, policy and feature-matrix steps | all 0 |
| host-tests cli | cargo test -p edgezero-cli --all-targets; adapter CLI dispatch tests |
0; 256 passed, 1 ignored; 793 passed |
| host-tests axum | ./scripts/test_integration.sh --adapter axum --suite ci |
0 |
| host-tests app-demo | workspace tests and wasm checks | 0; 66 passed |
| adapter-wasm-tests | ./scripts/test_integration.sh --adapter {cloudflare,fastly,spin} --suite ci |
0 each, {"exit_code":0}, first attempt |
Note on unit/core: in the full run, config_store::tests::failed_named_open_does_not_disappear_beside_healthy_default failed once (assertion failed: matches!(error, ConfigStoreError::Internal { .. }), at config_store.rs:999). That run took 5.45 s, while another heavy build ran on the same host. I reran the identical command twice in the same worktree and environment, and both exited 0 with test result: ok. 1136 passed; 0 failed. The test alone passed 5 of 5. The test sets Deadline::after(1s) on the real clock, and a failed-open bounded read gives an expired deadline precedence (failed_open_bounded_read_preserves_deadline_precedence). So a stall of more than one second turns the expected Internal into DeadlineExceeded. config_store.rs is unchanged by this PR revision. This is a load-sensitive test outside the Trusted Server threads, not a defect in the fixes. A deadline independent of wall time would remove the flake.
Probes ran in a separate detached worktree at this head:
cargo test --offline --locked -p edgezero-adapter-fastly --lib review_probe -- --nocaptureexited 0 and printeditem_on_observation=Some((1, ..))for all three body sizes.- The
record.rs:548mutation madecargo test --offline --locked --manifest-path crates/edgezero-test-harness/Cargo.tomlexit 101 with625 passed; 1 failed; 2 ignored.
GitHub Actions at this head reports 30 of 30 checks passing. That is CI's own result, not part of the local run.
Review Repair HandoffPRfection phase: implementation. Related issue: #436. Pushed head: 5ea8d93c. The scoped source/docs repairs are in e65394a1; the separate follow-up isolates Fastly's test logger state. Approved repair plan. All 32 original non-TS threads now have separate, read-back-verified replies: 24 fixed (including one already implemented and acknowledged earlier), 7 won't fix, 1 disagree. These are author dispositions, not reviewer acceptance. No thread was resolved, minimized, dismissed or hidden. This supersedes the previous TS-only checkpoint for these threads; its historical evidence and the manual hosted checklist are unchanged. Executed VerificationAll checks below ran on the clean pushed head with Rust 1.98.1:
The failed clean-commit run at Preserved BoundariesOriginal deadlines, per-slot results/cutoffs, fail-closed driver EOF, body suppression, independent caps, resource ownership, audited pins, direct Image Optimizer dispatch and hard-cut APIs remain intact. The only approved standards correction accepts at most 32 empty Connection members. No compatibility transport, second executor, new deployment or capability promotion was introduced. Contract-sensitive suggestions are explained individually rather than silently adopted: decoder pin/anchor policy, implicit workspace discovery, generic host-read error classification, Fastly opaque-head pulse policy, response Host policy and strict outbound comma-Content-Length handling. Service-wide registration blocking, synchronous native KV, proxy behavior and cooperative helper overrun are explicitly documented. Hosted/parity/resource qualification, candidate freeze, durable Q5 publication and maintainer manual checkoffs remain open. Per-Thread Dispositions
@ChristianPavilonis @prk-Jr: please re-review the pushed head and accept/resolve only the findings you consider satisfied, including the explicitly retained policy choices. Branch: Current Foundation CloseoutThe two amendments were directly approved by AG in the conversation and implemented in
Retained verification caveats: one generated-app TCP read returned Executed verification and scoped decisions. Inventory remains 299 ready / 215 planned; 217 required-local bindings ready / 48 required-external planned; Deferred qualification remains explicit: resolve retained strict timing/cancellation proof gaps, repeat applicable allocation audits for the selected toolchain, freeze the selected consuming candidate before authoritative execution, perform maintainer-run hosted/configuration/optimizer/consumer checks (including per-deployment HTTP/3 and bodiless zero-payload/completion proof), and publish the durable exact-candidate Q5 record. No deployment, source freeze or capability promotion occurred. Acting login and PR author: |
|
At the maintainer's explicit request in this conversation, resolved the 24 verified-fixed threads from other reviewers in the latest 32-thread repair round on head The seven declined requests and one disputed finding remain open. This changes discussion state only: it does not claim reviewer approval, waive hosted/parity/resource qualification, or authorize a merge. The per-thread evidence and dispositions remain available in the previous handoff. |
| #### Acceptance criteria | ||
|
|
||
| 1. Environment is Axum, Viceroy 0.21.0, workerd and Spin 4.1. Given a route that forwards the inbound request with `from_request` and `send` to an origin that records what it receives, when a client sends a bodiless HTTP/1.1 GET, then the client gets the origin's status and the origin saw a GET with zero body bytes and no `Transfer-Encoding`. Record whether `Content-Length: 0` appeared. The same holds for HEAD, and for a GET whose chunked body holds only the terminator. | ||
| 2. Environment is hosted Fastly, Trusted Server staging. Repeat criterion 1 with HTTP/1.1 and HTTP/2 clients that send no `content-length`. Repeat it with an HTTP/3 client where the staging service has HTTP/3 enabled. Whether a Fastly Compute service serves HTTP/3 to clients is **Unverified**. Where it does not, the record states that HTTP/3 was not available and marks the HTTP/3 leg not applicable. Record per protocol whether a bodiless forward still succeeds after the inbound read deadline has passed, which shows whether EZ-1.2 held. |
There was a problem hiding this comment.
Trusted Server requirement change: qualify HTTP/3 per adapter (EZ-1 criterion 2).
Today the only HTTP/3 leg is on hosted Fastly. It runs on Trusted Server's staging service and waits on the decision hosted HTTP3 enabled@hosted-fastly/http3, which is pending with no approver (crates/edgezero-test-harness/acceptance/outbound-cutover-cases.json:24-36, :945-955). Whether a request can arrive over HTTP/3 depends on the adapter's host and deployment, not on Trusted Server. So Trusted Server's staging configuration should not decide whether EdgeZero's HTTP/3 behavior is qualified. docs/guide/capabilities.md does not mention HTTP/3.
Requested change:
- For each adapter, the capability matrix states whether that adapter can receive HTTP/3 requests. The HTTP/3 clauses of EZ-1.1 and EZ-1.2 apply only where it can.
- Where an adapter can, its HTTP/3 leg runs on a deployment of that adapter with HTTP/3 enabled, with the same checks as its HTTP/1.1 and HTTP/2 legs.
- Where it cannot, the record marks that adapter's HTTP/3 leg not applicable and gives the reason.
- The
hosted HTTP3 enableddecision no longer depends on Trusted Server's staging service.
The HTTP/1.1 and HTTP/2 parts of criterion 2 are unchanged and stay on Trusted Server staging.
Done when: criterion 2 says HTTP/3 is qualified per adapter, the inventory has an HTTP/3 applicability entry per adapter, and no HTTP/3 entry is conditional on Trusted Server's staging service.
There was a problem hiding this comment.
fixed in dcbf622f, implementing AG's directly approved amendment.
- EZ-1 criterion 2 preserves the original Fastly staging HTTP/1.1 and HTTP/2 legs and qualifies HTTP/3 independently for each selected adapter/deployment.
- The inventory preserves every original 511 leg identity and appends Axum, Cloudflare and Spin HTTP/3 legs: 255 criteria / 514 legs. All four unresolved HTTP/3 dispositions are required. Unknown support, disabled configuration and missing clients cannot silently become N/A.
- Unsupported N/A needs an attributed, evidenced requirement-change scoped to exactly one adapter/deployment. Regressions reject an ordinary defer, missing evidence and a combined Fastly/Cloudflare waiver.
- The public guide publishes receive-boundary facts separately from declarable capabilities. The runbook requires real negotiated-HTTP/3 proof; guest-normalized versions are not proof. Approval/history and affected criterion/snapshot identities are aligned.
Verification: both HTTP/3 regressions pass at the committed head; the full prescribed suite passes with RUST_TEST_THREADS=2, and all 30 additional workflow lint/format/WASM/docs commands pass. Implementation and retained verification attempts.
No deployment was performed and no per-deployment N/A decision or hosted qualification was approved. Leaving this own thread open for reviewer verification.
| - Cloudflare replaces a rejected fetch with one generic failure (`edgezero:crates/edgezero-adapter-cloudflare/src/outbound.rs:648`, `:1488-1493`). | ||
| - Spin drops every error payload (`edgezero:crates/edgezero-adapter-spin/src/outbound.rs:1342-1410`). | ||
| - `EdgeError` carries no detail for these failures (`edgezero:crates/edgezero-core/src/error.rs:132-192`). The wire is category-only for gateway, timeout, limit, and internal errors (`error.rs:555-575`, `:599-650`). EdgeZero's design forbids putting provider text into outbound diagnostics (`edgezero:docs/superpowers/specs/2026-05-21-outbound-http-design.md:3036-3040`). | ||
| - Provider text really does carry request data. `reqwest`'s error `Display` appends ` for url (<url>)` (`reqwest:src/error.rs:279-281`). Spin's TLS alert payload |
There was a problem hiding this comment.
Trusted Server requester decision (2026-11-08): amend EZ-18.4 so bodiless Fastly responses follow strict suppression.
Trusted Server wrote EZ-18.4 to keep its pre-cut wire behavior. EdgeZero's local SDK controls show that, for bodiless responses, that behavior breaks HTTP (docs/audits/evidence/2026-10-23-buffered-response-framing.json, the nine sdk_parity.failed_cases):
- HTTP/2 HEAD, 204 and 304 with an application body: the client fails (curl exit 16). These responses never include content (RFC 9110 §6.4.1), and RFC 9113 §8.1.1 says "Clients MUST NOT accept a malformed response."
- 205 on HTTP/1.1 and HTTP/2: the SDK delivers the body, but "a server MUST NOT generate content in a 205 response" (RFC 9110 §15.3.6).
- HTTP/1.1 HEAD: the SDK derives a
Content-Lengthfrom the body. RFC 9110 §8.6 allows that or no length, so this one is a difference, not a defect.
Trusted Server does not need any of that. The Strict Suppression And SDK Deviation Record (docs/audits/2026-10-18-outbound-api-approval.md:795-809) kept suppression without waiving EZ-18.4. This decision withdraws the bodiless part of EZ-18.4.
Requested amendment:
- EZ-18.4: SDK parity covers buffered responses that can carry content. For HEAD, 204, 205 and 304, Fastly applies strict suppression: no body bytes reach the client, EdgeZero adds no length the application did not supply, and an application-supplied length on HEAD or 304 passes through as EZ-18.6 says.
- EZ-18.6: drop the Fastly HEAD clause that defers to EZ-18.4's SDK reference.
- EZ-18 criteria 3 and 6: their HEAD, 204 and 304 parts expect strict suppression instead of the pre-cut build's framing.
- The nine recorded SDK deviations become reference observations rather than failed parity results, so EZ-18.4 can qualify.
Done when: EZ-18.4, EZ-18.6 and criteria 3 and 6 say this, the approval log records this decision and its date, and the nine deviation cases no longer count as strict parity failures.
There was a problem hiding this comment.
fixed in dcbf622f, implementing AG's directly approved amendment.
EZ-18.4 now applies SDK parity only to buffered responses that can transmit content. EZ-18.6 and criteria 3/6 require strict HEAD/204/205/304 suppression instead: no transmitted payload, no synthesized length, and unchanged valid supplied HEAD/304 representation lengths on host handoff (the host may omit them on the wire). Existing 204/205 validation remains intact.
The Rust runner separates six buffered parity comparisons from twelve bodiless reference observations. It retains the same nine exact reference differences, rejects unexpected reference changes, and keeps buffered mismatches fatal. Historical failed captures/outcomes are unchanged; production framing code is unchanged.
Executed local evidence: all four adapters pass 80 production cases and eight clean-EOF HTTP/1 HEAD checks. Fastly reports six parity passes, twelve checked references and nine differences, with zero parity failures. HTTP/2 curl HEAD captures remain explicitly header-only, not payload proof. The complete framing run has no failed or unsupported cases and remains qualification:false.
The ten framing regressions pass at the committed head. The full prescribed suite passes with RUST_TEST_THREADS=2; all 30 additional workflow lint/format/WASM/docs commands pass. Implementation and retained verification attempts.
Hosted compression, actual hosted bodiless completion/payload proof and exact-candidate qualification remain open; capabilities and audited pins are unchanged. Leaving this own thread open for reviewer verification.
Summary
Approved Qualification Amendments (2026-11-08)
Implemented in
dcbf622funder AG's direct approval:Current CI blocker:
fastly wasm testsaborts inhelper_batch_owner_is_local_or_reuses_custom_callback. Local Fastly validation passed; cause remains under investigation and no assertion or contract has been relaxed. A separate narrow repair scope has been requested.The current handoff records current-head checks, per-thread replies and remaining review decisions. Older checkpoints below retain their historical status; they are not current completion claims.
TS Reposted Review Repairs
The six reposted TS findings are repaired in
6f0cc74c, with a separate fixed reply and executed evidence in each original thread. Reviewer acceptance remains pending; no thread was resolved by the author, and other reviewers' threads are untouched.The scoped changes complete nonblocking Fastly buffered readiness through head/data/EOF and cooperative yields, add routed AC2 expiry coverage and bindings, restore the positive Rust deferral regression, and correct the remaining checklist, idle-policy and acceptance-reference text. Public outbound contracts, hard-cut APIs, SDK/runtime pins and qualification limits are unchanged.
Validation at the exact committed head passed: all five primary Rust gates; the complete
bash scripts/run_tests.sh; and the 33-command lint/build/docs matrix covering adapter feature selections, all three WASM targets, fixtures and demo. Workspace: 2685 passed, zero failed, one existing ignored, 33 binaries. Harness: 626 passed, zero failed, two existing ignored. All four local adapter integration suites and the generated-project gate passed. The deferral spelling mutation failed as intended and was restored before the commit.The initial terminal-stdin interruption and the local Cloudflare tool-version failure are retained; the final committed-head run used noninteractive stdin and the ingress fixture's lock-matched wasm-bindgen. Fresh GitHub checks are running; they are not declared fully green. This is local validation, not a frozen or hosted qualification record.
Qualification remains open: the strict local lifetime run retained cold Begin at 8548 us against the unchanged 7000 us bound. SDK parity, unknown optimizer blocking horizon, manual hosted evidence, candidate freeze and Q4/Q5 are not waived. No deployment or capability promotion was performed. The manual hosted checklist below is unchanged.
Implements the portable outbound HTTP and request-lifecycle contracts across core and the Axum, Cloudflare, Fastly, and Spin adapters.
start_batch_until, indexednext, explicitcancel, orderedcollect, and thesend_all_untilconvenience path.start_batch_untiltakes an observation cutoff: reaching it stops observation even when individual slots retain budget, while earlier cutoffs remain a supported partial-result operation.PlatformMetadatafacts for memory ceilings, live inbound request population, and host-ingress accounting, preserving source and explicit unknown reasons.Fits,Exceeds, and typedIndeterminateoutcomes; publishes canonical Axum, Cloudflare, Fastly, generic Spin, and Akamai Functions profiles.CompletedorCutoff. OnlyCutoffpermits unresolved slots in a successful result. Explicit adapter failure, premature driver EOF, and duplicate or out-of-range indices returnOutboundBatchFailure, preserving the precise error and every terminal slot collected before failure.MonotonicClock::deadline_afteranchors relative cutoffs to that clock. Equality expiry wins and backwards time fails closed.ResponseEgressCompletion, transferred directly throughPreparedIngress,ResponseEgressEnvelope, and the soleResponseEgressAttempt. Terminal state is stored before the response-scoped completion and global observer run, each exactly once and behind independent panic boundaries. No response-extension carrier or envelope extraction bypass remains.ResponseEgressCompletion::joincomposition so independent response-owned resources share one exactly-once terminal report, and hard-cuts detached normalized errors toSend { completion, deadline } | Abortwith request-start-relative bounded deadlines.AdmissionDecision::Abort. Axum closes the owned HTTP/1 connection before body polling; Cloudflare, Fastly, and Spin return a fixed provider error at their strongest available pre-response boundary and remain conservatively classifiedBestEffort.Hooks::configureplus core-ownedApp::build::<A>(platform). Successful hooks must preserve the complete adapter-selected metadata; core rejects changed facts instead of restoring them. Typed configuration failures propagate unchanged and stop serving before request handling. The generated scaffold keeps finite ingress policy with core-owned empty lifecycle tokens; the checked-in demo retains the full application-owned resource-composition example.AbortController, Fastly's low-levelstream_to_client, and Spin's WASI response/body/result writers.Current Checkpoint: Event-Driven Workers Cancellation
Head:
9b31a697, including maincf2c57b1. Implementation and evidence boundaries.The PR is ready for review, not draft, but remains unqualified. Historical checkpoint references to draft status describe their then-current state; they are not the live PR state.
9b31a697retains 17 passed/two failed constituent scenarios, exit 1, plus failed tail validation. Cold Begin is 8 ms >7 ms; ordinary-close cancellation/cleanup is unproved. These map to 12 passed/two failed lifetime legs. All previous failures, including the preceding6e5ce765capture, remain retained; no warmup, tolerance change, reset substitution or retry-for-credit.NameInUsefail-closed rather than adopting unverified settings. Hosted controls and maintainer re-review remain open. Other non-blocking review suggestions are not silently marked resolved.Local unqualified review packet:
/private/tmp/pr275-9b31a697-closeout.tar.gz, SHA-256878876dda65f8404af5b75215631e4402c5dce80f8b73a11e0080ac5c17faa3f. It retains 52 hashed payloads plus their manifest, actual raw failures/builds, the caught fixture-ordering failure and final verification. Temporary retention is not durable Q5 publication. New-head CI runs separately; no prior-head green check is relabelled as new-head proof. Your eight manual hosted checkboxes are unchanged. No deployment, final freeze, capability promotion, review dismissal or merge is performed.Earlier Checkpoint: Workers Batch Cutoff
Head:
8f82547b. Repairs a confirmed adapter-owned scheduling gap without changing public APIs, request budgets, capability levels or SDK/runtime pins. Specification, regression and native-evidence boundaries.The local review packet contains 99 hash-verified files:
/private/tmp/pr275-cutoff-coordinator-packet.tar.gz, SHA-25627837dc0fdb5785550ced06f7666e58091508e9ac64bbd11c884d2755195be68. It preserves RED/GREEN and final verification logs, the actual native patch/build and all failures, separately from the final source patch. Temporary local storage is not durable qualification. Demo/templates require no signature migration and inherit the adapter repair. No deployment, freeze, merge or maintainer review-state change is performed; the eight manual hosted checkboxes below are unchanged. New-head CI must execute separately.Earlier Checkpoint: Exact-Head Evidence Mapping
Tracking commit:
46019b2d. This documentation-only checkpoint maps evidence for reviewed source562acc1dedbf169315853900f9395e7ff5160076; it does not freeze or qualify either revision. Audit and evidence boundaries.12287f9f; Cloudflare/Spin do not embed a source SHA. The 30 successful checks associated with reviewed head562acc1ddo not establish exact-head runtime qualification.The local review packet contains 231 hash-verified files:
/private/tmp/pr275-562acc1d-closeout-packet.tar.gz. SHA-256:d96a6a50a80b87dad910fe43e2ca71d53ea887f7711d83cc5d26867af56fc4d6. It retains the original metadata draft separately, corrected pre-freeze record, complete derived leg map, raw captures/builds and supporting CI crosswalk. This temporary archive is not durable Q5 publication. Source APIs, adapters, demo/templates, SDK/runtime pins and outbound guarantees are unchanged. No deployment, freeze, merge or change to the maintainer-managed PR review state is performed. The eight manual hosted checkboxes below are preserved unchanged.Earlier Checkpoint: Workers Timer Setup Repair
Head:
562acc1d. The reviewed repair, regressions, specification, driver plan and changelog are committed and pushed. Source is clean. Investigation and evidence boundaries.Hosted CI at this update: 30 successful / 0 neutral or skipped / 0 running or queued / 0 failed reported checks. Local verification is not a substitute for unfinished hosted checks.
A separate, hash-verified review packet contains 111 files preserving raw controls, temporary instrumentation, RED/GREEN logs, final verification and exact-commit runtime artifacts. Packet SHA-256:
00a5573ac25d504e50e1953bb585ffb043b04a7d10bb6a440268bc0e78e6eb25. Lifetime Wasm SHA-256:e4730e8f068c15ac35b7c7e28e70327fb06097d787eee7eba60fa6ac26c6c6bd. Prior macOS/Linux failures and earlier packets remain retained separately; diagnostic passes are not copied into release evidence. Local temporary storage is not durable Q5 publication.No public API, SDK/runtime pin, capability, application policy, deadline, observation cutoff or tolerance is changed. Demo/template APIs remain unchanged. No deployment, candidate freeze or merge is performed; this PR remains draft. Hosted verification remains the maintainer's checklist below.
Maintainer Hosted Verification (Manual)
The maintainer will perform and check off these hosted gates manually. No deployment is delegated. Record the exact candidate SHA and link durable evidence; unchecked means unverified, not passed. Keep documented BestEffort/Unsupported limitations unless stronger behavior is actually proved.
Local CI, parser replay and native diagnostics do not check off these hosted gates. Acceptance identities and remaining local failures stay unchanged.
Earlier Checkpoint: Completed-Test Host-Diagnostic CI Repair
Head:
f82e4025. The prior head has 29 successful checks/one failed Fastly job. Its native library reports 309 passed/zero failed, but a known host diagnostic is concatenated directly after a complete namedok; the sentinel guard incorrectly rejects that line. This checkpoint changes only that guard, its co-located tests and tracking docs.fastly-lifecycle-evidenceartifact and fail-first regressions: 103 pass/6 expected failures, covering two formats and four exact inventory environments.okimmediately followed by the existing anchored timestamped Viceroy diagnostic. Reject arbitraryok...suffixes, malformed/missing timestamps, unrelated diagnostics, failed/ignored statuses and wrong names. Preserve every sentinel, listing checks, positive zero-failure summaries, and command/stream exit handling. No workflow, invocation or inventory change.See the repair and verification tracker and original failing job.
Earlier Checkpoint: Absolute Deferred Batch Dispatch
Head:
158b0c0e. This checkpoint corrects the existing lifecycle fixture, not production outbound behavior. APIs/adapters, SDK/runtime pins, original deadlines, caps, acceptance identities and capability levels remain unchanged.DeadlineExceeded1,001 ms, original per-call deadlines 1,034 ms. The complete local suite still exits 1, with 16 pass/3 fail plus a final-log-tail failure: cold Begin entry 9 ms, pending-body cutoff 206 ms, and ordinary-close cancellation remain unqualified. Pending-head cutoff returns at 204 ms in this run; earlier failed observations are not erased. Retain the initial missing-workerd preflight as unverified exit 2.See the current tracker and audit.
Earlier Checkpoint: Native Spin Result Before EOF
Head:
8fbc4f83. This checkpoint changes the existing Spin SDK controls, validation and retained evidence only. Production APIs/adapters, SDK/runtime pins, original deadlines, acceptance identities and capability levels are unchanged.See the native record, pinned source analysis and implementation tracker.
Earlier Checkpoint: Explicit Reset Diagnostic
Head:
cd214362. This checkpoint changes test tooling and evidence only. Production outbound APIs, adapters, SDK/runtime pins, original deadlines, caps, acceptance identities and capability levels are unchanged.RequestCancelled, exactly-once SDK/source release, healthy survivor work and a clean diagnostic tail. Ordinary close still fails, with no victim terminal through the original coordination window. Reset success is diagnostic only, not a replacement acceptance gate.See the current diagnostic and runtime tracker.
Earlier Checkpoint: Native Runtime Boundaries And Linux Connect
Head:
f036425b. Production adapters, public APIs, provider pins, deadlines, caps and original acceptance identities are unchanged.defaultsocket in the existing Workers fixture launcher using the pinned Miniflare API. No entry-forwarding fallback; the SDK entry/control listener remains on a distinct ephemeral loopback port. Guest flags, modules, bindings, persistence and owned shutdown remain intact. Standard serve/deploy paths are unchanged.qualified:false; external, conditional and unpromoted scope is unchanged.See the current tracker and canonical Linux connect evidence.
Earlier Checkpoint: CI And Local Lifecycle Repairs
Head:
22c6386c. All 217 required-local acceptance legs now have executable bindings (255 criteria/511 legs; 246 ready/265 planned overall). Binding completeness is not passing runtime qualification. External, conditional and unpromoted scope remains unchanged.See the current implementation and evidence tracker for exact observations and remaining gates.
Earlier Checkpoint: Fastly Post-Delivery Batch
Head:
775366fd. Extend the existing D6 lifetime suite with a three-slot batch created after canonical response handoff, using the same retained client and original request clock. Preserve 34 ms batch entry, 534 ms cutoff and one-second per-call timeouts. No production API, SDK/runtime pin, capability or CI invocation changes.Earlier Checkpoint: Fastly Trickling Slots And Live-Batch Send
Checkpoint
f0ce2b38adds EZ-6 criteria 7/8 to the existing Fastly fixture and lifetime suite. Production outbound APIs, transport, scheduler, deadlines, limits, SDK/runtime pins and CI invocations are unchanged.See the master/D6 tracker, SUITES.md and changelog for exact scope and retained results.
Earlier Checkpoint: Fastly Origin-Body Arrival Coverage
Checkpoint
eb8ac5dfadds the missing EZ-6 criterion 6 case to the existing Fastly lifetime suite. No new runner, transport, scheduler, SDK probe, production API/policy, pin or CI invocation.See the current master/D6 tracker, SUITES.md and changelog for exact scope and evidence.
Earlier Checkpoint: Fastly Native Body-Readiness Witness
Checkpoint
5950548dadds the distinctly labelled, request-owned test-only Fastly native readiness witness. Production outbound APIs, deadlines, B31 policy, limits, SDK/runtime pins and CI invocations remain unchanged.See the implementation tracker, SUITES.md and changelog for scope and retained evidence. Demo/templates require no migration for test-only metadata.
Earlier Checkpoint: Spin Native Pending-Body Witness
Checkpoint
92e03fe8extends the existing request-owned, test-only native witness to Spin. Production outbound APIs, transport, deadlines and resource policies are unchanged.See the implementation tracker, SUITES.md and changelog for the verified scope and retained evidence. Demo/templates need no change for this test-only integration.
Earlier Checkpoint: Cloudflare Native Module Manifests
Checkpoint
deb00840repairs the existing local launcher for the selected Wrangler 4.131.0 / Miniflare 5.20260910.0-alpha / workerd 2026-09-10 combination. Production outbound APIs and adapters are unchanged.persist/v3layout, startup attestation, private diagnostics and owned disposal. Both smoke modes pass, including seeded config, declared-KV and outbound-progress checks. A separate bounded local diagnostic proves namespace...02survives process restart and is read before another write.See the current implementation tracker and SUITES.md for exact scope, checks and retained evidence.
Earlier Checkpoint: Native Pending-Body Witnesses
Checkpoint
3523e121adds finite, request-owned test-only SDK observations on Axum and Cloudflare. Prepared URI, clock, mode and budget come from shared dispatch; production policies are unchanged.CI follow-up
c6f3aaf0uses canonicalobservation_cutoffnaming. The unchanged guard, 28 Axum contracts and strict lint pass locally; all 30 reported checks passed at that checkpoint.next, beforecollect. Require full controller-selected target/origin identity, Batch/BatchCutoff, the original deadline, Pending before cutoff and release between cutoff and return. Preserve 34/200/205 ms targets and zero-head/read control.rootPathagainst the owned config directory with sanitized errors.modulesRules. Failed runs get no credit; SDK-reader unit tests do not substitute for actual fetch/runtime proof.See the implementation tracker and SUITES.md for exact checks and retained failures. The prior Fastly dispatch checkpoint retains its SDK-dispatch-only scope and three guarded proofs.
The previous focus compiler checkpoint added numeric and compiler ownership through the existing grouped Rust check; its 434-test harness and other verification remain recorded separately, not relabelled as fresh evidence. Earlier provider-boundary proofs, typed-focus approval/CLI lint, audit formatting and tooling consolidation retain their scopes and open gates.
Earlier Checkpoint: Registration Observations And Connect Capabilities
outbound-connect-timeout: Fastly declares independent provider-backed support as Native; Axum, Cloudflare and Spin retain BestEffort acceptance. Fastly's split-free flexible phase budgeting is Native. These declarations do not qualify hosted connect precision, DNS/TLS coverage, blocking-call preemption, deadlines or cancellation.Checkpoint:
2cbbc549, following registration observations at00a9edbd. The implementation tracker records exact scope, evidence and remaining gates. This checkpoint is historical; current readiness and check status are recorded above.Earlier Checkpoint: Response-Owned Outbound Handoff
Checkpoint:
abbc2c11. Detailed local artifacts and failures are recorded in the D6 response-handoff tracker checkpoint.Earlier Checkpoint: Core Mixed-Observation Acceptance Binding
EZ-6/acceptance/22@unit/core, replacing its placeholder with five executable receipt/accumulator proofs. Run six exact three-slot cases: fresh and mixed check/next/collect under Completed, Cutoff and an original typed driver failure. Stage terminal production after both mixed receipts transfer.--lib outbound::; discover all 56 exact sentinels, including the original 51 redirect proofs. No new job or per-test CI list. The old redirect-only selection fails before execution because it omits the five batch proofs. Use the shared raw Cargo log path without relabelling older evidence.Checkpoint:
279c5a93.Earlier Checkpoint: Buffered Cap During Batch Progress
caps-while-waitinglifetime case through the production clients: 128 KiB decoded gzip trickling over 300 ms, independent 1 MiB decoded / 64 KiB buffered / 256 KiB encoded limits, healthy B/C siblings, and the original 34/534 ms batch timeline.Checkpoint:
8c11307d. Final local artifacts and individual failed timing preconditions are recorded in the D6 buffered-cap tracker checkpoint.Earlier Checkpoint: Reviewed Spin SDK Integration
6c59ed5b4fcb377072763aee0b27a3abdd8edb72(WASIp3 0.10.0 / wit-bindgen 0.63.0). Align the root, demo, reusable/request-fidelity fixtures, generator and all four application lockfiles.Checkpoint:
87b5e1ce. These are local regression results, not a frozen candidate or hosted qualification. D6 closure, native body-entry evidence, consumer acceptance and hosted qualification remain open. The acceptance inventory remains 32 ready / 479 planned and unqualified.Earlier Checkpoint: Fourth-Slot Per-Call Expiry
Implemented in cd8e77e4, within the approved D6 acceptance work:
Earlier Checkpoint: Readiness-Driven Test Origins
Implemented in d3f48564, under the requester's scoped fixture-accept approval:
CI diagnostic follow-up 11b8f2c4 adds underlying errors to two existing request-fidelity version-test assertions. The prior Linux workspace failure occurred before the collector tests; its OS/process cause was not exposed and remains unproven. The fresh run passes both the request-fidelity step and the complete shared-harness tests on Linux. No test conditions, retries, version policy or subprocess behavior changed; other CI checks and provider qualification remain separate.
Earlier Checkpoint: Same-Client CPU Calibration
Implemented in 0d09236a, under the requester's scoped calibration approval:
Earlier Checkpoint: CPU Stretch Characterization
Implemented in 44baaf3b:
Earlier Checkpoint: Pending Cutoff Lifetime Probes
Implemented in 73ed39ba, following the main integration:
host-head-written-only, not proof that the SDK consumed headers or entered a body read. Full criterion 16, remaining D6 work and hosted qualification stay open. Production outbound code, signed SDK/decoder pins, frozen requirements/interfaces and capability levels are unchanged; inventory remains 32 ready/479 planned and unqualified.Earlier Checkpoint: Coordinated Spin SDK Executor Upgrade
Implemented in 7b68f737:
e65ff90dadf4173b08b14194e878ad3acd555337; its DCO check passes. Upstream Rust 1.94 CI remains separate from local Rust 1.98.1 verification.spawn_local. Root, demo, reusable fixture and generator use identical Git URL/revision and package version; guards compare all three. Lock changes stay within the affected SDK/bindings/macro graph. Decoder/map contracts remain unchanged.qualified: false; full acceptance binding, candidate freeze and authorized hosted qualification remain open.Earlier Checkpoint: Begin/Batch Lifetime Probes and SDK Gap
Implemented in 834a009e:
wit-bindgen 0.57.1.qualified: false. CPU-stretch, remaining lifetime/registration/consumer acceptance, candidate freeze and authorized hosted qualification remain open.This is a verified test/diagnostic checkpoint, not a passing full lifetime suite or completed feature qualification.
Earlier Checkpoint: Standalone Test Harness and Redirect Bindings
Implemented in b5f94c70:
crates/edgezero-test-harness, with a non-published standalone workspace and its own lockfile. Remove the old runner package/directory without an alias or duplicate implementation. Keep deployable fixture apps separate and unit/contract tests in their owning crates.qualified: false. Readiness records executable assertions, not consumer adoption, applicability approval or exact-candidate qualification.This completes the approved runner relocation and local redirect binding checkpoint, not the whole adoption plan. Lifetime/registration acceptance, successful native optimizer transformation/redirect/performance evidence, consumer integration, candidate freeze and authorized hosted qualification remain open. Optional idle-body policy is not silently adopted. No deployment, capability promotion or production outbound behavior change occurs.
Earlier Checkpoint: Local Workerd Redirect Acceptance
Implemented in 4e64db99:
outbound-wirematrix and bounded two-origin servers as Spin. A fixture-only route obtains the production client from the canonical request context; no Fetch replacement, parallel outbound transport or new host-language runner is used.Successful native optimizer redirects, conditional idle-policy coverage, complete criterion-level binding and consumer/hosted acceptance remain open. The inventory remains eleven ready legs, 500 planned and
qualified: false.Earlier Checkpoint: Rust Spin Wire Harness
Implemented in 361da4f1:
--adapter spin --suite outbound-wirein the existing Rust fixture harness. No Python or Node replacement runner, compatibility wrapper, dependency changes or second process supervisor remains.This checkpoint is test-tooling only. No hosted deployment, capability promotion, candidate freeze or optimizer performance claim is made. The inventory remains eleven ready legs, 500 planned and
qualified: false.Earlier Checkpoint: Provider Redirect Boundaries
Implemented in 699cd49c:
Workerd/origin parity, successful optimized-first-hop redirects, conditional idle-policy coverage, complete criterion-level acceptance binding, candidate freeze and consumer/hosted qualification remain open. Native optimizer dispatch is preserved; unavailable-boundary controls do not establish transformation or performance. No deployment is performed. The inventory remains eleven ready legs, 500 planned and
qualified: false.Earlier Checkpoint: Fastly Cooperative-Wake CI Repair
Implemented in f57b8130:
qualification: false.Still open: provider-runtime redirect acceptance, exact-candidate criterion bindings, resource-policy decisions and consumer/hosted qualification. All previous outbound guarantees and direct native Image Optimizer integration remain intact.
Earlier Checkpoint: Explicit Redirect Following
Implemented in e02c2360:
HttpClient::followAPI with a required synchronous application policy and validated 1..=20 redirect limit. Plain Send, Begin and Batch remain unfollowed.Still open: other provider-runtime Follow parity, actual Fastly optimizer-hop mapping, consumer composition, exact-candidate criterion bindings, resource-policy decisions and hosted qualification. The inventory remains eleven ready legs, 500 planned and
qualified: false. No deployment or capability promotion occurred, and the PR remains draft. Current tracker.Earlier Checkpoint: Shared Outbound Pipeline and Ownership
Implemented in 2be1dd87:
Open at that checkpoint: explicit same-client redirect following (now implemented in the checkpoint above), remaining exact-candidate acceptance bindings, resource-policy decisions and hosted qualification. Local runtime evidence does not promote capabilities or prove end-client delivery. The PR remains draft. See the current tracker.
Earlier Checkpoint: Live Paired Time
Implemented in d86d4c0d, with the isolated Cloudflare test-ordering correction in f4d660b1:
with_time/ Axumtry_with_time, removing clock-only constructors without aliases.OutboundTimefor live asynchronous deadline handling. Check timers before source polling, preserve operational errors and diagnostics, retain clock high-water observations across chunks/yields, and release terminal/cancelled ownership.This completes only the approved sequencing checkpoint. The public head-first trait, settlement/context issuance, batch receipts, eager Begin, redirect integration and hosted qualification remain open. Requirements and frozen Plan 02 hashes are unchanged. See the verification audit.
Earlier Checkpoint: Bounded Synthesized Headers
Added in
d47c8026:This checkpoint is not completion of the broader adoption plan or hosted qualification. The full head-first/eager/redirect migration, Fastly's failed G2 preserving-read proof, all nine failed Fastly framing SDK parity controls, Cloudflare overflow recovery, consumer integration and exact-candidate hosted qualification remain open. No capability is promoted, no compatibility layer is restored, and the PR remains draft.
Reviewer correctness follow-up
Addressed R1–R4 in
92111839:Main merge and shared-policy follow-up
Addressed R5 and R6 in
91f4af38, merging main683202c6without restoring superseded APIs:OutboundBatch::from_futures; adapters retain preflight validation, exchange ownership, clocks, and terminal samples. Ready results remain retained, driver EOF/index invariants remain enforced, and cutoff releases pending futures before reporting termination. Fastly retains its distinct provider-handle driver.ResponseBodyPolicyandapply_response_body_policy, preserving declared-length checks, encoded limits, decoding/header rewriting, decoded limits, passthrough, and rechunk order. Transport reads, bodyless handling, deadlines, cancellation, and final buffering remain adapter-owned.Result<(), E>through a wrapper that prevents SDK-generated second responses.R7's dependency-audit-script deduplication remains deferred; dependency contract checks remain unchanged and pass.
Bounded native ingress and config follow-up
ConfigValuereturns. Axum constructors requireConfigStoreLimits;from_mapis fallible. Reads share payloads, and local config push updates require a server restart.serde_json 1.0.150, hash canonical JSON incrementally, and release extraction's raw handle before secret retrieval. A moving-reallocation malformed-root probe measured 36,428 requested peak bytes under a 100,060-byte staging cap, with zero retained bytes after rejection.Unsupportedand response egress remainsBestEffort. Local emulators and guest contract tests are not deployed runtime evidence.Bounded provider reads and lifecycle qualification infrastructure
FinalizationRegistrycleanup support. Generated and demo Workers explicitly enableenable_weak_ref, and regression tests inspect their TOML rather than assuming an exact one-flag string.try_opennow returns typedConfigStoreError.Downstream acceptance impact
Cloudflare
outbound-deadlinesandstreamed-upload-deadlinesareBestEffort, notNative. Downstream acceptance suites must use best-effort deadline wording and must not claim exact cancellation enforcement until deployed host-observed evidence exists.The response completion, ingress abort, and fallible application-assembly changes are intentional breaking changes. Consumers must provide a completion on every response-producing admission decision and propagate
App::build::<A>(platform)failures.Evidence boundaries
Capability declarations remain conservative where provider behavior is not proved:
Unsupportedon all adapters.Nativeon Axum andBestEfforton Cloudflare, Fastly, and Spin because finite host-side teardown is not proved or synchronously preemptible.Nativeon Axum's owned HTTP/1 connection andBestEfforton Cloudflare, Fastly, and Spin because provider transport reset/close is not directly observable.BestEfforton every adapter because no boundary proves end-client receipt; provider-specific blocking and teardown limits are documented.Unsupported; provider parsing/materialization, SDK copies, informational responses, trailers, allocator overhead, and other host-owned memory remain outside guest-visible caps.BestEfforton every adapter because provider operations are not proved cancellable within a finite wall-clock interval.BestEffortpending a deployed host-observed cancellation artifact. Fastly and Spin retain their separately documented deadline and isolation limitations. Fastly declares split-free phase budgeting Native; its independent connect setting remains unqualified for hosted timing precision.Validation
This checklist records validation across PR checkpoints. The exact latest reruns and remaining acceptance failures are listed above; it is not a claim of hosted qualification or a fresh run of every historical matrix.
scripts/run_tests.shcargo fmt --all -- --checkcargo clippy --workspace --all-targets --all-features -- -D warningscargo test --workspace --all-targetscargo check --workspace --all-targets --features "fastly cloudflare spin"Closes
Closes #436.