Fleet changelogs · dev.ecs0.net
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

Changes Made

  1. 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, and stats.
    • Added product and executable target definitions in Package.swift.
    • Updated build.sh to stage, lipo verify, and codesign dist/rdreceipt-mcp.
  2. Hard OCR Timeout Guards:
    • Added OCRError.timeoutExceeded(timeoutSeconds: Double) in OCRError.swift.
    • Added structured concurrency task group overloads in VisionOCRService.swift with thread-safe SendableHolder for CGImage/CVPixelBuffer.
    • Authored OCRTimeoutTests.swift validating both timeout triggering and standard completion.
  3. On-Device ReceiptClassifier & Benchmark Harness:
    • Ported ReceiptClassifier.swift into Packages/rdRECEIPT/Sources/rdRECEIPTParser/ReceiptClassifier.swift supporting tolerant camelCase/snake_case decoding.
    • Added benchmark-classifier subcommand to rdRECEIPTCLI with latency reporting and distribution stats.
    • Authored DocumentClassificationFixtureTests.swift (7/7 cases verified against rdRECEIPT_document_classification.json) and BenchmarkReceiptFixtureTests.swift (5/5 cases verified against ground_truth).
  4. App Store Privacy Manifests & Universal Purchase Parity:
    • Created PrivacyInfo.xcprivacy declaring NSPrivacyTracking: 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, and apps/RDReceipt/Packages/rdRECEIPT/Sources/rdRECEIPTApp/Resources/PrivacyInfo.xcprivacy.
    • Staged directly into RDReceipt.app/Contents/Resources and ReceiptRoo.app/Contents/Resources.
    • Synchronized bundle identifier in apps/ReceiptRoo/project.yml and apps/RDReceipt/Apps/ReceiptRoo/project.yml to com.eastcoastscience.ReceiptRoo across macOS and iOS targets.
  5. 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).
  6. Release Builds & Universal2 Verification:
    • apps/RDReceipt/build.sh: Generated universal fat binaries (x86_64 arm64) for RDReceipt.app, rdreceipt, and rdreceipt-mcp.
    • apps/ReceiptRoo/build.sh: Generated universal fat binaries (x86_64 arm64) for ReceiptRoo.app and receiptroo.

Verification Evidence

Fleet Synchronization

Rollback / Undo