You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Blocked on:#4173 (merging the managerdomain fallback in AdAgentsManager) Refs:#4175 (RFC)
Context
PR #4173 adds an ads.txt managerdomain one-hop fallback to AdAgentsManager.validateDomain(). Functionally the AAO crawler picks up delegated publishers transparently — validation.raw_data is the manager's manifest, agents and properties get recorded under each publisher. So the bootstrap-6K-publishers value is captured.
But the fallback discards provenance at the seam between the validator and everything downstream. That creates concrete operational problems.
Problem
No reverse index from manager → delegating publishers. When manager.example updates their adagents.json, we have no way to know which publishers delegated to them. Today the crawler is per-publisher; without a reverse index, change-propagation is "wait for the next full sweep" — which negates a chunk of the bootstrap value at scale.
cacheAdagentsManifest(publisherDomain, raw_data) stores the manager's manifest under the publisher's row with no marker that it was discovered via managerdomain. We can't display "via Raptive" in admin/member surfaces, and we can't audit how authorization was discovered after the fact.
Events (publisher.adagents_discovered, publisher.adagents_changed) don't carry discovery method or manager domain — downstream consumers (analytics, member dashboards, audit) can't distinguish direct from delegated.
API surface (/api/adagents/validate, publisher resolution endpoint, the property source enum that's currently adagents_json | agent_claim) — external consumers will reasonably want to know when authorization is one-hop-via-manager. Same discovery_method ask raised on the upstream PR thread.
Persist discovery_method + manager_domain columns on the publisher / adagents cache table.
Reverse index: when discovery_method = 'ads_txt_managerdomain', persist a manager_domain → publisher_domain mapping. Use it to fan out re-validation when the manager's adagents.json changes.
Surface discovery_method in the /api/adagents/validate response and in publisher / property resolution responses. Consider extending the property source enum or adding a sub-discriminator.
Include discovery_method and manager_domain in publisher.adagents_discovered and publisher.adagents_changed events.
Optional: /api/registry/managers/:domain/recrawl endpoint that invalidates and re-validates all delegating publishers in one shot (rate-limited; mirrors the existing per-publisher recrawl).
Why this matters now
Without (2), the operational story for "Raptive rotates an agent" is "wait for the next full crawl of every delegated publisher." Without (3) and (4), buyers and members can't distinguish direct attestation from one-hop delegation, which is exactly the trust-tier distinction the upstream RFC depends on.
Blocked on: #4173 (merging the managerdomain fallback in
AdAgentsManager)Refs: #4175 (RFC)
Context
PR #4173 adds an ads.txt
managerdomainone-hop fallback toAdAgentsManager.validateDomain(). Functionally the AAO crawler picks up delegated publishers transparently —validation.raw_datais the manager's manifest, agents and properties get recorded under each publisher. So the bootstrap-6K-publishers value is captured.But the fallback discards provenance at the seam between the validator and everything downstream. That creates concrete operational problems.
Problem
No reverse index from manager → delegating publishers. When
manager.exampleupdates theiradagents.json, we have no way to know which publishers delegated to them. Today the crawler is per-publisher; without a reverse index, change-propagation is "wait for the next full sweep" — which negates a chunk of the bootstrap value at scale.cacheAdagentsManifest(publisherDomain, raw_data)stores the manager's manifest under the publisher's row with no marker that it was discovered viamanagerdomain. We can't display "via Raptive" in admin/member surfaces, and we can't audit how authorization was discovered after the fact.Events (
publisher.adagents_discovered,publisher.adagents_changed) don't carry discovery method or manager domain — downstream consumers (analytics, member dashboards, audit) can't distinguish direct from delegated.API surface (
/api/adagents/validate, publisher resolution endpoint, the propertysourceenum that's currentlyadagents_json | agent_claim) — external consumers will reasonably want to know when authorization is one-hop-via-manager. Samediscovery_methodask raised on the upstream PR thread.Proposed scope
discovery_methodfield lands onAdAgentsValidationResult(pushed for in RFC 4175: Add ads.txt managerdomain fallback for adagents lookup #4173):discovery_method+manager_domaincolumns on the publisher / adagents cache table.discovery_method = 'ads_txt_managerdomain', persist amanager_domain → publisher_domainmapping. Use it to fan out re-validation when the manager'sadagents.jsonchanges.discovery_methodin the/api/adagents/validateresponse and in publisher / property resolution responses. Consider extending the propertysourceenum or adding a sub-discriminator.discovery_methodandmanager_domaininpublisher.adagents_discoveredandpublisher.adagents_changedevents./api/registry/managers/:domain/recrawlendpoint that invalidates and re-validates all delegating publishers in one shot (rate-limited; mirrors the existing per-publisher recrawl).Why this matters now
Without (2), the operational story for "Raptive rotates an agent" is "wait for the next full crawl of every delegated publisher." Without (3) and (4), buyers and members can't distinguish direct attestation from one-hop delegation, which is exactly the trust-tier distinction the upstream RFC depends on.
Triage should pick this up when #4173 merges.