Repository navigation
Report missing provider usage as unavailable instead of an invented 0% (VibeTV #285) - #15
Conversation
Windsurf, Chutes, Claude web, Codex, Cursor, Gemini and Copilot returned a successful 0% window when the response carried no usable quota. They now return a provider error (or an informational window where a real second window exists). Real 0% readings stay successful; each provider has a test for both cases (VibeTV nesszer#285).
|
Review of head
Local macOS tests: 1829 passed, 4 failed, 1 ignored; the same four fail on the unchanged base. Three targeted probes reproduced the findings. The Windows x64 cross-build passed. A real Windows/Companion run remains outstanding on the final candidate. |
|
Wir übernehmen P1 (Cursor) und P2 (Copilot) auf diesem Branch, bitte nicht pushen. P3 (Dashboard-Ausgabe) behandeln wir im Paket VibeTV-shop/vibetv#289 und melden uns dort. |
Cursor: a limit or remaining without a used counter no longer reads as 0 %; used is derived only from limit minus remaining, and the plan-included cost row needs real counters. Copilot: a response with only extra quotas keeps them next to an informational primary instead of failing (VibeTV nesszer#289).
|
fertig (53941bc), zurück an dich.
Lokal: 1834 grün, die 4 bekannten Windows-Pfad-Tests fehlen wie auf der Basis. |
|
Joint Windows probe of #15–#17: PASS (details below; same text on all three PRs). Build: local merge branch
Ready for your merge, then tag |
|
W211 · Beelink Windows validation, 2026-10-29 · STOP (environment blocker) The exact native Rust 1.98.0 baseline/probe comparison could not start: HOMESTATION-WIN has no cargo/rustc/rustup on PATH, no user .cargo/.rustup directory, and no matching Rust/MSVC/Git executables in the checked tools/program directories. No compiler/toolchain was installed during this slot. This is an unfulfilled test environment, not an observed product regression; no cargo test exit codes exist and the known restart-test result remains unresolved. Task results: (1) baseline 7614e4d vs probe 8b8134d BLOCKED before execution; (2) isolated #15 / .14 build and VibeTV smoke NOT RUN; (3) automatic Windows Usage/Refresh NOT RUN after the explicit stop condition; (4) NO MERGES, NO TAGS, no release workflow triggered. Final baseline check passed: app 9999.0.2266, runtime a9e985be9d1500de8455edc26d62c9a66b52bd4f, VibeTV 5804558, Clippy, brightness 20, automatic codex/claude/cursor. All app files and 13/13 configs match the pre-slot backup byte-for-byte; Firefox process IDs and existing Codex CLI auth-file hash are unchanged. No login, reboot or OS switch performed. Current PR heads remain #15 53941bc, #16 cacb7c8, #17 0c5def4. Local evidence: .local/reports/wincb16/BEELINK-W211.md; w211/tools-result.json and w211/final-result.json. The next native run needs a prepared Rust 1.98.0/MSVC build environment, or a separately approved cross-build/native-execution plan; it must not be reported as already tested. |
The dashboard window payload carried 0 % used / 100 % remaining for an informational primary and for an Antigravity lane without usage, with no way to tell them from a real zero. Add an additive `unavailable` key (omitted when false) and let the built-in web UI skip those rows (Marcus's P3 on marcus7989#15, VibeTV nesszer#289).
For VibeTV-shop/vibetv#285 (step 1, "check whether the synthetic 0 % fallback shows invented values today"). Answer: yes, in many providers. This PR fixes the first batch; the rest is tracked in VibeTV-shop/vibetv#289.
Problem
When a provider response carries no usable quota (missing total or counter), these providers returned a successful 0 % window instead of an error: Windsurf, Chutes, Claude web, Codex, Cursor, Gemini, Copilot. Downstream (VibeTV) shows that as "0 % used". A real
0 / Nreading is indistinguishable from the invented one, so there is no single central place to fix it; every parser had its own fallback.Change (7 provider files, no new abstraction)
ProviderError::Parse. Only weekly present -> daily isRateWindow::informational(unavailable), weekly kept.ProviderError::Parse.utilizationis treated as absent (same as a missingfive_hour, which already became the informational "No active 5h session").used_percent; a body with no usage fields ->ProviderError::Parse.ProviderError::Parse(removed the test that pinned the invented 0 %).remainingFraction->ProviderError::Parse.ProviderError::Parse.Every provider has a test that the missing-data case is an error / informational and a test that a real 0 % stays a success.
Evidence
7614e4d2(6 real-zero controls passed).cargo test --lib1829 passed, 4 failed. The same 4 fail on the untouched base7614e4d2(Windows path tests on macOS:pi_family_tests::config_dir_must_stay_within_home,pi_family_tests::windows_shims_and_paths_are_normalized_for_dialect,codex_sessions::tests::normalizes_codex_root_to_sessions_dir,core::hooks::tests::config_matching_respects_enabled_flag).cargo fmt --all --checkclean.cargo clippyhas no finding in the changed files (pre-existingcast_possible_truncationerrors intty_runner.rs, untouched).v0.60.3-vibetv.13, noVCRUNTIME/api-ms-win-crtimports.Build recipe (as for .13)
.cargo/config.tomlalready sets+crt-static.Request to @marcus7989
Please merge with a merge commit (as #9/#11/#12) and tag/release
v0.60.3-vibetv.14(pre-release) from the merge commit, as for .13. Release notes draft: "Windsurf, Chutes, Claude web, Codex, Cursor, Gemini and Copilot no longer report an invented successful 0 % when the response carries no usable quota (VibeTV nesszer#285). Not included yet: remaining providers (VibeTV nesszer#289)." VibeTV pins the release's zip SHA-256 afterwards (scripts/fetch-win-codexbar.ps1); the VibeTV pull request is a draft until the tag exists.