lesson 4 of 4 · mass ugc-looking as a channellesson 4 of 4 · mass ugc-looking as a channellesson 4 of 4 · mass ugc-looking as a channellesson 4 of 4 · mass ugc-looking as a channellesson 4 of 4 · mass ugc-looking as a channellesson 4 of 4 · mass ugc-looking as a channellesson 4 of 4 · mass ugc-looking as a channellesson 4 of 4 · mass ugc-looking as a channellesson 4 of 4 · mass ugc-looking as a channellesson 4 of 4 · mass ugc-looking as a channellesson 4 of 4 · mass ugc-looking as a channel
Write ship_checklist(campaign) — the pass that runs before a mass
UGC-looking batch ships.
campaign is a dict with id, template_arc, fleet_size,
bio_cta, disclosure, approver, and receipt_logged.
Collect flags in this order, then print them:
missing_disclosurewhendisclosureis emptymissing_approverwhenapproveris emptyno_campaign_receiptwhenreceipt_loggedis falseno_owned_ctawhenbio_ctais emptyunderbatchedwhenfleet_size < 3
For each flag, print f"flag: {name}". Then print one verdict line:
verdict: BLOCKEDwhen disclosure is missing OR there are two or more flagsverdict: NEEDS_WORKwhen there is exactly one flag (and disclosure is present)verdict: READY_TO_SHIPwhen there are none
Return the flag list. The harness prints the campaign id. Expected output:
draft_missing_gate
flag: missing_disclosure
flag: missing_approver
flag: no_campaign_receipt
verdict: BLOCKED