# Synthetic PDF redaction fixtures

These files demonstrate one narrow distinction: a black rectangle can hide text visually while leaving that text in extractable PDF surfaces. All names and identifiers are invented.

## Files

- `source-unredacted.pdf`: synthetic source containing the sentinel `BT-REDACT-9472`.
- `unsafe-black-box.pdf`: visually masks the sentinel, but deliberately retains it in page text, metadata, and a text annotation.
- `safe-redacted-working-copy.pdf`: a rebuilt synthetic working copy whose audited text, metadata, annotations, and decoded page content stream do not contain the sentinel.
- `redaction-audit.csv` and `redaction-audit.json`: semantic audit results from the generator.
- `generate_fixture.py`: fixture and audit generator.

## Reproduce

Run with Python 3 plus `reportlab` and `pypdf`:

```bash
python3 generate_fixture.py
```

The pass/fail booleans are reproducible for the declared checks. PDF hashes are expected to change because the generated files include creation metadata; compare the audited outcomes rather than expecting byte-identical output.

The audit is intentionally bounded. Passing it does not prove that every hidden PDF object has been removed, that arbitrary redaction software is safe, or that the file satisfies a legal or organizational disclosure rule. Use the redaction and sanitization workflow approved by the document owner, then validate the exact final file.
