test(sessions): fold repair-prompts negatives; cover SESSION_ID override

The zero-skills healthy row asserts the same no-evidence-no-clear invariant as
the reduced/memory-only rows, so it joins that test. The freed slot covers the
documented explicit SESSION_ID override (clears a memory-only row; unknown id
errors). Test 1 also pins that a scan clear leaves the skill_manage tools[] pin.
This commit is contained in:
kshitijk4poor
2026-09-26 21:51:28 +05:30
committed by kshitij
parent 0c1a1036fc
commit 2db4aa2b1c

View File

@@ -7,6 +7,7 @@ from types import SimpleNamespace
import pytest
from agent.prompt_builder import SKILL_SAFETY_HEADING
from hermes_cli import sessions_cmd
from hermes_cli.sessions_cmd import _cmd_repair_prompts
from hermes_state import SessionDB
@@ -14,7 +15,7 @@ from hermes_state import SessionDB
HEALTHY = (
"You are Hermes.\n"
"<available_skills>\n dogfood: exploratory QA of web apps\n</available_skills>\n"
"## Skill Safety Rule\nReload [SKILL_PRUNED] placeholders with skill_view.\n"
f"{SKILL_SAFETY_HEADING}\nReload [SKILL_PRUNED] placeholders with skill_view.\n"
)
DEGRADED = "You are Hermes.\n(reduced maintenance build without the skills index)\n"
@@ -68,14 +69,19 @@ def test_unpinned_row_is_unverifiable_and_apply_json_clears_only_verified(db, mo
assert [row["id"] for row in payload["unverifiable"]] == ["old-unpinned"]
assert db.get_session(unverifiable)["system_prompt"] == DEGRADED
assert not (db.get_session(verified)["system_prompt"] or "")
assert db.get_session(verified)["tool_names"] # the skill_manage pin survives the clear
assert db.get_session(healthy)["system_prompt"] == HEALTHY
def test_reduced_surface_and_memory_only_pin_left_alone(db, monkeypatch, capsys):
def test_reduced_memory_only_and_zero_skills_rows_left_alone(db, monkeypatch, capsys):
reduced = db.create_session("reduced-1", "telegram", system_prompt=DEGRADED)
db.update_session_tool_names(reduced, _pin("todo", "web_search"))
memory = db.create_session("memory-only-1", "telegram", system_prompt=DEGRADED)
db.update_session_tool_names(memory, _pin("memory"))
# Zero skills installed + no skill_manage: the real builder emits neither skills marker.
zero_skills = "You are Hermes.\nNo skills are installed.\n"
readonly = db.create_session("zero-skills-readonly", "telegram", system_prompt=zero_skills)
db.update_session_tool_names(readonly, _pin("terminal", "skills_list", "skill_view"))
payload = _apply_json(db, monkeypatch, capsys)
@@ -84,15 +90,17 @@ def test_reduced_surface_and_memory_only_pin_left_alone(db, monkeypatch, capsys)
assert db.get_session(reduced)["system_prompt"] == DEGRADED
assert db.get_session(memory)["system_prompt"] == DEGRADED
assert db.get_session(memory)["tool_names"]
assert db.get_session(readonly)["system_prompt"] == zero_skills
def test_healthy_prompt_without_skill_manage_is_not_cleared(db, monkeypatch, capsys):
# Zero skills installed + no skill_manage: the real builder emits neither skills marker.
healthy = "You are Hermes.\nNo skills are installed.\n"
readonly = db.create_session("zero-skills-readonly", "telegram", system_prompt=healthy)
db.update_session_tool_names(readonly, _pin("terminal", "skills_list", "skill_view"))
def test_explicit_session_id_clears_memory_only_row_and_rejects_unknown_id(db, monkeypatch, capsys):
memory = db.create_session("memory-only-1", "telegram", system_prompt=DEGRADED)
db.update_session_tool_names(memory, _pin("memory"))
monkeypatch.setattr(sessions_cmd, "_confirm_prompt", lambda _prompt: True)
payload = _apply_json(db, monkeypatch, capsys)
assert _cmd_repair_prompts(db, _args(session_id="memory-only", apply=True)) == 0
assert not (db.get_session(memory)["system_prompt"] or "")
assert payload["cleared"] == []
assert db.get_session(readonly)["system_prompt"] == healthy
capsys.readouterr()
assert _cmd_repair_prompts(db, _args(session_id="no-such-session", apply=True)) == 1
assert "No session matches" in capsys.readouterr().out