Skip to content

026: upstream v0.29.1→v0.32.4 sync — Mac 0.32.4.1 / iOS 1.11.0 (build 149) · supersedes #17#21

Merged
o1xhack merged 80 commits into
mobile-devfrom
upstream-sync/v0.32.4-mobile.1.11.0
Jun 6, 2026
Merged

026: upstream v0.29.1→v0.32.4 sync — Mac 0.32.4.1 / iOS 1.11.0 (build 149) · supersedes #17#21
o1xhack merged 80 commits into
mobile-devfrom
upstream-sync/v0.32.4-mobile.1.11.0

Conversation

@o1xhack

@o1xhack o1xhack commented Jun 6, 2026

Copy link
Copy Markdown
Owner

Summary

Completes the upstream sync all the way to v0.32.4 — Mac 0.32.4.1 / build 79.1, iOS 1.11.0 / build 149 — superseding #17 (which stopped at v0.32.1 / iOS 1.9.0).

Covers upstream v0.29.1 → v0.32.4 (tracking issues #11#16, #18, #19, #20). The v0.29.1→v0.31.0 portion already shipped as Mac 0.31.0.2 / iOS 1.10.0; this branch adds v0.32.0 → v0.32.4 on top.

What's in this batch (v0.32.x)

  • Merge upstream v0.32.4 (67 commits) — 5 conflicts resolved (version.env, CHANGELOG.md, appcast.xml, CodexParserHash.generated.swift, Scripts/sign-and-notarize.sh).
  • Codex/Claude cost-cache invalidation — upstream rewrote the cost-usage scanner (CostUsage +903/-91, new CostUsageScanner+CodexFastJSON.swift). Regenerated CodexParserHash + bumped parserLogicVersion 4→5 so both invalidation axes roll (producerKey for Codex + pricingFingerprint for Claude, which has no producerKey).
  • Value-fixes auto-passthrough to iOS (no new wire fields, Shared/ + Sync/ zero diff vs base): Antigravity quota-row filtering (#1209), Copilot zero-entitlement % (#1258), Augment parse + cookie fallback (#1224), Claude last-good Web snapshot + CLI OAuth refresh-token delegation (#1220, #1239 — same fix as Sync upstream v0.32.1 and Claude OAuth ownership fix #17).
  • iOS Usage provider search — a pinned search bar filters the Usage provider list by name / ID (handy with 20+ providers); "no matching providers" empty state; 4-language.
  • iOS 1.11.0 release notes — in-app MobileReleaseNotesCatalog 1.11.0 entry + root/iOS CHANGELOG, 4-language.
  • sign-and-notarize.sh — adopted upstream #1228 private notarization temp-dir, while keeping fork dual _FILE/_P8 ASC key support + the mobile-suffixed ZIP_NAME/DSYM_ZIP that release.sh/make_appcast.sh expect.

Versions (per docs/versioning.md)

value
Mac MARKETING 0.32.4.1
Mac BUILD 79.1 (upstream v0.32.4 = 79 + fork .1)
iOS MOBILE / build 1.11.0 / 149
Sparkle 79.1.1.11.0 · tag v0.32.4.1-mobile.1.11.0
UPSTREAM_VERSION v0.31.0v0.32.4 (bumped after live)

Verification

  • swift build green; full serial swift test green (3630 tests / 417 suites; also fixed a pre-existing KeychainPromptSafetyAuditTests gap on mobile-dev — not a merge regression).
  • Scripts/lint.sh lint green (swiftformat + swiftlint --strict + i18n 4-lang + parser-version + parser-hash audits).
  • xcodebuild -sdk iphonesimulator BUILD SUCCEEDED.
  • Independent Opus code review on (a) merge + parser-cache fix and (b) the Usage search feature → SHIP, zero blocking findings.
  • CloudKit: CloudConstants unchanged, no new CKRecord fields → no Production schema deploy needed.
  • Shipped: Mac 0.32.4.1 signed + notarized (Developer ID, CloudKit Production), draft release v0.32.4.1-mobile.1.11.0 + installed locally; iOS 1.11.0 (149) uploaded to TestFlight.

Research docs: CodexBarMobile/Research/026-v032-upstream-sync/ (00 overview / 01 design / 02 dev / 03 testing).

Supersedes #17 (thanks @RajvardhanPatil07 — the Claude OAuth #1239 delegation this PR added is included here, plus v0.32.2–v0.32.4 and the iOS 1.11.0 companion).

steipete and others added 30 commits May 28, 2026 23:20
Fixes #1210.\n\nAdds the missing built-in Claude Opus 4.8 pricing fallback plus regression coverage, and records the contributor credit in the changelog.
Fixes #1204.\n\nPreserves authorized credits-only OpenAI dashboard snapshots instead of reporting missing usage when rate-limit windows are absent. Includes regression coverage and changelog credit.
Adds a configurable codexbar serve request timeout, returns 504 for timed-out usage/cost requests without caching them, and single-flights concurrent cache misses.\n\nMaintainer follow-up documented --request-timeout, added a coalesced-timeout regression test, and updated the changelog.\n\nProof: swift test --filter CLIServeRouterTests; swift test; make check; provider-free CodexBarCLI serve smoke; autoreview clean; CI run 26665641722 green.
Cancel OpenAI WebKit dashboard navigation and polling promptly, cancel stale background refresh work during invalidation, and avoid immediate background WebView retry after timeouts while keeping manual retry behavior.
Set stable autosave names for CodexBar status items and preflight their preferred position before creation so crowded macOS menu bars do not inherit parked Item-N placement.

Add CGWindowList-based diagnostics for status item window bounds, keep cached icon renders self-healing, and make merged fallback provider selection follow enabled provider order.

Cover placement preflight, window probing, stable identities, cached title repair, and provider-order fallback with tests.
Co-authored-by: Amr Mohamed <amr.mohamed124124@gmail.com>
Parse the updated Augment auggie account status output and fall back to browser cookies when CLI parsing fails.

Local proof:
- swift test --filter AuggieCLIProbeParseTests
- swift test --filter AugmentCLIFetchStrategyFallbackTests
- swift test
- make check
- autoreview --mode local

CI: all required checks green.

Co-authored-by: Brandon Charleson <b.charleson1@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Require HTTPS before manually reattaching imported browser cookies on Amp and Ollama redirects.

Local proof:
- swift test --filter 'AmpUsageFetcherTests|OllamaUsageFetcherTests'
- make check
- git diff --check origin/main...HEAD
- autoreview --mode branch --base origin/main

CI: all required checks green.

Co-authored-by: hinotoi-agent <paperlantern.agent@gmail.com>
Preserve the last good Claude Web usage snapshot across the first gated Unauthorized refresh failure, while still surfacing repeated Unauthorized errors and preserving first-run failure behavior.

Maintainer proof:
- swift test --filter ClaudeWebRefreshResilienceTests
- make check
- git diff --check origin/main...HEAD
- autoreview --mode branch --base origin/main

CI: all required checks green.

Live Claude auth proof was intentionally not run: repo policy forbids routine validation that can touch real provider auth or trigger Keychain/browser-cookie prompts. Source-level stub coverage exercises the failure gate and prior/no-prior snapshot behavior.

Co-authored-by: Zhongyue Lin <101193087+LeoLin990405@users.noreply.github.com>
Filter Antigravity remote OAuth per-model quota output to the intended visible projection while preserving complete local IDE quota lists.

Remote quota rows now hide unconsumed lite/autocomplete/image/internal/unknown models, keep consumed noisy rows as detail-only extras, and order visible model families consistently. Summary bars use only selectable text-family models for remote snapshots so image/lite/autocomplete/internal rows cannot drive primary/secondary/tertiary summaries.

Proof:
- swift test --filter AntigravityStatusProbeTests
- swift test --filter MenuCardAntigravityTests
- make check
- autoreview clean after maintainer fixups
- CI 26693620400 green
Remove the same-user mutable temporary script from the macOS CLI installer privilege boundary.

The installer now passes the bundled helper path to AppleScript as an argument, quotes it inside AppleScript, and builds the privileged symlink command in memory before invoking `bash -c` with administrator privileges. Existing symlink targets are preserved: `/usr/local/bin/codexbar` and `/opt/homebrew/bin/codexbar`.

Proof:
- bash -n bin/install-codexbar-cli.sh
- extracted AppleScript heredoc compiles with osacompile
- static checks confirmed mktemp/install_script/bash temp-file handoff removed
- git diff --check
- make check
- autoreview clean
- CI green on PR head 6b329567
Security hardening for the release notarization path.

Keeps notarization API key material and upload ZIPs inside a per-run private temporary directory, sets restrictive permissions, and cleans it up on exit. Final release artifact paths remain unchanged.

Proof:
- bash -n Scripts/sign-and-notarize.sh
- static grep for removed predictable /tmp paths
- stubbed release harness covering 0700 temp dir, 0600 API key, private notarization ZIP, cleanup, unchanged final artifacts
- make check
- autoreview clean
- CI green
* fix: defer tracked menu background rebuilds

* fix: preserve explicit hosted menu refreshes
steipete and others added 20 commits June 2, 2026 12:02
…r (Round 0)

Round 0 bootstrap for the v0.31.0 → v0.32.4 sync (open issues #15/16/18/19/20).

Scope finding: this batch is light — no new providers, no UsageSnapshot/Shared
wire fields → no new wire envelope, no new iOS card. The one required fork code
change is Codex parser cache invalidation (CostUsage changed +903/-91 incl. new
CostUsageScanner+CodexFastJSON.swift). Everything else is value-correctness that
auto-passes through existing synced fields (Antigravity row filter #1209, Copilot
zero-entitlement % #1258, Augment parse #1224, Claude snapshot #1220).

- 00 overview: scope / per-version summary / feature→path→workload / version
  target (MARKETING 0.32.4.1 / BUILD 79.1 / MOBILE 1.11.0 TBD) / DONE G1–G10 / goal
- 01 design: no new wire/cards; parser cache invalidation + value-fix passthrough
  + iOS scope decision (default B = ship paired 1.11.0, zero functional code)
- 02 development: merge conflict map + parser cache-invalidation procedure (order
  trap) + CloudKit audit (no Prod deploy expected)
- 03 testing: cost-cache invalidation + cross-version compat + regression
- PROJECT-PROMPT.md: the autonomous loop driver copy

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CodexBar 0.32.4

# -----BEGIN SSH SIGNATURE-----
# U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgj1exoJyvxMic+cdy5NV+9ddyyh
# QWs4TuZ6d9sQgcVb0AAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5
# AAAAQACSxqy0fJxWm2Lz/DLqO0IVm/jN+V7R7PJd34aL7a8WFjnCPHtK2xSWzSJCTjxq4g
# bjGffzsSV6QZoNLV8fHgU=
# -----END SSH SIGNATURE-----
# gpg verification failed.

# Conflicts:
#	CHANGELOG.md
#	Scripts/sign-and-notarize.sh
#	Sources/CodexBarCore/Generated/CodexParserHash.generated.swift
#	appcast.xml
#	version.env
…rserLogicVersion 4→5 + hash regen)

v0.32.0–v0.32.4 rewrote the Codex cost-usage scanner (CostUsage +903/-91, new
CostUsageScanner+CodexFastJSON.swift). Roll both invalidation axes so upgrading
users re-scan instead of keeping old-parser attributions:
- regenerate CodexParserHash → 518924b891f96a03 (Codex producerKey axis)
- bump parserLogicVersion 4→5 (pricingFingerprint axis — Claude's only axis)

Per memory parser-cache-invalidation-on-upstream-merge.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…sting KeychainPromptSafetyAuditTests gap)

KeychainPromptSafetyAuditTests (upstream, present on mobile-dev pre-merge)
asserts AGENTS.md contains the Keychain-prompt safety guidance. The fork's
AGENTS.md never carried it, so the test was failing on mobile-dev already
(NOT a v0.32.x merge regression — the other 3630 serial tests pass clean).
Added the upstream guidance bullet to Step 4 — Testing.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… stamp 0.32.4.1/79.1

G4 = ship paired iOS 1.11.0 (no functional iOS code; the v0.32.x value-fixes
reach iOS via Mac → iCloud sync). G5 + G8:

- version.env MOBILE_VERSION 1.10.0 → 1.11.0 (MARKETING 0.32.4.1 / BUILD 79.1 from R1)
- project.yml MARKETING 1.10.0 → 1.11.0, CURRENT_PROJECT_VERSION 147 → 148; xcodegen
- ContentView MobileReleaseNotesCatalog: new 1.11.0 entry (Antigravity rows / Copilot %
  / Augment parse / Claude snapshot / Codex-Claude cost re-scan), 1.10.0 Latest badge removed
- Localizable.xcstrings: +7 release-notes keys, all 4 locales (314 source keys, lint green)
- CHANGELOG root 0.32.4.1 (bilingual) + iOS 1.11.0 (148)

Verified: Scripts/lint.sh lint green (i18n all-keys-present + parser audits), xcodebuild
iphonesimulator BUILD SUCCEEDED, changelog-to-html 0.32.4.1 renders clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…= user gate

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…build 149

Per user request: with many providers synced (20+), scrolling the Usage list to
find one is tedious. Add a pinned search bar at the top of the Usage tab.

- ProviderListView: @State searchText + filteredGroups (filter groups by
  providerName / providerID, case-insensitive; empty query → all groups, no
  behavior change). ForEach now over filteredGroups + a "no matching providers"
  EmptyStateView on no hits.
- .searchable(placement: .navigationBarDrawer(.always), prompt: "Search providers")
  hoists to the UsageTab NavigationStack bar.
- Linkage-candidate / multi-account grouping still computed from the full
  liveProviders set — filtering only hides rows, never drops linkage prompts.
- 4 new localized strings (en/ja/zh-Hans/zh-Hant); in-app 1.11.0 release-notes
  item + root/iOS CHANGELOG; project.yml CURRENT_PROJECT_VERSION 148 → 149.

Verified: xcodebuild iphonesimulator BUILD SUCCEEDED, Scripts/lint.sh lint green
(i18n all-keys-present + all-locales-translated), independent Opus CR → SHIP.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Flight)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
o1xhack and others added 2 commits June 6, 2026 11:34
…pute merge-base

The parser-version audit (Scripts/lint.sh) diffs origin/mobile-dev...HEAD for
guarded cost-usage parser files. The default shallow (depth-1) checkout makes
the merge-base unresolvable, so on any PR that touches the parser the audit
can't see the parserLogicVersion bump and false-fails (#21 lint-build-test).
Full history fixes it — as Scripts/lint.sh's own comment instructs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… commit

push: branches was ["**"] → every commit on every branch spawned a full
lint-build-test (often red on WIP commits). Scope push CI to the long-lived
branches; feature branches get CI via their PR (pull_request) instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.