Parent: #588 — follow-on. Not required for the suite to ship.
Problem
Baseline capture is the slow, rate-limited stage, and in v1 it is all-or-name-them-yourself: capture everything missing, or type out the components you believe changed. On an 80-component library, "I think something moved in Figma" costs a full recapture to discover that three things moved.
The obvious signal is the wrong one. The library file's lastModified moves on any edit anywhere in the file, so keying off it means recapturing the whole catalogue to find that nothing relevant changed — exactly the waste this would exist to remove.
The spec version is tempting, since the versioning machinery already computes per-component change class. But the spec is lossy by design, and visual testing earns its keep precisely at the fidelity the spec drops — so a signal derived from the spec goes blind in the one region that matters.
Potential solution(s)
- Hash the component's Figma node subtree out of the already-fetched payload. The payload holds every component's full subtree with nested instances expanded, so a change inside a leaf propagates to every parent containing it — which is the correct behaviour for a visual baseline.
- Record the hash at capture time alongside the existing provenance.
status recomputes it from the payload on disk: same hash means current, different means changed, no record means missing. Offline, free, exact per component.
baseline with no component scope then captures missing and changed, rather than everything missing.
- Report honestly on what it cannot know: the payload is only as fresh as the last fetch, so
status states the payload's fetch time and never claims knowledge of unfetched edits.
- Keep the spec version in the report as human context. Do not make it the signal.
This makes the overt command self-scoping. It does not make capture automatic — that stays ruled out.
Acceptance criteria
Case data
Notes
Depends on steps 2 and 3 of #588.
Parent: #588 — follow-on. Not required for the suite to ship.
Problem
Baseline capture is the slow, rate-limited stage, and in v1 it is all-or-name-them-yourself: capture everything missing, or type out the components you believe changed. On an 80-component library, "I think something moved in Figma" costs a full recapture to discover that three things moved.
The obvious signal is the wrong one. The library file's
lastModifiedmoves on any edit anywhere in the file, so keying off it means recapturing the whole catalogue to find that nothing relevant changed — exactly the waste this would exist to remove.The spec version is tempting, since the versioning machinery already computes per-component change class. But the spec is lossy by design, and visual testing earns its keep precisely at the fidelity the spec drops — so a signal derived from the spec goes blind in the one region that matters.
Potential solution(s)
statusrecomputes it from the payload on disk: same hash means current, different means changed, no record means missing. Offline, free, exact per component.baselinewith no component scope then captures missing and changed, rather than everything missing.statusstates the payload's fetch time and never claims knowledge of unfetched edits.This makes the overt command self-scoping. It does not make capture automatic — that stays ruled out.
Acceptance criteria
Case data
Notes
Depends on steps 2 and 3 of #588.