# Marketplace telemetry contract v1 All shown/opened/installed/dismissed marketplace telemetry uses one envelope: `m2.market.telemetry.v1`. `m2.market.evidence.v1` is reserved for S6 job evidence records only. Do not write install, proposal, Store, Scout, or CLI telemetry with the evidence schema. ## Envelope ```json { "schema_version": "m2.market.telemetry.v1", "event_id": "evt_01j2telemetry", "event_type": "market.install.succeeded", "occurred_at": "2026-07-02T00:00:00Z", "tenant_id": "m2", "operator_id": "op_chris", "agent_id": "chris-m2o", "listing_id": "lst_mm-pdf-report", "solution_id": "sol_mm-pdf-report", "solution_version": "1.0.0", "proposal_id": "prop_01j2abc", "source": "cli", "content_hash": "sha256:0000000000000000000000000000000000000000000000000000000000000000", "payload": {} } ``` Required fields: `schema_version`, `event_id`, `event_type`, `occurred_at`, `tenant_id`, `source`, and at least one of `listing_id`, `solution_id`, or `proposal_id`. Telemetry must contain summaries and IDs only. No raw client data, secrets, transcript bodies, or private job artifacts. ## Event type registry - `market.listing.shown` - `market.listing.opened` - `market.proposal.generated` - `market.proposal.shown` - `market.proposal.opened` - `market.proposal.accepted` - `market.proposal.dismissed` - `market.install.started` - `market.install.succeeded` - `market.install.failed` - `market.install.refunded` - `market.uninstall.succeeded` - `market.upgrade.succeeded` - `market.invoke.succeeded` - `market.invoke.failed` Indexers may fold telemetry into `listing.stats.installs`, `listing.stats.proposals_shown`, and `listing.stats.proposals_accepted`. Self-purchases and self-generated proposal loops are excluded from quality statistics. ## Job evidence reservation `m2.market.evidence.v1` records are S6 job evidence records and carry `evidence_id`, `job_id`, `wanted`, `tools`, `contributors`, `metering`, `resources`, `outcome`, `reusable_verdict`, `scrub_status`, and `content_hash`. They are not a general event envelope.