Click context: ctx_token issuance, carriage, discovery and resolution - #38
Conversation
|
|
||
| #### 7.4.4 Resolution response - the click context | ||
|
|
||
| A telemetry consumer that supports resolution exposes, for a presented token, the **click context**: |
There was a problem hiding this comment.
This new section §7.4.4 isn't compatible with attribution.
The previous click manifest returned (consent-gated) content_grounded / content_cited / content_presented for the session — the sources that informed the response that produced the click. That is what let a destination or network credit publishers, not only the clicked URL.
This PR replaces that with lineage selected by content identity of the clicked reference. That works when the user clicks the publisher’s own article. It fails the common commerce case:
- User reads
publishera.com(grounded / cited / presented) - User clicks through to
advertiser.com content_engaged.content_urlis the advertiser
Resolve then returns only events whose content_url / content_id match advertiser.com. Publisher A’s events are excluded because they are a different content identity.
For an affiliate network (or any party holding the ctx_token on the advertiser hop), that is the join we need: this click on advertiser.com was contributed by publishera.com. Without it, resolve can corroborate the destination click but cannot support multi-citation attribution.
We understand the privacy goal — a token must not dump other owners’ events indiscriminately, and we are not asking to return the whole session. We are asking that resolve still expose the consent-gated contributing sources for this click, not only the clicked content’s own lineage. Could v1 keep a gated contributing-source set on the click context (closer to the old manifest role), alongside engagement + lineage of the clicked content? This is very important for attribution.
Thank you
There was a problem hiding this comment.
Accepted — you are right, and the fix is in 50cf32a. Lineage by content identity alone cannot support the case you describe: the click on advertiser.com resolves nothing about publishera.com, which is precisely the join an affiliate network needs.
The distinction I want to hold is not events-versus-counts, it is gated-versus-indiscriminate. The objection to a timestamp cut was that any token holder could stream other owners' activity without those owners' say. The v0.1 click manifest never actually had that problem — it was gated by per-owner opt-in, and the v1 narrowing dropped the component instead of keeping the gate. That was the wrong cut.
§7.4.4 now defines the click context as four components: the engagement, the clicked content's lineage by identity, the contributing sources — grounded events in scope for the engaged presentation's turn plus that turn's citation and presentation events, for content other than the clicked content, each owner's events included only under that owner's recorded contributing-source opt-in with the resolving consumer — and the count-based summary. Owners without an opt-in stay counts-only. Since a contributing publisher's interest is to be credited, the opt-in aligns with the incentive; the gate is what keeps an owner's activity from being disclosed against its will. §12.1 now reads as a scoping (whole session → the click's turn) with the same gate, rather than a removal.
Scope is the click's turn, not turns 1..M at click timestamp — the earlier-turns concern from the issue thread is largely covered by session-scoped groundings remaining in scope for the turn, and anything beyond that is session reporting under §7.3, where your second comment now does the heavy lifting (see below).
|
Thanks for preparing the PR. We wanted to come back to one point from #28 that was never answered in the issue discussion and is not addressed in this PR. It remains very important to us for v1. Our proposal is that the agent-authored click This is essential for the following reasons:
This is not the same as distributing the click token to every content owner (the privacy concern recorded in §7.4.5). It is the same isolation as today: only the owner of the clicked (I will be on vacation until August 24, starting today) |
…livery (#28, PR #38 review) Two changes from Pedro Santos's review of #38, both from #28. Contributing sources (7.4.4). Lineage by content identity alone cannot support the commerce case: a click through to a destination contributed by another owner's content resolves nothing about the contributor. The click context regains the v0.1 click manifest's role as a consent-gated contributing-source set, narrowed to the engaged presentation's turn and gated per contributing owner's recorded opt-in. Owners without an opt-in remain visible only as counts. The migration note in 12.1 now records a scoping plus the retained gate, not a removal. Owner-scoped delivery (new 7.4.5). The agent-authored click content_engaged is delivered to the engaged content's owner through 7.3 filtered views on the same terms as grounding and citation events, session_id included. The 7.4.4 session_id prohibition binds token resolution (possession of a URL-carried value), not 7.3 delivery to a verified domain owner. This survives token loss in redirect chains, removes the resolver dependency for the destination's own join, and lets a party holding both a contributor's and a destination's owner-scoped streams match on session_id for attribution. Not token distribution: only the clicked content's owner receives the event. Recorded limit renumbered to 7.4.6. Conformance suite 74/74, worked examples 9/9. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Replying to the owner-delivery point — this should have been answered in the #28 disposition, apologies for the gap. Accepted for v1, in 50cf32a. New §7.4.5 (the recorded limit moves to §7.4.6): the agent-authored click That covers all four of your reasons: the destination is notified even when Together with the gated contributing-source component (thread above), the two paths compose: owner-scoped streams for parties with verified domain standing, gated resolution for parties that only hold the click chain. This lands before the 21 August freeze; happy to revisit wording when you are back on the 24th. Enjoy the break. |
… resolution (#23, #28, #30) New section 7.4 replaces the v0.1 click manifest with the click context: - Token pattern ct_[A-Za-z0-9_-]{8,240}, opaque, bound to exactly one presentation at mint time; per-click minting for routed surfaces. - Reserved query parameters ctx_token and ctx_iss with SHOULD-level redirect propagation mirroring section 7.2. - Resolver discovery through the issuer manifest: telemetry.ctx_resolution. - Resolution returns the engagement, the clicked content's lineage cut by content identity across turns, and an optional count-based session summary; never the raw session_id, never other owners' events. - presentation_id becomes conditional: required for agent-reported engagements, restored from issuer state for destination reports that carry ctx_token; the URL-carried presentation UUID is withdrawn. - Consumer-custody trade-off recorded (#29). Schemas, six new/updated fixtures, migration note. 74/74 conformance checks, 9/9 worked examples. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…livery (#28, PR #38 review) Two changes from Pedro Santos's review of #38, both from #28. Contributing sources (7.4.4). Lineage by content identity alone cannot support the commerce case: a click through to a destination contributed by another owner's content resolves nothing about the contributor. The click context regains the v0.1 click manifest's role as a consent-gated contributing-source set, narrowed to the engaged presentation's turn and gated per contributing owner's recorded opt-in. Owners without an opt-in remain visible only as counts. The migration note in 12.1 now records a scoping plus the retained gate, not a removal. Owner-scoped delivery (new 7.4.5). The agent-authored click content_engaged is delivered to the engaged content's owner through 7.3 filtered views on the same terms as grounding and citation events, session_id included. The 7.4.4 session_id prohibition binds token resolution (possession of a URL-carried value), not 7.3 delivery to a verified domain owner. This survives token loss in redirect chains, removes the resolver dependency for the destination's own join, and lets a party holding both a contributor's and a destination's owner-scoped streams match on session_id for attribution. Not token distribution: only the clicked content's owner receives the event. Recorded limit renumbered to 7.4.6. Conformance suite 74/74, worked examples 9/9. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
50cf32a to
af939c9
Compare
|
Merged into |
…s branch The rebase onto v1-draft brought in fixtures and an inline example added by PRs #38, #41 and #45, none of which were swept by the v1 identity commit or carry the pinned violation this branch now requires. - CI installed plain `jsonschema`, so the hardened runners' format-checker guard aborted the job. The workflow now matches tests/README.md and installs `jsonschema[format-nongpl]`. - 17 fixtures and the §5.1.3 access_context example still declared schema_version 0.1. Bumped to 1.0; invalid-schema-version.json keeps its deliberately wrong value. - 8 invalid fixtures had no `_expected_error`. Each now pins its own violation, including the two application-layer provenance rules and the ctx_token pattern. Suite: 107/107 fixtures, 13/13 examples, 5/5 mutations caught. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The single click-context change dispositioned in #23, #28 and #30, replacing the v0.1 click manifest with the click context (new §7.4).
Token and binding (#28).
ctx_tokengains the value pattern^ct_[A-Za-z0-9_-]{8,240}$and MUST bind to exactly one presentation at mint time — the same URL presented twice gets two tokens. Surfaces that route outbound navigation mint per click. The token→presentation binding is issuer state: destinations no longer receivepresentation_id, and the consumer restores the binding at resolution.presentation_idis now conditional — required on agent-reported engagements, not on envelopes carryingctx_token.Carriage (#23). Reserved query parameters
ctx_tokenandctx_iss; SHOULD-level redirect-chain propagation mirroring §7.2.Discovery (#30).
ctx_issis an issuer manifest locator resolving through §8.1 well-known discovery to the newtelemetry.ctx_resolutionendpoint. Token stays opaque; no central registry.Resolution (#28, amended in review). The response is the engagement, the clicked content's lineage selected by content identity across all turns (not a turn or timestamp cut), a contributing-source set gated per contributing owner's recorded opt-in and scoped to the engaged presentation's turn (restoring the v0.1 click manifest's consent-gated role — review follow-up, 50cf32a), and an optional count-based session summary. Never the raw
session_id; never events for owners without a recorded opt-in. Migration note covers the rescoping from the v0.1 click manifest.Owner-scoped engagement delivery (#28, added in review). New §7.4.5: the agent-authored click
content_engagedMUST appear in the engaged content owner's §7.3 filtered view on the same terms as grounding and citation events,session_idincluded — the §7.4.4 prohibition binds token resolution, not owner-scoped reporting. Recorded limit renumbered to §7.4.6.Recorded limit (#29). §7.4.5 documents the consumer-custody dependency and the profile route for decentralised settlement.
Fixtures: repeated-link engagement, earlier-turn click, redirect destination report, agent manifest with
ctx_resolution, bad-pattern token, and agent-reported engagement missing bothpresentation_idand token. Conformance suite 74/74, worked examples 9/9.Design note: settled per the dispositions posted 12 August on #23/#28/#30.
🤖 Generated with Claude Code