Allow explicit operator resume after technical response repairs

This commit is contained in:
Nico committed 2026-10-20 21:20:46 +02:00
1 parent ecec96ce14
commit 167d8d5f5e
4 files changed
+85 -2

No files matched your search

+36
View File
@@ -270,3 +270,39 @@ def test_empty_array_details_rejected(admitted):
with pytest.raises(LifecycleError):
store.advance("case-A", "stable-package", State.BUILDING_CASE, step_id="bad", details=[])
assert store.latest("case-A", "stable-package") == original
@pytest.mark.parametrize("reason", ["INVALID_LLM_RESPONSES", "RESEARCH_UNAVAILABLE", "AWAITING_TEST_FEEDBACK"])
def test_manual_repair_retry_is_explicit_scoped_and_preserves_content(admitted,reason):
_, store, _ = admitted
blocked = store.advance("case-A", "stable-package", State.BLOCKED, step_id="repair-block",
reason=reason, retry_not_before="2099-01-01T00:00:00Z")
with pytest.raises(LifecycleError):
store.advance("case-A", "stable-package", State.VALIDATED, step_id="automatic-too-early")
if reason != "INVALID_LLM_RESPONSES":
with pytest.raises(LifecycleError):
store.advance("case-A", "stable-package", State.VALIDATED, step_id="not-repairable",manual_retry=True)
assert store.latest("case-A", "stable-package") == blocked
return
with PackageReader(blocked) as reader:
before = reader.manifest
resumed = store.advance("case-A", "stable-package", State.VALIDATED, step_id="operator-repaired",manual_retry=True)
assert store.advance("case-A", "stable-package", State.VALIDATED, step_id="operator-repaired",manual_retry=True) == resumed
with PackageReader(resumed) as reader:
assert reader.read_bytes("unknown") == b"keep"
assert reader.manifest["analysis_revision"] == before["analysis_revision"]
assert reader.manifest["artifacts"].keys() == before["artifacts"].keys()
assert reader.manifest["routing"]["retry_not_before"] is None
assert checkpoint_chain(reader)[0][1]["details"]["manual_retry"] is True
assert PackageValidator().validate(resumed).valid
@pytest.mark.parametrize("changes", [{"additions":{"other":b"no"}}, {"artifacts":{"case":"other"}}, {"manual_retry":1}])
def test_manual_repair_retry_cannot_mutate_artifacts(admitted,changes):
_, store, _ = admitted
blocked = store.advance("case-A", "stable-package", State.BLOCKED, step_id="block-repair",
reason="INVALID_LLM_RESPONSES",retry_not_before="2099-01-01T00:00:00Z")
with pytest.raises(LifecycleError):
store.advance("case-A", "stable-package", State.VALIDATED, step_id="bad-repair",
**{**{"manual_retry":True},**changes})
assert store.latest("case-A", "stable-package") == blocked