Skip to content

fix(usage): read symlinked homes and keep holds per home - #1245

Merged
avivsinai merged 1 commit into
mainfrom
fix/usage-review-findings
Oct 25, 2026
Merged

avivsinai merged 1 commit into
mainfrom
fix/usage-review-findings

Conversation

@avivsinai

Copy link
Copy Markdown
Owner

Codex canonicalizes its home before reporting it. AMQ compared that path to the configured spelling, so a symlinked home failed every usage read and its long failure hold could delay every other home. Resolve the home before dispatch, validate the native reply against that resolved path, and keep published facts under the configured home.

Keep long failure holds and streaks per home while retaining provider pacing. Failed snapshots are recorded as failures, repeated failed reads retain one identity, and future reservations after a clock rollback no longer hold dispatch. Preserve completed RPC replies when later output arrives. Missing spend-cap values and balances now read “not reported” with their bucket.

Validation: root and cross-model review passed. Focused collector, board, and transport tests passed; the seven new regression cases fail with the prior production files restored through a private overlay. No credential files, real settings, HOME overrides, or copied auth were used. Full CI runs on this PR; installed board acceptance follows publication.

Refs agent-message-queue-3gi.

Plan limits now read a Codex home reached through a symlink: the board
gives the app-server the canonical CODEX_HOME and checks its reply against
that path, where it used to report every such home as another home and
hold all homes for an hour. A home that does not resolve reports a
missing login and is held for 5 minutes.

A failed read now holds back only its own home; other homes are read
after the normal interval. An attempt reserved in the future (a clock set
back) no longer holds collection and is dropped from the journal.

The snapshot keeps one identity per home instead of one more per failing
pass, and a pass whose snapshot was not written is recorded as failed.
A spend cap without its amounts, or a credit balance in another bucket,
now reads "not reported" with its bucket name instead of blanks. Output
the app-server writes after its complete reply no longer discards the
reply as over the output limit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@avivsinai
avivsinai merged commit df7f85b into main Oct 25, 2026
6 checks passed
@avivsinai
avivsinai deleted the fix/usage-review-findings branch October 25, 2026 14:49
avivsinai pushed a commit that referenced this pull request Oct 25, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.113.1](v0.113.0...v0.113.1)
(2026-10-25)


### Bug Fixes

* **coop:** detect signed-in Codex daemon seats
([1c0cfca](1c0cfca))
* **coop:** require terminals before Codex startup
([#1243](#1243))
([41119a1](41119a1))
* **usage:** read symlinked homes and keep holds per home
([#1245](#1245))
([df7f85b](df7f85b))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: avivsinai-release[bot] <347701002+avivsinai-release[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant