Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: blocked before merge. Reviewed September 28, 2026, 3:27 AM ET / 07:27 UTC. ClawSweeper reviewWhat this changesThe branch retains each eligible provider’s last widget reading independently after a failed refresh, adds focused regression tests, and updates widget documentation and release notes. Merge readiness⛔ Blocked before merge - 2 items remain Current main and v0.68.0 still use a snapshot-wide fallback, so this focused improvement remains useful. The reviewed patch has no identified correctness defect. GitHub reports that the current head conflicts with main. Priority: P2 Review scores
Verification
How this fits togetherCodexBar’s usage store turns provider refresh results into a JSON snapshot in the app-group container. The widget extension reads that snapshot to display provider usage, balances, and measurement ages. flowchart LR
A[Provider refresh results] --> B[Usage store]
C[Last queued readings] --> B
D[Provider invalidation] --> B
B --> E{Eligible reading?}
E --> F[Widget JSON snapshot]
F --> G[Widget extension]
G --> H[Visible widget]
Before merge
Agent review detailsSecurityNone. Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Keep the per-provider, in-session retention rule with original measurement ages and provider-local account invalidation. Do we have a high-confidence way to reproduce the issue? Yes, from source: current main’s snapshot-wide guard drops eligible entries when another provider is ineligible or a refresh is partial. The contributor reports baseline failures and passing synthetic regression cases; this review did not execute them. Is this the best way to solve the issue? Yes. Provider-local retention fits the existing queued-snapshot boundary and leaves Claude ownership checks and restart behavior intact. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against a3a6f4d1a0de. LabelsLabel changes:
Label justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
|
Widget snapshots now retain each provider's last eligible reading with its original measurement time instead of an all-or-nothing guard, so a disabled, invalidated, or failing provider no longer blanks the others; an invalidated account stays retired until replacement usage is published. Refs #3500 #3627 #3339 #2838. Thanks @jaxleezhang!
A failed refresh could still replace useful widget readings with placeholders when one other cached provider was disabled, invalidated, or handled by Claude's separate retention path. The previous fallback made one eligibility decision for the entire snapshot; a partially populated refresh also skipped retention entirely.
Preserve eligible last-good entries independently, retaining each measurement's original timestamp. Provider and account invalidation stays local to that provider and remains effective until replacement data is published. Generic disk entries still do not establish account ownership after a restart. This replaces the snapshot-wide preservation flag and removes seven net production lines.
The widget documentation also records the newer mapped-executable evidence from #2838. This patch does not add extension-process termination or claim to repair Homebrew-deleted placements or chronod archive acceptance.
Verification
All Swift runs used
CODEXBAR_SUPPRESS_TEST_KEYCHAIN_ACCESS=1 CODEXBAR_TEST_CODEX_FILE_ISOLATION=1 CODEXBAR_TEST_SESSION_FILE_ISOLATION=1and a task-owned RAM-backedTMPDIRafter shared-disk build contention.swift test -j 2 --filter WidgetEmptyProjectionTestsBaseline: 11 tests, 8 issues across two parameterized tests (four mixed-provider cases and four invalidation-boundary expectations). The fixed regression suite passes and retains the original measurement time and synthetic balance.
Final results: 228 tests in 24 suites passed, plus 4 bounded-I/O tests passed;
make checkpassed with 0 formatting changes required and 0 lint violations. Codex autoreview found no actionable P0–P2 issues. The initial broad run caught a missing architecture-comment marker; restoring that marker made all 48 gatekeeper tests pass. Two earlier check attempts hit unrelated process-cleanup timing failures; the final check passed with isolated temporary storage.Production LOC against main:
2 files changed, 16 insertions(+), 23 deletions(-)(−7 net). Tests:1 file changed, 88 insertions(+), 4 deletions(-).No live provider probes or running-app/extension restarts were used.
Synthetic before / after
Synthetic offscreen captures: baseline empty projection versus retained last-good balance with its original age. These prove the rendered snapshot result, not installed WidgetKit upgrade or archive acceptance.
Before:
After:
Refs #3500
Refs #3627
Refs #3339
Refs #2838