{"id":"wikibase-cloud-migration-checklist","relativePath":"wikibase-cloud-migration-checklist.md","title":"Wikibase Cloud -> Self-Host Migration Checklist","markdown":"# Wikibase Cloud -> Self-Host Migration Checklist\n\nStatus: Active operational playbook (Cloud now, self-host later).\n\nPurpose: keep hosting costs low now with Wikibase Cloud while preserving a clean migration path to Docker/custom Wikibase when scale, control, or compliance needs increase.\n\n## Current state (pre-filled, non-secret)\n\n- Deployment mode: Wikibase Cloud (cost-first starter mode)\n- Cloud owner username: `Sundog358`\n- Primary project owner: `@rsung`\n- Canonical internal IDs: `https://lod.metamuseum.org/{type}/{ulid}`\n- Service account for automation: _pending setup_\n- MFA status on owner account: _verify and record_\n- Last credential rotation date: _record in runbook/release notes_\n- Self-host target mode (future): _TBD_ (`Docker Compose` or `Kubernetes`)\n\n## 1) Cloud-first baseline (do now)\n\n- [ ] Confirm owner account has MFA enabled.\n- [ ] Rotate temporary bootstrap password after first login.\n- [ ] Create a dedicated service/bot account for automation; do not automate with personal account credentials.\n- [ ] Store secrets only in environment variables/secret manager; never in committed files.\n- [ ] Record current Wikibase Cloud tenant URL, org owner, and backup owner in runbook.\n\n## 2) Portability guardrails (must stay true at all times)\n\n- [ ] Keep Meta Museum canonical IDs stable: `https://lod.metamuseum.org/{type}/{ulid}`.\n- [ ] Treat Wikibase Q/P identifiers as mapped externals, not canonical internal IDs.\n- [ ] Preserve bidirectional mapping table: internal ID <-> Wikibase entity ID.\n- [ ] Require source citation + rights metadata on publishable claims.\n- [ ] Keep write operations audit-logged (who, what, when, before/after references).\n\n## 3) Data model and schema discipline\n\n- [ ] Freeze a documented minimum property set for first publishing scope (object/work/agent/place/set + rights + citations).\n- [ ] Track schema changes with migration notes (new property, deprecation, mapping updates).\n- [ ] Define statement-reference requirements for publishable facts.\n- [ ] Maintain round/fixture-linked tests for publish payload shape and reference completeness.\n\n## 4) Backup and export routine (Cloud phase)\n\n- [ ] Schedule recurring full exports (items/properties/statements/references).\n- [ ] Keep at least two independent backup locations (primary + secondary).\n- [ ] Record restore drill owner and cadence (for example, monthly).\n- [ ] Run a restore drill at least once before any self-host cutover decision.\n\n## 5) Trigger criteria for self-host activation\n\nMove from Cloud to self-host when one or more are true:\n\n- [ ] Cost threshold exceeded for 2 consecutive cycles.\n- [ ] Required extension/feature unavailable in Cloud.\n- [ ] Compliance, data residency, or network control requirement cannot be satisfied in Cloud.\n- [ ] Performance/SLO needs require infra-level tuning not available in Cloud.\n\n## 6) Target self-host design decision\n\n- [ ] Choose platform: Docker Compose (starter) or Kubernetes (production scale).\n- [ ] Pick database and storage sizing profile with 12-month growth buffer.\n- [ ] Define auth/SSO strategy and service-account policy.\n- [ ] Define observability baseline (metrics, logs, alerts, backup-monitoring).\n- [ ] Define DR objectives (RPO/RTO) and test schedule.\n\n## 7) Dry-run migration (no public cutover yet)\n\n- [ ] Export from Wikibase Cloud snapshot N.\n- [ ] Import into self-host staging.\n- [ ] Run parity checks:\n  - [ ] entity counts (items/properties/statements/references)\n  - [ ] random sample semantic equivalence checks\n  - [ ] external-ID mapping integrity\n  - [ ] citation/reference completeness\n- [ ] Run application integration tests against staging endpoint.\n- [ ] Fix mapping or schema drift before production cutover planning.\n\n## 8) Production cutover checklist\n\n- [ ] Announce maintenance window and rollback window.\n- [ ] Freeze writes on Cloud publication path.\n- [ ] Take final export snapshot N+1 and checksum it.\n- [ ] Import N+1 into self-host production.\n- [ ] Reconcile counts and integrity checks.\n- [ ] Switch application publish target via configuration flag.\n- [ ] Run post-cutover smoke tests (read, write, references, rights, citation surfaces).\n- [ ] Unfreeze writes after verification sign-off.\n\n## 9) Rollback plan (must be prepared before cutover)\n\n- [ ] Keep Cloud environment available during rollback window.\n- [ ] Keep publish-target toggle reversible without code changes.\n- [ ] Document exact rollback operator and decision authority.\n- [ ] Rehearse rollback once in staging.\n\n## 10) Post-cutover stabilization\n\n- [ ] Monitor error rates, latency, and queue backlog for 7-14 days.\n- [ ] Re-run parity audit after first full sync cycle.\n- [ ] Capture lessons learned and update this checklist.\n- [ ] Decide Cloud decommission timeline only after stabilization is complete.\n\n## Ownership and review cadence\n\n- Owner: `@rsung` (or assigned platform owner)\n- Review cadence: monthly during Cloud phase; weekly during migration window\n- Last review date: _fill when first adopted_\n","sections":[{"level":2,"heading":"Current state (pre-filled, non-secret)","anchor":"current-state-pre-filled-non-secret"},{"level":2,"heading":"1) Cloud-first baseline (do now)","anchor":"1-cloud-first-baseline-do-now"},{"level":2,"heading":"2) Portability guardrails (must stay true at all times)","anchor":"2-portability-guardrails-must-stay-true-at-all-times"},{"level":2,"heading":"3) Data model and schema discipline","anchor":"3-data-model-and-schema-discipline"},{"level":2,"heading":"4) Backup and export routine (Cloud phase)","anchor":"4-backup-and-export-routine-cloud-phase"},{"level":2,"heading":"5) Trigger criteria for self-host activation","anchor":"5-trigger-criteria-for-self-host-activation"},{"level":2,"heading":"6) Target self-host design decision","anchor":"6-target-self-host-design-decision"},{"level":2,"heading":"7) Dry-run migration (no public cutover yet)","anchor":"7-dry-run-migration-no-public-cutover-yet"},{"level":2,"heading":"8) Production cutover checklist","anchor":"8-production-cutover-checklist"},{"level":2,"heading":"9) Rollback plan (must be prepared before cutover)","anchor":"9-rollback-plan-must-be-prepared-before-cutover"},{"level":2,"heading":"10) Post-cutover stabilization","anchor":"10-post-cutover-stabilization"},{"level":2,"heading":"Ownership and review cadence","anchor":"ownership-and-review-cadence"}],"html":"<h1 id=\"wikibase-cloud-self-host-migration-checklist\">Wikibase Cloud -&gt; Self-Host Migration Checklist</h1>\n<p>Status: Active operational playbook (Cloud now, self-host later).</p>\n<p>Purpose: keep hosting costs low now with Wikibase Cloud while preserving a clean migration path to Docker/custom Wikibase when scale, control, or compliance needs increase.</p>\n<h2 id=\"current-state-pre-filled-non-secret\">Current state (pre-filled, non-secret)</h2>\n<ul><li>Deployment mode: Wikibase Cloud (cost-first starter mode)</li><li>Cloud owner username: `Sundog358`</li><li>Primary project owner: `@rsung`</li><li>Canonical internal IDs: `https://lod.metamuseum.org/{type}/{ulid}`</li><li>Service account for automation: _pending setup_</li><li>MFA status on owner account: _verify and record_</li><li>Last credential rotation date: _record in runbook/release notes_</li><li>Self-host target mode (future): _TBD_ (`Docker Compose` or `Kubernetes`)</li></ul>\n<h2 id=\"1-cloud-first-baseline-do-now\">1) Cloud-first baseline (do now)</h2>\n<ul><li>[ ] Confirm owner account has MFA enabled.</li><li>[ ] Rotate temporary bootstrap password after first login.</li><li>[ ] Create a dedicated service/bot account for automation; do not automate with personal account credentials.</li><li>[ ] Store secrets only in environment variables/secret manager; never in committed files.</li><li>[ ] Record current Wikibase Cloud tenant URL, org owner, and backup owner in runbook.</li></ul>\n<h2 id=\"2-portability-guardrails-must-stay-true-at-all-times\">2) Portability guardrails (must stay true at all times)</h2>\n<ul><li>[ ] Keep Meta Museum canonical IDs stable: `https://lod.metamuseum.org/{type}/{ulid}`.</li><li>[ ] Treat Wikibase Q/P identifiers as mapped externals, not canonical internal IDs.</li><li>[ ] Preserve bidirectional mapping table: internal ID &lt;-&gt; Wikibase entity ID.</li><li>[ ] Require source citation + rights metadata on publishable claims.</li><li>[ ] Keep write operations audit-logged (who, what, when, before/after references).</li></ul>\n<h2 id=\"3-data-model-and-schema-discipline\">3) Data model and schema discipline</h2>\n<ul><li>[ ] Freeze a documented minimum property set for first publishing scope (object/work/agent/place/set + rights + citations).</li><li>[ ] Track schema changes with migration notes (new property, deprecation, mapping updates).</li><li>[ ] Define statement-reference requirements for publishable facts.</li><li>[ ] Maintain round/fixture-linked tests for publish payload shape and reference completeness.</li></ul>\n<h2 id=\"4-backup-and-export-routine-cloud-phase\">4) Backup and export routine (Cloud phase)</h2>\n<ul><li>[ ] Schedule recurring full exports (items/properties/statements/references).</li><li>[ ] Keep at least two independent backup locations (primary + secondary).</li><li>[ ] Record restore drill owner and cadence (for example, monthly).</li><li>[ ] Run a restore drill at least once before any self-host cutover decision.</li></ul>\n<h2 id=\"5-trigger-criteria-for-self-host-activation\">5) Trigger criteria for self-host activation</h2>\n<p>Move from Cloud to self-host when one or more are true:</p>\n<ul><li>[ ] Cost threshold exceeded for 2 consecutive cycles.</li><li>[ ] Required extension/feature unavailable in Cloud.</li><li>[ ] Compliance, data residency, or network control requirement cannot be satisfied in Cloud.</li><li>[ ] Performance/SLO needs require infra-level tuning not available in Cloud.</li></ul>\n<h2 id=\"6-target-self-host-design-decision\">6) Target self-host design decision</h2>\n<ul><li>[ ] Choose platform: Docker Compose (starter) or Kubernetes (production scale).</li><li>[ ] Pick database and storage sizing profile with 12-month growth buffer.</li><li>[ ] Define auth/SSO strategy and service-account policy.</li><li>[ ] Define observability baseline (metrics, logs, alerts, backup-monitoring).</li><li>[ ] Define DR objectives (RPO/RTO) and test schedule.</li></ul>\n<h2 id=\"7-dry-run-migration-no-public-cutover-yet\">7) Dry-run migration (no public cutover yet)</h2>\n<ul><li>[ ] Export from Wikibase Cloud snapshot N.</li><li>[ ] Import into self-host staging.</li><li>[ ] Run parity checks:</li><li>[ ] entity counts (items/properties/statements/references)</li><li>[ ] random sample semantic equivalence checks</li><li>[ ] external-ID mapping integrity</li><li>[ ] citation/reference completeness</li><li>[ ] Run application integration tests against staging endpoint.</li><li>[ ] Fix mapping or schema drift before production cutover planning.</li></ul>\n<h2 id=\"8-production-cutover-checklist\">8) Production cutover checklist</h2>\n<ul><li>[ ] Announce maintenance window and rollback window.</li><li>[ ] Freeze writes on Cloud publication path.</li><li>[ ] Take final export snapshot N+1 and checksum it.</li><li>[ ] Import N+1 into self-host production.</li><li>[ ] Reconcile counts and integrity checks.</li><li>[ ] Switch application publish target via configuration flag.</li><li>[ ] Run post-cutover smoke tests (read, write, references, rights, citation surfaces).</li><li>[ ] Unfreeze writes after verification sign-off.</li></ul>\n<h2 id=\"9-rollback-plan-must-be-prepared-before-cutover\">9) Rollback plan (must be prepared before cutover)</h2>\n<ul><li>[ ] Keep Cloud environment available during rollback window.</li><li>[ ] Keep publish-target toggle reversible without code changes.</li><li>[ ] Document exact rollback operator and decision authority.</li><li>[ ] Rehearse rollback once in staging.</li></ul>\n<h2 id=\"10-post-cutover-stabilization\">10) Post-cutover stabilization</h2>\n<ul><li>[ ] Monitor error rates, latency, and queue backlog for 7-14 days.</li><li>[ ] Re-run parity audit after first full sync cycle.</li><li>[ ] Capture lessons learned and update this checklist.</li><li>[ ] Decide Cloud decommission timeline only after stabilization is complete.</li></ul>\n<h2 id=\"ownership-and-review-cadence\">Ownership and review cadence</h2>\n<ul><li>Owner: `@rsung` (or assigned platform owner)</li><li>Review cadence: monthly during Cloud phase; weekly during migration window</li><li>Last review date: _fill when first adopted_</li></ul>","updatedAt":"2018-10-20T01:46:40.000Z","checksum":"170657fcbf2b5758e15decd4f449b68c50fa4387128f505aa25d2579a6d3dd8e","checksumPrefix":"170657fcbf2b","anchorCount":12,"lineCount":107,"rawUrl":"/api/docs/content?path=wikibase-cloud-migration-checklist.md","htmlUrl":"/docs?doc=wikibase-cloud-migration-checklist.md","apiUrl":"/api/docs/content?path=wikibase-cloud-migration-checklist.md"}