fix(runtime): reject unobserved verification and preserve safe reasoning

This commit is contained in:
Alexandre Teixeira
2026-09-26 14:24:29 +01:00
parent b241bb3a7b
commit cea8ed297e
3 changed files with 54 additions and 1 deletions
+5 -1
View File
@@ -574,6 +574,7 @@ class EvidenceLedger:
self.requirements = requirements or CompletionRequirements()
self.events: list[EvidenceEvent] = []
self._verification_versions: dict[str, str] = {}
self._verification_versions_captured = False
@classmethod
def from_tool_events(
@@ -716,6 +717,7 @@ class EvidenceLedger:
if authoritative:
versions = event.get('artifact_versions')
self._verification_versions = dict(versions) if isinstance(versions, Mapping) else {}
self._verification_versions_captured = isinstance(versions, Mapping)
self._append(
kind=EvidenceKind.VERIFIER_RESULT,
success=success,
@@ -791,7 +793,9 @@ class EvidenceLedger:
for path in self.requirements.required_artifacts:
identity = artifact_identity(path, self.requirements.workspace_root)
expected = self._verification_versions.get(identity)
if expected in {'unobserved', 'missing-or-unreadable'}:
if expected in {'unobserved', 'missing-or-unreadable'} or (
expected is None and self._verification_versions_captured
):
return CompletionDecision(CompletionStatus.BLOCKED, False,
'artifact version could not be established for verification',
(latest_verifier.event_id,))