Skip to content

refactor(menubar): chrome-flock coordinator [P17.03]#171

Closed
cesarnml wants to merge 9 commits into
agents/p17-02-shared-prompt-dismissal-componentfrom
agents/p17-03-chrome-flock-coordinator
Closed

refactor(menubar): chrome-flock coordinator [P17.03]#171
cesarnml wants to merge 9 commits into
agents/p17-02-shared-prompt-dismissal-componentfrom
agents/p17-03-chrome-flock-coordinator

Conversation

@cesarnml

Copy link
Copy Markdown
Owner

Summary

Post-Verify Patch Commits

  • 092ceea6 refactor(P17.03): remove unused hideHUDImmediately helper [post-verify]

cesarnml added 8 commits July 12, 2026 13:45
…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.
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.
@vercel

vercel Bot commented Jul 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
codogotchi Ready Ready Preview, Comment Jul 12, 2026 7:28am

@cesarnml cesarnml deleted the branch agents/p17-02-shared-prompt-dismissal-component July 12, 2026 11:35
@cesarnml cesarnml closed this Jul 12, 2026
@cesarnml cesarnml deleted the agents/p17-03-chrome-flock-coordinator branch July 12, 2026 11:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant