What
Nine suites cover the answer pipeline; sprout identify (ADR-0010) has none. The design promises the visual match only selects a species, is always labelled "a visual match, not a cited fact", abstains when the match is not in the corpus, and shows rejected candidates (R8). Nothing measures those promises.
Add a tenth suite, identification. Fixtures are small committed images (synthetic or CC0), each labelled in-corpus species, out-of-corpus species, or not-a-plant. The offline provider is the deterministic stub; a Pl@ntNet cassette is optional and never required. Cases assert: the selector abstains and falls back to "type the plant's name" when the top candidate is not in the corpus; the rendered output never contains the species as an uncited fact; rejected candidates appear with scores; and the follow-on question flows through the safety suite's checks in EN and ES. A coverage gate asserts every corpus species has at least one fixture.
Why it matters
Photo-ID is where grounding is most fragile (USER-RESEARCH theme 4), and confident-wrong is the residual harm. A suite that can fail on a planted regression is the only way the selector-not-fact contract stays true.
Scope
- Suite module, YAML cases, fixture directory with a license manifest, report panel,
claims-check count updates.
- Statistical power per FIX-12: n at or above 30.
Out of scope
- A new vision provider.
- Grading identification accuracy against a public benchmark.
Done when
- The suite runs in
make eval with no network.
- A stub returning an out-of-corpus species at high confidence must abstain; a planted regression fails.
- A missing fixture for a corpus species fails the coverage gate.
- README suite counts regenerate through
claims-check.
Pointers
Proposed with AI assistance.
What
Nine suites cover the answer pipeline;
sprout identify(ADR-0010) has none. The design promises the visual match only selects a species, is always labelled "a visual match, not a cited fact", abstains when the match is not in the corpus, and shows rejected candidates (R8). Nothing measures those promises.Add a tenth suite,
identification. Fixtures are small committed images (synthetic or CC0), each labelled in-corpus species, out-of-corpus species, or not-a-plant. The offline provider is the deterministic stub; a Pl@ntNet cassette is optional and never required. Cases assert: the selector abstains and falls back to "type the plant's name" when the top candidate is not in the corpus; the rendered output never contains the species as an uncited fact; rejected candidates appear with scores; and the follow-on question flows through the safety suite's checks in EN and ES. A coverage gate asserts every corpus species has at least one fixture.Why it matters
Photo-ID is where grounding is most fragile (USER-RESEARCH theme 4), and confident-wrong is the residual harm. A suite that can fail on a planted regression is the only way the selector-not-fact contract stays true.
Scope
claims-checkcount updates.Out of scope
Done when
make evalwith no network.claims-check.Pointers
src/sprout/identify.py,src/sprout/providers/plantnet.py,src/sprout/providers/deterministic.py,src/sprout/eval/suites/,docs/adr/0010, PR feat(identify): show rejected visual-match candidates on fallback (R8/E8) #91Proposed with AI assistance.