{"id":"ops/activity-adoption-proof","relativePath":"ops/activity-adoption-proof.md","title":"Activity Feed Adoption Proof Runbook","markdown":"# Activity Feed Adoption Proof Runbook\n\nThis runbook supports the Era C exit-gate target: at least three declared external Linked Art systems consume `/api/activity` within the adoption window.\n\nThe command below records a partner-owned declared consumer ID by sending `x-linked-art-consumer-id` to `/api/activity`, then reads `/api/activity/readiness` to confirm the deployment observed that declared external consumer.\n\n## Command\n\n```bash\nBASE_URL=https://<deploy-host> \\\nMETAMUSEUM_ACTIVITY_CONSUMER_ID=<partner-owned-consumer-id> \\\npnpm activity:adoption:probe\n```\n\nEquivalent explicit form:\n\n```bash\npnpm activity:adoption:probe -- --base-url https://<deploy-host> --consumer-id <partner-owned-consumer-id>\n```\n\nTo prove the full three-consumer checkpoint in one run after all partner IDs are known:\n\n```bash\nBASE_URL=https://<deploy-host> \\\nMETAMUSEUM_ACTIVITY_CONSUMER_IDS=wikibase-cloud-prod,partner-harvest-bot,analytics-reader-prod \\\npnpm activity:adoption:matrix\n```\n\nEquivalent explicit form:\n\n```bash\npnpm activity:adoption:matrix -- \\\n  --base-url https://<deploy-host> \\\n  --consumer-id wikibase-cloud-prod \\\n  --consumer-id partner-harvest-bot \\\n  --consumer-id analytics-reader-prod\n```\n\nArtifacts:\n\n- `artifacts/activity-adoption/activity-adoption-proof-latest.json`\n- `artifacts/activity-adoption/runs/activity-adoption-proof-<timestamp>.json`\n- `artifacts/activity-adoption/activity-adoption-matrix-latest.json`\n- `artifacts/activity-adoption/runs/activity-adoption-matrix-<timestamp>.json`\n\n## Consumer ID Rules\n\n- Use a stable ID owned by the external consumer, for example `wikibase-cloud-prod` or `partner-harvest-bot`.\n- Do not use placeholder IDs such as `test-*`, `demo-*`, `example-*`, `local-*`, or localhost-oriented names for production evidence.\n- The command rejects placeholder/local-looking IDs by default. `--allow-placeholder` exists only for local rehearsals.\n\n## Pass Criteria\n\nThe proof report has `status: \"pass\"` when:\n\n- `/api/activity` returns HTTP 2xx.\n- `/api/activity/readiness` returns HTTP 2xx.\n- Readiness telemetry contains the provided consumer ID as:\n  - `class: \"declared\"`\n  - matching `declaredId`\n  - `isExternal: true`\n  - non-empty `lastSeenAt`\n\nThe overall adoption exit gate still requires three unique declared external consumers within the configured window. A single passing proof only confirms one consumer was observed.\n\nThe matrix report has `status: \"pass\"` only when every requested consumer probes `/api/activity` successfully, every requested consumer appears in readiness as declared/external, and `/api/activity/readiness` reports the `>=3` checkpoint as ready.\n\n## Partner Hand-Off\n\nSend partners this minimum request:\n\n```bash\ncurl -H \"Accept: application/json\" \\\n  -H \"x-linked-art-consumer-id: <partner-owned-consumer-id>\" \\\n  \"https://<deploy-host>/api/activity?limit=1\"\n```\n\nAfter the partner runs it, operators can verify:\n\n```bash\ncurl \"https://<deploy-host>/api/activity/readiness\"\npnpm activity:adoption:matrix -- --base-url https://<deploy-host> --consumer-ids <id-1>,<id-2>,<id-3>\npnpm era-c:exit-gate:evidence\n```\n\n## Evidence Hygiene\n\n- Derived fingerprints are diagnostic only and do not satisfy the gate.\n- Operators must not run production proof with internal placeholder IDs.\n- Keep partner IDs stable across checks so the 30-day activity window reflects real adoption.\n","sections":[{"level":2,"heading":"Command","anchor":"command"},{"level":2,"heading":"Consumer ID Rules","anchor":"consumer-id-rules"},{"level":2,"heading":"Pass Criteria","anchor":"pass-criteria"},{"level":2,"heading":"Partner Hand-Off","anchor":"partner-hand-off"},{"level":2,"heading":"Evidence Hygiene","anchor":"evidence-hygiene"}],"html":"<h1 id=\"activity-feed-adoption-proof-runbook\">Activity Feed Adoption Proof Runbook</h1>\n<p>This runbook supports the Era C exit-gate target: at least three declared external Linked Art systems consume `/api/activity` within the adoption window.</p>\n<p>The command below records a partner-owned declared consumer ID by sending `x-linked-art-consumer-id` to `/api/activity`, then reads `/api/activity/readiness` to confirm the deployment observed that declared external consumer.</p>\n<h2 id=\"command\">Command</h2>\n<pre><code>\nBASE_URL=https://&lt;deploy-host&gt; \\\nMETAMUSEUM_ACTIVITY_CONSUMER_ID=&lt;partner-owned-consumer-id&gt; \\\npnpm activity:adoption:probe\n</code></pre>\n<p>Equivalent explicit form:</p>\n<pre><code>\npnpm activity:adoption:probe -- --base-url https://&lt;deploy-host&gt; --consumer-id &lt;partner-owned-consumer-id&gt;\n</code></pre>\n<p>To prove the full three-consumer checkpoint in one run after all partner IDs are known:</p>\n<pre><code>\nBASE_URL=https://&lt;deploy-host&gt; \\\nMETAMUSEUM_ACTIVITY_CONSUMER_IDS=wikibase-cloud-prod,partner-harvest-bot,analytics-reader-prod \\\npnpm activity:adoption:matrix\n</code></pre>\n<p>Equivalent explicit form:</p>\n<pre><code>\npnpm activity:adoption:matrix -- \\\n  --base-url https://&lt;deploy-host&gt; \\\n  --consumer-id wikibase-cloud-prod \\\n  --consumer-id partner-harvest-bot \\\n  --consumer-id analytics-reader-prod\n</code></pre>\n<p>Artifacts:</p>\n<ul><li>`artifacts/activity-adoption/activity-adoption-proof-latest.json`</li><li>`artifacts/activity-adoption/runs/activity-adoption-proof-&lt;timestamp&gt;.json`</li><li>`artifacts/activity-adoption/activity-adoption-matrix-latest.json`</li><li>`artifacts/activity-adoption/runs/activity-adoption-matrix-&lt;timestamp&gt;.json`</li></ul>\n<h2 id=\"consumer-id-rules\">Consumer ID Rules</h2>\n<ul><li>Use a stable ID owned by the external consumer, for example `wikibase-cloud-prod` or `partner-harvest-bot`.</li><li>Do not use placeholder IDs such as `test-<em>`, `demo-</em>`, `example-<em>`, `local-</em>`, or localhost-oriented names for production evidence.</li><li>The command rejects placeholder/local-looking IDs by default. `--allow-placeholder` exists only for local rehearsals.</li></ul>\n<h2 id=\"pass-criteria\">Pass Criteria</h2>\n<p>The proof report has `status: &quot;pass&quot;` when:</p>\n<ul><li>`/api/activity` returns HTTP 2xx.</li><li>`/api/activity/readiness` returns HTTP 2xx.</li><li>Readiness telemetry contains the provided consumer ID as:</li><li>`class: &quot;declared&quot;`</li><li>matching `declaredId`</li><li>`isExternal: true`</li><li>non-empty `lastSeenAt`</li></ul>\n<p>The overall adoption exit gate still requires three unique declared external consumers within the configured window. A single passing proof only confirms one consumer was observed.</p>\n<p>The matrix report has `status: &quot;pass&quot;` only when every requested consumer probes `/api/activity` successfully, every requested consumer appears in readiness as declared/external, and `/api/activity/readiness` reports the `&gt;=3` checkpoint as ready.</p>\n<h2 id=\"partner-hand-off\">Partner Hand-Off</h2>\n<p>Send partners this minimum request:</p>\n<pre><code>\ncurl -H &quot;Accept: application/json&quot; \\\n  -H &quot;x-linked-art-consumer-id: &lt;partner-owned-consumer-id&gt;&quot; \\\n  &quot;https://&lt;deploy-host&gt;/api/activity?limit=1&quot;\n</code></pre>\n<p>After the partner runs it, operators can verify:</p>\n<pre><code>\ncurl &quot;https://&lt;deploy-host&gt;/api/activity/readiness&quot;\npnpm activity:adoption:matrix -- --base-url https://&lt;deploy-host&gt; --consumer-ids &lt;id-1&gt;,&lt;id-2&gt;,&lt;id-3&gt;\npnpm era-c:exit-gate:evidence\n</code></pre>\n<h2 id=\"evidence-hygiene\">Evidence Hygiene</h2>\n<ul><li>Derived fingerprints are diagnostic only and do not satisfy the gate.</li><li>Operators must not run production proof with internal placeholder IDs.</li><li>Keep partner IDs stable across checks so the 30-day activity window reflects real adoption.</li></ul>","updatedAt":"2018-10-20T01:46:40.000Z","checksum":"68a80b43ae582bc2fe8af85cd8992771b65da97b848cf5c5f1b7036b5e70fe65","checksumPrefix":"68a80b43ae58","anchorCount":5,"lineCount":91,"rawUrl":"/api/docs/content?path=ops%2Factivity-adoption-proof.md","htmlUrl":"/docs?doc=ops%2Factivity-adoption-proof.md","apiUrl":"/api/docs/content?path=ops%2Factivity-adoption-proof.md"}