pickList("lists", C.recipient_list_id, l => ({ v: l.id, main: l.name, sub: `${l.row_count} rows · ${l.valid_count} valid` }), "recipient_list_id", true); } else if (step === 3) { b.innerHTML = H("Step 3 — Subject lines") + hint(`Select subject line variations (up to ${OPT.limits.max_subjects}) and how they rotate across recipients.`) + pickList("subjects", C.subject_set_ids, s => ({ v: s.id, main: s.subject, sub: "" }), "subject_set_ids") + `
${["round_robin", "random", "fixed_first"].map(m => ` `).join("")}
`; } else if (step === 4) { b.innerHTML = H("Step 4 — HTML templates") + hint("Select one or more templates and how they sequence across recipients.") + pickList("templates", C.template_ids, t => ({ v: t.id, main: t.name, sub: "" }), "template_ids") + `
---PAYLOAD--- 12: message_type: "html", attach_mode: "none", attach_pdf: false, 302: message_type: c.message_type, attach_mode: c.attach_mode, 378: const am = C.attach_mode; 463:
Attachments
${C.attach_mode === "none" ? "none" : esc(C.attach_mode) + 464: (C.attach_mode === "pdf" && C.attach_pdf_template_id ? ` — template #${C.attach_pdf_template_id}` : "") + 465: (C.attach_mode !== "none" && C.attach_mode !== "pdf" && C.attachment_id ? ` — attachment #${C.attachment_id}` : "")}
502: $$('input[name="attMode"]').forEach(r => r.onchange = () => { C.attach_mode = r.value; if (C.attach_mode !== "pdf") C.attach_pdf = false; bindAttExtra(); renderStep(); }); 541: const mode = C.attach_mode; ---SCHEMA-VALIDATION--- app/api/routers/campaigns.py:39: attach_mode: str = "none" # none|pdf|file|image app/api/routers/campaigns.py:61: "attach_mode": {"none", "pdf", "file", "image"}, app/api/routers/campaigns.py:75: "message_type": c.message_type, "attach_mode": c.attach_mode, app/api/routers/campaigns.py:114: if data.attach_mode not in VALID_ENUMS["attach_mode"]: app/api/routers/campaigns.py:115: errors.append("attach_mode must be none|pdf|file|image") app/api/routers/campaigns.py:164: if data.attach_mode == "pdf": app/api/routers/campaigns.py:167: if data.attach_mode in ("file", "image") and not data.attachment_id: app/api/routers/campaigns.py:710: mode = data.get("attach_mode", "none") app/api/routers/campaigns.py:711: if mode not in VALID_ENUMS["attach_mode"]: