Skip to content

feat: hide untouched Antigravity families on the dashboard - #3061

Merged
steipete merged 1 commit into
steipete:mainfrom
urda:urda/webui-2875
Aug 19, 2026
Merged

feat: hide untouched Antigravity families on the dashboard#3061
steipete merged 1 commit into
steipete:mainfrom
urda:urda/webui-2875

Conversation

@urda

@urda urda commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Problem

Menu cards and widgets hide an Antigravity model family once no lane in it
reports known usage (#2875, landed as #2924). The codexbar serve web UI did
not, 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

DashboardSnapshotBuilder keeps every quota-summary window in the payload and
marks the lanes of an untouched family with a new idle flag, computed by the
shared AntigravityQuotaFamilyVisibility rule in CodexBarCore. 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.

idle encodes only when it is true, so a payload with no idle window is
byte-identical to the previous shape. It is an additive schema-v1 extension,
the same shape docs/dashboard-api.md already documents for the claude-swap
accounts field.

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 dashboard lost two windows under
schemaVersion: 1, and a script reading them would break with no version
signal. That is a real compatibility break, so the payload now stays complete.

Why the page cannot decide on its own

A zero usedPercent also stands for a lane whose usage Antigravity never
reported. Swift tells the two apart through NamedRateWindow.usageKnown, which
DashboardWindowPayload does not carry. A JavaScript filter would hide the
unknown case that 5384f0a fixed, and it would put a second copy of the family
rule into a script that names no provider today.

Behavior

Case idle on Gemini lanes idle on Claude/GPT lanes Web card rows
both used absent absent 4
Gemini used only absent true 2
Claude/GPT usage unknown absent absent 4
neither used absent absent 4
Surface one family used script impact
Menu card, widget the used one n/a
codexbar serve web card the used one n/a
codexbar dashboard, /dashboard/v1/snapshot every window, marked none
codexbar usage, /usage every window, unmarked none

Proof

  • Green: swift test --filter "DashboardAntigravityWindowTests|DashboardSnapshotBuilderTests|CLIServeWebUITests" — 32/32 tests.
  • Green: make test — 76/76 groups, 902 selections, 0 retries.
  • Green: 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.

@clawsweeper

clawsweeper Bot commented Aug 19, 2026

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

@clawsweeper clawsweeper Bot added merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P2 Normal priority bug or improvement with limited blast radius. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Aug 19, 2026
@clawsweeper

clawsweeper Bot commented Aug 19, 2026

Copy link
Copy Markdown

Codex review: needs real behavior proof before merge. Reviewed August 19, 2026, 12:43 AM ET / 04:43 UTC.

ClawSweeper review

What this changes

This PR adds an optional idle marker to Antigravity dashboard windows and makes the built-in web dashboard hide marked rows while CLI and HTTP consumers retain every window.

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
Reviewed head: 01748afa0c3841b9b968906ed6df6f407e719fea

Review scores

Measure Result What it means
Overall readiness 🦪 silver shellfish (2/6) The implementation and regression coverage look solid, but missing real behavior proof remains a merge gate.
Proof confidence 🦪 silver shellfish (2/6) Needs real behavior proof before merge: The PR reports focused tests, the full suite, and checks, but lacks a redacted after-fix dashboard or CLI/HTTP capture from a real setup; add that proof to the PR body for automatic re-review. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Needs proof Needs real behavior proof before merge: The PR reports focused tests, the full suite, and checks, but lacks a redacted after-fix dashboard or CLI/HTTP capture from a real setup; add that proof to the PR body for automatic re-review. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
Evidence reviewed 6 items Current-main gap: Current main emits every Antigravity quota-summary window without an idle marker, so the web dashboard has no information to distinguish known-zero from unknown usage.
Payload contract preserved: The branch computes idle IDs through the existing shared rule but maps every source window into the payload, avoiding the earlier removal of rows from schema-v1 output.
Regression coverage: The branch test asserts all four quota rows remain present while only the untouched family receives idle: true; it also covers the all-untouched and unknown-usage cases.
Findings None None.
Security None None.

Live Verification

Command: swift run CodexBarCLI --help

Result: FAIL (failed) — execution before step 1 run: sh -lc pnpm install --ignore-scripts --frozen-lockfile failed: ! Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-11.22.0.tgz

sh -lc pnpm install --ignore-scripts --frozen-lockfile failed: ! Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-11.22.0.tgz

Assertions:

  • FAIL expect_output: Print a dashboard-v1 snapshot as JSON

How this fits together

CodexBar converts provider quota data into a shared dashboard snapshot used by codexbar dashboard, the HTTP snapshot route, and the built-in web page. The change keeps the machine-readable snapshot complete while applying a display-only filter in the web page.

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]
Loading

Before merge

  • Add real behavior proof - Needs real behavior proof before merge: The PR reports focused tests, the full suite, and checks, but lacks a redacted after-fix dashboard or CLI/HTTP capture from a real setup; add that proof to the PR body for automatic re-review. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
  • Resolve merge risk (P1) - No redacted live dashboard or CLI/HTTP capture yet demonstrates that an actual Antigravity snapshot hides only the intended rows.
  • Complete next step (P2) - The remaining action is contributor-supplied real behavior proof, not a concrete code defect suitable for an automated repair.
Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Production versus tests production +56/-8; tests +68/-8; docs +11/-1 The implementation is accompanied by focused payload and web-rendering coverage plus API documentation.

Merge-risk options

Maintainer options:

  1. Decide the mitigation before merge
    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.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Technical review

Best 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.

Labels

Label changes:

  • remove merge-risk: 🚨 compatibility: Current PR review selected no merge-risk labels.

Label justifications:

  • P2: This is a bounded dashboard consistency improvement with limited blast radius.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🐚 platinum hermit.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR reports focused tests, the full suite, and checks, but lacks a redacted after-fix dashboard or CLI/HTTP capture from a real setup; add that proof to the PR body for automatic re-review. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Evidence

What I checked:

Likely related people:

  • urda: Introduced the original family-visibility behavior and the existing dashboard quota-window projection in merged history. (role: feature contributor; confidence: high; commits: 6cdc166eb095, f9686dfeb536; files: Sources/CodexBarCore/Providers/Antigravity/AntigravityQuotaFamilyVisibility.swift, Sources/CodexBarCLI/DashboardSnapshotBuilder.swift)
  • steipete: Authored the correction that preserves families with unknown usage and has recent ownership of dashboard serving behavior. (role: recent area contributor; confidence: high; commits: 5384f0a3ca28, 276e5a50bcfc; files: Sources/CodexBarCore/Providers/Antigravity/AntigravityQuotaFamilyVisibility.swift, Sources/CodexBarCLI/CLIServeWebUI+HTML.swift)

Rank-up moves

Optional improvements that raise the rating; they are not merge blockers.

  • Add a redacted live dashboard screenshot or recording together with a terminal or HTTP snapshot showing the idle rows remain present in machine-readable output.
  • Update the PR body after adding proof; if no re-review starts, ask a maintainer to comment @clawsweeper re-review.

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (1 earlier review cycle)
  • reviewed 2026-08-19T01:46:27.456Z sha 4949f69 :: needs real behavior proof before merge. :: [P1] Preserve dashboard-v1's complete window contract

@urda
urda force-pushed the urda/webui-2875 branch from 4949f69 to e35df1d Compare August 19, 2026 04:37
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.
@urda
urda force-pushed the urda/webui-2875 branch from e35df1d to 01748af Compare August 19, 2026 04:39
@clawsweeper clawsweeper Bot removed the merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. label Aug 19, 2026
@steipete
steipete merged commit 116dd80 into steipete:main Aug 19, 2026
8 of 9 checks passed
@urda
urda deleted the urda/webui-2875 branch August 19, 2026 17:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal priority bug or improvement with limited blast radius. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants