# M1 Validation Gate Before widening past the hard sample, trip-cluster must clear a quantified bar on a **deliberately hard slice** — a GPS-poor, multi-year, low-density window (a well-remembered old trip plus its surrounding everyday photos), **not** the easy phone-era last trip. ## Protocol 1. `categorize ingest --from --to ` (or `--tag `). 2. `categorize cluster`, then `categorize serve`. 3. Hand-label the slice: the true trip boundaries + which surrounding photos are non-trip. 4. Compare candidate clusters against the labels. ## Acceptance bar (record actual numbers per run) | Metric | Definition | Target | |--------|------------|--------| | Trip-boundary precision | proposed boundaries that are real | ≥ 0.8 | | Trip-boundary recall | real boundaries proposed | ≥ 0.8 | | Coverage-flag recall | in-window missing-tag assets surfaced | ≥ 0.9 | | Over-split rate | extra clusters per real trip | ≤ 0.5 | | False-cluster rate | clusters that are pure noise | ≤ 0.1 | If unmet, tune `--gap-factor` / seed-span / confidence thresholds — do **not** widen the backlog. See the F4 open question (everyday cluster blow-up): observe the real cluster count on a representative subset first, then choose the surfacing/collapsing strategy.