Found while verifying #1411 (q115). This behaviour is already on main; #1411 does not introduce it.
Sequence: store B starts and indexes. A second store under another run id then creates runs/run-a and writes incidents.json and operations.json. B's next maintain() treats run-a as empty because B never examined it, and deletes the folder (probe: ENOENT afterwards).
It needs two app processes sharing one data folder, which is possible under --packaging-smoke because that skips the single-instance lock. It is the same 'never seen means empty' shape as q109/q115; unknown runs should be protected until examined.
🤖 Generated with Claude Code
Found while verifying #1411 (q115). This behaviour is already on main; #1411 does not introduce it.
Sequence: store B starts and indexes. A second store under another run id then creates
runs/run-aand writesincidents.jsonandoperations.json. B's nextmaintain()treatsrun-aas empty because B never examined it, and deletes the folder (probe: ENOENT afterwards).It needs two app processes sharing one data folder, which is possible under
--packaging-smokebecause that skips the single-instance lock. It is the same 'never seen means empty' shape as q109/q115; unknown runs should be protected until examined.🤖 Generated with Claude Code