Restore full investigation evidence and assessment history

This commit is contained in:
Nico committed 2026-10-16 12:27:53 +02:00
1 parent 77919c40f8
commit 61138955ec
11 files changed
+132 -16

No files matched your search

+21 -6
View File
@@ -189,7 +189,7 @@ def test_case_builder_provider_outage_blocks_without_sealing(case_setup):
assert reader.manifest["state"]=="BLOCKED" and reader.manifest["artifacts"].get("case") is None
@pytest.mark.parametrize("recall", [False, True, "unknown"])
@pytest.mark.parametrize("recall", [False, True, "unknown", "upgrade"])
def test_model_loop_uses_project_tools_and_compact_previous_result(tool_case, recall):
store=tool_case[0]
with PackageReader(tool_case[1]) as reader:project=reader.manifest["project"]
@@ -204,14 +204,14 @@ def test_model_loop_uses_project_tools_and_compact_previous_result(tool_case, re
if previous:
assert context["evidence"][eid]["content"]["items"]
assert "inputs" not in context["case"]
assert request["prompt_version"]=="investigation_project_v9"
assert request["prompt_version"] in ({"investigation_project_v9","investigation_project_v10"} if recall == "upgrade" else {"investigation_project_v9" if recall else "investigation_project_v10"})
reply={"assessment":{"semantic_score":50,"reason":"Scoped fact","evidence_refs":[eid]} if previous else None,
"update":{"confidence":"plausible","evidence_refs":[eid] if previous else [],"resolve_questions":[],"add_questions":[],"note":"Query typed identity"},
"next":{"kind":"finish","reason":"Check complete"} if previous else {"kind":"tool","operation":"project.query","arguments":rows()}}
if recall:
if previous:
if previous and request['prompt_version']=='investigation_project_v9':
reply['next'] = {'kind':'recall','evidence_refs':['E999999' if recall == 'unknown' else eid]}
elif any(e['record']['hypothesis_id'] == context['selected_hypothesis'] for e in context.get('evidence', {}).values()):
elif not previous and any(e['record']['hypothesis_id'] == context['selected_hypothesis'] for e in context.get('evidence', {}).values()):
recalled = next(eid for eid,e in context['evidence'].items() if e['record']['hypothesis_id'] == context['selected_hypothesis'])
assert context['evidence'][recalled]['content']['items']
reply['update']['evidence_refs'] = [recalled]
@@ -219,15 +219,30 @@ def test_model_loop_uses_project_tools_and_compact_previous_result(tool_case, re
return ProviderResponse(reply,"fixture",100,10)
adapter=Adapter()
loop=Investigator(store,gateway(adapter),router=InvestigationToolRouter(project_research=service))
if recall is True:
if recall:
original_context=loop._context
def frozen_context(*args):
context=original_context(*args)
context['prompt_version']='investigation_project_v9'
context['recalled_evidence']=args[0].get('recalled_evidence',{}).get(args[1],[])
return context
loop._context=frozen_context
if recall is True or recall == "upgrade":
partial=asyncio.run(loop.run("case-A","stable-package",max_steps=4))
assert partial.status == 'YIELDED'
loop=Investigator(store,gateway(adapter),router=InvestigationToolRouter(project_research=service))
original_context=loop._context
def frozen_resume_context(*args):
context=original_context(*args)
context['prompt_version']='investigation_project_v9'
context['recalled_evidence']=args[0].get('recalled_evidence',{}).get(args[1],[])
return context
if recall is True:loop._context=frozen_resume_context
result=asyncio.run(loop.run("case-A","stable-package",max_steps=20))
if recall == 'unknown':
assert result.status == 'BLOCKED' and result.code == 'INVESTIGATION_EVIDENCE_UNKNOWN'
else:
assert result.status=="COMPLETED" and len(adapter.contexts)==(9 if recall else 6)
assert result.status=="COMPLETED" and len(adapter.contexts)==(7 if recall == "upgrade" else 9 if recall else 6)
assert len(EvidenceStore(store).snapshot("case-A","stable-package").record_refs)==3
accounts=BudgetManager(store).snapshot("case-A","stable-package").state['accounts']
assert sum(len(a['actions']) for a in accounts.values()) == 3