# Seed test plan for a lifecycle marketing audit. Copy, fill and get approval before any test runs.
# Rules: test workspace where one exists, otherwise an internal test group; mailboxes and numbers the team
# controls; never real customer profiles; never load against vendor APIs; list every record created.
# A person the user names runs each test. A test the agent runs goes through agent-write-safety with this
# approval. Record who ran each test in run_by.
# Refer to seeds by key only. Mailbox addresses and phone numbers stay in the platform seed list or the team's
# own register; never write them into this file or into chat.
audit: "<programme name> lifecycle audit, read <YYYY-MM-DD HH:MM UTC>"
environment: "<test workspace name, or production internal test group name>"
approved_by: "<role>, <YYYY-MM-DD>"
timezone_for_timestamps: "UTC"
seed_identities:
  - key: seed-01
    channel: email
    address: "not written here: a shared test mailbox the team controls, held in the platform seed list"
    notes: "Klaviyo does not accept @example.com addresses into event or profile processing, so use a real mailbox the team controls."
  - key: seed-02
    channel: email
    address: "not written here: held in the platform seed list"
    notes: "One-click and body-link tests (S04, S05); a second profile on the same mailbox serves S06."
  - key: seed-03
    channel: email
    address: "not written here: held in the platform seed list"
    notes: "Preference and stale-write tests (S03, S11)."
  - key: seed-sms-01
    channel: sms
    number: "<not written here: the user enters the controlled test number in the platform>"
    notes: "Only if an SMS sender is in scope (S07)."
tests:
  - id: S01
    rule: "JC01, JC02, JC09"
    setup: "Seed meets the entry condition through the real producer (not an import)."
    action: "Trigger the business event once."
    expected: "One entry and the first message within the documented delay."
    evidence: ["entry record with timestamp", "message received with headers saved"]
    result: "<pass | fail | not run: reason>"
    run_by: "<person the user named, or the agent through agent-write-safety>"
    records_created: []
  - id: S02
    rule: "JC04, JC05"
    setup: "Seed enters a multi-step journey."
    action: "Complete the goal during the first delay."
    expected: "Exit on the goal; no later message."
    evidence: ["exit record with reason", "no message after the goal timestamp"]
    result: ""
    run_by: ""
    records_created: []
  - id: S03
    rule: "PC04"
    setup: "Seed subscribed to two topics."
    action: "Turn one topic off in the preference centre."
    expected: "The other topic still sends; the switched-off topic stops in every sender."
    evidence: ["preference state per sender", "next send per topic"]
    result: ""
    run_by: ""
    records_created: []
  - id: S04
    rule: "PC03, FC08, DL07"
    setup: "Seed receives a marketing message from each bulk stream."
    action: "Use the mail client's one-click unsubscribe."
    expected: "Suppressed in every sender that can reach the address within the audit target of 1 hour."
    evidence: ["time of click", "time suppressed in each sender", "next scheduled send skipped"]
    result: ""
    run_by: ""
    records_created: []
  - id: S05
    rule: "PC04, DL07"
    setup: "Same as S04 on a second seed."
    action: "Use the body unsubscribe link instead of one-click."
    expected: "Scope matches what the page promises and what one-click does; no login or password; one page."
    evidence: ["scope reached by each mechanism", "login or password asked: yes or no", "pages to finish"]
    result: ""
    run_by: ""
    records_created: []
  - id: S06
    rule: "PC09, TD07"
    setup: "Two seed profiles sharing one controlled address, one unsubscribed."
    action: "Send a marketing message that targets both profiles."
    expected: "No marketing message reaches the address."
    evidence: ["send log for both profiles"]
    result: ""
    run_by: ""
    records_created: []
  - id: S07
    rule: "PC08"
    setup: "SMS seed opted in."
    action: "Reply STOP from the controlled number."
    expected: "No further SMS from any sender that can text the number."
    evidence: ["STOP timestamp", "opt-out state in each SMS-capable sender"]
    result: ""
    run_by: ""
    records_created: []
  - id: S08
    rule: "MH03, MH04"
    setup: "Seed assigned to the holdout through the real assignment path."
    action: "Make the seed eligible for optional journeys in every sender."
    expected: "No optional message from any sender; required service messages still arrive."
    evidence: ["send log per sender for the seed"]
    result: ""
    run_by: ""
    records_created: []
  - id: S09
    rule: "FC07, TD08"
    setup: "Seed with a known timezone whose local time is inside the quiet window."
    action: "Trigger an optional message."
    expected: "Held or aborted per the recorded setting; nothing delivered inside the window."
    evidence: ["send time in recipient local time"]
    result: ""
    run_by: ""
    records_created: []
  - id: S10
    rule: "FC04, FC09"
    setup: "Seed eligible for optional messages from two senders on the same day."
    action: "Trigger both, then a task-critical message."
    expected: "Policy cap holds across senders; the task-critical message is not blocked by broad campaigns."
    evidence: ["sends per sender with timestamps", "block reasons"]
    result: ""
    run_by: ""
    records_created: []
  - id: S11
    rule: "PC01, PC02"
    setup: "Seed opted out of a topic."
    action: "Wait past the next scheduled sync or import that writes the preference field."
    expected: "The opt-out stands in every sender; no optional send in that scope."
    evidence: ["preference history per sender", "sync run time", "send log"]
    result: ""
    run_by: ""
    records_created: []
  - id: S12
    rule: "TD07"
    setup: "Seed admin of two accounts in different states."
    action: "Trigger an account journey for one account."
    expected: "Message names the right account and its state."
    evidence: ["message content with account reference"]
    result: ""
    run_by: ""
    records_created: []
  - id: S13
    rule: "TD04"
    setup: "Historical seed profile created more than 30 days ago."
    action: "Run the import path with the documented gate on a one-row batch."
    expected: "Profile history updates; no live journey entry."
    evidence: ["entry log after the import", "import gate setting"]
    result: ""
    run_by: ""
    records_created: []
