fix(monitor): an undecided not_saved waits for its run's record (#247, #90)

A not_saved from the ladder's undecided step is not final before a record
exists: the recorded saver may still resolve another branch. The settle
lookup now keeps such a file waiting; with the record it stores nothing and
logs the opted-out line. An early not_saved (a switched-off node upstream of
any sampler's positive) never reaches the lookup and stays final.

Tests: the undecided case (literal and wired switch) waits, then skips; a
switched-off node feeding one branch of a shared-prefix run never waits and
stores nothing, not even the branch the recorded saver names.
This commit is contained in:
Vito Sansevero
2026-10-28 20:15:20 -07:00
parent 379f0ad1ac
commit dc1258d0bd
2 changed files with 51 additions and 9 deletions
+4 -4
View File
@@ -804,8 +804,10 @@ class ImageGenerationHandler(FileSystemEventHandler):
Registered first, so a run sealed before this lookup is not missed.
Returns None to keep waiting: no record yet, and the answer is not
the inspector's or the recorded saver's (the legacy floor waits for
the re-check). With a record, any decision ends the wait, and so
does a switched-off node's text (#90): a record could only store it.
the re-check). With a record, any decision ends the wait. A
``not_saved`` here is the undecided step's (an early one never asks
history, so it never reaches this lookup): a recorded saver may still
resolve another branch, so without a record it waits too (#90).
"""
self._await_foreign(image_path)
found = []
@@ -818,8 +820,6 @@ class ImageGenerationHandler(FileSystemEventHandler):
decision = decide_foreign(image_path, metadata, in_output=True, lookup=recorded)
if any(record is not None for record in found):
return decision
if decision.kind in NOT_SAVED_KINDS:
return decision
if decision.kind in CERTAIN and decision.source in ANCHORED_SOURCES:
return decision
return None