Repository navigation
Conversation
Specify a provider-neutral JA4 accessor (ctx.ja4()) backed by adapter-owned RequestIngress metadata: Fastly and Cloudflare populate it from their trusted runtime APIs, Spin and Axum report NotExposed, and no adapter derives JA4 from request headers. Refs #283
7 tasks done
aram356
added a commit
to IABTechLab/trusted-server
that referenced
this pull request
Nov 12, 2026
Per the user, ID-7 relies on a trusted JA4 where the adapter supplies one and otherwise does not block record creation (DEC-18), and JA4 is an EdgeZero abstraction, ctx.ja4(), filled per adapter: Fastly from runtime TLS, Cloudflare from Bot Management, Axum from a trusted proxy header such as CloudFront's, Spin never. Trusted Server reads JA4 only through it, so T12 deletes the direct Fastly read. IABTechLab/edgezero#469's draft leaves Axum NotExposed and defers the trusted proxy header to its section 13.1; the plan asks for that section in R2.
This was referenced Nov 13, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Ja4(String), and apps can't tell "this platform never supplies JA4" from "this request has none".ctx.ja4() -> Option<&CapturedJa4>, backed by the adapter-ownedRequestIngressmetadata from Add pre-dispatch hooks and explicit request ingress fidelity #403. That metadata is inserted after the app's raw-request hook values, so app hooks can't overwrite it, and it is never derived from request headers.get_tls_ja4()) and Cloudflare (Bot Managementja4) populate it. Spin and Axum reportNotExposedbecause they never see the TLS handshake. The spec also records the FoxIO research: only JA4 (BSD-3-Clause) is in scope; the other JA4+ methods are under the FoxIO License 1.1.Spec only; no code changes. Implementation follows in a separate PR once the design is approved.
Changes
docs/superpowers/specs/2026-11-12-ja4-request-interface-design.mdedgezero_core::ja4API and validation grammar, adapter insertion points, capability matrix, trust model, test matrix, docs plan, follow-ups (Axum/Spin via trusted proxy, EdgeZero-computed JA4), risks and decision log.Closes
Refs #283. This PR intentionally does not close the issue; the implementation PR will.
Test plan
cargo test --workspace --all-targets(1550 passed)cargo clippy --workspace --all-targets --all-features -- -D warnings(on the pinned Rust 1.98.1)cargo fmt --all -- --checkcargo check --workspace --all-targets --features "fastly cloudflare spin"wasm32-wasip1(Fastly) /wasm32-wasip2(Spin) /wasm32-unknown-unknown(Cloudflare)examples/app-demoworkspace:cd examples/app-demo && cargo test --workspace --all-targetscd docs && npm run lint && npm run format && npm run buildedgezero serve --adapter axumorigin/mainand the pinnedfastly0.13.1 /worker0.8.5 /spin-sdk7.0.0 sourcesChecklist
{id}syntax (not:id)edgezero_core(nothttpcrate)KvRegistry/ConfigRegistry/SecretRegistry(not the legacy single-handle setters) — see spec §6.6