← back to Reid Witlin Onboarding

verification/recovery-e2e-proof.json

31 lines

{
  "intent": "Prepare a fail-closed, read-only recovery manifest for TK-10066 without performing gated Shopify or canonical writes.",
  "risk_tier": "R4-preflight",
  "environment": "live Shopify read API plus local canonical dw_unified read replica",
  "timestamp": "2026-09-03T05:24:18Z",
  "entry_state": "All Reid Witlin writers stopped; recovery remains gated; products remain DRAFT.",
  "actions": [
    "Compiled build_recovery_manifest.py",
    "Fetched the complete live Architectural Fabrics vendor product set read-only",
    "Read matching rwltd_catalog and dw_sku_registry rows",
    "Generated two immutable manifests 77 seconds apart"
  ],
  "assertions": {
    "duplicate_sku_count_is_89": "PASS",
    "same_identity_count_is_34": "PASS",
    "cross_identity_count_is_55": "PASS",
    "all_archive_targets_are_draft": "PASS",
    "all_55_fresh_skus_are_unique": "PASS",
    "both_handle_link_repairs_resolve": "PASS",
    "two_read_state_is_stable_ignoring_generated_at": "PASS",
    "shopify_or_database_mutation": "SKIP - prohibited until Steve approves the recovery memo"
  },
  "evidence": [
    "verification/recovery-manifests/20260903T052301Z.json",
    "verification/recovery-manifests/20260903T052418Z.json"
  ],
  "negative_behavior": "The first run failed closed at DWKR-191406 because no registry owner existed. The tool was corrected to require exactly one B-new-gap mover and one pre-existing Pool-A owner; ambiguous ownership raises without writing a manifest.",
  "side_effects": "Two local immutable JSON evidence files only; zero Shopify and zero PostgreSQL writes.",
  "verdict": "PARTIAL - recovery preflight is verified; live recovery remains approval-gated."
}