refactor(menubar): chrome-flock coordinator [P17.03]#171
Closed
cesarnml wants to merge 9 commits into
Closed
Conversation
…action [red] AttentionBubble is the one chrome panel type of the five (AnimationBadge, GateBadge, AttentionBubble, SpeechBubble, RPGHUD) whose anchor math has no dedicated pure-function test coverage today — it lives as a private `BubbleLayout` enum inside AttentionBubblePanel.swift. The other four (AnimationBadgeLayout, GateBadgeLayout, SpeechBubbleLayout, RPGHUDLayout) are already pure, already unit-tested, and unchanged by this ticket. These tests target a not-yet-existing `AttentionBubbleLayout` type and fail to compile until the chrome-flock coordinator work promotes the private enum out into a testable, coordinator-consumable form.
…ut [green] Makes the AttentionBubbleLayout red tests pass by promoting the file-private BubbleLayout enum (in AttentionBubblePanel.swift) to a non-private, coordinator-consumable AttentionBubbleLayout type — same pure-function + test-coverage shape as its four sibling panel-layout types. Pure rename; zero behavior change (verified: full 1065-test suite green with the new type in place). Adds ChromeFlockCoordinator, not yet consumed by either window shape. It owns panel-instance lifecycle, the mechanical reposition/front/hide act, and drag/right-click routing for the five chrome panel types (AnimationBadge, GateBadge, AttentionBubble, SpeechBubble, RPG HUD family) — per-shape anchor geometry continues to come from each panel's own existing reposition overload and the already-pure, already-tested *Layout types, unchanged. Each host retains all "when is this visible" business logic (active-content flags, hover state, transient-reveal timers); only the mechanical act moves. Own-mode and Minimalist-mode migration onto this coordinator lands in the next two commits per the ticket's staged plan.
…[green] FloatingPetPanelController no longer owns the animation badge, gate badge, attention bubble, conflict (speech) bubble, or RPG HUD family's panel instances, lazy-init wiring, or mechanical reposition/front/hide calls directly — it now delegates all of that to `chromeCoordinator`, constructed with routing closures that route drag/right-click gestures on floating chrome back into FloatingPetInteractionView, exactly as before. All "when is this visible" business logic stays in this controller unchanged: active-content flags (attentionActive/conflictActive/ gateBadgeContent), the hover-driven HUD reveal state machine (isHoveringPet, hudAutoHideWork, hudHoverMonitor, transient-reveal timers), and drag-suppression of HUD/ghost chrome during a pet drag (isDraggingPet). The live re-anchor path (`reanchorChrome`, hot on every drag/resize tick) deliberately calls the coordinator's `existing*Panel` accessors and repositions those panels directly without re-fronting them, preserving the original no-refront-during- drag behavior verbatim — the coordinator's own `repositionX` methods (which do front the panel) are reserved for content-driven show paths (`show`, `applyAttention`, `applyGateBadge`, `applyConflictBubble`, `updateGhostPresentation`), matching exactly which call sites fronted before this change and which did not. Full 1065-test suite green; no test changes required since behavior is unchanged.
…inator [green] MinimalistPanelController no longer owns the gate badge, attention bubble, or conflict (speech) bubble panel instances, lazy-init wiring, or mechanical reposition/front/hide calls directly — it now delegates to `chromeCoordinator`, constructed with routing closures that route drag/right-click gestures back into `badgeView`'s external- drag/hide-prompt handling, exactly as before. Preserves the two distinct call-site behaviors verbatim: the gate badge fronts unconditionally on both content-change and badge-move paths (both call `repositionGateBadgeMinimalist`, matching the original single shared `applyGateBadgePanel` helper), while the attention bubble and conflict bubble front only on their content- change path (`applyBubble`/`applyConflictBubblePresentation` front explicitly after a no-front `existing*Panel.reposition(...)` call, matching the original split between `repositionBubble`/ `repositionConflictBubble` and their fronting call sites). Full 1065-test suite green; no test changes required since behavior is unchanged.
… verbatim distinctions
Post-verify self-audit found this coordinator method was never called — both controllers call chromeCoordinator.existingHUDPanel?.hideImmediately() directly at every call site instead. Removing the redundant wrapper.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
P17.03 Chrome-flock coordinatoragents/p17-02-shared-prompt-dismissal-componentpatchedcompleted at 2026-07-12 07:20 UTCcleancompleted at 2026-07-12 07:27 UTCPost-Verify Patch Commits
092ceea6refactor(P17.03): remove unused hideHUDImmediately helper [post-verify]