Add frozen retrieval abstention experiment - #27
Merged
Merged
Conversation
Add a separately authored synthetic benchmark, tuning-only token-coverage selection, explicit holdout criteria, and signed Gold-ID parity checks. Preserve the negative result without changing runtime retrieval or admission behavior. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add a reproducible, evaluation-only experiment for abstaining on retrieval queries the vault cannot answer. Production BM25, query behavior, MCP, and admission policy remain unchanged.
npm run eval:abstention, real-file CLI tests, and exact scorer/signed-vault parity. Reuse Gold chunk identities so tied rankings match production.docs/retrieval-evaluation.md. The legacy v1 benchmark remains unchanged.This work was initiated directly, not from a tracked issue. No closing issue references or changelog update apply; the repository does not keep a changelog.
Trust-boundary impact
None to runtime admission or retrieval authority. The only existing code changes are export visibility for
chunkIdand the manual evaluator'scwdPath; their implementations and existing callers are unchanged.The evaluator uses existing ephemeral test keys in disposable vaults. It adds no signer, admission command, runtime rejection policy, model capability, dependency, or index-format change. Shipped MCP remains Gold-only and read-only. Retrieved content remains non-instructional reference data.
Synthetic labels, byte-valid citations, and software signing tests do not establish human review, semantic truth, real-world generalization, or production readiness.
Validation
Validated commit
3d89ecf7c5847369084047f0f011bc0958a1a927, source treee0676b21cf1156c7da621cb6be3e0201d7549637, after rebasing on currentmain.npm run check, both before commit and on the exact committed source export:tests 746,pass 743,fail 0,skipped 3; all 11 script tests passed. The three skips concern filesystem permissions on Windows. Link and style checks passed.node dist/src/cli/main.js check --root . --audit-clean-room, from the 229-file committed source export:PASS,No findings.No audit exclusions or scanner rules were changed.test/manual/retrieval-abstention.jsrunner: exit 0, exact Gold-ID parity, all seven authorization-boundary checks true,no_eligible_candidate, candidate and decisions null, holdoutnot_run.npm run eval:abstention -- --scorer-only: exit 0 with explicitauthorized: nulland the same frozen negative result.git diff --checkpassed before committing; the branch is clean.The raw app-managed worktree audit still flags its pre-existing
.gitpointer, which contains a machine path. That pointer is not committed. The source-export audit above is not described as a passing raw-worktree audit.The frozen fixture does not exercise candidate-present runner parity end to end; that branch has pure-policy unit coverage and inspection evidence. No fixture was retuned to manufacture a passing research result.
No separate packaging or site-visual smoke was run: the package remains private and source-distributed, and no installer or UI files changed. Build, CLI wiring, and the real signed-vault workflow are covered by the checks above.
Checklist
--promoteflag was added.instruction_authority: none.npm run checkpasses.node dist/src/cli/main.js check --root . --audit-clean-roompasses. (Exact committed source export; raw-worktree limitation documented above.)