Teaching it a crop it does not know

Exploratory — personal matcher still inactive the app asked a question; this is what the answer would be worth
a pepper plant in a garden

Your pepper plant. The app has no model for pepper, so it refused to diagnose it — and then asked you for something.

what the app said back
the app asking for a label

“Tell us what you see — your label helps us add it.”

That sentence is the entire teaching feature, and it is a promise: give us a label and the gap closes. The question worth answering before building any more of it is simple — if you answer, how much does it actually buy?

What a handful of your labels is worth

Measured on arabica coffee leaf rust — a crop with no model in the app at all. 1401 labelled leaves, 605 of them rusted. Guessing the commoner answer scores 57%; that is the number to beat.

89%with 20 examples, on a crop the app has never seen
57%what guessing gets you
49%with the labels shuffled — the control, and it collapses as it must
examples you give it1351020
the learned representation64%
52%–78%
79%
68%–86%
80%
69%–88%
85%
76%–88%
89%
85%–90%
a generic ImageNet network60%
49%–73%
67%
57%–75%
72%
63%–79%
75%
66%–80%
81%
75%–84%
colour alone — no learning66%
42%–76%
72%
62%–78%
73%
59%–79%
75%
69%–78%
76%
71%–78%
labels shuffled (must be chance)47%
23%–70%
49%
24%–78%
42%
28%–68%
51%
25%–77%
49%
22%–73%

Each cell is the median of 40 runs, 10th–90th percentile beneath. One draw of a small example set is not a measurement.

⚠️ Read the first column before the last one. With one example, plain colour beats the learned representation — 66% against 64%. Rust is orange; a histogram finds orange. Teaching does not become worth its machinery until about three examples (79% against 72%), and colour then stops improving at all — it is still 76% at twenty, where the representation reaches 89%.

So: one photograph is not teaching. A handful is. What earns its place is the fifth label and the twentieth — and the gap is still widening at twenty.

What the app does with your answer today

The workspace. Projects live on the device; nothing is uploa
The workspace. Projects live on the device; nothing is uploaded.
Any crop, any condition, in your words — with aliases, the p
Any crop, any condition, in your words — with aliases, the plant part, and a capture profile that makes no crop-specific quality claim.
Manual capture, here on the Simulator, which has no camera.
Manual capture, here on the Simulator, which has no camera. The app says exactly that rather than showing a frozen frame - and the deterministic inject-an-image route beside it is labelled as the test route it is.
And the part that matters: the personal comparison is report
And the part that matters: the personal comparison is reported INACTIVE, by name, instead of a score.
The Research Lab build does not compile the teaching UI at a
The Research Lab build does not compile the teaching UI at all — the lanes are kept apart in the binary, not by policy.

Define any crop and condition in your own words, photograph it, group the shots by plant, and record what you see. Your answer is frozen before any result is revealed, so a model score cannot nudge it. Everything stays on the device.

What it refuses to do, and why

The matching core is written and testable, and its output cannot encode a disease class, a probability or a learned region — so even a mistake cannot become a diagnosis. It is dormant because no encoder is cleared to feed it, and it says so by name:

stored reasonwhen
available_teaching_result_activation_rejected a provider returned a result anyway — it is replaced, and your photograph is still saved
personal_matcher_execution_failed inference raised — the sample is committed with no partial score

A preflight gate decides when that changes. It currently returns insufficient evidence, at 5 of 18 requirements, across 10 data sources of which none is yet eligible.

Every requirement, and what each one means
requirementwhat it means
canonical_audits_presentpasses
canonical_audit_contractpasses
probe_reconstruction_presentThe corpus audit has not been rebuilt from scratch and compared against the committed one, so the record cannot be shown to still describe the data.
probe_matches_git_index_auditsFollows from the above: with no rebuild there is nothing to compare.
encoder_checkpoint_rightsNo encoder is cleared. The candidate embedding is DINOv2's, and its licence for this use is unverified — there is no teaching_encoder_evidence.json at all.
canonical_leakage_gateThe corpus leakage audit does not yet come back with zero exact overlap, so a support image could reappear as a query.
eligibility_inventory_presentpasses
eligibility_inventory_exact_source_coveragepasses
eligibility_global_independence0 of 31,532 records carry the cross-partition independence evidence that would let support and query be called independent.
purpose_specific_rights0 of 10 sources declare rights for this specific purpose. Rights for research do not imply rights to store an embedding of the image.
physical_grouping0 of 10 sources record which physical plant each photo is of. Without it, teaching from one photo and testing on another of the same plant looks like success.
reviewed_labels0 of 10 sources carry labels anyone has reviewed.
required_controls0 of 10 sources declare the negatives and look-alikes a match has to be tested against.
source_denominator_inventory_lockedNo source has a complete no-exclusion inventory, so a quiet exclusion could not be detected.
eligibility_evidence_derivedThe eligibility rows are declared rather than derived from the data.
encoder_transfer_strataWith none of the above, the held-out-condition and held-out-crop strata come out empty — there is nothing to measure transfer against.
oriented_pixel_identities_verifiedNot reached. The cheap metadata gate failed first, so no image was decoded — which is the gate working as designed.
authorization_trust_anchors_committedpasses

Run it yourself: python scripts/run_teaching_fewshot.py --step preflight --run-id 20260922_demo, bound to commit a0d44abd8a.

The gate never decoded an image. The cheap metadata, rights and leakage checks failed first and it stopped — which is the ordering working, not a bug.

What it would take

Two things, and only one of them is engineering.

An afternoon in a garden

The failing requirements reduce to two facts that must be recorded as the photograph is taken and cannot be recovered later: which physical plant it is, and what a person says is wrong with it. That is why the 26 existing captures cannot be reused — their manifest records sample-to-plant mapping unknown, and no disease labels.

The measurement above says how many photographs per plant are worth taking: more than one, and the returns were still rising at twenty.

An encoder decision — yours

The representation above is DINOv2’s — not a declared output of any bundled model, and its licence for this use is unverified. Exporting it is a separate, gated decision.

What this page does not claim

Rebuilt with python scripts/render_app_demo.py --page teaching; the measurement is scripts/measure_teaching_fewshot.py and its artifact is data/derived/teaching_fewshot/coffee_rust.json.