"Already-hidden apps are never acquired." — Tinker architecture, hide invariant 2
The Restore That Lies
Imagine the naive version. Dad hid Eagle with ⌘H an hour ago because he did not want to see it. Now he presses the editing key: the preset lists Eagle, Claude and Voyager, so "hide all three" runs and Eagle, already hidden, stays hidden. Two hours later he presses the key again, and the naive restore "shows all three". Eagle pops back — an app Dad himself had put away, now undone by a tool that never put it away in the first place. That is a restore that lies about history.
needsApply Is the Whole Defence
Tinker's defence is not a special rule in restore; it is earlier and simpler. At prepare time the plan for Eagle is emitted with needsApply: false because Eagle is already hidden. The engine never writes a receipt for a plan that does not need applying, so Eagle never becomes Tinker's. When restore later walks the journal it finds receipts for Claude and Voyager only. Eagle is not skipped by restore; it was never in restore's world.
The Promise in the UI
This behaviour is visible to Dad, not just to the code. Under every preset Settings prints: "Apps remain running. Apps already hidden stay hidden when this preset is restored." The Access & Recovery tab lists the changes Tinker will restore with the presets that own each one, and an app that was already hidden simply never appears there. If Dad wonders why Eagle did not come back, the answer is on the screen before he asks.
Why Not "Remember and Return to the Previous State"?
A plausible alternative is to snapshot every candidate's visibility at apply time and return each to its snapshot at restore time. It sounds equivalent and it is not. A snapshot of "Eagle was hidden" would make restore re-hide Eagle if Dad had shown it in the meantime — Tinker would be acting on a state it did not create, in the direction Dad had just reversed. Owning only your own changes is strictly safer than restoring a remembered world: when Tinker is unsure what Dad wants, it does nothing.