Tour-Boundary Labeling Policy
Why this needs a decision
leasing only, some tour only, some both. A wording fix that made the small test set 6× better made the full benchmark worse, because it satisfied one convention and violated the other two. Until one convention is chosen, the tour/leasing boundary (about half of all remaining labeler misses) cannot improve.
Context: accuracy today is 93.7% on live-traffic training data / 88.5% held-out, against the 99% minimum bar. The gold-consistency pass already fixed 6 provably wrong labels under 2 written policy rules; this page decides the rules it could not write alone.
Decision 1 — When does a conversation earn the tour label?
The shape in question: a lead expresses tour interest ("I'd like to schedule a tour", "can I come see it?") but no specific day/time is agreed in the thread.
A. Intent earns the label: any caller-initiated tour request =
tour (usually alongside leasing).The label tracks what the caller is trying to do, not how far they got. Matches how the operator thinks ("who's trying to tour?"), matches the sibling adversarial fixtures we already corrected, and is the easiest rule for both the model and future labelers to apply consistently — no judgment call about how "pinned" a time is. Scheduling state (booked / not booked) already lives on the Tour row, so the label doesn't need to carry it.
tour only once a concrete day/time is agreed; bare interest stays leasing.This is what the current prompt rule intended. Keeps
tour high-precision ("labeled tour = a tour actually in motion"), but requires a judgment call on every borderline thread — which is exactly where both the model and the historical labelers have been inconsistent.
tour the moment the caller engages any tour offer, even passively.Widest net; makes almost every leasing thread also a tour thread. Cheapest to apply but dilutes the label's meaning for the operator view.
Decision 2 — Promote the corrected gold set?
The consistency pass corrected 6 of 778 labels under written policy rules (5 tour→leasing-only, 1 renewal→+maintenance), each traceable to a rule, one judge suggestion rejected and documented. The corrected file sits beside the original in S3 (camellia-gold-conversations-corrected-2026-08-20.jsonl); benchmarks currently still run against the original.
A. Promote it as the canonical benchmark gold now. The corrections are small, documented, and policy-traceable; keeping two golds invites split-brain numbers. (If Decision 1 lands on option A, a follow-up automated pass re-adjudicates the tour-boundary slice under that rule the same way.)
Decision 3 — The noise floor vs. the 99% bar
Three benchmark runs with zero changes scored 93.1%, 93.4%, 93.9% — a ±0.8-point spread from the model's own run-to-run variance (3 of 378 conversations flip on their own). At a 99% bar, the measurement itself must be far steadier than that.
A. Make the borderline shapes deterministic: expand the pre-rule layer (code, not model) for the recurring templates, and keep majority-of-3 voting only for genuinely ambiguous threads.
The recurring boilerplate ("just circling back…", PMS wrappers, routing menus) is exactly matchable in code — zero variance, zero cost. The model then only votes on the residual, shrinking both noise and spend.
What happens after the decisions
| Decision | Immediate follow-through (automated) |
|---|---|
| D1 (either way) | The chosen convention goes into the labeling-policy doc + the classifier prompt in one PR; the tour-boundary gold slice is re-adjudicated by judge under it; the round-3 micro-corpus becomes its regression suite. |
| D2 | Benchmark runner repointed at the canonical gold; PROGRESS trail records the switch date so numbers before/after are never compared naively. |
| D3 | Pre-rule expansion ships behind the existing fail-open pattern with fail-before tests per template. |
Sources: hardening branches fede/labeler-hardening-round2 (merged), fede/labeler-gold-round3 (PR open); policy doc docs/planning/labeler-gold-labeling-policy.md; noise-floor and contradiction evidence with conversation ids in the branches' PROGRESS.md. Built by Claude Fable 5.