{
  "generatedAt": "2026-05-20T02:31:38.401Z",
  "ready": false,
  "purpose": "Dependency map from master verifier gates to the owner inputs and evidence that unblock them. It prevents rerunning gates blindly and keeps owner/external blockers explicit.",
  "counts": {
    "gates": 17,
    "passing": 8,
    "blocked": 9,
    "ownersWithBlockedGates": 6
  },
  "rows": [
    {
      "Sequence": 1,
      "Gate": "export_content",
      "Status": "pass",
      "ExitCode": 0,
      "Command": "bun run export:content",
      "Owner": "Dashboard",
      "Lane": "Export generation",
      "Inputs": [
        "data/content/products/",
        "data/content/metaobjects.json",
        "data/content/smart-collections.json"
      ],
      "UpstreamBlockers": [],
      "BlockerEvidence": "Wrote C:\\Users\\uldvs\\OneDrive\\Desktop\\Work 2.0\\jv-dashboard\\content_population_exports | 190 product records, 374 blockers",
      "OwnerResponseStatus": "not needed while passing",
      "EvidenceDossierLinks": [
        "Matrixify/export packet exists"
      ],
      "UnblockInstruction": "Already passing; rerun after approvals or content changes.",
      "NextCommand": "bun run export:content"
    },
    {
      "Sequence": 2,
      "Gate": "validate_assets",
      "Status": "pass",
      "ExitCode": 0,
      "Command": "bun run validate:assets",
      "Owner": "Dashboard / design",
      "Lane": "Asset file presence",
      "Inputs": [
        "C:/Users/uldvs/OneDrive/Desktop/jv-assets",
        "content_population_exports/asset_manifest_validation.*"
      ],
      "UpstreamBlockers": [],
      "BlockerEvidence": "Available assets: 643 | Required filenames: 586",
      "OwnerResponseStatus": "not needed while passing",
      "EvidenceDossierLinks": [
        "Asset references/files are present"
      ],
      "UnblockInstruction": "Already passing for file presence; human image approval is separate.",
      "NextCommand": "bun run validate:assets"
    },
    {
      "Sequence": 3,
      "Gate": "validate_template",
      "Status": "pass",
      "ExitCode": 0,
      "Command": "bun run validate:template",
      "Owner": "Dashboard",
      "Lane": "Matrixify template schema",
      "Inputs": [
        "Just Vitamins - Content Population Templates workbook",
        "content_population_exports/*matrixify.csv"
      ],
      "UpstreamBlockers": [],
      "BlockerEvidence": "Template schema validation ready: True\r | products_dashboard: pass rows=350\r",
      "OwnerResponseStatus": "not needed while passing",
      "EvidenceDossierLinks": [
        "Matrixify/export packet exists"
      ],
      "UnblockInstruction": "Already passing; rerun after emitter changes.",
      "NextCommand": "bun run validate:template"
    },
    {
      "Sequence": 4,
      "Gate": "source_request_pack",
      "Status": "pass",
      "ExitCode": 0,
      "Command": "bun run source:pack",
      "Owner": "Research / compliance / image",
      "Lane": "Source request pack",
      "Inputs": [
        "content_population_exports/source_request_*"
      ],
      "UpstreamBlockers": [],
      "BlockerEvidence": "Wrote source request pack to C:\\Users\\uldvs\\OneDrive\\Desktop\\Work 2.0\\jv-dashboard\\content_population_exports | Source request items: 206",
      "OwnerResponseStatus": "not needed while passing",
      "EvidenceDossierLinks": [
        "Source drops and claims library validate"
      ],
      "UnblockInstruction": "Already passing; use as owner request evidence.",
      "NextCommand": "bun run source:pack"
    },
    {
      "Sequence": 5,
      "Gate": "validate_sources",
      "Status": "pass",
      "ExitCode": 0,
      "Command": "bun run validate:sources",
      "Owner": "Research",
      "Lane": "Source drop validation",
      "Inputs": [
        "data/sources/amazon/",
        "data/sources/trustpilot/",
        "data/sources/reddit/"
      ],
      "UpstreamBlockers": [],
      "BlockerEvidence": "Source drops ready: true | amazon: 1/1",
      "OwnerResponseStatus": "not needed while passing",
      "EvidenceDossierLinks": [
        "Source drops and claims library validate"
      ],
      "UnblockInstruction": "Already passing for current source drops; more source evidence may still be needed by owners.",
      "NextCommand": "bun run validate:sources"
    },
    {
      "Sequence": 6,
      "Gate": "validate_claims",
      "Status": "pass",
      "ExitCode": 0,
      "Command": "bun run validate:claims",
      "Owner": "Compliance",
      "Lane": "Claims library validation",
      "Inputs": [
        "data/content/claims-library.json"
      ],
      "UpstreamBlockers": [],
      "BlockerEvidence": "Claims library ready: true | Claims: 5",
      "OwnerResponseStatus": "not needed while passing",
      "EvidenceDossierLinks": [
        "Source drops and claims library validate",
        "Compliance clinical claim/blank decisions complete"
      ],
      "UnblockInstruction": "Already passing structurally; remaining blank clinical claims still need decisions or source-backed refs.",
      "NextCommand": "bun run validate:claims"
    },
    {
      "Sequence": 7,
      "Gate": "clinical_blank_decisions",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run compliance:blank-decisions",
      "Owner": "Compliance owner / Umar",
      "Lane": "Compliance blank/source-backed claim decisions",
      "Inputs": [
        "data/content/compliance/clinical-blank-decisions.csv"
      ],
      "UpstreamBlockers": [
        "Compliance clinical blanks"
      ],
      "BlockerEvidence": "Compliance clinical blanks: 0/184 valid approved_blank rows; 184 still pending/invalid.",
      "OwnerResponseStatus": "Compliance blank/source-backed claim decisions: not_sent",
      "EvidenceDossierLinks": [
        "Compliance clinical claim/blank decisions complete"
      ],
      "UnblockInstruction": "Fill approved_blank rows with approvedBy, approvedAt, rationale, constraintsAcknowledged=yes or provide source-backed claim refs and rerun claims sync.",
      "NextCommand": "bun run compliance:blank-decisions"
    },
    {
      "Sequence": 8,
      "Gate": "intelligence_queue",
      "Status": "pass",
      "ExitCode": 0,
      "Command": "bun run intelligence:queue",
      "Owner": "Dashboard intelligence lane",
      "Lane": "Full catalogue intelligence coverage",
      "Inputs": [
        "data/intelligence/**"
      ],
      "UpstreamBlockers": [],
      "BlockerEvidence": "Intelligence workqueue ready: true | Missing tasks: 0",
      "OwnerResponseStatus": "not needed while passing",
      "EvidenceDossierLinks": [
        "Full catalogue content workspace exists"
      ],
      "UnblockInstruction": "Already passing; rerun if product scope changes.",
      "NextCommand": "bun run intelligence:queue"
    },
    {
      "Sequence": 9,
      "Gate": "product_approval_decisions",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run approval:decisions",
      "Owner": "Umar / JV reviewer",
      "Lane": "Product approval decisions",
      "Inputs": [
        "data/content/approvals/product-approval-decisions.csv"
      ],
      "UpstreamBlockers": [
        "Product approval decisions"
      ],
      "BlockerEvidence": "Product approval decisions: 0/190 valid approve_all rows; 190 still pending/invalid.",
      "OwnerResponseStatus": "Product approval decisions: not_sent",
      "EvidenceDossierLinks": [
        "Product approvals complete"
      ],
      "UnblockInstruction": "Fill approve_all decisions with approver, timestamp, review evidence, and all acknowledgements.",
      "NextCommand": "bun run approval:decisions"
    },
    {
      "Sequence": 10,
      "Gate": "product_approval_review_packet",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run approval:review-packet",
      "Owner": "Umar / JV reviewer",
      "Lane": "Product approval review packet",
      "Inputs": [
        "data/content/approvals/product-approval-decisions.csv",
        "content_population_exports/product_approval_review_packet.*"
      ],
      "UpstreamBlockers": [
        "Product approval decisions"
      ],
      "BlockerEvidence": "Product approval decisions: 0/190 valid approve_all rows; 190 still pending/invalid.",
      "OwnerResponseStatus": "Product approval decisions: not_sent",
      "EvidenceDossierLinks": [
        "Product approvals complete"
      ],
      "UnblockInstruction": "Clears only after product approvals validate and no product remains blocked.",
      "NextCommand": "bun run approval:review-packet"
    },
    {
      "Sequence": 11,
      "Gate": "handoff_actions",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run handoff:actions",
      "Owner": "Project owner",
      "Lane": "Handoff action closure",
      "Inputs": [
        "content_population_exports/handoff_action_plan.*"
      ],
      "UpstreamBlockers": [
        "Compliance clinical blanks",
        "Product approval decisions",
        "Staging import evidence",
        "DataForSEO provider response",
        "DataForSEO spend approval"
      ],
      "BlockerEvidence": "Compliance clinical blanks: 0/184 valid approved_blank rows; 184 still pending/invalid. | Product approval decisions: 0/190 valid approve_all rows; 190 still pending/invalid. | DataForSEO provider response: responseReceived=false; endpointAvailable=false; replacementEndpoint=blank; retrySafe=false; credentialIncluded=false | DataForSEO spend approval: approved=false; maxSpendApproved=0; targetCap=0/10; runLimit=0/1; depth=0/10; hardStop=false; noCredentialStorage=false | Staging import evidence: 0 import log file(s) found.",
      "OwnerResponseStatus": "no owner response recorded",
      "EvidenceDossierLinks": [
        "Master handoff verifier passes"
      ],
      "UnblockInstruction": "Closes after compliance, approval, staging, and provider owner lanes are resolved.",
      "NextCommand": "bun run handoff:actions"
    },
    {
      "Sequence": 12,
      "Gate": "executive_decision_brief",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run handoff:decision-brief",
      "Owner": "Project owner / Umar / Lewis / Euan",
      "Lane": "Executive decision closure",
      "Inputs": [
        "content_population_exports/executive_decision_brief.*"
      ],
      "UpstreamBlockers": [
        "Compliance clinical blanks",
        "Product approval decisions",
        "Staging import evidence",
        "DataForSEO provider response"
      ],
      "BlockerEvidence": "Compliance clinical blanks: 0/184 valid approved_blank rows; 184 still pending/invalid. | Product approval decisions: 0/190 valid approve_all rows; 190 still pending/invalid. | DataForSEO provider response: responseReceived=false; endpointAvailable=false; replacementEndpoint=blank; retrySafe=false; credentialIncluded=false | Staging import evidence: 0 import log file(s) found.",
      "OwnerResponseStatus": "no owner response recorded",
      "EvidenceDossierLinks": [],
      "UnblockInstruction": "Closes after named decisions have recorded evidence and owners.",
      "NextCommand": "bun run handoff:decision-brief"
    },
    {
      "Sequence": 13,
      "Gate": "staging_handoff_packet",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run staging:handoff-packet",
      "Owner": "Lewis/Euan + dashboard owner",
      "Lane": "Staging handoff readiness",
      "Inputs": [
        "content_population_exports/staging_handoff_packet.*",
        "data/staging/**"
      ],
      "UpstreamBlockers": [
        "Staging import evidence",
        "Staging PDP spot checks",
        "Staging cutover approval"
      ],
      "BlockerEvidence": "Staging import evidence: 0 import log file(s) found. | Staging PDP spot checks: 0/5 PDP check file(s) found. | Staging cutover approval: approved=false; approver=blank; approvedAt=blank",
      "OwnerResponseStatus": "Lewis/Euan staging import evidence: not_sent",
      "EvidenceDossierLinks": [
        "Lewis/Euan staging import evidence complete"
      ],
      "UnblockInstruction": "Import files are present; real import/PDP/cutover evidence must be recorded.",
      "NextCommand": "bun run staging:handoff-packet"
    },
    {
      "Sequence": 14,
      "Gate": "staging_evidence",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run staging:evidence",
      "Owner": "Lewis/Euan + dashboard owner",
      "Lane": "Staging evidence",
      "Inputs": [
        "data/staging/import-logs/",
        "data/staging/pdp-checks/",
        "data/staging/cutover-approval.json"
      ],
      "UpstreamBlockers": [
        "Staging import evidence",
        "Staging PDP spot checks",
        "Staging cutover approval"
      ],
      "BlockerEvidence": "Staging import evidence: 0 import log file(s) found. | Staging PDP spot checks: 0/5 PDP check file(s) found. | Staging cutover approval: approved=false; approver=blank; approvedAt=blank",
      "OwnerResponseStatus": "Lewis/Euan staging import evidence: not_sent",
      "EvidenceDossierLinks": [
        "Lewis/Euan staging import evidence complete"
      ],
      "UnblockInstruction": "Save clean import logs, at least 5 real PDP spot checks, and signed cutover approval.",
      "NextCommand": "bun run staging:evidence"
    },
    {
      "Sequence": 15,
      "Gate": "staging_checklist",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run staging:checklist",
      "Owner": "Lewis/Euan + dashboard owner",
      "Lane": "Staging checklist",
      "Inputs": [
        "content_population_exports/staging_import_checklist.*",
        "data/staging/**"
      ],
      "UpstreamBlockers": [
        "Staging import evidence",
        "Staging PDP spot checks",
        "Staging cutover approval"
      ],
      "BlockerEvidence": "Staging import evidence: 0 import log file(s) found. | Staging PDP spot checks: 0/5 PDP check file(s) found. | Staging cutover approval: approved=false; approver=blank; approvedAt=blank",
      "OwnerResponseStatus": "Lewis/Euan staging import evidence: not_sent",
      "EvidenceDossierLinks": [
        "Lewis/Euan staging import evidence complete"
      ],
      "UnblockInstruction": "Clears after staging evidence validator passes and preflight/import/PDP/cutover checks are recorded.",
      "NextCommand": "bun run staging:checklist"
    },
    {
      "Sequence": 16,
      "Gate": "delivery_index",
      "Status": "pass",
      "ExitCode": 0,
      "Command": "bun run delivery:index",
      "Owner": "Project owner",
      "Lane": "Delivery packet completeness",
      "Inputs": [
        "content_population_exports/delivery_index.*"
      ],
      "UpstreamBlockers": [],
      "BlockerEvidence": "Delivery index ready: true | Files present: 179/179",
      "OwnerResponseStatus": "not needed while passing",
      "EvidenceDossierLinks": [],
      "UnblockInstruction": "Already passing; only proves files exist, not final readiness.",
      "NextCommand": "bun run delivery:index"
    },
    {
      "Sequence": 17,
      "Gate": "content_audit",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run audit:content",
      "Owner": "Dashboard / project owner",
      "Lane": "Final content audit",
      "Inputs": [
        "content_population_exports/content_population_readiness.*"
      ],
      "UpstreamBlockers": [
        "Compliance clinical blanks",
        "Product approval decisions"
      ],
      "BlockerEvidence": "Compliance clinical blanks: 0/184 valid approved_blank rows; 184 still pending/invalid. | Product approval decisions: 0/190 valid approve_all rows; 190 still pending/invalid.",
      "OwnerResponseStatus": "no owner response recorded",
      "EvidenceDossierLinks": [],
      "UnblockInstruction": "Final aggregate gate; clears after compliance and approvals resolve remaining export blockers.",
      "NextCommand": "bun run audit:content"
    }
  ],
  "blockedRows": [
    {
      "Sequence": 7,
      "Gate": "clinical_blank_decisions",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run compliance:blank-decisions",
      "Owner": "Compliance owner / Umar",
      "Lane": "Compliance blank/source-backed claim decisions",
      "Inputs": [
        "data/content/compliance/clinical-blank-decisions.csv"
      ],
      "UpstreamBlockers": [
        "Compliance clinical blanks"
      ],
      "BlockerEvidence": "Compliance clinical blanks: 0/184 valid approved_blank rows; 184 still pending/invalid.",
      "OwnerResponseStatus": "Compliance blank/source-backed claim decisions: not_sent",
      "EvidenceDossierLinks": [
        "Compliance clinical claim/blank decisions complete"
      ],
      "UnblockInstruction": "Fill approved_blank rows with approvedBy, approvedAt, rationale, constraintsAcknowledged=yes or provide source-backed claim refs and rerun claims sync.",
      "NextCommand": "bun run compliance:blank-decisions"
    },
    {
      "Sequence": 9,
      "Gate": "product_approval_decisions",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run approval:decisions",
      "Owner": "Umar / JV reviewer",
      "Lane": "Product approval decisions",
      "Inputs": [
        "data/content/approvals/product-approval-decisions.csv"
      ],
      "UpstreamBlockers": [
        "Product approval decisions"
      ],
      "BlockerEvidence": "Product approval decisions: 0/190 valid approve_all rows; 190 still pending/invalid.",
      "OwnerResponseStatus": "Product approval decisions: not_sent",
      "EvidenceDossierLinks": [
        "Product approvals complete"
      ],
      "UnblockInstruction": "Fill approve_all decisions with approver, timestamp, review evidence, and all acknowledgements.",
      "NextCommand": "bun run approval:decisions"
    },
    {
      "Sequence": 10,
      "Gate": "product_approval_review_packet",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run approval:review-packet",
      "Owner": "Umar / JV reviewer",
      "Lane": "Product approval review packet",
      "Inputs": [
        "data/content/approvals/product-approval-decisions.csv",
        "content_population_exports/product_approval_review_packet.*"
      ],
      "UpstreamBlockers": [
        "Product approval decisions"
      ],
      "BlockerEvidence": "Product approval decisions: 0/190 valid approve_all rows; 190 still pending/invalid.",
      "OwnerResponseStatus": "Product approval decisions: not_sent",
      "EvidenceDossierLinks": [
        "Product approvals complete"
      ],
      "UnblockInstruction": "Clears only after product approvals validate and no product remains blocked.",
      "NextCommand": "bun run approval:review-packet"
    },
    {
      "Sequence": 11,
      "Gate": "handoff_actions",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run handoff:actions",
      "Owner": "Project owner",
      "Lane": "Handoff action closure",
      "Inputs": [
        "content_population_exports/handoff_action_plan.*"
      ],
      "UpstreamBlockers": [
        "Compliance clinical blanks",
        "Product approval decisions",
        "Staging import evidence",
        "DataForSEO provider response",
        "DataForSEO spend approval"
      ],
      "BlockerEvidence": "Compliance clinical blanks: 0/184 valid approved_blank rows; 184 still pending/invalid. | Product approval decisions: 0/190 valid approve_all rows; 190 still pending/invalid. | DataForSEO provider response: responseReceived=false; endpointAvailable=false; replacementEndpoint=blank; retrySafe=false; credentialIncluded=false | DataForSEO spend approval: approved=false; maxSpendApproved=0; targetCap=0/10; runLimit=0/1; depth=0/10; hardStop=false; noCredentialStorage=false | Staging import evidence: 0 import log file(s) found.",
      "OwnerResponseStatus": "no owner response recorded",
      "EvidenceDossierLinks": [
        "Master handoff verifier passes"
      ],
      "UnblockInstruction": "Closes after compliance, approval, staging, and provider owner lanes are resolved.",
      "NextCommand": "bun run handoff:actions"
    },
    {
      "Sequence": 12,
      "Gate": "executive_decision_brief",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run handoff:decision-brief",
      "Owner": "Project owner / Umar / Lewis / Euan",
      "Lane": "Executive decision closure",
      "Inputs": [
        "content_population_exports/executive_decision_brief.*"
      ],
      "UpstreamBlockers": [
        "Compliance clinical blanks",
        "Product approval decisions",
        "Staging import evidence",
        "DataForSEO provider response"
      ],
      "BlockerEvidence": "Compliance clinical blanks: 0/184 valid approved_blank rows; 184 still pending/invalid. | Product approval decisions: 0/190 valid approve_all rows; 190 still pending/invalid. | DataForSEO provider response: responseReceived=false; endpointAvailable=false; replacementEndpoint=blank; retrySafe=false; credentialIncluded=false | Staging import evidence: 0 import log file(s) found.",
      "OwnerResponseStatus": "no owner response recorded",
      "EvidenceDossierLinks": [],
      "UnblockInstruction": "Closes after named decisions have recorded evidence and owners.",
      "NextCommand": "bun run handoff:decision-brief"
    },
    {
      "Sequence": 13,
      "Gate": "staging_handoff_packet",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run staging:handoff-packet",
      "Owner": "Lewis/Euan + dashboard owner",
      "Lane": "Staging handoff readiness",
      "Inputs": [
        "content_population_exports/staging_handoff_packet.*",
        "data/staging/**"
      ],
      "UpstreamBlockers": [
        "Staging import evidence",
        "Staging PDP spot checks",
        "Staging cutover approval"
      ],
      "BlockerEvidence": "Staging import evidence: 0 import log file(s) found. | Staging PDP spot checks: 0/5 PDP check file(s) found. | Staging cutover approval: approved=false; approver=blank; approvedAt=blank",
      "OwnerResponseStatus": "Lewis/Euan staging import evidence: not_sent",
      "EvidenceDossierLinks": [
        "Lewis/Euan staging import evidence complete"
      ],
      "UnblockInstruction": "Import files are present; real import/PDP/cutover evidence must be recorded.",
      "NextCommand": "bun run staging:handoff-packet"
    },
    {
      "Sequence": 14,
      "Gate": "staging_evidence",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run staging:evidence",
      "Owner": "Lewis/Euan + dashboard owner",
      "Lane": "Staging evidence",
      "Inputs": [
        "data/staging/import-logs/",
        "data/staging/pdp-checks/",
        "data/staging/cutover-approval.json"
      ],
      "UpstreamBlockers": [
        "Staging import evidence",
        "Staging PDP spot checks",
        "Staging cutover approval"
      ],
      "BlockerEvidence": "Staging import evidence: 0 import log file(s) found. | Staging PDP spot checks: 0/5 PDP check file(s) found. | Staging cutover approval: approved=false; approver=blank; approvedAt=blank",
      "OwnerResponseStatus": "Lewis/Euan staging import evidence: not_sent",
      "EvidenceDossierLinks": [
        "Lewis/Euan staging import evidence complete"
      ],
      "UnblockInstruction": "Save clean import logs, at least 5 real PDP spot checks, and signed cutover approval.",
      "NextCommand": "bun run staging:evidence"
    },
    {
      "Sequence": 15,
      "Gate": "staging_checklist",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run staging:checklist",
      "Owner": "Lewis/Euan + dashboard owner",
      "Lane": "Staging checklist",
      "Inputs": [
        "content_population_exports/staging_import_checklist.*",
        "data/staging/**"
      ],
      "UpstreamBlockers": [
        "Staging import evidence",
        "Staging PDP spot checks",
        "Staging cutover approval"
      ],
      "BlockerEvidence": "Staging import evidence: 0 import log file(s) found. | Staging PDP spot checks: 0/5 PDP check file(s) found. | Staging cutover approval: approved=false; approver=blank; approvedAt=blank",
      "OwnerResponseStatus": "Lewis/Euan staging import evidence: not_sent",
      "EvidenceDossierLinks": [
        "Lewis/Euan staging import evidence complete"
      ],
      "UnblockInstruction": "Clears after staging evidence validator passes and preflight/import/PDP/cutover checks are recorded.",
      "NextCommand": "bun run staging:checklist"
    },
    {
      "Sequence": 17,
      "Gate": "content_audit",
      "Status": "blocked",
      "ExitCode": 1,
      "Command": "bun run audit:content",
      "Owner": "Dashboard / project owner",
      "Lane": "Final content audit",
      "Inputs": [
        "content_population_exports/content_population_readiness.*"
      ],
      "UpstreamBlockers": [
        "Compliance clinical blanks",
        "Product approval decisions"
      ],
      "BlockerEvidence": "Compliance clinical blanks: 0/184 valid approved_blank rows; 184 still pending/invalid. | Product approval decisions: 0/190 valid approve_all rows; 190 still pending/invalid.",
      "OwnerResponseStatus": "no owner response recorded",
      "EvidenceDossierLinks": [],
      "UnblockInstruction": "Final aggregate gate; clears after compliance and approvals resolve remaining export blockers.",
      "NextCommand": "bun run audit:content"
    }
  ],
  "ownerGroups": [
    {
      "Owner": "Compliance owner / Umar",
      "BlockedGates": 1,
      "Gates": "clinical_blank_decisions",
      "FirstAction": "Fill approved_blank rows with approvedBy, approvedAt, rationale, constraintsAcknowledged=yes or provide source-backed claim refs and rerun claims sync."
    },
    {
      "Owner": "Umar / JV reviewer",
      "BlockedGates": 2,
      "Gates": "product_approval_decisions | product_approval_review_packet",
      "FirstAction": "Fill approve_all decisions with approver, timestamp, review evidence, and all acknowledgements."
    },
    {
      "Owner": "Project owner",
      "BlockedGates": 1,
      "Gates": "handoff_actions",
      "FirstAction": "Closes after compliance, approval, staging, and provider owner lanes are resolved."
    },
    {
      "Owner": "Project owner / Umar / Lewis / Euan",
      "BlockedGates": 1,
      "Gates": "executive_decision_brief",
      "FirstAction": "Closes after named decisions have recorded evidence and owners."
    },
    {
      "Owner": "Lewis/Euan + dashboard owner",
      "BlockedGates": 3,
      "Gates": "staging_handoff_packet | staging_evidence | staging_checklist",
      "FirstAction": "Import files are present; real import/PDP/cutover evidence must be recorded."
    },
    {
      "Owner": "Dashboard / project owner",
      "BlockedGates": 1,
      "Gates": "content_audit",
      "FirstAction": "Final aggregate gate; clears after compliance and approvals resolve remaining export blockers."
    }
  ],
  "files": {
    "markdown": "content_population_exports/handoff_gate_dependency_map.md",
    "json": "content_population_exports/handoff_gate_dependency_map.json",
    "csv": "content_population_exports/handoff_gate_dependency_map.csv",
    "ownerCsv": "content_population_exports/handoff_gate_dependency_by_owner.csv"
  }
}
