Persist the meaning of user choices, validate every loaded value, migrate schemas deliberately, and use write patterns with explicit failure and recovery policies.

Keep three layers separate

Defaults

The complete supported schema for the current version.

Saved settings

Validated user choices that survive sessions.

Runtime cache

Derived values that can be rebuilt and should not silently become configuration.

Instance results can have shared reset ownership

Current public source; version-sensitive. The client last_cached_method helper stores results on each instance, while its reset closure and revision marker belong to the decorated method. Calling reset() through one instance changes that shared marker; it does not visit other instances or immediately release their saved values. On a later call, an instance replaces its cache when its stored revision differs.

A mechanic widget's observation path resets its progress writer before calling it. That reset can make another instance recompute on its next otherwise-equal tick; it does not itself request that tick or update another view. Check both result ownership and reset ownership before using a decorated method as a refresh boundary. The marker wraps, so it is not a monotonic account/view generation or an unconditional flush guarantee.

Selected-source checks used supplied state and recording writers to verify this Python suppression boundary. Actual widget construction, native event delivery, rendering and repeated revision-wrap scenarios were not tested; no live excess refresh or stale display is established.

Read by topic