Skip to content

October release candidate (DO NOT MERGE) - #1228

Draft
ChristianPavilonis wants to merge 524 commits into
mainfrom
rc/202610
Draft

ChristianPavilonis wants to merge 524 commits into
mainfrom
rc/202610

Conversation

@ChristianPavilonis

@ChristianPavilonis ChristianPavilonis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

October 2026 release candidate — keep draft; DO NOT MERGE.

Summary

  • Improves ad-render tracing and APS diagnostics, preserves streamed page rewrites and browser Origin, and tightens SDK routing and trusted geography handling.
  • Adds independent creative rewriting controls and safer CLI config updates; carries the existing identity foundation with Prebid EID fidelity and the identity-provider design.
  • Aligns Rust, Fastly, and EdgeZero dependencies and strengthens reproducible JS builds, CI scheduling, and repository checks.

Release scope

Includes current main at 2dd968aeebeb and every open, non-draft PR either assigned directly to milestone 202610 or declaring a closing link to an issue in that milestone. The audit identifies 19 eligible PRs: 12 assigned directly and 7 linked through milestone issues. Excludes all unmerged work authored by jwrosewell, including his prerequisite stack. None of the 19 eligible PRs is authored by him. A contextual mention alone does not qualify.

The table records the exact audited revisions, including the latest main-refresh merges for #1300, #1326, #1405, and #1406. Related issues provide traceability; inclusion does not assert that an entire issue is complete.

PR Change Related issues Audited head
#1107 Mobile ad-render tracing #1050, #1108 bccb1bf4782e
#1123 Rust 1.98.1 and aligned dependencies #1124 b090ed90736c
#1222 Streamed Next.js and GTM rewrites #1206, #1207, #1208 b5aac6dafce0
#1251 Authenticated forwarding of browser Origin #1250 f9a426c5ced2
#1252 Independent creative click rewriting switch #1234 70ba72155b3b
#1253 Creative asset host allowlist #1231 04b8bc52410e
#1254 Changed-line URL host gate #1215 36797df7c162
#1257 Pinned Node in Rust CI; trim JS dependencies #1204 75c049115641
#1291 Preserve config permissions; redact CLI errors #1202 46608aa7ffcc
#1300 Record APS render guard diagnostics #1299 b147fe301872
#1326 Isolate build git version from test overrides #1327 95e3342c9b54
#1405 Match vendor SDK hostnames and paths #1199 a9fb1b22f342
#1406 First-party Lockr API routing without polling #1247 610ac683c592
#1413 URI authority fallback for request host #1118 1caedc1d9d5c
#1414 Trusted geography for all Didomi SDK requests #1151 3b374fc278c1
#1416 Prebid JS EID fidelity #1246 5ab7d4994fca
#1420 Confirm generated ad-template config changes #1229 43967ffe194c
#1426 Queue PR CI by author and workflow #1425 3d448f910c2c
#1428 Server-side identity provider design #1246 f0f7a17ddf63
Already merged coverage: 38 PRs through main, plus #1069 carried in the RC

The audit also covers these 39 previously merged PRs. Their merge commits are retained through main, except #1069, which was merged into the original timing branch and is already in the RC history.

Carried work and exclusions

RC compatibility notes

Validation

Verified the updated source tree at 755223f54272:

  • All eight adapter/CLI/codegen Clippy gates, Rust formatting, native core and adapter tests, CLI tests, and 27 cross-adapter parity tests pass.
  • Fastly, Axum, and Cloudflare builds pass, along with production Fastly and Spin WASM builds.
  • JS build, all 2,959 tests across 78 files, lint, and formatting pass.
  • Docs build/lint/format, repository Markdown checks, docs-proposal checks, Node pin checks, template digest checks, WASM clock lint, and the changed-line URL-host gate pass.
  • Runtime boundary probes: RUNTIME_RESULTS.
  • A fresh milestone audit still identifies exactly 19 eligible PRs. All current heads and main are ancestors of this RC; no unmerged jwrosewell work is included. The four main-refresh merges change ancestry only and preserve the tested source tree.

GitHub CI will rerun after publication. Known upstream issues are tracked below.

Outstanding upstream requests

  • #1107 — Spin runtime compatibility: the trace acceptance workflow still installs Spin 4.0.0 while the SDK/toolchain requires 4.1.0. The installer correction is requested upstream.
  • #1253 — malformed configuration logging: omit raw malformed values from warnings while retaining useful entry/reason diagnostics.
  • Additional CodeQL findings involve code already on main and require separate triage. The upstream review requests remain open; this dependency update does not claim those CI failures are resolved.

aram356 and others added 23 commits October 7, 2026 23:20
Correct the upgrade checklist: on Fastly the CLI rejects any config key
other than the logical store ID, so a leftover `__KEY` selector makes
`ts config push` and `ts deploy` fail rather than writing to a key the
runtime ignores. My earlier note had this backwards.

Add the selector-migration steps the checklist was missing. Service-scoped
`EDGEZERO__SERVICES__<SERVICE_ID>__STORES__…__NAME` entries must move to
the unscoped variables in the deploy environment, because an unset
selector falls back to the logical ID and links whichever account-level
store carries that name, possibly another service's. Also call out
`trusted_server_kv`, which the managed deploy links even though the
Fastly runtime never opens it.

Name `EDGEZERO_MANIFEST` in the managed-deploy step, matching the CLI and
getting-started guides.

Replace the stale "Fastly Runtime Config Store" section in the
configuration guide. It still described the removed `edgezero_runtime_env`
selector model, `fastly compute publish`, and `--key` overrides. Its local
development paragraph also claimed `--local` writes under the resolved
`__NAME`; it writes under the logical ID.

Update the matching doc comments in settings_data.rs.

Read the sandbox reuse bounds from the application's own config store
under its logical ID. They previously came from `edgezero_runtime_env`,
which is deprecated and which this branch's pin no longer exposes a
constant for. The service-scoped key prefix goes with it, since it only
existed to namespace entries inside that shared store.
The skill's guardrails told operators to always pass `--service-id` to
`fastly compute publish`. That command now strands a service: it clones
the active version's resource links, so the new version lacks the logical
links the runtime opens, app config fails to load, and every publisher
route returns 500 while `/health` still answers 200.

Point the guardrail at the managed deploy instead, and keep the
`--service-id` advice for whichever deploy command is used, since a
checked-in `fastly.toml` can still pin a dead service.
Fastly main skips client-IP sanitization when the native request path is a
trace path, and the router hook later classifies the converted URI. Add a
regression test that runs encoded, dot-segment, doubled-slash, case and
lookalike paths through both and asserts they agree, so a future conversion
change cannot route unsanitized forwarded headers into ordinary dispatch.

Drop the repeated activation value from the bounded-lifetime test; only 1
and true activate diagnostics.
Adopt the reusable-sandbox Fastly entry point from main (#1179). Trace
ingress and trace-path classification are captured first in each
handle_request call, before the health shortcut and any native mutation, and
are passed into edgezero_main. Trace terminal responses are sent without
sandbox counters so their hardened headers stay exact.

Pin EdgeZero to 965d482f, the pre-dispatch fidelity branch merged with
EdgeZero main, so the reusable application lifecycles and the ingress hook
are both available. Re-resolve only the EdgeZero lock entries from main's
lockfile. Keep both the trace regression and reusable-sandbox CI steps.
Preserve upstream cache policy for rewritten JavaScript outside likely
static bundle paths. Log encoded-response bypasses at warning level only
when identity encoding was requested.

Repair eligibility coverage, add a path-aware cache regression, and
clarify assertion messages, collection diagnostics, and cache docs.
default:
return unhandledCase(cycle.delivery);
return unhandledCase(cycle.delivery) ?? 'Delivery evidence: Not observed';
const items = traceItems(item, maximumArrayItems);
if (!items || !add('[')) okay = false;
else {
for (let index = 0; index < items.length && okay; index += 1) {
for pattern in &self.exclude_domains {
if let Err(reason) = Self::check_exclude_domain(pattern) {
log::warn!(
"rewrite.exclude_domains: entry `{pattern}` never matches a URL host ({reason})"

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.

6 participants