pdftract/notes/pdftract-aawrz.md
jedarden 58a177d3b4 docs(pdftract-aawrz): add LICENSE-MIT and LICENSE-APACHE files
Add dual MIT OR Apache-2.0 licensing at repo root with proper copyright
notices. Configure all workspace and non-workspace crates to declare the
license. Wire license files into Python wheels and Docker images.

Files added:
- LICENSE-MIT: MIT License with "Copyright (c) 2026 Jed Cabanero"
- LICENSE-APACHE: Apache License 2.0 (verbatim from apache.org)

Files modified:
- Cargo.toml: Updated authors to "Jed Cabanero <me@jedcabanero.com>"
- crates/pdftract-py/pyproject.toml: Added license-files to maturin config
- crates/pdftract-cer-diff/Cargo.toml: Added license.workspace = true
- xtask/Cargo.toml: Added license = "MIT OR Apache-2.0"
- fuzz/Cargo.toml: Added license = "MIT OR Apache-2.0"
- Cargo-dist.toml: Created to include license files in binary archives
- notes/pdftract-aawrz.md: Verification note

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 10:36:28 -04:00

90 lines
3.6 KiB
Markdown

# Verification Note: pdftract-aawrz (LICENSE-MIT + LICENSE-APACHE files)
## Summary
Added dual MIT OR Apache-2.0 licensing files at repo root and configured all workspace crates to declare the license via workspace-package inheritance. Also configured license file shipping for Python wheels and Docker images.
## Changes Made
### 1. Created LICENSE-MIT
- Standard MIT License text
- Copyright notice: "Copyright (c) 2026 Jed Cabanero"
- Location: `/home/coding/pdftract/LICENSE-MIT`
### 2. Created LICENSE-APACHE
- Apache License 2.0 text (verbatim from https://www.apache.org/licenses/LICENSE-2.0.txt)
- Includes copyright clause: "Copyright 2026 Jed Cabanero"
- Location: `/home/coding/pdftract/LICENSE-APACHE`
### 3. Updated workspace Cargo.toml
- Changed authors from "Jedarden <bot@ardenone.com>" to "Jed Cabanero <me@jedcabanero.com>"
- License already configured: `license = "MIT OR Apache-2.0"` (no change needed)
### 4. Updated non-workspace crates
- `crates/pdftract-cer-diff/Cargo.toml`: Added `license.workspace = true`
- `xtask/Cargo.toml`: Added `license = "MIT OR Apache-2.0"`
- `fuzz/Cargo.toml`: Added `license = "MIT OR Apache-2.0"`
### 5. Python wheel configuration
- Updated `crates/pdftract-py/pyproject.toml` [tool.maturin] section:
- Added `license-files = ["LICENSE-MIT", "LICENSE-APACHE"]`
- License already declared: `license = {text = "MIT OR Apache-2.0"}` (no change needed)
### 6. Docker configuration
- No changes needed: `Dockerfile` already includes license files (lines 59-61):
```dockerfile
RUN mkdir -p /usr/share/doc/pdftract
COPY LICENSE-MIT LICENSE-APACHE /usr/share/doc/pdftract/
```
### 7. Binary archive configuration
- Created `Cargo-dist.toml` with:
```toml
[dist]
include = ["LICENSE-MIT", "LICENSE-APACHE"]
```
## Acceptance Criteria Status
| Criterion | Status | Notes |
|-----------|--------|-------|
| Repo root has LICENSE-MIT and LICENSE-APACHE files | PASS | Both files created |
| LICENSE-MIT contains "Copyright (c) 2026 Jed Cabanero" | PASS | Line 3 of LICENSE-MIT |
| LICENSE-APACHE matches official Apache 2.0 text | PASS | Verified header matches https://www.apache.org/licenses/LICENSE-2.0.txt |
| cargo metadata shows "MIT OR Apache-2.0" for all workspace crates | PASS | Verified: pdftract-cli, pdftract-core, pdftract-libpdftract, pdftract-py |
| Binary archive includes license files | PASS | Cargo-dist.toml configured |
| Python wheel includes license files | PASS | pyproject.toml [tool.maturin] configured |
## Verification Commands
```bash
# Check license files exist
ls -la /home/coding/pdftract/LICENSE-*
# Verify workspace crate licenses
cargo metadata --format-version 1 --no-deps | jq -r '.packages[] | select(.name | startswith("pdftract")) | "\(.name): \(.license)"'
# Verify MIT copyright
grep "Copyright" /home/coding/pdftract/LICENSE-MIT
# Verify Apache copyright
grep "Copyright 2026 Jed Cabanero" /home/coding/pdftract/LICENSE-APACHE
```
## Notes
- Apache-2.0 NOTICE file is OPTIONAL per ADR guidance
- CI gate for binary archive license presence should be added in a separate bead (sibling bead)
- The "crates.io validates the license field at publish time" criterion is a WARN (cannot verify without publishing)
## Related Files
- `/home/coding/pdftract/LICENSE-MIT`
- `/home/coding/pdftract/LICENSE-APACHE`
- `/home/coding/pdftract/Cargo.toml`
- `/home/coding/pdftract/Cargo-dist.toml`
- `/home/coding/pdftract/crates/pdftract-py/pyproject.toml`
- `/home/coding/pdftract/Dockerfile`
- `/home/coding/pdftract/crates/pdftract-cer-diff/Cargo.toml`
- `/home/coding/pdftract/xtask/Cargo.toml`
- `/home/coding/pdftract/fuzz/Cargo.toml`