State between the panel and the main surface must stay explicitly in sync
Aliases: inspector sync · two-way panel binding · stale inspector
What it is
Non-modality lets both sides change, which also lets both sides go stale. Panel–main synchronisation requires that a change of selection or values on the main surface shows up as the same world in the panel at once, and that an attribute change in the panel is drawn the same way on the main surface at once. Out of sync, people decide from an expired inspector, or read the panel through an expired canvas. Parallel operation without sync is worse than keeping the panel closed.
Why it happens
Two visible regions are taken as two views of one world. Delay, or a one-way update, splits the world: the object has moved right on the canvas, the inspector still shows old coordinates; the inspector renamed it, the list still shows the old name. The next edit then writes to the wrong object, or overwrites a fresh value with the stale view. Sync has to be two-way and keyed by object identity, not by a snapshot taken when the panel opened. On selection change the panel should swap in the new object wholesale, not leave dirty fields from the previous one in the form. A field mid-keystroke needs an explicit commit point, or an external refresh from the main surface will wash out half-typed input — that is part of the sync policy, not the opposite of sync.
Studying it
Change an attribute in an open inspector and measure delay until the main surface shows the new value; change selection on the main surface and see whether the inspector switches objects and whether the previous row’s values linger. Independent variables: live update versus commit-on-blur, leftover state across objects. Dependent variables: stale reads, overwrites of new values by old, edits applied to the wrong object. Pair screenshots of both sides at the same timestamp; that is harder evidence than “does it feel in sync.”
Where it stops holding
In collaboration the server is the source of truth and both sides can lag; sync has to mark “saving / someone else changed” rather than pretend local is true. A read-only panel can pull one way from the main surface and need not write clicks back. Expensive previews on large documents may throttle, but throttling must show “preview behind the edit,” or throttle is silent desync. A closed panel need not sync; on reopen it should pull the current object, not restore the snapshot from close.
Applying it
- Key by object id: a selection change replaces the panel’s form. Do not leave the previous record’s values in the fields.
- Main-surface edits and panel edits share one source; either side’s commit redraws the other.
- Fields mid-typing commit on blur or confirm, and incoming external updates must not clobber uncommitted input without saying so.
- How to check: edit the panel and watch the main surface, edit the main surface and watch the panel, then change selection quickly. If any number disagrees, fix sync rather than adding a refresh button.