producers contribute outcomes (consent-gated) → hosted aggregator gates + k-anonymises → public roll-up and org-scoped view read back. Loop closed; admins govern participation.
Loop closed (both breaks fixed)
Producer → prod. Publishing now ingests when benchmarkContribute() is on: the interactive path uses hostedIngestEndpoint(); bulk contribute refreshes producer + ingredients-only usage. Opt-in, anonymous attestations.
Consumer → read.BenchmarkProxyController serves an anonymous server-side GET → hosted; the desktop tab reads via the proxy (client-mode, no local PGlite).
Org-scoped view
Admin-only /api/orgs/:scope/benchmark — a Benchmark tab on the marketplace org hub, beside Team Pulse.
Org-filtered aggregates: producer's bound account_login ∈ the App-synced org_members roster, no k-floor (de-anonymised within the org).
Non-App orgs (membership via account_scopes only) show empty — deferred.
Governance (admin)
Two org_settings flags: contribute_allowed (server-enforced forbid) + benchmark_view_enabled.
Forbid is enforced at ingest via producerForbidden (most-restrictive-org-wins) and is forward-only — it stops new contributions, it does not delete data already sent (purge = Spec B).
The settings write is App-gated (via === "app", else 409) so the write surface equals the enforcement surface.