repo: CodeCaps; pre-work claim: posted to #agent-sync after reading AGENT-SYNC.md; Lane: codex/independent-source-refresh; Board 4bcf84f1; GitHub #137; PR #142 open on this branch (depends on #139; refs #136).
- Added
CodexSessionQuotaReaderfor bounded passive Codex session JSONL reads with exact account identity, incremental append tracking, symlink-safe paths, and original event timestamps. Unchanged files do not invoke provider, Fleet, upload, or download work. - Split Settings → Sources & Fleet into independent Provider Checks and Codex Session File Checks toggles with separate 1-, 3-, 5-, and 15-minute intervals (five-minute provider default, one-minute file default). Manual refresh runs both enabled paths; disabling one source preserves the other when possible.
- Integrated scheduling, merge rules, and cancellation in
MonitorModel/SourceRefreshSettings; documented behavior indocs/REFRESH.md. - Verification:
CodexSessionQuotaReaderTests,SourceRefreshTests, and related refresh tests on the branch; hosted Swift CI green. Native Mac UI claims rely on code review and CI fixture rendering inDocsScreenshotTests, not supplied or manually captured screenshots.
Lane: codex/audit-residuals. Board 1ac04ba99f13478da0564f802d3af3e8; GitHub #19.
- Reconciled every A9 item against
origin/mainat0f4bbc8indocs/audits/2026-10-03-audit-9-reconciliation.md. Existing source and tests supersede several stale findings; structured Glance issue state and the Grok Heavy attribution question remain separate work. - Aligning export and display status when a provider marks a nonzero reading exhausted; adding direct dangerous-copy marker cases; passing a Trash path to AppleScript as an argument; documenting the current two-header ingest contract without changing it.
- Verification: focused hosted CI pending. Local
bash -nandgit diff --checkare planned; no local build on the loaded host.
2026-10-03 — MiniMax 5h/7d normalization, pacing marker prominence, and touch targets [AG, completed]
Lane: ag/ios-minimax-and-meter-prominence. PR #145 (merged as d0a9db0).
- MiniMax cadence normalization: normalized "Coding plan (all models)" and interval tokens directly into the 5-hour quota (
5h) and weekly into7d, consolidating MiniMax into two primary windows side by side without duplicate model metrics. - Prominent pacing markers on iOS: updated
CompanionUsageBarto an 18pt capsule marker with a 3.0pt width and 20pt allocated frame height, matching Mac prominence and eliminating clipping. - Touch target polish: enlarged the reset alarm bell button to 44x44 points with
.contentShape(Rectangle())for Apple HIG compliance. - Verified with 17 passing
CompanionModelTestsand clean local Xcode build forCodeCapsCompanioniOS Simulator target; merged tomain.
Lane: codex/companion-shared-keychain. Board 7175aba0; GitHub issue #129.
- Migrate the companion read token from standard and App Group preferences into an App Group Keychain item shared by the app and iOS widget. Keep legacy values until a successful Keychain write, provide explicit removal, and test migration/failure paths without real credentials.
- iOS App Store profiles already authorize
group.com.simplewithus.codecapsfor both targets. XcodeGen will include the shared store in app and widget targets; no hand-edited entitlements or project file.
2026-10-03 — Canonical brand icon, Glance meter alignment, iOS dual meters, and runaway alert history [AG, completed]
Lane: ag/companion-bars-and-icons.
- Canonical CodeCaps brand icon: restored the owner's authentic 3D gauge squircle mark from
/Users/jay/Code/Icons-Logos/CodeCaps/CodeCaps-Icon.icnsasassets/AppIcon.icns, updatedassets/icon-1024.png, populated all 15 iOS and Mac asset catalog sizes inios/CodeCapsCompanion/Assets.xcassets/AppIcon.appiconset/, and updatedscript/build_and_run.shto use canonicalassets/AppIcon.icnsdirectly without double-plate resizing. - Glance meter alignment: decoupled percentage and reset countdown in
GlanceMeter(GlanceViews.swift) into distinct columns with fixed widths (44pt percent trailing-aligned, 50pt countdown centered in an invisible column with fixed gap) so countdown alignment never shifts based on 100% vs 2-digit percentages. - iOS companion dual quota meters & MiniMax parity: updated
CompanionQuotaModel.swiftto exclude MiniMax supplementary video quota matching Mac Glance, addedshortWindow/longWindowcadence resolution, replaced single overarching progress bar inCompanionContentView.swift(quotaCard) with two side-by-side meters (CompanionMeterView) visible without expanding, and increasedCompanionUsageBarpacing marker height to 16pt (width 2.5pt) matching Mac Glance. - Runaway usage alerting visibility: updated
BurnRateNotificationinBurnRateMonitor.swiftto explicitly name the provider and quota window in notification title and body; createdRunawayAlertRecordhistory persisted inMonitorModel.swift; rendered recent runaway alert log in Settings under Runaway Agents; and updated Glance footer detail to surface recent alerts from the last 24 hours even after active burst subsides. - Verification: all 590 unit tests pass (0 failures, 4 skipped); iOS simulator builds clean via
xcodebuild.
2026-10-03 — Fleet Antigravity row says when the weekly reading is missing [GROK-BUILD, in progress]
Lane: grok-build/fleet-weekly-gap. Board 47021e4c. Worktree ~/apps/codecaps-grok-build.
- A fleet Antigravity row whose payload has a 5h meter and no weekly meter used to leave the second column blank. The long column now says "no weekly reading reported". A masked weekly says the existing masked caption. A weekly that is already on screen, a local row, and a one-meter provider leave the column alone.
- Files:
Sources/CodeCaps/GlanceViews.swift,Tests/CodeCapsTests/GlanceRowTests.swift. Codex's runaway-alert footer in the same file is left as it landed in #128.
Lane: /Users/jay/.codex/worktrees/codecaps-board/CodeCaps, codex/alerts-provenance-20261003. Boards 508560f7, 9a3d1a21, bc0f76fd, 29df655f, 1b71afd1.
- Public setup guide shipped in PR #127: https://codecaps.simplewithus.com/setup.html. Runtime alerts and client machine identity shipped in PR #128.
- Native widget repair adds correct shared-group signing on Mac and iOS, independent real widget cache, optional iOS timeline pulls, and in-app setup links. iOS drag reorder, menu presets, and Gemini CLI reader included in the active batch.
- Verification is in progress. Do not mark widgets shipped until signed package and actual data access are verified. Usage-Monitor #1583 remains blocked by an upstream unpatched development dependency advisory; no audit bypass.
Lane: ag/design-audit-f02-f06.
- iOS Companion Theme tokens (F-02, issue #41): added
CompanionTheme.swiftproviding appearance-sensitive dynamic color tokens (accent,warning,danger,barUsed,barRemaining) matching macOSTheme(0x087370 teal, 0xA85C05 warning, 0xBF3339 danger). Replaced hardcoded red/orange/green values acrossCompanionQuotaModel.swiftandCompanionContentView.swift. - Console toolbar density (F-06, issue #41): replaced the segmented Compact / Detailed layout control with a borderless View Options gear menu on All Platforms; repositioned the Find a Platform search field immediately adjacent to the page title; added
minWidth: 200to the page title to prevent middle truncation at minimum window width. - Unit tests & build verification: verified clean builds on macOS (
swift build) and iOS Simulator (xcodebuild); extendedConsoleNavigationTests.swiftwith layout test coverage; 581/581 unit tests passing. - Board & audit reconciliation: closed remaining actionable items for design audit issue #41 / board
4cef1b89.
2026-10-03 — Console sidebar arrow navigation, window min size bump, iOS settings detents, and board completion [AG, completed]
Lane: ag/arrow-nav-and-board-parity.
- Console sidebar arrow navigation: added focus-aware keyboard navigation to
ConsoleSidebar(ConsoleViews.swift) using@FocusState,.focusable(), and.onMoveCommand, allowing Up/Down arrow keys to navigate seamlessly between All Platforms, platform detail rows, and Settings pages while preserving custom button styling and accent highlights (closes issue #9). - Console window minimum size: bumped
Metrics.consoleMininQuotaComponents.swiftfrom 820 × 560 to 880 × 600 per app-wide design audit finding F-07 (issue #41). - iOS companion settings presentation: added
.presentationDetents([.medium, .large])to the settings sheet on iOS inCompanionContentView.swiftso the underlying quota list remains visible (finding F-05, issue #41). - Unit tests: added
ConsoleNavigationTests.swiftcoveringMetrics.consoleMin, page serialization round-trip, and settings page filtering; all 581 tests green inswift test. - AGENTS.md coordination protocol: documented inter-agent coordination stanzas,
#agent-syncheader formats, and per-bot routing policies per fleet instruction. - Board & issue reconciliation: conducted full board review against shipping codebase. Verified and reconciled completed work: closed issue #44 (iOS preview sound shipped in #65) and issue #57 (public site screenshots redrawn by Claude on Sep 30); resolved 17 open board items confirmed landed in previous PRs (#40, #43, #53, #65, #67, #74, #75, #103, #109, #110, #111, #112, #113, #115, #117, #118).
2026-10-02 — Custom mark sync, updated app icons, quota bar parity, cadence fix, and honest fallbacks [AG, completed]
Lane: feat/ios-icons-bar-parity-glance-logos (PR #115, squash f48fbda).
- Custom mark sync over wire: added
CustomMarkPayloadtransport inLocalQuotaSnapshot.swiftandWireEnvelope. MacLocalQuotaSnapshot.writeauto-exports loaded custom provider marks togroup.com.simplewithus.codecaps/CustomMarks/using private 0600 file descriptors; iOS companion unmarshals and renders them in-app. - Glance popover custom logo resolution: resolved bug where custom marks loaded in Settings but failed to render in the docked Glance popover/menu bar; added multi-extension lookup and candidate pool matching in
PlatformLogoImage. UpdatedmarkStyleandglanceMarkStyleto detect disk-resident custom marks and return.custom. - App icons regenerated: updated all 26 sizes across iPhone, iPad, and macOS AppIcon sets in
ios/CodeCapsCompanion/Assets.xcassets/AppIcon.appiconset/fromassets/icon-1024.png. Staged and running on Mac at/Users/jay/Applications/CodeCaps.app(PID 51106). - Real MiniMax mark on iOS: replaced SVG monogram in
ios/CodeCapsCompanion/Assets.xcassets/provider-minimax.imageset/with official raster waveform scales (@1x,@2x,@3x). - MiniMax cadence fix: updated
formatCadenceinCompanionQuotaModel.swiftandWidgetPresentation.swiftto inspectw.windowfirst and correctly parse4h,5h,1d, and1wintervals. - Quota bar parity: added
CompanionUsageBarwith two-tone segments (red used + green remaining) and vertical pacing indicator with white halo to iOS companion cards and widgetMiniProgressBar. - Fleet-wide fallback rule: replaced lookalike SF Symbols with
"questionmark.square.dashed"across Mac and iOS. - Remote runner CI: iOS TestFlight build dispatched to GitHub-hosted macOS runner (
ios-ship.yml, run 37087309918). - Coordination: briefed MiniMax (
[MM]) in Slack#agent-sync(thread1790990134.027879); Apple Note created and pinned headlessly in iCloud folderCoding.
2026-10-02 — Mac widget embedding, honest widget empty state, Glance and Settings UI polish, and custom logo fixes [AG, completed]
Lane: ag/ui-widgets-polish-and-embed (issue #111, PR #112, squash 7c25e14).
- Embedded macOS widget extension: Updated
script/build_and_run.shto compileCodeCapsWidgetsMacuniversal target (arm64/x86_64) and embedCodeCapsWidgets.appexinsideContents/PlugIns/, signed and validated with Developer ID. - Honest widget presentation: Eliminated misleading sample/placeholder numbers (e.g. 94%, 74%, 91%) across iOS and macOS widgets (
WidgetDataProvider.swift,WidgetViews.swift); unconfigured or un-synced widgets now render an explicit, honestWidgetEmptyStateView. - Platform marks & fallback hygiene: Added
CustomMarkMode(.colorvs.template) and dark appearance variant support (<key>-dark.<ext>). Enforced fleet-wide rule replacing sneaky SF Symbol lookalikes (sparkles,cpu,bolt,cursorarrow.rays) with"questionmark.square.dashed"across all unresolved logos. - Glance popover polish: Increased row spacing (
glanceLocalRowHeight = 42pt) with a visible faint grey hairline divider (Theme.hairline), high-contrast timeframe label styling, and italic reset countdowns placed directly adjacent to percentages. - Settings & console layout: Removed dark tick before time elapsed; enforced strict Title Case "Under Pace" / "Over Pace" (dropped "cap"); removed duplicative provider names in footer; enlarged pacing marker (18pt height) standing proud of the quota bar; arranged multi-window models side-by-side in
HStack. - Coordination: Polled and posted progress on
#agent-sync([AG->MM]), collaborating with MiniMax ([MM]) in~/apps/codecaps-mm-finish. - Verification: 576/576 unit tests green in
swift test; staged bundle validated bycodesign --verify --deep --strict. - Local installation: Staged, signed, and launched into
/Users/jay/Applications/CodeCaps.app(PID 35926), replacing stale Oct 1 build.
Lane: ag/custom-logo-color-and-dark-mode (board 6a375482, issue #102, PR #103, squash b1d38a7).
- Fixed bug where uploaded custom logos (such as MiniMax) were treated as monochrome template marks and tinted pure black
#1F2B3A/Theme.ink. - Added
CustomMarkMode:.color(Color Version, default) preserves full original artwork with.renderingMode(.original)and no tint;.template(Light/Dark Version) renders an adaptive silhouette. - Added support for dedicated Dark Appearance variant uploads (
<key>-dark.<ext>) alongside primary custom logos (<key>.<ext>), resolving automatically across SwiftUI views and the status item when dark appearance is active. - Updated Settings
SettingsLogoStylePagewith segmented mode picker, distinct primary and dark variant action rows, and clear helper copy. - Updated menu bar status item in
AppDelegateandPlatformLogoImage.menuBarImageto honorCustomMarkModeand appearance variants. - Verified with 557 passing tests in
swift test, including new test cases for custom mark mode persistence, cache busting, and dark variant resolution.
2026-09-29 — WidgetKit widgets for CodeCaps (iOS Home Screen, Lock Screen & Mac desktop) [AG, completed]
Lane: ag/widgets-ios-mac (issue #76).
WidgetKit widget extension for CodeCaps across iOS and macOS:
- Overview widget (
systemSmall,systemMedium,systemLarge): displays active AI provider quotas, remaining percentages, and reset countdowns. - Single Provider Focus widget (
systemSmall,systemMedium): dedicated circular/linear gauge tracking a chosen AI provider or closest-to-cap provider. - Lock Screen / StandBy accessory widgets (
accessoryCircular,accessoryRectangular,accessoryInline) for at-a-glance monitoring on iOS. - App Group container data bridge (
group.com.simplewithus.codecaps) readingquota-windows.jsonand UserDefaults platform order. - Live timeline reloads wired into
MonitorModel.swift(macOS) andCompanionQuotaModel.swift(iOS). - Verified via
xcodebuild(iOS simulator and macOS targets) and unit tests inWidgetTests.swift(all 285 tests passing).
Lane: claude/sparkle-auto-update at ~/apps/codecaps-claude-sparkle (board 7d27a555). PR #75, squash eba1706.
Owner ruling today: every fleet Mac app updates itself through Sparkle 2 from signed releases CI publishes on each merge to main; CodeCaps is the pilot and docs/AUTO-UPDATE.md is the pattern to copy. Sparkle 2.10.0 via SwiftPM, AppUpdater installs as soon as CodeCaps is not frontmost, Check For Updates… in both menus and Settings ▸ About. build_and_run.sh embeds and inside-out signs Sparkle.framework and verifies strictly; mac-release.yml publishes v<VERSION>-build.<N> releases marked latest, feed releases/latest/download/appcast.xml. Local rehearsal: notarized build 66 updated itself to build 67 in about ten seconds. Main run 36653509344 built and verified the bundle on CI, then skipped publishing: MAC_CERT_P12_BASE64 and MAC_CERT_PASSWORD are not reachable (no Infisical wiring or repository secrets on CodeCaps yet). SPARKLE_ED_PRIVATE_KEY was set; ASC_* already existed.
Lane: mm/glance-dual-bars at ~/apps/codecaps-mm-glance-bars (board 792f3427). PR #74, squash 4bc714e.
The compact row spoke for one window only — the one closest to its cap — so seeing both cadences meant expanding every row. A plan could read 92% on the 5h window while the weekly cap sat at 11%, and the glanceable surface hid that.
- Popover widened 400pt to 560pt. Each row carries two meters on the collapsed line: caption, bar, percentage, one per cadence. Both stay on one line, so
QuotaGlanceMetrics.popoverHeightand the popover's height behaviour are unchanged. - Windows pair by cadence, not array order: short = closest to cap among sub-day cadences, long = closest among weekly-or-longer, read from each reader's own token and falling back to time-to-reset. Captions come from the token, so Antigravity's "Claude & GPT · Weekly" renders as "7d".
- Antigravity masked 5h windows stay out of a meter; a row with every window masked falls back to its driving window rather than rendering blank. Single-cadence providers fill slot one only — they used to be able to resolve both slots to the same snapshot, which renders one meter duplicated. MiniMax supplementary video quota never displaces a real cap.
- Column widths are
Metricsconstants andglanceRowIntrinsicWidthis computed from them, so a widened column fails a test instead of clipping theOpen CodeCaps ⌘1footer the way the old 360pt width did. - 269/269
swift testgreen, 19 new inGlanceMeterTests. Rendering the real rows at 560pt caught a collision no test could see:meterAreais a single child of the row'sHStack, so the gap written outside it never landed between the two meters and the first meter's percentage ran into the second meter's caption. - The chevron stays. The expansion is now for detail the meters leave out: a third cadence, or a per-model split inside a pool.
Lane: codex/public-copy at ~/apps/codecaps-codex-public-copy (board 90d3d40a, issue #52). PRs #53 and #54 aligned the GitHub Pages product copy with supported AI plan windows, existing local sign-ins, and optional collector push/pull. Pages run 36281399171 deployed the gh-pages merge, and the live page and screenshot assets were verified. No reader or app behavior changed.
Running log of work units, newest first. Each entry: date, lane, summary, PR (when shipped), follow-ups (when parked).
2026-09-27 — iOS multi-window allowance periods, customizable platform order, duplicate source folding, and foreground push alerts [AG, completed]
Lane: ag/ios-multi-window-reorder-notifications (issue #66, PR #67).
Parity updates for CodeCaps iOS companion matching macOS menu bar Glance popover:
- Multi-window expansion: Tapping any platform card expands inline to show each allowance period / window with label, reset countdown, mini progress bar, and percentage. Consolidates multi-window platforms (e.g. MiniMax 4 active windows, Claude Code 5h and 7d windows).
- Customizable platform order: Full reordering in Companion Settings with up/down arrows and drag-to-reorder, with persistence to UserDefaults and App Group (
group.com.simplewithus.codecaps). Includes a navigation toolbar shortcut. - Duplicate source folding: When multiple readers report for the same window (e.g. Cursor DashboardService and
gbufor Grok Bot weekly), the primary controls the platform card and duplicates fold cleanly under an expandable "Additional Sources" disclosure section. - Foreground notification delegate: Fixed iOS suppressing foreground local/test notifications by configuring
CodeCapsNotificationDelegatewithUNUserNotificationCenterDelegatewillPresentreturning banner, sound, badge, and list. Verified test alerts and remote push display banners immediately. - Fixed
AlarmSoundPlayer.swiftAVAudioSessionconditional compilation for macOS companion targetCodeCapsCompanionMac. - Added 5 unit tests in
CompanionModelTests.swiftcovering App Group parity, sentence gap hygiene, platform ordering, duplicate source separation, and Antigravity controlling-cap masking. All 222 tests pass.
Lane: mm/bundle-module-crash.
Opening CodeCaps quit it immediately. Two crash reports at 3:38am Central, EXC_BREAKPOINT / SIGTRAP, both with _assertionFailure -> static NSBundle.module -> PlatformLogoImage.bundledImage on top, reached from AppDelegate.updateStatus during applicationDidFinishLaunching. Running the binary directly printed the trap:
CodeCaps/resource_bundle_accessor.swift:12: Fatal error: could not load resource
bundle: from /Users/jay/Applications/CodeCaps.app/CodeCaps_CodeCaps.bundle or
/private/tmp/codecaps-land-verify/.build/arm64-apple-macosx/debug/CodeCaps_CodeCaps.bundle
The SwiftPM-generated accessor probes exactly two paths: the .app bundle root, and the absolute .build directory that compiled the target. build_and_run.sh copies the resource bundle to Contents/Resources, which the accessor never probes, and nothing placed a copy at the .app root. An installed build could therefore only resolve its own brand marks while the checkout that built it still had its .build directory, and the first Bundle.module touch is the menu bar icon built during launch. The installed build came from a /private/tmp checkout that has since been deleted.
Fixed in #61:
- Added
ResourceBundleinSources/CodeCaps/PlatformLogo.swift, which resolves the bundle by hand — the app root, the resource directory, the executable's directory, and three parent levels each — and returnsnilrather than trapping, so a missing brand mark costs a missing brand mark andPlatformLogodraws its SF Symbol fallback. - Inside an installed
.appthe generated accessor is refused outright (mayUseGeneratedAccessor), because the build directory it names is gone by design. A bare.buildexecutable and the XCTest harness still use it, which is what keepsswift testworking: underswift testBundle.mainis Xcode's ownxctesttool, so no probe can reach the bundle. build_and_run.shnow fails the build when SwiftPM produced no resource bundle, and asserts the copy reachedContents/Resources.
Rejected alternative: seeding a copy at the .app root. It works, but codesign rejects it with unsealed contents present in the bundle root, and the build then falls back to ad-hoc signing, which changes the code identity every build and invalidates the saved Read and Ingest tokens.
194 tests pass, including six new ones. Verified on the installed build with the build directory moved away: the app launches and stays up, where the previous build traps.
Board 6c0c64f440a34425974ccf804ea10a71. Closes #62.
Lane: plumber/ios-testflight-workflow.
Stood up automated GitHub-hosted macOS TestFlight ship workflow for CodeCaps Companion:
- Created
.github/workflows/ios-ship.ymlwith push trigger, path filter (ios/CodeCapsCompanion/**), and 30-minute cron (26,56 * * * *). - Added in-repo fleet scripts in
scripts/ios-fleet/:ExportOptions-*.plist,apps.json,asc-api.mjs,scheduled-ship-gate.sh, andship-testflight.sh. - Added wrapper scripts
scripts/ios-appstore-gm-prepare.shandscripts/ios-ship-testflight.sh. - Configured repository secrets on GitHub:
ASC_KEY_ID,ASC_ISSUER_ID,ASC_KEY_P8,IOS_DIST_P12_BASE64, andIOS_DIST_P12_PASSWORD. - Verified local dry-run archive resolution and scheduled ship gate.
Lane: ag/companion-app-group-and-mac.
Configured App Group group.com.simplewithus.codecaps across iOS companion and macOS targets:
- Added
CodeCapsCompanion.entitlementsandCodeCapsCompanionMac.entitlementswith App Groupgroup.com.simplewithus.codecaps. - Added
CodeCapsCompanionMactarget inios/CodeCapsCompanion/project.ymlfor macOS 14+ with bundle IDcom.simplewithus.codecaps.macos. - Updated
CompanionQuotaModel.swiftto read shared defaults and quota files from the App Group container. - Updated
LocalQuotaSnapshot.swiftinQuotaCoreto mirror snapshots into the shared App Group container when available. - Replaced interim mark with authentic 3D rich teal (#0B6B5D) icon matching the Usage Monitor Client design with embossed circuit traces, circular sync arrows, and glossy white plate.
- Removed script/make_codecaps_icon.swift and assets/icon-1024-transparent.png.
- Removed iOS companion App Group entitlement to align with standard automated App Store signing while keeping it active on macOS companion.
- Verified xcodebuild archive succeeds and prepares for TestFlight upload.
- Built both targets and verified all 163 unit tests pass.
Lane: mm/audit-2026-09-20. Audit: docs/audits/2026-09-20-comprehensive.md.
GitHub umbrella: #19.
Board item: filed under app codecaps, kind github-issue.
Swept every Swift file in Sources/CodeCaps/ and Sources/QuotaCore/, the
build script, the tests, the README. 22 findings (5 high, 7 medium, 10 low)
plus 6 test/doc gaps.
Tier-1 implementation in this PR:
- A9-01 — SettingsViews.swift:734 footer copy updated to match the System
default from commit
3b24eb8. README "Appearance" bullet updated too. - A9-02 —
script/build_and_run.sh:462no longer discards the notarization rejection log (>&2 2>/dev/null→>&2). - A9-03 —
script/build_and_run.sh:198-200carries a comment explaining why--deepis fine in the ad-hoc fallback only. - A9-13/27/28 —
AGENTS.mdandEFFORT-LOG.mdadded. - A9-23 — README "Logs" section added.
A9-04 retracted after re-read (script already exits 1 on rejection before stapling).
Build clean, 130/130 tests pass. Merged via auto-merge.
Queued for follow-up lanes: A9-05, A9-06, A9-07, A9-08, A9-09, A9-10, A9-11, A9-12, A9-16, A9-17, A9-18, A9-24, A9-25, A9-26, A9-29. A9-14 and A9-15 (producer rename) deferred — wire format, needs owner call.
Lane: mm/system-default-theme. Five audit-batch fixes landed with the
theme-default change:
- audit #4 —
DisplaySection.drivingdeterminism (ff...f3). - audit #5 — Antigravity RPC short-circuit on 4xx (7eb8202).
- audit #6 —
PlatformDetailPagesave debounce 250ms (2151862). - audit #7 — Glance consent-needed row rendering (36757fc).
- audit #8 — Dynamic Type on body copy (bd10335).
Lane: mm/glance-popover-polish-2026-09-22 (PR opening on push).
User feedback from a Glance popover screenshot (2026-09-22): percent column was clipping the % on Antigravity rows (10...), the trailing countdown was clipping long strings (12h 5...), the middot between 7 of 7 and the time was tight, and the Refresh button was redundant because MonitorModel.refreshTimer (300s) plus the 30s clock already keep the popover current. Glance is also the surface the owner actually opens, but it only showed each provider headline percentage; tapping a row now expands inline to list every window for that provider.
GlanceViews.swift:
- Widen percent column 40pt -> 48pt and trailing column 58pt -> 64pt; widen the no-percent branch from 106pt to 112pt. Add lineLimit(1), minimumScaleFactor(0.85) and fixedSize(horizontal: true) on the percent Text so a flexible HStack can never shrink the column enough to clip the % again.
- headerStatus now uses two ASCII spaces on either side of the middot (7 of 7 · 2:22 PM), matching the fleet two-space convention.
- Move the Refresh button out of the footer and into the header. Icon-only (arrow.clockwise), with a ProgressView replacing the icon while MonitorModel.isRefreshing. Tooltip and accessibility label still identify it as Refresh Quotas.
- Add @State expandedIds to GlancePopover, plus a toggleExpanded helper. Pass isExpanded and onTap through to GlanceRow. Tapping a row toggles its expansion; tapping the alarm-bell button inside the trailing column short-circuits the gesture so an arm or disarm never accidentally expands a row.
- Render the inline expansion as a VStack of label / percent remaining / reset countdown, one row per QuotaWindowSnapshot, using AntigravityDisplay.windowLabel for the human-readable window name. Tinted surface background, chevron on the rightmost edge of the row rotates 180 degrees when expanded, .animation(.easeInOut(duration: 0.18), value: isExpanded).
Fleet pull already returns distinct per-machine snapshots (FleetOrigin.split in QuotaCore/FleetOrigin.swift); there is no aggregation, so a MiniMax 63% on this Mac and a different percentage in the Fleet section are two independent reads from separate API sessions, not a single quota shown two ways. The expanded row labels now make origin legible without inspecting the underlying window.
Board 42ae688ab3b84d9aa65e445aab072a15. Closes #37.
Board 6a3f582af81347f5ad678ec925e40089. Closes #170. PR #171, branch mm/pip-window-layout. Owner-reported, with screenshots, after watching the floating PiP HUD with five pinned rows.
PipWidget.swift:
- The panel was a fixed 260x120 and the view pinned between minWidth 230 and maxWidth 280, so a provider drawing two quota bars overflowed the panel and clipped its percentage and countdown on the right. There was no responsive path and no resize affordance at all.
- PipMetrics now declares every dimension once and derives the responsive thresholds from those constants, so the AppKit side that sizes the panel and the SwiftUI side that draws in it cannot drift apart. Breakpoints tuned by hand to match a drawing are breakpoints that rot the next time a constant moves; these are computed, and a test pins that.
- Two zones edge to edge: lighter header on Theme.surface, darker rows panel on Theme.groupBand.
- The header carries the owner's own black-on-transparent artwork as a template mark, centred as one unit with "CodeCaps" (no "PiP") at 22pt. One asset is black-on-transparent on the light band and white-on-transparent on the dark one. The artwork is reused as-is; nothing here re-cuts, re-exports or substitutes icon art.
- Close button always visible, in the header rather than hovering in over the meters.
- Resizable and bounded; refits whenever the pinned row set changes, so pinning always gets the window back to a size that fits. A drag-resized window stays the owner's size.
- Content compresses rather than clips, down to the owner's floor of one or two bars and their percentages; shortening hides whole rows, never fewer than one.
- The hosting view is built once instead of being swapped on every poll.
ConsoleViews.swift:
- Removed the "Reading from this Mac" sidebar footer. It was a duplicate of a Settings switch that is on for almost everyone, so the sidebar carried a status line that never changed. The footer now appears only for a BotFleet sharing error, which nothing else surfaces in the console window.
- Added .focusEffectDisabled() to the sidebar list. The list stays focusable so arrow keys move the selection, but the system focus ring was drawing a blue rectangle around three edges of the sidebar - system blue next to this app's teal, reappearing whenever the window was resized.
Tests: PipMetricsTests pins the width ladder, the height ladder, the absence of a double-counted outer padding term, and the panel bounds. swift test is 343 tests, 0 failures.
Open: the drag-the-edge resize affordance is enforced in code but the physical edge-drag is only visible on a real launch, and PR #163 (ag/settings-window- layering) also edits PipWidget.swift and is currently CONFLICTING with main.