Attribute violations to the causing step and render witness evidence (#59)

* feat(ltl): attribute violations to the obligation origin step

* feat(verifier): label evaluator observations with the runner step index

* feat(trace): carry the causing step in violation witnesses and summary

* feat(replay): move the violation marker to the causing step

* feat(replay-ui): render witness evidence in the violations panel

* feat(replay-ui): wire witnesses and step jump into violation panels

* fix(ltl): treat next obligations as vacuous at run end

* fix(runner): give the finalize trace record its own step index
This commit is contained in:
pj authored and GitHub committed 2026-06-05 23:46:36 +05:30
1 parent 19a470121f
commit 9958b0ddc8
15 files changed
+719 -85

No files matched your search

+10
View File
@@ -126,6 +126,8 @@ export default function RunDetail() {
const violationsAfter = nextStep?.violations ?? violationsBefore;
const residualsBefore = currentStep?.residuals;
const residualsAfter = nextStep?.residuals ?? residualsBefore;
const witnessesBefore = currentStep?.witnesses;
const witnessesAfter = nextStep?.witnesses ?? witnessesBefore;
const exceptionsForStep = currentStep?.exceptions;
const beforeTabs: TabDefinition[] = [
@@ -157,8 +159,10 @@ export default function RunDetail() {
propertyNames={history?.names ?? []}
violations={violationsBefore}
residuals={residualsBefore}
witnesses={witnessesBefore}
onJumpToFirstViolation={jumpToFirstViolation}
hasFirstViolation={history?.firstViolationStep !== undefined}
onJumpToStep={goTo}
/>
),
},
@@ -176,8 +180,10 @@ export default function RunDetail() {
propertyNames={history?.names ?? []}
violations={violationsBefore}
residuals={residualsBefore}
witnesses={witnessesBefore}
onJumpToFirstViolation={jumpToFirstViolation}
hasFirstViolation={history?.firstViolationStep !== undefined}
onJumpToStep={goTo}
violationsOnly
/>
),
@@ -213,8 +219,10 @@ export default function RunDetail() {
propertyNames={history?.names ?? []}
violations={violationsAfter}
residuals={residualsAfter}
witnesses={witnessesAfter}
onJumpToFirstViolation={jumpToFirstViolation}
hasFirstViolation={history?.firstViolationStep !== undefined}
onJumpToStep={goTo}
/>
),
},
@@ -232,8 +240,10 @@ export default function RunDetail() {
propertyNames={history?.names ?? []}
violations={violationsAfter}
residuals={residualsAfter}
witnesses={witnessesAfter}
onJumpToFirstViolation={jumpToFirstViolation}
hasFirstViolation={history?.firstViolationStep !== undefined}
onJumpToStep={goTo}
violationsOnly
/>
),