{
  "result": "PASS",
  "checked_at": "2026-10-08T04:48:48.152Z",
  "checks_passed": 61,
  "checks": [
    "01-attribution-capture.n8n.json: JSON graph, references, Code and expression syntax",
    "02-hubspot-attribution-worker.n8n.json: JSON graph, references, Code and expression syntax",
    "03-attribution-property-setup.n8n.json: JSON graph, references, Code and expression syntax",
    "04-ga4-traffic-sync.n8n.json: JSON graph, references, Code and expression syntax",
    "05-attribution-report-api.n8n.json: JSON graph, references, Code and expression syntax",
    "06-attribution-operations.n8n.json: JSON graph, references, Code and expression syntax",
    "Envelope accepts a well-formed conversion payload",
    "Envelope rejects unstable or missing event UUID",
    "Envelope rejects object identity values",
    "Envelope retains raw campaign and email strings unchanged",
    "Source aliases normalize without merging Instagram into Facebook",
    "CPC is source-aware for social/search",
    "Campaign whitespace and separators normalize consistently",
    "Tracking URL noise removed but business query params retained",
    "Non-http page URLs are not propagated",
    "Complete known UTMs classify as paid social",
    "URL UTMs are extracted and decoded",
    "Canonical aliases in form vs URL do not create false conflict",
    "Different URL and form UTM source is flagged",
    "Facebook click ID does not imply paid social",
    "Google click ID does not imply paid search network",
    "Missing tracking is unknown rather than silently Direct",
    "Explicit observed direct is classified with partial completeness",
    "External referrer provides conservative referral evidence",
    "Internal subdomain referrer does not become external referral",
    "Missing timestamp is explicitly inferred",
    "Invalid timezone-free timestamp flagged",
    "Future timestamp flagged",
    "Unknown embedded form is incomplete",
    "Direct form email resolves a reliable lookup identity",
    "Shared submission ID can reconcile a website event with a form email",
    "Session/form suggestion alone cannot authorize a contact match",
    "Different emails for same submission create identity conflict",
    "Different UTMs for same submission create a source conflict",
    "Earliest valid provided first touch selected",
    "New contact attribution sets original and latest custom sources",
    "Existing original source and timestamp are never overwritten",
    "Older conversion remains history and preserves latest",
    "Older newly discovered original requires review",
    "Manual source lock prevents every property update and review task",
    "Source conflict preserves both original and latest fields",
    "Unresolved CRM conflict is not silently cleared",
    "Missing contact retries without creating a contact",
    "Authorization errors cannot become contact-not-found",
    "Contact ID/email mismatch requires review",
    "Existing review task suppresses duplicate task for same submission",
    "Dry run stores proposals but cannot patch HubSpot or create tasks",
    "Only custom attribution properties are changed",
    "Embedded worker library produces same preservation decisions",
    "GA4 pagination advances by actual returned rows",
    "GA4 channel grouping takes priority over CPC source heuristic",
    "GA4 timezone mismatch cannot publish",
    "GA4 row cap failure prevents silent truncation",
    "GA4 negative or invalid metrics rejected",
    "GA4 schema mismatch rejected",
    "GA4 empty early page rejected",
    "GA4 totals are unsegmented and include totalUsers",
    "GA4 requests contain no email/contact identifiers",
    "PostgreSQL values are bound parameters",
    "Report endpoint requires header authentication",
    "Website helper requires explicit analytics consent for storage"
  ],
  "workflows": [
    {
      "file": "01-attribution-capture.n8n.json",
      "nodes": 9
    },
    {
      "file": "02-hubspot-attribution-worker.n8n.json",
      "nodes": 20
    },
    {
      "file": "03-attribution-property-setup.n8n.json",
      "nodes": 7
    },
    {
      "file": "04-ga4-traffic-sync.n8n.json",
      "nodes": 15
    },
    {
      "file": "05-attribution-report-api.n8n.json",
      "nodes": 5
    },
    {
      "file": "06-attribution-operations.n8n.json",
      "nodes": 6
    }
  ],
  "not_verified": [
    "Live n8n import and execution",
    "PostgreSQL function execution and concurrent behavior",
    "Live Google OAuth and GA4 dimension/metric/account compatibility",
    "HubSpot permissions, schemas and real account responses",
    "Actual website installation, consent integration, GTM and cross-domain capture"
  ]
}

