rdmbair15m5-changelog-20260922-0431-feat-20260904-11-ecsappkit-hosted-status-item
rdmbair15m5-changelog-20260922-0431-feat-20260904-11-ecsappkit-hosted-status-item
Upstreamed RTTy's reference MenuBarStatusItemController into ECSAppKit and ecs0lib as ECS0HostedStatusItemController, providing hosted-SwiftUI status-item support with explicit length control, dynamic fitting-size allocation, VoiceOver accessibility surface, native snapshot verification, and application lifecycle coupling.
Scope & Repositories Touched
rdmsm4x:~/dev/lib/ECSAppKit&rdmbair15m5:~/dev/lib/ECSAppKit(standalone library, consumed by 26 apps)rdmsm4x:~/dev/lib/ecs0lib&rdmbair15m5:~/dev/lib/ecs0lib(canonical library monorepo)rdmsm4x:~/dev/issues(ticket tracking)
Summary of Changes
- ECS0HostedStatusItemController
(
Sources/ECSAppKit/ECS0HostedStatusItemController.swift&Sources/ECS0AppKit/ECS0HostedStatusItemController.swift):- Implemented native status item controller hosting arbitrary SwiftUI
views inside
NSStatusItem.button. - Embedded hosted view
ECS0StatusItemLabelHostingViewoverridesisAccessibilityElement = false,accessibilityChildren = [], andhitTest = nilso clicks and VoiceOver focus route directly tostatusItem.button. - Provided
ECS0StatusItemAllocation.length(fittingWidth:hasVisibleContent:)ensuringmax(1, ceil(fittingWidth))allocation when content is present, orNSStatusItem.variableLengthwhen empty, preventing zero-width allocation bugs in menu bars. - Added explicit length control override support (
length:parameter) for fixed status badges. - Built
ECS0StatusItemNativeSnapshotcapturing geometry, allocation width, fitting width, target/action states, popover configuration, and VoiceOver element hierarchy for reliable headless testing and runtime verification. - Integrated
ECS0StatusItemApplicationLifecyclefor clean application delegate lifecycle pairing (configure,applicationDidFinishLaunching,applicationWillTerminate), eliminating reliance on stateful singletons. - Provided optional Liquid Glass styling integration for popover
content via
ECSUI/ECS0UI. - Included full cross-platform stubs for non-macOS platforms.
- Implemented native status item controller hosting arbitrary SwiftUI
views inside
- Unit Test Coverage
(
Tests/ECSAppKitTests/HostedStatusItemControllerTests.swift&Tests/ECS0LibTests/HostedStatusItemControllerTests.swift):- Added 6 comprehensive test suites/cases testing dynamic fitting allocation, explicit length override, VoiceOver accessibility element boundaries, label updates, snapshot stability under repeated installation IDs, and application lifecycle management.
- Verified that RTTy's acceptance suite contract
(
MenuBarLabelRenderingTests) is matched exactly. - Preserved RTTy's own implementation untouched in
apps/RTTy, satisfying acceptance criterion 3 prior to App Store submission.
Verification Evidence
ECSAppKit:swift test-> 26 tests passed in 4 suites (0 failures).ecs0lib:swift test --filter HostedStatusItemControllerTests-> 6 tests passed (0 failures).AirFleet:swift test-> 74 tests passed in 13 suites (0 failures).replicantDB:swift build-> build complete rc=0 in 1.15s.RTTy:swift test --filter MenuBarLabelRenderingTests-> 48 tests passed (0 failures); working tree 100% clean onmain.
Git Hashes & Remotes
ECSAppKit: commit507835apushed toorigin(git.ecs0.net:git/lib/ECSAppKit.git),fleet, andbackup(github.com/richhdoty/rdmsm4x-dev-lib-ecsappkit.git). Local clone fast-forwarded to507835a.ecs0lib: commiteb45269pushed toorigin(github.com/richhdoty/rdmsm4x-dev-lib-ecs0lib.git),fleet(git.ecs0.net:git/lib/ecs0lib.git), andbackup. Local clone fast-forwarded toeb45269.
Rollback & Undo
- Revert commit
507835ainECSAppKitviagit revert 507835a. - Revert commit
eb45269inecs0libviagit revert eb45269.