From the 2026-09-02 adversarial review (found by the editor-cluster pass, left unfixed as a design decision).
Program.cs only forwards to a running instance when launched WITH an argument; a bare second launch runs fully. Each process holds a whole-file settings snapshot from its own start and Save writes the whole file, so whichever instance exits last overwrites the other's open_tabs and any other settings changed since. AtomicFile prevents torn files, not lost updates. Instance B also restores nothing, since A cleared the list at its own startup.
Options worth weighing: single-instance the bare launch (surface the running window, like the with-argument path), or per-key merge on save. The first matches what the pipe already does and is probably the honest fix.
From the 2026-09-02 adversarial review (found by the editor-cluster pass, left unfixed as a design decision).
Program.cs only forwards to a running instance when launched WITH an argument; a bare second launch runs fully. Each process holds a whole-file settings snapshot from its own start and Save writes the whole file, so whichever instance exits last overwrites the other's open_tabs and any other settings changed since. AtomicFile prevents torn files, not lost updates. Instance B also restores nothing, since A cleared the list at its own startup.
Options worth weighing: single-instance the bare launch (surface the running window, like the with-argument path), or per-key merge on save. The first matches what the pipe already does and is probably the honest fix.