Skip to content

Add spec for hashed-email intake - #1445

Draft
dhruv8sh wants to merge 1 commit into
spec/1246-server-side-identity-providersfrom
spec/1245-hashed-email-intake
Draft

dhruv8sh wants to merge 1 commit into
spec/1246-server-side-identity-providersfrom
spec/1245-hashed-email-intake

Conversation

@dhruv8sh

Copy link
Copy Markdown
Collaborator

Summary

Changes

File Change
docs/superpowers/specs/2026-10-23-hashed-email-intake-design.md New spec. It reconciles #630, compares options A to D, specifies option A, sketches an optional phone and custom-ID extension, lists the proposed framework changes F1 to F10, and ends with vendor facts, open questions, rollout gates, a test plan and decisions.

Closes

Part of #1245

Spec

Spec: docs/superpowers/specs/2026-10-23-hashed-email-intake-design.md (this PR)

The spec is based on framework revision 12, which is committed locally but not yet pushed to #1428. It does not edit the framework spec. The framework changes it needs are listed in its section 6 so they can be folded into revision 13.

Vendor facts marked "assumed"

  • LiveRamp iv hex case: the Step 4 example is upper case and the docs state no case rule. The spec assumes either case is accepted.
  • LiveRamp rate limits: Step 4 states none. The spec assumes no documented limit, to be confirmed with LiveRamp.

Every other vendor fact cites LiveRamp Step 3 or Step 4, the UID2 normalization page, UID2 POST /token/generate, or a pinned Prebid 10.26.0 module (spec section 7).

Decisions to confirm

ID Decision Proposed choice
D1 #630 reconciliation The maintainer who closed #630 confirms the closure does not rule out this design
D2 Intake option A, a private origin response header
D3 Header names Fixed: x-ts-hem, x-ts-hem-reset
D4 Format SHA-256 hex, two normalization profiles (basic, plus-stripped), whole-header rejection on any error
D5 Retention Request-scoped. No stored hash or digest of one. Account change relies on the publisher's reset
D6 Hash gate strict() with no vendor, on top of the EC and EID-persistence gates. Provider relaxations never relax it
D7 Caching Requests carrying a session cookie bypass the platform and template caches. A hash on a shareable response is rejected
D8 Phone and custom IDs Not in v1
D9 Rollout Strips with framework step 0, then shadow mode, then on per provider after live acceptance

Test plan

  • Docs format: prettier --check on the new spec
  • Other: every file:line reference was checked against c84a73da7

Checklist

  • Feature PRs: spec linked above, ending in a review log of two or more agent review rounds (no review rounds yet)
  • Changes follow AGENTS.md conventions
  • No secrets or credentials committed

Specify how a publisher origin gives Trusted Server a visitor's hashed email through a private response header, for the server-side identity providers that need one. Reconcile the closure of #630, compare intake options A to D, and list the additive framework changes the LiveRamp ATS and UID2 specs depend on.

Part of #1245.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>
@dhruv8sh dhruv8sh self-assigned this Oct 23, 2026

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.

1 participant