Skip to content

Retrieve missing Antigravity Gemini and Argon quota pools from a supported native source #519

Closed as not planned

Description

@HemSoft

Status: Source accepted by the Chief on October 27, 2026; fix in PR #529. Earlier status: blocked on a supported native quota source. Primary-source assessment.

Description

The native adapter calls retrieveUserQuotaSummary in CodexBarIOS/Services/AntigravityUsageProvider.swift. The Chief confirmed on October 23, 2026 that this fallback can omit the Gemini and Argon pools that the free agy -p /usage --output-format json command returns under command.data.groups. No supported equivalent backend request has been captured or documented for the iOS app.

The SUS work in #518 parses the stable bucket IDs gemini-5h, gemini-weekly, gemini-argon-wtu-weekly, 3p-5h and 3p-weekly when supplied, and keeps absent pools unavailable. Google documents the CLI's quota command, which refreshes model configuration and quotas. That documentation does not establish an iOS endpoint contract.

Why

Missing weekly pools cannot show measured utilization or a SUS. A partial quota response must not appear to represent the entire subscription.

Goal

Read the missing pools through a supported, documented native-app source when one becomes available, using the account's isolated connection.

Acceptance Criteria

  • Establish the supported request/response contract for Gemini and the separate Argon weekly pool, with primary-source evidence. Amended by the Chief, October 27, 2026: no documented contract exists; use the production host of the existing v1internal service first, the daily host on error, never mixed, and never show an all-full production placeholder.
  • Preserve stable pool IDs, explicit windows, reset times, account isolation and disabled/missing states.
  • Missing pools remain unavailable and never become a fabricated percentage or score.
  • No private endpoint reverse engineering, CLI import, desktop token export or extra end-user credential work.

Definition of Done

  • Implement through a linked PR with a clean current-head review and green required checks.
  • Test an actual sanitized producer response and missing, malformed, disabled and account-isolation cases.
  • Document remaining provider limitations truthfully.

Validation

  • Run focused adapter and SUS tests on air with the pinned Xcode toolchain.
  • Verify the native request uses the documented source and preserves existing authentication isolation.
  • Embed current-head iPhone/iPad screenshots of the newly available pools and the unavailable fallback in the PR, with a recording when useful.
  • Live account access remains Franz's verification; automated fixture coverage is the agent's delivery requirement.

Activity

  1. HemSoft commented on Oct 24, 2026

    @HemSoft
    CollaboratorAuthor

    Blocked: supported native quota contract not established

    Primary-source check on October 24, 2026. I could not establish a supported request/response contract for reading the consumer Gemini and separate Argon weekly pools from an iOS app. This is an upstream contract gap, not a request for Franz to export credentials or approve a release.

    Sources reviewed:

    • Google's Model quotas command documentation documents /usage and /quota in the CLI and says that opening the panel refreshes configuration and quotas. It supplies no supported native HTTP method, OAuth scopes, account-binding contract or response schema for these subscription pools.
    • The Antigravity SDK overview documents a Python agent SDK using a Gemini API key, or Google Cloud project/location credentials. It does not establish access to the signed-in consumer subscription's weekly Gemini/Argon quota pools. Its linked managed API is an agent-execution API, not a documented consumer quota-read contract.
    • Google's Cloud Quotas API overview describes project-level quotas and quota adjustments. There is no documented mapping here to a personal Google AI subscription's Gemini/Argon weekly pools, so substituting those values would misrepresent the subscription.
    • The Antigravity plans documentation describes plan limits and viewing baseline usage in Settings. It does not provide the missing external native-app contract.

    The conclusion is limited to the public primary sources inspected; it is not a claim that no backend exists. The CLI clearly has quota data, but that alone does not authorize treating its private implementation as a supported native integration.

    Current behavior remains unchanged: stable bucket IDs gemini-5h, gemini-weekly, gemini-argon-wtu-weekly, 3p-5h and 3p-weekly are parsed when actually supplied. Absent pools remain unavailable with SUS n/a. Auth and account isolation are preserved. No endpoint probing/reverse engineering, CLI import, desktop token export, inference request, paid purchase or provider outreach was performed.

    Unblock when Google publishes a supported request, authorization/account-isolation rules, and a response contract identifying these pools, windows and reset times, plus a sanitized response from that supported producer. A private capture alone would not satisfy the supported-source requirement. Leave this issue open and blocked; independent UI-gate engineering in #517 / PR #521 continues.

  2. HemSoft commented on Oct 25, 2026

    @HemSoft
    CollaboratorAuthor

    Reported P0: Gemini Models metrics unavailable

    Franz reports on October 25, 2026 at 5:30 PM EDT that Gemini-model metrics say unavailable: report. This report is not yet reproduced against an actual iOS quota response. Reusing this issue while diagnosis determines whether there is a separate decoder/model/UI defect; no duplicate implementation PR exists.

    Current main d58713e889fbfe3a025f0966cef5345099418e42 calls retrieveUserQuotaSummary. AntigravityQuotaParser matches the five canonical IDs independently and requires matching windows and a valid fraction; GeminiUsageProvider combines isolated Apps/coding results and the metric catalog maps Gemini Models IDs to the coding source. An alternate consumer having Gemini weekly data does not establish that the iOS endpoint supplied it. The available retained sanitized file contains only a usage timeout, not a quota payload.

    Next: reproduce through the actual parser/model/presentation with retained sanitized data and missing/malformed/present controls. Fix a proven app defect through an isolated linked PR with current-head review, required CI and native fixture UI evidence. Preserve honest missing states and separate Gemini/3P/Argon IDs; do not substitute another pool, invent quota, launch a provider CLI or reverse-engineer endpoints. The previously documented supported-source block is not cleared by this report alone.

  3. HemSoft commented on Oct 25, 2026

    @HemSoft
    CollaboratorAuthor

    Diagnosis checkpoint: app defect not reproduced

    October 25, 2026. Investigated Franz's reported Gemini Models unavailability at exact main d58713e889fbfe3a025f0966cef5345099418e42 in an isolated, unchanged checkout. No source change or duplicate PR was created.

    A synthetic, network-intercepted loop exercises the actual GeminiUsageProvider and AntigravityUsageProvider, AntigravityQuotaParser, refresh cache, dashboard result selection, configurable metric catalog, and ProviderMetricTileContent.resolve. All 17 controls passed in 0.036 seconds, including supplied/missing five-hour and weekly buckets, invalid fractions/windows/resets, disabled/duplicate/null/malformed data, Argon-only and 3P-only responses, separate accounts, missing coding credentials, and present-to-missing cache refresh. Supplied canonical Gemini buckets reach measured tiles without borrowing other pools.

    The separate expected-present assertion passes on supplied Gemini data and exits 1 with “Gemini Models gemini-5h is unavailable” when those buckets are omitted. This confirms that the loop detects the reported symptom; it does not reproduce a production defect or prove the real response omitted the data. The build compiled 123 actual source files with Xcode 26.6 / Swift 6 complete concurrency. It was a macOS diagnostic build, not native iOS or UI qualification. No simulator, provider client, live account request, or full manual workflow was run.

    Retained artifacts supply no actual iOS quota response: one records a usage timeout; a historical transformed snapshot is not the producer schema. The available alternate consumer's Gemini values therefore cannot establish parity with the native retrieveUserQuotaSummary response. The supported-source assessment remains unresolved.

    Next discriminating evidence: a supported native request/response contract with account-binding/auth rules and a sanitized normal-feed producer response containing the canonical pools. Replay that exact response through this loop: if valid supplied values are rejected or lost, repair that proven decoder/model/presentation seam; if the source lacks them, implement only once a supported native source is established. No private endpoint reverse engineering, CLI import, desktop credential export, inferred quota, or replacement-pool fallback. This is a source-evidence block, not an App Store or human account-testing gate.

    Private Air evidence is retained at /tmp/codexbar-519-20261025-diagnosis/ (source loop, results, source list and SHA-256 ledger); the original runnable loop remains at /var/folders/44/dryv_td53db877zl38g0jcbc0000gn/T/codexbar-519-source-loop-dc6eubef/run-loop.sh. Native UI evidence, normal CI and current-head PR review were not run because no source fix was justified. Issue remains open and blocked.

  4. HemSoft commented on Oct 25, 2026

    @HemSoft
    CollaboratorAuthor

    Producer/provenance checkpoint: reported P0 remains unresolved

    October 25, 2026, 7:04 PM EDT. No source or runtime changes.

    Exact screen and decoder split

    The iOS Google Gemini dashboard card (providerID=gemini) contains two distinct sources. Literal Gemini Models five-hour / weekly tiles have metric IDs antigravity.gemini-5h / antigravity.gemini-weekly; Gemini Apps five-hour / weekly have gemini.five-hour / gemini.weekly. See the immutable metric catalog. Thus this issue matches the report if Franz means the literal Models tiles. A focused screen-label clarification is pending; the report is not dismissed if he means Apps.

    • Models: native adapter uses the isolated coding credential and calls retrieveUserQuotaSummary. The current decoder contract is groups[].buckets[] with bucketId equal to gemini-5h or gemini-weekly, matching window (5h / weekly), numeric finite remainingFraction in 0...1, optional valid future resetTime, and not disabled. Missing, duplicate or invalid matching buckets do not establish an allowance. Unavailable status is serialized as unavailableUsageMetrics["antigravity.<bucketId>"].
    • Apps: the website response decoder reads the jSf9Qc batched response tuples; period 1/2 becomes five-hour/weekly. These values are not Models quotas.
    • Combination preserves both source identities under the Gemini card. Tile rendering uses the selected metric kind; known unavailable metrics render their reason and weekly SUS n/a. No other pool should substitute.

    One normally published snapshot obtained

    Used the existing Mini agent's cached GET /usage exactly once, without headers/credentials, refresh, CLI execution, or collector restart. Its handler reads usageStore.Snapshot(); background collection is separate. Selected only provider/pool IDs, quota numbers, reset/window fields, snapshot timestamps and availability booleans; no account identities, config, prompts or other providers were retained.

    Published snapshot: 7:03:37 PM EDT, read 7:04:32 PM EDT. cards[key=antigravity] has no error or fallback warning:

    Canonical bucket Used Reset (EDT) Window seconds
    gemini-5h 0.56% October 25, 9:41:57 PM 18000
    gemini-weekly 15.73% October 30, 12:38:05 AM 604800

    The canonical comparison PR is hs-pi-dashboard #66, merged at aa334be72b47f1f1f446ec4baef6c7b395746f6e. The producer prefers its existing CLI usage collection, normalizes command.data.groups to cards[].gauges[], and marks HTTP fallback with a warning. Its normalizer accepts CLI snake_case and HTTP camelCase separately. The cache's lack of fallback warning is consistent with CLI-path success under that source; it is not proof of deployed source identity or account parity with the phone. Chief's scripts/usage.py similarly prefers the CLI path.

    What this establishes: measured Gemini pools are available in the normal published alternate-consumer feed. What it does not establish: the iOS HTTP response contained those pools, used snake_case, or lost them downstream. The published normalized cache is not an iOS raw response and cannot be fed to the native decoder as though it were one. No alternate-provider values are imported into iOS. No producer defect is established in hs-pi-dashboard, so no duplicate producer fix is opened there.

    Owned next step and exact missing evidence

    The existing iOS owner retains this P0 outcome. Confirm the tile labels, then obtain/replay only the normal native response's matching pool IDs/windows/fractions/reset/disabled fields plus response-schema/status provenance. For Models, the missing fact is whether groups[].buckets[] in the phone's native summary response contains valid gemini-5h / gemini-weekly; the alternate cache cannot answer that. If the fields are present and rejected, fix that proven iOS seam with a failing regression and native UI evidence. If absent, the supported native request/auth/account-binding contract remains the source gap tracked here; the CLI-backed publisher does not authorize a private-endpoint reconstruction or account-unsafe shared cache integration. Acceptance is actual source-bound Gemini readings reaching the correct two Models tiles, with missing/malformed pools still unavailable and Argon/3P separate.

    No manual provider CLI/auth/client launch, account refresh, Home/Laptop operation, app restart, new telemetry, or full UI dispatch occurred. No fix, native iOS validation, PR review or resolution is claimed. Private sanitized snapshot and source ledgers remain under /tmp/codexbar-519-20261025-diagnosis/.

  5. HemSoft commented on Oct 25, 2026

    @HemSoft
    CollaboratorAuthor

    Screen confirmed: Gemini Models coding quota

    Chief/Franz confirmed in the engineering thread that the affected iOS tiles are Gemini Models five-hour / weekly (coding quota). This confirms the scope of this issue: antigravity.gemini-5h and antigravity.gemini-weekly under the gemini provider card. Gemini Apps is not the reported path.

    The reported P0 remains unresolved. The source/provenance checkpoint and one published alternate-consumer snapshot establish available Gemini readings elsewhere, but do not establish what the phone's native retrieveUserQuotaSummary response contained.

    Next owned diagnostic: distinguish absent native pools from rejected/present native pools using only the normal response's canonical bucket ID, window, remaining fraction, reset and disabled fields plus response schema/status provenance. The missing evidence is specifically the phone's groups[].buckets[] entries for gemini-5h and gemini-weekly, not another screen identification or general permission. No private endpoint probing, CLI import, shared-account cache substitution or invented availability is justified. No source repair or resolution is claimed.

  6. HemSoft commented on Oct 26, 2026

    @HemSoft
    CollaboratorAuthor

    Native-request preflight and missing diagnostic seam

    No eligible existing app-authenticated context was identified on Air: known app preferences have no configured accounts, and the owned UI-test contexts deliberately use synthetic stores that never read Keychain. No unknown credentials/simulator contexts were probed and zero native quota requests were made. The one authorized read could not be executed without obtaining or moving an identity, which is outside the boundary. This does not establish whether the phone has a saved coding session.

    The app's current native read is POST {} to the fixed daily quota-summary endpoint. Its response is decoded in memory; it does not persist raw payloads or a schema/bucket diagnostic. Current Copy Diagnostic explicitly excludes provider responses and only exports fixed failure/configuration/freshness categories. The dashboard report action is not guaranteed for partial unavailable pools. A phone refresh alone will not persist the evidence needed to distinguish absent buckets from rejected buckets.

    One useful existing phone action for Root to request: Google Gemini card → card menu → Configure Account… → Coding Usage; report only Connect Coding Usage versus Reconnect Coding Usage, plus any fixed status message below it. Do not tap either button; omit account labels/IDs. This checks saved-session presence only, not token validity or backend quota data.

    Prepared an implementation-ready, privacy-safe diagnostic plan at /tmp/codexbar-519-20261025-diagnosis/NATIVE-EVIDENCE-PLAN.md: bounded typed projection at the existing response/parser boundary, one transient account/request-bound observation, and an explicit per-account review/copy action. The projection includes only fixed endpoint/status/schema/type/parse enums and the two canonical Gemini buckets' safe window/fraction/reset facts; no raw responses, headers, credentials, identities, arbitrary strings or unrelated pools. No new requests, logs, global telemetry, persistent cache, provider fallback or changed availability verdict. Regression plan covers actual missing/present/malformed contracts, privacy canaries, no extra calls, late completions and account isolation, followed by current-head native fixture UI/review/checks. A future developer-build phone capture would need separately authorized delivery; no deployment or release is requested/performed here.

    The P0 remains unresolved. No speculative availability repair, commit, PR or duplicate full workflow was made. Existing PR521 and its evidence/watch remain intact.

  7. HemSoft commented on Oct 26, 2026

    @HemSoft
    CollaboratorAuthor

    Phone observation recorded; Settings navigation corrected

    Franz reported “Reconnect Coding Usage” on October 26, 2026 at 1:43 AM EDT, and clarified that this is in Settings. Original observation. My earlier navigation omitted Settings. The complete existing route is Settings → Accounts & Groups → the affected Google Gemini account → Coding Usage. This answers the saved-session question; do not ask it again or infer that he tapped Reconnect.

    At unchanged main d58713e889fbfe3a025f0966cef5345099418e42, the button expression uses hasGeminiCodingSecret, which reads the account-specific secretAvailability boolean. The label establishes the UI's saved-coding-credential state. It does not parse credentials, check expiration, validate authentication, issue a quota request or prove that Gemini buckets were supplied. No authentication or parser fix follows from the label alone.

    Smallest next discriminator already exposed by the installed app

    Root can request one read-only observation in Settings → Accounts & Groups → the same Google Gemini account → Metrics: report only the fixed reason text, or “no reason shown,” under Gemini Models five-hour, Gemini Models weekly, Other models five-hour and Other models weekly. These are existing metric rows; no toggle changes, refresh, reconnect, screenshot, account label or credential is needed. The rows render unavailable reasons; they do not display numeric quota values, so asking for numbers there would be wrong.

    The combiner preserves each coding metric's parser reason, otherwise the coding request's fixed failure message. All four metrics share the same coding response. An auth-specific reason across them supports the authentication-error branch; a transport/generic quota error supports request failure. Other-model rows with no reason alongside unavailable Gemini rows support a pool-specific omission/rejection in the displayed result. Bare Unavailable cannot distinguish omitted from rejected buckets. Disabled is explicit. Existing cached results and lack of per-source response provenance limit all these interpretations; no outcome alone proves the latest HTTP response or token validity.

    No usable native response is available on Air, and a phone refresh alone still does not persist schema evidence. If these existing reasons cannot discriminate, the next owned engineering step is the bounded, account-bound, optional native-response diagnostic projection already specified in the retained plan, not speculative reconnection, another provider's quota, or a permissive parser. No source repair is justified yet.

    No provider request, auth/reconnection, phone/Home action, build, source change, PR or full UI run was performed in this checkpoint. The P0 remains open and unresolved. PR #521's separate cost-pair evidence and active watch are preserved.

  8. HemSoft commented on Oct 27, 2026

    @HemSoft
    CollaboratorAuthor

    Likely cause found; fix in PR #529 (merge held for a source-bar decision)

    October 27, 2026. New primary evidence: the open-source OpenUsage client hit the same symptom and shipped a fix in robinebers/openusage#1395 (merged October 17). There, daily-cloudcode-pa returned a successful response with only the other-model pools, which blocked the Gemini and Argon pools that production cloudcode-pa returns. CodexBar iOS reads only the daily host, and that matches Franz's Gemini Models report and the Chief's October 23 note.

    PR #529 requests the same RPC from production first. Daily is used only after transport or non-auth HTTP errors, and a successful production response is never filled in with daily pools. The parser, UI, scopes and account isolation are unchanged. Focused tests pass 60/60, and the new regressions fail against the old provider.

    What this does not establish:

    • Google still documents no supported quota-read API. I rechecked the /usage docs on October 27.
    • This reverses the September 5 decision: back then production returned all-full placeholder buckets.
    • I made no live request, endpoint probe, agy binary inspection or credential import.

    Live comparison against the CLI is pending for Franz. Merging requires accepting "same undocumented service, production host" as the source instead of waiting for Google documentation. That decision went to the Chief. Council: Claude Opus 5.5 (active) · missing: GPT 6.1 Sol (Codex weekly projected 140%, over pace), Muse Wonder Full (quota guard unknown) · adopted: 0 · declined: 0 · Council unavailable, proceeded solo.

  9. HemSoft commented on Oct 27, 2026

    @HemSoft
    CollaboratorAuthor

    Chief's decision: source accepted (October 27, 2026, 14:25 ET)

    The Chief accepted the production host of the same v1internal service the app already uses. No Google-documented contract exists, so requiring one would block this issue indefinitely, and OpenUsage (#1395) ships the same order. The first acceptance criterion is amended: no documented contract exists; production first, daily on error, never mixed.

    Condition: never show the September 5 all-full placeholder. Per the receipt, that response was HTTP 200 with the same four pools, every remainingFraction 1, and reset times present. PR #529 at fc9e4d8 treats a production response whose supplied canonical pools are all full as unusable and asks daily instead. If daily fails, the app shows the unavailable state, not full bars. Regression tests use that shape, and they fail with only the guard line removed.

    The live CLI comparison does not block merge; the Chief will run it read-only with agy later.

  10. HemSoft commented on Oct 27, 2026

    @HemSoft
    CollaboratorAuthor

    Fix merged: PR #529

    PR #529 merged at fd3f1217f6a441fb5c195ebe83a482256b632d72 on October 27, 2026, 15:4x ET. The merge was squash, guarded with --match-head-commit 7b61b5a and no admin bypass. Codex was clean on that head, the required SwiftLint passed, and the one Codex P2 thread was fixed and resolved.

    Behavior on main:

    • The quota summary comes from production cloudcode-pa first.
    • The daily backend is used only after transport errors, non-sign-in HTTP errors, or a production 200 that is malformed, has no current canonical pool, or is the all-full September 5 placeholder.
    • The two backends are never mixed. If both fail, the app shows the unavailable state, never full bars.

    Left open for the remaining Definition-of-Done items, which are not agent-verifiable here:

    • the Chief's read-only live comparison against agy /usage;
    • the release and phone build carrying this fix.

    No release, TestFlight or device install was made in this work.

  11. HemSoft commented on Oct 27, 2026

    @HemSoft
    CollaboratorAuthor

    Read-only comparison on home: inconclusive for iOS host parity

    On October 27, 2026, I ran the signed-in agy -p /usage --output-format json on home over SSH without opening a browser or changing sign-in or settings. The fresh invocation did not return; a retry with --print-timeout 25s also remained running beyond that interval, so I stopped the processes I started. No fresh CLI numbers were obtained.

    The running Desktop CodexBar's locally published snapshot, fetched October 27 at 7:39:54 p.m. EDT, contains these last successful CLI-derived readings. Its provider implementation invokes agy /usage and maps its bucket fractions to used percentages; remaining below is 100% minus used:

    Pool Remaining Reset (Eastern time)
    Gemini Models five-hour 100% October 28, 12:40:12 a.m. EDT
    Gemini Models weekly 83.3855% October 30, 12:38:05 a.m. EDT
    Argon weekly 68.6825% October 30, 12:02:19 a.m. EDT

    These are cached CLI-derived desktop readings, not a fresh independent CLI result. The snapshot does not identify the backend host; CLI host provenance is unknown. The desktop and CLI values therefore cannot be treated as two independent measurements.

    At merged iOS commit fd3f121, if its production response contains these same valid pools and fractions, the all-full guard would not trigger because the weekly pools are below full, and iOS would show those production values. If production returns the all-full placeholder or another eligible error, iOS tries daily; absent pools remain unavailable, and if daily also fails the request is unavailable. HTTP 400/401/403 sign-in errors do not trigger daily fallback. No authenticated iOS production or daily response was observed here, so the actual host, branch, and parity with the CLI remain unverified. There is no evidence of a real mismatch, but a match cannot be claimed either. No code changes, credentials, account IDs, or browser/UI interactions were involved.

  12. 1 remaining item

  13. HemSoft commented on Nov 1, 2026

    @HemSoft
    CollaboratorAuthor

    Phone delivery completed for Franz’s October 31 request 1566284351384330565 at 11:01 PM EDT.

    • Physical device: Hemsoft iPhone, iPhone 17 Pro Max, iOS 27.0.
    • Installed CodexBar 2.0.1, build 6, development configuration, bundle com.hemsoft.CodexBarIOS, from current main f4b93de7b6715d1ce95b8964c90723184e66e43e. This includes Read Antigravity quota pools from the production Cloud Code backend first #529. The previous device inventory reported development 2.0.0, build 6.
    • Exact-source device build passed. Signature and provisioning profile were verified for the paired phone. CoreDevice installation returned success, and an independent post-install phone inventory reports 2.0.1 / 6.
    • Updated in place with the existing bundle/team/app group. No uninstall, data reset, credential export or authorization flow. Documents metadata and all four shared app-group entries were unchanged. Preferences and Application Support files remain present but their metadata changed during the update, so byte equality is not claimed.

    This completes the approved phone-build delivery portion. Live quota parity and production commerce/entitlement validation remain open under their existing issues. App launch and screen inspection were not performed: this Home thread’s T3 device inventory exposed no iPhone host, and SSH UI driving was not authorized. This is personal development delivery, not App Store/TestFlight release qualification.

    Evidence on Air: /Users/home/.local/state/codexbar-phone-1566284351384330565/ with artifact-proof.json, verification-summary.json, source-manifest.json, device-build.log, and private CoreDevice installation/inventory receipts. Existing source checkout remains clean and untouched.

  14. added a commit that references this issue on Nov 6, 2026
  15. HemSoft commented on Nov 6, 2026

    @HemSoft
    CollaboratorAuthor

    Phone check, November 5, 2026: Gemini Models and Argon still unavailable

    Franz checked the phone at 7:24 PM EST. It runs CodexBar 2.0.1 build 6 from main f4b93de, which includes #529. The Google Gemini card ("Google AI Pro") showed:

    Tile Phone
    Gemini Apps five-hour 0%, resets 11:44 PM EST
    Gemini Apps weekly 0%, resets Tue 6:44 PM EST
    Gemini Models five-hour Unavailable
    Gemini Models weekly Unavailable
    Other models five-hour 0%, resets 12:23 AM EST (4h 59m)
    Other models weekly 0%, resets Thu 7:23 PM EST (6d 23h)
    Argon weekly Unavailable

    The same day, agy /usage on Home read Gemini weekly at about 14% used, so the account has Gemini Models usage. The #529 fix didn't bring the pools back on the device.

    What the code says about it

    Only the daily backend answers without Gemini Models and Argon, so the phone's numbers came from daily. Since #529, daily is asked only when production fails (a transport error or an HTTP status other than 400/401/403) or production's 200 is rejected (unreadable, no current pool, or the all-full placeholder).

    One of those branches was a real defect. The parser decoded the summary strictly, so one group without buckets, one bucket without an ID or one wrongly typed field made the whole production response "unreadable". OpenUsage decodes this response one bucket at a time, and its fixtures show production groups with such extra entries. PR #553 fixes this. It also makes the card name the production branch in one fixed sentence whenever daily answered without these pools, without logging any response content.

    I can't tell from code which branch the phone hit. No phone response was captured, and no live request was made.

    The Other models values (0% with resets exactly one window out) match an unused pool on the daily backend. They can't be told apart from a placeholder without a second reading. The all-full guard covers production only, by the October 27 design. A daily answer is shown as reported.

    What would settle it

    After a phone build with #553, one refresh of the Gemini card:

    • Gemini Models and Argon show values: strict decoding was the cause. Compare them with agy /usage.
    • Still unavailable: the card's new sentence names the production branch, which is either an HTTP status, no connection, no current pool, or the all-full placeholder. That last one would mean Google's production service gives this app's sign-in a different answer than the CLI. No supported source would then exist for these pools, and this issue stays blocked on Google.

    The issue stays open. No release, install, credential, CLI import or endpoint probing was involved.

  16. added 2 commits that reference this issue on Nov 6, 2026
  17. HemSoft commented on Nov 9, 2026

    @HemSoft
    CollaboratorAuthor

    Phone check, November 9, 2026: still unavailable, and the new note names the branch

    Franz installed CodexBar from main 0b099e9 (2.0.1 build 6, includes #553) at 12:36 PM EST and checked the Google Gemini card at 12:55 and 1:03 PM EST.

    Pool Phone Antigravity CLI, same account, same time
    Gemini Models five-hour Unavailable 100% left
    Gemini Models weekly Unavailable 76.15% left (24% used)
    Other models five-hour / weekly 0% used, resets exactly one window away 100% / 100% left
    Argon weekly Unavailable 98.06% left

    The card's #553 note reads:

    Google's main quota service reported every pool full, which CodexBar ignores. These quotas come from its backup service, which can leave out Gemini Models and Argon.

    So production answers HTTP 200 for the app's sign-in, but every canonical pool it supplies has remainingFraction >= 1. isAllFullPlaceholder rejects that, as intended, and daily answers without the Gemini and Argon pools. The guard is doing its job: production really is showing this sign-in untouched pools while the CLI shows Gemini weekly at 24% used. Strict decoding (#553) was not the branch the phone hits.

    Likely cause: the quota request names no project

    AntigravityUsageProvider.quotaRequest posts {} to retrieveUserQuotaSummary. OpenUsage, whose host order #529 copied, does not. Its AntigravityUsageClient.quotaSummary first calls loadCodeAssist, takes cloudaicompanionProject from the answer, and posts {"project": "<that id>"}. Its AntigravityProjectQuotaTests.testQuotaSummaryNamesTheAccountsProject pins that (robinebers/openusage, commit 61333460, October 31). A project-less request getting default, all-full pools would explain both today's reading and the September 5 placeholder.

    This is a hypothesis from source comparison, not a captured response. Next: an owned fix that sends the account's own cloudaicompanionProject from the app's existing loadCodeAssist call, keeps production first / daily on error / never mixed and keeps the placeholder guard, then a phone build for Franz to check. OpenUsage also sends Antigravity's own User-Agent and ideType: ANTIGRAVITY metadata. That is out of scope here unless the project alone doesn't fix it.

  18. HemSoft commented on Nov 9, 2026

    @HemSoft
    CollaboratorAuthor

    Research for Franz's decision on PR 555 (November 9, 2026)

    PR #555 is parked with waiting-on-franz. Franz asked for full research first: whether it works for other users, terms of service, and alternatives. A read-only research pass (no code, PR or live requests) finished at 6:09 PM EST.

    Findings

    • Other users: not proven. The app signs in with CodexBar's own registered Google OAuth client (scopes cloud-platform and userinfo.email). The live test that restored all five pools used the Antigravity CLI's OAuth client on Mini, so what Google returns to CodexBar's own client, other accounts and other plans is unknown. A diagnostic build under CodexBar's truthful identity could show what Google allows; it can't prove PR 555.
    • Terms: high risk.
      • Google APIs Terms 2(c): "You will not misrepresent or mask either your identity or your API Client's identity".
      • API Services User Data Policy: "Do not use undocumented APIs without express permission." This covers the existing v1internal integration too, not only PR 555's UA change.
      • Antigravity terms section 6 and the FAQ treat third-party access as a breach, with no quota-monitor exception.
      • Apple 5.2.2 requires the service's permission.
    • Peers: OpenUsage and the Mac CodexBar both imitate Antigravity identities. That shows behavior, not permission. No verified block of a quota-only viewer was found.
    • Supported alternatives: none documented for these consumer subscription pools.
    • Durability: low. The fix hard-codes CLI version 1.5.3, and the service changed behavior three times since September.

    Recommendation sent to Franz: keep PR #555 parked. In a future release, stop the disputed coding-quota calls and show an explained "not available" state unless Google gives written permission. Optionally, ask Google whether a read-only monitor may use these endpoints under CodexBar's own OAuth identity.

    Open items: verification status of CodexBar's OAuth client and scopes, provenance of the phone's saved grant, CodexBar-client eligibility, and any Google exception. This is research judgment, not legal advice. Awaiting Franz's decision.

  19. HemSoft commented on Nov 9, 2026

    @HemSoft
    CollaboratorAuthor

    Closing as not planned. Franz decided on November 9, 2026 to withdraw Google Gemini/Antigravity support from CodexBar iOS instead of restoring these pools (research: #519 (comment)). PR #555 is closed unmerged, and the removal is tracked in #556.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions