# Phase A — Phone MVP Product Spec

**Project:** AR Cherry Glasses / Phone MVP (FIELD lane)  
**Owner context:** James Grunsky — Handel Road trellis + Lodi / Stockton sweet cherries  
**Aligned with:** FIELD_BRIEF.md, ONE_PAGER.md, Claude job `2ee4d554` (chest-mount iPhone + Core ML + audio cue sketch)  
**Date:** 2026-09-04 (reconciled 2026-09-05)  
**Status:** Build-ready; ChatGPT reconciliation applied (scorecard / aided cue / trial record)

---

## 1. Goal

Ship a **chest-mounted iPhone** orchard prototype that shows a glanceable **READY / WAIT / MAYBE** ripeness cue in **&lt; 1 s**, bilingual EN/ES, **conservative READY** (high precision), offline-capable Core ML model, with a morning Brix calibration loop — proving the decision model before any glasses CapEx.

**Not in scope for Phase A:** industrial AR glasses fleet, NIR sugar meter, robot arm, continuous cloud video.

---

## 2. Hardware form factor (Claude alignment)

| Item | Spec |
| --- | --- |
| Device | iPhone already on ranch (recent A-series / Neural Engine preferred) |
| Mount | Chest harness / bib clip; camera aimed at fruit at arm’s length; hands free for stems/lugs |
| BOM target | Claude’s ~$260/rig sketch includes mount/straps **plus** provisional battery/headset/clicker line items — treat as **estimate pending James budget**, not mount-only |
| Output | On-device HUD overlay on phone screen + **optional short audio cue** (tone or bilingual word); voice **off by default** during pick |
| Power | Full morning shift; no cellular required for inference |

Chest mount is the Phase A truth path; phone-in-hand is for label/scout mode only.

---

## 3. Decision model (product rules)

### 3.1 States (color-blind-safe: shape + color + short word)

| State | EN | ES | Visual | When |
| --- | --- | --- | --- | --- |
| **READY** | READY | LISTO | Green filled check / circle | High confidence that visible surface meets **this variety/block** pick color threshold |
| **WAIT** | WAIT | ESPERA | Amber open pause | Clearly immature by color |
| **MAYBE** | MAYBE | DUDOSO | Blue dashed question | Borderline color **or** occlusion / glare / low confidence |
| **DEFECT** (MVP+) | DEFECT | DEFECTO | Red X | Obvious crack/rot/double — do not pack |

**Conservative READY:** Prefer false WAIT/MAYBE over false READY. Leaving a borderline cherry is cheaper than immature fruit on the line.

### 3.2 Inputs the model may use

- RGB frame (egocentric chest cam)
- Selected **variety** (Bing / Coral / Brooks / Rainier / other — James confirms Handel mix)
- Optional **block** id + morning **threshold offset** from Brix calibration
- Lighting confidence (sun vs deep shade → softens to MAYBE)

### 3.3 What the model must not fake

- Do **not** show °Brix as a precise number unless calibrated NIR is present (it is not in Phase A).
- Do **not** animate 3D meshes over fruit.
- If inference &gt; 1 s or tracking lost: **fail soft** — clear overlay / mute audio; never leave a stale READY on the wrong fruit.

---

## 4. Screens & flows

### 4.1 Cold start / shift start

1. **Splash → Variety** — picker or lead selects variety (default last-used).
2. **Mode** — `Pick` (HUD) vs `Label` (QC) vs `Calibrate` (morning).
3. **Mount check** — 3-second live preview: “Fruit fills center? Adjust chest angle.”

### 4.2 Pick mode (primary HUD)

- Full-bleed camera; **peripheral badge** only (not a film over the whole frame).
- Badge: icon + word (EN or ES per toggle).
- Optional thin secondary line: variety tag; confidence only if &lt; threshold (else hide).
- Tap badge → expand one line: “MAYBE — better view” / “WAIT — too light”.
- Fail-soft banner if model stalled: “Cue paused”.
- **Bilingual toggle** (EN | ES) sticky for shift; icons remain primary.

### 4.3 Morning Brix calibration (lead / QC, ~15 min)

1. Select variety + block.
2. For **N ≈ 20 fruit**: photo → enter refractometer Brix (+ optional firmness note) → color-card stage.
3. App computes suggested **color→READY threshold offset** vs last calibration; lead **Accept / Keep previous**.
4. Export tiny CSV/JSON for shop sync later.
5. Exit to Pick mode; phones for pickers do not need Brix UI.

### 4.4 Label mode (does not slow harvest)

- Scout/QC walks; captures frame + taps READY/WAIT/MAYBE/DEFECT + color stage.
- Tags: sun/shade, variety, consent flag already granted at crew level.
- Batched Wi-Fi sync at shop — no continuous cellular upload.

### 4.5 End of row / trial logging (minimal scorecard artifact)

Daily ingest counters (READY frames, confidence, active minutes) **cannot** measure lb/hr, culls, or comfort. Keep cloud ingest minimal (aggregates only). For Handel trials, export a **paired trial record** (local CSV is enough; join by `trial_id` + date):

| Field | Notes |
| --- | --- |
| `trial_id` | Unique per aided/control pair segment |
| `worker_pseudo` | Pseudonymous id — no legal names |
| `condition` | `aided` \| `control` |
| `variety` / `block` / `row` | Handel identifiers |
| `start_ts` / `end_ts` | Wall clock |
| `active_labor_sec` | Hands-on picking time (pause-aware) |
| `weighed_lb` or `lug_count` + conversion | Document conversion if used |
| `inspected_qty` | Fruit or lug sample denominator |
| `cull_count` / `cull_reasons` | Immature / defect / other |
| `comfort_1to5` | Worker self-score |
| `app_version` / `model_version` / `calibration_id` | Reproducibility |

Retry/replace: if a daily summary upload fails, keep the local CSV canonical and re-upload; do not invent frames/GPS streaming or a productivity leaderboard. Optional GPS/block stamp only if already collected for the trial — not required for Phase A shell.

---

## 5. Offline model

| Requirement | Detail |
| --- | --- |
| Runtime | Core ML on-device; no network for pick decision |
| Classes | READY / WAIT / MAYBE (+ optional DEFECT); or color-stage head mapped through variety thresholds |
| Latency | Median **&lt; 1 s** end-to-end detect→badge; stretch **300–500 ms** |
| Resolution | Keep input small enough for interactive rate (implementer chooses; prefer accuracy on color class over 4K) |
| Updates | Model bundle versioned; side-load / TestFlight; morning threshold offsets are **config**, not full retrain |
| Privacy | Frames stay on device by default; label export opt-in at shop Wi-Fi |

---

## 6. Audio cue + aided-trial output path

- Default for setup / scout / unaided baseline: **silent HUD** (screen badge only). Audio stays **opt-in** — never auto-enable.
- Claude’s sketch correctly notes pickers rarely look down at a chest phone. An **aided field trial** therefore requires a **perceptible cue path** the picker accepted before the row starts, without needing to look at the screen:
  1. **Preferred:** short distinct tones or spoken LISTO/ESPERA/DUDOSO (volume capped; not continuous chatter), worker-accepted at shift start; **or**
  2. **Demonstrated visible mount** where the badge stays in peripheral vision without looking down (document geometry in trial notes).
- Aided condition checklist (lead): cue enabled + worker OK’d; 30–60 s hands-busy mount check; audio-off fallback = normal unaided picking (do not count as aided).
- Do **not** treat an unseen silent badge as an intervention. Track-aware debounce (per fruit track id) must be validated before trial results count; no MAYBE spam.
- Mock at `/mock/` is a **HUD demonstrator** (four states, EN/ES, variety, fail-soft) — not a full Pick/Label/Calibrate navigation prototype.

---

## 7. Two scorecards (do not conflate)

ChatGPT reconciliation (2026-09-05): keep **one explicit scorecard with separate prototype vs spending decisions**. Bing remains a provisional demo default until James confirms Handel cultivars — not a confirmed Handel fact.

**Setup (target):** one trellis row (or matched pair); veteran unaided vs aided pickers (Claude ~4-worker A/B — final N with James). Four workers = exploratory pilot evidence, **not** a general causal claim. Report sample counts, READY TP/FP, matched-row or crossover design, labor time, weighed pounds, and cull denominators.

### 7.1 Phase A — technical validation (prototype / further experiments)

Passing this can justify more orchard experiments and a **desk** Phase B hardware shortlist. It does **not** approve glasses CapEx.

| Metric | Gate |
| --- | --- |
| READY precision vs crew-lead / packer color standard | **≥ 90%** on held-out + live audits |
| Median capture→cue latency | **&lt; 1 s** |
| Fail-soft | **Zero** observed stale READY on wrong fruit |
| Cull / immature rate | **No regression** vs unaided on same row window |
| Throughput tolerance | Declare before trial (default: no worse than **&lt; 5%** slowdown vs unaided). **≥12% lb/hr lift is not** a Phase A technical kill criterion |

### 7.2 Phase B — spending gate (glasses / fleet CapEx)

Preserve Claude’s stricter gate until James explicitly changes it. Average comfort (mean of 1–5 scores), not “majority ≥3” alone, unless James picks otherwise.

| Metric | Gate |
| --- | --- |
| Throughput | **≥ +12% lb/hr** aided vs control (same design as Claude §6) |
| Culls | **No worse** than control |
| Comfort | **Average ≥ 3/5** willingness to continue |

**Pass 7.1 only →** continue phone MVP + desk shortlist; **no** hardware spend.  
**Pass 7.1 + 7.2 →** James may authorize Phase B shortlist spend.  
**Fail precision (7.1) →** more labels + recalibration, not glasses.

---

## 7.5 Pack-house sizing (Morada / UNITEC)

Handel cherries pack at **Morada Produce (Linden, CA)** on a **UNITEC Cherry Vision** line (not TOMRA). **Provisional** pack-grade reference only (~10-row / ~26.6 mm) — **not** a Phase A production READY gate. Keep maturity (color) labels separate from size/grade; store caliper `diameter_mm` independently. Operational size cues need current Morada row-card confirmation + sensor-vs-caliper validation. Canonical short doc: `/docs/morada-sizing`.

## 8. Open questions (leave for James / ChatGPT — do not invent)

1. Handel cultivars year one: Bing only vs Bing+Coral+Rainier?  
2. 2027 harvest window dates for Handel.  
3. Packer color card + target (legal minimum vs premium mahogany/Brix).  
4. H-2A / crew size available for A/B; camera/glasses OK.  
5. Phase A budget cap; IP/partnership posture.

---

## 9. Build vs field dependencies

**Do not block UI shell** on cultivars, harvest dates, crew size, IP posture, or glasses SKUs.

**Before collection / aided trial (James + Grok):** cultivar/block + written packer color-card mapping; QC lead + Brix criterion; harvest window; crew/camera permission + retention plan; trial allocation + budget. IP/partnership gates external sharing, not local shell work. No 17 °Brix floor or hardware BOM is approved by this spec alone.

## 10. Deliverables checklist (this pack)

- [x] This spec (incl. 2026-09-05 ChatGPT reconciliation)  
- [x] LABEL_PROTOCOL.md  
- [x] mock/index.html HUD demonstrator  
- [x] HANDOFF_TO_CLAUDE.md  
- [ ] iOS app + Core ML (Claude — see also SyncView / metrics / fail-soft findings on job 87de1d1f)  
- [ ] Dataset collection kickoff (protocol ready; field dates TBD)

**Public copies:** served from ai-hub `/docs/*` and `/mock/`.
