Skip to content

Include PR 1498 relay support on the compatible baseline - #1545

Closed
ChristianPavilonis wants to merge 1 commit into
baseline/aws-examples-20261110from
baseline/prebid-relay-20261110
Closed

ChristianPavilonis wants to merge 1 commit into
baseline/aws-examples-20261110from
baseline/prebid-relay-20261110

Conversation

@ChristianPavilonis

Copy link
Copy Markdown
Collaborator

Summary

  • Include the feature changes from #1498 on the compatible native baseline without merging its newer-main ancestry.
  • Keep the relay soft vendor exception default-off and testing-only. Omitted/false settings leave publisher consent rules unchanged.
  • Preserve automatic CMP ownership during internal relay rule updates using the existing guarded-setter correction and executed denial regressions.

Exact source and review base

Source PR1498: f22a83fceac98767979ac0dd406701e4a000c1db, branch codex/1497-prebid-gdpr-relay, base main. That PR's head/base/readiness are not rewritten by this port.

This baseline port: c7f8ca7e1ad09bdbae8de40ceaa50d658ef5b7dc, tree b3cb8e8dd02390d9822880bee38196cd538520dc.
Base: baseline/aws-examples-20261110, existing top unit #1540 at ee7f68fcf25cc2954ffc0204301c0c264f1ce558.

This is the eleventh baseline review unit for draft integration #1541. The preceding ten heads/bases stay unchanged. EdgeZero remains the historical public83d/draft431 pairing; no current-main forwarding integration or refreshed462 claim.

Changes

Files Change
Core integrations/prebid.rs Default-false typed flag, legacy/default behavior and actual head injection for plan enabled/disabled cases
JS prebid/index.ts, relay_consent.ts Explicit-true relay guard, existing Purpose2/GVL/publisher rules, private setter under the existing automatic CMP owner
relay_consent.test.ts, prebid-artifact-integration.test.mjs Guard cases and actual production-artifact omitted/false/true, Purpose2 denial, mapped-vendor denial and unrelated-bidder controls
prebid-consent-enforcement.test.mjs Retained automatic listener, public takeover, deferred first CMP response and throwing-subscriber denial regressions, with testing opt-in explicitly enabled
Prebid guide and trusted-server.example.toml Testing-only default-off contract; internal rule updates do not take publisher ownership

No dependency versions, EdgeZero pin, toolchain, transport, timeout policy, grants, runtime wrapper or Terraform changes.

Why the port includes the existing ownership correction

The replayed current1498 feature fails the built-artifact privacy regressions when explicitly enabled: after a legitimate public static denial, stale CMP grant callbacks cause a stubbed identity request and idl_env write. The original red receipt is retained; this is not inferred from a source scan.

Existing correction d827b6c73938308fc68b54b1100cedcde6d92acf applies to the baseline without source conflicts. Internal updates use the same existing automatic owner's guarded callback registration and captured publisher setter; public configuration still retires that owner, and finally restores the API. No new consent owner, epoch/ledger, public bypass, retry or timer. Normal/deferred/error regressions now observe zero stubbed vendor requests and no identity cookie after denial.

The source PR's newer-main54KB shim limit is not copied. The actual baseline shim plus relay/ownership correction measures41,948 characters; its narrow42,500 budget retains the Prebid-free assertions and comparison against the separate200KB+ Prebid artifact. Both the original41KB failure and the measured correction remain in the receipts.

Closes

Refs #1498, #1497 and #1530. This port does not close the source PR or the overall baseline tracker.

Spec

Not a new design. This ports the existing1498 behavior and reuses the existing automatic-ownership correctness fix with executed regression coverage. Historical design/review records remain tied to their original inputs, not backdated approval of this combined baseline source.

Test plan

  • [x]180 focused Rust Prebid tests; strict Core native all-feature Clippy.
  • [x]34 guard/ownership tests,11 actual artifact cases, no type errors; normal/deferred/throwing-subscriber regression red-to-green.
  • JS ESLint/format and Rust formatting/diff checks.
  • All31 frozen broader gate receipts exit0 at exactc7f8ca7e1: all adapter/CLI/codegen strict lint lanes, Fastly/default/reuse/native/Cloudflare/Spin tests,17 parity cases, host CLI suites, JS build/1272 cases/lint/format, docs lint/format/site build, Markdown, digest, clock, proposal and changed-line domain checks. Existing ignores remain ignores.
  • Fresh exact-port image 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. No image push.
  • Required current-head hosted checks before review-ready state.

Limits

Testing opt-in remains false by default; do not treat this as production privacy approval, live browser/CMP acceptance, downstream vendor acceptance or cloud qualification. No real vendor requests are sent by these JSDOM fixtures. Actual caller signals and downstream consent responsibilities remain unchanged; broader relay data-policy work is not silently included.

Original checkouts, current-main PRs, source1498 and the preceding ten baseline units remain preserved. No deployment, live input switch, main merge, old-RC closure, new worker or excluded1499 implementation.

Port only the feature delta from f22a83f, without its newer-main ancestry. Retain default-off configuration and Purpose 2/vendor enforcement. Reuse the existing guarded CMP setter correction from d827b6c73938308fc68b54b1100cedcde6d92acf after reproducing the opt-in ownership regression. Preserve publisher-denial controls and use the measured baseline shim budget.

@prk-Jr prk-Jr left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving. I found no blocking issues in the relay consent change.

What I verified at c7f8ca7e1:

  • Default off. With the flag omitted or false, the publisher's consent configuration is left unchanged (production-artifact test). With it on, Purpose 2 is still enforced, a publisher gvlMapping.trustedServer restores the vendor check, and unrelated bidders stay blocked.
  • Storage rule. When the publisher sets no rules, the shim writes a rule list containing only basicAds. Prebid 10.26 tcfControl falls back to its default for any purpose missing from the list, so the Purpose 1 storage rule still applies.
  • Re-applying consentManagement. Reconfiguring starts a fresh CMP lookup but does not clear existing consent data, so there is no window where consent is empty. The update only happens once, because later calls find the relay already exempt.
  • Ownership protection. As a negative control, I routed relay updates straight to setConfig, skipping the automatic owner's guard. Both deferred-CMP publisher-takeover tests then fail, so the regression tests catch the stale-grant leak.
  • Template cache. The cache fingerprint hashes the full serialized settings, so the new field is covered.

Local runs:

  • 45 tests across the relay, artifact and consent-enforcement suites pass.
  • ESLint is clean on the changed files.
  • 226 core Prebid Rust tests pass.
  • cargo clippy -p trusted-server-core --all-targets --all-features -D warnings is clean.

CI note: the browser integration tests job failed on runner infrastructure. DNS resolution of the Ubuntu package mirror failed during the Playwright install, so Chromium never installed and every spec failed in 0–2 ms. Those specs never ran against this change, so please re-run the job before merging.

Non-blocking: docs/guide/configuration.md has a Prebid field table (around line 1729) that doesn't list relay_soft_vendor_exception. Only the integration guide and trusted-server.example.toml mention it. Worth adding a row there so the configuration reference is complete.

expect(consentManagement.gdpr).toEqual(publisherConsentManagement.gdpr);
});

it('keeps automatic CMP ownership while preparing a nonempty relay auction', async () => {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Non-blocking (test strength): this test still passes when relay rule updates bypass the automatic owner's guard. I checked by replacing applyRelayConsentConfig with a direct originalSetConfig(value) call. Only the deferred-response takeover cases below fail under that change, so this test doesn't detect the regression it's named for.

Two options:

  • Assert something that changes when the guard is skipped, for example that the relay-created CMP subscription is registered through the guarded API, or that a stale callback is dropped after a later publisher takeover.
  • Fold this case into the takeover it.each below.

@ChristianPavilonis

Copy link
Copy Markdown
Collaborator Author

not sure why codex made this pr

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