## [2026-06-13T03:12:07.303Z]
Filling unverified verdicts is the single place a reviewer or a deterministic check executes, so it concentrates the fail-closed write discipline: a verdict is recorded only when the reviewer actually returned one, deterministic checks run first and gate the paid LLM dispatch, and a node's verdicts and source fingerprint advance together only when every enforced rule on it passes.
## [2026-06-13T03:16:12.633Z]
Every catch that returns a fallback instead of re-throwing emits a diagnostic line, and every path written to agent-facing output is normalized to forward slashes, so a swallowed read failure is never invisible and output never leaks platform-specific separators.
## [2026-06-13T05:33:38.794Z]
Positive closure now advances a node's source fingerprint and log baseline only when every enforced rule is freshly verified against the current code in this run and the node was not gated. A stored approval from an earlier run can no longer stand in for re-verification, so a source change can never be recorded as reviewed without an actual review. Reference files contributing to a rule are hashed from their raw bytes so any edit invalidates the cached verdict. Garbage collection retains recorded results for a node whose effective rule set cannot be computed, rather than discarding them, so an uncomputable applicability state never silently drops prior verification.
## [2026-06-13T07:02:06.114Z]
When a component lists a file that cannot be read, filling and closing verification state must fail closed rather than crash or quietly advance. Computing a component's source fingerprint over an unreadable file now raises a typed error; the fill and positive-closure steps catch it and decline to advance that component's recorded fingerprint or log baseline, leaving the component blocked rather than aborting the whole command with an unclassified error or closing over content that was never verified. The reasoning is that an unreadable listed file is a hard error for the author to fix, never grounds to record a passing state.
## [2026-06-13T07:27:16.966Z]
Agent-facing diagnostic messages (the what/why/next structure that tells an agent what went wrong and how to fix it) are formatted by the command-line layer, not by the engine. The fill stage previously built and wrote these messages itself; that formatting work has been moved out. The engine now emits each diagnostic as a structured object carrying the three fields and hands it to a sink supplied by the caller, which renders it; plain progress lines (counts, per-pair status) stay as direct writes because they are status, not remediation guidance. The reason for the split is that keeping all message formatting in one layer means presentation can change in a single place, and the engine stays a pure producer of structured results that any front end can render.
