# Corpus Licensing **Open Question OQ-01:** When does the 500-PDF private regression corpus become available, and what is its licensing for CI use? **Resolution:** All PDF fixtures in `tests/fixtures/` are synthetically generated by the pdftract project itself and carry no external licensing restrictions. ## Fixture Licensing Status ### 100% Synthetic / Generated Every PDF in the test fixture corpus is generated by one of the following in-repository generation scripts: - **Encryption fixtures:** `generate_encrypted_fixtures.py`, `generate_encrypted_fixtures.rs` - **Unicode/encoding fixtures:** `generate_unicode_recovery_fixtures.rs`, `generate_unmapped_glyphs.rs`, `gen_unmapped_comprehensive.rs` - **CJK fixtures:** `generate_cjk_with_tounicode.rs` (uses Adobe CIDs and standard CMaps) - **Vector fixtures:** `generate_vector_cer_corpus.py` - **Scanned fixtures:** `generate_scanned_fixtures.py` (rasterized from vector sources via `pdftoppm + img2pdf`) - **OCR fixtures:** `generate_ocr_fixtures.rs` - **Tagged PDF fixtures:** `generate_tagged_fixtures.rs` - **Form fixtures:** `forms/generate_form_fixtures.py` See `tests/fixtures/PROVENANCE.md` for the complete generation audit trail. ### No External Content No fixture contains copyrighted material from: - Research papers (arXiv, SSRN, etc.) - Books or published works - Proprietary corporate documents - Real-world invoices, contracts, or receipts - Any content requiring permission for CI use ### PDF Version Claims All fixtures that declare a PDF version (1.4, 1.7, 2.0) are generated to those specifications via: - `lopdf` (Rust) for PDF 1.4-1.7 - Custom PDF 2.0 construction for encryption test fixtures (AES-256, V=5, R=5) ## Licensing for CI Use ### Public CI (GitHub Actions, Argo Workflows) **Status: ✅ Cleared for all CI use** All fixtures may be: - Checked into the repository - Copied into CI containers - Embedded in test binaries - Distributed via GitHub releases - Used for benchmarking and regression testing No attribution, permission, or licensing review required for any fixture. ### Private 500-PDF Corpus **Status: Not applicable to v1.0.0** The plan references a "500-PDF private regression corpus" in OQ-01 and R6, but this corpus: 1. Does not yet exist 2. Is NOT required for v1.0.0 sign-off 3. Would be sourced post-v1.0.0 only if real-world accuracy gaps surface All v1.0.0 test coverage comes from the synthetic fixtures documented above. ## Generation Script Licensing All fixture generation scripts are: - Written by the pdftract project (Python 3, Rust) - Licensed under the project's primary license (MIT/Apache-2.0) - Free of external dependencies that would impose copyleft on generated fixtures ## Verification To verify no external licensing constraints: ```bash # All fixtures have generation scripts find tests/fixtures -name "*.pdf" -exec grep -l "Generated by" {} \; | xargs -I {} bash -c 'grep "{}" tests/fixtures/PROVENANCE.md' # No fixture references external sources ! grep -r "arXiv\|SSRN\|ISBN\|Copyright.*20[0-9][0-9]" tests/fixtures/PROVENANCE.md ``` ## References - Plan Open Question OQ-01 (line ~512) - Plan Risk R6 (line ~560) - `tests/fixtures/PROVENANCE.md` — complete fixture audit trail - `tests/fixtures/generate_*.py` — fixture generation scripts