Files
justvitamin/content_population_exports/handoff_gate_dependency_map.json
Omair Saleh 056c47581f feat: editorial review dashboard + elite-grade pilot batch (5 SKUs)
Ships the second dashboard surface — a Pattern Library + Preview Theatre — that
presents the 4-section PDP pilot batch back to Umar, compliance, and the board
in an editorial format. Adds the full data layer that drives it: 5 source-backed
per-SKU drafts at QA 100/100, 15 competitor PDP semantic extracts, PubMed
evidence packs, EFSA claims library extension, JV brand voice guide, hand-curated
product FAQs, and the Matrixify-ready CSV exports for Lewis.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 18:50:09 +08:00

651 lines
27 KiB
JSON

{
"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"
}
}