You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
Added model backed truth extraction: recall/truth_extraction/, turning memo prose into
structured, quoted claims behind a refusing validation ladder. Off unless RECALL_TRUTH_EXTRACTION=1, runs on the ingest path only, never the query path. The
extraction engine is a port with two implementations, a deterministic rules reference and an
OpenAI compatible model engine (pip install "recall-rag[extract]"); whatever an engine returns
clears the same ladder, so a model gains no ability to skip a rung.
Added recall extract run|show, which reads a corpus and writes nothing, and recall rewrite plan|apply|reject|verify, which declares reviewed claims in corpus
frontmatter. recall rewrite apply is a dry run by default and requires --reviewer and --note as argparse requirements, so the named human gate fires before any code runs.
Added the recall_rewrite_plan MCP tool, read only. There is deliberately no recall_rewrite_apply: the MCP client is the model, and a reviewer id it can type is a field
rather than a person. recall_reasoning_proposals and recall reasoning proposals gain include_extracted, defaulting to off so existing behaviour is byte identical.
Added recall extract run --cache PATH, a persistent SQLite extraction cache, so re-ingesting
an unchanged memo does not re-pay the engine for it. Entries are keyed on engine identity,
engine revision, prompt revision, the file, its body and the corpus names, so an answer
produced under one engine is never served for another. A path that is not a usable cache is
refused before any engine call, a corrupt row is a miss and is re-paid, and a failed write is
counted and reported rather than discarding the files already extracted. --cache was briefly
a boolean because an earlier version accepted a PATH and ignored it; the flag came back when
the persistence did. See docs/EXTRACTION_CACHE_DESIGN.md.
Fixed
Fixed recall extract run aborting a whole corpus on one filename that is not valid UTF-8.
A POSIX name arrives as a lone surrogate through Path.glob's surrogateescape, and it raised
twice: once hashing the cache key, which is computed for every file whether or not a cache is
in use, and again printing the report, because reconfiguring stdout's encoding resets its
error handler to strict. The first discarded every file already extracted; the second threw
away a completed extraction at the last step, exiting 1 with empty output. Such a name is now
reported with its bad bytes escaped.
Changed
BREAKING: PROPOSAL_SCHEMA_VERSION moved from 1 to 2, which rewrites everyip_
proposal id in existence, including the checked in results/reasoning_session3_proposals.json.
Version 2 adds declares_validity and declares_status to ProposedRelation, because a
document asserting something about ITSELF is not a relation between two documents and forcing
it into references would put a false relation into an audit record. The bump is the point:
an id minted under a vocabulary that could not express validity must not be mistaken for one
minted under a vocabulary that can. Anyone holding stored ip_ ids must re-derive them.
Fixed
MTRAG Task B and C generation no longer scores an answer that the token ceiling cut off. benchmarks/mtrag/generation.py sent --max-tokens (512 by default) and never read finish_reason, so a truncated completion was written to the submission and judged as if the
system had produced it. It now raises CompletionTruncated, unretried because the same ceiling
cuts every further attempt, and the existing per-task quarantine keeps the task out of the
submission and in the failures log.
Added
recall setup gains an optional reasoning arm step, asked after the entailment judge question
and before the CLAUDE.md scaffold question. Answering yes writes four new environment
variables: RECALL_REASONING, RECALL_REASONING_MODEL, RECALL_REASONING_BASE_URL, and RECALL_REASONING_API_KEY. Answering no writes RECALL_REASONING=0 and nothing else, so
"switched off" and "never configured" stay distinguishable in .env. The shipped reasoning
tools do not read these variables yet; this writes the settings for a port the reasoning arm
will use once it is built. See docs/REASONING_MODEL_SELECTION_DESIGN.md.
Fixed
Corrected recall setup's refusal message for an embedder whose vector width conflicts with a
table that already holds data. It previously pointed at a remedy that failed identically to the
original problem. It now stops and tells you to choose an embedder matching the existing
schema, or point setup at a fresh table name or database.