Invisible housekeeping: menu bar code gets divided up and size limits get enforced
Nothing new appears in the menu bar in this release; the work is behind the wall. menubar.py had grown to 2,485 lines and crossed 2,000 for the third time. Icon and alert helpers now live in menubar_chrome.py, while state constructors moved to menubar_state.py, bringing the original file down to 2,230 lines. Only file-level functions moved: PyObjC, the bridge between Python and macOS Objective-C, connects controls through AppDelegate method names, so moving one would silently break its control. _popover_size was split into a calculation function with a three-line shell left behind, keeping menubar_state.py testable without the ObjC runtime. CI, the automatic check run on changes, now fails a build when a guarded file exceeds its limit; after a cut, lower the limit rather than raising it to pass. CLAUDE.md's module map also shrank from 24 rows to 12, keeping only warnings that are not obvious from opening each module. It is like reorganizing plumbing: no new fixture appears, but later repairs need not keep breaking through a larger wall.