rdmsm4x-changelog-20260827-1622-scanroo-prototype-milestone-resume
rdmsm4x-changelog-20260827-1622-scanroo-prototype-milestone-resume
Finished and locally integrated ScanRoo's remaining reversible prototype milestone work so the project now has a tested capture-to-processing-to-persistence-to-export path instead of only scaffolded components.
Scope
- Host:
rdmsm4xonly. - Canonical project:
/Users/richh/dev/apps/scanRoo. - Task branch/worktree:
codex/scanroo-milestone-resume-20260827at/Users/richh/dev/_worktrees/rscan.app/codex-scanroo-milestone-resume-20260827. - Starting commit:
9bcfae9ab52a8406e8c5e8875c18fdbbabbc6be5. - Integrated commit:
859148f50bb5fb0acb755dfa9fb7e4eef1b3437b. mainwas advanced locally by fast-forward only. No push, PR, release, signing, device install, deployment, CloudKit production operation, bundle-ID change, RDReceipt architecture decision, publication, or destructive cleanup occurred.
Project files changed
.codex/environments/environment.tomlApps/Mac/MacCaptureView.swiftApps/Mac/RScanMacApp.swiftApps/Mobile/RScanMobileApp.swiftApps/Vision/RScanVisionApp.swiftDesign/IconComposer/Layers/background.svgDesign/IconComposer/Layers/kangaroo.svgDesign/IconComposer/Layers/magnifier.svgDesign/IconComposer/Layers/papers.svgDesign/IconComposer/README.mdISSUES.mdPRD.mdPackages/ScanRooKit/Sources/RScanPersistence/AssetFileStore.swiftPackages/ScanRooKit/Sources/RScanProcessing/ImageRenditionGenerator.swiftPackages/ScanRooKit/Sources/RScanProcessing/PageRectangleDetector.swiftPackages/ScanRooKit/Sources/RScanProcessing/ScanRasterImageCodec.swiftPackages/ScanRooKit/Sources/RScanUI/CaptureReviewModel.swiftPackages/ScanRooKit/Sources/RScanUI/ScanDetailView.swiftPackages/ScanRooKit/Sources/RScanUI/ScanExportService.swiftPackages/ScanRooKit/Sources/RScanUI/ScanIngestionService.swiftPackages/ScanRooKit/Sources/RScanUI/ScanRooAppModel.swiftPackages/ScanRooKit/Sources/RScanUI/ScanRooRootView.swiftPackages/ScanRooKit/Sources/RScanUI/ScanRooRuntime.swiftPackages/ScanRooKit/Tests/RScanExportTests/SearchablePDFExporterTests.swiftPackages/ScanRooKit/Tests/RScanProcessingTests/PageRectangleDetectorTests.swiftPackages/ScanRooKit/Tests/RScanUITests/ScanIngestionServiceTests.swiftPackages/ScanRooKit/Tests/RScanUITests/ScanRooAppModelTests.swiftSESSION-STATE.mdSTATUS.mddocs/validation/2026-08-27-scanroo-milestone-resume.md
Adjacent records changed
/Users/richh/dev/PROJECTS.md/Users/richh/Library/Mobile Documents/com~apple~CloudDocs/Codex/projects/AGENTS.md principles/PROJECTS.md/Users/richh/.agent-coordination/checkins/codex-rdmsm4x-scanroo-milestone-resume-20260827.json- This changelog file and its matching Apple Notes entry in the
canonical iCloud
llmlogfolder, titledrdmsm4x - changelog - scanroo-prototype-milestone-resume - codex - 01a04089 - scanRoo - 20260827-1623.
Behavior delivered
- Added verified
.previewand.exportimage renditions while keeping captured originals immutable. - Added real pixel-derived classifier signals for whiteboard, marker, and photographic content.
- Added Vision page-rectangle detection and conditional perspective/illumination correction that refuses fabricated full-frame geometry.
- Added a SwiftData-backed export service and detail UI for searchable PDF, Markdown, text, HEIF, JPEG, and PNG artifacts.
- Added macOS captured-page thumbnails, ordered review, per-page removal, explicit Cancel and Save Scan actions, and an empty-save guard.
- Added the project-local Codex Run action for
./script/build_and_run.sh --verify. - Added a deterministic editable SVG icon-source packet and immutable-raster hash manifest.
Commands and verification
swift test --package-path Packages/ScanRooKit --parallel— passed repeatedly before commit and again after local integration: 58 tests, 15 suites, zero failures.xcodegen generate— passed with XcodeGen 2.46.0 and left no unintended generated-project diff.- Fresh unsigned
xcodebuildcommands forRScanMac,RScanMobile, andRScanVisionusing isolated DerivedData — all returned exit 0. ./script/build_and_run.sh --verify— returned exit 0, reportedBUILD SUCCEEDED, and launched the exact worktree binary as PID 97792.- Exact-path accessibility/screenshot inspection — confirmed the current three-column library UI, empty-state guidance, filters, search, import/sync controls, and truthful no-camera state.
- Built Info.plist inspection — all products use
app.scanroo.ScanRoo; macOS/iOS have point-of-use camera descriptions; visionOS has no camera purpose string. - PDFKit/ImageIO reopen tests — two-page searchable PDF plus HEIF/JPEG/PNG dimension reopening passed.
xmllint --noout Design/IconComposer/Layers/*.svg— passed.- SHA-256 reproduction — every icon raster in
Design/IconComposer/README.mdmatched its recorded hash. git diff --checkandgit diff --cached --check— passed.- Gitleaks full-repository and staged scans with redaction — no leaks found.
- Canonical
mainpost-merge status — clean at859148f50bb5fb0acb755dfa9fb7e4eef1b3437b, nine commits ahead of unchangedorigin/main.
Preservation and backup
- Task worktree and branch are retained at the paths above.
- The pre-integration RDReceipt-originated issue patch remains in
stash@{0}at objectddc87522688d2b0e8e8c5a0e3e25977f1b227ec4. - Recovery tip
47aff4e…, migration evidence, historical worktrees, and every original icon input were left unchanged. - No ScanRoo process remains running after validation.
Undo
- Because
mainadvanced by one local fast-forward commit and nothing was pushed, the non-destructive rollback reference is the preserved task branch plus parent commit9bcfae9ab52a8406e8c5e8875c18fdbbabbc6be5. - Do not reset or delete automatically. If rollback is desired, first
preserve any later work, then create a new revert commit for
859148f50bb5fb0acb755dfa9fb7e4eef1b3437bor explicitly coordinate a local branch move. - Restore the two PROJECTS entries from their previous Git/iCloud versions if the milestone commit is reverted.
Outstanding owner/human actions
- Accept Apple's first-run Icon Composer software-license agreement if
desired, then import the four SVG layers and save/visually approve
Design/IconComposer/ScanRoo.icon. The agent did not accept the agreement. - Perform one real-paper capture on physical camera hardware and confirm it appears in the live library.
- Decide the canonical bundle identifier and whether RDReceipt consumes ScanRoo's ingestion layer.
- Separately authorize any production CloudKit, signing, notarization, TestFlight/App Store, push, publication, or distribution work.