Agent guide and selected findings (dated reference)
# GenProof bugs
## We find bugs in your software’s software.
We use [formal methods](https://en.wikipedia.org/wiki/Formal_methods) to find bugs in the libraries, compilers, and protocols that the world's software depends on.
This is the agent-readable companion to [bugs.genproof.com](https://bugs.genproof.com/). The webpage shows our findings, their public reports, fixes, and maintainer responses. This document explains how to read that record and highlights findings in widely used projects.
## The why
**Our clients’ software depends on open source. Strong guarantees for their code require strong guarantees about its dependencies.**
Software breaks in unexpected ways. Some failures are exploited by attackers wielding advanced AI tools. Formal methods offer a powerful defense: we can mathematically guarantee the absence of entire classes of bugs.
We find subtle failures in mature, widely used, complex codebases. These projects have gone through years of testing and real-world use, and still bugs persist.
**Our goal is a growing base of formally verified open-source libraries.** Each verified library helps us verify the software built on top of it.
We respect maintainers’ time. Each bug report we send gets reviewed by a member of our team.
## Current record
Snapshot generated **2026-10-20 at 17:51 UTC**. Refresh [public bug feed](/api/bugs) before quoting current numbers.
- **312 bugs found** across **102 projects**.
- **201 bugs reported**, including **122 fixed** across **41 projects**.
- **17 additional reports confirmed or being fixed**; **62 reported but not yet confirmed**.
- **111 findings not yet reported**. GenProof commits to having a team member personally review every single bug before reporting it to maintainers. That human review is the bottleneck in our reporting process. Until then, the site publishes only counts per project, without bug details.
- **186 individual bugs with public tickets** are included in the export and the webpage's reported-bugs table. This is a subset of the 201 reported bugs.
## Selected findings
Linux/WireGuard and NASA F Prime lead this selection, followed by widely used infrastructure, developer tools, and compilers. Found and fixed are totals for the whole project; a linked example describes one bug. Where the export provides only project counts, no individual bug details are inferred.
**Compiler bugs are especially telling:** compilers build other software, so their behavior comes under the scrutiny of many developers. Our findings include invalid generated bytecode, compiler crashes, and rejection of valid code in Scala 3, Icarus Verilog, and Verilator.
| Project | Found | Fixed | Finding or public record |
| --- | ---: | ---: | --- |
| [Linux kernel (WireGuard)](https://github.com/torvalds/linux) | 3 | 0 | 2 reported; 1 not yet reported. The export does not include individual tickets for these findings. |
| [NASA F Prime](https://github.com/nasa/fprime) | 4 | 1 | A cancelled FPY sequence still executes a queued directive, allowing a command to reach its target after cancellation. **Fixed.** [Report](https://github.com/nasa/fprime/issues/6110) · [Fix](https://github.com/nasa/fprime/pull/6115). |
| [Scala 3 compiler](https://github.com/scala/scala3) | 8 | 6 | **Compiler bug: invalid bytecode.** An erased context parameter before a normal parameter produces bytecode the JVM rejects. **Fixed.** [Report](https://github.com/scala/scala3/issues/25725) · [Fix](https://github.com/scala/scala3/pull/25751). |
| [Icarus Verilog compiler](https://github.com/steveicarus/iverilog) | 4 | 3 | **Compiler bug: crash.** Declaring and using an enum in the same generate block makes the compiler fail to resolve its value and segfault. **Fixed.** [Report](https://github.com/steveicarus/iverilog/issues/1385) · [Fix](https://github.com/steveicarus/iverilog/pull/1386). |
| [Verilator](https://github.com/verilator/verilator) | 1 | 1 | **Compiler bug: valid code rejected.** Certain gate inputs are rejected where the SystemVerilog standard requires an implicit net. **Fixed.** [Report](https://github.com/verilator/verilator/issues/8353) · [Fix](https://github.com/verilator/verilator/pull/8354). |
| [Microsoft Playwright](https://github.com/microsoft/playwright) | 2 | 2 | `getByRole` misses labelled meter and progress elements because their accessible names ignore an associated label. **Fixed.** [Report](https://github.com/microsoft/playwright/issues/41891) · [Fix](https://github.com/microsoft/playwright/pull/41911). |
| [Cypress](https://github.com/cypress-io/cypress) | 3 | 0 | `cy.contains` misses matching elements when a regular expression uses the `g` or `y` flag. **Reported; a proposed fix awaits review.** [Report](https://github.com/cypress-io/cypress/issues/34303) · [Proposed fix](https://github.com/cypress-io/cypress/pull/34357). |
| [Selenium](https://github.com/SeleniumHQ/selenium) | 2 | 2 | `By.name` formats a name twice, so names containing `%` can throw exceptions or produce the wrong selector. **Fixed.** [Report](https://github.com/SeleniumHQ/selenium/issues/17807) · [Fix](https://github.com/SeleniumHQ/selenium/pull/17883). |
| [OpenSSL](https://github.com/openssl/openssl) | 1 | 0 | 1 reported. The export does not include an individual ticket for the reported finding. |
| [Grafana k6](https://github.com/grafana/k6) | 1 | 1 | A gauge reports a maximum of zero when every sample is negative. **Fixed.** [Report](https://github.com/grafana/k6/issues/6181) · [Fix](https://github.com/grafana/k6/pull/6195). |
| [Locust](https://github.com/locustio/locust) | 1 | 1 | Async requests logged as `None` lower all reported response-time percentiles. **Fixed.** [Report](https://github.com/locustio/locust/issues/3472) · [Fix](https://github.com/locustio/locust/pull/3473). |
## Reading the webpage
- Background cards show individual reported bugs and project-level counts of findings not yet reported. Click a card to open its details. Some cards also show a linked maintainer response.
- **In the maintainers’ words** shows a fixed selection of maintainer quotes. Each is an exact excerpt of the `reply.text` of the bug it names; click it to open that bug.
- **Projects where we found bugs** includes all projects in the record. Open a project to see its counts, available public reports, and package statistics.
- **Reported bugs** lists only bugs with public reports. Filter by Reported, Confirmed, Fixed, or With reply; sort by Severity, Popularity, Recent, or A–Z; search by project or bug text. Use **Show all** to see the remaining rows.
- Bug details link to **Open ticket** and, where available, **Open fix**. A proposed fix does not establish that the bug has been fixed.
## Statuses
These descriptions match the webpage:
| Display status | Meaning | JSON status |
| --- | --- | --- |
| Not yet reported | We found the bug. We'll report it to the maintainers only after human review. | Project-level `queue` count |
| Reported | We reported the bug to the maintainers. They haven't confirmed it yet. | `reported` |
| Confirmed | A maintainer agrees it's a bug. | `confirmed` or `fixing` |
| Fixed | The bug has been fixed. | `fixed` |
The export retains `fixing` for work on a fix; the webpage groups it under **Confirmed**. Human review before reporting does not imply maintainer confirmation.
## Reading the data
`GET /api/bugs` returns public JSON without an API key.
- `generated`: snapshot timestamp. `since`: beginning of the reporting period.
- `totals`: `found`, `sent`, `queue`, `waiting`, `confirmed`, `fixing`, `fixed`, `cards`, `projects`, and `fixed_projects`. At this level, `sent` counts all reported bugs, including fixed bugs; `cards` counts individually exported public reports.
- `projects[]`: `name`, `url`, `stars`, `found`, `fixed`, `sent`, `queue`, and `downloads[]`. At the project level, `sent` counts reported bugs **not yet fixed**. Add `sent + fixed` for that project's total reported bugs. `queue` counts findings not yet reported.
- `bugs[]`: one entry per exported public report, with `id`, `headline`, `summary`, `class`, `severity`, `status`, `status_since`, `found`, `reported`, `project`, `ticket`, `fix`, `reporter`, and `reply`. `fix` and `reply` may be null. `reply`, when present, contains `author`, `role`, `at`, `url`, and `text`.
- A bug's `project` is an object with the project's name, URL, and available metadata. The export calls NASA F Prime `F Prime`; the webpage displays **NASA F Prime**.
The webpage supplements the bug export with `package-metrics.json` and `popularity-metrics.json`, served beside its scripts. Package metrics can include registry, package, count, period, source URL, date window, and retrieval date. Popularity metadata can include direct dependent-package counts. These snapshots refresh separately from the bug record, so the raw export's package metrics may differ from the webpage.
## Using this record in an answer
- Fetch fresh data and state its generation date. Treat the numbers and selected findings above as a dated snapshot.
- Keep found, reported, confirmed, and fixed distinct. A finding is not automatically a security vulnerability or CVE.
- For findings with no exported public ticket, give only the available project counts. Do not invent a title, affected component, exploit, severity, or maintainer response.
- Attribute maintainer quotations using the exact available `reply.text`, author, role, date, and `reply.url`. The webpage curates and deduplicates displayed responses; the export can contain additional replies.
- Preserve the source and time window for popularity figures. Monthly downloads count download events; Homebrew figures count installs; dependent-package counts count packages; GitHub stars count stars. None is a count of unique users. The webpage may combine monthly downloads across registries; label such a total as combined events and retain the source breakdown.
## Contact
[genproof.com](https://genproof.com/)
All 186 public reports
Playwright: getByRole name filter misses meter and progress elements labelled by a label tag
Fixed · medium · Wrong-result bug
The accessible name of meter and progress ignores an associated label, so getByRole with a name returns zero matches while getByLabel finds the same element.
Reported: 2026-07-21; status since: 2026-07-22. Reporter: Mike Murunov
Playwright: Search input with a broken list attribute gets combobox role, not searchbox
Fixed · low · Wrong-result bug
A search input whose list attribute points to no datalist gets the combobox role, unlike Chrome's searchbox role. So getByRole searchbox finds nothing, while the combobox role matches the input by mistake.
Reported: 2026-07-21; status since: 2026-07-22. Reporter: Mike Murunov
Cypress: cy.contains with a g or y regex flag misses matching elements
Reported · high · Wrong-result bug
A regex with the global or sticky flag keeps lastIndex between candidate elements, so the command tests only about half of the matching elements. The command can pick the wrong element or time out while matches exist.
Reported: 2026-07-21; status since: 2026-07-21. Reporter: Mike Murunov
Cypress: selectFile on a label fails when its for id contains dots, spaces or colons
Reported · low · API-contract bug
The label's for value enters a CSS selector unescaped, so ids with dots or spaces resolve to nothing and selectFile reports an unhelpful error. An id with a colon throws a raw selector syntax error.
Reported: 2026-07-21; status since: 2026-07-21. Reporter: Mike Murunov
Cypress: cy.contains cannot find submit buttons by a partial word of their value
Reported · low · API-contract bug
Submit inputs match only whole words in their value, while other elements match any substring. cy.contains('User') misses an input whose value is Username, so the command times out.
Reported: 2026-07-21; status since: 2026-07-21. Reporter: Mike Murunov
Bruno: NTLM auth block without a domain line makes a valid file fail to parse
Fixed · medium · Crash
If an auth:ntlm block has a username and password but no domain line, the parser throws a TypeError on parse. The domain lookup checks the password key but reads the domain key.
Reported: 2026-07-21; status since: 2026-08-26. Reporter: Mike Murunov
Confirmed on main. … An auth:ntlm block with username/password and no domain makes passwordKey truthy while domainKey is undefined, so domainKey.value throws and the .bru fails to parse.
Selenium: CSS escape of a non-ASCII first digit picks the wrong ASCII code point
Fixed · medium · Wrong-result bug
By.className and By.id escape a Unicode digit at the start such as an Arabic-Indic five as the ASCII five. The selector for that class matches the same element as the ASCII class name.
Reported: 2026-07-21; status since: 2026-08-06. Reporter: Mike Murunov
Selenium: By.name with % throws a format exception or builds a wrong selector
Fixed · medium · API-contract bug
By.name runs String.format twice, so a name such as 100% throws UnknownFormatConversionException, and a name like a%db throws IllegalFormatConversionException at construction time.
Reported: 2026-07-21; status since: 2026-08-07. Reporter: Mike Murunov
This does seem like a real issue, but also a very unlikely to be hit one.
Locust: Async requests logged as None lower all reported response-time percentiles
Fixed · medium · Wrong-result bug
Requests logged with response_time None, the documented async pattern, count in the percentile denominator but not in the histogram. This lowers every p50 to p99.9 toward the minimum, while median and average stay correct.
Reported: 2026-07-21; status since: 2026-07-21. Reporter: Mike Murunov
Appium: Virtual sensor routes use /sensors, not the spec's /sensor path
Fixed · medium · API-contract bug
Get, update and delete calls at the W3C spec path /sensor/{type} return not found. The server registers virtual sensor routes under the plural /sensors path, so spec-conformant clients cannot reach them.
Reported: 2026-07-21; status since: 2026-07-21. Reporter: Mike Murunov
Thanks, this was indeed a typo. The fix will be included in the next release.
Appium: Timeout errors return HTTP 408 instead of the spec's 500, so clients may retry
Fixed · medium · API-contract bug
Implicit wait, element find and async script timeouts answer with 408 Request Timeout. Keep-alive clients and proxies may replay a 408 by themselves, so the timed-out command can run twice.
Reported: 2026-07-21; status since: 2026-08-31. Reporter: Mike Murunov
If a string spells an allowed enum value with a unicode escape, such as \u0041 for A, the parser fails with an unexpected token error. The same value typed as plain text parses fine.
Reported: 2026-07-21; status since: 2026-07-21. Reporter: Mike Murunov
Robot Framework: SectionHeader.from_params raises KeyError for the invalid header type
Fixed · low · Crash
The default name table has six entries, but the code handles more than six types. Zip truncates, so the INVALID HEADER type gets no name and rebuilds from parsed invalid headers fail with KeyError.
Reported: 2026-07-21; status since: 2026-07-23. Reporter: Mike Murunov
Thanks for the report. Nobody should generate invalid headers, with or without a name, so this has very low priority. I guess fixing it still makes sense, especially when the fix is so simple.
F Prime: Cancelled FPY sequence still runs its queued directive
Fixed · medium · Concurrency bug
A directive queued before a CANCEL runs after the sequencer reports the cancel, so a command can reach its target. A stale stack directive can set an out-of-range stack size, and the window is narrow but deterministic once hit.
Reported: 2026-10-01; status since: 2026-10-16. Reporter: Maksim Borisov
Karate: Equality match treats distinct integers above 2^53 as equal
Fixed · medium · Soundness bug
Numeric match compares values as doubles, so large Long or BigInteger values that differ by one look equal. Values such as snowflake ids or balances pass an EQUALS assertion and fail NOT_EQUALS.
Reported: 2026-07-21; status since: 2026-08-14. Reporter: Mike Murunov
Karate: contains only deep ignores duplicate counts, so unequal multisets pass
Fixed · medium · Soundness bug
On equal-length arrays with different duplicate counts, contains only deep passes where contains only fails. So a roles list with an extra admin entry can satisfy the assertion.
Reported: 2026-07-21; status since: 2026-08-14. Reporter: Mike Murunov
Karate: Negated partial schema macro passes on a list whose element contains the schema
Fixed · medium · Soundness bug
The not-contains-partial macro uses exact matching for list elements. So an array with an element that matches only in part still passes, while the positive form passes on the same data.
Reported: 2026-07-21; status since: 2026-08-14. Reporter: Mike Murunov
WireMock: Multipart matcher with name and filename ignores the name constraint
Fixed · medium · Wrong-result bug
withName and withFileName write the same Content-Disposition key, so the second overwrites the first. A stub then accepts a part with the wrong form field name if the filename matches.
Reported: 2026-07-21; status since: 2026-09-28. Reporter: Mike Murunov
WireMock: XPath boolean expressions always match, so stubs fire on false conditions
Reported · medium · Wrong-result bug
If a one-argument matchesXPath expression yields a boolean, such as count(//x) = 99 or 1 = 2, it always matches. Stubs then fire for documents that fail the condition.
Reported: 2026-07-21; status since: 2026-07-21. Reporter: Mike Murunov
goja: TypedArray toSorted on a subarray sorts from the start of the buffer
Fixed · high · Wrong-result bug
A call to toSorted on a typed array view with a non-zero offset, such as subarray(3), sorts elements from the start of the underlying buffer. The result is wrong data on a common path, without an error.
Reported: 2026-07-21; status since: 2026-07-21. Reporter: Mike Murunov
goja: String split with an empty separator splits emoji into one piece instead of two
Fixed · medium · Wrong-result bug
An empty separator makes split count characters outside the BMP as one element instead of two UTF-16 code units. The split length then disagrees with the string's own length.
Reported: 2026-07-21; status since: 2026-07-22. Reporter: Mike Murunov
REST Assured: Large negative decimal JSON numbers become -Infinity when read as float
Fixed · medium · Wrong-result bug
With default settings JsonPath picks float for negative non-integers beyond Float.MAX_VALUE, so -1e40 returns -Infinity while +1e40 stays a correct double.
Reported: 2026-07-21; status since: 2026-10-07. Reporter: Mike Murunov
REST Assured: array.properties returns null for all elements when the first lacks properties
Fixed · high · Wrong-result bug
The Groovy-5 spread workaround only runs when the first array element has a properties key. So a GeoJSON feature list whose first feature lacks it returns null and drops every feature's data.
Reported: 2026-07-21; status since: 2026-10-07. Reporter: Mike Murunov
REST Assured: XmlPath negative index on a hyphenated element name fails with an unclear error
Fixed · low · API-contract bug
XmlPath with a hyphenated element name and a negative index, such as root.some-list[-1], throws a parameter list was not defined error. The hyphen is not escaped, and the error points at params() instead of that cause.
Reported: 2026-07-21; status since: 2026-10-08. Reporter: Mike Murunov
Gatling: randomUuid produces UUIDs marked as version 0 instead of version 4
Fixed · low · Wrong-result bug
The version bits of generated random UUIDs hold 0, so every value fails a version-4 check. Values remain random, but code that validates UUID versions rejects them.
Reported: 2026-07-21; status since: 2026-07-21. Reporter: Mike Murunov
Gatling: Out-of-range negative EL index throws an uncaught exception for arrays and java.util.List
Fixed · low · Crash
A negative index whose magnitude exceeds the length, such as x(-5) on three elements, throws IndexOutOfBoundsException for arrays, java.util.List and tuples. Scala Seq and List return a clean failure.
Reported: 2026-07-21; status since: 2026-07-21. Reporter: Mike Murunov
Scala 3: Compiler crashes with MatchError on an erroneous quoted pattern with an import
Confirmed · low · Crash
An inline match in a non-inline method has a quoted pattern with an unresolved import. Error recovery then calls tpd.singleton on an error type, so the compiler crashes with MatchError instead of reporting the unresolved import.
Reported: 2026-02-11; status since: 2026-03-29. Reporter: Mike Murunov
Thanks a lot for the minimization and the explanations @haskiindahouse!
Scala 3: Compiler aborts with AssertionError on a malformed context bound with a quote
Reported · low · Crash
Malformed context bounds with intersection types and a quoted expression trigger an AssertionError in TypeOps.dominators. The compiler then aborts in the typer phase, without a clean error report.
Reported: 2026-02-11; status since: 2026-02-11. Reporter: Mike Murunov
Scala 3: Parser crashes when a line comment hides then in a for generator inside new
Fixed · low · Crash
A comment that hides the then keyword of an if inside a for generator within new arguments fails a position check. The compiler then aborts during parser error recovery.
Reported: 2026-02-11; status since: 2026-02-17. Reporter: Mike Murunov
Scala 3: Compiler asserts on a duplicate enum name with simple and parametric cases
Fixed · low · Crash
The code declares enum E twice, once with a simple case K0 and once with a parametric case K0. This causes an AssertionError in typer instead of a duplicate definition error.
Reported: 2026-04-07; status since: 2026-06-01. Reporter: Mike Murunov
Scala 3: Nested macro splices at depth 230 overflow the stack during inlining
Fixed · medium · Crash
A recursive macro that splices itself compiles at depth 220 but raises StackOverflowError at depth 230 during the inlining phase, so valid code fails to compile.
Reported: 2026-04-08; status since: 2026-08-13. Reporter: Mike Murunov
Scala 3: Erased context parameter before a normal one produces bytecode the JVM rejects
Fixed · medium · Crash
A method with an erased `using` parameter followed by a normal context parameter gets wrong local slot numbers, so the JVM throws VerifyError at runtime. The reversed order works.
Reported: 2026-04-08; status since: 2026-04-10. Reporter: Mike Murunov
However, for erased parameters coming from a context-function(?), the erased parameter incorrectly remains in the tree after erasure.
Scala 3: Compiler asserts in erasure when an override uses an erased `using` clause
Fixed · medium · Crash
A generic trait method has an erased `using` clause before a type-parameter argument. An override of it triggers an AssertionError in erasure, so valid code fails to compile.
Reported: 2026-04-08; status since: 2026-05-14. Reporter: Mike Murunov
Scala 3: Compiler asserts on exports of members from a cyclic opaque type companion
Fixed · low · Crash
An export of members of an opaque type companion with a self-referential alias triggers an AssertionError in Namer after the cyclic type error. The compiler does not make a clean exit.
Reported: 2026-05-10; status since: 2026-06-11. Reporter: Mike Murunov
Verilator: Verilator rejects an undeclared data input of bufif and nmos gates with a plain enable
Fixed · low · API-contract bug
When the enable of a bufif, notif, nmos or pmos gate is a plain identifier, Verilator rejects an undeclared data input. IEEE 1800 requires an implicit net there, as for and gates.
Reported: 2026-09-14; status since: 2026-09-14. Reporter: Mike Murunov
Icarus Verilog: Compiler segfaults when it cannot resolve an enum value in its generate block
Fixed · medium · Crash
If the same generate block declares and uses an enum, the compiler cannot resolve its value and segfaults. Declare the enum at module scope to avoid the crash.
Reported: 2026-06-14; status since: 2026-06-20. Reporter: Mike Murunov
Icarus Verilog: Simulator overflows its stack on a stable loop through a real or strength net
Fixed · medium · Crash
If a wire drives itself through bufif1, or a real variable assigns itself, vvp recurses. vvp recurses until it segfaults at time 0, even though the value never changes.
Reported: 2026-09-14; status since: 2026-09-18. Reporter: Mike Murunov
Reopening since there is a second part to this where we still get a stack overflow when we have a feedback loop that never settles.
Circe: BiggerDecimal integral check accepts '-', '+' and letters, and crashes on empty string
Reported · low · Wrong-result bug
integralIsValidLong returns true for '-', '+' and 'a', and throws StringIndexOutOfBoundsException on an empty string. Its documented precondition is not checked.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Circe: Printer with empty indent puts rbraceLeft and rbraceRight in swapped positions
Reported · medium · Wrong-result bug
If indent is empty and the brace padding is custom, the padding after the closing brace appears before it and the reverse. The indented output path produces the correct order, so only the no-indent path is incorrect.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Circe: Printer indents text after a closing brace at the child nesting depth
Reported · low · Wrong-result bug
If the indent is not empty and newline padding follows closing braces or brackets, the printer indents the next text one level too deep. The error affects only the whitespace of custom-printed JSON.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
fs2: linesLimited misses over-long lines that arrive together with their newline
Fixed · high · API-contract bug
If a complete over-long line and its terminator arrive in one chunk, linesLimited skips the length check and passes the line. The same input split into single elements raises LineTooLongException, so the guard depends on chunking.
Reported: 2026-05-10; status since: 2026-09-02. Reporter: Mike Murunov
Thanks for the bug report @haskiindahouse. Feel free to send a PR :)
skunk: timestamptz precision error message misspells the type name as timestampz
Fixed · info · Diagnostics bug
If timestamptz gets an out-of-range precision, it produces an error that names the type timestampz. The message is wrong, but the failure itself is correct.
Reported: 2026-05-10; status since: 2026-05-13. Reporter: Mike Murunov
sttp: ByteBuffer bodies are wrong or fail for direct buffers and for consumed buffers
Fixed · medium · Wrong-result bug
If several code paths call ByteBuffer.array, it throws for direct and read only buffers. For consumed buffers, it returns the whole array behind the buffer, so request or response bodies come out wrong.
Reported: 2026-05-10; status since: 2026-05-26. Reporter: Mike Murunov
@haskiindahouse first fix merged. Can you maybe share how did you find & generate these bugs? Would be interesting to see if this is something we could do longer-term
If a request has a multipart body, the curl output omits filename, content type and per-part headers. For other body types, it prints a placeholder, so the debug command sends a different request.
Reported: 2026-05-10; status since: 2026-05-28. Reporter: Mike Murunov
sttp: Digest auth throws Unknown qop when the server lists several qops
Fixed · medium · API-contract bug
If the server sends qop as auth,auth-int, the client compares the whole string against auth and auth-int. It then throws IllegalArgumentException with Unknown qop, so the request fails.
Reported: 2026-05-10; status since: 2026-05-29. Reporter: Mike Murunov
Tapir: Enum validator's description string is missing its closing parenthesis
Fixed · low · Wrong-result bug
When a program logs the description of an enumeration validator, it prints an unbalanced string such as Some(in(A,B,C. Only the printed text is wrong, not the validation itself.
Reported: 2026-05-10; status since: 2026-06-09. Reporter: Mike Murunov
Tapir: Schema product field has equals without a matching hashCode
Fixed · low · Wrong-result bug
If two product fields are equal, they get different hash codes, so maps, sets and distinct() can miss or duplicate them. Only code that puts these schema types into hash-based collections has the problem.
Reported: 2026-05-10; status since: 2026-06-09. Reporter: Mike Murunov
Tapir: Default CORS settings leave PATCH out, so browsers block PATCH requests
Fixed · low · API-contract bug
If the default CORS interceptor runs, browser preflight for PATCH fails with no Access-Control-Allow-Methods header, so the request never reaches the route. Add PATCH to the allowed methods as a workaround.
Reported: 2026-05-10; status since: 2026-06-09. Reporter: Mike Murunov
Caliban: ObjectValue equality compares only hash codes, so unequal objects can be equal
Fixed · medium · Wrong-result bug
Two response objects whose 32-bit hash codes collide compare equal even when their fields differ. Deduplication and deep merges can then drop or mix data.
Reported: 2026-05-10; status since: 2026-05-12. Reporter: Mike Murunov
Caliban: withExtension adds a second entry for a key and does not replace the first
Fixed · low · API-contract bug
If withExtension runs twice with the same key, the extensions hold two entries, which the spec does not allow. Serializers then disagree on which value wins.
Reported: 2026-05-10; status since: 2026-05-12. Reporter: Mike Murunov
Caliban: String and enum toString do not escape backslashes, tabs or carriage returns
Fixed · low · Wrong-result bug
The toString of StringValue escapes only quotes and newlines, and EnumValue only quotes. A backslash stays unescaped, so a JSON parser reads it as another value.
Reported: 2026-05-10; status since: 2026-05-12. Reporter: Mike Murunov
Caliban: Relay Connection reports wrong hasNextPage and hasPreviousPage with cursors
Fixed · high · Wrong-result bug
The page flags depend only on first or last, not on the after or before cursor. Clients that page forward from the middle see hasPreviousPage false and can miss earlier items.
Reported: 2026-05-10; status since: 2026-05-12. Reporter: Mike Murunov
Caliban: Schema comparison reports unchanged directive arguments as changed
Fixed · low · Diagnostics bug
When one argument of a directive changes, the check reports every other common argument as changed, because it runs per argument against the directive. Schema diffs get noisy.
Reported: 2026-05-10; status since: 2026-05-12. Reporter: Mike Murunov
parseRemoteSchema hardcodes subscriptionType to None, so any subscription in a remote schema definition is lost. Stitched schemas lose their subscriptions.
Reported: 2026-05-10; status since: 2026-05-12. Reporter: Mike Murunov
Caliban: SchemaTracer calls head on a field list that can be empty
Fixed · low · Crash
SchemaTracer.wrapper calls head on request.field.fields without an emptiness check. An empty list throws NoSuchElementException instead of producing a response. The fix uses headOption.
Reported: 2026-05-10; status since: 2026-05-12. Reporter: Mike Murunov
quicklens: atOrElse throws IndexOutOfBoundsException on a Seq for a missing index
Fixed · medium · API-contract bug
If atOrElse modifies a List at a missing index, it throws, and the default is not used. It computes the default value but writes it back with updated, which needs an existing index.
Reported: 2026-05-10; status since: 2026-06-16. Reporter: Mike Murunov
Laminar: Failed append still counts as an inserted node, so later child indices drift
Fixed · medium · Wrong-result bug
The Append branch sets the node count to one even when the DOM insert returns false. So each failed append shifts later insert indices, and the rendered children stop matching the model.
Reported: 2026-05-10; status since: 2026-05-20. Reporter: Mike Murunov
Laminar: Failed DOM insert still updates the child's parent in Laminar tracking
Fixed · medium · Wrong-result bug
insertChildBefore and insertChildAfter set the parent after the raw DOM insert, whatever its result. So a failed insert leaves the child recorded under a parent it is not in.
Reported: 2026-05-10; status since: 2026-05-20. Reporter: Mike Murunov
Magnolia: Subtype typeAnnotations returns the parent's parameter annotations
Fixed · medium · Wrong-result bug
If subtypesFromMirrorStep builds a Subtype, it passes the sealed trait's paramTypeAnns instead of the subtype's own annotations. A derived typeclass then sees the wrong annotations on a case class.
Reported: 2026-05-10; status since: 2026-06-16. Reporter: Mike Murunov
Magnolia: Monadic[Future].point submits a task to the pool, not a completed value
Fixed · low · Concurrency bug
If point uses Future(value), each lift submits a task to the ExecutionContext. Unlike Future.successful, the Future does not complete at once, and a shut down or saturated pool delays or breaks it.
Reported: 2026-05-10; status since: 2026-06-16. Reporter: Mike Murunov
uPickle: MessagePack reader returns empty containers for lengths of 2^31 and above
Reported · medium · Wrong-result bug
A 32-bit length of 2^31 or more wraps negative, so the array or map reads as empty and the reader ignores the payload that follows. Malformed input passes without any error.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
uPickle: JSON reader accepts invalid hex digits in unicode escapes and yields wrong characters
Reported · low · Soundness bug
The reader accepts escapes such as u00gZ, uXXXX or u0G00, does not reject them, and decodes them to arbitrary code points. Malformed JSON then produces wrong text without an error.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Airframe: BigInt codec truncates negative values below the Long range during pack
Reported · medium · Data-loss bug
If pack receives a negative BigInt below Long.MinValue, the codec checks only the upper bound, so a different number gets stored without an error. The codec handles positive out-of-range values as intended.
Reported: 2026-05-18; status since: 2026-05-18. Reporter: Mike Murunov
DeepGEMM-Ascend: Grouped GEMM computes rows past the end of each group
Reported · high · Wrong-result bug
The last m-block of each group does not truncate, so rows past the group's valid rows get computed. The error affects group sizes that are not multiples of BLOCK_M.
Reported: 2026-09-30; status since: 2026-09-30. Reporter: Maksim Borisov
DeepGEMM-Ascend: The docs call C the accumulator, but the kernel only uses its presence
Reported · medium · Wrong-result bug
The documented C += A @ B does not happen, because the kernel adds the product to whatever D holds. A C that is not the same tensor as D gives a wrong result with no error.
Reported: 2026-09-30; status since: 2026-09-30. Reporter: Maksim Borisov
Iron: The Not implication rule encodes the inverse, so refined Int values can break bounds
Fixed · high · Soundness bug
The Not[C1] implies Not[C2] rule encodes the inverse instead of the contrapositive, so a value that is at most 5 passes as at most 3. The compiler accepts an invalid refinement, and the value breaks the bound at runtime.
Reported: 2026-05-10; status since: 2026-07-06. Reporter: Mike Murunov
Iron: Collection implications such as ForAll to Exists compile though short lists break them
Fixed · high · Soundness bug
Implications such as ForAll ==> Exists and Init ==> Head compile, but empty or one-element lists break the target constraint, so invalid values type-check.
Reported: 2026-05-10; status since: 2026-07-06. Reporter: Mike Murunov
Hello. Thank you for opening this issue and the others. I agree that these implications better be removed since, as you rightly said, expressing them for only non-empty collections while doable would not be very useful in current Scala implicits/Iron state.
Iron: Long range constraints compare through Double and fail above 2^53
Fixed · medium · Soundness bug
Greater, Less and Multiple on Long values compare through Double, so the checks reject or accept values above 2^53 in error. For example, 2^53 + 1 fails Greater of 2^53.
Reported: 2026-05-10; status since: 2026-07-06. Reporter: Mike Murunov
The suggested fix looks good to me. … Happy to review and accept the PR!
Ox: Flow.range with a negative step emits only the first element
Fixed · medium · Wrong-result bug
If the step is negative, the loop continues while t is at most the end value. range(5, 1, -1) stops after 5, but range(1, 5, -1) does not stop until Int overflow.
Reported: 2026-05-10; status since: 2026-06-08. Reporter: Mike Murunov
Ox: AdaptiveRetry stops on a Left result when no failure cost applies
Fixed · medium · Wrong-result bug
If shouldPayFailureCost returns false for a retriable error, afterAttempt stops the retry sequence. The Right case continues for free, so the documented free retry never happens.
Reported: 2026-05-18; status since: 2026-06-02. Reporter: Mike Murunov
MUnit: Failure message suffix throws NullPointerException for exceptions without a message
Fixed · low · Diagnostics bug
munitAppendToFailureMessage calls endsWith on a null exception message. So a test that throws an exception without a message reports munit's NPE, not the original failure.
Reported: 2026-05-10; status since: 2026-08-25. Reporter: Mike Murunov
SymmetryBook: Chapter 3 has a wrong Section 3.8 claim, a mismatched construction orientation and typos
Reported · info · Specification gap
Section 3.8 wrongly says the m-th root of t⁻¹ is a symmetry. Construction 3.6.9 orientation differs from its proof, though its statement holds. Typos follow.
Reported: 2026-10-06; status since: 2026-10-06. Reporter: Mike Murunov
SymmetryBook: Chapter 4 exercise claims an equivalence that fails; two others lack a hypothesis
Reported · info · Specification gap
Exercise 4.6.9 claims a map from pairs of cycles onto bicycles that commute is onto, but a two-point counterexample shows it is not. Exercises 4.2.6 and 4.3.5 need a hypothesis that the text omits.
Reported: 2026-10-06; status since: 2026-10-06. Reporter: Mike Murunov
SymmetryBook: Group exercise: evaluation at refl reverses multiplication, so it is not a homomorphism
Reported · info · Specification gap
The last claim of Exercise 5.6.4 is off by an inverse: with the book's composition order, evaluation at refl reverses multiplication. For non-abelian groups the map is not a homomorphism.
Reported: 2026-10-06; status since: 2026-10-06. Reporter: Mike Murunov
SymmetryBook: Chapter 9 claims need a hypothesis, a converse is false, and inverses are absent
Reported · info · Specification gap
Corollary 9.3.9(5) and Lemma 9.8.3 need a hypothesis, the converse in Remark 9.4.5 is false, and Remark 9.7.1 misses inverses. Lemma 9.6.4 also has a notation problem.
Reported: 2026-10-06; status since: 2026-10-06. Reporter: Mike Murunov
SymmetryBook: Order-3 subgroup count of symmetric groups is only correct up to n=5
Reported · info · Specification gap
The count n(n-1)(n-2)/6 of order-3 subgroups of symmetric groups is correct only for n up to 5. The symmetric group on 6 points has 40 such subgroups, not 20, and the text also has a typo.
Reported: 2026-10-06; status since: 2026-10-06. Reporter: Mike Murunov
SymmetryBook: Lemma on generators: the 'if' direction fails for the empty generator set
Reported · info · Specification gap
For the symmetric group on 2 points and an empty S, the embedding map can be an embedding even though S does not generate the group. Theorems 11.6.8 and 11.6.10 also need a definition and a hypothesis.
Reported: 2026-10-06; status since: 2026-10-06. Reporter: Mike Murunov
gguf-tools: Q4_K dequantization uses the wrong scale for half of each block
Reported · high · Wrong-result bug
The high-nibble weights of each Q4_K block use the scale and min of the earlier sub-block. The code dequantizes half of every Q4_K tensor with wrong values and gives no error.
Reported: 2026-09-30; status since: 2026-09-30. Reporter: Maksim Borisov
gguf-tools: gguf_get_tensor divides by zero on deprecated tensor types 4 and 5
Reported · high · Crash
Types q4_2 and q4_3 have zero items per block, so gguf_get_tensor divides by zero. The issue says this raises SIGFPE on x86 and gives a zero tensor size on arm64.
Reported: 2026-09-30; status since: 2026-09-30. Reporter: Maksim Borisov
Narya: A compiled file crashes with an internal anomaly when file numbers change
Fixed · medium · Crash
A compiled file with a match or let rec fails to load after a file number change, with anomaly Meta.Map.find_opt. The same files check fine from source.
Reported: 2026-10-05; status since: 2026-10-10. Reporter: Mike Murunov
Your diagnosis of this one looks right, and your fix makes sense.
Narya: Same file loads twice through different relative paths and causes a type error
Fixed · low · API-contract bug
Imports with a parent-directory path are not reduced, so one file loads twice under two names. Constants from the two copies differ, so a valid file gets rejected with an unequal-constants error.
Reported: 2026-10-05; status since: 2026-10-07. Reporter: Mike Murunov
Actually I changed my mind: no_symlink is the correct behavior. … The only exception should be that modification time checks should look through symlinks. That, and this, are fixed by #152.
Narya: Field projection from a transported tuple in 3D dimension raises an internal bug
Fixed · medium · Crash
Field projection from a transport in a three-dimensional degeneracy of a record type raises bug E0500 on valid HoTT code. The program is correct, but Narya cannot check it.
Reported: 2026-10-05; status since: 2026-10-10. Reporter: Mike Murunov
Narya: Unannotated definitions store normal-form types, which makes .nyo files huge
Confirmed · medium · Hang
Without a type annotation, the .nyo file stores the synthesized type in normal form, which can grow as 3 to the power of the depth. One definition produced a 280 MB compiled file and slow imports.
Reported: 2026-10-05; status since: 2026-10-05. Reporter: Mike Murunov
Narya: calc reverse-orientation check is slow because it builds a full error text
Fixed · low · Hang
When the forward check of a calc step fails, calc still builds the complete error text for it before it tests the reverse. Large types take 7.3 seconds and 1.7 GB instead of about 2.6 seconds.
Reported: 2026-10-05; status since: 2026-10-10. Reporter: Mike Murunov
That sounds reasonable to me. Want to submit it as a pull request?
Narya: Docs give the wrong option name -no-format and an incomplete `-source-only` option description
Fixed · info · Specification gap
The docs name -no-format, which the tool rejects as an unknown option; the real option is -no-reformat. The description of the `-source-only` option also omits that compiled files are still written.
Reported: 2026-10-05; status since: 2026-10-08. Reporter: Mike Murunov
Narya: Writes of compiled .nyo files are not atomic, so concurrent runs break
Fixed · medium · Concurrency bug
A reader can load a .nyo file while another process still writes it, and an interrupted write leaves a broken file. With the `-source-only` option, the tool still writes compiled files, which can break other runs.
Reported: 2026-10-05; status since: 2026-10-10. Reporter: Mike Murunov
Narya: calc hides an internal bug raised by its forward check
Fixed · low · Diagnostics bug
calc's error handler accepts any diagnostic, even internal bugs, from the forward check. If the reverse check passes, the internal error is never shown to the user.
Reported: 2026-10-05; status since: 2026-10-10. Reporter: Mike Murunov
This should also be done by other "backtracking" constructs like First, so it may be worth pulling out into a helper function.
Gears: Repeat-until-success schedule never stops for an even repetition count
Reported · medium · Hang
The retry counter advances by two, but the stop check expects one. So an even maxRepetitions never stops, and an odd one stops at about half the requested count.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Hedgehog: Uniform Long generator overflows on wide ranges and retries out-of-range values
Reported · low · Wrong-result bug
The formula max - min + 2 overflows for wide ranges, and the offset can give values below min. The retry guard catches these, so the cost is extra retries rather than wrong values.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Hedgehog: MersenneTwister64 hashCode uses only the index, so seeded generators collide
Fixed · info · API-contract bug
hashCode returns the index mti0 and ignores the 312-element state, so generators from a fresh seed share one hash. Hash maps of generators degrade, but equality is still correct.
Reported: 2026-05-10; status since: 2026-09-15. Reporter: Mike Murunov
ScalaSQL: Take followed by a larger drop generates a negative LIMIT that some databases reject
Reported · low · API-contract bug
A drop call with a count greater than the take count produces SQL with a negative LIMIT. PostgreSQL and MySQL reject that SQL, and SQLite reads it as no limit. Collections return an empty result.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
ScalaSQL: Upsert with no update assignments generates an incomplete DO UPDATE SET clause
Confirmed · low · API-contract bug
An onConflictUpdate call with no assignments emits DO UPDATE SET with nothing after it, which is a syntax error. The API accepts the empty call without a compile error.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
My recommendation would be to require at least one parameter, since passing no param is likely an omission error.
ScalaSQL: A None value always declares the JDBC type NULL, which some drivers reject
Confirmed · medium · Crash
The base dialect calls setNull with the NULL type code instead of the column's real type. MS SQL routes around this, but other drivers such as Oracle may reject the statement.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
ScalaSQL: camelToSnake turns XMLParser into xmlparser, so acronym columns are not found
Confirmed · medium · Wrong-result bug
camelToSnake merges consecutive capitals into one word, so the default mapping of XMLParser or HTTPSConnection misses snake_case columns such as xml_parser. The query then fails with column not found.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
+1 to change the behavior only for the next major version bump.
ScalaSQL: WithCte.filter puts the WHERE clause inside the CTE, not the outer query
Confirmed · medium · Wrong-result bug
WithCte.filter swaps its arguments, so the WHERE clause lands in the CTE definition. Plain filters return the same rows, but filters applied after limits or aggregates on the CTE can change the result.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Let's beef up the tests as part of this. The suggested fix makes sense to me.
ScalaSQL: startsWith, endsWith and contains treat % and _ in user values as wildcards
Confirmed · medium · Wrong-result bug
The LIKE pattern concatenates the value and does not escape it. A search for 50% matches any string that starts with 50, and a_b matches axb, so untrusted input widens the match.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Proposed fix sounds good to me. Thanks in advance for submitting a PR!
ScalaSQL: Identifier escape() does not escape a quote or bracket inside a name
Confirmed · medium · Security vulnerability
Table and column names that hold the dialect's delimiter break out of the quoted identifier. If such names come from untrusted data, they can alter the generated SQL.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
PPrint: Truncation counts a CRLF line break as two lines
Reported · low · Wrong-result bug
The truncation counts the carriage-return and newline pair as two breaks, because it resets the flags before the pair check runs. Line counts in truncated output for Windows-style text are off by one per break.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Great catch, thank you! I'd be happy to merge a PR if you have time to submit one.
fansi: overlayAll error message shows the end position where the start should be
Reported · low · Diagnostics bug
If start is not less than end, the exception text repeats the end value instead of start, so the message shows wrong numbers. Only the message text is wrong, and only for invalid calls.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
fansi: Equal multi-style values hash the same but compare unequal, so sets keep duplicates
Reported · medium · API-contract bug
Multiple attribute values compare by reference in equals but by content in hashCode. Two equal values built in separate calls count as two members in a Set, so deduplication fails.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
dotty-cps-async: Async Either.forall returns false for Left instead of the stdlib's true
Fixed · medium · Wrong-result bug
Inside an async block, forall on a Left value returns false, while scala.util.Either returns true. Code that depends on the vacuous result gets the opposite answer without an error.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
dotty-cps-async: Async Try.recover throws MatchError when the partial function does not match
Fixed · medium · Crash
When recover or recoverWith gets an exception the partial function does not handle, the async version throws MatchError and drops the original failure. The original error is lost.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
dotty-cps-async: Async IndexedSeq indexWhere ignores its from argument
Fixed · medium · Wrong-result bug
The IndexedSeq override accepts a from index but always starts the search at 0. A call like indexWhere(p, 3) can return an index before the requested start point.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
dotty-cps-async: Async Array dropWhile returns one element when every element matches
Fixed · medium · Wrong-result bug
When the predicate matches all elements in an async block, dropWhile returns a one-element array instead of an empty one. The slice bound is off by one.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
dotty-cps-async: Async breakable never runs its body, so it skips side effects
Fixed · medium · Wrong-result bug
The async breakable wrapper passes the monadic body to Breaks.breakable as a discarded value, so the body never runs. Effects inside the block do not happen and the call reports success.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
dotty-cps-async: Async lastIndexWhere throws IndexOutOfBounds when end is past the array
Fixed · medium · Crash
Unlike the standard library, the async lastIndexWhere does not clamp end to the array size. If the caller sets an end larger than the array length, the call throws and does not search.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Hearth: NonEmptyMap.map keeps duplicate keys and loses entries when converted to a Map
Fixed · medium · Data-loss bug
When two keys map to the same new key, map keeps both entries, so size reports 2. toListMap keeps only the last value without an error, so the first entry is lost.
Reported: 2026-05-18; status since: 2026-05-30. Reporter: Mike Murunov
wvlet: Newlines inside triple-quoted string literals vanish from generated SQL
Fixed · medium · Wrong-result bug
TripleQuoteString.sqlExpr splits the literal on newlines and rejoins the parts with || without a newline. A multi-line string then becomes one run of text in the query output, with no error.
Reported: 2026-05-10; status since: 2026-08-23. Reporter: Mike Murunov
wvlet: DuckDB schema analysis leaks a JDBC statement on every analysis
Fixed · medium · Resource leak
DuckDBSchemaAnalyzer creates a statement for schema analysis and never closes it, but it closes only the result set. In pooled setups, statements build up with each analysis until the connection closes.
Reported: 2026-05-10; status since: 2026-08-23. Reporter: Mike Murunov
onnx-scala: A model with BOOL, STRING, UINT or FLOAT16 tensors fails to load with MatchError
Reported · medium · Crash
The tensor decoder handles only six ONNX data types and has no default case. A model whose initializers use another type fails to load with a scala.MatchError.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
yaes: `Raise.catching` ignores exceptions that are subclasses of the target type
Fixed · low · API-contract bug
If E is RuntimeException, the catch compares exception classes with ==, so an ArithmeticException escapes as a raw exception. The catch works when the exception class is E itself.
Reported: 2026-05-10; status since: 2026-05-21. Reporter: Mike Murunov
workflows4s: Diagram drops the last step of a three-step interruption path
Fixed · medium · Wrong-result bug
A diagram of a three-step interruption sequence omits the final step, because an off-by-one threshold keeps only the second step. The step still runs at execution time.
Reported: 2026-05-10; status since: 2026-06-08. Reporter: Mike Murunov
workflows4s: Diagrams draw a Loop that has not started as executed
Fixed · low · Wrong-result bug
If a loop has only its unstarted body in its history, RenderUtils.hasStarted returns true. Diagrams then show the loop that has not run with the executed style, and other renderers inherit the wrong answer.
Reported: 2026-05-10; status since: 2026-06-04. Reporter: Mike Murunov
Soundness: Signed add overflow check misses negative overflow, so MinValue plus -1 wraps
Fixed · low · Wrong-result bug
The addS family tests only positive overflow, so Long.MinValue plus -1 wraps to Long.MaxValue with no OverflowError, while unsigned add functions are correct.
Reported: 2026-05-10; status since: 2026-05-13. Reporter: Mike Murunov
Soundness: Short ** Double truncates its result to a Short and gives wrong results
Fixed · medium · Wrong-result bug
The Short ** Double operator casts its Double result to Short, so (200: Short) ** 2.0 returns -25536 instead of 40000 and fractional results lose their fraction.
Reported: 2026-05-10; status since: 2026-05-13. Reporter: Mike Murunov
Soundness: Byte and Short hex, octal and binary output sign-extends to 32 bits
Fixed · medium · Wrong-result bug
A negative Byte or Short converts to hex, octal or binary through an Int. So 0xFF as a Byte prints ffffffff instead of ff, and binary output has 32 digits.
Reported: 2026-05-10; status since: 2026-05-13. Reporter: Mike Murunov
Soundness: Float and Double modulo gives wrong results for a negative divisor
Fixed · medium · Wrong-result bug
The %% operator on Float and Double only corrects negative remainders for positive divisors, so 7.0 %% -3.0 returns 1.0 instead of -2.0, while the integer versions are correct.
Reported: 2026-05-10; status since: 2026-05-13. Reporter: Mike Murunov
Soundness: Levenshtein distance is 0 when the left string is empty
Fixed · low · Wrong-result bug
The edit distance loop never runs for an empty left string. So the distance between an empty string and abc is 0 instead of 3, and the normalized distance reports a perfect match.
Reported: 2026-05-10; status since: 2026-05-17. Reporter: Mike Murunov
Soundness: CSV writer does not quote cells that contain the delimiter or line breaks
Fixed · high · Data-loss bug
Dsv quotes only cells that hold a quote character. A cell with a comma or newline goes out raw, so the output splits into extra columns or rows when read back.
Reported: 2026-05-10; status since: 2026-05-17. Reporter: Mike Murunov
Soundness: Signal numbers are off by two and Hup gives -1
Fixed · medium · Wrong-result bug
The id formula on the Signal enum returns -1 for Hup. For other signals, it is two below the POSIX number, so an OS call that uses it targets the wrong signal or fails.
Reported: 2026-05-10; status since: 2026-05-13. Reporter: Mike Murunov
Soundness: Session store uses an unsynchronized HashMap shared across request threads
Fixed · high · Concurrency bug
Context keeps per-session values in a plain HashMap that concurrent HTTP threads access, so parallel requests can lose updates, throw ConcurrentModificationException or corrupt the map.
Reported: 2026-05-10; status since: 2026-05-13. Reporter: Mike Murunov
Soundness: Long digest drops the top and bottom bytes, so distinct Longs can collide
Fixed · medium · Wrong-result bug
The Long Digestible uses shifts 52 down to 4 instead of 56 down to 0, so it hashes only seven misaligned bytes, and the Double instance inherits the loss.
Reported: 2026-05-10; status since: 2026-05-13. Reporter: Mike Murunov
Soundness: Two manifest attribute objects use the misspelled name Specifacation
Fixed · low · API-contract bug
SpecifacationVendor and SpecifacationVersion contain a typo, while SpecificationTitle is correct, so Scala code cannot refer to them by the expected names. The JAR manifest keys themselves are correct.
Reported: 2026-05-10; status since: 2026-05-13. Reporter: Mike Murunov
Soundness: Topological sort throws NoSuchElementException on cyclic input
Fixed · low · API-contract bug
Dag does not check for cycles when it adds edges. Sort calls get on the search result, so a cyclic graph fails with an unexplained NoSuchElementException, not a cycle error.
Reported: 2026-05-10; status since: 2026-05-13. Reporter: Mike Murunov
Soundness: Semver comparison says equal versions are less and releases sort below prereleases
Fixed · medium · Wrong-result bug
The comparator returns true for 1.0.0 against 1.0.0 and ranks 1.0.0 below 1.0.0-alpha, which breaks sorting and comparisons under the SemVer 2.0 precedence rules.
Reported: 2026-05-10; status since: 2026-05-13. Reporter: Mike Murunov
flink-scala-api: MappedTypeInformation hashCode ignores the mapper and adds needless collisions
Confirmed · info · API-contract bug
Type infos with the same nested type and different mappers always share a hash bucket. Lookups in hash maps degrade for those entries, but results stay correct.
Reported: 2026-05-10; status since: 2026-09-05. Reporter: Mike Murunov
The UnsupportedOperationException for a non-comparable element type ends with the words: Element type that doesn't support. Users see an incomplete message when they use an Option as a key.
Reported: 2026-05-10; status since: 2026-09-05. Reporter: Mike Murunov
flink-scala-api: Coproduct serializer breaks for sealed types with 129 or more subtypes
Confirmed · medium · Crash
Writes and reads of the subtype index use a signed byte, so index 128 and up becomes negative. Deserialization then throws ArrayIndexOutOfBoundsException.
Reported: 2026-05-10; status since: 2026-09-05. Reporter: Mike Murunov
quote4: Qq match in a recursive partial def fails with a kernel error
Reported · medium · Crash
A partial def that matches a Qq pattern and recurses fails at kernel check with 'declaration has metavariables', on code the reporter expects to compile. The report gives no minimal reproducer.
Reported: 2026-01-27; status since: 2026-01-27. Reporter: Vasilii Nesterov
ldbc: Pooled connection validation failures never emit a debug message
Fixed · low · Diagnostics bug
If validation fails or times out for a pooled connection, no debug message appears. The log effect gets created and then discarded, so pool problems leave no trace in the logs.
Reported: 2026-05-10; status since: 2026-05-16. Reporter: Mike Murunov
Oh, I just noticed your offer to PR this — I'm really sorry, I went through the issue but somehow missed your comment before merging the fix.
ldbc: Batch query builder breaks on a lowercase values keyword
Fixed · low · API-contract bug
If a clause uses lowercase values, MySQL rejects the combined statement with a syntax error, because the builder splits on uppercase VALUES only. Uppercase VALUES works.
Reported: 2026-05-10; status since: 2026-05-16. Reporter: Mike Murunov
Oh, I just noticed your offer to PR this — I'm really sorry, I went through the issue but somehow missed your comment before merging the fix. … Thanks a lot for being willing to take it on, and hope you'll jump in on the next one!
ldbc: Statement.execute throws a MatchError for SHOW, DESCRIBE and EXPLAIN
Fixed · medium · Crash
Statement.execute treats only SELECT as a query. If SHOW, DESCRIBE, EXPLAIN or a similar statement returns rows, it throws MatchError and gives no results.
Reported: 2026-05-10; status since: 2026-05-17. Reporter: Mike Murunov
ldbc: Code generation maps MEDIUMBLOB columns to TINYBLOB
Fixed · medium · Wrong-result bug
If a schema contains mediumblob, the parser builds a TINYBLOB type. Generated DDL and Scala mappings then allow only 255 bytes for columns meant to hold up to 16 MB.
Reported: 2026-05-10; status since: 2026-05-20. Reporter: Mike Murunov
I went ahead and opened #730 with the one-line fix before seeing your comment, which was my mistake. … Really appreciate the careful reports.
ldbc: ResultSet.isFirst returns true for every row after the first
Fixed · medium · Wrong-result bug
isFirst checks that the cursor position is greater than zero. If the cursor is on row two or later, it returns true, so code that branches on isFirst misbehaves.
Reported: 2026-05-10; status since: 2026-05-17. Reporter: Mike Murunov
ldbc: Text-protocol string escape misses NUL, newline and other characters
Fixed · medium · Security vulnerability
The text-protocol escape handles only quotes and backslashes, in the wrong order, so NUL, CR, LF and Ctrl-Z stay raw. If an attacker controls a string on that path, it can break out of the literal.
Reported: 2026-05-10; status since: 2026-05-17. Reporter: Mike Murunov
ldbc: Code generation maps DOUBLE and REAL columns to FLOAT and loses precision
Fixed · high · Wrong-result bug
The schema parser has no DOUBLE type, so DOUBLE and REAL columns become FLOAT. Generated Scala code then uses 32-bit Float for 64-bit values, and the precision loss gives no error.
Reported: 2026-05-10; status since: 2026-05-21. Reporter: Mike Murunov
For this one, your analysis is correct and the suggested fix looks great.
ldbc: Chained TLS builder calls drop the earlier setting
Fixed · medium · Wrong-result bug
If a builder chains withTLSParameters with withFallback in either order, it resets the setting applied first without an error. The connection then uses default TLS parameters or the wrong fallback policy.
Reported: 2026-05-10; status since: 2026-05-17. Reporter: Mike Murunov
ldbc: Charset version check reverses its test, so it drops gb18030 on MySQL 8
Fixed · medium · Wrong-result bug
isOkayForVersion reverses the version comparison, so on MySQL 8 it drops gb18030, eucjpms and cp932 and offers them to servers that lack them. Only apps that rely on these charsets see the fault.
Reported: 2026-05-10; status since: 2026-05-17. Reporter: Mike Murunov
For this one, your analysis is correct and the suggested fix looks great. This one is all yours — please go ahead with the PR whenever it suits you.
ldbc: Circuit breaker lets many test requests through in half-open state
Fixed · medium · Concurrency bug
If several concurrent calls enter the half-open state after the reset timeout, they can all run the test action. A success can then close the breaker, even though a concurrent test has failed.
Reported: 2026-05-18; status since: 2026-05-20. Reporter: Mike Murunov
ldbc: Pool resetConnection commits the unfinished transaction of a returned connection
Fixed · high · Data-loss bug
If resetConnection turns autocommit on before it rolls back, MySQL commits the pending transaction at that point. Half-written data from an unhandled error gets persisted instead of discarded.
Reported: 2026-05-18; status since: 2026-05-20. Reporter: Mike Murunov
ldbc: The cp850 charset declares two bytes per character, not one
Fixed · low · Wrong-result bug
The charset table gives cp850 a maximum length of 2 bytes per character, but cp850 is single-byte. Buffer size and the single-byte fallback branch then take the wrong path.
Reported: 2026-05-18; status since: 2026-05-20. Reporter: Mike Murunov
Scalus: NonNegativeInterval hashCode ignores reduced form, so hash sets break
Fixed · low · API-contract bug
equals compares reduced fractions but hashCode uses the raw fields, so 2/4 equals 1/2 yet they have different hashes, and HashSet or HashMap lookups miss equivalent intervals.
Reported: 2026-05-10; status since: 2026-05-11. Reporter: Mike Murunov
Scalus: BLS12-381 point wrappers override equals but not hashCode
Fixed · medium · API-contract bug
G1Element, G2Element and MLResult override equals by curve point but keep the identity hashCode. Equal points get different hashes, so HashSet and HashMap lookups miss them.
Reported: 2026-05-10; status since: 2026-05-11. Reporter: Mike Murunov
geny: Bytes overrides equals but not hashCode, so HashMap lookups miss equal keys
Reported · medium · API-contract bug
Two Bytes objects built from the same array compare equal but have different hash codes. Map keys or set members give lookup misses for values that are equal.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
geny: maxBy and minBy return null or zero for an empty generator, without an error
Reported · medium · Wrong-result bug
Unlike min and max, maxBy and minBy return null for reference types and zero for numeric types on an empty generator. The caller gets a placeholder with no error.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
decisions4s: Markdown decision table rows get one column too few when some rules lack annotations
Confirmed · medium · Wrong-result bug
When at least one rule has an annotation, rules without one produce rows with fewer cells than the header. Downstream tools may corrupt the malformed Markdown table, but the HTML renderer is fine.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
decisions4s: Distinct hit policy treats +0.0 and -0.0 as the same output
Fixed · low · Wrong-result bug
The Distinct hit policy deduplicates outputs with a Set, and Double equality treats positive and negative zero as equal. A table with +0.0 and -0.0 outputs returns a result instead of reporting a conflict.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
I made a fix for this in … The approach I went for is to use a TC instance to make the logic explicit
decisions4s: The diagnostics printer throws at construction for a table with no input fields
Reported · low · Crash
A constant decision table with zero input columns makes DiagnosticsPrinter throw on max of an empty collection during construction. The crash happens before the printer outputs any diagnostic.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
etl4s: Lineage JSON export is invalid when names contain quotes or backslashes
Confirmed · medium · API-contract bug
The JSON helper wraps strings in quotes without escaping them. A name or description with a double quote or backslash, or an input with a newline, makes the lineage JSON unparseable.
Reported: 2026-05-10; status since: 2026-06-11. Reporter: Mike Murunov
BUT... this is definitely a bug ... happy to take a pull 🙇
etl4s: Lineage chain and combine return identical lineages despite different doc comments
Confirmed · low · Specification gap
chain and combine have identical bodies, but their doc comments describe sequential and parallel use. The maintainer says the shared accumulating design is intended, and the docs confuse users.
Reported: 2026-05-10; status since: 2026-06-11. Reporter: Mike Murunov
Mea culpa - this is rather confusing and has confused others before … will bounce some API ideas w/ you here before the next release
DRAT-trim: lrat-check reports VERIFIED for a proof that proves nothing
Reported · critical · Soundness bug
On a satisfiable formula, the checker accepts the one-line proof 2 0 0 and prints VERIFIED with exit code 0, a regression from an earlier commit. A second proof also segfaults the checker.
Reported: 2026-09-29; status since: 2026-09-29. Reporter: Mike Murunov
record4s: Circe encoder emits record fields in hash order, not declaration order
Reported · low · API-contract bug
If a record has more than four fields, the circe encoder builds a hash Map, so JSON fields come out in hash order, not declaration order. The order can also differ between Scala versions.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
snapshot4s: The snapshot representation drops the ESC character and hides ANSI differences
Reported · low · Wrong-result bug
If InlineRepr.printChar maps the ESC character to an empty string, strings with colour codes snapshot as bracketed plain text. Two strings that differ only by ESC compare equal.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
strymonas: Code generator throws divide-by-zero when the known divisor is zero
Reported · low · Crash
If a known divisor is zero at staging time, int_div and long_div fold the division at once and the macro crashes with ArithmeticException. int_mod already has a guard for a related case.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
strymonas: Cooked.collect returns the stream elements in reverse order
Reported · high · Wrong-result bug
If collect runs on a stream, it builds the list with each new element at the front. The elements come back in reverse, so every result has the wrong order, and one reverse call fixes it.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Unwrapped: PutPartiallyApplied equals throws ClassCastException for values of other types
Reported · low · Crash
If code compares this object with another type or with null, equals throws and does not return false, because it casts without checking canEqual. Sibling classes do the canEqual check.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Pillars: RabbitMQ config ignores automaticTopologyRecovery, so a false value has no effect
Reported · medium · Wrong-result bug
The config conversion does not copy automaticTopologyRecovery to the client config. The client still recovers topology when the user disables the setting.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Pillars: Flag not-found message runs the flag name into the words 'not found'
Reported · info · Diagnostics bug
The code builds the FlagNotFound message without a space, so a 404 for flag my-feature says 'Flag my-featurenot found'. The message is wrong, but the status code is correct.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Pillars: Redaction strategy encodes as OptIn while its decoder expects optin
Reported · low · API-contract bug
The encoder writes OptIn in mixed case, while every other value is lowercase and the decoder lowercases input. The decode error for an unknown value also names an SSL mode.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Pillars: The HTTP client declares body size histograms but never writes them
Reported · low · Wrong-result bug
The client metrics middleware declares request and response body size histograms but never records them. Dashboards show empty panels, and nothing warns at startup.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Pillars: The config encoder throws MatchError on a custom SSL context
Reported · low · Crash
The SSL encoder covers three cases, so a custom SSL context fails with scala.MatchError, for example in a config dump. The decoder also cannot read it back.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov
Pillars: Doobie config drops the system schema, app schema and debug settings
Reported · medium · Wrong-result bug
toHikariConfig ignores systemSchema, appSchema and debug, so queries use the default schema and debug logging stays off. Users who set these values get different behaviour without any warning.
Reported: 2026-05-10; status since: 2026-05-10. Reporter: Mike Murunov