Repository navigation
Conversation
Map ID5's server-side gs/v2 fetch onto the identity provider trait, with the signature as private state, after-send mode, and the ownership choices against Lockr capture for id5-sync.com. Facts that rest on ID5's login-only documentation are marked assumed and listed as open questions. Proposed additive framework changes F1 to F4 are listed for revision 13. Signed-off-by: dhruv8sh <dhruv8sh@proton.me>
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
gs/v2fetch (the endpoint ID5's Prebid Server module calls) onto the trait:ClientIpandUserAgentneeded, the signature as private state,id5-sync.complus an opt-in EUID source,ext.linkType, a 2-hour refresh hint andalso_invalidate.after_send, sets out the three ownership choices against Lockr capture forid5-sync.comwith migration, and proposes four additive framework changes for revision 13.Changes
docs/superpowers/specs/2026-10-23-id5-provider-design.mdCloses
Part of #353. Related: #90, #1246.
Spec
Spec:
docs/superpowers/specs/2026-10-23-id5-provider-design.md. This PR is the spec. It has had no agent review rounds yet.Assumed vendor facts (section 12 of the spec)
ID5's web server-side fetch page needs a login. Facts verified from the Prebid.js 10.26.0 module, ID5's published Prebid Server module sources (
id5-user-id3.43-rc.1), ID5's public in-app and CTV guides and the IAB GVL are cited. These are assumed:gs/v2for a publisher's Partner Number, and theproviderandoriginvalues to send.gs/v2reads IPv4 asipv4(as the PBS module sends it), notip(as the in-app guide names it).gs/v2takes and returnssignature, its size fits the framework's 1,024-byte state cap, and an older signature is accepted."0"ongs/v2means no consent or an opt-out, never a transient state.gs/v2.pbais, its size, and whether bidders need it.gs/v2requires.Verified: GVL ID 131 (ID5 Technology SAS, GVL version 182; consent Purposes 1, 3, 5, 10; no legitimate-interest purposes).
Decisions to confirm (section 15 of the spec)
gs/v2, pending ID5's approvalafter_send;holdonly once edge p95 is at or below 80 ms for a weekPageUrlnot declared;gs/v2has no page URL fieldid5-sync.comalways; EUID opt-in through config; no TrueLink in v1"0"is a sticky opt-out that keeps the signature (needs F1)strict()plus vendor 131; not Purposes 3 and 5 unless ID5 requires theminserterfrom config; nomatcherormmextto{linkType}ipv4oripv6, as the PBS module doesidentitytakesmodules, a listProposed framework changes (section 11 of the spec)
Resolution::opted_out_keeping_state(): an opt-out that keeps the vendor's state, because ID5 reads its opt-out from the signature.sourcesnarrowing is not served and counts as absent.retired_opt_out_secafter the provider is removed from config.after_send, section 12.4's ID5 sketch, and[ec.identity]under Pluggable, competition-neutral modules with a technical permission model #777's[<type>.<name>]rule.Test plan
cargo test-fastly && cargo test-axumcargo clippy-fastly && cargo clippy-axumcargo fmt --all -- --checkcd crates/trusted-server-js/lib && npx vitest runcd crates/trusted-server-js/lib && npm run formatcd docs && npm run format(prettier--checkpasses on the new file)cargo build --package trusted-server-adapter-fastly --release --target wasm32-wasip1fastly compute servefile:linereference checked againstc84a73da7, the pinned Prebid.js module, or the published PBS module sourcesChecklist
unwrap()in production code — useexpect("should ...")tracingmacros (notprintln!)