Same outcome as the salvaged commits — a restored tab whose id every
profile answered 404 for in calm conditions is dropped instead of being
re-probed on every launch — with less machinery:
- one set of scope listeners per backfill run instead of six per tile;
retired ids are tracked by storedSessionId, so a tile array rebuilt by
the backend-identity guard between start and gateway-open cannot make
the retire silently never fire.
- the "profile inventory known" gate lives in probeStoredSession, where
the ladder decides what its evidence proves, instead of in the caller.
- the nine-case test file is folded into session-tile.test.ts as two
invariants: retire on all-profile 404 (red on origin/main), keep on
5xx / network failure / switch in flight / profile A→B→A / connection
switch / stashed draft / unknown inventory.