Commit a3bd14c
Reject non-finite x-credits-remaining values in CreditSink
A non-finite `x-credits-remaining` header value (e.g. `-Infinity`) parsed by
`_capture_credits_remaining` reached `CreditSink` and caused two defects:
- `-inf` later hit `int(remaining)` in the low-credits display branch of
`build_tool_response`, raising `OverflowError` and turning a successful tool
call into a hard error.
- A `nan`/`-inf` recorded first poisoned the running minimum: `value <
self.remaining` is `False` for every later observation, so a genuine low
balance was dropped and the advisory note silently suppressed for the whole
invocation.
Guard at the single chokepoint `CreditSink.record`: non-finite values are now
ignored, enforcing the invariant "remaining is None or a finite float". This
fixes both the crash and the suppression without touching `build_tool_response`.
Add unit tests (non-finite ignored, minimum not poisoned) and an end-to-end
regression test that a non-finite captured header neither crashes nor emits a
note.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent f9cc3af commit a3bd14c
2 files changed
Lines changed: 67 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
| 52 | + | |
52 | 53 | | |
53 | 54 | | |
54 | 55 | | |
| |||
121 | 122 | | |
122 | 123 | | |
123 | 124 | | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
124 | 128 | | |
125 | 129 | | |
126 | 130 | | |
| |||
130 | 134 | | |
131 | 135 | | |
132 | 136 | | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
133 | 149 | | |
| 150 | + | |
| 151 | + | |
134 | 152 | | |
135 | 153 | | |
136 | 154 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
142 | 142 | | |
143 | 143 | | |
144 | 144 | | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
145 | 172 | | |
146 | 173 | | |
147 | 174 | | |
| |||
773 | 800 | | |
774 | 801 | | |
775 | 802 | | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
776 | 825 | | |
777 | 826 | | |
778 | 827 | | |
| |||
0 commit comments