A second architecture review, run fresh against the duel and PvP surfaces, opened with a doc comment that had already given away the answer. `noticeQueue.svelte.ts` holds the [reward-and-guidance interplay](/posts/the-hint-engine#one-shell-two-jobs) every mode uses: a reward auto-dismisses after a delay, at most one guidance hint stays alive at a time, and a hint arriving while a reward is still visible waits its turn. Its own top-of-file comment describes that behavior as mirroring "the reward/guidance interplay used inline by gameState and duelGameState", which is another way of saying the module documenting the canonical version also documented, in the same breath, that two other places didn't use it.

Only the PvP store actually called it. The daily store and the AI-duel store each still carried their own byte-for-byte copy of the same three functions the queue already implemented, written before the queue existed and never migrated once it did.

```diff
- let _notices = $state<NoticeEntry[]>([]);
- let _pendingHint = $state<GuidanceNoticeEntry | null>(null);
+ const _overlay = createNoticeQueue(REWARD_DISMISS_MS);
```

Two pieces of state and the three functions that manipulated them by hand collapsed into one instance of the queue that was already sitting in the codebase, already correct, already proven in production by the one caller using it right. A test hook the daily store had grown specifically to poke at its own hand-rolled notice state came out with it, its five call sites in the test suite switching to the same real notification path the rest of the suite already exercised. No interface changed, no behavior changed, and the module's own comment stopped being an accurate description of a problem and started being just a description.