rdmbair15m5-changelog-20260921-2049-milestone5-mcp-timeouts-privacy-sync
rdmbair15m5-changelog-20260921-2049-milestone5-mcp-timeouts-privacy-sync
Complete delivery of Milestone 5 across RDReceipt and ReceiptRoo,
including native MCP server (rdreceipt-mcp), hard OCR
timeouts, on-device classifier benchmark harness, Apple App Store
privacy manifests, Universal Purchase bundle ID parity, release fat
binary builds, full test suite passes, and canonical fleet sync to
rdmsm4x and GitHub remotes.
Scope
- Hosts:
rdmbair15m5(execution) andrdmsm4x(canonical hub) - Repositories:
apps/RDReceipt,apps/ReceiptRoo - Remote Targets:
git.ecs0.net(fleet) and GitHubrichhdoty/{RDReceipt,ReceiptRoo}(backup)
Changes Made
- Native MCP Server (
rdreceipt-mcp):- Implemented Swift 6 stdio JSON-RPC 2.0 MCP server in
Packages/rdRECEIPT/Sources/rdRECEIPTMCP/main.swift. - Wired
ZeroNetworkTrap.enforce()to guarantee zero network egress. - Implemented 6 MCP tools:
search_receipts,list_receipts,get_receipt,export_expenses,verify_math, andstats. - Added product and executable target definitions in
Package.swift. - Updated
build.shto stage, lipo verify, and codesigndist/rdreceipt-mcp.
- Implemented Swift 6 stdio JSON-RPC 2.0 MCP server in
- Hard OCR Timeout Guards:
- Added
OCRError.timeoutExceeded(timeoutSeconds: Double)inOCRError.swift. - Added structured concurrency task group overloads in
VisionOCRService.swiftwith thread-safeSendableHolderforCGImage/CVPixelBuffer. - Authored
OCRTimeoutTests.swiftvalidating both timeout triggering and standard completion.
- Added
- On-Device ReceiptClassifier & Benchmark
Harness:
- Ported
ReceiptClassifier.swiftintoPackages/rdRECEIPT/Sources/rdRECEIPTParser/ReceiptClassifier.swiftsupporting tolerant camelCase/snake_case decoding. - Added
benchmark-classifiersubcommand tordRECEIPTCLIwith latency reporting and distribution stats. - Authored
DocumentClassificationFixtureTests.swift(7/7 cases verified againstrdRECEIPT_document_classification.json) andBenchmarkReceiptFixtureTests.swift(5/5 cases verified againstground_truth).
- Ported
- App Store Privacy Manifests & Universal Purchase
Parity:
- Created
PrivacyInfo.xcprivacydeclaringNSPrivacyTracking: false, empty tracking domains/data collection, and required reason APIs:NSPrivacyAccessedAPICategoryFileTimestamp(C617.1),NSPrivacyAccessedAPICategoryDiskSpace(E174.1),NSPrivacyAccessedAPICategoryUserDefaults(CA92.1). - Staged in
apps/ReceiptRoo/Shared/PrivacyInfo.xcprivacy,apps/RDReceipt/Apps/ReceiptRoo/Shared/PrivacyInfo.xcprivacy, andapps/RDReceipt/Packages/rdRECEIPT/Sources/rdRECEIPTApp/Resources/PrivacyInfo.xcprivacy. - Staged directly into
RDReceipt.app/Contents/ResourcesandReceiptRoo.app/Contents/Resources. - Synchronized bundle identifier in
apps/ReceiptRoo/project.ymlandapps/RDReceipt/Apps/ReceiptRoo/project.ymltocom.eastcoastscience.ReceiptRooacross macOS and iOS targets.
- Created
- Test Suite Verification:
Packages/rdRECEIPT: 360 tests in 68 suites passed with 0 failures (rc=0).ReceiptRooTests: 20 tests in 1 suite passed with 0 failures (rc=0).
- Release Builds & Universal2 Verification:
apps/RDReceipt/build.sh: Generated universal fat binaries (x86_64 arm64) forRDReceipt.app,rdreceipt, andrdreceipt-mcp.apps/ReceiptRoo/build.sh: Generated universal fat binaries (x86_64 arm64) forReceiptRoo.appandreceiptroo.
Verification Evidence
lipo -archs apps/RDReceipt/dist/RDReceipt.app/Contents/MacOS/RDReceipt:x86_64 arm64lipo -archs apps/RDReceipt/dist/rdreceipt:x86_64 arm64lipo -archs apps/RDReceipt/dist/rdreceipt-mcp:x86_64 arm64lipo -archs apps/ReceiptRoo/dist/ReceiptRoo.app/Contents/MacOS/ReceiptRoo:x86_64 arm64lipo -archs apps/ReceiptRoo/dist/receiptroo:x86_64 arm64ls -la apps/RDReceipt/dist/RDReceipt.app/Contents/Resources/PrivacyInfo.xcprivacy: Present (1028 bytes)ls -la apps/ReceiptRoo/dist/ReceiptRoo.app/Contents/Resources/PrivacyInfo.xcprivacy: Present (1028 bytes)swift testinPackages/rdRECEIPT:Executed 360 tests, with 0 failures (0 unexpected) in 0.058sxcodebuild test -scheme ReceiptRooTests:Executed 20 tests, with 0 failures (0 unexpected) in 5.049s
Fleet Synchronization
apps/RDReceipt: Pushed commitcfd79eatogit.ecs0.netandgithub.com/richhdoty/RDReceipt.apps/ReceiptRoo: Pushed commitfd55602togit.ecs0.netandgithub.com/richhdoty/ReceiptRoo.- Canonical sync on
rdmsm4x: Rangit pullon both repos via SSH. Both checkouts fast-forwarded cleanly with working tree status 100% clean.
Rollback / Undo
git checkout HEAD~1on bothapps/RDReceiptandapps/ReceiptRooreverses all commits.