WP-2: PDF composer + PageLayout (two-pass, atomic write, zero annotations) #3

Merged
kua-agent merged 1 commits from wp2/pdf-composer-20260831 into feat/shotdeck-20260830 2026-08-31 11:01:03 +00:00
Member

Implements SPEC-A1b-pdf.md (run shotdeck-20260830, rev 2).

What changed: Core/PDF/PageLayout.swift (pure geometry both orientations, tick-box x per D-12: 824 landscape / 577 portrait), Core/PDF/PDFComposer.swift (two-pass compose, header as page content only — zero PDFAnnotation, creator/subject metadata for the return-detector, atomic tmp+fsync+rename output per D-13), Tests/.../PDFComposerTests.swift (14 spec cases).

Gates: builder ran swift build + swift test and rendered a sample via pdftoppm (builder claim); independent agy verification incl. its own renders + visual judgement running against TEST-WP-2 before merge. Spec review REVIEW-GLM-A1b: BLOCKERS: 0.

🤖 Generated with Claude Code

Implements SPEC-A1b-pdf.md (run shotdeck-20260830, rev 2). What changed: `Core/PDF/PageLayout.swift` (pure geometry both orientations, tick-box x per D-12: 824 landscape / 577 portrait), `Core/PDF/PDFComposer.swift` (two-pass compose, header as page content only — zero PDFAnnotation, creator/subject metadata for the return-detector, atomic tmp+fsync+rename output per D-13), `Tests/.../PDFComposerTests.swift` (14 spec cases). Gates: builder ran swift build + swift test and rendered a sample via pdftoppm (builder claim); independent agy verification incl. its own renders + visual judgement running against TEST-WP-2 before merge. Spec review REVIEW-GLM-A1b: BLOCKERS: 0. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
kua-agent added 1 commit 2026-08-31 10:44:07 +00:00
kua-agent merged commit 96e31d17e0 into feat/shotdeck-20260830 2026-08-31 11:01:03 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mmd-it/shotdeck#3