Skip to content

Integrate the 0.60.4–0.70.0 port as v0.70.0 (release/v0.70.0) - #735

Draft
Finesssee wants to merge 415 commits into
mainfrom
release/v0.70.0
Draft

Finesssee wants to merge 415 commits into
mainfrom
release/v0.70.0

Conversation

@Finesssee

@Finesssee Finesssee commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Integration of the upstream steipete/CodexBar 0.60.4 → 0.70.0 port as v0.70.0, targeting main.

The branch integrates 74 port/integration PRs across batches 1–8 (plus glue commits), covering every PORT and DEFER item from the per-version manifests (0.60.4–0.70.0) that has a Windows counterpart. macOS-only behaviors are SKIPped per the coverage audit (list below). The full per-item coverage map is port-audit/COVERAGE-0.70.md.

This PR stays draft until release prep lands (version bump, local-check -Slice ci, release notes); the user merges.

Integrated PRs

Merge shas are the Integrate #N commits on release/v0.70.0 (branch ed2440c3+). Base-chain column from INTEGRATION.md.

PR Subject Merged sha
#610 Integrate reviewed provider, history, and tray ports c24088a
#615 honor unusable Antigravity CLI path overrides 371583b
#618 Atlas Cloud typed balance b49dc2b
#619 Hyper, GitKraken AI, and Bifrost providers fe5d877
#620 account source pack (token-account routing) 9240e34
#626 Venice Clerk session cookies with Bearer auth 8569cd3
#627 unused Codex analytics dashboard URLs 95504c2
#629 confirm unused rolling weekly Codex resets cb17acb
#648 CostReportingPeriod core, range-aware scanners 545d39d
#653 cost --period, period-aware serve /cost 4988b27
#665 History window setting, period-aware spend surfaces a453cfd
#666 skip unchanged Codex cost cache rewrites e1e25a6
#670 claude-swap session homes in Claude cost 78cf8a6
#672 Antigravity offline fallback explanation f5965d4
#676 Atlas Cloud typed balance and parity 8926a75
#677 direct Codex fork inherited counter origins f30fd09
#682 Nous OpenCodex ledger attribution cd41f85
#686 OpenRouter API key / Management key guidance 504bd67
#688 retry Codex auth.json publication races bf1e636
#690 reset Codex weekly baseline on plan change 7f0101f
#691 Kimi stale CLI credential guidance cd25ddb
#697 Kimi windows blocked by exhausted monthly limit 6fff17b
#698 price Codex Priority turns from trace evidence 8d3a9d6
#703 OpenRouter diagnostics and Activity summary 084d019
#706 Antigravity cost follow-ups (lower bounds, --refresh) 8a8f3f5
#708 CLI provider history line with provenance 66b6594
#710 StepFun credit plans 61eed6c
#711 hermetic bootstrap catalog test (#684) 30c7121
#713 stop CodexBar from stealing focus 7df9507
#714 re-land stranded Codex scanner/OpenCodex pricing (#488-#490) 1313c80
#715 re-land stranded Usage & Spend daily ledger (#492) + 30-row cap ef15c0d
#716 re-land stranded tray pace colors (#493) 346eb03
#719 refresh 16 provider brand accents 60255ea
#720 reset refresh timer for resets > 24.8 days 6363599
#721 keep Codex cost fixtures on the local day afe1b74
#722 redact stored process environments 526f218
#723 Helmcode reset fallback, dashboard URL, endpoint tolerance 38fb38c
#724 v0 billing dashboard URL 5ad2766
#725 Hugging Face 12h identity cache, billing message, API-only 417e4fe
#726 ElevenLabs endpoint override, XI_API_KEY alias, tier casing f3375b8
#727 GitKraken 429 Retry-After 54f6f55
#728 remove retired Crof from rust/README cf151f4
#729 Venice web session per-browser fall-through ee23d2d
#730 Kimi monthly-only / partial ratio-pool responses 3a84269
#731 price OpenCodex rows by billing route, unpriced-not-zero faa48b5
#732 Antigravity Gemini 3.1 Pro pricing aliases a49d1b5
#733 float bar pills for informational metrics b613a91
#734 Codex Sol repricing cutoff, Cyber rates, Daybreak aliases dec930e
#738 provider lane labels in Settings usage bars + metric picker (GAP-55) a8a3e96
#679 twelve preferred currencies from one shared catalog 154df3d
#701 OpenAI daily usage chart UI d6fe2d8
#699 OpenAI per-day usage history 4017ecb
#742 Claude sign-in guidance 362e27a
#689 Claude Web limit reset credits b5d61b1
#667 Claude warning identity gaps e611646
#631 Claude swap read-only lanes 6bb3c9f
#633 Claude CLI screen replay f9f6a68
#695 Antigravity CLI probe process-tree reap 0d79d11
#694 Antigravity quota window cadence 815fe6d
#718 Mistral price dimensions c8114e0
#717 Mistral monthly-plan window and menu label fa511b8
#702 LiteLLM identity, team/user budgets, private-network HTTP 967e055
#657 Mistral plan amounts as detail lines 2f22b91
#647 Mistral plan-covered tokens 04236cf
#739 provider quota burndown 42a2d44
#608 disclosure chevron transition b8e8169
#740 MiniMax checked reset arithmetic 15b3359
#709 DeepSeek Chrome balance cbd0690
#649 Kimi Chromium local-storage tokens ced2bb8
#646 browser LevelDB reader (shared infra) 117443c
#661 Add Aixy provider 9fdb1cf
#675 Bifrost parity polish 34fe2da
#674 Zed opt-in browser billing 06c1ab2
#741 redact all Codex System Account labels (GAP-03) 7e5af6c
#736 Devin manual paste auth guidance (GAP-22) 4f34330
#737 honor the saved Kimi API region (GAP-28) 93be133

SKIP list (macOS-only / no Windows counterpart)

From COVERAGE-0.70.md section (1) — all documented SKIP items with reasons:

Per-provider "preserving behaviors" from the 0.66.0 bundled-plugin cutover were NOT skipped: each was checked against the local Rust provider and ported (see COVERAGE-0.70.md 0.66.0 rows).

Glue commits

Commit Purpose
4bab448 Glue: carry #716 tray pace tint into the #610 tray presentation plan
f28e113 Atlas-chain glue: map Kimi web isolation errors into WebFetchFailure; complete the TokenAccountOverride kind field in the debug-redaction tests
c5034a5 align antigravity tests with merged release work (LiveFailure args)
ed2440c describe the tray-panel-only layout in Windows docs
749f3a7 remove leftover merge-conflict marker blocks (batch 2)
4cf7203 fix merge seams: #734 pricing tests, cost.rs braces, #731 mod close
aaf9235 fix batch-2 compile errors (history borrows, muse into(), quota_windows local day)
b30f524 restore the gpt-reserve alias the #734 integration dropped
64f32db fix #698 test drift (stale assert + post-#734 rates)
cd8ed7b catalog count glue
296e365 share-test seam, picker order, Hyper brace
78f6cba HF wallet Auto short-circuit, CurrencyRateCache threading, struct fields
ebbda85 #695 spawn-error classification
016ab75 json-contract dedup
9bcb1e2 #657 reset-text seams
00aa0ca batch-7 desktop merge seams
dfff91c update the tray_accounts hidden-label test to GAP-03 redaction semantics
911b9ed batch-8 clippy seams (restore Claude region populate, cfg-test gating)
ada63b3 batch-8 frontend seams (null-safe overview total, MenuCardDetails types)
fb8fa07 resolve leftover #657 CSS conflict markers (keep status + detail selectors)

Status

Port CodexProviderDescriptorTests from upstream steipete#4005: the registered Usage Dashboard URL parses as https://chatgpt.com/codex/cloud/settings/analytics#usage with the usage fragment intact.
Port the remaining upstream 0.63.0 fd2414d conditions: the legacy weekly
counters must be reliable, counters are integers (an invalid used falls
back to a valid remaining balance), and the replacement window is built
from those counters. Translate the upstream KimiRatioPoolTests cases.
…tests

- Compare the unused rolling weekly offset at full timestamp precision, like
  upstream's floating-point |boundary - capturedAt - 604800| < 120 check; the
  seconds-truncated version rejected resets 119.x s short of one week.
- Split delayed-candidate revalidation into a pure evaluation that returns
  the decision and its fixed reason code, and report a missing current
  credit inventory as missingCreditInventory instead of changedCreditInventory.
- Port the upstream rejection table (plan mismatch, changed and missing
  credit inventory, non-exact source) with reason codes, the confirmed
  observation reason, and the persisted relaunch test for fixed and rolling
  boundaries through the StateFile envelope.
Move the plan-change weekly-reset tests into weekly_reset/tests/plan_change.rs
so tests.rs stays under 1000 lines after merging #629, and port the upstream
CodexPlanTransitionPublicationTests cases that were missing:

- a new plan without a weekly window cannot borrow the old plan's window;
- the new plan's own usage and reset become the stored baseline at 0 % and 5 %;
- same-plan (any case or spacing) or blank-plan near-zero readings keep the
  old evidence.
Upstream loadCredentials(retryStale: true) also rereads a native credential
that needs renewal, because the Codex CLI may be publishing its renewal.
The usage path now repeats every failed read, including the gate's stale
AuthRequired, up to three reads 50 ms apart. The last error keeps its
category, so unchanged stale credentials still need the owner's renewal.

The retry loop is a separate function so the tests can count reads like
upstream's injected reader. The tests run on a paused clock and publish
between reads, so they no longer race a writer thread:
- an owner publication in progress (missing, partial, incomplete, expired,
  near expiry) is picked up on the second read and keeps its workspace;
- retries are bounded at three reads and keep the final error category;
- an unpolled or dropped load stops reading.

The external-OAuth gate now loads settings only when the opt-in decides
the outcome (no refresh provenance). Repeated reads no longer reload the
host settings each time.
CodexBar now takes the foreground only on a direct user action (tray
click, tray menu item, global hotkey, a click in its own UI).

- Route every focus request through shell::activation (UserAction,
  IfAllowed, Never). Only UserAction calls set_focus, whose tao
  implementation injects a synthetic Alt through SendInput.
- Build main, flyout, Settings and the float bar unfocused so show()
  uses SW_SHOWNOACTIVATE; add SWP_NOACTIVATE to the DWM frame refresh.
- Startup and single-instance handoff ask Windows once
  (IfAllowed); the second instance passes its foreground permission on
  with AllowSetForegroundWindow before handing off.
- Proof mode (CODEXBAR_PROOF_MODE) shows surfaces without activating
  them.
- Float bar recovery restores with SW_SHOWNOACTIVATE instead of
  SW_RESTORE.
- Auto-resume flashes an already running session's taskbar button
  instead of restoring and activating it, and starts new resume consoles
  minimized and inactive (SW_SHOWMINNOACTIVE). Batch shims now run
  through the system cmd.exe with quoting cmd.exe parses; the old
  wrapper produced \" escapes that cmd.exe cannot read.
- Hooks, the Bedrock AWS CLI call and Doubao's arkcli run with
  CREATE_NO_WINDOW, so background refreshes open no console windows.
…icing in the background

Resolve the usage_spend.rs, usageSpendSharing, UsageSpendTab, cost.rs,
local_history.rs and local_sqlite_tests.rs conflicts against #610 at
15f1091 (localized known-subtotal label, tray-panel-only main).

Review fixes:
- Routine reads (desktop Usage & Spend, serve /cost) now start one bounded
  models.dev refresh in the background when the history records a model with
  no known public price, as upstream 0.64 does; the next read reprices.
- Pricing refresh targets route each unpriced model and its routing base
  through the same models.dev providers a rescan prices from (google for
  Gemini, openai for GPT, anthropic for Claude) instead of anthropic only.
- docs/CLI.md no longer calls Antigravity cost token-history only.
- Translate the upstream routine-read and explicit-refresh scenarios.
(cherry picked from commit dccacc6)
(cherry picked from commit 399741e)
… process tree (keeps HEAD's LiveFailure error classification)
…ication (ExecutableNotFound vs LaunchFailed) while adopting the Job-Object reap
…re and bridge (stacked on #645; includes the #721 midnight-flake fixture cherry-pick)
…riptionFallback for the hook fallback slot, gate informational windows, keep detail lines out of reset wording
…ields in test initializers, qualify reset_backfill calls, drop stale pre-#610 tray tests, restore the HF wallet Auto short-circuit
…in CLI and serve fetch contexts (keeps HEAD account projection; populates the region for serve-side Claude account fetches)
Prepare the v0.70.0 release from the cumulative Windows port line.
…ate, gate test-only helpers behind cfg(test), drop unused imports and a redundant rebinding
…ardDetails monthlyLimitBlockNow + DailyTokenPoint types, sectionTitle in display-detail fixtures
…-surface-layout.css: keep both the monthly-block status and detail selectors in the tray layout
@Finesssee

Copy link
Copy Markdown
Collaborator Author

Batch 8 integrated (GAP-03 / GAP-22 / GAP-28 + version bump) — head fb8fa075

Merged (3 lane deliverables + version bump + 4 glue commits; every push fast-forward, remote==local verified):

PR GAP Merged sha Notes
#741 GAP-03 (redact all Codex System Account labels under Hide Personal Info) 7e5af6cb clean merge; one stale test on the branch still expected the pre-GAP-03 managed-account label — fixed as glue dfff91cb (desktop suite caught it)
#736 GAP-22 (Devin manual paste auth guidance) 4f343307 clean merge
#737 GAP-28 (honor the saved Kimi API region in CLI + serve) 93be1337 3 conflicts in fetch_helpers.rs / serve/data.rs / dashboard/source.rs — resolved keeping HEAD's account projection and adding the region populate BEFORE set.spawn (the branch's inner-loop populate escaped the borrow into the spawned future); missing token_account_kind/token_account_isolated fields completed in two FetchContext literals

Version bump 4fc27d03 (per VERSION-BUMP-PLAN.md, mirroring the v0.60.3 pattern): version.env 0.70.0/150; both Cargo manifests + Cargo.lock (exactly the 2 codexbar entries) + tauri.conf.json + package.json → 0.70.0; CHANGELOG gained the [Windows] 0.70.0 - 2026-10-02 section (from RELEASE-NOTES-DRAFT.md, 18/25/2 bullets) and the stale 0.61.0 - Unreleased is retitled 0.61.0 - 2026-09-15.

Glue seams (each caught by a gate, fixed, re-run green): 911b9ed8 clippy (region-populate line had been dropped in the #737 restructure + cfg(test) gating), ada63b3a frontend (null-safe overview spend total in TrayPanel; MetricRowDisplay.monthlyLimitBlockNow; DailyTokenPoint import; sectionTitle in display-detail fixtures), fb8fa075 CSS (3 leftover #657 conflict markers in styles.css / menu-surface-layout.css — resolved keeping BOTH .menu-metric__status and .menu-metric__detail).

Validation at fb8fa075: full scripts/local-check.ps1 -Slice ci GREEN end-to-end — fmt clean, clippy --workspace --all-targets -D warnings 0 errors, cargo test --lib codexbar 2990 passed / 0 failed / 1 ignored, desktop-tauri 575 passed / 0 failed, tsc --noEmit + vite build OK, vitest 83 files / 531 passed / 0 failed, interaction-guard tests pass.

Open before merge of #735: installer build + Winget manifest prep, port-9360 browser-use proof at the release head, batch-8 validator comments (coordinator decision). PR body updated with the full batch-8 table (74 integrated PRs) and status.

@Finesssee

Copy link
Copy Markdown
Collaborator Author

v0.70.0 release prep status (head eb7604983939a67f3f37b8fae66cb2e9c8967331)

  • Hosted gate: ci/circleci: pr-check passed for this head (2026-10-03, 02:32-02:59 UTC). CircleCI job. The job ran scripts/local-check.ps1 -Slice ci:
    • Rust: 2997 + 1 + 576 tests passed.
    • Frontend: 532 tests in 83 files passed.
    • Oxlint: 0 errors.
  • Installer: CodexBar-0.70.0-Setup.exe, 47,812,173 bytes, SHA-256 e37a23e0bb7c1e976c14601ab47ecfe3f81149b33382237b8cca622d894f39d4.
    • Built locally from this head with the release path in scripts/windows-release-build.ps1: a Tauri production build, then Inno Setup. It is unsigned.
    • The embedded version is 0.70.0 in the desktop FileVersion and ProductVersion, the installer ProductVersion, and codexbar --version.
    • The desktop exe is a production build: tauri was compiled with custom-protocol, and 8 frontend assets are embedded.
  • Other assets:
    • CodexBar-0.70.0-portable.exe: 4dc26abba46a5bf0ef8693a9c7e711a27d39f9343d8b52510e7f6ad24f5c952f
    • CodexBarCLI-v0.70.0-windows-x64.zip: d59007f253996dd0381dc22297455abfad0c70ee7bd211983d8150d62b21f739
    • scripts/release-doctor.ps1 -SkipGitHub passed. Its only warning is that tag v0.70.0 does not exist yet.
  • Winget: the 0.70.0 manifest has InstallerSha256 set to the installer hash above, in uppercase. winget validate reported "Manifest validation succeeded." The identity fields are unchanged from the approved 0.56.8 manifest.
  • Release workflow: release.yml runs on the tag push and requires the SIGNPATH_RELEASE_CERT_THUMBPRINT Actions variable. That variable is not set, so the run is expected to stop before building. If the published installer comes from a different build (for example a signed one), recompute the winget hash from the downloaded asset before submitting.
  • Fix commits: none were needed in this pass. main (7695471b) is an ancestor of this head, so merging now gives a tree identical to the one that was built and tested.

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