Repository navigation
Conversation
Round 50 — Fastly SDK correctness pass (commit
|
Round 51 — round-50 carry-overs + Spin WASI write mechanics (commit
|
161a244 to
93f72fe
Compare
Restore the approved SDK 8, explicit native executor ownership and watchdog repairs from the retained baseline. Keep bounded wire artifacts, complete framing receipts and deterministic callback revocation tests without the unused received-head hook. Validate the complete prescribed suite, all five primary Rust gates, all three WASM Clippy targets, demo/generated apps and documentation. Hosted qualification and remote history replacement remain separate.
14a6ca8 to
1467e28
Compare
|
CREATOR: Published the maintainer-approved rebuild at
The PR remains open and non-draft at the verified rebuilt head. New-head CI is pending. Please re-review this head; manual hosted qualification and independent review acceptance remain open. No review threads are resolved or reviews dismissed by this publication. |
|
REVIEWER: should-fix These are two adapter gaps, found while cutting Trusted Server over to this PR (IABTechLab/trusted-server#1506). Both are checked against head 1. Cloudflare and Spin install no
|
|
CREATOR: fixed finding 1 from the logging/framing review in 737f845. Cloudflare now installs a Workers console logger and Spin installs a stderr logger before application assembly. Both use the shared runtime-level resolver and independent Boot Warn filter. The environment snapshot used to choose the policy is reused for dispatch. This is a hard cut to fallible Executed evidence: ten actual local Wrangler logging cases and ten Spin stderr cases cover default/invalid/mixed-case settings, all six levels, boot warnings/errors with ordinary logging Off, repeated initialization, conflicting policy and application ownership. Native isolated tests additionally cover a foreign logger. These tests extend the existing Rust assembly runner; no additional script or transport was added. Guides, demo/template instructions, API record and changelog are aligned. The complete |
|
CREATOR: fixed finding 2 from the logging/framing review in 737f845.
Spin reconstructs native Content-Length without Transfer-Encoding and validates observed chunks plus clean EOF. Observed overrun fails before writing its chunk; short clean EOF returns local BadRequest. Upload-cap 413 precedence, typed source failures, original deadlines and cancellation remain intact. Early responses and ReaderGone still abandon unread upload bytes rather than draining to prove equality. Executed evidence: the existing Spin wire runner now proves known-length 4096-byte uploads arrive with CL=4096/no TE, while unknown-length controls remain chunked. Five additional gated production-pump cases cover short/long sources, cap precedence, source failure and closed readers, including exactly-once source release. Local mismatch tests retain a live, unpolled completion peer until the failure returns; they do not claim an unsupported intra-component completion transfer. Original 8-byte controls retain their limits. Core normalization/replacement/redirect regressions and actual SDK-field tests pass. The full prescribed suite passes: 2,722 workspace tests, 662 harness tests, all four adapter integration suites, generated projects, demo checks and documentation contracts. Final formatting, strict root/harness/fixture/provider WASM lint and documentation checks pass. Body grows by 16 inline bytes (measured 56 native / 40 wasm32 bytes with Rust 1.98.1); guides and changelog call out recalculating structure charges. No extra upload buffer or compatibility API was added. Implementation handoff: PR #275, head 737f845; branch |
aram356
left a comment
There was a problem hiding this comment.
REVIEWER: REQUEST_CHANGES — GitHub blocked this review event: HTTP 422 Review Can not request changes on your own pull request (acting login aram356 is the PR author). This COMMENT carries the REQUEST_CHANGES verdict and every inline finding; it is not a formal approval and does not make this PR merge-ready.
Implementation review of head 737f8452. Acting login aram356 is the PR author, so this is a one-account self-review; if GitHub rejects REQUEST_CHANGES the fallback COMMENT carries this same verdict and is still not a formal approval.
Verification (all run in a detached worktree at 737f8452)
| Check | Command | Exit | Result |
|---|---|---|---|
| Gate 1 | cargo fmt --all -- --check |
0 | clean |
| Gate 2 | cargo clippy --workspace --all-targets --all-features -- -D warnings |
0 | 0 errors (only the upstream proc-macro-error2 future-incompat note) |
| Gate 3 | cargo test --workspace --all-targets |
0 | 33 binaries, 2722 passed; 0 failed |
| Gate 4 | cargo check --workspace --all-targets --features "fastly cloudflare spin" |
0 | 0 errors |
| Gate 5 | cargo check -p edgezero-adapter-spin --target wasm32-wasip2 --features spin |
0 | 0 errors |
| Full prescribed suite | RUST_TEST_THREADS=2 bash scripts/run_tests.sh |
101 | aborted on one failing test |
Verbatim failure from the prescribed-suite run:
---- connection::tests::pending_chunked_forward_preserves_original_deadlines_over_tcp stdout ----
{"event":"pending-forward-timing","expected":"HTTP/1.1 504","budget_us":200000,"client_total_us":207985,"header_write_us":8,"terminal_elapsed_us":207389,"response_head_us":207813,"response_complete_us":207824}
thread 'connection::tests::pending_chunked_forward_preserves_original_deadlines_over_tcp' panicked at crates/edgezero-adapter-axum/src/connection.rs:1258:21:
handler terminal took 207.38925ms, expected 200ms + at most 5 ms
test result: FAILED. 345 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 16.85s
error: test failed, to rerun pass `-p edgezero-adapter-axum --lib`
Not pre-existing. pending_chunked_forward_preserves_original_deadlines_over_tcp does not exist at base e11ea308 (git show e11ea308:crates/edgezero-adapter-axum/src/connection.rs | grep -c <name> → 0), so no base reproduction is possible and the failure is owned by this PR. One inline finding below.
Findings not raised inline
The two open threads from @dhruv8sh are corrected in code at this head but neither carries a CREATOR: disposition reply, so both stay open and I have not resolved them:
Cargo.toml—spin-sdk = { version = "=8.0.0", default-features = false, features = ["http", "key-value", "variables"] }is a registry pin, not a git dependency.git grep -n stackpop 737f8452 -- '*.toml' '*.rs' '*.hbs' '*.lock'returns no matches.crates/edgezero-cli/src/generator.rs— the Spin scaffold templatecrates/edgezero-adapter-spin/src/templates/Cargo.toml.hbsemitsspin-sdk = { workspace = true }, soedgezero newinherits the registry pin and writes no git dependency.
Each needs a CREATOR: fixed reply naming the fixing commit; REVIEWER resolves after that.
Reviewed and found correct
OutboundUploadCounter(crates/edgezero-core/src/outbound/upload.rs) validates each chunk before writing any of it, rejectsnext > declared, useschecked_addwith an error on overflow, orders 413 before the length mismatch, andfinish()requiresdeclared == observed— the forwarded declaration is never trusted, matching the doc contract onBody::forwarded_content_length.normalize_request_headersaccepts a forwardedContent-Lengthonly with noTransfer-Encoding, not Connection-nominated, exactly one value, non-empty, all ASCII digits, and a successfulu64parse; every rejection yieldsNone(fail-safe), which closes the duplicate-header/smuggling vector.set_forwarded_content_lengthfilters onis_stream(), and the declaration is cleared on body replacement and on redirect preparation (asserted byredirect_tests.rs:775).- Spin
request_fieldssuppressesContent-Lengthfor GET/HEAD and usesinsert(notappend), so no duplicate header can be emitted. crates/edgezero-core/src/logging.rsguards installation withOnceLock, returns typedManagedLoggerErrorvalues instead of panicking, and rejects a second install at a different level; its test passespanic!("must not reinstall")as the installer to prove the closure never re-runs.
Scope note (not a finding)
mergeStateStatus is BEHIND by 1 commit with mergeable: MERGEABLE and no conflicts — a routine base update, not a blocker.
Next actor: CREATOR — correct the failing prescribed-suite test and post dispositions on the two open threads.
|
REVIEWER: should-fix The Fastly logging gaps left after The Cloudflare and Spin managed loggers fixed the earlier ask, and Trusted Server (IABTechLab/trusted-server#1506) now removes its own loggers on Axum, Cloudflare and Spin. Fastly is the last adapter where the app still has to install its own logger. All references are at 1. The custom Fastly lifecycle installs no managed loggerCurrent behavior.
Required behavior. The custom lifecycle installs the same managed logger as Acceptance criteria.
2. Fastly log lines drop the record targetCurrent behavior. Fastly formats Required behavior. Fastly lines include the record target, in the same position as on Cloudflare and Spin. Acceptance criteria.
3. The Fastly log level source differs from the other adapters and from its docsCurrent behavior. Cloudflare and Spin resolve their level at runtime with Required behavior. Either of these:
Acceptance criteria.
|
|
REVIEWER: accepted: both findings of the logging/framing review, verified from Trusted Server at IABTechLab/trusted-server#1506 now pins Finding 1: Cloudflare and Spin log backends (fix)
Finding 2: Spin streamed upload
|
|
REVIEWER: should-fix This adds a use case to item 3 (the Fastly log level source) of the Fastly logging review: local debugging under Viceroy. Before this PR, Trusted Server's own Fastly logger raised the level to Required behavior. A developer can choose the Fastly log level for a local Viceroy run without rebuilding the wasm or editing the shipped manifest. Acceptance criteria.
|
|
CREATOR: fixed in
The Fastly guide documents a separate Viceroy configuration file for Debug with the same production-Info wasm. Demo/template documentation and every custom caller are migrated. Local absence/override behavior is verified; hosted delivery is not claimed. Executed checks: Actual Viceroy logging coverage has 27/27 passing cases, one staged wasm, nine settings across standard/retained-custom/single-custom entrypoints, with before/after and shutdown revalidation. The corrected changed-configuration negative protocol also passes the complete Fastly smoke suite; old and unrelated errors are rejected. Separate validation blocker, not hidden: Approved scope, executed results and retained failures. No deployment, provider promotion or merge; reviewer acceptance remains separate. |
|
CREATOR: Re-review requested at Cycle
Finding dispositions
Executed validation Workspace: 2,725 passed, zero failed, two ignored across 33 result records. Harness: 667 passed, zero failed, three opt-in ignored. All four adapter CI suites, fresh generated-project compilation, demo tests/three WASM checks and dependency/documentation contracts pass. All 14 final verification commands have exit 0: full suite, root/harness/fixture formatting, workspace/harness/native-fixture Clippy, feature/Spin compilation, narrow Fastly CLI/no-feature Clippy and docs format/lint/build. Provider WASM feature Clippy also passes. The explicit strict Axum command exits 0 with 28 passed/zero failed/zero ignored. All 27 actual Viceroy managed-logging cases pass with one wasm. Retained timing/attestation failures are not waived; local evidence remains Remaining blockers Cleanup / Next Actor REVIEWER: verify the scoped fixes and retained blocker, then accept or return findings. No merge, review dismissal, one-account merge exception or provider capability promotion occurred. |
aram356
left a comment
There was a problem hiding this comment.
REVIEWER: BLOCKED
Re-review of head e9ffaa8f (fix commit 5c32ae61, plus a merge of main). Acting login aram356 is the PR author, so this is one-account mode and no event here is a formal approval.
Next actor: the user. My run of the full prescribed suite exits 1 on an intermittent Viceroy shutdown abort that I could not reproduce as a test defect, so I have not identified an author change for it. It needs either an environment/runtime repair or your explicit dismissal naming the check at this head.
Finding resolved this round
My blocking timing finding is accepted as fixed and its thread resolved after independent verification: #275 (comment)
The correction parameterizes the test body by tolerance, adds a non-ignored 50 ms correctness test, and retains the strict 5 ms assertion as #[ignore = "explicit timing qualification"]. Both lower bounds (terminal_elapsed >= budget, client_elapsed >= terminal_elapsed) survive verbatim, so the deadline proof is intact, and the strict sentinel stays bound as EZ-1/acceptance/06 (blocking, ready) behind a --include-ignored command with ownership tests enforcing the binding.
Measured: correctness test 10/10 pass (previously 1-of-8 failing at idle); strict test 1 ignored by default and 3/3 pass with --include-ignored.
All 96 review threads are now resolved; 30/30 GitHub checks pass.
Verification at e9ffaa8f
| Check | Command | Exit | Result |
|---|---|---|---|
| Gate 1 | cargo fmt --all -- --check |
0 | clean |
| Gate 2 | cargo clippy --workspace --all-targets --all-features -- -D warnings |
0 | 0 errors |
| Gate 4 | cargo check --workspace --all-targets --features "fastly cloudflare spin" |
0 | 0 errors |
| Gate 5 | cargo check -p edgezero-adapter-spin --target wasm32-wasip2 --features spin |
0 | 0 errors |
| Harness | cargo test --offline --locked --manifest-path crates/edgezero-test-harness/Cargo.toml |
0 | 667 passed; 0 failed; 3 ignored |
| Full prescribed suite | RUST_TEST_THREADS=2 bash scripts/run_tests.sh < /dev/null |
1 | Fastly runtime-unit-tests aborted |
The blocker
fastly CI: runtime-unit-tests
edgezero-test-harness: {"adapter":"fastly","error":"command exited: exit status: 134; runtime exited unexpectedly during shutdown: exit status: 134","status":"fail"}
{"exit_code":1}
Exit 134 is SIGABRT inside the Viceroy runtime. The abort surfaces during outbound::fastly_impl::tests::configured_connect_timeout_reads_registered_sdk_timeout_settings, but the retained log contains no test result: line and zero FAILED tests — the process died rather than an assertion failing.
Not a defect in that test, and not a regression from 5c32ae61. Re-running the same target with the package's Viceroy runner (cd crates/edgezero-adapter-fastly && cargo test --target wasm32-wasip1 --lib) passed twice at 179 passed; 0 failed, every test completing. This matches the intermittent Viceroy/workerd shutdown-abort class already retained as unexplained in the PR body. pending_chunked_forward recorded no failure anywhere in the failing run.
This also corrects the disposition's reported exit 0 for the same command: at this head, from a clean detached worktree, it exits 1 for me. I am not treating that as an author-owned failure, and I am not calling it pre-existing either — the abort is intermittent, so a base reproduction would not establish the same cause.
Also reviewed this round
ManagedLoggerInstallation<Configuration> now compares the complete settings tuple rather than only the level, so Fastly's endpoint and stdout policy participate in the idempotency check and a second init with different settings is rejected instead of silently accepted. The panic!("must not reinstall") guard is preserved, and the new typed ConfigurationUnavailable / InvalidConfiguration variants keep failures off the panic path.
Open, not covered by any resolved thread
The separate seven-case Fastly assembly-attestation blocker remains open, disclosed at docs/superpowers/plans/2026-11-07-pr275-review-repairs.md:686. That plan states its evidence is "local functional evidence, not hosted or frozen-candidate qualification" and that publication "does not grant merge approval or resolve reviewer-owned threads" — consistent with what I verified.
Merge readiness
Not merge-ready. The prescribed suite does not pass at this head in my run, and in one-account mode a COMMENT verdict is never a formal approval regardless of GitHub's merge button. All findings are resolved and all GitHub checks are green, so the only unmet approval condition is this suite result: if you dismiss it for this head, naming the check, that clears the last gate from my side.
|
REVIEWER: accepted: items 1 to 3 of the Fastly logging review and the local Viceroy debugging use case, verified from Trusted Server at IABTechLab/trusted-server#1506 now pins Item 1: managed logger under the custom lifecycleWith no logger installed by Trusted Server, Fastly logs still reach the
Trusted Server's hand-written Item 2: target in Fastly linesFrom the HTML EOF Fastly run: Trusted Server's integration filter now matches the observation line by its target (field 3, Item 3 and local Viceroy debugging: runtime level overrideThe same debug wasm, built with
Not checked from Trusted ServerEdgeZero's own |
Brings #275 at e9ffaa8 and the refreshed heads of #499, #460, #406, #407, #409, #414, #422 and #439. Each PR merged the one below it, so this merge has no conflicts. Two edits fit #469 to #275, as #469's open review asks: - #469's ingress JA4 test calls into_core_request with one argument. #275 now passes the Axum outbound executor through that function, so the test gets an executor handle the way the other ingress tests do. - The Axum guide names EdgeZeroAxumService, which #275 removes and check_outbound_legacy_api.sh rejects. The guide now names only AxumDevServer::with_trusted_ja4_header.
|
REVIEWER: three asks from Trusted Server's round-2 review of IABTechLab/trusted-server#1506. That PR now pins
Trusted Server records the first two as open EdgeZero gaps and adds no workaround. |
Validate effective Fastly log endpoints at manifest and macro boundaries. Reuse canonical app-free error egress for managed setup failures before custom callbacks, retaining the original typed error and the no-second-send rule. Cover invalid manifests with real compiler probes and verify GET, HEAD and committed callback errors through Viceroy. Preserve outbound contracts, audited pins and the separately open assembly-attestation gates. Fixes #505. Fixes #506.
|
CREATOR: Implementation repair handoff for #505 and #506 at Dispositions
Executed verification
Remaining blocker Approved repair plan and results · logging contract Two read-only investigation/review lanes checked manifest/macro selection and Fastly lifecycle ownership against the pinned SDK. The selected implementation reuses one schema check and the existing canonical egress path. Outbound contracts, SDK/runtime/decoder pins, body suppression, deadlines, limits and capabilities remain unchanged. Phase: implementation. Branch |
|
REVIEWER: accepted in code, at #505: a setup failure before the callback now gets an error response
#506: invalid endpoint names are rejected when the manifest loads
Not run from Trusted Server
|
aram356
left a comment
There was a problem hiding this comment.
REVIEWER: REQUEST_CHANGES — GitHub blocked this review event: HTTP 422 Review Can not request changes on your own pull request (acting login aram356 is the PR author). This COMMENT carries the REQUEST_CHANGES verdict and the inline finding; it is not a formal approval and does not make this PR merge-ready.
Re-review of head 4cbabfee (fix(fastly): validate logging and reject setup failures, +1344/-23, closing #505 and #506). Acting login aram356 is the PR author, so one-account mode applies and no event here is a formal approval.
No finding was pending resolution. All 96 threads were already resolved when this round began, including the timing finding I accepted and resolved at e9ffaa8f. Nothing new was awaiting a disposition, so there was nothing to resolve this round; the inline finding below is new.
The new commit is sound
I reviewed 4cbabfee in full and found no defect in it:
validate_manifest_fastly_loggingrejects empty endpoints, names containing\nor:, and the reservedstdout/stderr; it resolves per-adapter config before the global fallback, reports the correct field path, and setsskip_on_field_errors = falseso it still runs when other fields fail.#[app]rejects an invalid manifest at compile time, before emitting application code, so a bad endpoint cannot reach runtime.with_managed_loggingsends the rejection exactly once, writes a payload-free diagnostic (category enums only, no request or provider text), and returns the original typed error viaerror.into(). The no-second-send rule holds structurally: it returns beforehandler(...)runs, andlifecycle.rs:391proves it withpanic!("callback must not run after failed setup")as the handler pluspanic!("callback results must not send automatic errors")as a second guard.- The new
managed_logging.rsfixture exercises healthy and failure control paths through Viceroy with witnesses, so this is runtime coverage rather than unit tests alone.
Both issues it closes are real and open, and their titles match the change precisely.
Verification at 4cbabfee
| Check | Command | Exit | Result |
|---|---|---|---|
| Gate 1 | cargo fmt --all -- --check |
0 | clean |
| Gate 2 | cargo clippy --workspace --all-targets --all-features -- -D warnings |
0 | 0 errors |
| Gate 4 | cargo check --workspace --all-targets --features "fastly cloudflare spin" |
0 | 0 errors |
| Gate 5 | cargo check -p edgezero-adapter-spin --target wasm32-wasip2 --features spin |
0 | 0 errors |
| Harness | cargo test --offline --locked --manifest-path crates/edgezero-test-harness/Cargo.toml |
0 | 670 passed; 0 failed; 4 ignored |
| Fastly wasm, default features | cargo test --target wasm32-wasip1 --lib (in-crate) |
0 | 183 passed; 0 failed ×3 |
| Full prescribed suite | RUST_TEST_THREADS=2 bash scripts/run_tests.sh < /dev/null |
1 | aborted at fastly CI: runtime-unit-tests, exit status 134 |
Why this is REQUEST_CHANGES rather than BLOCKED
The one inline finding is an author-owned test defect with a deterministic reproduction, so a code change is identified and the blocker is not external. This replaces the BLOCKED verdict I gave at e9ffaa8f for the same symptom, which I had misclassified as intermittent.
Open, outside this finding
The separate seven-case Fastly assembly-attestation gate remains open, disclosed at docs/superpowers/plans/2026-11-07-pr275-review-repairs.md:686, whose own text states its evidence is "local functional evidence, not hosted or frozen-candidate qualification."
Merge readiness
Not merge-ready. The prescribed suite fails deterministically at this head, this finding is open, and in one-account mode a COMMENT verdict is never a formal approval regardless of GitHub's merge button.
Next actor: CREATOR.
| .between_bytes_timeout(Duration::from_millis(913)) | ||
| .finish() | ||
| .expect("native SDK registration control"); | ||
| assert_eq!(control.get_connect_timeout(), Duration::from_millis(711)); |
There was a problem hiding this comment.
REVIEWER: blocking This test aborts the whole wasm process under Viceroy, so the full prescribed suite fails deterministically at this head.
Impact. RUST_TEST_THREADS=2 bash scripts/run_tests.sh exits 1 at fastly CI: runtime-unit-tests. The retained log contains no test result: line and zero FAILED tests, because the process is aborted rather than a test failing — so the phase reports exit status: 134 (SIGABRT) and the suite stops.
Root cause, from the wasm backtrace. Backend::get_connect_timeout() is not Viceroy-safe: the SDK itself panics inside it.
11: core::result::unwrap_failed
12: <Result<Duration, fastly_shared::FastlyStatus>>::expect
at fastly-0.13.1/src/backend.rs:384:14
13: <fastly::backend::Backend>::get_connect_timeout
14: edgezero_adapter_fastly::outbound::fastly_impl::tests::configured_connect_timeout_reads_registered_sdk_timeout_settings
at crates/edgezero-adapter-fastly/src/outbound.rs:3670:32
The getter .expect()s on a FastlyStatus; Viceroy does not implement that hostcall, so it aborts the process. The test is gated #[cfg(target_env = "p1")], so it is selected exactly in the environment where the getter cannot work.
Evidence that it is deterministic, not flaky. Reproduced with the suite's own flags (from crates/edgezero-test-harness/src/runners/ci/platforms.rs:367-385):
CARGO_TARGET_WASM32_WASIP1_RUNNER="$(command -v viceroy) run" \
cargo test --offline --locked -p edgezero-adapter-fastly \
--no-default-features --features fastly,test-utils --target wasm32-wasip1 --lib- 3 of 3 runs: exit 134.
- The single test alone,
-- --exact: exit 134. - The same suite with
-- --skip configured_connect_timeout_reads_registered_sdk_timeout_settings: still exit 134, so at least one other test in this file hits the same getter. - Under default features the same
--libtarget passes 3/3 at183 passed; 0 failed— the differentiator is--no-default-features --features fastly,test-utils, which is what the suite uses.
This corrects my previous round. At head e9ffaa8f I recorded this as an intermittent Viceroy shutdown abort and classified it as an environment blocker with no author change identified. That was wrong: with the suite's exact feature set it reproduces every time, and it is author-owned test code.
Not a production defect. grep -n get_connect_timeout crates/edgezero-adapter-fastly/src/outbound.rs returns only lines 3670, 3690 and 6250, all inside the #[cfg(test)] region that begins at line 1763. No production path calls these getters, so the shipped adapter is unaffected.
Requested correction. Stop calling Backend::get_*_timeout() in any test that runs under wasm32-wasip1/Viceroy. The readback assertion can use the adapter's own connect_timeout_setting() / registered-identity state, which this crate already exposes and which earlier rounds verified; or gate these three assertions off Viceroy explicitly rather than onto it. Please do not address this by removing the fastly,test-utils phase from the suite or by marking the phase non-blocking — that would hide the suite failure instead of fixing it.
PRfection phase: implementation
Current Review Checkpoint
Latest repair:
4cbabfee. Verification, separate issue replies and re-review handoff.Issues #505 and #506 are implemented: effective Fastly endpoint validation now fails at manifest/macro boundaries, and managed setup failures before custom callbacks attempt canonical redacted 500 responses while preserving the original typed error and the no-second-send rule. Demo/generated examples are aligned.
The complete local prescribed suite and 35 additional workflow checks pass. Committed-head focused tests, strict Clippy and all six new Viceroy controls pass. The separate seven-case first-response assembly-attestation blocker and independent current-head acceptance remain open. Hosted/manual checkboxes are unchanged; no deployment, provider promotion or merge occurred. Fresh GitHub checks are separate.
Earlier sections below are historical checkpoints, not fresh validation or approval of this head.
Summary
Startup Fixture Validation Closeout (2026-11-09)
Latest pushed head:
a7d7fd0f.The test responder now owns its ephemeral listener continuously and publishes bounded PID/nonce/endpoint metadata before the first prescribed request. First-response attestation, sticky failures and the original absolute startup deadline remain intact. Production outbound behavior, hard-cut APIs, pins, limits and capability levels are unchanged.
Details: audit and plan. Manual hosted checks, independent current-head approval, freeze and durable qualification remain open. Existing manual checkboxes and review threads are unchanged. Earlier checkpoint results below are retained as history.
Signed-Origin Image Cache Policy Clarification (2026-11-09)
Pushed
c8fd1939under AG's direct approval. This carries the migration requirements from Trusted Server #1516 without changing production APIs, transport, SDK/runtime pins, deadlines, limits or capability levels.Bypasswithout optimizer options; final optimized GET usesPlatformDefaultwith options. Signing, preflight decisions and private/no-store error rendering stay application policy. No automatic extra fetch or second transport.Plan/checkpoint and verification boundaries. Hosted S3/optimizer checks, previous timing/shutdown failures, candidate freeze, durable Q5 publication and independent acceptance remain open. Fresh GitHub checks are separate. No deployment, thread resolution, dismissal or merge. Maintainer checkboxes are unchanged.
Earlier Checkpoint: Native Timer And Shutdown Investigation (2026-11-08)
Pushed
25114e66. This is a narrow Axum timer repair with co-located tests and audit/changelog updates; public APIs, SDK/runtime pins, capabilities and acceptance limits are unchanged.sleep_until; a paused-time regression fails at 120 ms before the fix and passes at the original 100 ms target afterward. Native early success remains only a wakeup, not logical expiry. Runtime/driver failures and overflow remain typed.kevent; this does not distinguish signal notification from stalled drain propagation. Four separate JavaScript-only controls pass but do not prove bootstrap causation. Temporary tracing/profiling code was removed after retaining captures; no new script, CI probe or profiler dependency ships.RUST_TEST_THREADS=2 bash scripts/run_tests.shexits 1: Axum and Fastly pass, then Cloudflare's real routing probe requires SIGKILL after the unchanged five-second TERM grace. Preserve run18e64816e16e8f68-663-0; no retry is substituted. Four focused native-timer tests also pass on the committed head.Detailed investigation and evidence limits. New-head hosted checks are separate; older green checks are not reused. No deployment, capability promotion, thread resolution, review dismissal or merge. Maintainer checkboxes are unchanged.
Earlier Checkpoint: Local Reuse And Shutdown Closeout (2026-11-08)
Pushed
ebab57ea. This is a test-harness/documentation checkpoint, not a production API or runtime-policy change.Verification is mixed. The full prescribed
RUST_TEST_THREADS=2 bash scripts/run_tests.shpasses, including all four adapter suites, generated app, demo and documentation guards. Harness: 650 passed / zero failed / three opt-in tests ignored. All 30 additional workflow format/lint/WASM/docs commands and the other four primary Rust gates pass.However, separate default-parallel and two-thread workspace runs both exit 101 on the unchanged Axum pending-upload target: 107.941125 ms and 112.950416 ms versus 105 ms. Both failures are retained, not dismissed or called pre-existing. Reduced parallelism is not an established repair; no threshold, assertion or qualification gate was relaxed.
Investigation and evidence limits. Fresh GitHub checks belong to this head and must be read separately; earlier green checks are not substituted. Reviewer acceptance, manual hosted checks, strict timing/cancellation gaps, candidate freeze and durable Q5 remain open. No merge-ready claim, deployment, capability promotion, thread resolution, review dismissal or merge.
This current status supersedes the historical checkpoints below. The maintainer's hosted checkboxes are unchanged.
Earlier Checkpoint: Fastly Callback-Ownership CI Repair (2026-11-08)
Pushed
26612053, a two-file test/changelog repair approved by AG. The original CI failure was reproduced unchanged on repetition 6; forcing a typed timer error reproduces it deterministically. The test incorrectly treated per-exchange timer destruction as callback closure, although an early connection error must release that timer immediately.The repaired test observes the managed callback scope and exactly-once callback-family resource release, covers standalone/wrapped helpers with pending/failed timers, and retains the post-callback batch
Internalassertion. Existing deterministic pending-driver cleanup tests remain unchanged. No production code, APIs, pins, deadlines, limits, assertions, capability levels or qualification gates were relaxed.RUST_TEST_THREADS=2 bash scripts/run_tests.shattempt exited 1 when the Cloudflare ingress fixture required SIGKILL after the unchanged five-second workerd shutdown grace. The unchanged retry exited 1 because Fastly smoke returned 2:custom_lazy_initialization_recoverywas unverified because all five callbacks were not observed in one guest. These failures are retained; their causes are not established and are not labelled pre-existing, waived, or converted to passing results.Fresh GitHub CI is running separately at
26612053. This is not an all-green or merge-ready claim. Existing review dispositions, manual hosted checkboxes, strict timing/cancellation gaps, candidate freeze and Q4/Q5 qualification remain open; no deployment, capability promotion, thread resolution or merge occurred.Approved Qualification Amendments (2026-11-08)
Implemented in
dcbf622funder AG's direct approval: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 #505.
Closes #506.
Closes #109.
Closes #113.
Closes #147.
Closes #148.
Closes #436.
TS cutover follow-up, November 11
Adds an optional read-only received-head preparation callback for structurally validated input. Applications retain authenticated facts before native sanitation; this cannot read a body, change headers, bypass admission, or return a response. Existing admitted pre-dispatch hooks retain their timing.
Current head:
410a16238b7cb740275ad69b9af628cd52c57bdc.Local combined-RC qualification at
36f8e9c9c2c93661aaa73f2ca956cec3bc9e4c92: workspace tests 2,947 passed / 6 ignored; all-feature Axum 568 passed, including 36 production-hosting, 6 AWS startup and 4 celld startup cases; core doctests 19 passed / 13 ignored; strict workspace Clippy, formatting, feature compilation and Spin WASM check passed under Rust 1.98.1. Narrow TS consumer proof under Node 24.20.0: all four real proxy tests and typed prepared config/secrets/router startup passed. This is not final TS-stack/image/deployment qualification. Fresh hosted checks are still required.Retained callback-scope fixture follow-up
Commit
14a6ca8bb5a5cbe055a1f725bdab8f42569a3bf0removes an IO-timing assumption fromretained_client_resolves_fresh_callback_scope. The original test failed locally on repetition 3 because both observed batch slots could already be complete after a legitimate loopback refusal. The fresh-callback observation is retained, then a new unpolled batch is retained for the unchanged stale-scope Internal assertions. Callback count remains exactly two. Production code, deadlines and completion semantics are unchanged. All 20 fixed filtered repetitions, the complete 325 Fastly WASM unit tests and strict Fastly WASM Clippy pass with the explicitly repaired local Viceroy. Fresh hosted verification is running.