Skip to content

Phase C2: per-hit tail honesty for search — the fold where a real query's evidence runs out (D2 Step 2) #206

Description

@samkeen

What this is

Split out of #201, which shipped the query-level half of D2 (PR #205) and left this half
untouched by design. Step 1 answers does the vault hold evidence for this query at all. This is
the other question: a real query whose list runs out before limit does — the "results 7–10 are
filler" complaint, the per-hit sibling of the same dishonesty.

Why it was not shipped with #201

The evidence exists and is measured; the labels do not. evals/queries.json names the
relevant note for a query — it says nothing about the irrelevance of ranks 5–10, which is exactly
what a tail rule must be judged on. So the provenance is reported and no rule is drawn from it:

  • HitProvenance per served row (bm25_rank, vector_rank, distance), reaching a caller through
    Vault::search_evidenceEvidencedResult.
  • just eval's search evidence bake-off prints the dense_only reading — served rows the lexical
    half never ranked. At the shipped bar: 0 of 410 served positive rows are dense-only, against 20
    of 50 negative ones.
    That separation is the reason to think a tail rule is findable; it is not
    evidence that any particular one is right.

What this issue owes

  1. A label extension first (process rule 2 applies: its own commit, and the two-direction token
    audit). The shape is per-query per-rank judgements over the served list, not new notes — the
    corpus does not need to grow, the labels need to get deeper. Decide the cheapest honest form:
    full per-rank relevance, or a per-query "last relevant rank" mark.
  2. The rule, bake-off style — swept and re-derived per run like Phase B: the discovery disclosure bake-off — a default-view fold for b2 similar (runs #197 Phase 2, on D1 as redrafted) #200's fold and Phase C: search evidence honesty — b2 search answers zero when the vault holds no evidence (implements D2) #201's bar, on
    both corpora, with "no tail fold at all" an admissible winner (it won for discovery in Phase B: the discovery disclosure bake-off — a default-view fold for b2 similar (runs #197 Phase 2, on D1 as redrafted) #200).
  3. D1's prefix requirement binds here exactly as in discovery: per-hit eligibility may not punch
    holes in the fused order. The fold is a cut, or it does not ship.
  4. Process rule 5's transfer check if the rule carries any distributional constant —
    just calibrate --search is the bench, and it is the one that caught Phase C: search evidence honesty — b2 search answers zero when the vault holds no evidence (implements D2) #201's first rule.

Judged on

Bench The reading
orthogonal corpus zero labelled relevant notes below the tail fold — no headroom (D2's tripwire, per-hit form)
dense fixture a single-domain vault's lists are all real matches; a tail rule that truncates them there is disqualified, the same absolute #200 enforced for discovery
just calibrate --search on real vaults process rule 5

Out of scope

References

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions