# Audit joins and source recovery

Two complete bilingual guide/worksheet pairs with original controlled inputs and actual local checks. No real platform data, readers, customers or provider tests.

Complete results and limits are readable in the example files without Python. Optionally, with suitable Python already installed, in the extracted packet run python3 check-joins.py and python3 check-restores.py. Standard library only; no extra packages, network requests or credentials.

The join checker reads only bundled constructed inputs and compares its calculated four rows with joined-lineage.csv without overwriting files. The restoration checker creates its own tiny archives and fresh temporary subfolders beside the script, checks seven planned cases and removes those scratch copies. It accepts no real backup or working-folder argument.

workflow-protocol.json was saved before execution. observed-workflow-results.json contains actual results, protocol/script identities and limits. After the first join run, output writing was removed and the extra compound-key guard was exercised through an actual lookup; protocol and expected totals stayed unchanged, and the corrected checker was rerun.

Three source posts produce four tag rows and a naive 400 instead of 300 impression total despite the same 5% ratio. Of six actual separate archive copies, four pass manifest checks and one meets the declared source-reading task. The seventh case refuses an occupied owned exercise destination without extracting. These are not reader success rates, failure probabilities or time-saving claims.

Keep real completed worksheets and sources private. The exercises certify neither truth, provenance, rights, malware safety nor compatibility with all professional applications. source-checks.json records current sources and excluded retrievals.

file-identities.json lists 18 source files; manifest and ZIP are excluded from their own identities. The archive contains 19 entries including the manifest.
