Audited on 2026-04-01 against local branch main.
┌──────────────────────────────────────────────────────────────┐
│ grain · current state · 2026-04-01 │
│ ────────────────────────────────────────────────────────── │
│ ✓ scan → ocr → parse → save │
│ ✓ receipt list + detail view │
│ ✓ analytics: category · brand · merchant │
│ ✓ product index + brand catalog │
│ ✓ ci: build + test on every pr │
│ ────────────────────────────────────────────────────────── │
│ ✗ receipt image not persisted │
│ ✗ edit from scan proof (todo button) │
│ ✗ manual entry fallback (todo button) │
│ ○ bank transaction import (model exists, no ui) │
│ ○ user-facing error states (silent print) │
└──────────────────────────────────────────────────────────────┘
Grain has a healthy proof-of-concept core: scan receipts, parse text, store receipts, browse details, and view analytics.
The main project risk is not architecture. The main risk is product completeness and scope discipline for MVP.
| Area | Current Status | Notes |
|---|---|---|
| Platform and stack | iOS 17+, SwiftUI, SwiftData, Vision, Swift Charts | Aligned with ADRs |
| Dependencies | Apple frameworks only | Aligned with ADR-0003 |
| Storage strategy | Local only | Aligned with ADR-0005 |
| Core flow | Scan -> OCR -> parse -> save -> list/detail | Working at POC quality |
| Analytics | Receipt/category/merchant aggregations and charts | Working |
| Product index | Product and brand indexing from receipt items | Working |
| CI workflow | Build + test workflow exists | Present in .github/workflows/build.yml |
- Receipt list plus button is still a TODO (manual receipt entry not wired).
- Scan proof Edit button is still a TODO.
- Settings routes are placeholders (Export, Import, Tax Categories, Deduction Rules).
- Receipt image persistence is not wired to Receipt.imageData.
- BankTransaction model exists but has no import, matching, or UI flow.
- SpendingAnalytics is persisted as a model even though it behaves like derived data.
- OCR parser is still regex-based and fragile on real receipt variety.
- Service/view errors still rely on print-based handling in key paths.
- Unit tests exist for model coverage, but service/parser regression coverage is still limited.
| Capability | Current | Ideal MVP | Delta |
|---|---|---|---|
| Capture and save receipt | Works | Works reliably with image attachment | Persist imageData and add validation |
| Parse receipt content | Works for basic receipts | Robust for grocery, pharmacy, restaurant variants | Add parser test corpus and parser improvements |
| Review and edit scanned receipt | Partial | User can fully correct parsed output | Wire Edit flow from scan proof |
| Manual receipt entry | Missing | Available as fallback | Build minimal manual entry screen |
| Expense analytics | Works | Works with trustworthy totals and period filters | Add validation tests and edge-case handling |
| Error UX | Weak | User-facing recoverable errors | Replace silent catches with alert states |
| CI confidence | Moderate | Green build and test on every PR | Keep workflow healthy and enforce checks |
- Architecture choices are coherent and intentionally constrained.
- Codebase layout is understandable and suitable for iteration.
- Delivery pace is high with active issue and PR throughput.
- Backlog contains out-of-scope or conflicting items for current local-only MVP.
- Several old issues are now completed by merged PRs and should be closed.
- MVP definition needs explicit acceptance criteria so feature work does not sprawl.
╔══════════════════════════════════════════╗
║ MVP PRIORITY LADDER ║
╠══════════════════════════════════════════╣
║ 1 backlog hygiene close stale issues ║
║ 2 manual entry biggest ux gap ║
║ 3 scan proof edit wire todo button ║
║ 4 image persistence wire imageData ║
╠══════════════════════════════════════════╣
║ 5 parser reliability test corpus ║
║ 6 error ux replace print() ║
╠══════════════════════════════════════════╣
║ ✗ cloud sync deferred (adr-0005) ║
║ ✗ backend api deferred ║
╚══════════════════════════════════════════╝
- Stabilize backlog hygiene:
- Close completed and out-of-scope issues.
- Keep only active MVP issues in the next milestone lane.
- Close MVP usability gaps:
- Manual entry fallback.
- Scan proof edit flow.
- Receipt image persistence.
- Improve reliability for real testing:
- Parser regression test set.
- User-facing error states.
- Delay non-MVP platform expansion:
- Cloud sync, auth, backend API, and server-side OCR stay deferred unless ADR scope changes.