Show the confidence, and say which curve it came from

FR-CULL-9 was read as "no fit, no number", so every library without 200
confirmed positive pairs showed "Confidence unavailable" on every
suggestion — which is every library, until enough confirmations exist to
fit one. The confirmations are made on this screen, ranked by the number
it was withholding, so the degraded state was also the permanent one.

There has always been a curve: Calibration::default is the reference
implementation's fitted MBF sigmoid, which is what clustering already
operates at. It is a published operating point, not an invention, and
what the requirement forbids is presenting it *as though it were
measured on this library*. So the percentage is shown, and the screen
says once, above the grid, where the curve came from.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-29 09:57:38 +02:00
co-authored by Claude Opus 5
parent 2fb3eb5d2d
commit c8e05831f4
7 changed files with 76 additions and 60 deletions
+15 -9
View File
@@ -27,7 +27,11 @@
//! person. Nothing else — bootstrapping positives from high cosine is circular,
//! fitting the calibration to the belief it was supposed to test.
//!
//! Which is why a fresh library has **no valid calibration**, and says so.
//! Which is why a fresh library has **no valid calibration** — no fit of its
//! own — and says so. It is not left without a curve: it uses the reference
//! implementation's fitted one ([`Calibration::default`]), which is a published
//! operating point rather than an invention, and the interface reports which of
//! the two it is speaking from.
/// Bins over cosine ∈ [-1, 1].
///
@@ -56,11 +60,13 @@ pub struct Calibration {
pub b: f32,
/// Weight on `log2(min crop_px)` — the face-size term FR-CULL-9 asks for.
pub w_size: f32,
/// Whether there was enough evidence to trust the fit.
/// Whether there was enough evidence to fit this library's own curve.
///
/// When false the UI says confidence is unavailable. It does **not** present
/// an untuned default as though it were measured, which is the distinction
/// FR-CULL-9 spends a paragraph on.
/// False means the numbers came from the built-in reference curve, and the
/// UI says so — once, at the screen level. It does **not** mean confidences
/// are withheld: FR-CULL-9's distinction is between presenting an untuned
/// default *as though it were measured* and presenting it as what it is,
/// and only the first is forbidden.
pub valid: bool,
pub positive_pairs: u64,
pub negative_pairs: u64,
@@ -70,10 +76,10 @@ impl Default for Calibration {
/// The reference implementation's fitted MBF curve (docs/faces.md §1):
/// steepness 16.2, P=0.5 at cosine 0.267.
///
/// **`valid` is false**, and that is the point. This exists so an
/// un-calibrated library has a documented operating point to cluster at
/// rather than no behaviour at all — but nothing may show its output as a
/// measured confidence.
/// **`valid` is false**, and that is the point. It is a documented
/// operating point rather than an invented one, so a library with no fit of
/// its own can both cluster and quote a probability from it — what it may
/// not do is call that probability a measurement of *this* library.
fn default() -> Self {
Self {
a: 16.2,