feat(decide): memory rerank and paper triage on the decision tier
deploy / test (push) Successful in 5m23s
deploy / build (push) Successful in 5m27s

mission_memory::recall is two stages when a key is set: BM25 proposes 8
candidates, one Noul per candidate ('this earlier verdict is relevant to
the task') reorders them and drops those under 0.3, three are kept. BM25
measures keyword overlap, and a verdict about MICROVM.md shares words
with every task that names a file. Without a key the BM25 order stands.

continuous_research: topic_tags was written as [] on every manifest line
since the manifest existed. triage_papers asks, per harvested paper, a
Choice over the mission's topics (readable names, the arXiv query as the
description, 'none' offered) and a four-level relevance Score; the tags
(every topic ≥ 0.3) and {score, confidence} land on the line the agents
already read. Probe on PORTICO's abstract: relevance 3.0 at 1.0; topic
'none' 0.59 / verification 0.41 — true, the topic list has no
authority/sandboxing entry. Untriaged papers write the old empty line.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
Omar Sobh
2026-09-21 14:09:28 -05:00
co-authored by Claude Opus 5
parent 2656d73def
commit 33560c7fe6
4 changed files with 255 additions and 17 deletions
+3 -3
View File
@@ -1254,9 +1254,9 @@ async fn launch_phase(
// Appended to the task rather than the identity so all three executors
// carry it: the task text is the one thing they share.
let task = match p.repo_id {
Some(repo) => match crate::mission_memory::section(&crate::mission_memory::recall(
repo, &task,
)) {
Some(repo) => match crate::mission_memory::section(
&crate::mission_memory::recall(repo, &task).await,
) {
Some(memory) => {
eprintln!(
"phase_runner: phase {phase_id} brief carries project memory for repo {repo}"