fab931fa28
Review follow-up, comments and one type annotation. No behaviour change. The unmount effect now clears pending timers, but its leading comment is still entirely about the focus bus, so the cleanup reads as unrelated code that happens to be in the same block. Say why it lives there: both concerns are "this composer is going away", they unmount together by definition, and a sibling unmount-only effect would only be a second place to forget. In the regression test, the clearTimeout mock declared id as number. Nothing that reaches it is a number: jsdom under node returns a Timeout object, which is why the scheduled and cleared arrays are unknown[] and compared by identity. The annotation documented a shape the test never sees, so it is now unknown with the cast moved to the one call that genuinely wants a number.