jeffy-loop 1.26.2__tar.gz → 1.26.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/PKG-INFO +38 -165
  2. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/README.md +37 -164
  3. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/pyproject.toml +1 -1
  4. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/hooks/stop-hook.sh +1 -1
  5. jeffy_loop-1.26.4/src/jeffy_loop/__init__.py +1 -0
  6. jeffy_loop-1.26.2/src/jeffy_loop/__init__.py +0 -1
  7. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/.gitignore +0 -0
  8. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/LICENSE +0 -0
  9. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/hatch_build.py +0 -0
  10. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/cancel-jeffy/SKILL.md +0 -0
  11. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/SKILL.md +0 -0
  12. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/hooks/lib/check-claims.sh +0 -0
  13. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/hooks/lib/detect-sandbox.sh +0 -0
  14. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/hooks/lib/measure-surface.sh +0 -0
  15. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/hooks/lib/quiet-verify.sh +0 -0
  16. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/hooks/lib/run-probe.sh +0 -0
  17. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/references/backlog-default.md +0 -0
  18. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/references/backlog-highs.md +0 -0
  19. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/references/iteration-prompt-highs.txt +0 -0
  20. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/references/iteration-prompt.txt +0 -0
  21. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/references/journal-default.md +0 -0
  22. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/references/plan-default.md +0 -0
  23. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/skills/jeffy/references/plan-highs.md +0 -0
  24. {jeffy_loop-1.26.2 → jeffy_loop-1.26.4}/src/jeffy_loop/cli.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: jeffy-loop
3
- Version: 1.26.2
3
+ Version: 1.26.4
4
4
  Summary: Jeffy Loop is an autonomous software-engineering control system that forces an LLM to continuously audit, act, verify, checkpoint, and prove convergence.
5
5
  Project-URL: Repository, https://github.com/lenamonj/jeffy-loop
6
6
  License-Expression: MIT
@@ -25,7 +25,7 @@ Description-Content-Type: text/markdown
25
25
 
26
26
  **[Quick Install](#quick-install)**  ·  **[Usage](https://github.com/lenamonj/jeffy-loop/blob/main/docs/usage.md)**  ·  **[How it works](https://github.com/lenamonj/jeffy-loop/blob/main/docs/how-it-works.md)**  ·  **[The receipts](https://github.com/lenamonj/jeffy-loop/blob/main/evals/README.md)**  ·  **[Headless](https://github.com/lenamonj/jeffy-loop/blob/main/docs/headless.md)**  ·  **[White paper](https://github.com/lenamonj/jeffy-loop/raw/main/The-Jeffy-Loop.pdf)**  ·  **[STE100 description](https://github.com/lenamonj/jeffy-loop/raw/main/Jeffy-Loop-STE100.pdf)**
27
27
 
28
- ## A Claude Code loop that finds bugs in your repo, fixes them, and proves every fix before it commits. Maintainers have merged <!-- count:merged -->67<!-- /count --> of its patches.
28
+ ## A Claude Code loop that finds bugs in your repo, fixes them, and proves every fix before it commits. Maintainers have merged <!-- count:merged -->68<!-- /count --> of its patches.
29
29
 
30
30
  </div>
31
31
 
@@ -33,7 +33,7 @@ The model writes the patch. The harness around it decides whether that patch can
33
33
 
34
34
  The harness is deliberately hard to fool. If a fix breaks your tests, it is undone. Nothing is ever pushed. A standard run counts as complete only when a fresh audit is clean, your tests pass again, and an adversarial review by a second AI agent with no part in the run signs off. The goal is fixes that survive scrutiny.
35
35
 
36
- There is a real-world test for that. Maintainers with no stake in this project have merged <!-- count:merged -->67<!-- /count --> of its pull requests, each filed from a local clone, into projects run by NVIDIA, Arm, Meta, Tesla, Google, Apple, Microsoft, Netflix, Apache, Palo Alto Networks, Oracle, IBM, HashiCorp, Cisco, Uber, Square, Cloudflare, and more. [See them all.](#independent-validation---the-receipts)
36
+ There is a real-world test for that. Maintainers with no stake in this project have merged <!-- count:merged -->68<!-- /count --> of its pull requests, each filed from a local clone, into projects run by NVIDIA, Arm, Meta, Tesla, Google, Apple, Microsoft, Netflix, Apache, Palo Alto Networks, Oracle, IBM, HashiCorp, Cisco, Uber, Square, Cloudflare, and more. [See them all.](#independent-validation---the-receipts)
37
37
 
38
38
  <div align="center">
39
39
 
@@ -50,7 +50,7 @@ Jeffy was run against <!-- count:tested -->132<!-- /count --> open-source projec
50
50
 
51
51
  | Projects tested | Converged | Failed | PRs merged | PRs open | Issues filed |
52
52
  |:---:|:---:|:---:|:---:|:---:|:---:|
53
- | **<!-- count:tested -->132<!-- /count -->** | **<!-- count:converged -->103<!-- /count -->** | **<!-- count:failed -->28<!-- /count -->** | **<!-- count:merged -->67<!-- /count -->** | **<!-- count:prs-open -->27<!-- /count -->** | **<!-- count:issues -->4<!-- /count -->** |
53
+ | **<!-- count:tested -->132<!-- /count -->** | **<!-- count:converged -->103<!-- /count -->** | **<!-- count:failed -->28<!-- /count -->** | **<!-- count:merged -->68<!-- /count -->** | **<!-- count:prs-open -->17<!-- /count -->** | **<!-- count:issues -->4<!-- /count -->** |
54
54
 
55
55
  **Converged:** the closing audit came back clean and the loop's adversarial evaluator, a fresh-context sub-agent, countersigned it, a standard this repository set and checks itself. That happened in <!-- count:converged -->103<!-- /count --> projects across <!-- count:languages -->13<!-- /count --> languages with no language-specific analyzer. **Failed:** the run spent the budget declared before it started without converging, or, for libuv, was abandoned before it had one. That leaves PapaParse, an audit held to the same method rather than a loop run, which the receipts page counts as Fixed alongside the 103.
56
56
 
@@ -169,222 +169,95 @@ Each finding below was accepted upstream by the project's own maintainers.
169
169
  <tr>
170
170
  <th align="left">Merged by</th>
171
171
  <th align="left">Finding</th>
172
- <th align="left">Merged in</th>
173
172
  </tr>
174
173
  <tr>
175
- <td rowspan="4"><img src="https://github.com/NVIDIA.png" width="20" height="20" alt="" align="absmiddle"> NVIDIA</td>
176
- <td><a href="https://github.com/NVIDIA/go-nvml/pull/207">go-nvml #207</a><br>The buffer handed to <code>dlinfo</code> for a library's directory was allocated with zero bytes, so the first <code>Path()</code> on a library opened by soname wrote past it and the next <code>dlclose</code> crashed</td>
177
- <td>12 days</td>
178
- </tr>
179
- <tr>
180
- <td><a href="https://github.com/NVIDIA/k8s-device-plugin/pull/2002">k8s-device-plugin #2002</a><br>An empty <code>deviceListStrategy</code> list in the config file passed validation, and the container started with no GPU access and no error</td>
181
- <td>13 days</td>
182
- </tr>
183
- <tr>
184
- <td><a href="https://github.com/NVIDIA/nvidia-container-toolkit/pull/2108">nvidia-container-toolkit #2108</a><br>A GPU id repeated in the visible devices request left an empty device in the list, and in CDI mode the container failed to start with an unresolvable device</td>
185
- <td>11 days</td>
186
- </tr>
187
- <tr>
188
- <td><a href="https://github.com/NVIDIA/go-nvml/pull/206">go-nvml #206</a><br><code>Shutdown()</code> called <code>nvmlShutdown()</code> whether or not the library had loaded, so on a host without <code>libnvidia-ml.so.1</code> the shutdown paired with a failed <code>Init()</code> took the process down with a symbol lookup error instead of returning <code>ERROR_UNINITIALIZED</code></td>
189
- <td>30 days</td>
174
+ <td><img src="https://github.com/NVIDIA.png" width="20" height="20" alt="" align="absmiddle"> NVIDIA</td>
175
+ <td><a href="https://github.com/NVIDIA/go-nvml/pull/207">go-nvml #207</a> - merged in 12 days<br>The buffer handed to <code>dlinfo</code> for a library's directory was allocated with zero bytes, so the first <code>Path()</code> on a library opened by soname wrote past it and the next <code>dlclose</code> crashed<br><br><a href="https://github.com/NVIDIA/k8s-device-plugin/pull/2002">k8s-device-plugin #2002</a> - merged in 13 days<br>An empty <code>deviceListStrategy</code> list in the config file passed validation, and the container started with no GPU access and no error<br><br><a href="https://github.com/NVIDIA/nvidia-container-toolkit/pull/2108">nvidia-container-toolkit #2108</a> - merged in 11 days<br>A GPU id repeated in the visible devices request left an empty device in the list, and in CDI mode the container failed to start with an unresolvable device<br><br><a href="https://github.com/NVIDIA/go-nvml/pull/206">go-nvml #206</a> - merged in 30 days<br><code>Shutdown()</code> called <code>nvmlShutdown()</code> whether or not the library had loaded, so on a host without <code>libnvidia-ml.so.1</code> the shutdown paired with a failed <code>Init()</code> took the process down with a symbol lookup error instead of returning <code>ERROR_UNINITIALIZED</code></td>
190
176
  </tr>
191
177
  <tr>
192
178
  <td><img src="https://github.com/ARM-software.png" width="20" height="20" alt="" align="absmiddle"> Arm</td>
193
- <td><a href="https://github.com/ARM-software/astc-encoder/pull/668">astc-encoder #668</a><br>On F16C builds <code>float16_to_float(vint4)</code> packed the half-float codes with signed saturation, so every negative half decoded as NaN and a half-float normal map compressed differently on AVX2 than on SSE4.1</td>
194
- <td>28 days</td>
179
+ <td><a href="https://github.com/ARM-software/astc-encoder/pull/668">astc-encoder #668</a> - merged in 28 days<br>On F16C builds <code>float16_to_float(vint4)</code> packed the half-float codes with signed saturation, so every negative half decoded as NaN and a half-float normal map compressed differently on AVX2 than on SSE4.1</td>
195
180
  </tr>
196
181
  <tr>
197
- <td rowspan="2"><img src="https://github.com/facebook.png" width="20" height="20" alt="" align="absmiddle"> Meta</td>
198
- <td><a href="https://github.com/facebook/stylex/pull/1850">stylex #1850</a><br><code>stylex.positionTry</code> emitted every declaration twice, one of them with the property name as its own value, and an RTL variant for every rule</td>
199
- <td>17 days</td>
200
- </tr>
201
- <tr>
202
- <td><a href="https://github.com/facebook/stylex/pull/1849">stylex #1849</a><br>Configuring a custom <code>importSources</code> on the rollup plugin or unplugin narrowed the compile gate, so ordinary <code>@stylexjs/stylex</code> modules stopped reaching the compiler and the custom source was never transformed</td>
203
- <td>17 days</td>
182
+ <td><img src="https://github.com/facebook.png" width="20" height="20" alt="" align="absmiddle"> Meta</td>
183
+ <td><a href="https://github.com/facebook/stylex/pull/1850">stylex #1850</a> - merged in 17 days<br><code>stylex.positionTry</code> emitted every declaration twice, one of them with the property name as its own value, and an RTL variant for every rule<br><br><a href="https://github.com/facebook/stylex/pull/1849">stylex #1849</a> - merged in 17 days<br>Configuring a custom <code>importSources</code> on the rollup plugin or unplugin narrowed the compile gate, so ordinary <code>@stylexjs/stylex</code> modules stopped reaching the compiler and the custom source was never transformed</td>
204
184
  </tr>
205
185
  <tr>
206
186
  <td><img src="https://github.com/teslamotors.png" width="20" height="20" alt="" align="absmiddle"> Tesla</td>
207
- <td><a href="https://github.com/teslamotors/vehicle-command/pull/479">vehicle-command #479</a><br>The proxy read every client request body with no size limit, so any client that reached the listener could drive memory allocation without bound</td>
208
- <td>15 days</td>
209
- </tr>
210
- <tr>
211
- <td rowspan="2"><img src="https://github.com/google.png" width="20" height="20" alt="" align="absmiddle"> Google</td>
212
- <td><a href="https://github.com/google/snappy/pull/257">snappy #257</a><br>Every release build compressed a 4 GiB input into a stream whose header claimed 0 bytes</td>
213
- <td>1 day</td>
214
- </tr>
215
- <tr>
216
- <td><a href="https://github.com/google/benchmark/pull/2294">benchmark #2294</a><br>The complexity report gave its BigO coefficient in nanoseconds whatever time unit the benchmark declared</td>
217
- <td>7 days</td>
218
- </tr>
219
- <tr>
220
- <td rowspan="6"><img src="https://github.com/apple.png" width="20" height="20" alt="" align="absmiddle"> Apple</td>
221
- <td><a href="https://github.com/apple/swift-log/pull/504">swift-log #504</a><br>A documented no-op setter asserted instead</td>
222
- <td>2 days</td>
187
+ <td><a href="https://github.com/teslamotors/vehicle-command/pull/479">vehicle-command #479</a> - merged in 15 days<br>The proxy read every client request body with no size limit, so any client that reached the listener could drive memory allocation without bound</td>
223
188
  </tr>
224
189
  <tr>
225
- <td><a href="https://github.com/apple/swift-log/pull/503">swift-log #503</a><br>A handler implementing only <code>log(event:)</code> overflowed the stack on the SwiftLog 1.0 entry point</td>
226
- <td>5 days</td>
227
- </tr>
228
- <tr>
229
- <td><a href="https://github.com/apple/swift-protobuf/pull/2164">swift-protobuf #2164</a><br>The project's own CMake build of <code>protoc-gen-swift</code> had not compiled since June</td>
230
- <td>15 hours</td>
231
- </tr>
232
- <tr>
233
- <td><a href="https://github.com/swiftlang/swift-format/pull/1286">swift-format #1286</a><br>Formatting in place replaced the file, so a 0600 source came back 0644 and a read-only one lost its bit</td>
234
- <td>4 days</td>
235
- </tr>
236
- <tr>
237
- <td><a href="https://github.com/apple/swift-metrics/pull/244">swift-metrics #244</a><br>The package's own test kit crashed on a repeated dimension name</td>
238
- <td>4 days</td>
239
- </tr>
240
- <tr>
241
- <td><a href="https://github.com/apple/swift-certificates/pull/317">swift-certificates #317</a><br>A <code>/0</code> iPAddress name constraint matched nothing, so a CA barred from every IP address by <code>0.0.0.0/0</code> and <code>::/0</code> exclusions still verified a leaf with an IP SAN</td>
242
- <td>16 days</td>
243
- </tr>
244
- <tr>
245
- <td rowspan="4"><img src="https://github.com/microsoft.png" width="20" height="20" alt="" align="absmiddle"> Microsoft</td>
246
- <td><a href="https://github.com/microsoft/mimalloc/pull/1385">mimalloc #1385</a><br>The zeroing allocator returned uninitialized memory above the small-size threshold</td>
247
- <td>8 hours</td>
248
- </tr>
249
- <tr>
250
- <td><a href="https://github.com/microsoft/snmalloc/pull/878">snmalloc #878</a><br>The header-only build recipe named a CMake target removed in 2021 and include paths that resolved nowhere</td>
251
- <td>2 hours</td>
190
+ <td><img src="https://github.com/google.png" width="20" height="20" alt="" align="absmiddle"> Google</td>
191
+ <td><a href="https://github.com/google/snappy/pull/257">snappy #257</a> - merged in 1 day<br>Every release build compressed a 4 GiB input into a stream whose header claimed 0 bytes<br><br><a href="https://github.com/google/benchmark/pull/2294">benchmark #2294</a> - merged in 7 days<br>The complexity report gave its BigO coefficient in nanoseconds whatever time unit the benchmark declared<br><br><a href="https://github.com/google/brotli/pull/1537">brotli #1537</a> - merged in 45 days<br><code>brotli --rm</code> deleted its input and exited 0 after the output write had failed, because the only flush sat in a metadata copy whose failure returned silently; the close now flushes, reports the failure and keeps the input</td>
252
192
  </tr>
253
193
  <tr>
254
- <td><a href="https://github.com/microsoft/GSL/pull/1271">GSL #1271</a><br>The documented conversion from an iterator to its <code>const_iterator</code> was an access error at every use</td>
255
- <td>4 days</td>
194
+ <td><img src="https://github.com/apple.png" width="20" height="20" alt="" align="absmiddle"> Apple</td>
195
+ <td><a href="https://github.com/apple/swift-log/pull/504">swift-log #504</a> - merged in 2 days<br>A documented no-op setter asserted instead<br><br><a href="https://github.com/apple/swift-log/pull/503">swift-log #503</a> - merged in 5 days<br>A handler implementing only <code>log(event:)</code> overflowed the stack on the SwiftLog 1.0 entry point<br><br><a href="https://github.com/apple/swift-protobuf/pull/2164">swift-protobuf #2164</a> - merged in 15 hours<br>The project's own CMake build of <code>protoc-gen-swift</code> had not compiled since June<br><br><a href="https://github.com/swiftlang/swift-format/pull/1286">swift-format #1286</a> - merged in 4 days<br>Formatting in place replaced the file, so a 0600 source came back 0644 and a read-only one lost its bit<br><br><a href="https://github.com/apple/swift-metrics/pull/244">swift-metrics #244</a> - merged in 4 days<br>The package's own test kit crashed on a repeated dimension name<br><br><a href="https://github.com/apple/swift-certificates/pull/317">swift-certificates #317</a> - merged in 16 days<br>A <code>/0</code> iPAddress name constraint matched nothing, so a CA barred from every IP address by <code>0.0.0.0/0</code> and <code>::/0</code> exclusions still verified a leaf with an IP SAN</td>
256
196
  </tr>
257
197
  <tr>
258
- <td><a href="https://github.com/microsoft/GSL/pull/1272">GSL #1272</a><br><code>dyn_array_iterator</code> declared random access but had no relational operators, no <code>-&gt;</code> and no <code>n + it</code>, so <code>std::sort</code> over a <code>dyn_array</code> did not compile</td>
259
- <td>9 days</td>
198
+ <td><img src="https://github.com/microsoft.png" width="20" height="20" alt="" align="absmiddle"> Microsoft</td>
199
+ <td><a href="https://github.com/microsoft/mimalloc/pull/1385">mimalloc #1385</a> - merged in 8 hours<br>The zeroing allocator returned uninitialized memory above the small-size threshold<br><br><a href="https://github.com/microsoft/snmalloc/pull/878">snmalloc #878</a> - merged in 2 hours<br>The header-only build recipe named a CMake target removed in 2021 and include paths that resolved nowhere<br><br><a href="https://github.com/microsoft/GSL/pull/1271">GSL #1271</a> - merged in 4 days<br>The documented conversion from an iterator to its <code>const_iterator</code> was an access error at every use<br><br><a href="https://github.com/microsoft/GSL/pull/1272">GSL #1272</a> - merged in 9 days<br><code>dyn_array_iterator</code> declared random access but had no relational operators, no <code>-&gt;</code> and no <code>n + it</code>, so <code>std::sort</code> over a <code>dyn_array</code> did not compile</td>
260
200
  </tr>
261
201
  <tr>
262
202
  <td><img src="https://github.com/Netflix.png" width="20" height="20" alt="" align="absmiddle"> Netflix</td>
263
- <td><a href="https://github.com/Netflix/zuul/pull/2213">zuul #2213</a><br><code>HttpQueryParams.get</code> lower-cased the lookup key against names stored verbatim, so every query parameter with an uppercase letter in its name came back empty</td>
264
- <td>17 days</td>
265
- </tr>
266
- <tr>
267
- <td rowspan="6"><img src="https://github.com/apache.png" width="20" height="20" alt="" align="absmiddle"> Apache</td>
268
- <td><a href="https://github.com/apache/commons-text/pull/768">commons-text #768</a><br>A <code>StringMatcher</code> overload forwarded the buffer end as its start</td>
269
- <td>2 days</td>
270
- </tr>
271
- <tr>
272
- <td><a href="https://github.com/apache/commons-csv/pull/633">commons-csv #633</a><br>The record counter's Javadoc said headers were not counted while the constructor's header was</td>
273
- <td>3 days</td>
274
- </tr>
275
- <tr>
276
- <td><a href="https://github.com/apache/commons-lang/pull/1784">commons-lang #1784</a><br><code>Fraction.add</code> and <code>subtract</code> overflowed on operands not in lowest terms, or returned them unreduced</td>
277
- <td>1 day</td>
278
- </tr>
279
- <tr>
280
- <td><a href="https://github.com/apache/commons-lang/pull/1783">commons-lang #1783</a><br><code>MethodUtils.invokeMethod</code> threw on an instance of any non-public class, every JDK collection factory result included</td>
281
- <td>1 day</td>
203
+ <td><a href="https://github.com/Netflix/zuul/pull/2213">zuul #2213</a> - merged in 17 days<br><code>HttpQueryParams.get</code> lower-cased the lookup key against names stored verbatim, so every query parameter with an uppercase letter in its name came back empty</td>
282
204
  </tr>
283
205
  <tr>
284
- <td><a href="https://github.com/apache/commons-lang/pull/1787">commons-lang #1787</a><br><code>Fraction</code>'s zero shortcuts returned the other operand unreduced, and threw where the reduced result fits</td>
285
- <td>6 hours</td>
286
- </tr>
287
- <tr>
288
- <td><a href="https://github.com/apache/commons-codec/pull/443">commons-codec #443</a><br>The Git tree-id builder sorted entries by UTF-16 code units where Git sorts UTF-8 bytes, so a name outside the Basic Multilingual Plane gave a different id from <code>git write-tree</code></td>
289
- <td>9 days</td>
290
- </tr>
291
- <tr>
292
- <td rowspan="3"><img src="https://github.com/PaloAltoNetworks.png" width="20" height="20" alt="" align="absmiddle"> Palo Alto Networks</td>
293
- <td><a href="https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/pull/1625">docusaurus-openapi-docs #1625</a><br>A query or header parameter declared <code>explode: true</code> with a scalar value was enumerated as an object, so <code>status=available</code> went out as <code>status=</code> in the API explorer request and its code snippet, and a <code>null</code> header threw</td>
294
- <td>31 days</td>
295
- </tr>
296
- <tr>
297
- <td><a href="https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/pull/1624">docusaurus-openapi-docs #1624</a><br><code>clean-api-docs</code> deleted every <code>*.json</code> in the output directory and all of <code>schemas/</code>, so a hand-authored <code>_category_.json</code> went with the generated files</td>
298
- <td>31 days</td>
206
+ <td><img src="https://github.com/apache.png" width="20" height="20" alt="" align="absmiddle"> Apache</td>
207
+ <td><a href="https://github.com/apache/commons-text/pull/768">commons-text #768</a> - merged in 2 days<br>A <code>StringMatcher</code> overload forwarded the buffer end as its start<br><br><a href="https://github.com/apache/commons-csv/pull/633">commons-csv #633</a> - merged in 3 days<br>The record counter's Javadoc said headers were not counted while the constructor's header was<br><br><a href="https://github.com/apache/commons-lang/pull/1784">commons-lang #1784</a> - merged in 1 day<br><code>Fraction.add</code> and <code>subtract</code> overflowed on operands not in lowest terms, or returned them unreduced<br><br><a href="https://github.com/apache/commons-lang/pull/1783">commons-lang #1783</a> - merged in 1 day<br><code>MethodUtils.invokeMethod</code> threw on an instance of any non-public class, every JDK collection factory result included<br><br><a href="https://github.com/apache/commons-lang/pull/1787">commons-lang #1787</a> - merged in 6 hours<br><code>Fraction</code>'s zero shortcuts returned the other operand unreduced, and threw where the reduced result fits<br><br><a href="https://github.com/apache/commons-codec/pull/443">commons-codec #443</a> - merged in 9 days<br>The Git tree-id builder sorted entries by UTF-16 code units where Git sorts UTF-8 bytes, so a name outside the Basic Multilingual Plane gave a different id from <code>git write-tree</code></td>
299
208
  </tr>
300
209
  <tr>
301
- <td><a href="https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/pull/1626">docusaurus-openapi-docs #1626</a><br>Every copy of the docs spelled the credential-persistence option <code>authPersistance</code> while the theme reads <code>authPersistence</code>, so a site set to <code>false</code> still wrote reader API keys and passwords to <code>sessionStorage</code></td>
302
- <td>31 days</td>
210
+ <td><img src="https://github.com/PaloAltoNetworks.png" width="20" height="20" alt="" align="absmiddle"> Palo Alto Networks</td>
211
+ <td><a href="https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/pull/1625">docusaurus-openapi-docs #1625</a> - merged in 31 days<br>A query or header parameter declared <code>explode: true</code> with a scalar value was enumerated as an object, so <code>status=available</code> went out as <code>status=</code> in the API explorer request and its code snippet, and a <code>null</code> header threw<br><br><a href="https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/pull/1624">docusaurus-openapi-docs #1624</a> - merged in 31 days<br><code>clean-api-docs</code> deleted every <code>*.json</code> in the output directory and all of <code>schemas/</code>, so a hand-authored <code>_category_.json</code> went with the generated files<br><br><a href="https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/pull/1626">docusaurus-openapi-docs #1626</a> - merged in 31 days<br>Every copy of the docs spelled the credential-persistence option <code>authPersistance</code> while the theme reads <code>authPersistence</code>, so a site set to <code>false</code> still wrote reader API keys and passwords to <code>sessionStorage</code></td>
303
212
  </tr>
304
213
  <tr>
305
214
  <td><img src="https://github.com/oracle.png" width="20" height="20" alt="" align="absmiddle"> Oracle</td>
306
- <td><a href="https://github.com/oracle/macaron/pull/1466">macaron #1466</a><br>The build spec dropped the JDK version read from the JAR whenever the artifact recorded no language version</td>
307
- <td>3 days</td>
308
- </tr>
309
- <tr>
310
- <td rowspan="2"><img src="https://github.com/IBM.png" width="20" height="20" alt="" align="absmiddle"> IBM</td>
311
- <td><a href="https://github.com/IBM/sarama/pull/3740">sarama #3740</a><br>The round-robin balancer never returned when the topics map held a topic no consumer group member subscribed to</td>
312
- <td>14 days</td>
215
+ <td><a href="https://github.com/oracle/macaron/pull/1466">macaron #1466</a> - merged in 3 days<br>The build spec dropped the JDK version read from the JAR whenever the artifact recorded no language version</td>
313
216
  </tr>
314
217
  <tr>
315
- <td><a href="https://github.com/IBM/fp-go/pull/236">fp-go #236</a><br>A provider graph that referred back to itself deadlocked the dependency injector forever with no diagnostic; it now reports the chain that closes the circle</td>
316
- <td>10 hours</td>
218
+ <td><img src="https://github.com/IBM.png" width="20" height="20" alt="" align="absmiddle"> IBM</td>
219
+ <td><a href="https://github.com/IBM/sarama/pull/3740">sarama #3740</a> - merged in 14 days<br>The round-robin balancer never returned when the topics map held a topic no consumer group member subscribed to<br><br><a href="https://github.com/IBM/fp-go/pull/236">fp-go #236</a> - merged in 10 hours<br>A provider graph that referred back to itself deadlocked the dependency injector forever with no diagnostic; it now reports the chain that closes the circle</td>
317
220
  </tr>
318
221
  <tr>
319
222
  <td><img src="https://github.com/hashicorp.png" width="20" height="20" alt="" align="absmiddle"> HashiCorp</td>
320
- <td><a href="https://github.com/hashicorp/hcl/pull/841">hcl #841</a><br>hclwrite's <code>Expression.Variables</code> returned nothing for an object value and <code>RenameVariablePrefix</code> left its references untouched, so a rename tool silently missed every variable inside an object</td>
321
- <td>18 days</td>
223
+ <td><a href="https://github.com/hashicorp/hcl/pull/841">hcl #841</a> - merged in 18 days<br>hclwrite's <code>Expression.Variables</code> returned nothing for an object value and <code>RenameVariablePrefix</code> left its references untouched, so a rename tool silently missed every variable inside an object</td>
322
224
  </tr>
323
225
  <tr>
324
226
  <td><img src="https://github.com/cisco.png" width="20" height="20" alt="" align="absmiddle"> Cisco</td>
325
- <td><a href="https://github.com/cisco/libsrtp/pull/821">libsrtp #821</a><br>Encrypted packets carrying no authentication tag failed to unprotect, because the key lookup stepped a full tag length back from the packet end to find the key identifier</td>
326
- <td>4 days</td>
227
+ <td><a href="https://github.com/cisco/libsrtp/pull/821">libsrtp #821</a> - merged in 4 days<br>Encrypted packets carrying no authentication tag failed to unprotect, because the key lookup stepped a full tag length back from the packet end to find the key identifier</td>
327
228
  </tr>
328
229
  <tr>
329
230
  <td><img src="https://github.com/uber.png" width="20" height="20" alt="" align="absmiddle"> Uber</td>
330
- <td><a href="https://github.com/uber/h3/pull/1235">h3 #1235</a><br><code>gridRing</code> zeroed the caller's output buffer with a width computed from <code>k</code> before checking <code>k</code>, so a negative <code>k</code> became a size near 1.8e19 and the write ran off the end of the buffer; the domain check now runs first</td>
331
- <td>39 days</td>
332
- </tr>
333
- <tr>
334
- <td rowspan="3"><img src="https://github.com/square.png" width="20" height="20" alt="" align="absmiddle"> Square</td>
335
- <td><a href="https://github.com/square/kotlinpoet/pull/2380">kotlinpoet #2380</a><br>String literals it emitted turned CRLF into LF, and raw strings in a constant context let newlines pick up indentation</td>
336
- <td>4 days</td>
337
- </tr>
338
- <tr>
339
- <td><a href="https://github.com/square/kotlinpoet/pull/2382">kotlinpoet #2382</a><br>A class in the default package got a <code>ClassName</code> whose <code>toString()</code> threw</td>
340
- <td>4 days</td>
231
+ <td><a href="https://github.com/uber/h3/pull/1235">h3 #1235</a> - merged in 39 days<br><code>gridRing</code> zeroed the caller's output buffer with a width computed from <code>k</code> before checking <code>k</code>, so a negative <code>k</code> became a size near 1.8e19 and the write ran off the end of the buffer; the domain check now runs first</td>
341
232
  </tr>
342
233
  <tr>
343
- <td><a href="https://github.com/square/kotlinpoet/pull/2391">kotlinpoet #2391</a><br><code>trimTrailingNewLine()</code> rewrote the last <code>String</code> argument of any trailing placeholder, so <code>initializer("%S", "cheese
234
+ <td><img src="https://github.com/square.png" width="20" height="20" alt="" align="absmiddle"> Square</td>
235
+ <td><a href="https://github.com/square/kotlinpoet/pull/2380">kotlinpoet #2380</a> - merged in 4 days<br>String literals it emitted turned CRLF into LF, and raw strings in a constant context let newlines pick up indentation<br><br><a href="https://github.com/square/kotlinpoet/pull/2382">kotlinpoet #2382</a> - merged in 4 days<br>A class in the default package got a <code>ClassName</code> whose <code>toString()</code> threw<br><br><a href="https://github.com/square/kotlinpoet/pull/2391">kotlinpoet #2391</a> - merged in 19 days<br><code>trimTrailingNewLine()</code> rewrote the last <code>String</code> argument of any trailing placeholder, so <code>initializer("%S", "cheese
344
236
  ")</code> emitted a literal denoting <code>"cheese"</code> and nothing reported the change</td>
345
- <td>19 days</td>
346
237
  </tr>
347
238
  <tr>
348
- <td rowspan="2"><img src="https://github.com/cloudflare.png" width="20" height="20" alt="" align="absmiddle"> Cloudflare</td>
349
- <td><a href="https://github.com/cloudflare/circl/pull/700">circl #700</a><br>The PKI marshal functions panicked on the library's own post-quantum keys instead of returning an error</td>
350
- <td>1 day</td>
239
+ <td><img src="https://github.com/cloudflare.png" width="20" height="20" alt="" align="absmiddle"> Cloudflare</td>
240
+ <td><a href="https://github.com/cloudflare/circl/pull/700">circl #700</a> - merged in 1 day<br>The PKI marshal functions panicked on the library's own post-quantum keys instead of returning an error<br><br><a href="https://github.com/cloudflare/circl/pull/699">circl #699</a> - merged in 1 day<br>The hybrid KEM derived a different key pair from the same seed on a random subset of calls</td>
351
241
  </tr>
352
242
  <tr>
353
- <td><a href="https://github.com/cloudflare/circl/pull/699">circl #699</a><br>The hybrid KEM derived a different key pair from the same seed on a random subset of calls</td>
354
- <td>1 day</td>
355
- </tr>
356
- <tr>
357
- <td rowspan="2"><img src="https://github.com/JetBrains.png" width="20" height="20" alt="" align="absmiddle"> JetBrains</td>
358
- <td><a href="https://github.com/Kotlin/kotlinx-datetime/pull/650">kotlinx-datetime #650</a><br>Deprecation quick-fixes pointed developers at the wrong replacement</td>
359
- <td>90 minutes</td>
360
- </tr>
361
- <tr>
362
- <td><a href="https://github.com/Kotlin/kotlinx-datetime/pull/649">kotlinx-datetime #649</a><br>The Unicode pattern parser dropped the escaped quote inside a literal</td>
363
- <td>4 days</td>
243
+ <td><img src="https://github.com/JetBrains.png" width="20" height="20" alt="" align="absmiddle"> JetBrains</td>
244
+ <td><a href="https://github.com/Kotlin/kotlinx-datetime/pull/650">kotlinx-datetime #650</a> - merged in 90 minutes<br>Deprecation quick-fixes pointed developers at the wrong replacement<br><br><a href="https://github.com/Kotlin/kotlinx-datetime/pull/649">kotlinx-datetime #649</a> - merged in 4 days<br>The Unicode pattern parser dropped the escaped quote inside a literal</td>
364
245
  </tr>
365
246
  <tr>
366
247
  <td><img src="https://github.com/nodejs.png" width="20" height="20" alt="" align="absmiddle"> Node.js</td>
367
- <td><a href="https://github.com/ada-url/ada/pull/1244">ada #1244</a><br>The URL parser Node.js ships reported <code>host_end</code> one byte short</td>
368
- <td>12 minutes</td>
248
+ <td><a href="https://github.com/ada-url/ada/pull/1244">ada #1244</a> - merged in 12 minutes<br>The URL parser Node.js ships reported <code>host_end</code> one byte short</td>
369
249
  </tr>
370
250
  <tr>
371
- <td rowspan="2"><img src="https://github.com/canonical.png" width="20" height="20" alt="" align="absmiddle"> Canonical (Ubuntu)</td>
372
- <td><a href="https://github.com/canonical/pebble/pull/938">pebble #938</a><br>With more than one service or check, the metrics endpoint repeated each <code># HELP</code> and <code># TYPE</code> family and the Prometheus parser rejected the whole response</td>
373
- <td>16 days</td>
374
- </tr>
375
- <tr>
376
- <td><a href="https://github.com/canonical/pebble/pull/937">pebble #937</a><br>Appending a layer that parsed but failed plan validation left the daemon's live layer list changed, because <code>slices.Insert</code> shifted the existing slice in place before validation ran; the insert now goes into a copy</td>
377
- <td>43 days</td>
251
+ <td><img src="https://github.com/canonical.png" width="20" height="20" alt="" align="absmiddle"> Canonical (Ubuntu)</td>
252
+ <td><a href="https://github.com/canonical/pebble/pull/938">pebble #938</a> - merged in 16 days<br>With more than one service or check, the metrics endpoint repeated each <code># HELP</code> and <code># TYPE</code> family and the Prometheus parser rejected the whole response<br><br><a href="https://github.com/canonical/pebble/pull/937">pebble #937</a> - merged in 43 days<br>Appending a layer that parsed but failed plan validation left the daemon's live layer list changed, because <code>slices.Insert</code> shifted the existing slice in place before validation ran; the insert now goes into a copy</td>
378
253
  </tr>
379
254
  <tr>
380
255
  <td><img src="https://github.com/SethMMorton.png" width="20" height="20" alt="" align="absmiddle"> natsort</td>
381
- <td><a href="https://github.com/SethMMorton/natsort/pull/196">natsort #196</a><br>The locale sentinel meant to sort last was three ASCII bytes, so PyICU keys sorted after it (19 million PyPI downloads a month)</td>
382
- <td>8 days</td>
256
+ <td><a href="https://github.com/SethMMorton/natsort/pull/196">natsort #196</a> - merged in 8 days<br>The locale sentinel meant to sort last was three ASCII bytes, so PyICU keys sorted after it (19 million PyPI downloads a month)</td>
383
257
  </tr>
384
258
  <tr>
385
259
  <td><img src="https://github.com/uuid-rs.png" width="20" height="20" alt="" align="absmiddle"> uuid-rs</td>
386
- <td><a href="https://github.com/uuid-rs/uuid/pull/907">uuid #907</a><br>The UUIDv7 counter lost its top four bits to the version nibble (179 million crates.io downloads in the last 90 days)</td>
387
- <td>6 days</td>
260
+ <td><a href="https://github.com/uuid-rs/uuid/pull/907">uuid #907</a> - merged in 6 days<br>The UUIDv7 counter lost its top four bits to the version nibble (179 million crates.io downloads in the last 90 days)</td>
388
261
  </tr>
389
262
  </table>
390
263
 
@@ -13,7 +13,7 @@
13
13
 
14
14
  **[Quick Install](#quick-install)** &nbsp;·&nbsp; **[Usage](docs/usage.md)** &nbsp;·&nbsp; **[How it works](docs/how-it-works.md)** &nbsp;·&nbsp; **[The receipts](evals/README.md)** &nbsp;·&nbsp; **[Headless](docs/headless.md)** &nbsp;·&nbsp; **[White paper](https://github.com/lenamonj/jeffy-loop/raw/main/The-Jeffy-Loop.pdf)** &nbsp;·&nbsp; **[STE100 description](https://github.com/lenamonj/jeffy-loop/raw/main/Jeffy-Loop-STE100.pdf)**
15
15
 
16
- ## A Claude Code loop that finds bugs in your repo, fixes them, and proves every fix before it commits. Maintainers have merged <!-- count:merged -->67<!-- /count --> of its patches.
16
+ ## A Claude Code loop that finds bugs in your repo, fixes them, and proves every fix before it commits. Maintainers have merged <!-- count:merged -->68<!-- /count --> of its patches.
17
17
 
18
18
  </div>
19
19
 
@@ -21,7 +21,7 @@ The model writes the patch. The harness around it decides whether that patch can
21
21
 
22
22
  The harness is deliberately hard to fool. If a fix breaks your tests, it is undone. Nothing is ever pushed. A standard run counts as complete only when a fresh audit is clean, your tests pass again, and an adversarial review by a second AI agent with no part in the run signs off. The goal is fixes that survive scrutiny.
23
23
 
24
- There is a real-world test for that. Maintainers with no stake in this project have merged <!-- count:merged -->67<!-- /count --> of its pull requests, each filed from a local clone, into projects run by NVIDIA, Arm, Meta, Tesla, Google, Apple, Microsoft, Netflix, Apache, Palo Alto Networks, Oracle, IBM, HashiCorp, Cisco, Uber, Square, Cloudflare, and more. [See them all.](#independent-validation---the-receipts)
24
+ There is a real-world test for that. Maintainers with no stake in this project have merged <!-- count:merged -->68<!-- /count --> of its pull requests, each filed from a local clone, into projects run by NVIDIA, Arm, Meta, Tesla, Google, Apple, Microsoft, Netflix, Apache, Palo Alto Networks, Oracle, IBM, HashiCorp, Cisco, Uber, Square, Cloudflare, and more. [See them all.](#independent-validation---the-receipts)
25
25
 
26
26
  <div align="center">
27
27
 
@@ -38,7 +38,7 @@ Jeffy was run against <!-- count:tested -->132<!-- /count --> open-source projec
38
38
 
39
39
  | Projects tested | Converged | Failed | PRs merged | PRs open | Issues filed |
40
40
  |:---:|:---:|:---:|:---:|:---:|:---:|
41
- | **<!-- count:tested -->132<!-- /count -->** | **<!-- count:converged -->103<!-- /count -->** | **<!-- count:failed -->28<!-- /count -->** | **<!-- count:merged -->67<!-- /count -->** | **<!-- count:prs-open -->27<!-- /count -->** | **<!-- count:issues -->4<!-- /count -->** |
41
+ | **<!-- count:tested -->132<!-- /count -->** | **<!-- count:converged -->103<!-- /count -->** | **<!-- count:failed -->28<!-- /count -->** | **<!-- count:merged -->68<!-- /count -->** | **<!-- count:prs-open -->17<!-- /count -->** | **<!-- count:issues -->4<!-- /count -->** |
42
42
 
43
43
  **Converged:** the closing audit came back clean and the loop's adversarial evaluator, a fresh-context sub-agent, countersigned it, a standard this repository set and checks itself. That happened in <!-- count:converged -->103<!-- /count --> projects across <!-- count:languages -->13<!-- /count --> languages with no language-specific analyzer. **Failed:** the run spent the budget declared before it started without converging, or, for libuv, was abandoned before it had one. That leaves PapaParse, an audit held to the same method rather than a loop run, which the receipts page counts as Fixed alongside the 103.
44
44
 
@@ -157,222 +157,95 @@ Each finding below was accepted upstream by the project's own maintainers.
157
157
  <tr>
158
158
  <th align="left">Merged by</th>
159
159
  <th align="left">Finding</th>
160
- <th align="left">Merged in</th>
161
160
  </tr>
162
161
  <tr>
163
- <td rowspan="4"><img src="https://github.com/NVIDIA.png" width="20" height="20" alt="" align="absmiddle"> NVIDIA</td>
164
- <td><a href="https://github.com/NVIDIA/go-nvml/pull/207">go-nvml #207</a><br>The buffer handed to <code>dlinfo</code> for a library's directory was allocated with zero bytes, so the first <code>Path()</code> on a library opened by soname wrote past it and the next <code>dlclose</code> crashed</td>
165
- <td>12 days</td>
166
- </tr>
167
- <tr>
168
- <td><a href="https://github.com/NVIDIA/k8s-device-plugin/pull/2002">k8s-device-plugin #2002</a><br>An empty <code>deviceListStrategy</code> list in the config file passed validation, and the container started with no GPU access and no error</td>
169
- <td>13 days</td>
170
- </tr>
171
- <tr>
172
- <td><a href="https://github.com/NVIDIA/nvidia-container-toolkit/pull/2108">nvidia-container-toolkit #2108</a><br>A GPU id repeated in the visible devices request left an empty device in the list, and in CDI mode the container failed to start with an unresolvable device</td>
173
- <td>11 days</td>
174
- </tr>
175
- <tr>
176
- <td><a href="https://github.com/NVIDIA/go-nvml/pull/206">go-nvml #206</a><br><code>Shutdown()</code> called <code>nvmlShutdown()</code> whether or not the library had loaded, so on a host without <code>libnvidia-ml.so.1</code> the shutdown paired with a failed <code>Init()</code> took the process down with a symbol lookup error instead of returning <code>ERROR_UNINITIALIZED</code></td>
177
- <td>30 days</td>
162
+ <td><img src="https://github.com/NVIDIA.png" width="20" height="20" alt="" align="absmiddle"> NVIDIA</td>
163
+ <td><a href="https://github.com/NVIDIA/go-nvml/pull/207">go-nvml #207</a> - merged in 12 days<br>The buffer handed to <code>dlinfo</code> for a library's directory was allocated with zero bytes, so the first <code>Path()</code> on a library opened by soname wrote past it and the next <code>dlclose</code> crashed<br><br><a href="https://github.com/NVIDIA/k8s-device-plugin/pull/2002">k8s-device-plugin #2002</a> - merged in 13 days<br>An empty <code>deviceListStrategy</code> list in the config file passed validation, and the container started with no GPU access and no error<br><br><a href="https://github.com/NVIDIA/nvidia-container-toolkit/pull/2108">nvidia-container-toolkit #2108</a> - merged in 11 days<br>A GPU id repeated in the visible devices request left an empty device in the list, and in CDI mode the container failed to start with an unresolvable device<br><br><a href="https://github.com/NVIDIA/go-nvml/pull/206">go-nvml #206</a> - merged in 30 days<br><code>Shutdown()</code> called <code>nvmlShutdown()</code> whether or not the library had loaded, so on a host without <code>libnvidia-ml.so.1</code> the shutdown paired with a failed <code>Init()</code> took the process down with a symbol lookup error instead of returning <code>ERROR_UNINITIALIZED</code></td>
178
164
  </tr>
179
165
  <tr>
180
166
  <td><img src="https://github.com/ARM-software.png" width="20" height="20" alt="" align="absmiddle"> Arm</td>
181
- <td><a href="https://github.com/ARM-software/astc-encoder/pull/668">astc-encoder #668</a><br>On F16C builds <code>float16_to_float(vint4)</code> packed the half-float codes with signed saturation, so every negative half decoded as NaN and a half-float normal map compressed differently on AVX2 than on SSE4.1</td>
182
- <td>28 days</td>
167
+ <td><a href="https://github.com/ARM-software/astc-encoder/pull/668">astc-encoder #668</a> - merged in 28 days<br>On F16C builds <code>float16_to_float(vint4)</code> packed the half-float codes with signed saturation, so every negative half decoded as NaN and a half-float normal map compressed differently on AVX2 than on SSE4.1</td>
183
168
  </tr>
184
169
  <tr>
185
- <td rowspan="2"><img src="https://github.com/facebook.png" width="20" height="20" alt="" align="absmiddle"> Meta</td>
186
- <td><a href="https://github.com/facebook/stylex/pull/1850">stylex #1850</a><br><code>stylex.positionTry</code> emitted every declaration twice, one of them with the property name as its own value, and an RTL variant for every rule</td>
187
- <td>17 days</td>
188
- </tr>
189
- <tr>
190
- <td><a href="https://github.com/facebook/stylex/pull/1849">stylex #1849</a><br>Configuring a custom <code>importSources</code> on the rollup plugin or unplugin narrowed the compile gate, so ordinary <code>@stylexjs/stylex</code> modules stopped reaching the compiler and the custom source was never transformed</td>
191
- <td>17 days</td>
170
+ <td><img src="https://github.com/facebook.png" width="20" height="20" alt="" align="absmiddle"> Meta</td>
171
+ <td><a href="https://github.com/facebook/stylex/pull/1850">stylex #1850</a> - merged in 17 days<br><code>stylex.positionTry</code> emitted every declaration twice, one of them with the property name as its own value, and an RTL variant for every rule<br><br><a href="https://github.com/facebook/stylex/pull/1849">stylex #1849</a> - merged in 17 days<br>Configuring a custom <code>importSources</code> on the rollup plugin or unplugin narrowed the compile gate, so ordinary <code>@stylexjs/stylex</code> modules stopped reaching the compiler and the custom source was never transformed</td>
192
172
  </tr>
193
173
  <tr>
194
174
  <td><img src="https://github.com/teslamotors.png" width="20" height="20" alt="" align="absmiddle"> Tesla</td>
195
- <td><a href="https://github.com/teslamotors/vehicle-command/pull/479">vehicle-command #479</a><br>The proxy read every client request body with no size limit, so any client that reached the listener could drive memory allocation without bound</td>
196
- <td>15 days</td>
197
- </tr>
198
- <tr>
199
- <td rowspan="2"><img src="https://github.com/google.png" width="20" height="20" alt="" align="absmiddle"> Google</td>
200
- <td><a href="https://github.com/google/snappy/pull/257">snappy #257</a><br>Every release build compressed a 4 GiB input into a stream whose header claimed 0 bytes</td>
201
- <td>1 day</td>
202
- </tr>
203
- <tr>
204
- <td><a href="https://github.com/google/benchmark/pull/2294">benchmark #2294</a><br>The complexity report gave its BigO coefficient in nanoseconds whatever time unit the benchmark declared</td>
205
- <td>7 days</td>
206
- </tr>
207
- <tr>
208
- <td rowspan="6"><img src="https://github.com/apple.png" width="20" height="20" alt="" align="absmiddle"> Apple</td>
209
- <td><a href="https://github.com/apple/swift-log/pull/504">swift-log #504</a><br>A documented no-op setter asserted instead</td>
210
- <td>2 days</td>
175
+ <td><a href="https://github.com/teslamotors/vehicle-command/pull/479">vehicle-command #479</a> - merged in 15 days<br>The proxy read every client request body with no size limit, so any client that reached the listener could drive memory allocation without bound</td>
211
176
  </tr>
212
177
  <tr>
213
- <td><a href="https://github.com/apple/swift-log/pull/503">swift-log #503</a><br>A handler implementing only <code>log(event:)</code> overflowed the stack on the SwiftLog 1.0 entry point</td>
214
- <td>5 days</td>
215
- </tr>
216
- <tr>
217
- <td><a href="https://github.com/apple/swift-protobuf/pull/2164">swift-protobuf #2164</a><br>The project's own CMake build of <code>protoc-gen-swift</code> had not compiled since June</td>
218
- <td>15 hours</td>
219
- </tr>
220
- <tr>
221
- <td><a href="https://github.com/swiftlang/swift-format/pull/1286">swift-format #1286</a><br>Formatting in place replaced the file, so a 0600 source came back 0644 and a read-only one lost its bit</td>
222
- <td>4 days</td>
223
- </tr>
224
- <tr>
225
- <td><a href="https://github.com/apple/swift-metrics/pull/244">swift-metrics #244</a><br>The package's own test kit crashed on a repeated dimension name</td>
226
- <td>4 days</td>
227
- </tr>
228
- <tr>
229
- <td><a href="https://github.com/apple/swift-certificates/pull/317">swift-certificates #317</a><br>A <code>/0</code> iPAddress name constraint matched nothing, so a CA barred from every IP address by <code>0.0.0.0/0</code> and <code>::/0</code> exclusions still verified a leaf with an IP SAN</td>
230
- <td>16 days</td>
231
- </tr>
232
- <tr>
233
- <td rowspan="4"><img src="https://github.com/microsoft.png" width="20" height="20" alt="" align="absmiddle"> Microsoft</td>
234
- <td><a href="https://github.com/microsoft/mimalloc/pull/1385">mimalloc #1385</a><br>The zeroing allocator returned uninitialized memory above the small-size threshold</td>
235
- <td>8 hours</td>
236
- </tr>
237
- <tr>
238
- <td><a href="https://github.com/microsoft/snmalloc/pull/878">snmalloc #878</a><br>The header-only build recipe named a CMake target removed in 2021 and include paths that resolved nowhere</td>
239
- <td>2 hours</td>
178
+ <td><img src="https://github.com/google.png" width="20" height="20" alt="" align="absmiddle"> Google</td>
179
+ <td><a href="https://github.com/google/snappy/pull/257">snappy #257</a> - merged in 1 day<br>Every release build compressed a 4 GiB input into a stream whose header claimed 0 bytes<br><br><a href="https://github.com/google/benchmark/pull/2294">benchmark #2294</a> - merged in 7 days<br>The complexity report gave its BigO coefficient in nanoseconds whatever time unit the benchmark declared<br><br><a href="https://github.com/google/brotli/pull/1537">brotli #1537</a> - merged in 45 days<br><code>brotli --rm</code> deleted its input and exited 0 after the output write had failed, because the only flush sat in a metadata copy whose failure returned silently; the close now flushes, reports the failure and keeps the input</td>
240
180
  </tr>
241
181
  <tr>
242
- <td><a href="https://github.com/microsoft/GSL/pull/1271">GSL #1271</a><br>The documented conversion from an iterator to its <code>const_iterator</code> was an access error at every use</td>
243
- <td>4 days</td>
182
+ <td><img src="https://github.com/apple.png" width="20" height="20" alt="" align="absmiddle"> Apple</td>
183
+ <td><a href="https://github.com/apple/swift-log/pull/504">swift-log #504</a> - merged in 2 days<br>A documented no-op setter asserted instead<br><br><a href="https://github.com/apple/swift-log/pull/503">swift-log #503</a> - merged in 5 days<br>A handler implementing only <code>log(event:)</code> overflowed the stack on the SwiftLog 1.0 entry point<br><br><a href="https://github.com/apple/swift-protobuf/pull/2164">swift-protobuf #2164</a> - merged in 15 hours<br>The project's own CMake build of <code>protoc-gen-swift</code> had not compiled since June<br><br><a href="https://github.com/swiftlang/swift-format/pull/1286">swift-format #1286</a> - merged in 4 days<br>Formatting in place replaced the file, so a 0600 source came back 0644 and a read-only one lost its bit<br><br><a href="https://github.com/apple/swift-metrics/pull/244">swift-metrics #244</a> - merged in 4 days<br>The package's own test kit crashed on a repeated dimension name<br><br><a href="https://github.com/apple/swift-certificates/pull/317">swift-certificates #317</a> - merged in 16 days<br>A <code>/0</code> iPAddress name constraint matched nothing, so a CA barred from every IP address by <code>0.0.0.0/0</code> and <code>::/0</code> exclusions still verified a leaf with an IP SAN</td>
244
184
  </tr>
245
185
  <tr>
246
- <td><a href="https://github.com/microsoft/GSL/pull/1272">GSL #1272</a><br><code>dyn_array_iterator</code> declared random access but had no relational operators, no <code>-&gt;</code> and no <code>n + it</code>, so <code>std::sort</code> over a <code>dyn_array</code> did not compile</td>
247
- <td>9 days</td>
186
+ <td><img src="https://github.com/microsoft.png" width="20" height="20" alt="" align="absmiddle"> Microsoft</td>
187
+ <td><a href="https://github.com/microsoft/mimalloc/pull/1385">mimalloc #1385</a> - merged in 8 hours<br>The zeroing allocator returned uninitialized memory above the small-size threshold<br><br><a href="https://github.com/microsoft/snmalloc/pull/878">snmalloc #878</a> - merged in 2 hours<br>The header-only build recipe named a CMake target removed in 2021 and include paths that resolved nowhere<br><br><a href="https://github.com/microsoft/GSL/pull/1271">GSL #1271</a> - merged in 4 days<br>The documented conversion from an iterator to its <code>const_iterator</code> was an access error at every use<br><br><a href="https://github.com/microsoft/GSL/pull/1272">GSL #1272</a> - merged in 9 days<br><code>dyn_array_iterator</code> declared random access but had no relational operators, no <code>-&gt;</code> and no <code>n + it</code>, so <code>std::sort</code> over a <code>dyn_array</code> did not compile</td>
248
188
  </tr>
249
189
  <tr>
250
190
  <td><img src="https://github.com/Netflix.png" width="20" height="20" alt="" align="absmiddle"> Netflix</td>
251
- <td><a href="https://github.com/Netflix/zuul/pull/2213">zuul #2213</a><br><code>HttpQueryParams.get</code> lower-cased the lookup key against names stored verbatim, so every query parameter with an uppercase letter in its name came back empty</td>
252
- <td>17 days</td>
253
- </tr>
254
- <tr>
255
- <td rowspan="6"><img src="https://github.com/apache.png" width="20" height="20" alt="" align="absmiddle"> Apache</td>
256
- <td><a href="https://github.com/apache/commons-text/pull/768">commons-text #768</a><br>A <code>StringMatcher</code> overload forwarded the buffer end as its start</td>
257
- <td>2 days</td>
258
- </tr>
259
- <tr>
260
- <td><a href="https://github.com/apache/commons-csv/pull/633">commons-csv #633</a><br>The record counter's Javadoc said headers were not counted while the constructor's header was</td>
261
- <td>3 days</td>
262
- </tr>
263
- <tr>
264
- <td><a href="https://github.com/apache/commons-lang/pull/1784">commons-lang #1784</a><br><code>Fraction.add</code> and <code>subtract</code> overflowed on operands not in lowest terms, or returned them unreduced</td>
265
- <td>1 day</td>
266
- </tr>
267
- <tr>
268
- <td><a href="https://github.com/apache/commons-lang/pull/1783">commons-lang #1783</a><br><code>MethodUtils.invokeMethod</code> threw on an instance of any non-public class, every JDK collection factory result included</td>
269
- <td>1 day</td>
191
+ <td><a href="https://github.com/Netflix/zuul/pull/2213">zuul #2213</a> - merged in 17 days<br><code>HttpQueryParams.get</code> lower-cased the lookup key against names stored verbatim, so every query parameter with an uppercase letter in its name came back empty</td>
270
192
  </tr>
271
193
  <tr>
272
- <td><a href="https://github.com/apache/commons-lang/pull/1787">commons-lang #1787</a><br><code>Fraction</code>'s zero shortcuts returned the other operand unreduced, and threw where the reduced result fits</td>
273
- <td>6 hours</td>
274
- </tr>
275
- <tr>
276
- <td><a href="https://github.com/apache/commons-codec/pull/443">commons-codec #443</a><br>The Git tree-id builder sorted entries by UTF-16 code units where Git sorts UTF-8 bytes, so a name outside the Basic Multilingual Plane gave a different id from <code>git write-tree</code></td>
277
- <td>9 days</td>
278
- </tr>
279
- <tr>
280
- <td rowspan="3"><img src="https://github.com/PaloAltoNetworks.png" width="20" height="20" alt="" align="absmiddle"> Palo Alto Networks</td>
281
- <td><a href="https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/pull/1625">docusaurus-openapi-docs #1625</a><br>A query or header parameter declared <code>explode: true</code> with a scalar value was enumerated as an object, so <code>status=available</code> went out as <code>status=</code> in the API explorer request and its code snippet, and a <code>null</code> header threw</td>
282
- <td>31 days</td>
283
- </tr>
284
- <tr>
285
- <td><a href="https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/pull/1624">docusaurus-openapi-docs #1624</a><br><code>clean-api-docs</code> deleted every <code>*.json</code> in the output directory and all of <code>schemas/</code>, so a hand-authored <code>_category_.json</code> went with the generated files</td>
286
- <td>31 days</td>
194
+ <td><img src="https://github.com/apache.png" width="20" height="20" alt="" align="absmiddle"> Apache</td>
195
+ <td><a href="https://github.com/apache/commons-text/pull/768">commons-text #768</a> - merged in 2 days<br>A <code>StringMatcher</code> overload forwarded the buffer end as its start<br><br><a href="https://github.com/apache/commons-csv/pull/633">commons-csv #633</a> - merged in 3 days<br>The record counter's Javadoc said headers were not counted while the constructor's header was<br><br><a href="https://github.com/apache/commons-lang/pull/1784">commons-lang #1784</a> - merged in 1 day<br><code>Fraction.add</code> and <code>subtract</code> overflowed on operands not in lowest terms, or returned them unreduced<br><br><a href="https://github.com/apache/commons-lang/pull/1783">commons-lang #1783</a> - merged in 1 day<br><code>MethodUtils.invokeMethod</code> threw on an instance of any non-public class, every JDK collection factory result included<br><br><a href="https://github.com/apache/commons-lang/pull/1787">commons-lang #1787</a> - merged in 6 hours<br><code>Fraction</code>'s zero shortcuts returned the other operand unreduced, and threw where the reduced result fits<br><br><a href="https://github.com/apache/commons-codec/pull/443">commons-codec #443</a> - merged in 9 days<br>The Git tree-id builder sorted entries by UTF-16 code units where Git sorts UTF-8 bytes, so a name outside the Basic Multilingual Plane gave a different id from <code>git write-tree</code></td>
287
196
  </tr>
288
197
  <tr>
289
- <td><a href="https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/pull/1626">docusaurus-openapi-docs #1626</a><br>Every copy of the docs spelled the credential-persistence option <code>authPersistance</code> while the theme reads <code>authPersistence</code>, so a site set to <code>false</code> still wrote reader API keys and passwords to <code>sessionStorage</code></td>
290
- <td>31 days</td>
198
+ <td><img src="https://github.com/PaloAltoNetworks.png" width="20" height="20" alt="" align="absmiddle"> Palo Alto Networks</td>
199
+ <td><a href="https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/pull/1625">docusaurus-openapi-docs #1625</a> - merged in 31 days<br>A query or header parameter declared <code>explode: true</code> with a scalar value was enumerated as an object, so <code>status=available</code> went out as <code>status=</code> in the API explorer request and its code snippet, and a <code>null</code> header threw<br><br><a href="https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/pull/1624">docusaurus-openapi-docs #1624</a> - merged in 31 days<br><code>clean-api-docs</code> deleted every <code>*.json</code> in the output directory and all of <code>schemas/</code>, so a hand-authored <code>_category_.json</code> went with the generated files<br><br><a href="https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/pull/1626">docusaurus-openapi-docs #1626</a> - merged in 31 days<br>Every copy of the docs spelled the credential-persistence option <code>authPersistance</code> while the theme reads <code>authPersistence</code>, so a site set to <code>false</code> still wrote reader API keys and passwords to <code>sessionStorage</code></td>
291
200
  </tr>
292
201
  <tr>
293
202
  <td><img src="https://github.com/oracle.png" width="20" height="20" alt="" align="absmiddle"> Oracle</td>
294
- <td><a href="https://github.com/oracle/macaron/pull/1466">macaron #1466</a><br>The build spec dropped the JDK version read from the JAR whenever the artifact recorded no language version</td>
295
- <td>3 days</td>
296
- </tr>
297
- <tr>
298
- <td rowspan="2"><img src="https://github.com/IBM.png" width="20" height="20" alt="" align="absmiddle"> IBM</td>
299
- <td><a href="https://github.com/IBM/sarama/pull/3740">sarama #3740</a><br>The round-robin balancer never returned when the topics map held a topic no consumer group member subscribed to</td>
300
- <td>14 days</td>
203
+ <td><a href="https://github.com/oracle/macaron/pull/1466">macaron #1466</a> - merged in 3 days<br>The build spec dropped the JDK version read from the JAR whenever the artifact recorded no language version</td>
301
204
  </tr>
302
205
  <tr>
303
- <td><a href="https://github.com/IBM/fp-go/pull/236">fp-go #236</a><br>A provider graph that referred back to itself deadlocked the dependency injector forever with no diagnostic; it now reports the chain that closes the circle</td>
304
- <td>10 hours</td>
206
+ <td><img src="https://github.com/IBM.png" width="20" height="20" alt="" align="absmiddle"> IBM</td>
207
+ <td><a href="https://github.com/IBM/sarama/pull/3740">sarama #3740</a> - merged in 14 days<br>The round-robin balancer never returned when the topics map held a topic no consumer group member subscribed to<br><br><a href="https://github.com/IBM/fp-go/pull/236">fp-go #236</a> - merged in 10 hours<br>A provider graph that referred back to itself deadlocked the dependency injector forever with no diagnostic; it now reports the chain that closes the circle</td>
305
208
  </tr>
306
209
  <tr>
307
210
  <td><img src="https://github.com/hashicorp.png" width="20" height="20" alt="" align="absmiddle"> HashiCorp</td>
308
- <td><a href="https://github.com/hashicorp/hcl/pull/841">hcl #841</a><br>hclwrite's <code>Expression.Variables</code> returned nothing for an object value and <code>RenameVariablePrefix</code> left its references untouched, so a rename tool silently missed every variable inside an object</td>
309
- <td>18 days</td>
211
+ <td><a href="https://github.com/hashicorp/hcl/pull/841">hcl #841</a> - merged in 18 days<br>hclwrite's <code>Expression.Variables</code> returned nothing for an object value and <code>RenameVariablePrefix</code> left its references untouched, so a rename tool silently missed every variable inside an object</td>
310
212
  </tr>
311
213
  <tr>
312
214
  <td><img src="https://github.com/cisco.png" width="20" height="20" alt="" align="absmiddle"> Cisco</td>
313
- <td><a href="https://github.com/cisco/libsrtp/pull/821">libsrtp #821</a><br>Encrypted packets carrying no authentication tag failed to unprotect, because the key lookup stepped a full tag length back from the packet end to find the key identifier</td>
314
- <td>4 days</td>
215
+ <td><a href="https://github.com/cisco/libsrtp/pull/821">libsrtp #821</a> - merged in 4 days<br>Encrypted packets carrying no authentication tag failed to unprotect, because the key lookup stepped a full tag length back from the packet end to find the key identifier</td>
315
216
  </tr>
316
217
  <tr>
317
218
  <td><img src="https://github.com/uber.png" width="20" height="20" alt="" align="absmiddle"> Uber</td>
318
- <td><a href="https://github.com/uber/h3/pull/1235">h3 #1235</a><br><code>gridRing</code> zeroed the caller's output buffer with a width computed from <code>k</code> before checking <code>k</code>, so a negative <code>k</code> became a size near 1.8e19 and the write ran off the end of the buffer; the domain check now runs first</td>
319
- <td>39 days</td>
320
- </tr>
321
- <tr>
322
- <td rowspan="3"><img src="https://github.com/square.png" width="20" height="20" alt="" align="absmiddle"> Square</td>
323
- <td><a href="https://github.com/square/kotlinpoet/pull/2380">kotlinpoet #2380</a><br>String literals it emitted turned CRLF into LF, and raw strings in a constant context let newlines pick up indentation</td>
324
- <td>4 days</td>
325
- </tr>
326
- <tr>
327
- <td><a href="https://github.com/square/kotlinpoet/pull/2382">kotlinpoet #2382</a><br>A class in the default package got a <code>ClassName</code> whose <code>toString()</code> threw</td>
328
- <td>4 days</td>
219
+ <td><a href="https://github.com/uber/h3/pull/1235">h3 #1235</a> - merged in 39 days<br><code>gridRing</code> zeroed the caller's output buffer with a width computed from <code>k</code> before checking <code>k</code>, so a negative <code>k</code> became a size near 1.8e19 and the write ran off the end of the buffer; the domain check now runs first</td>
329
220
  </tr>
330
221
  <tr>
331
- <td><a href="https://github.com/square/kotlinpoet/pull/2391">kotlinpoet #2391</a><br><code>trimTrailingNewLine()</code> rewrote the last <code>String</code> argument of any trailing placeholder, so <code>initializer("%S", "cheese
222
+ <td><img src="https://github.com/square.png" width="20" height="20" alt="" align="absmiddle"> Square</td>
223
+ <td><a href="https://github.com/square/kotlinpoet/pull/2380">kotlinpoet #2380</a> - merged in 4 days<br>String literals it emitted turned CRLF into LF, and raw strings in a constant context let newlines pick up indentation<br><br><a href="https://github.com/square/kotlinpoet/pull/2382">kotlinpoet #2382</a> - merged in 4 days<br>A class in the default package got a <code>ClassName</code> whose <code>toString()</code> threw<br><br><a href="https://github.com/square/kotlinpoet/pull/2391">kotlinpoet #2391</a> - merged in 19 days<br><code>trimTrailingNewLine()</code> rewrote the last <code>String</code> argument of any trailing placeholder, so <code>initializer("%S", "cheese
332
224
  ")</code> emitted a literal denoting <code>"cheese"</code> and nothing reported the change</td>
333
- <td>19 days</td>
334
225
  </tr>
335
226
  <tr>
336
- <td rowspan="2"><img src="https://github.com/cloudflare.png" width="20" height="20" alt="" align="absmiddle"> Cloudflare</td>
337
- <td><a href="https://github.com/cloudflare/circl/pull/700">circl #700</a><br>The PKI marshal functions panicked on the library's own post-quantum keys instead of returning an error</td>
338
- <td>1 day</td>
227
+ <td><img src="https://github.com/cloudflare.png" width="20" height="20" alt="" align="absmiddle"> Cloudflare</td>
228
+ <td><a href="https://github.com/cloudflare/circl/pull/700">circl #700</a> - merged in 1 day<br>The PKI marshal functions panicked on the library's own post-quantum keys instead of returning an error<br><br><a href="https://github.com/cloudflare/circl/pull/699">circl #699</a> - merged in 1 day<br>The hybrid KEM derived a different key pair from the same seed on a random subset of calls</td>
339
229
  </tr>
340
230
  <tr>
341
- <td><a href="https://github.com/cloudflare/circl/pull/699">circl #699</a><br>The hybrid KEM derived a different key pair from the same seed on a random subset of calls</td>
342
- <td>1 day</td>
343
- </tr>
344
- <tr>
345
- <td rowspan="2"><img src="https://github.com/JetBrains.png" width="20" height="20" alt="" align="absmiddle"> JetBrains</td>
346
- <td><a href="https://github.com/Kotlin/kotlinx-datetime/pull/650">kotlinx-datetime #650</a><br>Deprecation quick-fixes pointed developers at the wrong replacement</td>
347
- <td>90 minutes</td>
348
- </tr>
349
- <tr>
350
- <td><a href="https://github.com/Kotlin/kotlinx-datetime/pull/649">kotlinx-datetime #649</a><br>The Unicode pattern parser dropped the escaped quote inside a literal</td>
351
- <td>4 days</td>
231
+ <td><img src="https://github.com/JetBrains.png" width="20" height="20" alt="" align="absmiddle"> JetBrains</td>
232
+ <td><a href="https://github.com/Kotlin/kotlinx-datetime/pull/650">kotlinx-datetime #650</a> - merged in 90 minutes<br>Deprecation quick-fixes pointed developers at the wrong replacement<br><br><a href="https://github.com/Kotlin/kotlinx-datetime/pull/649">kotlinx-datetime #649</a> - merged in 4 days<br>The Unicode pattern parser dropped the escaped quote inside a literal</td>
352
233
  </tr>
353
234
  <tr>
354
235
  <td><img src="https://github.com/nodejs.png" width="20" height="20" alt="" align="absmiddle"> Node.js</td>
355
- <td><a href="https://github.com/ada-url/ada/pull/1244">ada #1244</a><br>The URL parser Node.js ships reported <code>host_end</code> one byte short</td>
356
- <td>12 minutes</td>
236
+ <td><a href="https://github.com/ada-url/ada/pull/1244">ada #1244</a> - merged in 12 minutes<br>The URL parser Node.js ships reported <code>host_end</code> one byte short</td>
357
237
  </tr>
358
238
  <tr>
359
- <td rowspan="2"><img src="https://github.com/canonical.png" width="20" height="20" alt="" align="absmiddle"> Canonical (Ubuntu)</td>
360
- <td><a href="https://github.com/canonical/pebble/pull/938">pebble #938</a><br>With more than one service or check, the metrics endpoint repeated each <code># HELP</code> and <code># TYPE</code> family and the Prometheus parser rejected the whole response</td>
361
- <td>16 days</td>
362
- </tr>
363
- <tr>
364
- <td><a href="https://github.com/canonical/pebble/pull/937">pebble #937</a><br>Appending a layer that parsed but failed plan validation left the daemon's live layer list changed, because <code>slices.Insert</code> shifted the existing slice in place before validation ran; the insert now goes into a copy</td>
365
- <td>43 days</td>
239
+ <td><img src="https://github.com/canonical.png" width="20" height="20" alt="" align="absmiddle"> Canonical (Ubuntu)</td>
240
+ <td><a href="https://github.com/canonical/pebble/pull/938">pebble #938</a> - merged in 16 days<br>With more than one service or check, the metrics endpoint repeated each <code># HELP</code> and <code># TYPE</code> family and the Prometheus parser rejected the whole response<br><br><a href="https://github.com/canonical/pebble/pull/937">pebble #937</a> - merged in 43 days<br>Appending a layer that parsed but failed plan validation left the daemon's live layer list changed, because <code>slices.Insert</code> shifted the existing slice in place before validation ran; the insert now goes into a copy</td>
366
241
  </tr>
367
242
  <tr>
368
243
  <td><img src="https://github.com/SethMMorton.png" width="20" height="20" alt="" align="absmiddle"> natsort</td>
369
- <td><a href="https://github.com/SethMMorton/natsort/pull/196">natsort #196</a><br>The locale sentinel meant to sort last was three ASCII bytes, so PyICU keys sorted after it (19 million PyPI downloads a month)</td>
370
- <td>8 days</td>
244
+ <td><a href="https://github.com/SethMMorton/natsort/pull/196">natsort #196</a> - merged in 8 days<br>The locale sentinel meant to sort last was three ASCII bytes, so PyICU keys sorted after it (19 million PyPI downloads a month)</td>
371
245
  </tr>
372
246
  <tr>
373
247
  <td><img src="https://github.com/uuid-rs.png" width="20" height="20" alt="" align="absmiddle"> uuid-rs</td>
374
- <td><a href="https://github.com/uuid-rs/uuid/pull/907">uuid #907</a><br>The UUIDv7 counter lost its top four bits to the version nibble (179 million crates.io downloads in the last 90 days)</td>
375
- <td>6 days</td>
248
+ <td><a href="https://github.com/uuid-rs/uuid/pull/907">uuid #907</a> - merged in 6 days<br>The UUIDv7 counter lost its top four bits to the version nibble (179 million crates.io downloads in the last 90 days)</td>
376
249
  </tr>
377
250
  </table>
378
251
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "jeffy-loop"
7
- version = "1.26.2"
7
+ version = "1.26.4"
8
8
  description = "Jeffy Loop is an autonomous software-engineering control system that forces an LLM to continuously audit, act, verify, checkpoint, and prove convergence."
9
9
  dynamic = ["readme"]
10
10
  license = "MIT"
@@ -10,7 +10,7 @@
10
10
  # directory Claude Code was started in, so Bash-tool cwd drift mid-iteration
11
11
  # cannot kill the loop.
12
12
  set -u
13
- JEFFY_VERSION="1.26.2"
13
+ JEFFY_VERSION="1.26.4"
14
14
 
15
15
  # 1.21.0 (P1-70): `stop-hook.sh --lint [project root]` derives every check
16
16
  # the declaration path enforces and prints the first refusal, or clean,
@@ -0,0 +1 @@
1
+ __version__ = "1.26.4"
@@ -1 +0,0 @@
1
- __version__ = "1.26.2"
File without changes
File without changes
File without changes