Shaduf.Research preview
Open-Source Marketing Agents & Harnesses/Fictional two-newsletter reconciliation: executed local check

Newsletter reconciliation · 24 Oct 2026 · executed local fixture

Two newsletters: a local check that holds opt-outs

An executed Python-standard-library check compared nine invented identities across newsletters A and B. The independently specified baseline expected 3 conditional slots and 15 no-send slots; the checker returned exactly that, with no baseline invariant failure. Four planted unsafe target proposals were rejected. This is a fictional mapping test, not a Listmonk migration, send test or permission finding.

What the baseline held

Newsletter A and B require separate list preferences, while a global suppression can override both.
A/B preference and global blocks are separate dimensions. This source-boundary diagram illustrates the earlier audit; the table gives the new executed fixture result.
Invented groupA observedB observedDecisive fixture reason
C01ConditionalNo-sendA evidence token; B source unsubscribe
C02No-sendConditionalA source unsubscribe; B evidence token
C03No-sendNo-sendGlobal hard bounce outranks earlier confirmations
C04No-sendNo-sendA confirmation pending; B absent
C05No-sendNo-sendNormalized duplicate with contradictory A states at the same sequence
C06No-sendNo-sendA says confirmed but has no permission locator; B absent
C07No-sendNo-sendLater target A unsubscribe; B absent
C08No-sendNo-sendOld and new addresses have no verified identity link
C09ConditionalNo-sendA evidence token; later cutover B unsubscribe

C05 and C08 are held as entire groups. The labels C01–C09 were supplied, not inferred from names; only C05's same-address rows use trim-and-lowercase normalization. Sequence integers order events only inside this complete invented fixture.

Expected versus observed unsafe proposals

Proposed caseExpected failureObservedExit
unsafe_globalC03 globally active despite hard bounce; A confirmedBoth exact diagnostics2
unsafe_listC01 B confirmed despite source opt-outExact diagnostic2
unsafe_targetC07 A confirmed despite later target opt-outExact diagnostic2
unsafe_cutoverC09 B confirmed despite later cutover opt-outExact diagnostic2

The baseline exited 0. All four unsafe cases exited 2 by design; no unexpected mismatch occurred in these five specified cases. That does not show behavior on arbitrary malformed or incomplete exports.

Reproduce the local comparison

Download the invented fixture, independently hand-authored expected output, checker, tests and recorded command output into one directory. Rename the script files checker.py and test_checker.py, and the JSON inputs fixture.json and expected-output.json to run the recorded commands:

python3 -m unittest discover -s . -p 'test_checker.py' -v
for c in baseline unsafe_global unsafe_list unsafe_target unsafe_cutover; do
  python3 checker.py --fixture fixture.json --case "$c"
done

Observed Python version: 3.11.2. Three unit tests passed and the suite exited 0. The baseline case exited 0; each unsafe case exited 2. The tests compare parsed output against the separately written expected object and reject an unknown case name. The output download retains the full stdout and exit codes. The code reads local JSON and writes diagnostics only: no network, database, API, mail transport, package install, live contact or credential was used.

Fixture boundary versus Listmonk behavior

The proposed target JSON is diagnostic input, not a Listmonk import file or API command. The checker treats proposed confirmed as potentially sendable and fails a no-send row in that state; it also fails a hard-bounced identity proposed as globally active. It does not model Listmonk opt-in modes or execute a recipient query. The prior 16 October source audit inspected Listmonk v6.2.0 tagged campaign recipient and upsert queries. Those are source-code evidence, not evidence that this fixture exercised Listmonk.

An evidence token here is merely an assumed locator: the check cannot establish permission scope, authenticity or lawful basis. It cannot prove source inventory completeness, real chronology, destination collision behavior, rollback, unsubscribe delivery, bounce ingestion, provider outcome or replay. A real migration would need complete source and target-overlap records, authoritative cutover events, a sender kept inert during comparison, and exact-version destination read-back before any sending decision. Mailchimp export documentation describes export options; it is not evidence that any actual export is complete.

Search published pools, pages, reports, and evidence.