From 9a76f480c5c1d6149bc1f97ee0f480375baee090 Mon Sep 17 00:00:00 2001 From: twentyOne2x Date: Mon, 13 Jul 2026 20:17:29 +0200 Subject: [PATCH] Include approved rows in Leo demo readback (#122) --- hermes-agent/leoclean-bin/kb_tool.py | 3 +++ tests/test_hermes_leoclean_kb_bridge_source.py | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/hermes-agent/leoclean-bin/kb_tool.py b/hermes-agent/leoclean-bin/kb_tool.py index ce0c933..2049ebc 100755 --- a/hermes-agent/leoclean-bin/kb_tool.py +++ b/hermes-agent/leoclean-bin/kb_tool.py @@ -1415,6 +1415,9 @@ def context_operational_contracts(args: argparse.Namespace, query: str) -> list[ contract["live_link_audit"] = direct_snapshot.get("source_link_audit") or {} elif contract_id == "demo_capability_readback": contract["applied_proposals"] = [item for item in proposal_rows if item.get("status") == "applied"] + contract["applied_and_approved_proposals"] = [ + item for item in proposal_rows if item.get("status") in {"applied", "approved"} + ] elif contract_id in SCHEMA_COMPILED_CONTRACTS: contract["current_edge_types"] = enum_values.get("edge_type", []) return contracts diff --git a/tests/test_hermes_leoclean_kb_bridge_source.py b/tests/test_hermes_leoclean_kb_bridge_source.py index 55a7677..5e6a58f 100644 --- a/tests/test_hermes_leoclean_kb_bridge_source.py +++ b/tests/test_hermes_leoclean_kb_bridge_source.py @@ -406,6 +406,17 @@ def test_vps_bridge_enriches_and_compiles_all_direct_questions_from_live_rows(mo contracts = module.context_operational_contracts(SimpleNamespace(), prompt["message"]) response = module.compile_operational_response(contracts) + demo_contract = next( + (contract for contract in contracts if contract["id"] == "demo_capability_readback"), + None, + ) + if demo_contract: + assert [row["status"] for row in demo_contract["applied_and_approved_proposals"]] == [ + "approved", + "applied", + ] + assert "1/1 approved rows are approved_needs_apply_payload" in response + assert response is not None, prompt["id"] assert len(re.findall(r"\b\w+(?:[-']\w+)*\b", response)) <= 200 score = score_reply(prompt, response)