{"generated":"2026-10-21T06:58:00+00:00","since":"2026-01-01","totals":{"found":312,"sent":201,"queue":111,"waiting":62,"confirmed":14,"fixing":3,"fixed":122,"cards":186,"projects":102,"fixed_projects":41},"projects":[{"name":"Linux kernel (WireGuard)","stars":252934,"logo":null,"url":"https://github.com/torvalds/linux","downloads":[],"found":3,"fixed":0,"sent":2,"queue":1},{"name":"Playwright","stars":98190,"logo":"assets/logos/playwright.png","url":"https://github.com/microsoft/playwright","downloads":[{"registry":"npm","package":"playwright","count":445668745,"period":"30 days","url":"https://www.npmjs.com/package/playwright","basis":"the npm package names the repository microsoft/playwright"}],"found":2,"fixed":2,"sent":0,"queue":0},{"name":"Redis","stars":77026,"logo":"assets/logos/redis.png","url":"https://github.com/redis/redis","downloads":[{"registry":"Homebrew","package":"redis","count":23763,"period":"30 days","url":"https://formulae.brew.sh/formula/redis","basis":"the Homebrew package names the repository redis/redis"}],"found":1,"fixed":0,"sent":0,"queue":1},{"name":"Cypress","stars":51020,"logo":"assets/logos/cypress.png","url":"https://github.com/cypress-io/cypress","downloads":[{"registry":"npm","package":"cypress","count":24598885,"period":"30 days","url":"https://www.npmjs.com/package/cypress","basis":"the npm package names the repository cypress-io/cypress"}],"found":3,"fixed":0,"sent":3,"queue":0},{"name":"Bruno","stars":47783,"logo":null,"url":"https://github.com/usebruno/bruno","downloads":[{"registry":"npm","package":"@usebruno/cli","count":1103451,"period":"30 days","url":"https://www.npmjs.com/package/@usebruno/cli","basis":"the npm package names the repository usebruno/bruno"}],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"curl","stars":43193,"logo":"assets/logos/curl.png","url":"https://github.com/curl/curl","downloads":[{"registry":"Homebrew","package":"curl","count":75286,"period":"30 days","url":"https://formulae.brew.sh/formula/curl","basis":"the Homebrew package names the repository curl/curl"}],"found":11,"fixed":0,"sent":0,"queue":11},{"name":"stb_image","stars":34867,"logo":null,"url":"https://github.com/nothings/stb","downloads":[],"found":10,"fixed":0,"sent":0,"queue":10},{"name":"Selenium","stars":34564,"logo":"assets/logos/selenium.png","url":"https://github.com/SeleniumHQ/selenium","downloads":[{"registry":"PyPI","package":"selenium","count":28029613,"period":"30 days","url":"https://pypi.org/project/selenium/","basis":"set by hand: the Python binding of Selenium"},{"registry":"npm","package":"selenium-webdriver","count":7888291,"period":"30 days","url":"https://www.npmjs.com/package/selenium-webdriver","basis":"the npm package names the repository seleniumhq/selenium"}],"found":2,"fixed":2,"sent":0,"queue":0},{"name":"k6","stars":31993,"logo":null,"url":"https://github.com/grafana/k6","downloads":[{"registry":"Homebrew","package":"k6","count":6213,"period":"30 days","url":"https://formulae.brew.sh/formula/k6","basis":"the Homebrew package names the repository grafana/k6"}],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"nginx","stars":31918,"logo":"assets/logos/nginx.png","url":"https://github.com/nginx/nginx","downloads":[{"registry":"Homebrew","package":"nginx","count":7305,"period":"30 days","url":"https://formulae.brew.sh/formula/nginx","basis":"the Homebrew package names the repository nginx/nginx"}],"found":3,"fixed":0,"sent":0,"queue":3},{"name":"OpenSSL","stars":31000,"logo":"assets/logos/openssl-punycode.png","url":"https://github.com/openssl/openssl","downloads":[{"registry":"Homebrew","package":"openssl@3","count":437486,"period":"30 days","url":"https://formulae.brew.sh/formula/openssl@3","basis":"the Homebrew package names the repository openssl/openssl"}],"found":1,"fixed":0,"sent":1,"queue":0},{"name":"Locust","stars":28227,"logo":null,"url":"https://github.com/locustio/locust","downloads":[{"registry":"PyPI","package":"locust","count":9365918,"period":"30 days","url":"https://pypi.org/project/locust/","basis":"the PyPI package names the repository locustio/locust"}],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"zstd","stars":28070,"logo":"assets/logos/zstd.png","url":"https://github.com/facebook/zstd","downloads":[{"registry":"Homebrew","package":"zstd","count":178024,"period":"30 days","url":"https://formulae.brew.sh/formula/zstd","basis":"the Homebrew package names the repository facebook/zstd"}],"found":2,"fixed":0,"sent":0,"queue":2},{"name":"libuv","stars":27274,"logo":"assets/logos/libuv.png","url":"https://github.com/libuv/libuv","downloads":[{"registry":"Homebrew","package":"libuv","count":104289,"period":"30 days","url":"https://formulae.brew.sh/formula/libuv","basis":"the Homebrew package names the repository libuv/libuv"}],"found":2,"fixed":0,"sent":0,"queue":2},{"name":"Appium","stars":22117,"logo":"assets/logos/appium.png","url":"https://github.com/appium/appium","downloads":[{"registry":"npm","package":"appium","count":5433804,"period":"30 days","url":"https://www.npmjs.com/package/appium","basis":"the npm package names the repository appium/appium"},{"registry":"Homebrew","package":"appium","count":533,"period":"30 days","url":"https://formulae.brew.sh/formula/appium","basis":"the Homebrew package names the repository appium/appium"}],"found":2,"fixed":2,"sent":0,"queue":0},{"name":"Ajv","stars":14863,"logo":"assets/logos/ajv.png","url":"https://github.com/ajv-validator/ajv","downloads":[{"registry":"npm","package":"ajv","count":1617934954,"period":"30 days","url":"https://www.npmjs.com/package/ajv","basis":"the npm package names the repository ajv-validator/ajv"}],"found":1,"fixed":0,"sent":1,"queue":0},{"name":"Pillow","stars":13912,"logo":"assets/logos/pillow.png","url":"https://github.com/python-pillow/Pillow","downloads":[{"registry":"PyPI","package":"pillow","count":436470920,"period":"30 days","url":"https://pypi.org/project/pillow/","basis":"the PyPI package names the repository python-pillow/pillow"},{"registry":"Homebrew","package":"pillow","count":7813,"period":"30 days","url":"https://formulae.brew.sh/formula/pillow","basis":"the Homebrew package names the repository python-pillow/pillow"}],"found":5,"fixed":0,"sent":0,"queue":5},{"name":"LZ4","stars":12163,"logo":"assets/logos/lz4.png","url":"https://github.com/lz4/lz4","downloads":[{"registry":"Homebrew","package":"lz4","count":159225,"period":"30 days","url":"https://formulae.brew.sh/formula/lz4","basis":"the Homebrew package names the repository lz4/lz4"}],"found":3,"fixed":0,"sent":3,"queue":0},{"name":"Robot Framework","stars":11955,"logo":null,"url":"https://github.com/robotframework/robotframework","downloads":[{"registry":"PyPI","package":"robotframework","count":3882078,"period":"30 days","url":"https://pypi.org/project/robotframework/","basis":"the PyPI package names the repository robotframework/robotframework"}],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"F Prime","stars":11832,"logo":"assets/logos/f-f-prime.png","url":"https://github.com/nasa/fprime","downloads":[{"registry":"PyPI","package":"fprime","count":44,"period":"30 days","url":"https://pypi.org/project/fprime/","basis":"the PyPI package names the repository nasa/fprime"}],"found":4,"fixed":1,"sent":0,"queue":3},{"name":"Karate","stars":8992,"logo":"assets/logos/karate.svg","url":"https://github.com/karatelabs/karate","downloads":[],"found":3,"fixed":3,"sent":0,"queue":0},{"name":"WireMock","stars":7404,"logo":"assets/logos/wiremock.svg","url":"https://github.com/wiremock/wiremock","downloads":[],"found":2,"fixed":1,"sent":1,"queue":0},{"name":"zlib","stars":7159,"logo":"assets/logos/zlib.png","url":"https://github.com/madler/zlib","downloads":[{"registry":"Homebrew","package":"zlib","count":8434,"period":"30 days","url":"https://formulae.brew.sh/formula/zlib","basis":"the Homebrew package names the repository madler/zlib"}],"found":4,"fixed":0,"sent":3,"queue":1},{"name":"goja","stars":7152,"logo":null,"url":"https://github.com/dop251/goja","downloads":[],"found":2,"fixed":2,"sent":0,"queue":0},{"name":"REST Assured","stars":7145,"logo":"assets/logos/rest-assured.png","url":"https://github.com/rest-assured/rest-assured","downloads":[],"found":3,"fixed":3,"sent":0,"queue":0},{"name":"Mbed TLS","stars":7009,"logo":"assets/logos/mbed-tls.png","url":"https://github.com/Mbed-TLS/mbedtls","downloads":[{"registry":"Homebrew","package":"mbedtls","count":2742,"period":"30 days","url":"https://formulae.brew.sh/formula/mbedtls","basis":"the Homebrew package names the repository mbed-tls/mbedtls"}],"found":1,"fixed":0,"sent":0,"queue":1},{"name":"Gatling","stars":6955,"logo":"assets/logos/gatling.png","url":"https://github.com/gatling/gatling","downloads":[],"found":3,"fixed":3,"sent":0,"queue":0},{"name":"Scala 3","stars":6324,"logo":"assets/logos/scala-3.png","url":"https://github.com/scala/scala3","downloads":[{"registry":"Homebrew","package":"scala","count":724,"period":"30 days","url":"https://formulae.brew.sh/formula/scala","basis":"the Homebrew package names the repository scala/scala3"}],"found":8,"fixed":6,"sent":2,"queue":0},{"name":"Nanopb","stars":5590,"logo":"assets/logos/nanopb.png","url":"https://github.com/nanopb/nanopb","downloads":[{"registry":"PyPI","package":"nanopb","count":419572,"period":"30 days","url":"https://pypi.org/project/nanopb/","basis":"the PyPI package names the repository nanopb/nanopb"},{"registry":"Homebrew","package":"nanopb","count":103,"period":"30 days","url":"https://formulae.brew.sh/formula/nanopb","basis":"the Homebrew package names the repository nanopb/nanopb"}],"found":5,"fixed":0,"sent":5,"queue":0},{"name":"nghttp2","stars":5068,"logo":"assets/logos/nghttp2-hpack.png","url":"https://github.com/nghttp2/nghttp2","downloads":[{"registry":"Homebrew","package":"nghttp2","count":2179,"period":"30 days","url":"https://formulae.brew.sh/formula/nghttp2","basis":"the Homebrew package names the repository nghttp2/nghttp2"}],"found":2,"fixed":0,"sent":0,"queue":2},{"name":"libjpeg-turbo","stars":4453,"logo":"assets/logos/libjpeg-turbo.png","url":"https://github.com/libjpeg-turbo/libjpeg-turbo","downloads":[{"registry":"Homebrew","package":"jpeg-turbo","count":80886,"period":"30 days","url":"https://formulae.brew.sh/formula/jpeg-turbo","basis":"the Homebrew package names the repository libjpeg-turbo/libjpeg-turbo"}],"found":3,"fixed":0,"sent":0,"queue":3},{"name":"7-Zip","stars":4212,"logo":null,"url":"https://github.com/ip7z/7zip","downloads":[{"registry":"Homebrew","package":"sevenzip","count":17615,"period":"30 days","url":"https://formulae.brew.sh/formula/sevenzip","basis":"the Homebrew package names the repository ip7z/7zip"}],"found":2,"fixed":0,"sent":0,"queue":2},{"name":"Verilator","stars":4022,"logo":"assets/logos/verilator.png","url":"https://github.com/verilator/verilator","downloads":[{"registry":"Homebrew","package":"verilator","count":866,"period":"30 days","url":"https://formulae.brew.sh/formula/verilator","basis":"the Homebrew package names the repository verilator/verilator"}],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"Icarus Verilog","stars":3687,"logo":"assets/logos/icarus-verilog.png","url":"https://github.com/steveicarus/iverilog","downloads":[{"registry":"Homebrew","package":"icarus-verilog","count":668,"period":"30 days","url":"https://formulae.brew.sh/formula/icarus-verilog","basis":"the Homebrew package names the repository steveicarus/iverilog"}],"found":4,"fixed":3,"sent":1,"queue":0},{"name":"protobuf-c","stars":3002,"logo":"assets/logos/protobuf-c.png","url":"https://github.com/protobuf-c/protobuf-c","downloads":[{"registry":"Homebrew","package":"protobuf-c","count":3514,"period":"30 days","url":"https://formulae.brew.sh/formula/protobuf-c","basis":"the Homebrew package names the repository protobuf-c/protobuf-c"}],"found":2,"fixed":0,"sent":0,"queue":2},{"name":"Circe","stars":2541,"logo":"assets/logos/circe.png","url":"https://github.com/circe/circe","downloads":[],"found":3,"fixed":0,"sent":3,"queue":0},{"name":"fs2","stars":2454,"logo":"assets/logos/fs2.png","url":"https://github.com/typelevel/fs2","downloads":[],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"FLAC","stars":2449,"logo":"assets/logos/flac.png","url":"https://github.com/xiph/flac","downloads":[{"registry":"Homebrew","package":"flac","count":14167,"period":"30 days","url":"https://formulae.brew.sh/formula/flac","basis":"set by hand: homepage xiph.org/flac"}],"found":5,"fixed":0,"sent":0,"queue":5},{"name":"libavif","stars":2201,"logo":"assets/logos/libavif.png","url":"https://github.com/AOMediaCodec/libavif","downloads":[{"registry":"Homebrew","package":"libavif","count":19591,"period":"30 days","url":"https://formulae.brew.sh/formula/libavif","basis":"the Homebrew package names the repository aomediacodec/libavif"}],"found":3,"fixed":0,"sent":0,"queue":3},{"name":"c-ares","stars":2196,"logo":"assets/logos/c-ares.png","url":"https://github.com/c-ares/c-ares","downloads":[{"registry":"Homebrew","package":"c-ares","count":65015,"period":"30 days","url":"https://formulae.brew.sh/formula/c-ares","basis":"the Homebrew package names the repository c-ares/c-ares"}],"found":5,"fixed":0,"sent":0,"queue":5},{"name":"picohttpparser","stars":2108,"logo":"assets/logos/picohttpparser.png","url":"https://github.com/h2o/picohttpparser","downloads":[],"found":1,"fixed":0,"sent":0,"queue":1},{"name":"LoRaMac-node","stars":1997,"logo":"assets/logos/loramac-node.png","url":"https://github.com/Lora-net/LoRaMac-node","downloads":[],"found":1,"fixed":0,"sent":0,"queue":1},{"name":"Monocle","stars":1700,"logo":"assets/logos/monocle.png","url":"https://github.com/optics-dev/Monocle","downloads":[],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"liblzma (xz)","stars":1689,"logo":"assets/logos/liblzma-xz.png","url":"https://github.com/tukaani-project/xz","downloads":[{"registry":"Homebrew","package":"xz","count":349944,"period":"30 days","url":"https://formulae.brew.sh/formula/xz","basis":"the Homebrew package names the repository tukaani-project/xz"}],"found":1,"fixed":0,"sent":1,"queue":0},{"name":"skunk","stars":1665,"logo":"assets/logos/skunk.png","url":"https://github.com/typelevel/skunk","downloads":[],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"tiny-regex-c","stars":1509,"logo":null,"url":"https://github.com/kokke/tiny-regex-c","downloads":[],"found":2,"fixed":0,"sent":0,"queue":2},{"name":"sttp","stars":1506,"logo":"assets/logos/sttp.png","url":"https://github.com/softwaremill/sttp","downloads":[],"found":3,"fixed":3,"sent":0,"queue":0},{"name":"Tapir","stars":1475,"logo":"assets/logos/tapir.png","url":"https://github.com/softwaremill/tapir","downloads":[],"found":3,"fixed":3,"sent":0,"queue":0},{"name":"libsrtp","stars":1402,"logo":"assets/logos/libsrtp.png","url":"https://github.com/cisco/libsrtp","downloads":[{"registry":"Homebrew","package":"srtp","count":3292,"period":"30 days","url":"https://formulae.brew.sh/formula/srtp","basis":"the Homebrew package names the repository cisco/libsrtp"}],"found":1,"fixed":0,"sent":0,"queue":1},{"name":"Caliban","stars":993,"logo":"assets/logos/caliban.png","url":"https://github.com/ghostdogpr/caliban","downloads":[],"found":11,"fixed":11,"sent":0,"queue":0},{"name":"libfixmath","stars":889,"logo":null,"url":"https://github.com/PetteriAimonen/libfixmath","downloads":[],"found":8,"fixed":0,"sent":0,"queue":8},{"name":"quicklens","stars":851,"logo":"assets/logos/quicklens.png","url":"https://github.com/softwaremill/quicklens","downloads":[],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"Laminar","stars":838,"logo":null,"url":"https://github.com/raquo/Laminar","downloads":[],"found":2,"fixed":2,"sent":0,"queue":0},{"name":"Kyo","stars":821,"logo":"assets/logos/kyo.png","url":"https://github.com/getkyo/kyo","downloads":[],"found":3,"fixed":3,"sent":0,"queue":0},{"name":"Magnolia","stars":800,"logo":"assets/logos/magnolia.png","url":"https://github.com/softwaremill/magnolia","downloads":[],"found":2,"fixed":2,"sent":0,"queue":0},{"name":"uPickle","stars":768,"logo":"assets/logos/upickle.png","url":"https://github.com/com-lihaoyi/upickle","downloads":[],"found":2,"fixed":0,"sent":2,"queue":0},{"name":"Airframe","stars":665,"logo":"assets/logos/airframe.png","url":"https://github.com/wvlet/airframe","downloads":[],"found":1,"fixed":0,"sent":1,"queue":0},{"name":"TinyCBOR","stars":640,"logo":"assets/logos/tinycbor.png","url":"https://github.com/intel/tinycbor","downloads":[{"registry":"Homebrew","package":"tinycbor","count":25,"period":"30 days","url":"https://formulae.brew.sh/formula/tinycbor","basis":"the Homebrew package names the repository intel/tinycbor"}],"found":2,"fixed":0,"sent":0,"queue":2},{"name":"DeepGEMM-Ascend","stars":600,"logo":"assets/logos/deepgemm-ascend.png","url":"https://github.com/deepseek-ai/DeepGEMM-Ascend","downloads":[],"found":2,"fixed":0,"sent":2,"queue":0},{"name":"Iron","stars":561,"logo":"assets/logos/iron.png","url":"https://github.com/Iltotore/iron","downloads":[],"found":3,"fixed":3,"sent":0,"queue":0},{"name":"Ox","stars":527,"logo":"assets/logos/ox.png","url":"https://github.com/softwaremill/ox","downloads":[],"found":2,"fixed":2,"sent":0,"queue":0},{"name":"tinycrypt","stars":522,"logo":"assets/logos/tinycrypt.png","url":"https://github.com/intel/tinycrypt","downloads":[],"found":1,"fixed":0,"sent":0,"queue":1},{"name":"umm_malloc","stars":492,"logo":null,"url":"https://github.com/rhempel/umm_malloc","downloads":[],"found":1,"fixed":0,"sent":0,"queue":1},{"name":"MUnit","stars":472,"logo":"assets/logos/munit.png","url":"https://github.com/scalameta/munit","downloads":[],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"SymmetryBook","stars":453,"logo":"assets/logos/symmetrybook.png","url":"https://github.com/UniMath/SymmetryBook","downloads":[],"found":7,"fixed":0,"sent":7,"queue":0},{"name":"CMP","stars":370,"logo":"assets/logos/cmp.png","url":"https://github.com/camgunz/cmp","downloads":[],"found":3,"fixed":0,"sent":0,"queue":3},{"name":"gguf-tools","stars":370,"logo":null,"url":"https://github.com/antirez/gguf-tools","downloads":[],"found":3,"fixed":0,"sent":2,"queue":1},{"name":"uzlib","stars":354,"logo":null,"url":"https://github.com/pfalcon/uzlib","downloads":[],"found":2,"fixed":0,"sent":0,"queue":2},{"name":"libfdt","stars":332,"logo":null,"url":"https://github.com/dgibson/dtc","downloads":[{"registry":"Homebrew","package":"dtc","count":4509,"period":"30 days","url":"https://formulae.brew.sh/formula/dtc","basis":"set by hand: libfdt is a part of dtc, the device tree compiler"}],"found":5,"fixed":0,"sent":0,"queue":5},{"name":"Narya","stars":310,"logo":"assets/logos/narya.png","url":"https://github.com/gwaithimirdain/narya","downloads":[],"found":8,"fixed":7,"sent":1,"queue":0},{"name":"Gears","stars":305,"logo":"assets/logos/gears.png","url":"https://github.com/lampepfl/gears","downloads":[],"found":1,"fixed":0,"sent":1,"queue":0},{"name":"Hedgehog","stars":268,"logo":"assets/logos/hedgehog.png","url":"https://github.com/hedgehogqa/scala-hedgehog","downloads":[],"found":2,"fixed":1,"sent":1,"queue":0},{"name":"ScalaSQL","stars":260,"logo":null,"url":"https://github.com/com-lihaoyi/scalasql","downloads":[],"found":7,"fixed":0,"sent":7,"queue":0},{"name":"PPrint","stars":248,"logo":"assets/logos/pprint.png","url":"https://github.com/com-lihaoyi/PPrint","downloads":[],"found":1,"fixed":0,"sent":1,"queue":0},{"name":"borer","stars":242,"logo":"assets/logos/borer.png","url":"https://github.com/sirthias/borer","downloads":[],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"fansi","stars":237,"logo":null,"url":"https://github.com/com-lihaoyi/fansi","downloads":[],"found":2,"fixed":0,"sent":2,"queue":0},{"name":"dotty-cps-async","stars":194,"logo":"assets/logos/dotty-cps-async.png","url":"https://github.com/dotty-cps-async/dotty-cps-async","downloads":[],"found":7,"fixed":7,"sent":0,"queue":0},{"name":"Hearth","stars":164,"logo":"assets/logos/hearth.png","url":"https://github.com/kubuszok/hearth","downloads":[],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"wvlet","stars":158,"logo":"assets/logos/wvlet.png","url":"https://github.com/wvlet/wvlet","downloads":[{"registry":"PyPI","package":"wvlet","count":26,"period":"30 days","url":"https://pypi.org/project/wvlet/","basis":"the PyPI package names the repository wvlet/wvlet"}],"found":3,"fixed":3,"sent":0,"queue":0},{"name":"CWPack","stars":154,"logo":null,"url":"https://github.com/clwi/CWPack","downloads":[],"found":3,"fixed":0,"sent":0,"queue":3},{"name":"onnx-scala","stars":151,"logo":null,"url":"https://github.com/EmergentOrder/onnx-scala","downloads":[],"found":2,"fixed":0,"sent":2,"queue":0},{"name":"yaes","stars":140,"logo":"assets/logos/yaes.png","url":"https://github.com/yaes-io/yaes","downloads":[],"found":1,"fixed":1,"sent":0,"queue":0},{"name":"workflows4s","stars":131,"logo":"assets/logos/workflows4s.png","url":"https://github.com/business4s/workflows4s","downloads":[],"found":2,"fixed":2,"sent":0,"queue":0},{"name":"Soundness","stars":114,"logo":null,"url":"https://github.com/propensive/soundness","downloads":[],"found":16,"fixed":16,"sent":0,"queue":0},{"name":"flink-scala-api","stars":113,"logo":"assets/logos/flink-scala-api.png","url":"https://github.com/flink-extended/flink-scala-api","downloads":[],"found":3,"fixed":0,"sent":3,"queue":0},{"name":"quote4","stars":111,"logo":"assets/logos/quote4.png","url":"https://github.com/leanprover-community/quote4","downloads":[],"found":1,"fixed":0,"sent":1,"queue":0},{"name":"ldbc","stars":110,"logo":null,"url":"https://github.com/takapi327/ldbc","downloads":[],"found":13,"fixed":13,"sent":0,"queue":0},{"name":"Scalus","stars":105,"logo":"assets/logos/scalus.png","url":"https://github.com/scalus3/scalus","downloads":[{"registry":"npm","package":"scalus","count":44884,"period":"30 days","url":"https://www.npmjs.com/package/scalus","basis":"the npm package names the repository scalus3/scalus"}],"found":2,"fixed":2,"sent":0,"queue":0},{"name":"geny","stars":98,"logo":null,"url":"https://github.com/com-lihaoyi/geny","downloads":[],"found":2,"fixed":0,"sent":2,"queue":0},{"name":"decisions4s","stars":85,"logo":"assets/logos/decisions4s.png","url":"https://github.com/business4s/decisions4s","downloads":[],"found":3,"fixed":1,"sent":2,"queue":0},{"name":"etl4s","stars":79,"logo":"assets/logos/etl4s.png","url":"https://github.com/mattlianje/etl4s","downloads":[],"found":2,"fixed":0,"sent":2,"queue":0},{"name":"DRAT-trim","stars":72,"logo":null,"url":"https://github.com/marijnheule/drat-trim","downloads":[],"found":1,"fixed":0,"sent":1,"queue":0},{"name":"record4s","stars":68,"logo":"assets/logos/record4s.svg","url":"https://github.com/tarao/record4s","downloads":[],"found":1,"fixed":0,"sent":1,"queue":0},{"name":"snapshot4s","stars":67,"logo":"assets/logos/snapshot4s.png","url":"https://github.com/siriusxm/snapshot4s","downloads":[],"found":1,"fixed":0,"sent":1,"queue":0},{"name":"strymonas","stars":56,"logo":"assets/logos/strymonas.png","url":"https://github.com/strymonas/strymonas-scala","downloads":[],"found":2,"fixed":0,"sent":2,"queue":0},{"name":"Unwrapped","stars":40,"logo":"assets/logos/unwrapped.png","url":"https://github.com/xebia-functional/Unwrapped","downloads":[],"found":2,"fixed":0,"sent":2,"queue":0},{"name":"Pillars","stars":33,"logo":"assets/logos/pillars.png","url":"https://github.com/FunktionalIO/pillars","downloads":[],"found":7,"fixed":0,"sent":7,"queue":0},{"name":"Aerodrome MetaDEX03","stars":20,"logo":"assets/logos/aerodrome-metadex03.png","url":"https://github.com/dromos-labs/metadex-public","downloads":[],"found":8,"fixed":0,"sent":0,"queue":8},{"name":"Fluid DEX v2","stars":6,"logo":"assets/logos/fluid-dex-v2.png","url":"https://github.com/sherlock-audit/2026-01-fluid-dex-v2","downloads":[],"found":5,"fixed":0,"sent":0,"queue":5},{"name":"dnsmasq","stars":null,"logo":"assets/logos/dnsmasq.png","url":"https://thekelleys.org.uk/git/dnsmasq","downloads":[{"registry":"Homebrew","package":"dnsmasq","count":1823,"period":"30 days","url":"https://formulae.brew.sh/formula/dnsmasq","basis":"set by hand: homepage thekelleys.org.uk/dnsmasq"}],"found":2,"fixed":0,"sent":0,"queue":2},{"name":"musl libc","stars":null,"logo":null,"url":"https://git.musl-libc.org/git/musl","downloads":[],"found":2,"fixed":0,"sent":0,"queue":2},{"name":"BoringSSL","stars":null,"logo":"assets/logos/boringssl-cbs.png","url":"https://boringssl.googlesource.com/boringssl","downloads":[],"found":1,"fixed":0,"sent":0,"queue":1}],"unnamed_projects":0,"bugs":[{"id":"gh:microsoft/playwright#41891","headline":"getByRole name filter misses meter and progress elements labelled by a label tag","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-07-22","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Playwright","url":"https://github.com/microsoft/playwright","logo":"assets/logos/playwright.png","stars":98190,"language":"TypeScript","downloads":[{"registry":"npm","package":"playwright","count":445668745,"period":"30 days","url":"https://www.npmjs.com/package/playwright","basis":"the npm package names the repository microsoft/playwright"}]},"ticket":"https://github.com/microsoft/playwright/issues/41891","fix":"https://github.com/microsoft/playwright/pull/41911","reply":null,"reporter":"Mike Murunov"},{"id":"gh:microsoft/playwright#41899","headline":"Search input with a broken list attribute gets combobox role, not searchbox","summary":"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.","class":"Wrong-result bug","severity":"low","status":"fixed","status_since":"2026-07-22","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Playwright","url":"https://github.com/microsoft/playwright","logo":"assets/logos/playwright.png","stars":98190,"language":"TypeScript","downloads":[{"registry":"npm","package":"playwright","count":445668745,"period":"30 days","url":"https://www.npmjs.com/package/playwright","basis":"the npm package names the repository microsoft/playwright"}]},"ticket":"https://github.com/microsoft/playwright/issues/41899","fix":"https://github.com/microsoft/playwright/pull/41913","reply":null,"reporter":"Mike Murunov"},{"id":"gh:cypress-io/cypress#34303","headline":"cy.contains with a g or y regex flag misses matching elements","summary":"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.","class":"Wrong-result bug","severity":"high","status":"reported","status_since":"2026-07-21","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Cypress","url":"https://github.com/cypress-io/cypress","logo":"assets/logos/cypress.png","stars":51020,"language":"TypeScript","downloads":[{"registry":"npm","package":"cypress","count":24598885,"period":"30 days","url":"https://www.npmjs.com/package/cypress","basis":"the npm package names the repository cypress-io/cypress"}]},"ticket":"https://github.com/cypress-io/cypress/issues/34303","fix":"https://github.com/cypress-io/cypress/pull/34357","reply":null,"reporter":"Mike Murunov"},{"id":"gh:cypress-io/cypress#34304","headline":"selectFile on a label fails when its for id contains dots, spaces or colons","summary":"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.","class":"API-contract bug","severity":"low","status":"reported","status_since":"2026-07-21","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Cypress","url":"https://github.com/cypress-io/cypress","logo":"assets/logos/cypress.png","stars":51020,"language":"TypeScript","downloads":[{"registry":"npm","package":"cypress","count":24598885,"period":"30 days","url":"https://www.npmjs.com/package/cypress","basis":"the npm package names the repository cypress-io/cypress"}]},"ticket":"https://github.com/cypress-io/cypress/issues/34304","fix":"https://github.com/cypress-io/cypress/pull/34356","reply":null,"reporter":"Mike Murunov"},{"id":"gh:cypress-io/cypress#34305","headline":"cy.contains cannot find submit buttons by a partial word of their value","summary":"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.","class":"API-contract bug","severity":"low","status":"reported","status_since":"2026-07-21","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Cypress","url":"https://github.com/cypress-io/cypress","logo":"assets/logos/cypress.png","stars":51020,"language":"TypeScript","downloads":[{"registry":"npm","package":"cypress","count":24598885,"period":"30 days","url":"https://www.npmjs.com/package/cypress","basis":"the npm package names the repository cypress-io/cypress"}]},"ticket":"https://github.com/cypress-io/cypress/issues/34305","fix":"https://github.com/cypress-io/cypress/pull/34358","reply":null,"reporter":"Mike Murunov"},{"id":"gh:usebruno/bruno#8695","headline":"NTLM auth block without a domain line makes a valid file fail to parse","summary":"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.","class":"Crash","severity":"medium","status":"fixed","status_since":"2026-08-26","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Bruno","url":"https://github.com/usebruno/bruno","logo":null,"stars":47783,"language":"JavaScript","downloads":[{"registry":"npm","package":"@usebruno/cli","count":1103451,"period":"30 days","url":"https://www.npmjs.com/package/@usebruno/cli","basis":"the npm package names the repository usebruno/bruno"}]},"ticket":"https://github.com/usebruno/bruno/issues/8695","fix":"https://github.com/usebruno/bruno/pull/8707","reply":{"author":"sbalagan22","at":"2026-07-21","url":"https://github.com/usebruno/bruno/issues/8695#issuecomment-5037664281","role":"contributor","text":"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."},"reporter":"Mike Murunov"},{"id":"gh:SeleniumHQ/selenium#17805","headline":"CSS escape of a non-ASCII first digit picks the wrong ASCII code point","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-08-06","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Selenium","url":"https://github.com/SeleniumHQ/selenium","logo":"assets/logos/selenium.png","stars":34564,"language":"Java","downloads":[{"registry":"PyPI","package":"selenium","count":28029613,"period":"30 days","url":"https://pypi.org/project/selenium/","basis":"set by hand: the Python binding of Selenium"},{"registry":"npm","package":"selenium-webdriver","count":7888291,"period":"30 days","url":"https://www.npmjs.com/package/selenium-webdriver","basis":"the npm package names the repository seleniumhq/selenium"}]},"ticket":"https://github.com/SeleniumHQ/selenium/issues/17805","fix":"https://github.com/SeleniumHQ/selenium/pull/17815","reply":null,"reporter":"Mike Murunov"},{"id":"gh:SeleniumHQ/selenium#17807","headline":"By.name with % throws a format exception or builds a wrong selector","summary":"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.","class":"API-contract bug","severity":"medium","status":"fixed","status_since":"2026-08-07","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Selenium","url":"https://github.com/SeleniumHQ/selenium","logo":"assets/logos/selenium.png","stars":34564,"language":"Java","downloads":[{"registry":"PyPI","package":"selenium","count":28029613,"period":"30 days","url":"https://pypi.org/project/selenium/","basis":"set by hand: the Python binding of Selenium"},{"registry":"npm","package":"selenium-webdriver","count":7888291,"period":"30 days","url":"https://www.npmjs.com/package/selenium-webdriver","basis":"the npm package names the repository seleniumhq/selenium"}]},"ticket":"https://github.com/SeleniumHQ/selenium/issues/17807","fix":"https://github.com/SeleniumHQ/selenium/pull/17883","reply":null,"reporter":"Mike Murunov"},{"id":"gh:grafana/k6#6181","headline":"Gauge max reports 0 when every sample is negative","summary":"A gauge max starts at 0 and is never guarded for the first sample, so an all-negative series reports max 0 in summaries and JSON exports.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-07-27","found":"2026-07-21","reported":"2026-07-21","project":{"name":"k6","url":"https://github.com/grafana/k6","logo":null,"stars":31993,"language":"Go","downloads":[{"registry":"Homebrew","package":"k6","count":6213,"period":"30 days","url":"https://formulae.brew.sh/formula/k6","basis":"the Homebrew package names the repository grafana/k6"}]},"ticket":"https://github.com/grafana/k6/issues/6181","fix":"https://github.com/grafana/k6/pull/6195","reply":{"author":"mstoykov","at":"2026-07-21","url":"https://github.com/grafana/k6/issues/6181#issuecomment-5031568182","role":"contributor","text":"This does seem like a real issue, but also a very unlikely to be hit one."},"reporter":"Mike Murunov"},{"id":"gh:locustio/locust#3472","headline":"Async requests logged as None lower all reported response-time percentiles","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-07-21","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Locust","url":"https://github.com/locustio/locust","logo":null,"stars":28227,"language":"Python","downloads":[{"registry":"PyPI","package":"locust","count":9365918,"period":"30 days","url":"https://pypi.org/project/locust/","basis":"the PyPI package names the repository locustio/locust"}]},"ticket":"https://github.com/locustio/locust/issues/3472","fix":"https://github.com/locustio/locust/pull/3473","reply":{"author":"cyberw","at":"2026-07-21","url":"https://github.com/locustio/locust/issues/3472#issuecomment-5032428244","role":"maintainer","text":"Sounds like a proper bug!"},"reporter":"Mike Murunov"},{"id":"gh:appium/appium#22523","headline":"Virtual sensor routes use /sensors, not the spec's /sensor path","summary":"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.","class":"API-contract bug","severity":"medium","status":"fixed","status_since":"2026-07-21","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Appium","url":"https://github.com/appium/appium","logo":"assets/logos/appium.png","stars":22117,"language":"TypeScript","downloads":[{"registry":"npm","package":"appium","count":5433804,"period":"30 days","url":"https://www.npmjs.com/package/appium","basis":"the npm package names the repository appium/appium"},{"registry":"Homebrew","package":"appium","count":533,"period":"30 days","url":"https://formulae.brew.sh/formula/appium","basis":"the Homebrew package names the repository appium/appium"}]},"ticket":"https://github.com/appium/appium/issues/22523","fix":"https://github.com/appium/appium/pull/22525","reply":{"author":"eglitise","at":"2026-07-21","url":"https://github.com/appium/appium/issues/22523#issuecomment-5031960984","role":"maintainer","text":"Thanks, this was indeed a typo. The fix will be included in the next release."},"reporter":"Mike Murunov"},{"id":"gh:appium/appium#22526","headline":"Timeout errors return HTTP 408 instead of the spec's 500, so clients may retry","summary":"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.","class":"API-contract bug","severity":"medium","status":"fixed","status_since":"2026-08-31","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Appium","url":"https://github.com/appium/appium","logo":"assets/logos/appium.png","stars":22117,"language":"TypeScript","downloads":[{"registry":"npm","package":"appium","count":5433804,"period":"30 days","url":"https://www.npmjs.com/package/appium","basis":"the npm package names the repository appium/appium"},{"registry":"Homebrew","package":"appium","count":533,"period":"30 days","url":"https://formulae.brew.sh/formula/appium","basis":"the Homebrew package names the repository appium/appium"}]},"ticket":"https://github.com/appium/appium/issues/22526","fix":"https://github.com/appium/appium/pull/22548","reply":{"author":"eglitise","at":"2026-07-21","url":"https://github.com/appium/appium/issues/22526#issuecomment-5033640908","role":"maintainer","text":"Thanks, the issue seems to be valid."},"reporter":"Mike Murunov"},{"id":"gh:ajv-validator/ajv#2651","headline":"JTD parser rejects valid JSON unicode escapes inside enum string values","summary":"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.","class":"API-contract bug","severity":"low","status":"reported","status_since":"2026-07-21","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Ajv","url":"https://github.com/ajv-validator/ajv","logo":"assets/logos/ajv.png","stars":14863,"language":"TypeScript","downloads":[{"registry":"npm","package":"ajv","count":1617934954,"period":"30 days","url":"https://www.npmjs.com/package/ajv","basis":"the npm package names the repository ajv-validator/ajv"}]},"ticket":"https://github.com/ajv-validator/ajv/issues/2651","fix":"https://github.com/ajv-validator/ajv/pull/2657","reply":null,"reporter":"Mike Murunov"},{"id":"gh:robotframework/robotframework#5723","headline":"SectionHeader.from_params raises KeyError for the invalid header type","summary":"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.","class":"Crash","severity":"low","status":"fixed","status_since":"2026-07-23","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Robot Framework","url":"https://github.com/robotframework/robotframework","logo":null,"stars":11955,"language":"Python","downloads":[{"registry":"PyPI","package":"robotframework","count":3882078,"period":"30 days","url":"https://pypi.org/project/robotframework/","basis":"the PyPI package names the repository robotframework/robotframework"}]},"ticket":"https://github.com/robotframework/robotframework/issues/5723","fix":"https://github.com/robotframework/robotframework/pull/5724","reply":{"author":"pekkaklarck","at":"2026-07-23","url":"https://github.com/robotframework/robotframework/issues/5723#issuecomment-5059483849","role":"maintainer","text":"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."},"reporter":"Mike Murunov"},{"id":"gh:nasa/fprime#6110","headline":"Cancelled FPY sequence still runs its queued directive","summary":"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.","class":"Concurrency bug","severity":"medium","status":"fixed","status_since":"2026-10-16","found":"2026-10-01","reported":"2026-10-01","project":{"name":"F Prime","url":"https://github.com/nasa/fprime","logo":"assets/logos/f-prime.png","stars":11832,"language":"C++","downloads":[{"registry":"PyPI","package":"fprime","count":44,"period":"30 days","url":"https://pypi.org/project/fprime/","basis":"the PyPI package names the repository nasa/fprime"}]},"ticket":"https://github.com/nasa/fprime/issues/6110","fix":"https://github.com/nasa/fprime/pull/6115","reply":null,"reporter":"Maksim Borisov"},{"id":"gh:karatelabs/karate#2974","headline":"Equality match treats distinct integers above 2^53 as equal","summary":"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.","class":"Soundness bug","severity":"medium","status":"fixed","status_since":"2026-08-14","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Karate","url":"https://github.com/karatelabs/karate","logo":"assets/logos/karate.svg","stars":8992,"language":"Java","downloads":[]},"ticket":"https://github.com/karatelabs/karate/issues/2974","fix":null,"reply":{"author":"ptrthomas","at":"2026-08-14","url":"https://github.com/karatelabs/karate/issues/2974#issuecomment-5289476558","role":"maintainer","text":"v2.1.2 released"},"reporter":"Mike Murunov"},{"id":"gh:karatelabs/karate#2975","headline":"contains only deep ignores duplicate counts, so unequal multisets pass","summary":"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.","class":"Soundness bug","severity":"medium","status":"fixed","status_since":"2026-08-14","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Karate","url":"https://github.com/karatelabs/karate","logo":"assets/logos/karate.svg","stars":8992,"language":"Java","downloads":[]},"ticket":"https://github.com/karatelabs/karate/issues/2975","fix":null,"reply":{"author":"ptrthomas","at":"2026-08-14","url":"https://github.com/karatelabs/karate/issues/2975#issuecomment-5289476282","role":"maintainer","text":"v2.1.2 released"},"reporter":"Mike Murunov"},{"id":"gh:karatelabs/karate#2976","headline":"Negated partial schema macro passes on a list whose element contains the schema","summary":"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.","class":"Soundness bug","severity":"medium","status":"fixed","status_since":"2026-08-14","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Karate","url":"https://github.com/karatelabs/karate","logo":"assets/logos/karate.svg","stars":8992,"language":"Java","downloads":[]},"ticket":"https://github.com/karatelabs/karate/issues/2976","fix":null,"reply":{"author":"ptrthomas","at":"2026-08-14","url":"https://github.com/karatelabs/karate/issues/2976#issuecomment-5289476075","role":"maintainer","text":"v2.1.2 released"},"reporter":"Mike Murunov"},{"id":"gh:wiremock/wiremock#3509","headline":"Multipart matcher with name and filename ignores the name constraint","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-09-28","found":"2026-07-21","reported":"2026-07-21","project":{"name":"WireMock","url":"https://github.com/wiremock/wiremock","logo":"assets/logos/wiremock.svg","stars":7404,"language":"Java","downloads":[]},"ticket":"https://github.com/wiremock/wiremock/issues/3509","fix":"https://github.com/wiremock/wiremock/pull/3514","reply":null,"reporter":"Mike Murunov"},{"id":"gh:wiremock/wiremock#3510","headline":"XPath boolean expressions always match, so stubs fire on false conditions","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"reported","status_since":"2026-07-21","found":"2026-07-21","reported":"2026-07-21","project":{"name":"WireMock","url":"https://github.com/wiremock/wiremock","logo":"assets/logos/wiremock.svg","stars":7404,"language":"Java","downloads":[]},"ticket":"https://github.com/wiremock/wiremock/issues/3510","fix":"https://github.com/wiremock/wiremock/pull/3522","reply":null,"reporter":"Mike Murunov"},{"id":"gh:dop251/goja#717","headline":"TypedArray toSorted on a subarray sorts from the start of the buffer","summary":"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.","class":"Wrong-result bug","severity":"high","status":"fixed","status_since":"2026-07-21","found":"2026-07-21","reported":"2026-07-21","project":{"name":"goja","url":"https://github.com/dop251/goja","logo":null,"stars":7152,"language":"Go","downloads":[]},"ticket":"https://github.com/dop251/goja/issues/717","fix":"https://github.com/dop251/goja/commit/c65cf2f023c829e725595752db4c896bd5cf4f7f","reply":null,"reporter":"Mike Murunov"},{"id":"gh:dop251/goja#718","headline":"String split with an empty separator splits emoji into one piece instead of two","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-07-22","found":"2026-07-21","reported":"2026-07-21","project":{"name":"goja","url":"https://github.com/dop251/goja","logo":null,"stars":7152,"language":"Go","downloads":[]},"ticket":"https://github.com/dop251/goja/issues/718","fix":"https://github.com/dop251/goja/commit/0768e0998ac0767f499ca81af04aa29c22cad55c","reply":null,"reporter":"Mike Murunov"},{"id":"gh:rest-assured/rest-assured#1874","headline":"Large negative decimal JSON numbers become -Infinity when read as float","summary":"With default settings JsonPath picks float for negative non-integers beyond Float.MAX_VALUE, so -1e40 returns -Infinity while +1e40 stays a correct double.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-10-07","found":"2026-07-21","reported":"2026-07-21","project":{"name":"REST Assured","url":"https://github.com/rest-assured/rest-assured","logo":"assets/logos/rest-assured.png","stars":7145,"language":"Java","downloads":[]},"ticket":"https://github.com/rest-assured/rest-assured/issues/1874","fix":"https://github.com/rest-assured/rest-assured/pull/1877","reply":null,"reporter":"Mike Murunov"},{"id":"gh:rest-assured/rest-assured#1875","headline":"array.properties returns null for all elements when the first lacks properties","summary":"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.","class":"Wrong-result bug","severity":"high","status":"fixed","status_since":"2026-10-07","found":"2026-07-21","reported":"2026-07-21","project":{"name":"REST Assured","url":"https://github.com/rest-assured/rest-assured","logo":"assets/logos/rest-assured.png","stars":7145,"language":"Java","downloads":[]},"ticket":"https://github.com/rest-assured/rest-assured/issues/1875","fix":"https://github.com/rest-assured/rest-assured/pull/1878","reply":null,"reporter":"Mike Murunov"},{"id":"gh:rest-assured/rest-assured#1876","headline":"XmlPath negative index on a hyphenated element name fails with an unclear error","summary":"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.","class":"API-contract bug","severity":"low","status":"fixed","status_since":"2026-10-08","found":"2026-07-21","reported":"2026-07-21","project":{"name":"REST Assured","url":"https://github.com/rest-assured/rest-assured","logo":"assets/logos/rest-assured.png","stars":7145,"language":"Java","downloads":[]},"ticket":"https://github.com/rest-assured/rest-assured/issues/1876","fix":"https://github.com/rest-assured/rest-assured/pull/1882","reply":null,"reporter":"Mike Murunov"},{"id":"gh:gatling/gatling#4701","headline":"randomUuid produces UUIDs marked as version 0 instead of version 4","summary":"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.","class":"Wrong-result bug","severity":"low","status":"fixed","status_since":"2026-07-21","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Gatling","url":"https://github.com/gatling/gatling","logo":"assets/logos/gatling.png","stars":6955,"language":"Scala","downloads":[]},"ticket":"https://github.com/gatling/gatling/issues/4701","fix":"https://github.com/gatling/gatling/commit/2633ee413da78bdf27e5c0a4110b69363820e453","reply":{"author":"slandelle","at":"2026-07-21","url":"https://github.com/gatling/gatling/issues/4701#issuecomment-5031493999","role":"maintainer","text":"Thanks for reporting!"},"reporter":"Mike Murunov"},{"id":"gh:gatling/gatling#4702","headline":"substring(pattern).find(n) never finds a match when n is 1 or more","summary":"substring(pattern).find(n) with n of 1 or more never finds the match, while find(0) and findAll work. Checks that capture a later occurrence fail.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-07-21","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Gatling","url":"https://github.com/gatling/gatling","logo":"assets/logos/gatling.png","stars":6955,"language":"Scala","downloads":[]},"ticket":"https://github.com/gatling/gatling/issues/4702","fix":"https://github.com/gatling/gatling/commit/350c7f108bd0df16ec2b9f57a7d7eb17f2696884","reply":{"author":"slandelle","at":"2026-07-21","url":"https://github.com/gatling/gatling/issues/4702#issuecomment-5033269792","role":"maintainer","text":"Thanks again!"},"reporter":"Mike Murunov"},{"id":"gh:gatling/gatling#4703","headline":"Out-of-range negative EL index throws an uncaught exception for arrays and java.util.List","summary":"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.","class":"Crash","severity":"low","status":"fixed","status_since":"2026-07-21","found":"2026-07-21","reported":"2026-07-21","project":{"name":"Gatling","url":"https://github.com/gatling/gatling","logo":"assets/logos/gatling.png","stars":6955,"language":"Scala","downloads":[]},"ticket":"https://github.com/gatling/gatling/issues/4703","fix":"https://github.com/gatling/gatling/commit/2dda88c1ec7f8baef37f35daf207310062824ca8","reply":{"author":"slandelle","at":"2026-07-21","url":"https://github.com/gatling/gatling/issues/4703#issuecomment-5033425104","role":"maintainer","text":"Thanks!"},"reporter":"Mike Murunov"},{"id":"gh:scala/scala3#25244","headline":"Compiler crashes with MatchError on an erroneous quoted pattern with an import","summary":"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.","class":"Crash","severity":"low","status":"confirmed","status_since":"2026-03-29","found":"2026-02-11","reported":"2026-02-11","project":{"name":"Scala 3","url":"https://github.com/scala/scala3","logo":"assets/logos/scala-3.png","stars":6324,"language":"Scala","downloads":[{"registry":"Homebrew","package":"scala","count":724,"period":"30 days","url":"https://formulae.brew.sh/formula/scala","basis":"the Homebrew package names the repository scala/scala3"}]},"ticket":"https://github.com/scala/scala3/issues/25244","fix":null,"reply":{"author":"mbovel","at":"2026-03-29","url":"https://github.com/scala/scala3/issues/25244#issuecomment-4150527060","role":"maintainer","text":"Thanks a lot for the minimization and the explanations @haskiindahouse!"},"reporter":"Mike Murunov"},{"id":"gh:scala/scala3#25246","headline":"Compiler aborts with AssertionError on a malformed context bound with a quote","summary":"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.","class":"Crash","severity":"low","status":"reported","status_since":"2026-02-11","found":"2026-02-11","reported":"2026-02-11","project":{"name":"Scala 3","url":"https://github.com/scala/scala3","logo":"assets/logos/scala-3.png","stars":6324,"language":"Scala","downloads":[{"registry":"Homebrew","package":"scala","count":724,"period":"30 days","url":"https://formulae.brew.sh/formula/scala","basis":"the Homebrew package names the repository scala/scala3"}]},"ticket":"https://github.com/scala/scala3/issues/25246","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:scala/scala3#25248","headline":"Parser crashes when a line comment hides then in a for generator inside new","summary":"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.","class":"Crash","severity":"low","status":"fixed","status_since":"2026-02-17","found":"2026-02-11","reported":"2026-02-11","project":{"name":"Scala 3","url":"https://github.com/scala/scala3","logo":"assets/logos/scala-3.png","stars":6324,"language":"Scala","downloads":[{"registry":"Homebrew","package":"scala","count":724,"period":"30 days","url":"https://formulae.brew.sh/formula/scala","basis":"the Homebrew package names the repository scala/scala3"}]},"ticket":"https://github.com/scala/scala3/issues/25248","fix":"https://github.com/scala/scala3/pull/25253","reply":null,"reporter":"Mike Murunov"},{"id":"gh:scala/scala3#25723","headline":"Compiler asserts on a duplicate enum name with simple and parametric cases","summary":"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.","class":"Crash","severity":"low","status":"fixed","status_since":"2026-06-01","found":"2026-04-07","reported":"2026-04-07","project":{"name":"Scala 3","url":"https://github.com/scala/scala3","logo":"assets/logos/scala-3.png","stars":6324,"language":"Scala","downloads":[{"registry":"Homebrew","package":"scala","count":724,"period":"30 days","url":"https://formulae.brew.sh/formula/scala","basis":"the Homebrew package names the repository scala/scala3"}]},"ticket":"https://github.com/scala/scala3/issues/25723","fix":"https://github.com/scala/scala3/pull/26205","reply":null,"reporter":"Mike Murunov"},{"id":"gh:scala/scala3#25724","headline":"Nested macro splices at depth 230 overflow the stack during inlining","summary":"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.","class":"Crash","severity":"medium","status":"fixed","status_since":"2026-08-13","found":"2026-04-08","reported":"2026-04-08","project":{"name":"Scala 3","url":"https://github.com/scala/scala3","logo":"assets/logos/scala-3.png","stars":6324,"language":"Scala","downloads":[{"registry":"Homebrew","package":"scala","count":724,"period":"30 days","url":"https://formulae.brew.sh/formula/scala","basis":"the Homebrew package names the repository scala/scala3"}]},"ticket":"https://github.com/scala/scala3/issues/25724","fix":"https://github.com/scala/scala3/pull/25937","reply":{"author":"SolalPirelli","at":"2026-06-01","url":"https://github.com/scala/scala3/issues/25724#issuecomment-4592303754","role":"maintainer","text":"Thanks for the report. Fixing in #25937."},"reporter":"Mike Murunov"},{"id":"gh:scala/scala3#25725","headline":"Erased context parameter before a normal one produces bytecode the JVM rejects","summary":"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.","class":"Crash","severity":"medium","status":"fixed","status_since":"2026-04-10","found":"2026-04-08","reported":"2026-04-08","project":{"name":"Scala 3","url":"https://github.com/scala/scala3","logo":"assets/logos/scala-3.png","stars":6324,"language":"Scala","downloads":[{"registry":"Homebrew","package":"scala","count":724,"period":"30 days","url":"https://formulae.brew.sh/formula/scala","basis":"the Homebrew package names the repository scala/scala3"}]},"ticket":"https://github.com/scala/scala3/issues/25725","fix":"https://github.com/scala/scala3/pull/25751","reply":{"author":"tanishiking","at":"2026-04-09","url":"https://github.com/scala/scala3/issues/25725#issuecomment-4215314924","role":"maintainer","text":"However, for erased parameters coming from a context-function(?), the erased parameter incorrectly remains in the tree after erasure."},"reporter":"Mike Murunov"},{"id":"gh:scala/scala3#25726","headline":"Compiler asserts in erasure when an override uses an erased `using` clause","summary":"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.","class":"Crash","severity":"medium","status":"fixed","status_since":"2026-05-14","found":"2026-04-08","reported":"2026-04-08","project":{"name":"Scala 3","url":"https://github.com/scala/scala3","logo":"assets/logos/scala-3.png","stars":6324,"language":"Scala","downloads":[{"registry":"Homebrew","package":"scala","count":724,"period":"30 days","url":"https://formulae.brew.sh/formula/scala","basis":"the Homebrew package names the repository scala/scala3"}]},"ticket":"https://github.com/scala/scala3/issues/25726","fix":"https://github.com/scala/scala3/pull/25923","reply":null,"reporter":"Mike Murunov"},{"id":"gh:scala/scala3#26037","headline":"Compiler asserts on exports of members from a cyclic opaque type companion","summary":"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.","class":"Crash","severity":"low","status":"fixed","status_since":"2026-06-11","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Scala 3","url":"https://github.com/scala/scala3","logo":"assets/logos/scala-3.png","stars":6324,"language":"Scala","downloads":[{"registry":"Homebrew","package":"scala","count":724,"period":"30 days","url":"https://formulae.brew.sh/formula/scala","basis":"the Homebrew package names the repository scala/scala3"}]},"ticket":"https://github.com/scala/scala3/issues/26037","fix":"https://github.com/scala/scala3/pull/26220","reply":null,"reporter":"Mike Murunov"},{"id":"gh:verilator/verilator#8353","headline":"Verilator rejects an undeclared data input of bufif and nmos gates with a plain enable","summary":"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.","class":"API-contract bug","severity":"low","status":"fixed","status_since":"2026-09-14","found":"2026-09-14","reported":"2026-09-14","project":{"name":"Verilator","url":"https://github.com/verilator/verilator","logo":"assets/logos/verilator.png","stars":4022,"language":"SystemVerilog","downloads":[{"registry":"Homebrew","package":"verilator","count":866,"period":"30 days","url":"https://formulae.brew.sh/formula/verilator","basis":"the Homebrew package names the repository verilator/verilator"}]},"ticket":"https://github.com/verilator/verilator/issues/8353","fix":"https://github.com/verilator/verilator/pull/8354","reply":{"author":"wsnyder","at":"2026-09-14","url":"https://github.com/verilator/verilator/issues/8353#issuecomment-5670412323","role":"maintainer","text":"Please consider creating a PR to fix this, including editing e.g. t_gate_implicit.v to make a test case, thanks."},"reporter":"Mike Murunov"},{"id":"gh:steveicarus/iverilog#1384","headline":"Compiler aborts with an assertion when a generate block declares a class","summary":"If a valid class sits inside a generate block, iverilog fails an internal assertion and aborts. The same class at module scope compiles fine.","class":"Crash","severity":"medium","status":"fixed","status_since":"2026-06-21","found":"2026-06-14","reported":"2026-06-14","project":{"name":"Icarus Verilog","url":"https://github.com/steveicarus/iverilog","logo":"assets/logos/icarus-verilog.png","stars":3687,"language":"C++","downloads":[{"registry":"Homebrew","package":"icarus-verilog","count":668,"period":"30 days","url":"https://formulae.brew.sh/formula/icarus-verilog","basis":"the Homebrew package names the repository steveicarus/iverilog"}]},"ticket":"https://github.com/steveicarus/iverilog/issues/1384","fix":"https://github.com/steveicarus/iverilog/pull/1395","reply":{"author":"larsclausen","at":"2026-06-21","url":"https://github.com/steveicarus/iverilog/issues/1384#issuecomment-4760446426","role":"maintainer","text":"Thanks for reporting this, fixed with #1395"},"reporter":"Mike Murunov"},{"id":"gh:steveicarus/iverilog#1385","headline":"Compiler segfaults when it cannot resolve an enum value in its generate block","summary":"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.","class":"Crash","severity":"medium","status":"fixed","status_since":"2026-06-20","found":"2026-06-14","reported":"2026-06-14","project":{"name":"Icarus Verilog","url":"https://github.com/steveicarus/iverilog","logo":"assets/logos/icarus-verilog.png","stars":3687,"language":"C++","downloads":[{"registry":"Homebrew","package":"icarus-verilog","count":668,"period":"30 days","url":"https://formulae.brew.sh/formula/icarus-verilog","basis":"the Homebrew package names the repository steveicarus/iverilog"}]},"ticket":"https://github.com/steveicarus/iverilog/issues/1385","fix":"https://github.com/steveicarus/iverilog/pull/1386","reply":{"author":"larsclausen","at":"2026-06-14","url":"https://github.com/steveicarus/iverilog/issues/1385#issuecomment-4703019449","role":"maintainer","text":"Thanks for the report. Will be fixed with #1386"},"reporter":"Mike Murunov"},{"id":"gh:steveicarus/iverilog#1511","headline":"buf, not or tran gate with different output widths makes iverilog abort","summary":"If a buf, not or tran gate has outputs of different widths, an internal assertion fails and iverilog aborts without a normal width error.","class":"Crash","severity":"medium","status":"reported","status_since":"2026-09-14","found":"2026-09-14","reported":"2026-09-14","project":{"name":"Icarus Verilog","url":"https://github.com/steveicarus/iverilog","logo":"assets/logos/icarus-verilog.png","stars":3687,"language":"C++","downloads":[{"registry":"Homebrew","package":"icarus-verilog","count":668,"period":"30 days","url":"https://formulae.brew.sh/formula/icarus-verilog","basis":"the Homebrew package names the repository steveicarus/iverilog"}]},"ticket":"https://github.com/steveicarus/iverilog/issues/1511","fix":"https://github.com/steveicarus/iverilog/pull/1515","reply":null,"reporter":"Mike Murunov"},{"id":"gh:steveicarus/iverilog#1513","headline":"Simulator overflows its stack on a stable loop through a real or strength net","summary":"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.","class":"Crash","severity":"medium","status":"fixed","status_since":"2026-09-18","found":"2026-09-14","reported":"2026-09-14","project":{"name":"Icarus Verilog","url":"https://github.com/steveicarus/iverilog","logo":"assets/logos/icarus-verilog.png","stars":3687,"language":"C++","downloads":[{"registry":"Homebrew","package":"icarus-verilog","count":668,"period":"30 days","url":"https://formulae.brew.sh/formula/icarus-verilog","basis":"the Homebrew package names the repository steveicarus/iverilog"}]},"ticket":"https://github.com/steveicarus/iverilog/issues/1513","fix":"https://github.com/steveicarus/iverilog/pull/1514","reply":{"author":"larsclausen","at":"2026-09-18","url":"https://github.com/steveicarus/iverilog/issues/1513#issuecomment-5732999384","role":"maintainer","text":"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."},"reporter":"Mike Murunov"},{"id":"gh:circe/circe#2457","headline":"BiggerDecimal integral check accepts '-', '+' and letters, and crashes on empty string","summary":"integralIsValidLong returns true for '-', '+' and 'a', and throws StringIndexOutOfBoundsException on an empty string. Its documented precondition is not checked.","class":"Wrong-result bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Circe","url":"https://github.com/circe/circe","logo":"assets/logos/circe.png","stars":2541,"language":"Scala","downloads":[]},"ticket":"https://github.com/circe/circe/issues/2457","fix":"https://github.com/circe/circe/pull/2487","reply":null,"reporter":"Mike Murunov"},{"id":"gh:circe/circe#2458","headline":"Printer with empty indent puts rbraceLeft and rbraceRight in swapped positions","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Circe","url":"https://github.com/circe/circe","logo":"assets/logos/circe.png","stars":2541,"language":"Scala","downloads":[]},"ticket":"https://github.com/circe/circe/issues/2458","fix":"https://github.com/circe/circe/pull/2488","reply":null,"reporter":"Mike Murunov"},{"id":"gh:circe/circe#2459","headline":"Printer indents text after a closing brace at the child nesting depth","summary":"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.","class":"Wrong-result bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Circe","url":"https://github.com/circe/circe","logo":"assets/logos/circe.png","stars":2541,"language":"Scala","downloads":[]},"ticket":"https://github.com/circe/circe/issues/2459","fix":"https://github.com/circe/circe/pull/2489","reply":null,"reporter":"Mike Murunov"},{"id":"gh:typelevel/fs2#3725","headline":"linesLimited misses over-long lines that arrive together with their newline","summary":"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.","class":"API-contract bug","severity":"high","status":"fixed","status_since":"2026-09-02","found":"2026-05-10","reported":"2026-05-10","project":{"name":"fs2","url":"https://github.com/typelevel/fs2","logo":"assets/logos/fs2.png","stars":2454,"language":"Scala","downloads":[]},"ticket":"https://github.com/typelevel/fs2/issues/3725","fix":"https://github.com/typelevel/fs2/pull/3756","reply":null,"reporter":"Mike Murunov"},{"id":"gh:optics-dev/Monocle#1582","headline":"stringToLong accepts negative zero and breaks the prism round-trip law","summary":"The string prism parses '-0' to 0 and reverseGet returns '0', so the round-trip law fails for '-0', '-00' and '-01'.","class":"API-contract bug","severity":"low","status":"fixed","status_since":"2026-05-14","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Monocle","url":"https://github.com/optics-dev/Monocle","logo":"assets/logos/monocle.png","stars":1700,"language":"Scala","downloads":[]},"ticket":"https://github.com/optics-dev/Monocle/issues/1582","fix":"https://github.com/optics-dev/Monocle/pull/1585","reply":{"author":"julien-truffaut","at":"2026-05-11","url":"https://github.com/optics-dev/Monocle/issues/1582#issuecomment-4419013010","role":"maintainer","text":"Thanks for the bug report @haskiindahouse. Feel free to send a PR :)"},"reporter":"Mike Murunov"},{"id":"gh:typelevel/skunk#1295","headline":"timestamptz precision error message misspells the type name as timestampz","summary":"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.","class":"Diagnostics bug","severity":"info","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"skunk","url":"https://github.com/typelevel/skunk","logo":"assets/logos/skunk.png","stars":1665,"language":"Scala","downloads":[]},"ticket":"https://github.com/typelevel/skunk/issues/1295","fix":"https://github.com/typelevel/skunk/pull/1306","reply":{"author":"mpilquist","at":"2026-05-12","url":"https://github.com/typelevel/skunk/issues/1295#issuecomment-4429258624","role":"maintainer","text":"Good spot, PR welcome, thanks!"},"reporter":"Mike Murunov"},{"id":"gh:softwaremill/sttp#2880","headline":"ByteBuffer bodies are wrong or fail for direct buffers and for consumed buffers","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-26","found":"2026-05-10","reported":"2026-05-10","project":{"name":"sttp","url":"https://github.com/softwaremill/sttp","logo":"assets/logos/sttp.png","stars":1506,"language":"Scala","downloads":[]},"ticket":"https://github.com/softwaremill/sttp/issues/2880","fix":"https://github.com/softwaremill/sttp/pull/2892","reply":{"author":"adamw","at":"2026-05-26","url":"https://github.com/softwaremill/sttp/issues/2880#issuecomment-4545143947","role":"maintainer","text":"@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"},"reporter":"Mike Murunov"},{"id":"gh:softwaremill/sttp#2881","headline":"toCurl drops multipart file names, content types and per-part headers","summary":"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.","class":"Diagnostics bug","severity":"low","status":"fixed","status_since":"2026-05-28","found":"2026-05-10","reported":"2026-05-10","project":{"name":"sttp","url":"https://github.com/softwaremill/sttp","logo":"assets/logos/sttp.png","stars":1506,"language":"Scala","downloads":[]},"ticket":"https://github.com/softwaremill/sttp/issues/2881","fix":"https://github.com/softwaremill/sttp/pull/2893","reply":{"author":"adamw","at":"2026-05-10","url":"https://github.com/softwaremill/sttp/issues/2881#issuecomment-4416215127","role":"maintainer","text":"Thanks for the report - PRs welcome!"},"reporter":"Mike Murunov"},{"id":"gh:softwaremill/sttp#2882","headline":"Digest auth throws Unknown qop when the server lists several qops","summary":"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.","class":"API-contract bug","severity":"medium","status":"fixed","status_since":"2026-05-29","found":"2026-05-10","reported":"2026-05-10","project":{"name":"sttp","url":"https://github.com/softwaremill/sttp","logo":"assets/logos/sttp.png","stars":1506,"language":"Scala","downloads":[]},"ticket":"https://github.com/softwaremill/sttp/issues/2882","fix":"https://github.com/softwaremill/sttp/pull/2898","reply":{"author":"adamw","at":"2026-05-10","url":"https://github.com/softwaremill/sttp/issues/2882#issuecomment-4416214959","role":"maintainer","text":"Thanks for the report - PRs welcome!"},"reporter":"Mike Murunov"},{"id":"gh:softwaremill/tapir#5219","headline":"Enum validator's description string is missing its closing parenthesis","summary":"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.","class":"Wrong-result bug","severity":"low","status":"fixed","status_since":"2026-06-09","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Tapir","url":"https://github.com/softwaremill/tapir","logo":"assets/logos/tapir.png","stars":1475,"language":"Scala","downloads":[]},"ticket":"https://github.com/softwaremill/tapir/issues/5219","fix":"https://github.com/softwaremill/tapir/pull/5274","reply":{"author":"adamw","at":"2026-05-10","url":"https://github.com/softwaremill/tapir/issues/5219#issuecomment-4416215034","role":"maintainer","text":"Thanks for the report - PRs welcome!"},"reporter":"Mike Murunov"},{"id":"gh:softwaremill/tapir#5220","headline":"Schema product field has equals without a matching hashCode","summary":"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.","class":"Wrong-result bug","severity":"low","status":"fixed","status_since":"2026-06-09","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Tapir","url":"https://github.com/softwaremill/tapir","logo":"assets/logos/tapir.png","stars":1475,"language":"Scala","downloads":[]},"ticket":"https://github.com/softwaremill/tapir/issues/5220","fix":"https://github.com/softwaremill/tapir/pull/5281","reply":{"author":"adamw","at":"2026-05-10","url":"https://github.com/softwaremill/tapir/issues/5220#issuecomment-4416214855","role":"maintainer","text":"Thanks for the report - PRs welcome!"},"reporter":"Mike Murunov"},{"id":"gh:softwaremill/tapir#5221","headline":"Default CORS settings leave PATCH out, so browsers block PATCH requests","summary":"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.","class":"API-contract bug","severity":"low","status":"fixed","status_since":"2026-06-09","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Tapir","url":"https://github.com/softwaremill/tapir","logo":"assets/logos/tapir.png","stars":1475,"language":"Scala","downloads":[]},"ticket":"https://github.com/softwaremill/tapir/issues/5221","fix":"https://github.com/softwaremill/tapir/pull/5282","reply":{"author":"adamw","at":"2026-05-10","url":"https://github.com/softwaremill/tapir/issues/5221#issuecomment-4416214741","role":"maintainer","text":"Thanks for the report - PRs welcome!"},"reporter":"Mike Murunov"},{"id":"gh:ghostdogpr/caliban#2941","headline":"ObjectValue equality compares only hash codes, so unequal objects can be equal","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-12","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Caliban","url":"https://github.com/ghostdogpr/caliban","logo":"assets/logos/caliban.png","stars":993,"language":"Scala","downloads":[]},"ticket":"https://github.com/ghostdogpr/caliban/issues/2941","fix":"https://github.com/ghostdogpr/caliban/pull/2960","reply":null,"reporter":"Mike Murunov"},{"id":"gh:ghostdogpr/caliban#2943","headline":"withExtension adds a second entry for a key and does not replace the first","summary":"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.","class":"API-contract bug","severity":"low","status":"fixed","status_since":"2026-05-12","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Caliban","url":"https://github.com/ghostdogpr/caliban","logo":"assets/logos/caliban.png","stars":993,"language":"Scala","downloads":[]},"ticket":"https://github.com/ghostdogpr/caliban/issues/2943","fix":"https://github.com/ghostdogpr/caliban/pull/2956","reply":null,"reporter":"Mike Murunov"},{"id":"gh:ghostdogpr/caliban#2944","headline":"String and enum toString do not escape backslashes, tabs or carriage returns","summary":"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.","class":"Wrong-result bug","severity":"low","status":"fixed","status_since":"2026-05-12","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Caliban","url":"https://github.com/ghostdogpr/caliban","logo":"assets/logos/caliban.png","stars":993,"language":"Scala","downloads":[]},"ticket":"https://github.com/ghostdogpr/caliban/issues/2944","fix":"https://github.com/ghostdogpr/caliban/pull/2961","reply":null,"reporter":"Mike Murunov"},{"id":"gh:ghostdogpr/caliban#2945","headline":"Relay Connection reports wrong hasNextPage and hasPreviousPage with cursors","summary":"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.","class":"Wrong-result bug","severity":"high","status":"fixed","status_since":"2026-05-12","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Caliban","url":"https://github.com/ghostdogpr/caliban","logo":"assets/logos/caliban.png","stars":993,"language":"Scala","downloads":[]},"ticket":"https://github.com/ghostdogpr/caliban/issues/2945","fix":"https://github.com/ghostdogpr/caliban/pull/2962","reply":null,"reporter":"Mike Murunov"},{"id":"gh:ghostdogpr/caliban#2947","headline":"Single-root-field check for subscriptions runs only on the first subscription","summary":"The validator finds one subscription operation and checks only that one. A later subscription with several root fields passes validation.","class":"Soundness bug","severity":"low","status":"fixed","status_since":"2026-05-12","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Caliban","url":"https://github.com/ghostdogpr/caliban","logo":"assets/logos/caliban.png","stars":993,"language":"Scala","downloads":[]},"ticket":"https://github.com/ghostdogpr/caliban/issues/2947","fix":"https://github.com/ghostdogpr/caliban/pull/2963","reply":null,"reporter":"Mike Murunov"},{"id":"gh:ghostdogpr/caliban#2948","headline":"Fragment validation cache keyed by hash can return a result for a different query","summary":"The memo caches use hash codes as keys with no equality check. A collision can make invalid queries pass or valid queries fail.","class":"Soundness bug","severity":"low","status":"fixed","status_since":"2026-05-31","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Caliban","url":"https://github.com/ghostdogpr/caliban","logo":"assets/logos/caliban.png","stars":993,"language":"Scala","downloads":[]},"ticket":"https://github.com/ghostdogpr/caliban/issues/2948","fix":"https://github.com/ghostdogpr/caliban/pull/2983","reply":null,"reporter":"Mike Murunov"},{"id":"gh:ghostdogpr/caliban#2949","headline":"Schema comparison reports unchanged directive arguments as changed","summary":"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.","class":"Diagnostics bug","severity":"low","status":"fixed","status_since":"2026-05-12","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Caliban","url":"https://github.com/ghostdogpr/caliban","logo":"assets/logos/caliban.png","stars":993,"language":"Scala","downloads":[]},"ticket":"https://github.com/ghostdogpr/caliban/issues/2949","fix":"https://github.com/ghostdogpr/caliban/pull/2957","reply":null,"reporter":"Mike Murunov"},{"id":"gh:ghostdogpr/caliban#2950","headline":"Remote schema parsing always drops subscriptions","summary":"parseRemoteSchema hardcodes subscriptionType to None, so any subscription in a remote schema definition is lost. Stitched schemas lose their subscriptions.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-12","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Caliban","url":"https://github.com/ghostdogpr/caliban","logo":"assets/logos/caliban.png","stars":993,"language":"Scala","downloads":[]},"ticket":"https://github.com/ghostdogpr/caliban/issues/2950","fix":"https://github.com/ghostdogpr/caliban/pull/2958","reply":null,"reporter":"Mike Murunov"},{"id":"gh:ghostdogpr/caliban#2951","headline":"Remote response unwrap keeps only the first field of a multi-field object","summary":"RemoteResolver.unwrap returns only the first root field of a remote response. The other fields are lost in stitch pipelines without an error.","class":"Data-loss bug","severity":"medium","status":"fixed","status_since":"2026-05-12","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Caliban","url":"https://github.com/ghostdogpr/caliban","logo":"assets/logos/caliban.png","stars":993,"language":"Scala","downloads":[]},"ticket":"https://github.com/ghostdogpr/caliban/issues/2951","fix":"https://github.com/ghostdogpr/caliban/pull/2965","reply":null,"reporter":"Mike Murunov"},{"id":"gh:ghostdogpr/caliban#2952","headline":"SchemaTracer calls head on a field list that can be empty","summary":"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.","class":"Crash","severity":"low","status":"fixed","status_since":"2026-05-12","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Caliban","url":"https://github.com/ghostdogpr/caliban","logo":"assets/logos/caliban.png","stars":993,"language":"Scala","downloads":[]},"ticket":"https://github.com/ghostdogpr/caliban/issues/2952","fix":"https://github.com/ghostdogpr/caliban/pull/2959","reply":null,"reporter":"Mike Murunov"},{"id":"gh:ghostdogpr/caliban#2953","headline":"Schema reporting stops for good after one error and ignores the retry delay","summary":"On a SchemaError, ReportingDaemon logs the error and ends its loop, so later schema reports never run. The retry hint in the error is not used.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-12","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Caliban","url":"https://github.com/ghostdogpr/caliban","logo":"assets/logos/caliban.png","stars":993,"language":"Scala","downloads":[]},"ticket":"https://github.com/ghostdogpr/caliban/issues/2953","fix":"https://github.com/ghostdogpr/caliban/pull/2964","reply":null,"reporter":"Mike Murunov"},{"id":"gh:softwaremill/quicklens#301","headline":"atOrElse throws IndexOutOfBoundsException on a Seq for a missing index","summary":"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.","class":"API-contract bug","severity":"medium","status":"fixed","status_since":"2026-06-16","found":"2026-05-10","reported":"2026-05-10","project":{"name":"quicklens","url":"https://github.com/softwaremill/quicklens","logo":"assets/logos/quicklens.png","stars":851,"language":"Scala","downloads":[]},"ticket":"https://github.com/softwaremill/quicklens/issues/301","fix":"https://github.com/softwaremill/quicklens/pull/304","reply":{"author":"adamw","at":"2026-05-10","url":"https://github.com/softwaremill/quicklens/issues/301#issuecomment-4416215617","role":"maintainer","text":"Thanks for the report - PRs welcome!"},"reporter":"Mike Murunov"},{"id":"gh:raquo/Laminar#195","headline":"Failed append still counts as an inserted node, so later child indices drift","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-20","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Laminar","url":"https://github.com/raquo/Laminar","logo":null,"stars":838,"language":"Scala","downloads":[]},"ticket":"https://github.com/raquo/Laminar/issues/195","fix":"https://github.com/raquo/Laminar/commit/caafa8c475778959e984c0603d0cb3b0b273c115","reply":{"author":"raquo","at":"2026-05-20","url":"https://github.com/raquo/Laminar/issues/195#issuecomment-4496253710","role":"maintainer","text":"Thanks, good find! … I'll push a fix shortly."},"reporter":"Mike Murunov"},{"id":"gh:raquo/Laminar#196","headline":"Failed DOM insert still updates the child's parent in Laminar tracking","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-20","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Laminar","url":"https://github.com/raquo/Laminar","logo":null,"stars":838,"language":"Scala","downloads":[]},"ticket":"https://github.com/raquo/Laminar/issues/196","fix":"https://github.com/raquo/Laminar/commit/999c04ef70d5e083d602efa0fbd443ff66de8e7e","reply":{"author":"raquo","at":"2026-05-20","url":"https://github.com/raquo/Laminar/issues/196#issuecomment-4496265196","role":"maintainer","text":"Thanks, good find! 👍. … Turns out this regression was introduced in v16.0.0, specifically in … I'll push a fix shortly."},"reporter":"Mike Murunov"},{"id":"gh:getkyo/kyo#1621","headline":"TMap.contains returns true for any key whenever the map is not empty","summary":"The key argument is never used, so contains only checks whether the map has any entries. Lookups for keys that are not in the map return true.","class":"Wrong-result bug","severity":"high","status":"fixed","status_since":"2026-05-19","found":"2026-05-18","reported":"2026-05-18","project":{"name":"Kyo","url":"https://github.com/getkyo/kyo","logo":"assets/logos/kyo.png","stars":821,"language":"Scala","downloads":[]},"ticket":"https://github.com/getkyo/kyo/issues/1621","fix":"https://github.com/getkyo/kyo/pull/1624","reply":null,"reporter":"Mike Murunov"},{"id":"gh:getkyo/kyo#1622","headline":"TMap.initWith builds the map and never runs the function passed to it","summary":"initWith ignores its function argument and returns the new map, so the user's code never runs. Its signature also drops the result type parameter.","class":"Wrong-result bug","severity":"high","status":"fixed","status_since":"2026-05-19","found":"2026-05-18","reported":"2026-05-18","project":{"name":"Kyo","url":"https://github.com/getkyo/kyo","logo":"assets/logos/kyo.png","stars":821,"language":"Scala","downloads":[]},"ticket":"https://github.com/getkyo/kyo/issues/1622","fix":"https://github.com/getkyo/kyo/pull/1624","reply":null,"reporter":"Mike Murunov"},{"id":"gh:getkyo/kyo#1623","headline":"Schedule.linear doubles its delays, so growth is exponential, not linear","summary":"The linear schedule adds the base to itself at each step, so delays double: 1, 2, 4, 8 seconds. Retry waits grow much faster than the name promises.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-22","found":"2026-05-18","reported":"2026-05-18","project":{"name":"Kyo","url":"https://github.com/getkyo/kyo","logo":"assets/logos/kyo.png","stars":821,"language":"Scala","downloads":[]},"ticket":"https://github.com/getkyo/kyo/issues/1623","fix":"https://github.com/getkyo/kyo/pull/1632","reply":null,"reporter":"Mike Murunov"},{"id":"gh:softwaremill/magnolia#646","headline":"Subtype typeAnnotations returns the parent's parameter annotations","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-06-16","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Magnolia","url":"https://github.com/softwaremill/magnolia","logo":"assets/logos/magnolia.png","stars":800,"language":"Scala","downloads":[]},"ticket":"https://github.com/softwaremill/magnolia/issues/646","fix":"https://github.com/softwaremill/magnolia/pull/652","reply":{"author":"adamw","at":"2026-05-10","url":"https://github.com/softwaremill/magnolia/issues/646#issuecomment-4416215783","role":"maintainer","text":"Thanks for the report - PRs welcome!"},"reporter":"Mike Murunov"},{"id":"gh:softwaremill/magnolia#647","headline":"Monadic[Future].point submits a task to the pool, not a completed value","summary":"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.","class":"Concurrency bug","severity":"low","status":"fixed","status_since":"2026-06-16","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Magnolia","url":"https://github.com/softwaremill/magnolia","logo":"assets/logos/magnolia.png","stars":800,"language":"Scala","downloads":[]},"ticket":"https://github.com/softwaremill/magnolia/issues/647","fix":"https://github.com/softwaremill/magnolia/pull/654","reply":{"author":"adamw","at":"2026-05-10","url":"https://github.com/softwaremill/magnolia/issues/647#issuecomment-4416215279","role":"maintainer","text":"Thanks for the report - PRs welcome!"},"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/upickle#702","headline":"MessagePack reader returns empty containers for lengths of 2^31 and above","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"uPickle","url":"https://github.com/com-lihaoyi/upickle","logo":"assets/logos/upickle.png","stars":768,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/upickle/issues/702","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/upickle#703","headline":"JSON reader accepts invalid hex digits in unicode escapes and yields wrong characters","summary":"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.","class":"Soundness bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"uPickle","url":"https://github.com/com-lihaoyi/upickle","logo":"assets/logos/upickle.png","stars":768,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/upickle/issues/703","fix":"https://github.com/com-lihaoyi/upickle/pull/724","reply":null,"reporter":"Mike Murunov"},{"id":"gh:wvlet/airframe#4181","headline":"BigInt codec truncates negative values below the Long range during pack","summary":"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.","class":"Data-loss bug","severity":"medium","status":"reported","status_since":"2026-05-18","found":"2026-05-18","reported":"2026-05-18","project":{"name":"Airframe","url":"https://github.com/wvlet/airframe","logo":"assets/logos/airframe.png","stars":665,"language":"Scala","downloads":[]},"ticket":"https://github.com/wvlet/airframe/issues/4181","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:deepseek-ai/DeepGEMM-Ascend#5","headline":"Grouped GEMM computes rows past the end of each group","summary":"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.","class":"Wrong-result bug","severity":"high","status":"reported","status_since":"2026-09-30","found":"2026-09-30","reported":"2026-09-30","project":{"name":"DeepGEMM-Ascend","url":"https://github.com/deepseek-ai/DeepGEMM-Ascend","logo":"assets/logos/deepgemm-ascend.png","stars":600,"language":"C++","downloads":[]},"ticket":"https://github.com/deepseek-ai/DeepGEMM-Ascend/issues/5","fix":"https://github.com/deepseek-ai/DeepGEMM-Ascend/pull/7","reply":null,"reporter":"Maksim Borisov"},{"id":"gh:deepseek-ai/DeepGEMM-Ascend#6","headline":"The docs call C the accumulator, but the kernel only uses its presence","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"reported","status_since":"2026-09-30","found":"2026-09-30","reported":"2026-09-30","project":{"name":"DeepGEMM-Ascend","url":"https://github.com/deepseek-ai/DeepGEMM-Ascend","logo":"assets/logos/deepgemm-ascend.png","stars":600,"language":"C++","downloads":[]},"ticket":"https://github.com/deepseek-ai/DeepGEMM-Ascend/issues/6","fix":"https://github.com/deepseek-ai/DeepGEMM-Ascend/pull/8","reply":null,"reporter":"Maksim Borisov"},{"id":"gh:Iltotore/iron#369","headline":"The Not implication rule encodes the inverse, so refined Int values can break bounds","summary":"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.","class":"Soundness bug","severity":"high","status":"fixed","status_since":"2026-07-06","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Iron","url":"https://github.com/Iltotore/iron","logo":"assets/logos/iron.png","stars":561,"language":"Scala","downloads":[]},"ticket":"https://github.com/Iltotore/iron/issues/369","fix":"https://github.com/Iltotore/iron/pull/376","reply":{"author":"Iltotore","at":"2026-05-10","url":"https://github.com/Iltotore/iron/issues/369#issuecomment-4416004569","role":"maintainer","text":"Of course I'm accepting PRs 👍"},"reporter":"Mike Murunov"},{"id":"gh:Iltotore/iron#370","headline":"Collection implications such as ForAll to Exists compile though short lists break them","summary":"Implications such as ForAll ==> Exists and Init ==> Head compile, but empty or one-element lists break the target constraint, so invalid values type-check.","class":"Soundness bug","severity":"high","status":"fixed","status_since":"2026-07-06","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Iron","url":"https://github.com/Iltotore/iron","logo":"assets/logos/iron.png","stars":561,"language":"Scala","downloads":[]},"ticket":"https://github.com/Iltotore/iron/issues/370","fix":"https://github.com/Iltotore/iron/pull/376","reply":{"author":"Iltotore","at":"2026-05-10","url":"https://github.com/Iltotore/iron/issues/370#issuecomment-4416003495","role":"maintainer","text":"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."},"reporter":"Mike Murunov"},{"id":"gh:Iltotore/iron#371","headline":"Long range constraints compare through Double and fail above 2^53","summary":"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.","class":"Soundness bug","severity":"medium","status":"fixed","status_since":"2026-07-06","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Iron","url":"https://github.com/Iltotore/iron","logo":"assets/logos/iron.png","stars":561,"language":"Scala","downloads":[]},"ticket":"https://github.com/Iltotore/iron/issues/371","fix":"https://github.com/Iltotore/iron/pull/376","reply":{"author":"Iltotore","at":"2026-05-10","url":"https://github.com/Iltotore/iron/issues/371#issuecomment-4416009455","role":"maintainer","text":"The suggested fix looks good to me. … Happy to review and accept the PR!"},"reporter":"Mike Murunov"},{"id":"gh:softwaremill/ox#439","headline":"Flow.range with a negative step emits only the first element","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-06-08","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Ox","url":"https://github.com/softwaremill/ox","logo":"assets/logos/ox.png","stars":527,"language":"Scala","downloads":[]},"ticket":"https://github.com/softwaremill/ox/issues/439","fix":"https://github.com/softwaremill/ox/pull/455","reply":{"author":"adamw","at":"2026-05-10","url":"https://github.com/softwaremill/ox/issues/439#issuecomment-4416215388","role":"maintainer","text":"Thanks for the report - PRs welcome!"},"reporter":"Mike Murunov"},{"id":"gh:softwaremill/ox#442","headline":"AdaptiveRetry stops on a Left result when no failure cost applies","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-06-02","found":"2026-05-18","reported":"2026-05-18","project":{"name":"Ox","url":"https://github.com/softwaremill/ox","logo":"assets/logos/ox.png","stars":527,"language":"Scala","downloads":[]},"ticket":"https://github.com/softwaremill/ox/issues/442","fix":"https://github.com/softwaremill/ox/pull/448","reply":null,"reporter":"Mike Murunov"},{"id":"gh:scalameta/munit#1090","headline":"Failure message suffix throws NullPointerException for exceptions without a message","summary":"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.","class":"Diagnostics bug","severity":"low","status":"fixed","status_since":"2026-08-25","found":"2026-05-10","reported":"2026-05-10","project":{"name":"MUnit","url":"https://github.com/scalameta/munit","logo":"assets/logos/munit.png","stars":472,"language":"Scala","downloads":[]},"ticket":"https://github.com/scalameta/munit/issues/1090","fix":"https://github.com/scalameta/munit/pull/1168","reply":null,"reporter":"Mike Murunov"},{"id":"gh:UniMath/SymmetryBook#202","headline":"Chapter 3 has a wrong Section 3.8 claim, a mismatched construction orientation and typos","summary":"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.","class":"Specification gap","severity":"info","status":"reported","status_since":"2026-10-06","found":"2026-10-06","reported":"2026-10-06","project":{"name":"SymmetryBook","url":"https://github.com/UniMath/SymmetryBook","logo":"assets/logos/symmetrybook.png","stars":453,"language":"HTML","downloads":[]},"ticket":"https://github.com/UniMath/SymmetryBook/issues/202","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:UniMath/SymmetryBook#204","headline":"Chapter 4 exercise claims an equivalence that fails; two others lack a hypothesis","summary":"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.","class":"Specification gap","severity":"info","status":"reported","status_since":"2026-10-06","found":"2026-10-06","reported":"2026-10-06","project":{"name":"SymmetryBook","url":"https://github.com/UniMath/SymmetryBook","logo":"assets/logos/symmetrybook.png","stars":453,"language":"HTML","downloads":[]},"ticket":"https://github.com/UniMath/SymmetryBook/issues/204","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:UniMath/SymmetryBook#205","headline":"Group exercise: evaluation at refl reverses multiplication, so it is not a homomorphism","summary":"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.","class":"Specification gap","severity":"info","status":"reported","status_since":"2026-10-06","found":"2026-10-06","reported":"2026-10-06","project":{"name":"SymmetryBook","url":"https://github.com/UniMath/SymmetryBook","logo":"assets/logos/symmetrybook.png","stars":453,"language":"HTML","downloads":[]},"ticket":"https://github.com/UniMath/SymmetryBook/issues/205","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:UniMath/SymmetryBook#206","headline":"Chapter 7 has a typo, an unstated inverse and an unstated hypothesis","summary":"Exercise 7.2.10 has s where s' belongs and fails in the integers as printed. Example 7.3.5 misses an inverse, and Exercise 7.3.6 misses a hypothesis.","class":"Specification gap","severity":"info","status":"reported","status_since":"2026-10-06","found":"2026-10-06","reported":"2026-10-06","project":{"name":"SymmetryBook","url":"https://github.com/UniMath/SymmetryBook","logo":"assets/logos/symmetrybook.png","stars":453,"language":"HTML","downloads":[]},"ticket":"https://github.com/UniMath/SymmetryBook/issues/206","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:UniMath/SymmetryBook#207","headline":"Chapter 9 claims need a hypothesis, a converse is false, and inverses are absent","summary":"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.","class":"Specification gap","severity":"info","status":"reported","status_since":"2026-10-06","found":"2026-10-06","reported":"2026-10-06","project":{"name":"SymmetryBook","url":"https://github.com/UniMath/SymmetryBook","logo":"assets/logos/symmetrybook.png","stars":453,"language":"HTML","downloads":[]},"ticket":"https://github.com/UniMath/SymmetryBook/issues/207","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:UniMath/SymmetryBook#208","headline":"Order-3 subgroup count of symmetric groups is only correct up to n=5","summary":"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.","class":"Specification gap","severity":"info","status":"reported","status_since":"2026-10-06","found":"2026-10-06","reported":"2026-10-06","project":{"name":"SymmetryBook","url":"https://github.com/UniMath/SymmetryBook","logo":"assets/logos/symmetrybook.png","stars":453,"language":"HTML","downloads":[]},"ticket":"https://github.com/UniMath/SymmetryBook/issues/208","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:UniMath/SymmetryBook#209","headline":"Lemma on generators: the 'if' direction fails for the empty generator set","summary":"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.","class":"Specification gap","severity":"info","status":"reported","status_since":"2026-10-06","found":"2026-10-06","reported":"2026-10-06","project":{"name":"SymmetryBook","url":"https://github.com/UniMath/SymmetryBook","logo":"assets/logos/symmetrybook.png","stars":453,"language":"HTML","downloads":[]},"ticket":"https://github.com/UniMath/SymmetryBook/issues/209","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:antirez/gguf-tools#34","headline":"Q4_K dequantization uses the wrong scale for half of each block","summary":"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.","class":"Wrong-result bug","severity":"high","status":"reported","status_since":"2026-09-30","found":"2026-09-30","reported":"2026-09-30","project":{"name":"gguf-tools","url":"https://github.com/antirez/gguf-tools","logo":null,"stars":370,"language":"C","downloads":[]},"ticket":"https://github.com/antirez/gguf-tools/issues/34","fix":"https://github.com/antirez/gguf-tools/pull/36","reply":null,"reporter":"Maksim Borisov"},{"id":"gh:antirez/gguf-tools#35","headline":"gguf_get_tensor divides by zero on deprecated tensor types 4 and 5","summary":"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.","class":"Crash","severity":"high","status":"reported","status_since":"2026-09-30","found":"2026-09-30","reported":"2026-09-30","project":{"name":"gguf-tools","url":"https://github.com/antirez/gguf-tools","logo":null,"stars":370,"language":"C","downloads":[]},"ticket":"https://github.com/antirez/gguf-tools/issues/35","fix":"https://github.com/antirez/gguf-tools/pull/37","reply":null,"reporter":"Maksim Borisov"},{"id":"gh:gwaithimirdain/narya#142","headline":"A compiled file crashes with an internal anomaly when file numbers change","summary":"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.","class":"Crash","severity":"medium","status":"fixed","status_since":"2026-10-10","found":"2026-10-05","reported":"2026-10-05","project":{"name":"Narya","url":"https://github.com/gwaithimirdain/narya","logo":"assets/logos/narya.png","stars":310,"language":"OCaml","downloads":[]},"ticket":"https://github.com/gwaithimirdain/narya/issues/142","fix":"https://github.com/gwaithimirdain/narya/pull/150","reply":{"author":"mikeshulman","at":"2026-10-05","url":"https://github.com/gwaithimirdain/narya/issues/142#issuecomment-6000153270","role":"maintainer","text":"Your diagnosis of this one looks right, and your fix makes sense."},"reporter":"Mike Murunov"},{"id":"gh:gwaithimirdain/narya#143","headline":"Same file loads twice through different relative paths and causes a type error","summary":"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.","class":"API-contract bug","severity":"low","status":"fixed","status_since":"2026-10-07","found":"2026-10-05","reported":"2026-10-05","project":{"name":"Narya","url":"https://github.com/gwaithimirdain/narya","logo":"assets/logos/narya.png","stars":310,"language":"OCaml","downloads":[]},"ticket":"https://github.com/gwaithimirdain/narya/issues/143","fix":"https://github.com/gwaithimirdain/narya/pull/152","reply":{"author":"mikeshulman","at":"2026-10-07","url":"https://github.com/gwaithimirdain/narya/issues/143#issuecomment-6031596824","role":"maintainer","text":"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."},"reporter":"Mike Murunov"},{"id":"gh:gwaithimirdain/narya#144","headline":"Field projection from a transported tuple in 3D dimension raises an internal bug","summary":"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.","class":"Crash","severity":"medium","status":"fixed","status_since":"2026-10-10","found":"2026-10-05","reported":"2026-10-05","project":{"name":"Narya","url":"https://github.com/gwaithimirdain/narya","logo":"assets/logos/narya.png","stars":310,"language":"OCaml","downloads":[]},"ticket":"https://github.com/gwaithimirdain/narya/issues/144","fix":"https://github.com/gwaithimirdain/narya/commit/ad911c3fdadc084ef79e2a64a834816ab96a555e","reply":null,"reporter":"Mike Murunov"},{"id":"gh:gwaithimirdain/narya#145","headline":"Unannotated definitions store normal-form types, which makes .nyo files huge","summary":"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.","class":"Hang","severity":"medium","status":"confirmed","status_since":"2026-10-05","found":"2026-10-05","reported":"2026-10-05","project":{"name":"Narya","url":"https://github.com/gwaithimirdain/narya","logo":"assets/logos/narya.png","stars":310,"language":"OCaml","downloads":[]},"ticket":"https://github.com/gwaithimirdain/narya/issues/145","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:gwaithimirdain/narya#146","headline":"calc reverse-orientation check is slow because it builds a full error text","summary":"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.","class":"Hang","severity":"low","status":"fixed","status_since":"2026-10-10","found":"2026-10-05","reported":"2026-10-05","project":{"name":"Narya","url":"https://github.com/gwaithimirdain/narya","logo":"assets/logos/narya.png","stars":310,"language":"OCaml","downloads":[]},"ticket":"https://github.com/gwaithimirdain/narya/issues/146","fix":"https://github.com/gwaithimirdain/narya/pull/156","reply":{"author":"mikeshulman","at":"2026-10-08","url":"https://github.com/gwaithimirdain/narya/issues/146#issuecomment-6050676340","role":"maintainer","text":"That sounds reasonable to me.  Want to submit it as a pull request?"},"reporter":"Mike Murunov"},{"id":"gh:gwaithimirdain/narya#147","headline":"Docs give the wrong option name -no-format and an incomplete `-source-only` option description","summary":"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.","class":"Specification gap","severity":"info","status":"fixed","status_since":"2026-10-08","found":"2026-10-05","reported":"2026-10-05","project":{"name":"Narya","url":"https://github.com/gwaithimirdain/narya","logo":"assets/logos/narya.png","stars":310,"language":"OCaml","downloads":[]},"ticket":"https://github.com/gwaithimirdain/narya/issues/147","fix":"https://github.com/gwaithimirdain/narya/pull/151","reply":{"author":"mikeshulman","at":"2026-10-07","url":"https://github.com/gwaithimirdain/narya/issues/147#issuecomment-6031218254","role":"maintainer","text":"#151 addresses the second half of this issue."},"reporter":"Mike Murunov"},{"id":"gh:gwaithimirdain/narya#148","headline":"Writes of compiled .nyo files are not atomic, so concurrent runs break","summary":"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.","class":"Concurrency bug","severity":"medium","status":"fixed","status_since":"2026-10-10","found":"2026-10-05","reported":"2026-10-05","project":{"name":"Narya","url":"https://github.com/gwaithimirdain/narya","logo":"assets/logos/narya.png","stars":310,"language":"OCaml","downloads":[]},"ticket":"https://github.com/gwaithimirdain/narya/issues/148","fix":"https://github.com/gwaithimirdain/narya/pull/151","reply":{"author":"mikeshulman","at":"2026-10-07","url":"https://github.com/gwaithimirdain/narya/issues/148#issuecomment-6031219213","role":"maintainer","text":"#151 addresses the second half of this issue."},"reporter":"Mike Murunov"},{"id":"gh:gwaithimirdain/narya#149","headline":"calc hides an internal bug raised by its forward check","summary":"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.","class":"Diagnostics bug","severity":"low","status":"fixed","status_since":"2026-10-10","found":"2026-10-05","reported":"2026-10-05","project":{"name":"Narya","url":"https://github.com/gwaithimirdain/narya","logo":"assets/logos/narya.png","stars":310,"language":"OCaml","downloads":[]},"ticket":"https://github.com/gwaithimirdain/narya/issues/149","fix":"https://github.com/gwaithimirdain/narya/commit/d77f2550b3f2713be15c6424865c8c452eb03e07","reply":{"author":"mikeshulman","at":"2026-10-05","url":"https://github.com/gwaithimirdain/narya/issues/149#issuecomment-6002997152","role":"maintainer","text":"This should also be done by other \"backtracking\" constructs like First, so it may be worth pulling out into a helper function."},"reporter":"Mike Murunov"},{"id":"gh:lampepfl/gears#179","headline":"Repeat-until-success schedule never stops for an even repetition count","summary":"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.","class":"Hang","severity":"medium","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Gears","url":"https://github.com/lampepfl/gears","logo":"assets/logos/gears.png","stars":305,"language":"Scala","downloads":[]},"ticket":"https://github.com/lampepfl/gears/issues/179","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:hedgehogqa/scala-hedgehog#307","headline":"Uniform Long generator overflows on wide ranges and retries out-of-range values","summary":"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.","class":"Wrong-result bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Hedgehog","url":"https://github.com/hedgehogqa/scala-hedgehog","logo":"assets/logos/hedgehog.png","stars":268,"language":"Scala","downloads":[]},"ticket":"https://github.com/hedgehogqa/scala-hedgehog/issues/307","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:hedgehogqa/scala-hedgehog#308","headline":"MersenneTwister64 hashCode uses only the index, so seeded generators collide","summary":"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.","class":"API-contract bug","severity":"info","status":"fixed","status_since":"2026-09-15","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Hedgehog","url":"https://github.com/hedgehogqa/scala-hedgehog","logo":"assets/logos/hedgehog.png","stars":268,"language":"Scala","downloads":[]},"ticket":"https://github.com/hedgehogqa/scala-hedgehog/issues/308","fix":"https://github.com/hedgehogqa/scala-hedgehog/pull/324","reply":{"author":"kevin-lee","at":"2026-09-18","url":"https://github.com/hedgehogqa/scala-hedgehog/issues/308#issuecomment-5723756352","role":"maintainer","text":"Done: #324"},"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/scalasql#113","headline":"Take followed by a larger drop generates a negative LIMIT that some databases reject","summary":"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.","class":"API-contract bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ScalaSQL","url":"https://github.com/com-lihaoyi/scalasql","logo":null,"stars":260,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/scalasql/issues/113","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/scalasql#114","headline":"Upsert with no update assignments generates an incomplete DO UPDATE SET clause","summary":"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.","class":"API-contract bug","severity":"low","status":"confirmed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ScalaSQL","url":"https://github.com/com-lihaoyi/scalasql","logo":null,"stars":260,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/scalasql/issues/114","fix":null,"reply":{"author":"aboisvert","at":"2026-05-10","url":"https://github.com/com-lihaoyi/scalasql/issues/114#issuecomment-4416254509","role":"maintainer","text":"My recommendation would be to require at least one parameter, since passing no param is likely an omission error."},"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/scalasql#115","headline":"A None value always declares the JDBC type NULL, which some drivers reject","summary":"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.","class":"Crash","severity":"medium","status":"confirmed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ScalaSQL","url":"https://github.com/com-lihaoyi/scalasql","logo":null,"stars":260,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/scalasql/issues/115","fix":null,"reply":{"author":"aboisvert","at":"2026-05-10","url":"https://github.com/com-lihaoyi/scalasql/issues/115#issuecomment-4416282713","role":"maintainer","text":"+1 to update the base Dialect."},"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/scalasql#116","headline":"camelToSnake turns XMLParser into xmlparser, so acronym columns are not found","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"confirmed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ScalaSQL","url":"https://github.com/com-lihaoyi/scalasql","logo":null,"stars":260,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/scalasql/issues/116","fix":null,"reply":{"author":"aboisvert","at":"2026-05-10","url":"https://github.com/com-lihaoyi/scalasql/issues/116#issuecomment-4416260325","role":"maintainer","text":"+1 to change the behavior only for the next major version bump."},"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/scalasql#117","headline":"WithCte.filter puts the WHERE clause inside the CTE, not the outer query","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"confirmed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ScalaSQL","url":"https://github.com/com-lihaoyi/scalasql","logo":null,"stars":260,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/scalasql/issues/117","fix":null,"reply":{"author":"aboisvert","at":"2026-05-10","url":"https://github.com/com-lihaoyi/scalasql/issues/117#issuecomment-4416268336","role":"maintainer","text":"Let's beef up the tests as part of this.  The suggested fix makes sense to me."},"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/scalasql#118","headline":"startsWith, endsWith and contains treat % and _ in user values as wildcards","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"confirmed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ScalaSQL","url":"https://github.com/com-lihaoyi/scalasql","logo":null,"stars":260,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/scalasql/issues/118","fix":null,"reply":{"author":"aboisvert","at":"2026-05-10","url":"https://github.com/com-lihaoyi/scalasql/issues/118#issuecomment-4416276921","role":"maintainer","text":"Proposed fix sounds good to me.  Thanks in advance for submitting a PR!"},"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/scalasql#119","headline":"Identifier escape() does not escape a quote or bracket inside a name","summary":"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.","class":"Security vulnerability","severity":"medium","status":"confirmed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ScalaSQL","url":"https://github.com/com-lihaoyi/scalasql","logo":null,"stars":260,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/scalasql/issues/119","fix":null,"reply":{"author":"aboisvert","at":"2026-05-10","url":"https://github.com/com-lihaoyi/scalasql/issues/119#issuecomment-4416279430","role":"maintainer","text":"Agreed on the proposed fix."},"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/PPrint#165","headline":"Truncation counts a CRLF line break as two lines","summary":"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.","class":"Wrong-result bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"PPrint","url":"https://github.com/com-lihaoyi/PPrint","logo":"assets/logos/pprint.png","stars":248,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/PPrint/issues/165","fix":"https://github.com/com-lihaoyi/PPrint/pull/167","reply":null,"reporter":"Mike Murunov"},{"id":"gh:sirthias/borer#829","headline":"Reader longCompare gives the wrong sign when the subtraction overflows","summary":"If longCompare compares a stored Long.MaxValue against Long.MinValue, the subtraction overflows and reports the reverse order.","class":"Wrong-result bug","severity":"low","status":"fixed","status_since":"2026-07-28","found":"2026-05-10","reported":"2026-05-10","project":{"name":"borer","url":"https://github.com/sirthias/borer","logo":"assets/logos/borer.png","stars":242,"language":"Scala","downloads":[]},"ticket":"https://github.com/sirthias/borer/issues/829","fix":"https://github.com/sirthias/borer/commit/49a419ed4e69d16c57d86f16de837ff9a45f568d","reply":{"author":"sirthias","at":"2026-05-11","url":"https://github.com/sirthias/borer/issues/829#issuecomment-4423577735","role":"maintainer","text":"Great catch, thank you! I'd be happy to merge a PR if you have time to submit one."},"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/fansi#139","headline":"overlayAll error message shows the end position where the start should be","summary":"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.","class":"Diagnostics bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"fansi","url":"https://github.com/com-lihaoyi/fansi","logo":null,"stars":237,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/fansi/issues/139","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/fansi#140","headline":"Equal multi-style values hash the same but compare unequal, so sets keep duplicates","summary":"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.","class":"API-contract bug","severity":"medium","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"fansi","url":"https://github.com/com-lihaoyi/fansi","logo":null,"stars":237,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/fansi/issues/140","fix":"https://github.com/com-lihaoyi/fansi/pull/145","reply":null,"reporter":"Mike Murunov"},{"id":"gh:dotty-cps-async/dotty-cps-async#119","headline":"Async Either.forall returns false for Left instead of the stdlib's true","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"dotty-cps-async","url":"https://github.com/dotty-cps-async/dotty-cps-async","logo":"assets/logos/dotty-cps-async.png","stars":194,"language":"Scala","downloads":[]},"ticket":"https://github.com/dotty-cps-async/dotty-cps-async/issues/119","fix":"https://github.com/dotty-cps-async/dotty-cps-async/pull/127","reply":null,"reporter":"Mike Murunov"},{"id":"gh:dotty-cps-async/dotty-cps-async#120","headline":"Async Try.recover throws MatchError when the partial function does not match","summary":"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.","class":"Crash","severity":"medium","status":"fixed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"dotty-cps-async","url":"https://github.com/dotty-cps-async/dotty-cps-async","logo":"assets/logos/dotty-cps-async.png","stars":194,"language":"Scala","downloads":[]},"ticket":"https://github.com/dotty-cps-async/dotty-cps-async/issues/120","fix":"https://github.com/dotty-cps-async/dotty-cps-async/pull/128","reply":null,"reporter":"Mike Murunov"},{"id":"gh:dotty-cps-async/dotty-cps-async#121","headline":"Async `Using` leaks the resource when the body fails","summary":"The async version of `Using` releases the resource only on success. When the body fails, the resource is never closed, so each failure leaks a handle.","class":"Resource leak","severity":"medium","status":"fixed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"dotty-cps-async","url":"https://github.com/dotty-cps-async/dotty-cps-async","logo":"assets/logos/dotty-cps-async.png","stars":194,"language":"Scala","downloads":[]},"ticket":"https://github.com/dotty-cps-async/dotty-cps-async/issues/121","fix":"https://github.com/dotty-cps-async/dotty-cps-async/pull/129","reply":null,"reporter":"Mike Murunov"},{"id":"gh:dotty-cps-async/dotty-cps-async#122","headline":"Async IndexedSeq indexWhere ignores its from argument","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"dotty-cps-async","url":"https://github.com/dotty-cps-async/dotty-cps-async","logo":"assets/logos/dotty-cps-async.png","stars":194,"language":"Scala","downloads":[]},"ticket":"https://github.com/dotty-cps-async/dotty-cps-async/issues/122","fix":"https://github.com/dotty-cps-async/dotty-cps-async/pull/130","reply":null,"reporter":"Mike Murunov"},{"id":"gh:dotty-cps-async/dotty-cps-async#123","headline":"Async Array dropWhile returns one element when every element matches","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"dotty-cps-async","url":"https://github.com/dotty-cps-async/dotty-cps-async","logo":"assets/logos/dotty-cps-async.png","stars":194,"language":"Scala","downloads":[]},"ticket":"https://github.com/dotty-cps-async/dotty-cps-async/issues/123","fix":"https://github.com/dotty-cps-async/dotty-cps-async/pull/126","reply":{"author":"rssh","at":"2026-05-10","url":"https://github.com/dotty-cps-async/dotty-cps-async/issues/123#issuecomment-4416004111","role":"maintainer","text":"thanls. confirmed"},"reporter":"Mike Murunov"},{"id":"gh:dotty-cps-async/dotty-cps-async#124","headline":"Async breakable never runs its body, so it skips side effects","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"dotty-cps-async","url":"https://github.com/dotty-cps-async/dotty-cps-async","logo":"assets/logos/dotty-cps-async.png","stars":194,"language":"Scala","downloads":[]},"ticket":"https://github.com/dotty-cps-async/dotty-cps-async/issues/124","fix":"https://github.com/dotty-cps-async/dotty-cps-async/pull/131","reply":null,"reporter":"Mike Murunov"},{"id":"gh:dotty-cps-async/dotty-cps-async#125","headline":"Async lastIndexWhere throws IndexOutOfBounds when end is past the array","summary":"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.","class":"Crash","severity":"medium","status":"fixed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"dotty-cps-async","url":"https://github.com/dotty-cps-async/dotty-cps-async","logo":"assets/logos/dotty-cps-async.png","stars":194,"language":"Scala","downloads":[]},"ticket":"https://github.com/dotty-cps-async/dotty-cps-async/issues/125","fix":"https://github.com/dotty-cps-async/dotty-cps-async/pull/133","reply":{"author":"rssh","at":"2026-05-10","url":"https://github.com/dotty-cps-async/dotty-cps-async/issues/125#issuecomment-4416026538","role":"maintainer","text":"btw,  PR welcomed"},"reporter":"Mike Murunov"},{"id":"gh:kubuszok/hearth#268","headline":"NonEmptyMap.map keeps duplicate keys and loses entries when converted to a Map","summary":"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.","class":"Data-loss bug","severity":"medium","status":"fixed","status_since":"2026-05-30","found":"2026-05-18","reported":"2026-05-18","project":{"name":"Hearth","url":"https://github.com/kubuszok/hearth","logo":"assets/logos/hearth.png","stars":164,"language":"Scala","downloads":[]},"ticket":"https://github.com/kubuszok/hearth/issues/268","fix":"https://github.com/kubuszok/hearth/pull/274","reply":null,"reporter":"Mike Murunov"},{"id":"gh:wvlet/wvlet#1697","headline":"Generated SQL identifiers keep embedded double quotes unescaped","summary":"doubleQuoteIfNecessary wraps non-plain identifiers in double quotes without escaping embedded quotes. A name with a quote yields malformed SQL.","class":"Security vulnerability","severity":"low","status":"fixed","status_since":"2026-08-23","found":"2026-05-10","reported":"2026-05-10","project":{"name":"wvlet","url":"https://github.com/wvlet/wvlet","logo":"assets/logos/wvlet.png","stars":158,"language":"Scala","downloads":[{"registry":"PyPI","package":"wvlet","count":26,"period":"30 days","url":"https://pypi.org/project/wvlet/","basis":"the PyPI package names the repository wvlet/wvlet"}]},"ticket":"https://github.com/wvlet/wvlet/issues/1697","fix":"https://github.com/wvlet/wvlet/pull/1979","reply":null,"reporter":"Mike Murunov"},{"id":"gh:wvlet/wvlet#1698","headline":"Newlines inside triple-quoted string literals vanish from generated SQL","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-08-23","found":"2026-05-10","reported":"2026-05-10","project":{"name":"wvlet","url":"https://github.com/wvlet/wvlet","logo":"assets/logos/wvlet.png","stars":158,"language":"Scala","downloads":[{"registry":"PyPI","package":"wvlet","count":26,"period":"30 days","url":"https://pypi.org/project/wvlet/","basis":"the PyPI package names the repository wvlet/wvlet"}]},"ticket":"https://github.com/wvlet/wvlet/issues/1698","fix":"https://github.com/wvlet/wvlet/pull/1979","reply":null,"reporter":"Mike Murunov"},{"id":"gh:wvlet/wvlet#1699","headline":"DuckDB schema analysis leaks a JDBC statement on every analysis","summary":"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.","class":"Resource leak","severity":"medium","status":"fixed","status_since":"2026-08-23","found":"2026-05-10","reported":"2026-05-10","project":{"name":"wvlet","url":"https://github.com/wvlet/wvlet","logo":"assets/logos/wvlet.png","stars":158,"language":"Scala","downloads":[{"registry":"PyPI","package":"wvlet","count":26,"period":"30 days","url":"https://pypi.org/project/wvlet/","basis":"the PyPI package names the repository wvlet/wvlet"}]},"ticket":"https://github.com/wvlet/wvlet/issues/1699","fix":"https://github.com/wvlet/wvlet/pull/1979","reply":null,"reporter":"Mike Murunov"},{"id":"gh:EmergentOrder/onnx-scala#538","headline":"ONNX model outputs always load as None because a name filter never matches","summary":"The output-name filter compares a string with inner iterables, so it is always false. Model output reads return only None values for every model.","class":"Wrong-result bug","severity":"high","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"onnx-scala","url":"https://github.com/EmergentOrder/onnx-scala","logo":null,"stars":151,"language":"Scala","downloads":[]},"ticket":"https://github.com/EmergentOrder/onnx-scala/issues/538","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:EmergentOrder/onnx-scala#540","headline":"A model with BOOL, STRING, UINT or FLOAT16 tensors fails to load with MatchError","summary":"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.","class":"Crash","severity":"medium","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"onnx-scala","url":"https://github.com/EmergentOrder/onnx-scala","logo":null,"stars":151,"language":"Scala","downloads":[]},"ticket":"https://github.com/EmergentOrder/onnx-scala/issues/540","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:yaes-io/yaes#253","headline":"`Raise.catching` ignores exceptions that are subclasses of the target type","summary":"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.","class":"API-contract bug","severity":"low","status":"fixed","status_since":"2026-05-21","found":"2026-05-10","reported":"2026-05-10","project":{"name":"yaes","url":"https://github.com/yaes-io/yaes","logo":"assets/logos/yaes.png","stars":140,"language":"Scala","downloads":[]},"ticket":"https://github.com/yaes-io/yaes/issues/253","fix":"https://github.com/yaes-io/yaes/pull/268","reply":{"author":"rcardin","at":"2026-05-10","url":"https://github.com/yaes-io/yaes/issues/253#issuecomment-4416053217","role":"maintainer","text":"Good catch! @haskiindahouse, I assign it to you 🚀"},"reporter":"Mike Murunov"},{"id":"gh:business4s/workflows4s#258","headline":"Diagram drops the last step of a three-step interruption path","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-06-08","found":"2026-05-10","reported":"2026-05-10","project":{"name":"workflows4s","url":"https://github.com/business4s/workflows4s","logo":"assets/logos/workflows4s.png","stars":131,"language":"Scala","downloads":[]},"ticket":"https://github.com/business4s/workflows4s/issues/258","fix":"https://github.com/business4s/workflows4s/pull/265","reply":{"author":"Krever","at":"2026-05-10","url":"https://github.com/business4s/workflows4s/issues/258#issuecomment-4416241724","role":"maintainer","text":"Thanks, happy to accept a PR"},"reporter":"Mike Murunov"},{"id":"gh:business4s/workflows4s#259","headline":"Diagrams draw a Loop that has not started as executed","summary":"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.","class":"Wrong-result bug","severity":"low","status":"fixed","status_since":"2026-06-04","found":"2026-05-10","reported":"2026-05-10","project":{"name":"workflows4s","url":"https://github.com/business4s/workflows4s","logo":"assets/logos/workflows4s.png","stars":131,"language":"Scala","downloads":[]},"ticket":"https://github.com/business4s/workflows4s/issues/259","fix":"https://github.com/business4s/workflows4s/pull/264","reply":{"author":"Krever","at":"2026-05-10","url":"https://github.com/business4s/workflows4s/issues/259#issuecomment-4416218085","role":"maintainer","text":"Thanks, happy to accept a PR!"},"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1041","headline":"Signed add overflow check misses negative overflow, so MinValue plus -1 wraps","summary":"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.","class":"Wrong-result bug","severity":"low","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1041","fix":"https://github.com/propensive/soundness/pull/1083","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1042","headline":"Short ** Double truncates its result to a Short and gives wrong results","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1042","fix":"https://github.com/propensive/soundness/pull/1076","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1043","headline":"Byte and Short hex, octal and binary output sign-extends to 32 bits","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1043","fix":"https://github.com/propensive/soundness/pull/1079","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1044","headline":"Float and Double modulo gives wrong results for a negative divisor","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1044","fix":"https://github.com/propensive/soundness/pull/1082","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1045","headline":"A Rankine delta added to a Temperature uses the inverted 9/5 factor","summary":"A Rankine quantity converts with 9/5 instead of 5/9 when added or subtracted. So 9 R added to 273.15 K gives 289.35 K instead of 278.15 K.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1045","fix":"https://github.com/propensive/soundness/pull/1080","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1046","headline":"Levenshtein distance is 0 when the left string is empty","summary":"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.","class":"Wrong-result bug","severity":"low","status":"fixed","status_since":"2026-05-17","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1046","fix":"https://github.com/propensive/soundness/pull/1094","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1049","headline":"Compass 8-point list has Southwest twice and no Northwest","summary":"Compass.points8 ends with Southwest instead of Northwest, so lookups in the northwest quadrant around 315 degrees return Southwest.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1049","fix":"https://github.com/propensive/soundness/pull/1078","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1050","headline":"CSV writer does not quote cells that contain the delimiter or line breaks","summary":"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.","class":"Data-loss bug","severity":"high","status":"fixed","status_since":"2026-05-17","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1050","fix":"https://github.com/propensive/soundness/pull/1093","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1054","headline":"Raster crop uses the bottom offset for the top edge and keeps wrong rows","summary":"crop(top = 10) keeps the wrong rows because the pixel mapping offsets Y by bottom instead of top. The crop comes out flipped, and no error appears.","class":"Wrong-result bug","severity":"high","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1054","fix":"https://github.com/propensive/soundness/pull/1075","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1055","headline":"Signal numbers are off by two and Hup gives -1","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1055","fix":"https://github.com/propensive/soundness/pull/1074","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1056","headline":"Session store uses an unsynchronized HashMap shared across request threads","summary":"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.","class":"Concurrency bug","severity":"high","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1056","fix":"https://github.com/propensive/soundness/pull/1073","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1057","headline":"Long digest drops the top and bottom bytes, so distinct Longs can collide","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1057","fix":"https://github.com/propensive/soundness/pull/1072","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1058","headline":"Ordinal subsequent(size) returns one element more than requested","summary":"subsequent builds an interval one longer than size, so the Foreground and Background ANSI style bit fields in escapade overlap by one bit each.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1058","fix":"https://github.com/propensive/soundness/pull/1071","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1059","headline":"Two manifest attribute objects use the misspelled name Specifacation","summary":"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.","class":"API-contract bug","severity":"low","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1059","fix":"https://github.com/propensive/soundness/pull/1070","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1060","headline":"Topological sort throws NoSuchElementException on cyclic input","summary":"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.","class":"API-contract bug","severity":"low","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1060","fix":"https://github.com/propensive/soundness/pull/1081","reply":null,"reporter":"Mike Murunov"},{"id":"gh:propensive/soundness#1061","headline":"Semver comparison says equal versions are less and releases sort below prereleases","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-13","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Soundness","url":"https://github.com/propensive/soundness","logo":null,"stars":114,"language":"Scala","downloads":[]},"ticket":"https://github.com/propensive/soundness/issues/1061","fix":"https://github.com/propensive/soundness/pull/1069","reply":null,"reporter":"Mike Murunov"},{"id":"gh:flink-extended/flink-scala-api#373","headline":"MappedTypeInformation hashCode ignores the mapper and adds needless collisions","summary":"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.","class":"API-contract bug","severity":"info","status":"confirmed","status_since":"2026-09-05","found":"2026-05-10","reported":"2026-05-10","project":{"name":"flink-scala-api","url":"https://github.com/flink-extended/flink-scala-api","logo":"assets/logos/flink-scala-api.png","stars":113,"language":"Scala","downloads":[]},"ticket":"https://github.com/flink-extended/flink-scala-api/issues/373","fix":null,"reply":{"author":"novakov-alexey","at":"2026-09-05","url":"https://github.com/flink-extended/flink-scala-api/issues/373#issuecomment-5551784509","role":"maintainer","text":"Please provide a PR"},"reporter":"Mike Murunov"},{"id":"gh:flink-extended/flink-scala-api#374","headline":"Option comparator error message stops mid-sentence","summary":"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.","class":"Diagnostics bug","severity":"info","status":"confirmed","status_since":"2026-09-05","found":"2026-05-10","reported":"2026-05-10","project":{"name":"flink-scala-api","url":"https://github.com/flink-extended/flink-scala-api","logo":"assets/logos/flink-scala-api.png","stars":113,"language":"Scala","downloads":[]},"ticket":"https://github.com/flink-extended/flink-scala-api/issues/374","fix":null,"reply":{"author":"novakov-alexey","at":"2026-09-05","url":"https://github.com/flink-extended/flink-scala-api/issues/374#issuecomment-5551778756","role":"maintainer","text":"Please provide a PR"},"reporter":"Mike Murunov"},{"id":"gh:flink-extended/flink-scala-api#375","headline":"Coproduct serializer breaks for sealed types with 129 or more subtypes","summary":"Writes and reads of the subtype index use a signed byte, so index 128 and up becomes negative. Deserialization then throws ArrayIndexOutOfBoundsException.","class":"Crash","severity":"medium","status":"confirmed","status_since":"2026-09-05","found":"2026-05-10","reported":"2026-05-10","project":{"name":"flink-scala-api","url":"https://github.com/flink-extended/flink-scala-api","logo":"assets/logos/flink-scala-api.png","stars":113,"language":"Scala","downloads":[]},"ticket":"https://github.com/flink-extended/flink-scala-api/issues/375","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:leanprover-community/quote4#126","headline":"Qq match in a recursive partial def fails with a kernel error","summary":"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.","class":"Crash","severity":"medium","status":"reported","status_since":"2026-01-27","found":"2026-01-27","reported":"2026-01-27","project":{"name":"quote4","url":"https://github.com/leanprover-community/quote4","logo":"assets/logos/quote4.png","stars":111,"language":"Lean","downloads":[]},"ticket":"https://github.com/leanprover-community/quote4/issues/126","fix":null,"reply":null,"reporter":"Vasilii Nesterov"},{"id":"gh:takapi327/ldbc#710","headline":"Pooled connection validation failures never emit a debug message","summary":"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.","class":"Diagnostics bug","severity":"low","status":"fixed","status_since":"2026-05-16","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/710","fix":"https://github.com/takapi327/ldbc/pull/723","reply":{"author":"takapi327","at":"2026-05-16","url":"https://github.com/takapi327/ldbc/issues/710#issuecomment-4467557968","role":"maintainer","text":"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."},"reporter":"Mike Murunov"},{"id":"gh:takapi327/ldbc#711","headline":"Batch query builder breaks on a lowercase values keyword","summary":"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.","class":"API-contract bug","severity":"low","status":"fixed","status_since":"2026-05-16","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/711","fix":"https://github.com/takapi327/ldbc/pull/724","reply":{"author":"takapi327","at":"2026-05-16","url":"https://github.com/takapi327/ldbc/issues/711#issuecomment-4467577500","role":"maintainer","text":"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!"},"reporter":"Mike Murunov"},{"id":"gh:takapi327/ldbc#712","headline":"Statement.execute throws a MatchError for SHOW, DESCRIBE and EXPLAIN","summary":"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.","class":"Crash","severity":"medium","status":"fixed","status_since":"2026-05-17","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/712","fix":"https://github.com/takapi327/ldbc/pull/725","reply":null,"reporter":"Mike Murunov"},{"id":"gh:takapi327/ldbc#713","headline":"Code generation maps MEDIUMBLOB columns to TINYBLOB","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-20","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/713","fix":"https://github.com/takapi327/ldbc/pull/730","reply":{"author":"takapi327","at":"2026-05-17","url":"https://github.com/takapi327/ldbc/issues/713#issuecomment-4470053981","role":"maintainer","text":"I went ahead and opened #730 with the one-line fix before seeing your comment, which was my mistake. … Really appreciate the careful reports."},"reporter":"Mike Murunov"},{"id":"gh:takapi327/ldbc#715","headline":"ResultSet.isFirst returns true for every row after the first","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-17","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/715","fix":"https://github.com/takapi327/ldbc/pull/727","reply":null,"reporter":"Mike Murunov"},{"id":"gh:takapi327/ldbc#716","headline":"Text-protocol string escape misses NUL, newline and other characters","summary":"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.","class":"Security vulnerability","severity":"medium","status":"fixed","status_since":"2026-05-17","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/716","fix":"https://github.com/takapi327/ldbc/pull/728","reply":null,"reporter":"Mike Murunov"},{"id":"gh:takapi327/ldbc#717","headline":"Code generation maps DOUBLE and REAL columns to FLOAT and loses precision","summary":"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.","class":"Wrong-result bug","severity":"high","status":"fixed","status_since":"2026-05-21","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/717","fix":"https://github.com/takapi327/ldbc/pull/737","reply":{"author":"takapi327","at":"2026-05-17","url":"https://github.com/takapi327/ldbc/issues/717#issuecomment-4470037788","role":"maintainer","text":"For this one, your analysis is correct and the suggested fix looks great."},"reporter":"Mike Murunov"},{"id":"gh:takapi327/ldbc#718","headline":"Chained TLS builder calls drop the earlier setting","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-17","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/718","fix":"https://github.com/takapi327/ldbc/pull/729","reply":null,"reporter":"Mike Murunov"},{"id":"gh:takapi327/ldbc#719","headline":"Charset version check reverses its test, so it drops gb18030 on MySQL 8","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"fixed","status_since":"2026-05-17","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/719","fix":"https://github.com/takapi327/ldbc/pull/726","reply":null,"reporter":"Mike Murunov"},{"id":"gh:takapi327/ldbc#720","headline":"Schema DSL rejects VARCHAR lengths above 255","summary":"The VARCHAR check uses the CHAR limit, so VARCHAR(500) fails to compile, although MySQL allows up to 65,535 bytes.","class":"API-contract bug","severity":"low","status":"fixed","status_since":"2026-05-20","found":"2026-05-10","reported":"2026-05-10","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/720","fix":"https://github.com/takapi327/ldbc/pull/738","reply":{"author":"takapi327","at":"2026-05-17","url":"https://github.com/takapi327/ldbc/issues/720#issuecomment-4470039397","role":"maintainer","text":"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."},"reporter":"Mike Murunov"},{"id":"gh:takapi327/ldbc#731","headline":"Circuit breaker lets many test requests through in half-open state","summary":"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.","class":"Concurrency bug","severity":"medium","status":"fixed","status_since":"2026-05-20","found":"2026-05-18","reported":"2026-05-18","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/731","fix":"https://github.com/takapi327/ldbc/pull/734","reply":null,"reporter":"Mike Murunov"},{"id":"gh:takapi327/ldbc#732","headline":"Pool resetConnection commits the unfinished transaction of a returned connection","summary":"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.","class":"Data-loss bug","severity":"high","status":"fixed","status_since":"2026-05-20","found":"2026-05-18","reported":"2026-05-18","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/732","fix":"https://github.com/takapi327/ldbc/pull/735","reply":null,"reporter":"Mike Murunov"},{"id":"gh:takapi327/ldbc#733","headline":"The cp850 charset declares two bytes per character, not one","summary":"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.","class":"Wrong-result bug","severity":"low","status":"fixed","status_since":"2026-05-20","found":"2026-05-18","reported":"2026-05-18","project":{"name":"ldbc","url":"https://github.com/takapi327/ldbc","logo":null,"stars":110,"language":"Scala","downloads":[]},"ticket":"https://github.com/takapi327/ldbc/issues/733","fix":"https://github.com/takapi327/ldbc/pull/736","reply":null,"reporter":"Mike Murunov"},{"id":"gh:scalus3/scalus#272","headline":"NonNegativeInterval hashCode ignores reduced form, so hash sets break","summary":"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.","class":"API-contract bug","severity":"low","status":"fixed","status_since":"2026-05-11","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Scalus","url":"https://github.com/scalus3/scalus","logo":"assets/logos/scalus.png","stars":105,"language":"Scala","downloads":[{"registry":"npm","package":"scalus","count":44884,"period":"30 days","url":"https://www.npmjs.com/package/scalus","basis":"the npm package names the repository scalus3/scalus"}]},"ticket":"https://github.com/scalus3/scalus/issues/272","fix":"https://github.com/scalus3/scalus/pull/277","reply":{"author":"fernweh0","at":"2026-05-11","url":"https://github.com/scalus3/scalus/issues/272#issuecomment-4421545378","role":"maintainer","text":"@haskiindahouse nice catch! Fixed"},"reporter":"Mike Murunov"},{"id":"gh:scalus3/scalus#273","headline":"BLS12-381 point wrappers override equals but not hashCode","summary":"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.","class":"API-contract bug","severity":"medium","status":"fixed","status_since":"2026-05-11","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Scalus","url":"https://github.com/scalus3/scalus","logo":"assets/logos/scalus.png","stars":105,"language":"Scala","downloads":[{"registry":"npm","package":"scalus","count":44884,"period":"30 days","url":"https://www.npmjs.com/package/scalus","basis":"the npm package names the repository scalus3/scalus"}]},"ticket":"https://github.com/scalus3/scalus/issues/273","fix":"https://github.com/scalus3/scalus/pull/276","reply":{"author":"fernweh0","at":"2026-05-11","url":"https://github.com/scalus3/scalus/issues/273#issuecomment-4420957351","role":"maintainer","text":"@haskiindahouse Thank you for reporting!"},"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/geny#104","headline":"Bytes overrides equals but not hashCode, so HashMap lookups miss equal keys","summary":"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.","class":"API-contract bug","severity":"medium","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"geny","url":"https://github.com/com-lihaoyi/geny","logo":null,"stars":98,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/geny/issues/104","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:com-lihaoyi/geny#105","headline":"maxBy and minBy return null or zero for an empty generator, without an error","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"geny","url":"https://github.com/com-lihaoyi/geny","logo":null,"stars":98,"language":"Scala","downloads":[]},"ticket":"https://github.com/com-lihaoyi/geny/issues/105","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:business4s/decisions4s#101","headline":"Markdown decision table rows get one column too few when some rules lack annotations","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"confirmed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"decisions4s","url":"https://github.com/business4s/decisions4s","logo":"assets/logos/decisions4s.png","stars":85,"language":"Scala","downloads":[]},"ticket":"https://github.com/business4s/decisions4s/issues/101","fix":null,"reply":{"author":"Krever","at":"2026-05-10","url":"https://github.com/business4s/decisions4s/issues/101#issuecomment-4416198257","role":"maintainer","text":"Thanks, will be happy to accept the PR :)"},"reporter":"Mike Murunov"},{"id":"gh:business4s/decisions4s#102","headline":"Distinct hit policy treats +0.0 and -0.0 as the same output","summary":"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.","class":"Wrong-result bug","severity":"low","status":"fixed","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"decisions4s","url":"https://github.com/business4s/decisions4s","logo":"assets/logos/decisions4s.png","stars":85,"language":"Scala","downloads":[]},"ticket":"https://github.com/business4s/decisions4s/issues/102","fix":"https://github.com/business4s/decisions4s/pull/105","reply":{"author":"Krever","at":"2026-05-10","url":"https://github.com/business4s/decisions4s/issues/102#issuecomment-4416302386","role":"maintainer","text":"I made a fix for this in … The approach I went for is to use a TC instance to make the logic explicit"},"reporter":"Mike Murunov"},{"id":"gh:business4s/decisions4s#103","headline":"The diagnostics printer throws at construction for a table with no input fields","summary":"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.","class":"Crash","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"decisions4s","url":"https://github.com/business4s/decisions4s","logo":"assets/logos/decisions4s.png","stars":85,"language":"Scala","downloads":[]},"ticket":"https://github.com/business4s/decisions4s/issues/103","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:mattlianje/etl4s#20","headline":"Lineage JSON export is invalid when names contain quotes or backslashes","summary":"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.","class":"API-contract bug","severity":"medium","status":"confirmed","status_since":"2026-06-11","found":"2026-05-10","reported":"2026-05-10","project":{"name":"etl4s","url":"https://github.com/mattlianje/etl4s","logo":"assets/logos/etl4s.png","stars":79,"language":"Scala","downloads":[]},"ticket":"https://github.com/mattlianje/etl4s/issues/20","fix":null,"reply":{"author":"mattlianje","at":"2026-06-11","url":"https://github.com/mattlianje/etl4s/issues/20#issuecomment-4677381780","role":"maintainer","text":"BUT... this is definitely a bug ... happy to take a pull 🙇"},"reporter":"Mike Murunov"},{"id":"gh:mattlianje/etl4s#21","headline":"Lineage chain and combine return identical lineages despite different doc comments","summary":"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.","class":"Specification gap","severity":"low","status":"confirmed","status_since":"2026-06-11","found":"2026-05-10","reported":"2026-05-10","project":{"name":"etl4s","url":"https://github.com/mattlianje/etl4s","logo":"assets/logos/etl4s.png","stars":79,"language":"Scala","downloads":[]},"ticket":"https://github.com/mattlianje/etl4s/issues/21","fix":null,"reply":{"author":"mattlianje","at":"2026-06-11","url":"https://github.com/mattlianje/etl4s/issues/21#issuecomment-4677433557","role":"maintainer","text":"Mea culpa - this is rather confusing and has confused others before … will bounce some API ideas w/ you here before the next release"},"reporter":"Mike Murunov"},{"id":"gh:marijnheule/drat-trim#42","headline":"lrat-check reports VERIFIED for a proof that proves nothing","summary":"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.","class":"Soundness bug","severity":"critical","status":"reported","status_since":"2026-09-29","found":"2026-09-29","reported":"2026-09-29","project":{"name":"DRAT-trim","url":"https://github.com/marijnheule/drat-trim","logo":null,"stars":72,"language":"C","downloads":[]},"ticket":"https://github.com/marijnheule/drat-trim/issues/42","fix":"https://github.com/marijnheule/drat-trim/pull/43","reply":null,"reporter":"Mike Murunov"},{"id":"gh:tarao/record4s#169","headline":"Circe encoder emits record fields in hash order, not declaration order","summary":"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.","class":"API-contract bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"record4s","url":"https://github.com/tarao/record4s","logo":"assets/logos/record4s.svg","stars":68,"language":"Scala","downloads":[]},"ticket":"https://github.com/tarao/record4s/issues/169","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:siriusxm/snapshot4s#204","headline":"The snapshot representation drops the ESC character and hides ANSI differences","summary":"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.","class":"Wrong-result bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"snapshot4s","url":"https://github.com/siriusxm/snapshot4s","logo":"assets/logos/snapshot4s.png","stars":67,"language":"Scala","downloads":[]},"ticket":"https://github.com/siriusxm/snapshot4s/issues/204","fix":"https://github.com/siriusxm/snapshot4s/pull/231","reply":null,"reporter":"Mike Murunov"},{"id":"gh:strymonas/strymonas-scala#10","headline":"Code generator throws divide-by-zero when the known divisor is zero","summary":"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.","class":"Crash","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"strymonas","url":"https://github.com/strymonas/strymonas-scala","logo":"assets/logos/strymonas.png","stars":56,"language":"Scala","downloads":[]},"ticket":"https://github.com/strymonas/strymonas-scala/issues/10","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:strymonas/strymonas-scala#11","headline":"Cooked.collect returns the stream elements in reverse order","summary":"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.","class":"Wrong-result bug","severity":"high","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"strymonas","url":"https://github.com/strymonas/strymonas-scala","logo":"assets/logos/strymonas.png","stars":56,"language":"Scala","downloads":[]},"ticket":"https://github.com/strymonas/strymonas-scala/issues/11","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:xebia-functional/Unwrapped#136","headline":"zipWithIndex keeps its counter across runs of the same stream","summary":"The index variable sits outside the stream body. If a second run consumes the same stream, the index continues from the first run instead of at zero.","class":"Wrong-result bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Unwrapped","url":"https://github.com/xebia-functional/Unwrapped","logo":"assets/logos/unwrapped.png","stars":40,"language":"Scala","downloads":[]},"ticket":"https://github.com/xebia-functional/Unwrapped/issues/136","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:xebia-functional/Unwrapped#137","headline":"PutPartiallyApplied equals throws ClassCastException for values of other types","summary":"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.","class":"Crash","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Unwrapped","url":"https://github.com/xebia-functional/Unwrapped","logo":"assets/logos/unwrapped.png","stars":40,"language":"Scala","downloads":[]},"ticket":"https://github.com/xebia-functional/Unwrapped/issues/137","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:FunktionalIO/pillars#259","headline":"RabbitMQ config ignores automaticTopologyRecovery, so a false value has no effect","summary":"The config conversion does not copy automaticTopologyRecovery to the client config. The client still recovers topology when the user disables the setting.","class":"Wrong-result bug","severity":"medium","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Pillars","url":"https://github.com/FunktionalIO/pillars","logo":"assets/logos/pillars.png","stars":33,"language":"Scala","downloads":[]},"ticket":"https://github.com/FunktionalIO/pillars/issues/259","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:FunktionalIO/pillars#260","headline":"Flag not-found message runs the flag name into the words 'not found'","summary":"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.","class":"Diagnostics bug","severity":"info","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Pillars","url":"https://github.com/FunktionalIO/pillars","logo":"assets/logos/pillars.png","stars":33,"language":"Scala","downloads":[]},"ticket":"https://github.com/FunktionalIO/pillars/issues/260","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:FunktionalIO/pillars#261","headline":"Server drops the recorder IO, so the response body size metric never records","summary":"The server-side recorder builds the metric effect inside Option.foreach, so the effect never runs. The response body size histogram stays empty.","class":"Wrong-result bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Pillars","url":"https://github.com/FunktionalIO/pillars","logo":"assets/logos/pillars.png","stars":33,"language":"Scala","downloads":[]},"ticket":"https://github.com/FunktionalIO/pillars/issues/261","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:FunktionalIO/pillars#262","headline":"Redaction strategy encodes as OptIn while its decoder expects optin","summary":"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.","class":"API-contract bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Pillars","url":"https://github.com/FunktionalIO/pillars","logo":"assets/logos/pillars.png","stars":33,"language":"Scala","downloads":[]},"ticket":"https://github.com/FunktionalIO/pillars/issues/262","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:FunktionalIO/pillars#264","headline":"The HTTP client declares body size histograms but never writes them","summary":"The client metrics middleware declares request and response body size histograms but never records them. Dashboards show empty panels, and nothing warns at startup.","class":"Wrong-result bug","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Pillars","url":"https://github.com/FunktionalIO/pillars","logo":"assets/logos/pillars.png","stars":33,"language":"Scala","downloads":[]},"ticket":"https://github.com/FunktionalIO/pillars/issues/264","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:FunktionalIO/pillars#265","headline":"The config encoder throws MatchError on a custom SSL context","summary":"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.","class":"Crash","severity":"low","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Pillars","url":"https://github.com/FunktionalIO/pillars","logo":"assets/logos/pillars.png","stars":33,"language":"Scala","downloads":[]},"ticket":"https://github.com/FunktionalIO/pillars/issues/265","fix":null,"reply":null,"reporter":"Mike Murunov"},{"id":"gh:FunktionalIO/pillars#267","headline":"Doobie config drops the system schema, app schema and debug settings","summary":"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.","class":"Wrong-result bug","severity":"medium","status":"reported","status_since":"2026-05-10","found":"2026-05-10","reported":"2026-05-10","project":{"name":"Pillars","url":"https://github.com/FunktionalIO/pillars","logo":"assets/logos/pillars.png","stars":33,"language":"Scala","downloads":[]},"ticket":"https://github.com/FunktionalIO/pillars/issues/267","fix":null,"reply":null,"reporter":"Mike Murunov"}]}