fix(interaction): omit changedFromBefore when no verify baseline was captured
Summary
When the pre-action baseline capture failed, --verify evidence still reported changedFromBefore: false ā a missing baseline read as an unchanged screen, so a coordinate tap that landed on nothing reported the same verdict as one that changed nothing. Split from #4297 per the #4318 group-C review: this PR carries the missing-baseline honesty part only.
The field is now absent when no comparison was made. summarizePostActionEvidence returns the summary without the claim, InteractionEvidence.changedFromBefore becomes optional with the absence documented, and the response schema stops requiring it. Present-baseline behavior is unchanged: false still means compared and matched. Deliberately no claim that press always holds a fresh baseline ā baselines can still be missing, and the evidence now says so by omission. The screenshot-diff half of #4297 stays parked behind its design issue.
Contract note for consumers of the daemon response (per review): changedFromBefore is now an optional field on InteractionEvidence. Treat absence as "no comparison was made" (no pre-action baseline), not as "unchanged". false still means compared-and-matched; surfaceChange, when present, already replaces the digest comparison.
Validation
pnpm run typecheck,pnpm run lint,pnpm formatclean.pnpm vitest runon interactions.test.ts, post-action-surface.test.ts, settle.test.ts and command-surface__tests__: 83 passed, including two new tests ā a failing baseline capture omits the field, and a matching baseline still reportsfalse.- CI runs the full gates on push.
- Review follow-up (921ccc42b): the daemon test fake (
touch-command-surface-fake.ts) now mirrors the production contract ā it setschangedFromBeforeonly when a baseline was captured, and omits it otherwise.pnpm vitest runonpackages/daemon/src/execution+packages/daemon/src/sessions: 258 files / 1985 tests passed; all PR checks green at this head.
š¤ Generated with Claude Code