@@ -87,15 +87,15 @@ The first repair stays on supported popover APIs:
8787
88881 . Each tab emits a typed ` (tab, size) ` event from inside that tab's view. No asynchronous callback reads the mutable
8989 selected tab.
90- 1 . The controller stores height by tab and only applies a measurement when it belongs to the active tab.
91- 1 . Width resolves once per open session: 880 points on a normal display, or the available screen width minus margins. It
90+ 2 . The controller stores height by tab and only applies a measurement when it belongs to the active tab.
91+ 3 . Width resolves once per open session: 880 points on a normal display, or the available screen width minus margins. It
9292 never uses ` fittingSize ` or a transient measured width.
93- 1 . The maximum body height is the room below the status item after fixed chrome and screen margins. Oversized content
93+ 4 . The maximum body height is the room below the status item after fixed chrome and screen margins. Oversized content
9494 uses that complete viewport and scrolls; shorter content keeps its ideal height.
95- 1 . The status-item button's screen and current ` visibleFrame ` are read on every open and after screen-parameter changes.
96- 1 . The hosting root fills its assigned frame with ` .top ` alignment.
97- 1 . ` NSPopover.animates ` drives the size change. A simultaneous independent SwiftUI transition is not used.
98- 1 . The visibility guard is set before ` NSApplication.activate() ` . Fit tasks are cancelled while open and one restart
95+ 5 . The status-item button's screen and current ` visibleFrame ` are read on every open and after screen-parameter changes.
96+ 6 . The hosting root fills its assigned frame with ` .top ` alignment.
97+ 7 . ` NSPopover.animates ` drives the size change. A simultaneous independent SwiftUI transition is not used.
98+ 8 . The visibility guard is set before ` NSApplication.activate() ` . Fit tasks are cancelled while open and one restart
9999 runs after close.
100100
101101The UI must not call ` setFrameTopLeftPoint ` on the popover's private backing window. Every surveyed implementation with
@@ -170,9 +170,9 @@ The approved preview is a real editor surface backed by the same Core status-ite
170170 provider. The preview exposes the resulting global status order. Drag actions have Move Earlier and Move Later
171171 keyboard and accessibility actions.
172172
173- The model list mounts its regular stack in stages inside the tab's single scroller. A lazy stack cannot be the source
174- of an intrinsic popover height: its reported height changes with the viewport and creates a resize-layout feedback
175- loop. An AppKit drag island is used only if native SwiftUI drop feedback proves unstable on screen.
173+ The model list mounts its regular stack in stages inside the tab's single scroller. A lazy stack cannot be the source of
174+ an intrinsic popover height: its reported height changes with the viewport and creates a resize-layout feedback loop. An
175+ AppKit drag island is used only if native SwiftUI drop feedback proves unstable on screen.
176176
177177### Providers
178178
@@ -183,12 +183,12 @@ The provider header contains enablement, mark or text fallback, official name, l
183183status, and refresh interval. Recovery details remain lazy and follow this order:
184184
1851851 . Disabled: preserve account, credential source, and failure detail while polling stops.
186- 1 . Access needed: show each resource as Needed, Granted, Stale, or Error with Grant or Grant Again.
187- 1 . Credential store unreadable or unsupported: name the store and show the matching setup path.
188- 1 . Missing, expired, or revoked: show a copyable official CLI recovery command and Check Again.
189- 1 . Policy or license denial: show the account or administrator action.
190- 1 . Offline or rate limited: keep stale data and show retry timing.
191- 1 . Connected: show account, plan, credential source, and last successful refresh.
186+ 2 . Access needed: show each resource as Needed, Granted, Stale, or Error with Grant or Grant Again.
187+ 3 . Credential store unreadable or unsupported: name the store and show the matching setup path.
188+ 4 . Missing, expired, or revoked: show a copyable official CLI recovery command and Check Again.
189+ 5 . Policy or license denial: show the account or administrator action.
190+ 6 . Offline or rate limited: keep stale data and show retry timing.
191+ 7 . Connected: show account, plan, credential source, and last successful refresh.
192192
193193Providers discovered from installed CLIs, credential stores, or existing snapshots appear by default. Show All reveals
194194the remaining supported providers for manual setup. Recovery and empty states keep the provider mark or fallback badge
@@ -350,10 +350,10 @@ Verification uses:
350350
3513511 . Core tests for typed measurements, constant width, caps, geometry, chart rules, style identity, launch policy,
352352 tooltip timing, provider setup, refresh policy, and diagnostics.
353- 1 . AppKit integration tests with a real popover and window frame.
354- 1 . An Xcode UI-test target for status-item opening, Command-R, Command-F, Escape, Tab and Shift-Tab order, controls,
353+ 2 . AppKit integration tests with a real popover and window frame.
354+ 3 . An Xcode UI-test target for status-item opening, Command-R, Command-F, Escape, Tab and Shift-Tab order, controls,
355355 accessibility, and performance.
356- 1 . An on-screen release matrix for macOS 14, 15, 26, and 27 covering light and dark mode, contrast, reduced motion and
356+ 4 . An on-screen release matrix for macOS 14, 15, 26, and 27 covering light and dark mode, contrast, reduced motion and
357357 transparency, both screen edges, notch-adjacent placement, external displays, every Dock position, every tab pair,
358358 arrow shape, bezels, hover, press, and focus.
359359
@@ -363,11 +363,11 @@ of persisted user settings. Development launch recipes use that isolated mode by
363363## Delivery order
364364
3653651 . Preserve the existing quick-win changes, correct their sizing seam, and add the research brief and approved artifact.
366- 1 . Land geometry, measurement, visibility, status re-tier, launch isolation, and CI foundations.
367- 1 . Land Core presentation, setup, refresh, diagnostics, tooltip, and chart models.
368- 1 . Land the approved Usage and Settings sections with native controls and complete inventory.
369- 1 . Land the unified History chart, legend, selection, export, and accessibility.
370- 1 . Land the shared tooltip panel, log UI, keyboard routes, and provider marks with approved licensing metadata.
371- 1 . Run the full unit, integration, UI, accessibility, coverage, performance, and OS verification matrix.
366+ 2 . Land geometry, measurement, visibility, status re-tier, launch isolation, and CI foundations.
367+ 3 . Land Core presentation, setup, refresh, diagnostics, tooltip, and chart models.
368+ 4 . Land the approved Usage and Settings sections with native controls and complete inventory.
369+ 5 . Land the unified History chart, legend, selection, export, and accessibility.
370+ 6 . Land the shared tooltip panel, log UI, keyboard routes, and provider marks with approved licensing metadata.
371+ 7 . Run the full unit, integration, UI, accessibility, coverage, performance, and OS verification matrix.
372372
373373Nothing except usage-site links is removed. Condensed information remains reachable and stays in accessibility values.
0 commit comments