Skip to content

Axum readiness RC - #1541

Draft
ChristianPavilonis wants to merge 307 commits into
mainfrom
rc/axum-baseline-review-20261110
Draft

ChristianPavilonis wants to merge 307 commits into
mainfrom
rc/axum-baseline-review-20261110

Conversation

@ChristianPavilonis

@ChristianPavilonis ChristianPavilonis commented Nov 11, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Exact inputs

Head: c7f8ca7e1ad09bdbae8de40ceaa50d658ef5b7dc.
Tree: b3cb8e8dd02390d9822880bee38196cd538520dc.
Review base: baseline/demo-main-20261110 at historical TS main 2dd968aeebeb2cc0d5110115f64e0ad58e2e1d13, already merged into original demo2423a2ed.

The user selected baseline cleanup and deferred current-main forwarding/provenance compatibility. This branch intentionally omits newer-main functionality; do not retarget/merge it into current main as an ordinary forward integration. Seven EdgeZero declarations and ten locked git sources use83d. Registry package/version sets match original final demo2423; Cargo reconciles four permitted dependency edges within that identical set.

Review sequence

Order PR Unit Current head State
1 #1531 native b1216763a Ready; existing state unchanged
2 #1532 geo affb0d0a4 Ready; existing state unchanged
3 #1533 http 1cfba70a2 Ready; existing state unchanged
4 #1534 async a8e61218f Ready; existing state unchanged
5 #1536 native-ec c568207db Ready; existing state unchanged
6 #1535 sourcepoint e2672968a Ready; existing state unchanged
7 #1537 storage f14eefa67 Ready; existing state unchanged
8 #1539 image b9e1ff2cf Ready; existing state unchanged
9 #1538 runtime 46f621112 Ready; existing state unchanged
10 #1540 examples ee7f68fcf Ready; existing state unchanged
11 #1545 ports #1498 relay1498 c7f8ca7e1 Draft; exact-head CI pending

The existing ten heads/bases and ready states are unchanged. New baseline port1545 requests aram356, prk-Jr and dhruv8sh. Source1498 remains main-based atf22a83fce without head/base/readiness changes. Integration1541 remains draft regardless of constituent readiness.

flowchart TD
  Native[Native prepared startup] --> Geo[Protected CloudFront Geo]
  Geo --> HTTP[Provider-local HTTP opt-in]
  HTTP --> Async[Shared async EC]
  Async --> EC[Native lifecycle and DynamoDB]
  EC --> SP[Existing Sourcepoint reconciliation]
  SP --> Stores[Explicit storage and celld]
  Stores --> Image[Source-built image]
  Image --> Wrapper[Separate runtime wrapper]
  Wrapper --> Examples[Sanitized examples]
  Examples --> Relay[1498 through baseline port 1545]
Loading

Relay1498 inclusion

The user authorized source1498 in this stack/RC. Baseline port1545 applies its feature-only delta from f22a83fceac98767979ac0dd406701e4a000c1db, not its newer-main ancestry. integrations.prebid.relay_soft_vendor_exception remains false by default and testing-only; omitted/false leave publisher rules unchanged. Explicittrue retains Purpose2, mapped GVL vendor and unrelated-bidder controls. No operator/deployment input is enabled.

The replay exposed the previously observed automatic-CMP ownership defect when explicitly enabled: later publisher denial plus stale CMP grant caused a stubbed identity request/cookie. The existing guarded-setter correction fromd827b6c7 applies cleanly and is included with normal/deferred/throwing-subscriber regressions. Public ownership transfer, listener retirement, zero requests/cookies after denial and finally restoration are exercised. This extra correction is in port1545, not claimed already present in source1498. No new owner/ledger, public bypass, production timer, retry, dependency pin or new consent policy.

34 guard/ownership and11 actual production-artifact cases pass, along with180 focused Rust Prebid cases. The baseline shim measures41,948 chars under a narrow42,500 cap with Prebid-free/separate-artifact controls retained; the newer-main54KB allowance is not copied. Original red receipts are retained.

Scope and corrections

Existing native snapshots, body/head/response ownership, supported deadlines, EC generation/grants/consent and protected CloudFront Geo behavior are retained. Unset caller deadlines delegate to EdgeZero through its existing dispatch_budget API instead of the original TS30-second fallback; three regression tests cover unset/default, explicit120-second and earlier explicit deadlines. No new production timer, retry, result ledger, unlimited workaround or raw HTTP fallback.

Routine fixes retain failed receipts: redundant test imports, HTTP table formatting and documentation host/port placeholders. Hosted docs build then caught a relative Terraform link outside the site; Native EC8b11dbad3 replaces it with the repository path without disabling dead-link checking. Docs ESLint/VitePress build and format pass at their changed inputs.

A hosted no-listener assertion failed while the child logged expected startup rejection. The old log lacks socket endpoints, so its exact subtype is unconfirmed. A controlled Linux reproduction proves successful TCP self-connection with no listener. Native8490c691d changes only the acceptance fixture to exclude equal local/peer endpoints; real-listener/self-connection controls pass. Nonzero exit, diagnostic, secret-redaction and the original startup deadline remain mandatory. Native default and final9356 all-feature acceptance9 cases/strict lint/fmt pass. No assertion waiver.

Older browser CI failures show Playwright1.58.2 refusing ubuntu-latest's new Ubuntu26.04 before installation. Nativeb1216763a pins only the browser job to ubuntu-24.04, preserving dependency versions, tests and assertions. Direct Actionlint passes at native/final inputs; actual supported-host browser execution remains pending. The only9356 ->ee7 difference is this CI host/comment.

Checks and outcomes

  • Fresh exactc7f8ca7e1 integration checkpoint: all31 local gate receipts exit0, including every adapter/CLI/codegen strict lint lane, Fastly/default/reuse/native/Cloudflare/Spin suites, host CLI,17 parity cases, JS build/1272 cases/lint/format, docs lint/format/site build, Markdown, digest/clock/proposal and changed-line domain checks. Ignores remain ignores.
  • Three explicitly selected real local celld suites pass: persistence, prepared startup and actual native HTTP issuance/withdrawal/restart/outage.
  • Pinned Moto plus real AppConfig Agent fixtures pass for config-only, secret-only and combined health/auth/TSJS, immutable snapshots, restart adoption and selected-provider failure before listen without fallback. No external AWS account.
  • Fresh exactc7f8ca7e1 producer build and real runtime smoke pass: sha256:8878057fb97f2e1d13ca1049acd18c4d7d21f67d5b1403851d29f898019fa435, linux/amd64 UID/GID10001, startup rejection, health/auth/TSJS, read-only root/writable mounts and in-flight SIGTERM drain. Prior images are retained separately and not substituted for this new JS/config input. No image push.
  • Separate wrapper14 literal publication/permission/signal cases and ShellCheck pass.
  • Credential-free workload40-resource closed-gate/task-contract mocks,2 workflow cases/actionlint, DynamoDB example backend-free init/validate and actual TS CLI strict validation of the fictional config pass.

Passing receipts are reused only where relevant inputs remain unchanged, not claimed as a fresh whole-tree rerun. Evidence root retains ts-baseline-final-proof.md, ts-baseline-combined/, ts-baseline-check-fixes/, ts-baseline-image-probe-fixed/, startup-control and docs logs, and the failed hosted receipts. All local parent runners are complete.

Limits and preserved work

The existing ten feature PRs retain their observed ready states without head/base changes. New port1545 and the advanced RC await exact-current-head hosted checks;1545 is draft and1541 remains draft. Local pass is not a hosted all-green claim. Obsolete own CI runs without failed jobs were cancelled to free the queue; recorded failed jobs remain retained. Cancellations/ignores/unrun checks are not passes. Historical-base main-only CodeQL is not triggered and is not claimed passed.

No external AWS/DynamoDB account, fleet/cloud durability, real publisher, external Next.js or combined wrapper-image/ECS-volume qualification. Geo is default-off protected CloudFront; KV Geo454 stays standalone prototype-only. Operational Terraform remains in trusted-server-deployer; TS examples contain fictional inputs only.

Original work, dirty Prebid builder inputs, recovery refs and old RCs remain preserved. Current-main1525/1526 ready and1527/1528 draft retain their exact heads/bases. EdgeZero stack465/draft462 and deployer40 are untouched. No1499/independent1506 implementation, unrelated privacy/group/codec/phase experiment, new worker, deployment, live input switch, main merge or old-RC closure. Relay work is limited to source1498 and the existing ownership correction described above.

Closes / spec

Refs #1530 and #1498; do not close the tracker or source PR from this draft publication. This is existing-demo extraction with narrow caller/build/fixture fixes, not a new forwarding or consent design. Historical specs/reviews remain input-bound records, not backdated approval of this combined source.

Qualified semantic prerelease

Published and verified lightweight tag v0.1.1-rc-axum.202611.3 at 7dd2e30, tree d1ebc72adaf108e5bc520b536d832fa23456a0f3. All 33 exact-head RC hosted checks pass. Across the twelve current PR heads, all 568 checks are successful. This PR remains draft and targets main; the ten feature PRs remain ready in native stack #1564.

The combined tree retains every prior feature head, previous public RC, current main 06e51be, direct tag-bound EdgeZero interfaces, relay consent ownership, the latest Sourcepoint TCF mirror and consent-only safe cookie reconstruction.

Local qualification includes 3,440 Core passes with two ignored, 111 native passes with five ordinary ignores, and 3,372 JS passes with one skip. The approved shim budget is 54,000 characters for the measured 53,628-character artifact. No other artifact assertion changed.

Hosted failures were repaired without weakening assertions. Header comparisons keep exact equality without printing credentials; the later-batch browser fixture avoids a deadline-boundary assumption; isolated Cloudflare fixtures use their actual public origin and correctly resolve signed URLs; native port allocation binds without listening. CLI browser CI pins released Chrome for Testing 157.0.8103.78, with actual macOS browser fixtures passing. Production shutdown/deadline budgets are unchanged.

Fresh source-bound production-feature image, exact CLI/envelope, AppConfig Agent/Moto snapshot/restart/fail-closed controls, nine DynamoDB identity/fault/lifecycle controls and the literal wrapper pass. Images remain local and unpublished. Actual runtime/browser/parity/deadline/EOF and celld proofs remain tied to their tested inputs; skips and ignores are not passes.

Limits remain explicit. Viceroy host-worker cancellation warnings and the reproduced pre-existing extra combined Core/CLI/codegen preserve_order-sensitive golden mismatch are retained separately. Synthetic local proof is not live AWS/IAM, fleet durability or genuine publisher/CMP qualification.

Old tags are unchanged. No main merge, GitHub release publication, image publication or deployment occurred. Tag-triggered binary builds run separately; signing/public release publication is disabled.

Reconciliation refresh above the new PR 1506 head

Merge-forward head f078cf8f10b04352a12bc73ee8af021f53c8d368 retains original public 86797e0b43958aeb9bcd6a95b55884973bbe4242, previous local candidate 5114cd50b53364ab068d5f152ea55c3ab3bda956 and updated parent 0e00253ec72538b1402146f4f3f79a4650a8cbf4. The original feature patch is unchanged. Aram's #1516 code/tests/spec are preserved upstream rather than duplicated as another owned production port. The 18-file RC-only delta is unchanged; this PR remains draft against main.

Fresh shared-root and combined RC qualification passes on the refreshed source. Reused JS/Chrome/storage/wrapper/Terraform evidence is explicitly fingerprinted, not claimed as a new execution. Source-image proof is bound to refreshed #1539, not a new RC release. Fresh hosted/macOS, digest-backed wrapper/RC images, other external browser/framework lanes and live AWS/publisher/CMP acceptance remain unverified. Ignored/unexecuted cases and original failed receipts are not counted as passes. Historical claims above remain bound to their named old inputs. No tag, registry publication or deployment is included.

Published snapshot; newer upstream integration pending

Published deliberately for review from the qualified #1506 checkpoint 57d7c6ad8db43601ef31c1e1d1615e6dd2aa6a6a. At publication the moving author branch was at 628474ec4a8cee8361a6927ae6b79b68fdd33a55. Newer upstream bounded-response handling, per-profile RTB caps and Sourcepoint changes are not incorporated or qualified in this snapshot. Further merge-forward reconciliation and conflict resolution may be needed before merge. Local results above describe this exact qualified source, not a merge with the newer base or a release.

ChristianPavilonis and others added 28 commits November 10, 2026 21:06
The Fastly entry point assembles its app once per sandbox with
App::from_router, sends each request through
send_request_with_registries_and_hooks with prepare and finalize hooks,
and handles every FastlyRequestDelivery outcome in delivery.rs. A failed
assembly answers through send_assembly_error and is retried by the next
request.

Auction telemetry queues NDJSON during the request and, with EC pull sync,
runs after a committed application body on a fresh client and clock.
Pull sync sends each partner group with send_all_until under a 15 s
cutoff.

prepare installs a per-request synthesized header set, so head-limit,
framing and fallback responses carry the version, geo and operator
headers.

Removes the oneshot dispatch, the hand-built App and its startup error
router, the native response conversion and streaming delivery, the
config store handle, and core's stream_asset_body.
Delete core's unused StubHttpClient and its tests. Look up geo once per
request and carry it to the finalize middleware, trace metadata and
per-request services. Make TelemetryQueue a newtype, pass loaded settings
to assembly, and end the remaining failure logs with the sandbox counters.

Test the reuse path through two real requests, assert configure installs
the write deadline, and cover a configure failure. Run the response diff
script through a symlink and its node test in CI.
RequestGeo now answers Ok(None) for any IP the request did not resolve,
so FastlyPlatformGeo has no caller left and is deleted. Tests use
RequestGeo values instead.

Failure log contexts are formatted only when a log writes them. The spec
labels item 25 as a response change.
The cross-IP test used an address with no Viceroy geo data, so a restored host lookup also returned None and the test still passed. Loopback has default geo data, so a restored fallback now fails the test.
ChristianPavilonis and others added 30 commits November 13, 2026 09:37
Carry the behavior merged in #1516 at1810c763 without restoring the retired transport abstraction. Keep optimized requests and ordinary raw GET/unsigned HEAD caching unchanged.
…igration

The proxy.rs conflict is #1516's S3 cache bypass, ported onto the EdgeZero
client. send_asset_origin_request takes an OutboundCachePolicy. The signed
S3 HEAD preflight, its raw error-body GET, and a signed raw HEAD without
Image Optimizer options send Bypass; the final Image Optimizer request, an
unsigned raw HEAD, and a raw GET keep PlatformDefault. The two existing
preflight tests now expect the bypass; #1516's other tests follow in their
own commit.
handle_asset_proxy_request_bypasses_cache_for_signed_raw_head covers the
six raw-HEAD cases (svg, svgz, rewritten_svg, debug, disabled_io,
absent_io), each with an origin reply delivered as one chunk and as a
stream of chunks, and reads back the Bypass cache policy.
handle_asset_proxy_request_keeps_cache_for_raw_get_and_unsigned_head pins
PlatformDefault on a signed raw GET, an unsigned raw GET and an unsigned
raw HEAD. handle_asset_proxy_request_returns_s3_head_errors_without_cache_or_io
replaces the branch's 403-only HEAD preflight test with #1516's 403 and
404 cases, the kept Content-Length, and the uncached preflight transport.
handle_asset_proxy_request_preflights_s3_before_image_optimizer asserted
only the status and body, and the scripted client does not fail on an
unused reply, so it passed without a preflight. It now reads back the
methods [HEAD, GET] and the cache policies [Bypass, PlatformDefault].
The in-flight table and its notes said #1516 was still open. Merge
a53f4d0 ported it, so they now cite that merge, and section 2.7 says
which asset requests pass Bypass instead of the default cache policy.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants