Reworks snapshot capture and navigation toward a Fusion-360-style
non-destructive timeline, addressing three pain points.
- Workflow-switch spam: re-seed the dedup/change-detection baseline for
the newly-opened tab (seedWorkflowBaseline) and suppress auto-capture
for a short guard window (suppressAutoCapture/SWITCH_GUARD_MS), so the
graphChanged fired by loadGraphData no longer spawns a redundant
snapshot of a workflow you only just opened.
- Quieter autosave: detectChangeType now recognises resize, collapse and
pin (previously saved as "unknown") and classifies pure
move/resize/collapse as "cosmetic"; a cosmetic flag never escalates a
real edit. Auto-capture skips cosmetic-only changes; mode (mute/bypass)
is treated as a meaningful change. The cosmetic gate applies to the
auto path only — manual saves and the pre-swap/pre-restore "Current"
capture still preserve everything (no silent layout loss).
- Semantic "what changed": getLiveWidgetNames/widgetNameFor map
widgets_values indices to widget names (by exact node id), so diffs and
tooltips read "seed", "text", "cfg" instead of "Value[6]"; the diff
modal shows meaningful params first and collapses position/size into a
single muted "Layout" line.
- Non-destructive navigation: Alt+Left/Right step through history via
stepToSnapshot (quiet, re-entrancy-guarded swap with a position toast);
jumping between saved states is a storage no-op and never deletes later
snapshots.
Includes research report + implementation plan under docs/plans.
Verified: node --check passes; 19 unit tests on the diff/classification
logic pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
5 tasks: hide branching, skip move autosaves, compute diff at capture,
show diff in sidebar tooltip, show diff in timeline tooltip.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>