feat: hide untouched Antigravity families on the dashboard - #3061
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. |
|
Codex review: needs real behavior proof before merge. Reviewed August 19, 2026, 12:43 AM ET / 04:43 UTC. ClawSweeper reviewWhat this changesThis PR adds an optional Merge readiness⛔ Blocked until real behavior proof from a real setup is added - 3 items remain The branch addresses a real current-main dashboard inconsistency and resolves the prior payload-contract concern by retaining every window. No blocking correctness defect was found, but real after-fix behavior proof is still required before merge. Priority: P2 Review scores
Verification
Live VerificationCommand: Result: FAIL (failed) — execution before step 1 Assertions:
How this fits togetherCodexBar converts provider quota data into a shared dashboard snapshot used by flowchart LR
A[Provider quota snapshot] --> B[Family visibility rule]
B --> C[Dashboard snapshot payload]
C --> D[CLI and HTTP clients]
C --> E[Built-in web dashboard]
E --> F[Hide idle rows]
D --> G[All quota windows]
Before merge
Agent review detailsSecurityNone. Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Land the display-only filter after a redacted real capture shows the web card omits the idle family while the corresponding snapshot still contains all quota windows. Do we have a high-confidence way to reproduce the issue? Yes, from source: the focused fixture creates a Gemini-only quota snapshot, retains four payload rows, and marks the untouched Claude/GPT family idle. This review did not execute a live provider or app session. Is this the best way to solve the issue? Yes. Reusing Swift’s established visibility rule while preserving the complete snapshot is narrower and safer than filtering payload rows or recreating provider-specific logic in JavaScript. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against a32989c750e6. LabelsLabel changes:
Label justifications:
EvidenceWhat I checked:
Likely related people:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (1 earlier review cycle)
|
The menu card and the widget drop an Antigravity model family once no lane in it reports known usage, so an account that only runs Gemini stops carrying a Claude/GPT pair pinned at 0%. The codexbar serve web card kept painting those two dead rows. Mark the lanes instead of dropping them. DashboardWindowPayload gains an idle flag, set from the shared AntigravityQuotaFamilyVisibility rule, and the web UI skips a marked row. The menu card, the widget, and the web card now follow one rule, and that rule stays in Swift. The payload keeps every window. Both dashboard transports share one producer, so filtering here would drop two windows from codexbar dashboard under schemaVersion 1 and break a script with no version signal. The idle key encodes only when it is true, so a payload with no idle window keeps its previous bytes. Additive schema-v1 extension, the same shape docs/dashboard-api.md documents for the claude-swap accounts field. The page cannot compute this on its own. A zero usedPercent also stands for a lane whose usage Antigravity never reported, and the window payload never carried usageKnown. A JavaScript filter would hide the unknown case that 5384f0a fixed, and would put a second copy of the family rule into a script that names no provider today.
Problem
Menu cards and widgets hide an Antigravity model family once no lane in it
reports known usage (#2875, landed as #2924). The
codexbar serveweb UI didnot, so a Gemini-only account still saw the Claude/GPT pair pinned at 0% that
the menu had already dropped: four lanes on the web card where the menu shows
two.
Fix
DashboardSnapshotBuilderkeeps every quota-summary window in the payload andmarks the lanes of an untouched family with a new
idleflag, computed by theshared
AntigravityQuotaFamilyVisibilityrule inCodexBarCore. The web UIskips a marked row. The menu card, the widget, and the web card now follow one
rule, and that rule stays in Swift.
idleencodes only when it istrue, so a payload with no idle window isbyte-identical to the previous shape. It is an additive schema-v1 extension,
the same shape
docs/dashboard-api.mdalready documents for the claude-swapaccountsfield.Why a flag and not a filter
An earlier revision of this branch filtered the rows out of the payload. Both
transports share one producer, so
codexbar dashboardlost two windows underschemaVersion: 1, and a script reading them would break with no versionsignal. That is a real compatibility break, so the payload now stays complete.
Why the page cannot decide on its own
A zero
usedPercentalso stands for a lane whose usage Antigravity neverreported. Swift tells the two apart through
NamedRateWindow.usageKnown, whichDashboardWindowPayloaddoes not carry. A JavaScript filter would hide theunknown case that 5384f0a fixed, and it would put a second copy of the family
rule into a script that names no provider today.
Behavior
idleon Gemini lanesidleon Claude/GPT lanestruecodexbar serveweb cardcodexbar dashboard,/dashboard/v1/snapshotcodexbar usage,/usageProof
swift test --filter "DashboardAntigravityWindowTests|DashboardSnapshotBuilderTests|CLIServeWebUITests"— 32/32 tests.make test— 76/76 groups, 902 selections, 0 retries.make check— 0 violations in 1947 files.New cases cover marking an untouched family, marking nothing when no family is
touched, leaving a family with unknown usage unmarked, omitting the key rather
than emitting
false, and the web UI filtering on the flag alone.