← back to Dwha Harlequin Onboard

verification/e2e-proof.json

88 lines

{
  "intent": "Safely prepare TK-10882 for a one-product DWHA Shopify DRAFT canary followed by a 25/day LaunchAgent cadence.",
  "risk_tier": "R4",
  "environment": "macstudio3 local dw_unified mirror plus read-only Shopify Admin GraphQL preflight",
  "timestamp": "2026-08-31T18:33:00.000Z",
  "build_identity": "config/runbook 9e7a440; onboarding hardening a4262a4; Shopify variant fix c5a5e29",
  "baseline": {
    "coverage": "630 READY after one successful canary, 29 settlement-flagged, 601 clean",
    "launchagent": "not installed",
    "restore_maps": 1,
    "cadence_count": 1,
    "prefix_state": "0 ACTIVE Harlequin DWHQ-* and 39 ACTIVE DWHF-335* in local mirror"
  },
  "checks": [
    {
      "name": "JavaScript parse and diff hygiene",
      "command": "node --check scripts/onboard-batch.mjs; node --check scripts/check-coverage.mjs; git diff --check",
      "verdict": "PASS"
    },
    {
      "name": "DWHA coverage query",
      "command": "npm run check",
      "assertions": ["631 READY", "29 settlement-flagged", "602 clean", "no writes"],
      "verdict": "PASS"
    },
    {
      "name": "Onboarding dry-run",
      "command": "npm run dry-run",
      "assertions": ["only DWHA-* candidates", "658 catalog candidates inspected", "0 Shopify calls", "0 DB writes"],
      "verdict": "PASS"
    },
    {
      "name": "Live SKU lookup negative branch",
      "artifact": "Shopify GraphQL productVariants exact query for DWHA-570086",
      "assertions": ["errors=null", "nodes=[]"],
      "verdict": "PASS"
    },
    {
      "name": "Live SKU lookup positive branch",
      "artifact": "Shopify GraphQL productVariants exact query for DWHF-335031",
      "assertions": ["exact SKU returned", "legacy product ID 7787424448563", "status ACTIVE"],
      "verdict": "PASS"
    },
    {
      "name": "LaunchAgent static validation",
      "command": "plutil -lint launchd/com.steve.dwha-onboard-daily.plist; test -x /opt/homebrew/bin/node",
      "assertions": ["plist OK", "configured Node executable exists", "service remains uninstalled"],
      "verdict": "PASS"
    },
    {
      "name": "One-product external mutation and persisted-state assertion",
      "command": "node scripts/onboard-batch.mjs --limit 1",
      "assertions": [
        "Shopify product 7938754412595 is DRAFT",
        "Single Roll SKU DWHA-570086 at 269.68",
        "Sample SKU DWHA-570086-Sample at 4.25",
        "one 1366x1366 image attached",
        "harlequin_catalog id 2410 has on_shopify=true and matching product ID",
        "restore-map, ledger, and cadence count=1 persisted"
      ],
      "verdict": "PASS"
    },
    {
      "name": "Compensating-delete failure-path exercise against Shopify",
      "reason": "Would require deliberately causing and deleting a production-side DRAFT; held under the same R4 approval gate.",
      "verdict": "SKIP"
    },
    {
      "name": "LaunchAgent install and first scheduled execution",
      "assertions": [
        "installed plist byte-matches repository plist",
        "plutil lint passes",
        "launchctl loaded com.steve.dwha-onboard-daily",
        "calendar trigger is Hour=5 Minute=0",
        "program is /opt/homebrew/bin/node",
        "working directory is the onboarding project",
        "runs=0 after bootstrap, so no extra batch fired",
        "cadence count, ledger lines, and restore-map remain exactly 1"
      ],
      "verdict": "PASS"
    }
  ],
  "cleanup": "Approved canary intentionally retained as a Shopify DRAFT with matching canonical state and restore-map. Approved LaunchAgent is loaded and waiting for its 05:00 trigger; no manual run occurred. The first failed attempt left 44 ignored local image-cache files but zero external/canonical writes.",
  "rollback": "For an approved canary, scripts/rollback.mjs DWHA-XXXXXX deletes the created DRAFT, clears the catalog flag, and archives its restore-map.",
  "verdict": "PASS",
  "monitoring": "First automatic cadence execution is expected at 05:00 America/Los_Angeles; inspect data/launchd-stdout.log, data/launchd-stderr.log, cadence counter, ledger, and restore-maps after that trigger."
}