@@ -2,7 +2,7 @@ import { COLORS, isColor, type GroupColor } from "../shared/colors";
22import { labelOf, repairLabel, safeEmoji, stripTitle } from "../shared/label";
33import { colorFor, isInternalUrl, promptAddress, provisionalTitle } from "../shared/url";
44import { pathKey } from "./engine";
5−import { membersHash, memberUrls, toItems, type Member, type NameItem } from "./naming";
5+import { membersHash, memberUrls, settled, toItems, type Member, type NameItem } from "./naming";
66import { addToGroup, createManagedGroup, groupExists, ungroup, type Runtime } from "./runtime";
77import { markDirty, type State } from "./state";
88
@@ -377,8 +377,9 @@ export class AutoOrganizer {
377377 if (pausedUntil && pausedUntil > rt.now()) return; // the host-retry ping sweeps again when it recovers
378378 const tabs = (await chrome.tabs.query({ windowId }).catch(() => [])).sort((a, b) => a.index - b.index);
379379 const s = rt.state();
380− // Still-loading tabs are skipped here; finishing the load touches the window again.
381− const loose = tabs.filter((t) => organizable(t) && t.status === "complete" && !s.tabs[t.id!]?.keepLoose);
380+ // Still-loading tabs are skipped here; finishing the load touches the window again. Discarded tabs keep
381+ // their title and address, so they're sorted like loaded ones.
382+ const loose = tabs.filter((t) => organizable(t) && settled(t) && !s.tabs[t.id!]?.keepLoose);
382383 const fresh = loose.filter((t) => s.tabs[t.id!]?.organizedKey !== organizedKeyOf(t));
383384 if (!fresh.length) return;
384385 const { ids: existingIds, list: existingGroups } = existingGroupsFor(s, windowId);