🏡


  1. September 23, 2026
    1. 🔗 Probably Dance The Mundanity of Excellence, Small Wins, and Why You Should Fix Bugs Before Writing New Features rss

      I'm not good at prioritizing tasks, but there is one rule I follow and that I can justify very well: If something worked yesterday and is broken today, I will drop whatever I'm doing and fix that thing. No matter how small and seemingly unimportant the broken feature is.

      To justify this I will quote from the paper "The Mundanity of Excellence" by Daniel F. Chambliss:

      Superlative performance is really a confluence of dozens of small skills or activities, each one learned or stumbled upon, which have been carefully drilled into habit and then are fitted together in a synthesized whole. There is nothing extraordinary or super-human in any one of those actions; only the fact that they are done consistently and correctly, and all together, produce excellence. When a swimmer learns a proper flip turn in the freestyle races, she will swim the race a bit faster; then a streamlined push off from the wall, with the arms squeezed together over the head, and a little faster; then how to place the hands in the water so no air is cupped in them; then how to lift them over the water; then how to lift weights to properly build strength, and how to eat the right foods, and to wear the best suits for racing, and on and on. Each of those tasks seems small in itself, but each allows the athlete to swim a bit faster. And having learned and consistently practiced all of them together, and many more besides, the swimmer may compete in the Olympic Games. The winning of a gold medal is nothing more than the synthesis of a countless number of such little things

      I claim that the same thing is true for software, and what's important is to lock in those small wins.

      I learned this lesson when working in video games. The company I worked for had trouble shipping high quality games. We didn't ship bad games, but we just couldn't compete with the likes of Blizzard or Nintendo. Since then I have worked at different places to learn how to ship high quality software, and mostly learned that there is no magic. You just have simple improvements like

      • better processes that aren't too surprising to anyone (e.g. more tests, more code review, ensuring that there are never any broken builds etc.)
      • shorter feedback loops so that you learn quickly when there are issues
      • better coding practices and higher standards for what code is acceptable to push (e.g. if it's not easy to see that code is correct, don't push it)
      • priority for bug fixes instead of fixing things when you next feel like you have some free time

      These are equivalent to the examples in the "mundanity of excellence" quote in that they lead to better programmers. But I want to focus on the last one because if the processes lead to excellent programmers, the bugfixes are required for excellent programs.

      When software reaches a certain level of complexity you can no longer get improvements with big wins. It's similar to the olympic swimmer example from the quote above: you need lots of little improvements. Things like tooltips, shortcuts, customization, responsive performance or correct handling of edge cases and niche use cases. These are the things that elevate your software from "works and mostly does the job" to "people like it and like working in it". But these are also the things that tend to break and stay broken. If you don't keep these things working, your software will always erode back down to a 7/10 quality level.

      If you work at a good organization, all of this may sound trivial to you. But I can assure you that most places do not work like this and it's surprising to lots of programmers that bug fixes, even for features that are of low importance, should take priority over work on new, highly important features. As a very visual demonstration of this, here is a comparison of all the details that worked in Far Cry 2 and were broken in Far Cry 5:

      Far Cry 2 came out in 2008 and ran on a Playstation 3, Far Cry 5 came out ten years later on the Playstation 4, a much more powerful machine that was much easier to program. There is no good reason why so many things should be worse in Far Cry 5. The only reason is that these are details, and details tend to break and this is what it looks like when that has gone on for ten years. Far Cry 2 was a great game (yes, there is one big complaint that everyone has, but ignoring that it was a great game) and Far Cry 5 is just meh. Many developers over the years thought that details like this weren't that important to keep working, and as a result you get a much worse game.

      And it's not just game development. Condition variables had been broken in glibc since 2016 and I have been trying to get them fixed by submitting patches since 2020 and haven't had much luck until I finally got through in 2025. They mostly worked and only broke occasionally, so people just didn't prioritize it.

      But if you actually want to ship good software, you have to do like the "mundanity of excellence" quote says and lock in those improvements. Good software is a collection of small wins, and unfortunately small wins are the first thing to erode away if you don't lock them in.

      Automated tests obviously help for this and are a necessity past a certain level of complexity. But they can't catch everything and when something slips through, you just have to fix it first.

      Excuses

      Whenever you push for better practices, you get the same excuses. There is no time, we don't have the manpower, we're already behind and this feature was supposed to be released two weeks ago. These are all very real reasons why people are not doing things, and if you dismiss these complaints they get very mad at you because they really have these issues. It's just that from the outside, it's clear to see that they're stuck in a capability trap. The reason why you have no time is that you have bad practices. If you think you need more manpower to have more tests, you're doing it wrong. The tests would allow you to ship the same software with fewer people, not with more people. Unfortunately this is not true in the short term, (when adopting new practices, things get worse before they get better) so switching is hard.

      The article to read on this topic is "Nobody Ever Gets Credit for Fixing Problems that Never Happened: Creating and Sustaining Process Improvement".

      Quotes

      To back up that you should fix things early and lock in a high quality early, I'll quote from highly successful game developers. Here is Blizzard:

      There's this idea out there, that the reason why Blizzard polish is better is because we get six months at the end. And obviously we're very fortunate to get more time, but the polish doesn't happen at the end. The polish happens all along the way, from the very beginning. […] If you just leave it to the end, you're not going to get there.

      From the GDC talk “Making a Standard (and Trying to Stick to it!): Blizzard Design Philosophies” by Rob Pardo:

      https://www.youtube.com/watch?v=FhC0NaB6ock at 53:30

      Here are several quotes about id software:

      “Polish as you go. Don't depend on polish happening later. Always maintain constantly shippable code.”

      “It's incredibly important that your game can always be run by your team. Bulletproof your engine by providing defaults upon load failure.”

      “We are our own best testing team and should never allow anyone else to experience bugs or see the game crash. Don't waste others' time. Test thoroughly before checking in your code. No throwing it over the fence for testers to find and put a bug in the database and then fix it later. It's a wasteful cycle.”

      “As soon as you see a bug, you fix it. Do not continue on. If you don't fix your bugs your new code will be built on a buggy codebase and ensure an unstable foundation.”

      From the GDC Europe talk “The Early Days of id Software”
      https://www.youtube.com/watch?v=E2MIpi8pIvY

      Summary

      So why should bugfixes take priority? Let me slightly modify the quote from the beginning:

      Superlative software is really a confluence of hundreds of small polishes or features, each one designed or stumbled upon, which have been carefully locked in by tests and then are fitted together in a synthesized whole. There is nothing extraordinary or super-human in any one of those features; only the fact that they are done consistently and correctly, and all together, produce excellence.

    2. 🔗 WerWolv/ImHex Nightly Builds release

      Nightly

      4308ef2 Changelog

      • feat: Fix Data Inspector selection bounds and follow declared encodings (#2905)
      • feat: Added option to resize selected region (#2908)
      • feat: Add export differences button to diffing view (#2903)
      • fix: Use a 64 bit counter in IntelHexProvider::readRaw (#2912)
      • impr: Refuse invalid Data Inspector edits and guard against decode crashes (#2904)
      • feat: Table file dialog widget and directives (#2896)
  2. September 22, 2026
    1. 🔗 Simon Willison Claude Opus 5.5, GPT-6 Sol, GPT-6 Luna, and a new price war rss

      Yesterday was Grok 4.7 (pelicans) and MiMo v2.6 Flash/Pro (more pelicans). Today Anthropic released Claude Opus 5.5, and around an hour later OpenAI released GPT-6 Sol and GPT-6 Luna. It's going to take a while to get a good read on all of these new models, but here are my impressions so far.

      GPT-6 Sol and Luna are half the price of their GPT-5.6 equivalents

      GPT-5.6 Luna was already my favorite model for building applications against, because it combined excellent performance with being really cheap. Somehow GPT-6 Luna is half the price of that again - and GPT-6 Sol had a similar reduction compared to GPT-5.6 Sol.

      Here's what the pricing landscape looks like today:


      Model Input Cached input Output
      GPT-6 Luna $0.10/M $0.01/M $0.50/M
      GPT-5.6 Luna $0.20/M $0.02/M $1.20/M
      Grok 4.7 $2/M $0.50/M $6/M
      GPT-6 Sol $2/M $0.20/M $10/M
      GPT-5.6 Terra $2/M $0.20/M $12/M
      Claude Opus 5.5 $4/M $0.20/M $20/M
      GPT-5.6 Sol $4/M $0.40/M $20/M
      Claude Fable 5.1 $10/M $0.25/M $50/M
      GPT-6 Astra $10/M $1/M $50/M

      Note that GPT-5.6 has a scheduled 25% price increase for November, so GPT-6 is half the price of the promotional pricing for those models.

      (With GPT-5.6 Terra priced the same as GPT-6 Sol, any remaining reasons to use Terra just evaporated.)

      It's hard to overstate how competitive this pricing is. Grok 4.7 priced itself at $2/$6, less than half the price of GPT-5.6 Sol, but is now equally priced to GPT-6 Sol on input and closer on output.

      At $0.10/$0.50 GPT-6 Luna is one of the cheapest models OpenAI have ever released, beaten only by the far weaker GPT-4.1 Nano ($0.10/$0.40, April 2025) and GPT-5 Nano ($0.05/$0.40, August 2025).

      I rendered pelicans for GPT-6 Luna and for GPT-6 Sol, then I combined them all together in this comparison grid along with the GPT-5.6 pelicans. I like how you can instantly see that the 5.6 family chose bolder, brighter colors, while the 6 family is a lot more muted. I still think GPT-6 Astra on max produced the best pelican.

      A grid of pelicans for six GPT models at different thinking efforts.

      Claude Opus 5.5 got a price cut too

      Opus 5.5 looks like it addresses the biggest complaints people had about Opus in terms of its communication style. Thariq Shihipar:

      Opus 5.5 is the result of your feedback.

      It communicates clearly, it's cheaper per token than Opus 5.0 with the intelligence of Fable 5.1 it's very token efficient and works across every effort level.

      It's also meant to be better at Blender. I'm looking forward to putting it through its paces there.

      Opus 4.5, 4.6, 4.7, 4.8, and 5 all shared the same price: $5/million tokens for input and $25/million for output. 5.5 is a 20% reduction - $4/million and $20/million.

      The price for cache reads fell 60%. That's significant for longer agentic conversations, where 90%+ of input tokens are processed at cached token prices.

      The new price for Opus 5.5 is the same as the price for GPT-5.6 Sol, but that was before OpenAI dropped their Sol prices by half.

      GPT-6 Astra and Claude Fable 5.1 are both priced at $10/million input and $50/million output. The price war currently affects the next tier of models below that.

      Anthropic say that Sonnet 5.5 and Haiku 5.5 are coming soon. It's going to be interesting to see if Haiku can regain its price competitiveness at the lower end, given current Haiku 4.5 is $1/$5 while the latest GPT-6 Luna is one tenth of that price at $0.10/$0.50.

      Claude Opus 5.5 max over-thinks to the point of breaking

      In a first for my "Generate an SVG of a pelican riding a bicycle" test, Claude Opus 5.5 at "max" thinking level failed to return a response!

      It started by calling this "a classic test request", and then thought really, really hard about what it was doing:

      This is a classic test request, so I want to plan out a well-composed pelican with its distinctive beak and pouch riding a bicycle with proper wheels, frame, and pedals, set against a simple sky and ground backdrop. [...]

      Verifying the shin length checks out at roughly 95.2, close enough. Now I'm working out the near leg path from hip to knee to ankle, then sketching the foot shape resting on the pedal — outlining the heel, toe tips, and sole contour with a path using lines and curves to sit naturally on the pedal surface around y=478-494. [...]

      I like the fish sticking prominently out of the basket with the pelican eyeing it as a fun detail worth keeping. I'm also confirming the eye placement near the bill base matches typical pelican anatomy, and considering giving it a slightly happier expression. [...]

      The far leg reads correctly as passing behind the frame, so I'm moving on to check the chainring teeth and confirm layer ordering—the far crank arm should be mostly hidden by the seat tube and chainring. I'm settling on the final SVG's width and height attributes alongside the viewBox to ensure proper scaling, noting there's no text so no font-family is needed. [...]

      I was so excited to see this pelican... but then it stopped. Opus 5.5 has a 128,000 maximum output token limit (as do the other Claude models), and it hit that while it was still reasoning about the SVG!

      I tried a second time and got the same result. This makes me suspect that "max" is effectively useless - if it over-thinks to breaking point on a stupid SVG prompt I don't trust it not to do the same for more interesting work.

      (Those two failures each cost me $2.56 and took nearly 20 minutes.)

      Fable 5.1 on "max" didn't over-think and did give me the best pelican I've seen from any Anthropic model.

      Here are the Opus 5.5 pelicans, excluding 5.5 max.

      I also built this comparison grid comparing them with pelicans by Opus 5, Fable 5.1, and Sonnet 5:

      A grid of pelicans for four Claude models at different thinking efforts.

      Comparing different model vendors by how well they draw a pelican riding a bicycle may not make much sense now (if it ever did), but I'm still finding value in using them for comparisons of the same model families at different reasoning levels.

      I'm now using GPT-6 Sol and Claude Opus 5.5 as my default models in Codex and Claude Code. I've upgraded the Datasette Agent demo at agent.datasette.io to use GPT-6 Luna, and it seems to be fast and competent at both SQL queries and building HTML and JavaScript for Datasette Apps.

      You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.

    2. 🔗 backnotprop/plannotator v0.27.18 release

      Follow @plannotator on X for updates

      Missed recent releases? Release | Highlights
      ---|---
      v0.27.17 | Diagram files open in the diagram viewer, OpenCode switches model with agent, idle review stops polling the git remote, Tree is the default review view
      v0.27.16 | Themed diagrams on Mermaid 12, comment on any node or edge, patch-file review, embedded HTML documents render
      v0.27.15 | Plannotator TUI and Herdr Annotate announcement, element context on pinpoints, HTML links open as linked documents, All files panel, Classic diff default
      v0.27.14 | Pi plan progress survives compaction, Codex threads across rollout files, WSL browser setting, Mod+E edit mode
      v0.27.13 | Open a review on a specific base (--base, --diff-type), symlink containment on /api/doc, CI flake fix, Amp decision relay
      v0.27.12 | Unified decision control, token hover cards, local-vs-remote diff, approval notes
      v0.27.11 | OpenCode server leak fix, durable local feedback archive, unknown-subcommand fix
      v0.27.10 | Auto-viewed files on scroll, annotation undo/redo, OpenCode 2 slash commands restored, npm 12 agent terminal fix
      v0.27.9 | WebMCP browser-agent tools, HTML refresh from disk, host seams, lazy renderers, Windows uninstall fix
      v0.27.8 | Pi keeps its prompt cache across plan transitions, thumbs-up returns to HTML annotation, embed picker seam
      v0.27.7 | Pi host crash fix on Windows, Call Flow tree cap, jj fork-point base, plannotator knowledge skill + llms.txt
      v0.27.6 | Live app annotation lands on Pi, one interaction model for HTML pages

      What's New in v0.27.18

      A short release with four pull requests. Model pickers now show the models your installed Claude and Codex actually offer, including Opus 5.5, Fable 5.1, and the GPT-6 family, instead of a list we typed by hand. Unsent comments on a pull request review now survive new pushes. The Claude Agent SDK behind Ask AI also moves to a newer version.

      Model pickers come from your installed tools

      Every model picker in Plannotator used to read from lists written into the code. Ask AI, the review agents, Guided Review, and Code Tour each had their own copy for Claude and Codex, and the copies fell behind whenever a new model shipped. Opus 5.5 and Fable 5.1 could not be picked at all, code review still defaulted to Opus 5, and the Codex pickers were missing the GPT-6 models.

      The pickers now ask the tools you already have. Claude's list comes from your installed claude, and Codex's list comes from your installed codex. When you update either one, new models appear in Plannotator without a Plannotator release. The lookup runs once, the first time a picker opens, never at startup or on page load. It gives up after a few seconds and falls back to a short built-in list if the tool is missing, signed out, or broken. Ask AI and all the launchers share one list, so they can no longer disagree.

      Claude entries now carry their version: Opus 5.5 (latest), Fable 5.1 (latest), Sonnet 5 (latest), Haiku 4.5 (latest). The number comes from the model each name currently runs, so it updates on its own when Claude does. Code review defaults to the latest Opus, and Codex defaults to the model Codex marks as its default. Each picker only offers the effort levels the chosen model supports, and fast mode only appears where it works.

      Choices you saved before this release keep working. A saved pick that your tool no longer lists moves to the latest model in the same family, so an old Opus pick becomes the latest Opus and an old Sonnet pick stays Sonnet. A regular pick never turns into a 1M-context one. A retired Codex model moves to Codex's current default with fast mode turned off.

      (#1593)

      Unsent PR review comments survive new pushes

      Draft review comments were saved under a fingerprint of the exact diff. When a teammate pushed to the pull request, the diff changed, the fingerprint changed, and the next session could not find the comments. They stayed on disk but nothing pointed to them anymore.

      In PR reviews the draft is now also saved under the pull request itself (host, repository, number, and layer or full-stack view). Reopen the PR after new commits and your unsent comments come back. Each line comment remembers the code it was written on and a few lines around it. If that code is unchanged, the comment stays where it was. If it changed, the comment gets an Outdated tag in the sidebar, where you can still edit or delete it. Outdated comments are never moved to a guessed line. When you post the review, they go in the review summary with the code they were written on, not onto whatever line now sits at that number.

      Switching PRs, or switching between layer and full-stack view, in the same tab brings back that PR's unsent comments automatically with a short notice. Sending, approving, or closing clears the saved draft for every PR the session touched, so submitted comments do not reappear after a later push. After a push, files you had marked Viewed are unmarked, since new commits may have changed them. Local reviews are unchanged. Drafts saved before this release are still restored when the diff is unchanged, but not after a push.

      (#1592, part of #1590, reported by @RobertoArtiles)

      Additional Changes

      • Claude Agent SDK 0.3.273. Ask AI's Claude provider moves from 0.3.260. One behavior change comes with it: when Claude changes directory during a conversation, follow-up questions now start in that directory instead of resetting. (#1594)
      • Docs. The AI features guide no longer lists models by name, since the pickers now show whatever your installed tools offer.
      • @plannotator/ui 0.46.0 for hosts. The hand-written model list exports are removed in favor of the shared catalog in @plannotator/core 0.25.6. packages/ui/HANDOFF.md lists every removed export.

      Install / Update

      macOS / Linux:

      curl -fsSL https://plannotator.ai/install.sh | bash
      

      Windows:

      irm https://plannotator.ai/install.ps1 | iex
      

      Claude Code Plugin: Run /plugin in Claude Code, find plannotator , and click "Update now".

      Pi: Update @plannotator/pi-extension to 0.27.18 and restart Pi.

      OpenCode: Clear cache and restart:

      rm -rf ~/.bun/install/cache/@plannotator
      

      What's Changed

      • chore(deps): bump @anthropic-ai/claude-agent-sdk to 0.3.273 by @backnotprop in #1594
      • feat(ai): discover models from installed tools instead of hand-maintained lists by @backnotprop in #1593
      • fix(review): keep unsent PR review comments across new commits by @backnotprop in #1592
      • fix: v0.27.18 QA regressions (PR drafts, discovered model catalogs) by @backnotprop in #1595

      Community

      @RobertoArtiles reported #1590 with an exact reproduction and a proposed design: key review drafts by what is being reviewed rather than the diff's content, and mark comments outdated instead of dropping them, the way GitHub does. This release ships that design for pull request reviews. Local reviews are still open under the same issue.

      Full Changelog : v0.27.17...v0.27.18

    3. 🔗 earendil-works/pi v0.87.1 release

      New Features

      • Latest frontier models — Use Claude Opus 5.5, GPT-6 Sol, and GPT-6 Luna through supported providers, including GitHub Copilot. See Choose a Model.
      • Grok 4.7 by default for xAI — New xAI sessions now default to Grok 4.7. See Provider Authentication.

      Added

      • Added inherited Claude Opus 5.5, GPT-6 Sol, and GPT-6 Luna support for GitHub Copilot.
      • Added inherited GPT-6 Sol and GPT-6 Luna support for OpenAI API keys and OpenAI Codex subscriptions.
      • Added inherited Claude Opus 5.5 support for Anthropic with adaptive thinking and a 1M context window.

      Changed

      • Changed the default xAI model to Grok 4.7.

      Fixed

      • Fixed split-turn compaction summaries being refused by Claude Fable 5.1 by clearly separating the conversation and using continuation-oriented instructions (#9908 by @davidbrai).
      • Fixed missing or invalid --mode values being silently ignored instead of reporting an error and exiting with a nonzero status (#9045).
      • Fixed inherited image-only user messages being rejected by some OpenAI-compatible providers because they included an empty text part (#9797).
      • Fixed inherited Anthropic OAuth requests reporting an outdated Claude Code version.
    4. 🔗 HexRaysSA/plugin-repository commits sync repo: +6 releases, ~375 changed rss
      sync repo: +6 releases, ~375 changed
      
      ## New releases
      - [ida-mcp](https://github.com/hexrayssa/ida-mcp): 2026.916.2, 2026.916.1, 2026.915.3, 2026.915.2, 2026.915.1
      - [ida-nexus](https://github.com/hexrayssa/ida-nexus): 0.12.0
      
    5. 🔗 syncthing/syncthing v2.1.6-rc.3 release

      Major changes in 2.1

      • Devices and folders can now be grouped in the GUI by setting the new
        group attribute.

      • HTTP and HTTPS proxies with support for CONNECT can now be used, in
        addition to the existing support for SOCKS proxies (the environment
        variable all_proxy=https://...).

      • Block indexing can be turned off for folders where it's more desirable to
        optimise for reduced database size and overhead than minimal transfer
        size (the blockIndexing attribute on folder configuration).

      • GUI login session duration can be configured to be longer or shorter than
        the default one week, or set to infinitely long. The cookie path can also
        be adjusted. (The sessionCookieDurationS and sessionCookiePath
        attributes in the GUI configuration.)

      This release is also available as:

      • APT repository: https://apt.syncthing.net/

      • Docker image: docker.io/syncthing/syncthing:2.1.6-rc.3 or ghcr.io/syncthing/syncthing:2.1.6-rc.3
        ({docker,ghcr}.io/syncthing/syncthing:2 to follow just the major version)

      What's Changed

      Fixes

      • fix(model): introducers should not be able to add themselves to folders by @calmh in #10880
      • fix(gui): add accessible labels to buttons in Edit Device modal (fixes #10873) by @tomasz1986 in #10874
      • fix(model): properly error out when a temp file can't be created by @calmh in #10883
      • fix: disable keepalive on most outgoing HTTP connections by @calmh in #10891
      • fix(monitor): continue log writes when stdout is unavailable on detached Windows consoles (fixes #10882) by @Shablone in #10889
      • fix(gui): improve header and button color contrast (fixes #10488) by @giri256 in #10815

      New Contributors

      Full Changelog : v2.1.5...v2.1.6-rc.3

    6. 🔗 exe.dev Tales from the Software Factory: The Cron and the VM rss

      The other day, I built a boring bot that could tell me whether the model list in our LLM gateway was out of sync with one of our LLM providers. We deploy frequently enough that doing this dynamically has not been a priority, but it’s good to know when it’s time to update things. Years of experience kicked in: Shelley and I wrote the check as a test, and I used our CI system (Buildkite; it’s fine; next time it bugs me, it’s getting yeeted in favor of a vibe-coded improvement) to run a cron job that, when we need to do work, posts to Slack.

      As soon as I was done, I realized my mistake, and threw it all away. I started an exe.dev VM instead, to add to our fledgling army of bots. Now, instead of the output being “hey, you need to remove that deprecated model,” the output is a diff with the proposed change, together with a button to queue the change into our CI system (which, of course, leads into our CD system). My old mindset was wanting a bot to nag me into doing the thing. The new mindset is to have the bot take the task as close to the finish line as possible. This sort of state over a CI system, while possible, is unnecessarily miserable. If VMs are cheap, it’s better to have a little bot server that you can customize to your heart’s content.

      Don’t worry; the bot is checked in, right next to our other bots, all in our monorepo. The bots continuously deploy. Life is good. Good bot.

    7. 🔗 HexRaysSA/plugin-repository commits sync repo: +1 release rss
      sync repo: +1 release
      
      ## New releases
      - [augur](https://github.com/0xdea/augur): 0.10.1
      
    8. 🔗 syncthing/syncthing v2.1.6-rc.2: ## Major changes in 2.1 release
      • Devices and folders can now be grouped in the GUI by setting the new
        group attribute.

      • HTTP and HTTPS proxies with support for CONNECT can now be used, in
        addition to the existing support for SOCKS proxies (the environment
        variable all_proxy=https://...).

      • Block indexing can be turned off for folders where it's more desirable to
        optimise for reduced database size and overhead than minimal transfer
        size (the blockIndexing attribute on folder configuration).

      • GUI login session duration can be configured to be longer or shorter than
        the default one week, or set to infinitely long. The cookie path can also
        be adjusted. (The sessionCookieDurationS and sessionCookiePath
        attributes in the GUI configuration.)

      This release is also available as:

      • APT repository: https://apt.syncthing.net/

      • Docker image: docker.io/syncthing/syncthing:2.1.6-rc.2 or ghcr.io/syncthing/syncthing:2.1.6-rc.2
        ({docker,ghcr}.io/syncthing/syncthing:2 to follow just the major version)

      What's Changed

      Fixes

      • fix(model): introducers should not be able to add themselves to folders by @calmh in #10880
      • fix(gui): add accessible labels to buttons in Edit Device modal (fixes #10873) by @tomasz1986 in #10874
      • fix(model): properly error out when a temp file can't be created by @calmh in #10883
      • fix: disable keepalive on most outgoing HTTP connections by @calmh in #10891

      Full Changelog : v2.1.5...v2.1.6-rc.2

    9. 🔗 crmne/spotifast Spotifast v0.9.1 release

      Spotifast 0.9.1 finishes the move to the new name while keeping existing settings, sign-ins, and installations working. This is the last release with Fastpotify-named compatibility downloads. If you still use an older version, update to 0.9.1 before updating further, or install a newer Spotifast release manually.

      Download Spotifast: Mac · Windows · Windows ARM · Linux · Linux ARM · Flatpak

      The fastpotify-* files below are identical compatibility copies for older updaters that require those filenames. Use the Spotifast links above for a new installation. Releases after 0.9.1 will not publish old-named downloads.

      Fullscreen lyrics in
Spotifast

      Fullscreen lyrics, added in 0.9.0.

      Fixed

      • Your settings and sign-ins come with you. Existing profiles, cached music, window state, and protected credentials move to Spotifast. Custom device names stay unchanged, and Liked Songs pins keep their place. An updater trial leaves the old profile available if the update needs to roll back. By @crmne.
      • Spotifast is the primary package and executable name. Portable archives, Windows installation shortcuts, the Rust package, logs, and Linux media controls use the new name. Version 0.9.1 provides the final compatibility downloads for older updaters and accepts the new archive and macOS bundle identities used by future releases. Existing installation locations remain valid. By @crmne.
      • macOS update helpers stay inside the signed app. Updates no longer copy the helper executable out of its signed bundle. If a helper still cannot start, the error includes its exit status and a diagnostic log location. By @crmne; thanks @jorisw for reporting the startup failure. (#556)
      • Existing Omarchy integrations follow the renamed profile. The app updates its unmodified theme hook automatically and leaves customized hooks alone. By @crmne.

      If an older macOS build reports that its update helper exited before it was ready, install 0.9.1 from the DMG manually. The helper changes take effect for updates started from 0.9.1 onward.

      Custom Linux media scripts should use playerctl --player=spotifast. Cargo users may need cargo install --git https://github.com/crmne/spotifast --locked --force once to replace commands owned by the old package. See the upgrade and rename guide for details.

      Thanks

      @jorisw and everyone who reported upgrade problems and helped test the transition to Spotifast.

      Full changelog : v0.9.0...v0.9.1

    10. 🔗 MetaBrainz Picard 3 Release Candidate 4 rss

      We received good feedback on the previous release candidate 3, which resulted in several bugfixes and small improvements. The Picard team hence decided to release a fourth release candidate in preparation for the final release of Picard 3.0.

      It fixes an important performance issue, so if you are currently running any of previous alpha, beta or release candidate versions upgrade ASAP.
      It also fixes issues related to internationalization, causing some of existing translations to not actually show in the application (mainly constants).

      Please test, test, and test , report any issue on forums, matrix, or, ideally, on the ticket system. When reporting an issue, always provide details about your environment and a full debug log helps us a lot. Also now is a good time for final review and improvements of the translations.

      Download links and a detailed list of changes since Picard 3 release candidate 3 are available below. For a more detailed overview of what is new in Picard 3 please see the previous blog post Picard 3 Alpha Release.

      While we have all the major features implemented and with the latest bug fixes we are confident in the current code, this is still a pre-release and there might be bugs. If you use this, do so with care, backup your files and please report any issues you encounter.

      If you are updating from Picard 2, note that some of the changes are backward incompatible, hence we recommend you make a backup of your Picard.ini config file before trying this version. You can do so in Picard’s Options under Advanced > Maintenance.

      What’s new?

      Bugfixes

      • PICARD-3438 - Plugin action MENU setting not honored in "Plugin Tools" on main menu bar
      • PICARD-3439 - Unexpected font change in script editors after pasting
      • PICARD-3442 - Track duration tolerance (ignore_track_duration_difference_under) no longer suppresses the ~length diff in the Metadata box
      • PICARD-3446 - CLI does not run config upgrade hooks, leaving old config files unmigrated
      • PICARD-3448 - Some constants aren't properly translated, though translations are available
      • PICARD-3450 - Button titles on scripting options page are compressed
      • PICARD-3453 - Metadata box tag tooltips re-render Markdown per row, causing severe CPU load during save/selection

      Improvements

      • PICARD-3441 - Clarify read-only non-tag values in the metadata box (length, filepath)
      • PICARD-3444 - Bundle sqlite3 in packaged builds
      • PICARD-3449 - Rework Cover Art → Processing options layout to stack Tags/Files vertically
      • PICARD-3452 - Sort debug options by translated name and show CLI name in tooltip

      Download

      We appreciate your interest in trying this new version. Use with care, backup your files and please use theMetaBrainz community forums and the ticket system to give feedback and report bugs.

      For Windows and macOS you can download the release candidate version from the Picard download page. Linux users can run from source or try the "candidate" channel of the Picard snap package.

      Picard is free software and the source code is available on GitHub.

      Helping out

      We want to provide a polished release of Picard 3.0 that everyone can feel confident to upgrade to. To achieve this, we need the help from the MusicBrainz community.

      The easiest way to help us getting a great Picard 3.0 release is using and testing this release candidate. Please report bugs on the Picard issue tracker and provide feedback in the community forums.

      We also need help with translations, as there are a lot of new features and UI changes over previous Picard versions. We will avoid any further text changes before the final release, so now is the right time to help with translation on Weblate. Please see the translation instructions on the Wiki for details.

      If you are a software developer you are very welcomed to provide fixes and features. Picard is free software and the source code is available on GitHub. See Contributing to Picard on the Picard website to get started.

      You can also look at the new Plugin API and develop plugins for Picard or update your existing Picard 2 plugin to work with Picard 3.

      Acknowledgements

      Code contributions by Bob Swift, Laurent Monin and Philipp Wolfer.
      Translations were updated by BestSteve (Chinese (Traditional Han script)), Laurent Monin (French), Marc Riera (Catalan), MichTheOcelot (Spanish (Latin America)), pXF (Hungarian), st.esser (German), Vaclovas Intas (Lithuanian) and wileyfoxyx (Russian).

    11. 🔗 crmne/spotifast Spotifast 0.9.0 release

      0.9.0 adds fullscreen lyrics, custom playlist covers, and proxy settings. Playback and queues are more reliable when changing songs, switching Spotify Connect devices, or recovering from a dropped connection.

      Fullscreen lyrics in Spotifast
0.9.0

      New

      • Give lyrics the whole screen. Follow the current line with larger text and an album-art backdrop, keep playback controls within reach, and press Escape to return to your previous window. By @NotTanJune and @crmne. (#316)
      • Give your playlists their own covers. Choose a JPEG or PNG from Edit details → Change cover , preview it, and upload it to Spotify. Spotify may ask you to sign in again to approve image uploads. By @dyd4dsh7 and @crmne. (#329)
      • Choose how Spotifast connects. Settings now offer System, Off, HTTP, and SOCKS5 proxy modes, with proxy passwords kept in the native credential store. Local audio supports an unauthenticated HTTP proxy; other proxy types apply to the app's web requests. By @we11adam and @crmne. (#250)
      • Like the current song from the Linux command line. Run spotifast like, or bind it to a desktop shortcut. By @mgsloan. (#512)
      • Open Spotify search links directly in Spotifast. Launchers and Linux media controls can send a search to the app. More player, Queue, and Lyrics controls also use the existing translations. By @crmne.

      Fixed

      • Spotify Connect brings the song and queue back with you. Switching back to this computer transfers the active session's song, position, queue, and paused or playing state. By @crmne.
      • Queue a whole album in order, then add another song after it. Albums, singles, and EPs queue on this computer or another device. Rate-limited additions retry automatically after Spotify's requested wait, and failed additions no longer leave blank rows behind. Starting an album keeps separately queued copies under Playing next. By @crmne; thanks @organicFoil. (#547)
      • The song you choose stays selected and audible. Changing songs no longer lets discarded audio from the previous song cause an extra skip. Repeat mode also stays selected when starting another song. By @crmne; thanks @fernandoomorifaria and @wulffeld. (#535, #518)
      • A dropped playback connection keeps the queue. Reconnection restores the song and position, manually queued songs, playlist context, shuffle order, and Repeat mode. By @crmne; thanks @Self-Perfection. (#533)
      • Collections keep their familiar artwork while loading. Known covers and headers remain visible while complete details arrive, and softened covers no longer repeatedly decode and reload. By @hyperpuncher and @crmne. (#517, #551)
      • macOS windows close without crashing, and updates accept the renamed executable. Switching to the mini player also preserves the main window's size. By @mdevils and @crmne; thanks @sermelipharo. (#532, #538, #542)

      Thanks

      @NotTanJune, @dyd4dsh7, @we11adam, @mgsloan, @hyperpuncher, @mdevils, @organicFoil, @fernandoomorifaria, @wulffeld, @Self- Perfection, @sermelipharo, and everyone who contributed reports and helped test this release.

      Full changelog : v0.8.0...v0.9.0

    12. 🔗 MetaBrainz Welcome Silona Bonewald, new MetaBrainz Foundation Executive Director! rss

      We are very pleased to announce that the MetaBrainz Foundation has appointed Silona Bonewald as Executive Director, following the unfortunate passing of our Rob at the beginning of the year.

      Silona has served as Executive Director of IEEE SA Open and Vice President of Community Architecture at Hyperledger, part of the Linux Foundation. Earlier in her career she served as Director of InnerSource at PayPal and authored the widely used O’Reilly publication Understanding the InnerSource Checklist.

      Silona also founded the League of Technical Voters, a 501(c)(3) organization dedicated to government transparency through open source technology, and has since advised nonprofit and open source organizations including the Cardano community’s IntersectMBO, the Foundation for Public Code, and the Software Freedom Conservancy. She has served on the board of the Electronic Frontier Foundation’s Austin chapter in the past and holds standing relationships across the world wide standards communities, and more… If you would like to keep browsing Silona’s looong list of professional credentials you are welcome to follow her on LinkedIn.

      That’s all a long way to say that we are very excited to have Silona on board! The team is looking forward to working with Silona and you (our wonderful community) to carry Rob’s legacy forward.

      Please give Silona a warm welcome in the comments!

      Silona will also be hosting an AMA on 5 October 2026, at 17:00 UTC, on the forums (we will do another announcement regarding this, closer to the time), where you can post questions and share with Silona some of your dreams for the future of the MetaBrainz Foundation and its projects!

      P.S. reosarevok cleared the record on this topic at a recent dev meeting, and I think it needs to be shared here as well:

      So, most of you know that I’ve spent the last months dealing with ED issues. Which, as I have been told in private, is confusing wording - that is executive director issues, not erectile dysfunction issues.

      Hey! No laughing at the back!

      Welcome to the team, Silona.

    13. 🔗 @malcat@infosec.exchange For full and pro users: we've released malcat 1.0.0-alpha3 for you to preview. mastodon

      For full and pro users: we've released malcat 1.0.0-alpha3 for you to preview. It ships with:
      ● many GUI improvements (like side-by-side tabs)
      ● an even better MCP server with support for sandbox python transforms
      ● the first usable .NET and PYC decompilers!

    14. 🔗 r/LocalLLaMA Alibaba plans AI model with 5 trillion to 10 trillion parameters, unveils new chip rss
    15. 🔗 r/LocalLLaMA Qwen 4 Announced at Apsara Conference rss

      Qwen 4 Announced at Apsara Conference | https://preview.redd.it/bpbc9i6hizqh1.png?width=1270&format=png&auto=webp&s=e8aa8301895735a05c3c61a5e793018a23d1cac5 I wanted to share a quick update: Alibaba has officially announced Qwen 4 at the Apsara Conference, submitted by /u/Salah_H_Hasan
      [link] [comments]
      ---|---

    16. 🔗 Rust Blog Announcing a Maintainer in Residence: Scott Schafer for the Cargo team rss

      At the end of August, we announced our first Maintainers in Residence, Rust Project contributors who are funded for their upstream contributions and maintenance work from the Rust Foundation Maintainers Fund (RFMF). Since then, the Rust Leadership Council has dedicated more funds from its Project Priorities budget to RFMF, and together with AWS also providing additional funds, this allowed us to open a new full-time Maintainer in Residence (MiR) position to support the Cargo team. We would like to thank the Rust Leadership Council, AWS, and also the Rust Foundation for providing us with this opportunity! If you would like to help us hire more maintainers to improve Rust, consider donating to RFMF.

      This post explains why we chose to support the Cargo team specifically, and introduces Scott Schafer, the new Cargo Maintainer in Residence.

      Why Cargo?

      The new MiR full-time position is dedicated to helping with the maintenance of Cargo, our build system and package manager. The Cargo project is deeply involved in many new Rust features, improvements, and Project Goals. Combined with its cross-cutting nature, where it has to support many different use-cases and integrate with several other tools, it takes a lot of work just to keep up with its maintenance needs, let alone support so many feature requests and proposed changes.

      Because of that, the Cargo team has sometimes struggled with meeting its maintenance demands. You might remember that for several years, it actually held a feature freeze, to reduce Cargo's internal tech debt, perform necessary refactorings, go through the issue and pull request backlog, and come up with scalable internal development and design processes, so that they could eventually go back to even thinking about adding new features.

      Recently, some changes occurred within the team, which made it more difficult for them to meet their maintenance baseline. Some members of the team left, while others lost their dedicated funding for working on Cargo maintenance and had to scale down their involvement. The Funding team thus considered it very important to support this team, given that we had an opportunity to do so. And thus we decided to hire a full-time maintainer to work on Cargo for (at least) the next 12 months.

      Even though we know that a single full-time maintainer will not completely solve the maintenance struggles of the Cargo team, we hope that it will improve the situation, and provide a bit of a relief for the team.

      Introducing Scott Schafer

      A photo of Scott Schafer

      We are very happy to welcome Scott Schafer (@muscraft) into the Maintainer in Residence role! Scott has joined the Cargo team three years ago, and apart from working on Cargo, he is also the lead of the Rust Docker team, which prepares official Docker images for every Rust version.

      Apart from working on general maintenance of Cargo, Scott has implemented Cargo's Workspace inheritance feature, and has also spearheaded a complex multi-year effort to switch the rendering of diagnostics in the Rust compiler to use the annotate- snippets crate. This effort has been completed in the Rust 1.93.0 release. Thanks to it, the same diagnostics interface can now be shared between the compiler and Cargo (and also other tools), which amongst other things unblocked further development of the Cargo linting system, which has now been stabilized and will ship in the Rust 1.100.0 release.

      Everyone we talked about was very excited about Scott becoming a Cargo Maintainer in Residence, and we share that feeling. We wish Scott all the best in his new role, and we are very happy that we can support his maintenance work.

      Here is what Scott thinks about it:

      I am incredibly excited to work on Cargo full-time! There have been so many things that I wish I could've worked on over the years, that I will now be able to get to. I hope that my efforts will bring Cargo into a more maintainable state.

      Conclusion

      We are incredibly happy that we keep getting more funds for the Rust Foundation Maintainers Fund, which allows us to support Rust Project contributors. The funding team will be working with the supported maintainers, and also the funders, to ensure that they are all happy with the arrangement, so that we can secure stable funding for Rust maintenance for years to come.

      If you would like to help us support more Rust maintainers, consider donating to RFMF!

    17. 🔗 Ampcode News One Runner, Many Worktrees rss

      A runner can now create Git worktrees. Pick a repository the runner serves, hit Tab, name the branch, and the thread starts in a fresh checkout. Your main checkout stays untouched.

      The new thread composer on ampcode.com with the runner mac-mini selected and the directory picker open. The amp repository is highlighted and offers Current or New Worktree.

      In the directory picker, every Git checkout on the runner gets a New Worktree option next to it. Choose it and you get a small form:

      The worktree form in the new thread composer: New worktree of amp, name fix-flaky-login-test, directory ~/code/amp-fix-flaky-login-test, branch fix-flaky-login-test, from current HEAD, and a Create Worktree button

      The name you chose becomes the branch name and the folder name. The runner then creates the worktree as a sibling of the repository: ~/code/amp gets ~/code/amp-fix-flaky-login-test, checked out on a new branch fix-flaky-login-test off the current HEAD. Uncommitted changes stay where they are, in the original checkout. The new directory shows up in the picker right away, marked with a branch icon, and the thread starts in it.

      Puck can do this too: ask it to start a thread on your runner in a new worktree and it passes a worktree name to create_thread.

      Clean Up When You're Done

      A thread that runs in a worktree the runner created gets a new action: Archive and Remove Worktree. It archives the thread, runs git worktree remove, and deletes the branch.

      The thread actions menu on ampcode.com with a new entry, Archive and Remove Worktree, between Archive and Delete

      New Folders and Projects Too

      The picker can also create things. Type the name of a directory that doesn't exist yet and you get New Directory or New Project. Read more.

      The directory picker in the new thread composer with a name typed that doesn't exist yet, offering New Directory and New Project

      Oh, They Understand Secrets Now Too

      Runners can also use the Secrets & Env Vars you configure on ampcode.com. Same variables that orbs get. It's off by default; opt in with --amp-env:

      $ amp --no-tui --runner-id mac-mini --discover-dirs --amp-env
      

      Every time a thread starts, the runner fetches the variables that apply to it (personal, then project, then workspace) and adds them to the environment of the thread's shell commands, MCP servers, and plugins. Change a variable on ampcode.com and the next thread gets the new value. No restart, no SSH.

      Both need a runner on the current Amp version. If yours has been running for a while, it has updated itself already.

      Read more about worktrees and Secrets & Env Vars in the runner docs.

  3. September 21, 2026
    1. 🔗 Simon Willison Jev introduces a new shape of LLM - System One, aka Decision Models rss

      Last week TypeSafe AI unveiled Jev, their first example of a new category of model that they are calling "System One models" (I'm with Maggie Appleton, I think "decision models" is a better name for these). Jev is an interesting variant on the usual LLM format: it still accepts text inputs, but instead of text output it returns floating point numbers corresponding to categories, yes/no questions, ratings, and associated confidence scores.

      TypeSafe describe Jev like this:

      Think of Jev as a frontier-intelligence function call: unstructured state in, typed probabilistic decisions out.

      It's also very fast, and really cheap. Regular LLMs are priced in terms of input and output tokens, with output generally charged at significantly higher rates. Jev charges only for input - output is free - and the input price of their first model is $0.042 per million tokens - cheaper even than OpenAI's GPT-5 Nano ($0.05/million).

      Jev lets you ask questions about text or semi-structured data. You compose a "state" object containing a string, array of strings, or set of name-value pairs - this might describe an article, or a customer, or any other kind of record. You then send that to their API with one or more questions, and get a reply back for each.

      You can ask three kinds of questions:

      • Yes/No questions, which Jev calls "Noul" questions - their CEO confirmed on Hacker News that this is short for Bernoulli, from the Bernoulli distribution. You pose a statement and get back a floating point number between 0 and 1 for how confident the model is that the statement is true.
      • Choice questions, where the model picks one from a set of provided options - actually a confidence score plus a probability distribution across all of the options.
      • Score questions, where you provide sequence of numeric levels with descriptions and it provides a floating point score somewhere along that range.

      The Jev API can accept a single document ("state") and as many questions as you can cram into the context window. Questions are evaluated in parallel, so sending many questions should take a similar time to sending just one.

      The Jev 1.13 jaggedness documentation offers useful guidance as to Jev's strengths and weaknesses. It's currently not great with numbers, dates, or "adversarial content".

      I think the decision model framing is useful for understanding where to use Jev. It's great for anything that can be expressed as a classification task - think spam detection, suggesting labels, prioritization and ranking.

      I've also been experimenting with it for search reranking, where you fetch 100 likely matches using an inexpensive algorithm like BM25, then have Jev score those 100 candidates for relevance against the original query.

      Black boxes are back in fashion

      Something I've found a little uncomfortable about Jev is how it very much represents a regression even further towards black box machine learning systems.

      LLMs are black boxes already - you can ask them to justify their decisions, but you can't guarantee that what they say is useful or accurate.

      Jev doesn't even give you that: put in all the text you want, the only thing you're going to get back is a floating point number. If Jev marks something as spam, which content signals tipped it off?

      This also means that concerns about bias should be front and center. I really hope nobody uses Jev to rank job applicants - that floating point number could conceal all manner of unseen bias baked into the models, and experimentally picking that bias apart is going to be a tricky business.

      (I tried one experiment where I had Jev score every city in the San Francisco Bay Area on a yes/no answer to whether they were a "Good city?" - it rated Cupertino top and East Palo Alto bottom. Huh.)

      In practice, this all means that evals and structured experiments are even more important than they are for regular LLM projects. Thankfully, Jev is so cheap that running hundreds or even thousands of experimental prompts through it costs just a few cents.

      Unconventional uses for Jev

      It's been really fun watching the wider community come up with potential use-cases for Jev over the past few days. Here are some creative ones that caught my eye:

      • jevchat by Kyle Pena turns Jev into a (terrible) chat model. "At every step it asks Jev one question: Given the user's question and the reply written so far, which symbol comes next?". ericpruitt on Hacker News: "It's the digital equivalent of Morty speaking with the death crystal".
      • jev-leftpad by Fatih Kadir Akın implements left-pad with the prompt "How many spaces are needed before value to reach targetLength?" and a choice query allowing options from "0 spaces are needed" to "10 spaces are needed".
      • jev-2048 by Andy Gayton uses Jev to play the 2048 sliding puzzle game.

      Open weight recreations

      There's also been a flurry of projects attempting to create a model like Jev using on top of open weight models. Kev is one interesting example, using Qwen 3.5 to produce 0.8B, 4B, and 9B models. Here's the accompanying Hacker News thread, where someone linked to a JevBench benchmark that has already cropped up to compare "Jev-class decision models".

      Given Jev was released just under a week ago, the amount of activity around it is extremely impressive.

      Using Jev from LLM

      Update 22nd September 2026: I released llm-typesafe, a plugin that adds support for Jev to my LLM CLI tool and Python library. Basic usage looks like this:

      llm -m jev 'Please refund my last payment.' \
        -s 'Does this message explicitly request a refund?'

      See the README for examples of other query types.

      You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.

    2. 🔗 navidrome/navidrome v0.64.1 - Security Fixes release

      This is a security release. It fixes five vulnerabilities reported through our GitHub Security Advisory program, covering Subsonic authentication, artwork fetching, playlist cover images, player ownership, and per-user library filtering. Upgrade as soon as you can. Thanks to the researchers credited below for reporting them privately.

      The release also improves Jellyfin client support, with both Manet and JellyBox tested and validated against live servers. Manet used to abort its entire library sync on a single missing field and show an empty library. It now syncs end to end. JellyBox got stuck on the login screen. It now signs in and plays, confirmed on Android. Navidrome also reports itself as Jellyfin 12.1.0, accepts Quick Connect sign-in, and can announce itself on your local network so clients find it without you typing an address.

      Smart playlists can reference another playlist by path, and the web UI now formats dates using the language you picked in Personal settings.

      Security

      • Unauthenticated password brute-force through the Subsonic API. Failed Subsonic logins were never throttled, so an attacker could guess passwords at full speed. Navidrome now rate limits failed authentication attempts. High, CVSS 7.4. (GHSA-p994-r776-mw52, #6185) Reported by @osageling.
      • Authenticated SSRF through M3U external album artwork. A playlist could point #EXTALBUMARTURL at a private or loopback address, turning the server into a probe for internal network services. Navidrome now blocks private and loopback addresses in remote image fetches. Medium, CVSS 6.5. (GHSA-8hjf-6h34-82hr, #6181) Reported by @kaardeco.
      • Cross-library file read through the M3U playlist cover. #EXTALBUMARTURL also accepted a local path, so a playlist could serve any file the server can read as its cover image. Only real image files are accepted as local artwork sources now. Medium, CVSS 6.5. (GHSA-vwq6-xrw5-phpg, #6180) Reported by @qrn12580.
      • Player takeover by any authenticated user. Creating a player could overwrite an existing record and reassign its owner, and device registration reused another user's player without an ownership check. Both paths now check the owner. Medium, CVSS 6.4. (GHSA-37h4-53gj-cw8m, #6184) Reported by @RealFakeAccount and @qrn12580.
      • Library filter skipped on bookmarks, playlist tracks and now-playing. These three endpoints ignored the libraries a user is allowed to see, leaking track metadata from other libraries. The filter now applies to all of them. Medium, CVSS 4.3. (GHSA-pcjv-h48m-833g, #6179) Reported by @sondt99.

      Configuration Changes

      Status | Option | Description | Default
      ---|---|---|---
      New | Jellyfin.AutoDiscovery | Answers Jellyfin's UDP discovery broadcasts, so clients find the server on the local network. (#6169) | false
      New | Jellyfin.QuickConnect | Allows Quick Connect sign-in, where a client shows a code you approve from a session that is already signed in. (#6174) | true

      For a complete list of all configuration options, see the Configuration Options documentation.

      Jellyfin API

      • Add Quick Connect sign-in. The client shows a short code, and you approve it from a session that is already signed in, so the client never sees your password. (#6174 by @deluan)
      • Add opt-in LAN auto-discovery, so Jellyfin clients find the server without you typing its address. Docker users need host networking for the UDP broadcast to reach the container. (#6169 by @deluan)
      • Report Jellyfin 12.1.0 and add the 12.x features clients check for, including fillWidth and fillHeight image sizing. (#6163 by @deluan)
      • Match Jellyfin's item payloads, so clients that decode strictly can finish a sync instead of erroring out. (#6151 by @deluan)
      • Match Jellyfin on login SessionInfo, item types and universal streams. (#6161 by @deluan)

      UI

      • Format dates using the language selected in Personal settings, instead of always following the browser locale. (#6160 by @deluan)

      Smart Playlists

      • Reference another playlist by its path in a smart playlist rule, instead of by id. (#5187 by @davidvedvick)

      Subsonic API

      • Log a warning when a nowPlaying scrobble sends more than one id, which the API does not allow. (6b3938b5b by @deluan)

      Server

      • Fix the ExtAuth logout redirect on unauthenticated page loads, and stop the warning spam from untrusted sources. (#6176 by @deluan)
      • Return 404 instead of 500 when a native API resource does not exist. (#6131 by @deluan)

      Artwork

      • Report a failure when the Last.fm artist page has no image. Last.fm now answers non-browser clients with a bot challenge page, which Navidrome read as "this artist has no image" and recorded as final, with nothing in the log. It now logs a warning and retries, and the other image agents still get their turn. (#6198 by @deluan)
      • Store artwork files as group-readable (mode 0640) instead of owner-only, so other services on the same host can read the image cache. (#6189 by @kwo)

      Scanner

      • Update go-taglib to fix "permission denied" errors on shared hosts. (d00c84716 by @deluan)

      Scrobbling

      • Double-encode plus signs in artist and track names sent to Last.fm, so tracks with a + in the name scrobble correctly. (#6158 by @deluan)

      Packaging

      • Repair root-owned artwork and plugins folders on upgrade. Installs affected by this could not write their own cache. (#6143 by @deluan)

      Translations

      New Contributors

      Full Changelog : v0.64.0...v0.64.1

      Helping out

      This release is only possible thanks to the support of some awesome people!

      Want to be one of them?
      You can sponsor, pay me a Ko- fi, or contribute with code.

      Where to go next?

    3. 🔗 smol-machines/smolvm smolvm v1.17.0 release

      What's Changed

      • Let aarch64 Linux resume a branch source instead of freezing it by @BinSquare in #1327
      • Attach host disks and vhost-user block devices to a machine by @BinSquare in #1326
      • agent: refresh persistent DNS and retain shutdown receipts by @sgrove in #1328
      • Return a directory listing when the files API is asked for a directory by @BinSquare in #1330
      • Fail a delete that needs confirmation when stdin is not a terminal, instead of reading EOF as a decline and exiting successfully by @BinSquare in #1333
      • Run the image's own entrypoint for a cached --oci-cache run instead of the bake's no-op placeholder by @BinSquare in #1335
      • Provision the --oci-cache bake without launching a workload so images without /bin/true can be cached by @BinSquare in #1340
      • Give a clone a host port the kernel will not reassign before it binds by @BinSquare in #1341
      • Rebuild libkrun so aarch64 machines can branch again by @BinSquare in #1342
      • Make incremental checkpoints reusable as a Rust crate by @BinSquare in #1344
      • Reserve every recorded host port so a clone is never given a stopped machine's port by @BinSquare in #1345
      • Forward CLI --secret-env/--secret-file secrets to the workload on the oci-cache and pack-ref run paths by @BinSquare in #1343
      • Save checkpoints without staging a second RAM copy by @BinSquare in #1305

      New Contributors

      Full Changelog : v1.16.2...v1.17.0

    4. 🔗 MetaBrainz MusicBrainz Server update, 2026-09-21 rss

      Hi! It's been a while since our last release since we have been working on stability improvements for both website and search to better cope with all the load we are handling recently. The first related changes are part of this release, with more to come, including limiting searches to 500 results (if you need something further down the search, sorry but you probably need a better search!). Additionally, the very annoying bug that sometimes lost track times when parsing tracklists should hopefully be gone now (thanks dvirtz!), and a lot more aggregator and shortener links are now blocked; even when not yet blocked, remember to always add all the relevant destination links rather than redirects and aggregators if possible.

      A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.

      Thanks to derat, dvirtz, ibmibmibm and mib for having contributed to the code. Thanks to DenizC, derat, dvirtz, HibiscusKazeneko, j.rohr, outsidecontext, Raman Sinclair, rinsuki and salo.rock for having reported bugs and suggested improvements. Thanks to AligFu, AndrejsD1718, BestSteve, blueday, Covium, Denatura, EmO686, Flavia Telcean, joao_over9k, Kolesteraw, Life4649, liilliil, mfmeulenbelt, naturbrilian, NorwayFun, Priit Jõerüüt, pXF, syntariavoxmortem, TheParaziT, Vaclovas Intas, vacuousVersifier and wileyfoxyx for updating the translations. And thanks to all others who tested the beta version!

      The git tag is v-2026-09-21.0.

      Fixed Bug

      • [MBS-9526] - Parser removes times, despite "use track times" being unchecked
      • [MBS-10767] - "more" and "less" on rel types list are not translatable
      • [MBS-14386] - Series of series doesn't show parts as a list, only on relationships section
      • [MBS-14398] - Collection checkbox in header doesn't work
      • [MBS-14440] - Webservice requests can return authenticated data on unauthenticated requests
      • [MBS-14448] - Memory leak in Data::Relationship::_new_from_row

      Improvement

      • [MBS-14192] - Require visiting tracklist tab when adding release
      • [MBS-14399] - Accept new /a LibraryThing author URLs
      • [MBS-14404] - Reject Facebook "share" URLs
      • [MBS-14415] - Strip locale and mibextid in Facebook URL cleanup
      • [MBS-14423] - Reject Google "share" URLs
      • [MBS-14424] - Block Pinterest URL shortener
      • [MBS-14439] - Block (yet) more smart links
      • [MBS-14425] - Block smart links: drum.io
      • [MBS-14426] - Block smart links: ffm.bio
      • [MBS-14427] - Block smart links: social.tunecore.com
      • [MBS-14428] - Block smart links: frontl.ink
      • [MBS-14429] - Block smart links: gyro.to
      • [MBS-14430] - Block smart links: paa.ge
      • [MBS-14432] - Block smart links: linkin.bio
      • [MBS-14433] - Block smart links: beacons.ai
      • [MBS-14435] - Block smart links: fanbase.to
      • [MBS-14436] - Block smart links: soundon.global
      • [MBS-14437] - Block smart links: imusician.pro
      • [MBS-14438] - Block smart links: musics.to
      • [MBS-14443] - Support Boomplay’s new non-numeric URL format
      • [MBS-14450] - Improve error / rejection messages for URL shorteners and aggregators
      • [MBS-14455] - Limit the depth of search to 500 results

      Task

      • [MBS-14382] - Update the Amazon logo used in the sidebar
    5. 🔗 r/LocalLLaMA XiaomiMiMo/MiMo-V2.6-Flash-RL · Hugging Face rss

      XiaomiMiMo/MiMo-V2.6-Flash-RL · Hugging Face | submitted by /u/Bestlife73
      [link] [comments]
      ---|---

    6. 🔗 earendil-works/pi v0.87.0 release

      New Features

      • Canonical session context and extension boundaries — Edit model context without rewriting history and add actionable lifecycle hooks. See ContextEditEntry and extension events.
      • Full-transcript context extensions — Use context_with_system for per-request system-message transformations. See context_with_system.
      • Per-model image input limits — Configure cache-safe image resizing per model for attachments, read, and tool-result images. See Image Input Limits.

      Breaking Changes

      • Removed the inherited shouldStopAfterTurn agent option. Use finishTurn and return { action: "end" } instead. finishTurn runs before turn_end but applies the decision afterward, and it also receives error and aborted responses; migrate normal-response predicates by returning undefined for those hard exits. See the @earendil-works/pi-agent-core changelog for a complete before-and-after example.
      • Added ContextEditEntry to the exported SessionEntry union. TypeScript consumers with exhaustive entry switches must handle context_edit; use replacement: null for omission and a content replacement otherwise.
      • Made SessionManager canonical for AgentSession provider context. Assigning session.agent.state.messages no longer replaces future request history; restore with SessionManager.inMemory(cwd, { id }, entries), navigate with session.navigateTree(), or append through session.sessionManager and call session.refreshContext().
      • Expanded TurnEndEvent with required boundary fields and added AgentBeforeSettleEvent to the exported ExtensionEvent union. Consumers constructing events or exhaustively switching on ExtensionEvent must handle the new shapes. ExtensionRunner.emit() no longer accepts turn_end; host integrations dispatch actionable boundaries with emitBoundary(baseEvent, buildContext).
      • Deferred runs requested from agent_settled handlers until all settled handlers finish. Handlers still observe ctx.isIdle() === true, but no longer see a reentrant agent_start during the same notification dispatch.

      Added

      • Added append-only model-context edits. For example, sessionManager.appendContextEdit(entryId, null) omits one message from future provider context without changing raw history, usage, or UI history.
      • Added actionable turn_end and agent_before_settle extension boundaries. Return { entries: [...event.entries, draft], continue: true } to persist structural entries in order and ensure one next provider request without changing steering or follow-up scheduling.
      • Added retain-none compaction input: sessionManager.appendCompaction(summary, null, tokensBefore) stores the compaction's own ID as its kept boundary.
      • Added the context_with_system extension event, which runs after context handlers on the full transcript including system messages and sends its result verbatim. See context_with_system.
      • Added per-model image resize profiles through inputLimits.images.resize in models.json, applied to file attachments, image reads, and tool-result images (#9631).

      Fixed

      • Fixed string context-edit replacements producing invalid assistant and tool-result message content instead of text blocks.
      • Fixed context-invisible boundary metadata and replacement edits causing newly appended or replaced input to be summarized before its first provider request.
      • Fixed edited-context accounting both discarding valid assistant usage captured after the latest context edit and reusing that usage after a later compaction made it stale.
      • Fixed selected error retries and final length/overflow recovery retaining abandoned model attempts in future provider context; post-run recovery omissions are now persisted without hiding raw transcript history or changing queue scheduling.
      • Fixed context handlers that filter or slice messages dropping the prompt and tool declarations, which after extension-driven compaction left requests without built-in tools or made Codex emit raw tool-call text. Handlers no longer see system messages; Pi restores the prompt and tool state after they run. See context (#9789, #9822).
      • Fixed /bug allowing uploads in offline mode while preserving local zip exports (#9841 by @christianklotz).
      • Fixed idle prompt-cache warming rebuilding expired caches when its timer or an extension decision is delayed.
      • Improved crash diagnostics with hints identifying loaded extensions that appear in the stack trace.
      • Fixed text files beginning with GIF being misclassified as images and omitted from read and CLI @file input (#9755).
      • Fixed malformed prompt template frontmatter being silently ignored instead of reported as a resource warning (#9830 by @christianklotz).
      • Fixed inherited unknown OpenAI-compatible Chat Completions endpoints receiving strict tool schemas unless they explicitly advertise support (#9816).
    7. 🔗 r/LocalLLaMA How it feels watching prices go up rss

      How it feels watching prices go up | submitted by /u/Hyacin75
      [link] [comments]
      ---|---

    8. 🔗 exe.dev Caring vs. Knowing rss

      A few months ago, I wrote about how AI is disrupting the build-vs-buy equation in SaaS. I argued that the real value of SaaS over most DIY software is knowing what good looks like. But a few recent events have made me realize that knowing in and of itself is not enough.

      “Good” changes. Users evolve, surrounding systems shift, and expectations rise. And the rate of change somehow continues to increase, making us feel the technological jerk of products in our daily life. Building something valuable requires knowing what good looks like today. Maintaining (or even increasing) that value requires caring enough to keep learning what good will look like tomorrow.

      In a conversation with Betty Junod on my podcast Third Loop, we discussed the idea of an application with an Ideal Customer Profile, or ICP, of one. Betty’s point was that the cost reduction that comes from an agent building your app makes it reasonable to build an app that only you will use. This is liberating for people who have an idea or need, but previously lacked the coding skill or resources to make a computer do things they considered useful.

      If you are the ideal customer, you know what good looks like and understand the constraints because you are the only user. But what happens when you’re building for more than just one customer? The challenge is the same whether you are building an app to store your recipes or a service to monitor VM utilization. As the number of users increases, answering what good looks like becomes more challenging. Humans have the amazing ability to solve the same challenge with incredible variety. Your definition of good may vary slightly from your next user’s. As the number of users grows to hundreds or thousands, the variations—and resulting complexity—can multiply rapidly.*

      *Yes, humans can use em dashes appropriately.

      Choose Your Own Adventure

      In the old world, this is where DIY often broke down. You’d add personalization or customization, but it had a cost, both in the building as well as maintaining the increasing complexity of a system. For many SaaS companies, this led to narrowly scoping the ICP and then expanding features over time to meet the needs of more people.

      This approach was sustainable for the SaaS provider, but meant that users had to conform to the provider’s view of the workflow. It also meant that providers built new features against rigid, explicit user stories and happy- path workflows.

      In this new world of free code, what if we could let the user build the experience they wanted? Give the user access to the agents that build the features. This starts to change the way we think about designing products. We may need to think more about designing primitives and building blocks and not just a single fixed user path.

      Of course, as we look to acknowledge that each user is a snowflake we quickly realize that different users care about different things. A default setting for one user may be appreciated, while for another it is a deal-breaker that ruins their experience. Some users want a product to make all the choices for them, while others wish they could have control down to the bit level for every interaction.

      Put another way, sometimes you want to buy a pre-made sandwich, and sometimes you want to bake your own bread from the wheat you harvested and milled yourself. And most people, most of the time, are somewhere in between. We are finally at a point where we can build for—and with—users across this spectrum.

      So, as we build our choose-your-own-adventure platforms, selecting good defaults and caring about what good looks like over time is what keeps a growing user base happy. It’s great to have a computer make all the choices for you when they are the choices that you want. But building a system that makes all the right choices remains aspirational. For now, we can try to build systems that adapt to our personal “right” choices faster than we have in the past.

      Ever-Changing “Good”

      Another critical aspect of this is that “good” can change over time. In 1440, when Gutenberg made the first printing press, his list of requirements was a bit different from the last laser printer I purchased from Costco. The rate of change that is acceptable to the user is also a factor. If your ICP is slower to adapt to change, either by comfort or regulation, you need to plan accordingly.

      How do you ensure that your product or service continues to be good? How do you monitor for drift—either in your product quality or in your ICP needs? Product quality isn’t just your uptime. Users rarely use products in a vacuum, especially SaaS. Other services provide input and users need the output to feed into other places. And the needs of these inputs and outputs are changing faster today than ever before.

      At the end of the day, knowing what good looks like is a point-in-time judgment, while caring about what good looks like is an ongoing task. You have to spend effort observing and processing usage patterns and feedback. Even as we build a platform that can be augmented and updated by our users, we still have to observe and listen to both new and existing users and incorporate learnings into our design and build process. This means your product is never “done” or “finished.” It also means that, as a builder, you may have to let go of the idea that your product will be used the way you intended.

      Free, Like Puppies

      Puppies are not free. Food, toys, vet visits, and time all add up, regardless of the initial cost. This has long been a comparison used for open source software. And it needs to be acknowledged that unrestricted customization can have the same risk.

      In this new era of “I can build anything,” this often means you first have to make a choice, “do I care enough about what good looks like for this product to own the maintenance and upkeep?” This isn’t just about upgrading, patching, CVEs, and performance (although that is a big part of it). Handing users the controls to change your product also runs the risk that they’ll make changes they regret. Or, when the choice is good for the user, it may restrict your optionality in the future if desired core product changes break their customization.

      Different types of people have different tolerances for build-vs-buy. There are people like Josh, who look at the world and say, "I could build that myself," and then do. Or people like my brother who will pay for other people to build everything. And then some who tinker in between. Either way, someone still has to feed the puppy.

    9. 🔗 r/LocalLLaMA 16GB (and in many cases 12GB) is the max vram most people will ever reasonably have rss

      This sub is, needless to say very niche and skewed towards the high end. There are tons of extremely high end setups here with multiple gpu's etc.

      Even 24GB is out of reach of most people financially, forget about the 3x3090 or 5090 or even higher setups. Macs/Strix Halo/dgspark etc are all similarly expensive. 16GB is pretty much the high end for most. And this completely changes in most of the rest of the world where even 12GB would be a luxury.

      Things have changed recently (I think even last 6 months have been huge) and even agentic coding is now feasible on 16GB cards (eg with Qwen 27B quants).

      I think/hope things will continue to improve. Of course there's going to be a hard limit on how much world knowledge these smaller models will have.

      The holy grail is new architecture that supercedes the Transformer and new techniques that don't depend on vram/bandwidth.

      and

      submitted by /u/ECrispy
      [link] [comments]

    10. 🔗 backnotprop/plannotator v0.27.17 release

      Follow @plannotator on X for updates

      Missed recent releases? Release | Highlights
      ---|---
      v0.27.16 | Themed diagrams on Mermaid 12, comment on any node or edge, patch-file review, embedded HTML documents render
      v0.27.15 | Plannotator TUI and Herdr Annotate announcement, element context on pinpoints, HTML links open as linked documents, All files panel, Classic diff default
      v0.27.14 | Pi plan progress survives compaction, Codex threads across rollout files, WSL browser setting, Mod+E edit mode
      v0.27.13 | Open a review on a specific base (--base, --diff-type), symlink containment on /api/doc, CI flake fix, Amp decision relay
      v0.27.12 | Unified decision control, token hover cards, local-vs-remote diff, approval notes
      v0.27.11 | OpenCode server leak fix, durable local feedback archive, unknown-subcommand fix
      v0.27.10 | Auto-viewed files on scroll, annotation undo/redo, OpenCode 2 slash commands restored, npm 12 agent terminal fix
      v0.27.9 | WebMCP browser-agent tools, HTML refresh from disk, host seams, lazy renderers, Windows uninstall fix
      v0.27.8 | Pi keeps its prompt cache across plan transitions, thumbs-up returns to HTML annotation, embed picker seam
      v0.27.7 | Pi host crash fix on Windows, Call Flow tree cap, jj fork-point base, plannotator knowledge skill + llms.txt
      v0.27.6 | Live app annotation lands on Pi, one interaction model for HTML pages
      v0.27.5 | Annotate your running app, Agent TUI placement, collapsed lockfiles, VS Code theme fix

      What's New in v0.27.17

      This is a stability release after the diagram-heavy v0.27.16. Twenty-four pull requests went in, ten of them written by community contributors, with two first-time authors and a third whose long-open branch finally landed. Two additions are worth naming up front: diagram files now open in the diagram viewer that fences already got, and approving a plan in OpenCode 2 switches the session model along with the agent. Everything else is repair work, most of it on code review.

      Diagram files open in the diagram viewer

      plannotator annotate flow.mmd used to refuse the file outright with File type not supported, and the same for .mermaid, .dot, and .gv. A Mermaid or Graphviz fence inside a plan, meanwhile, already got the whole diagram engine from v0.27.16: themed rendering, zoom, pan, fit, the full-size popout, and click-to-comment on a node, an edge, a cluster, or the diagram itself. People who keep their diagrams as files got none of it.

      Those four extensions now open as one diagram in exactly that engine. The file is the document, the diagram fills the document card, and comments, drafts, export, version history, and share links behave the way they do for a fence. The extensions are not treated as markdown, so Mermaid's own --- … --- config block stays diagram content instead of being stripped as frontmatter, and they join the annotatable set everywhere else it matters: CLI target resolution, folder discovery, the file browser, the 2MB size cap, and /api/doc. Both runtimes decide the render kind through the same shared predicate, so a Bun session and a Pi session cannot disagree about what a .dot file is.

      (#1571)

      OpenCode switches the model with the agent

      OpenCode stores the session's agent and its model independently. Approving a plan selected Build but left Plan's model active, so anyone who configures different models for the two agents kept planning-model settings through the build. Model metadata from V2 agent discovery is now preserved and applied: the agent switch runs first, then the model switch, which is the order OpenCode's own clients use.

      A follow-up repaired older V2 hosts. The first change made switchModel support a prerequisite for switching agents at all, and hosts that expose switchAgent without it stopped changing the agent on approval. Agent selection now happens first and stands on its own; a missing or failing model switch warns rather than undoing it, while a failed agent switch still prevents the model attempt. @rcdailey wrote both.

      (#1569, #1570)

      An idle review stops touching the git remote

      An open but idle code review session ran git ls-remote --symref origin HEAD about once a minute, for as long as the page stayed open. @freimer reported it from the worst place to hit it: SSH authentication backed by a hardware token, where every probe is a physical touch prompt, so a YubiKey kept blinking next to an agent that correctly reported itself as idle, with nothing in the UI showing an operation in flight.

      The client polls /api/diff/fresh every five seconds to keep the "Diff out of date" banner honest, and that handler refreshed the remote base info, where a 60-second rate limit was the only thing between a five-second poll and a network round trip. The remote is now queried on the interactions where a reviewer is actually asking for a fresh answer: startup, the page load, a diff-type or base switch, and the explicit Fetch. A failed probe backs off by doubling up to fifteen minutes and resets on success. Separately, git commands spawned detached for timeout control were only ever reaped by a parent-side timer that dies with the parent, so a server stopped mid-probe orphaned the git and ssh pair; both runtimes now kill those process groups from an exit hook.

      There is a full opt-out for anyone who would rather the review never reach the network on its own: plannotator review --no-git-remote-check, PLANNOTATOR_GIT_REMOTE_CHECK=0, or { "gitRemoteCheck": false } in ~/.plannotator/config.json, in that order of precedence. With it off, the session issues zero ls-remote calls including at startup, since the compare- target detection is itself an ls-remote. The flag is parsed by the shared review argument parser, so it works on Claude Code, OpenCode, and Pi rather than the Bun CLI alone.

      One behavior change comes with this. A push that lands on the base branch in the middle of a review is no longer noticed within the minute on its own; it shows up on the next refresh, diff switch, or page reload. With the opt-out on, the compare target is resolved from local refs only, so a repository whose origin/HEAD is unset may pick a different default than the remote would have reported.

      (#1585, closing #1553)

      Long lines scroll, per file

      A diff with long lines put its horizontal scrollbar at the bottom of the file's content, which is off-screen on any file taller than the panel. Each file's diff now carries its own horizontal scrollbar pinned to the file header, so a wide line is reachable without scrolling to the end of the file first.

      The code is @Karrq's, written in #1224 and merged here from a replacement branch because the original could not take a maintainer push. Rebasing it onto current main meant resolving one conflict in the review editor's theme hook and dropping a lockfile revert; the change itself is unmodified.

      (#1586, closing #1566 and #1048)

      The review setup dialog is gone

      The one-time "Set up your review view" chooser never appeared on a fresh profile. The settings store seeds every registry default into a cookie the first time settings are read, which happens before the first-run initializer runs, so the initializer always saw a persisted panel view and retired itself without showing anything. @FNDEVVE proposed fixing the gate in #1474, which is what surfaced the real path.

      Rather than repair a dialog that asks a question the panel toggle already answers, the dialog is removed and Tree becomes the default panel view. The Tree | Git status | Commits toggle and Settings → Git remain the two ways to change it, with the toggle session-scoped and Settings persisting. Only fresh profiles are affected: a saved panel view still wins over the default, and anyone who has already chosen a view sees no change. The one-time dialog chain is now guide intro, look-and-feel, Edit Mode, token hover cards, terminal tools.

      (#1587, closing #1463)

      Selections at a block boundary

      A double-click just past the end of a heading, paragraph, list item, fence, or blockquote leaves a selection whose entire content is the line break between two blocks. Depending on where the browser put the range's end, one of two things happened: the highlighter painted an invisible highlight and opened the toolbar on an empty quote, which stored an annotation with a newline as its text that counted toward the total, exported to the agent, and could never be re-anchored on the next load; or the range resolved past the last child node and an uncaught TypeError escaped the library's own listener.

      Both are fixed. A run of 44 real mouse gestures in headless Chromium against a live annotate session produced three uncaught errors and 21 blank-quote toolbars before the change, and none of either after, with the 15 valid selections still opening the toolbar as they did.

      @bohjak reported this in #881 with both failure modes separated, the stack trace, the offending line in the range model, and a proposed bounds check. The diagnosis was correct. The fix lands in Plannotator's own selection hook rather than in the highlighter library, so it does not wait on a new release of that dependency.

      (#1584, closing #881)

      Additional Changes

      • The submission dialog's footer no longer covers a field. The GitHub and GitLab review submission dialog kept its sticky action footer inside the scrolling form body, so at constrained heights it overlaid the last control and clipped the "View on GitHub after submitting" checkbox. The footer is now a non-shrinking sibling of the scroll region. @leoreisdias (#1513)
      • Nested frontmatter renders correctly. The frontmatter parser trimmed every line, so indented child keys hoisted to the document root and same-named keys overwrote each other, producing a card that looked complete and was wrong. Parsing is now indentation-aware: nested maps stay grouped, arrays of maps group per item, and flat scalars, string arrays, block scalars, and CRLF behave as before. @FNDEVVE, closing #1485 reported by @JaeyeongYang (#1548)
      • Short links for small plans. Create short link is now offered for any shareable small plan, not only after a previous link was invalidated. Creation still requires the explicit click, and nothing uploads on its own. @FNDEVVE (#1475)
      • The image annotator's Save button stays reachable. On narrow screens the annotation toolbar ran past the visible area and took Save with it. The toolbar is now bounded by the viewport including mobile safe areas, the controls through Clear scroll horizontally when they do not fit, and Save stays pinned at the right edge. @katya4oyu (#1469)
      • Oh My Pi can submit a plan again. In planning mode the agent must submit by writing to the xd://plannotator_submit_plan device URI, but the planning write guard validated every write path as a file path and rejected it, so the planning contract required a call the guard blocked. That one URI is now allowlisted by exact match; other device URIs stay blocked and filesystem writes stay limited to in-cwd markdown. @FNDEVVE, closing #1466 reported by @alfkonee (#1547)
      • Pi Web shows the review URL. Pi runs extensions in RPC mode where the user cannot reach the browser the host launches, but a successful launch suppressed the URL notification because the session did not read as remote. RPC contexts are now treated like remote sessions for that notification. @Shujakuinkuraudo, closing #1406 (#1407)
      • The root build runs in dependency order. apps/hook copies the review bundle during its build, so bun run build on a clean checkout failed unless the review app had already been built. The root script now runs review, then hook, then opencode. @rNoz, closing #1388 (#1389)
      • The documented compile command matches the release build. AGENTS.md dropped both flags the release workflow uses, so a binary built by following the docs reported itself as plannotator dev and, on macOS with Bun below 1.3.14, lost its linker signature and was killed on launch with no error. The command now carries both flags and names the Bun floor. @centraldogma99 (#1420)
      • The folder empty state names diagram files. With .mmd and .dot files listed in the folder sidebar, the empty state still said "markdown or HTML". Found by release QA (#1588)
      • Thepierre-guard project skill is removed. Nothing in the repository loaded it (#1573)
      • @plannotator/ui 0.42.0 through 0.45.2, on core 0.25.5. Seven pull requests add opt-in host seams to the published UI package: host-supplied selection actions and a comment mention source, mention ids on the annotation, a toolbar icon seam, mention picker presentation, mention chips in the composer, an annotation card header slot, and host labels on the embed picker. All of it is inert unless a host opts in, and nothing changes for Plannotator users. The 0.45.2 bump carries only the reviewPanelView registry default from the setup-dialog removal (#1572, #1574, #1575, #1576, #1577, #1578, #1579)

      Install / Update

      macOS / Linux:

      curl -fsSL https://plannotator.ai/install.sh | bash
      

      Windows:

      irm https://plannotator.ai/install.ps1 | iex
      

      Claude Code Plugin: Run /plugin in Claude Code, find plannotator , and click "Update now".

      Pi: Update @plannotator/pi-extension to 0.27.17 and restart Pi.

      OpenCode: Clear cache and restart:

      rm -rf ~/.bun/install/cache/@plannotator
      

      What's Changed

      • fix(opencode): switch the OpenCode V2 session model along with the approved agent by @rcdailey in #1569
      • feat(annotate): open .mmd and .dot files in the diagram viewer; core 0.25.5, ui 0.42.0 by @backnotprop in #1571
      • feat(ui): host selection actions and comment mention source seams; ui 0.43.0 by @backnotprop in #1572
      • feat(ui): mentionSource on Viewer and HtmlViewer, mention ids on the annotation; ui 0.43.1 by @backnotprop in #1574
      • feat(ui): selectionActionsIcon on the toolbar seam, simpler default wand by @backnotprop in #1575
      • feat(ui): mention picker heading and per-person avatar; ui 0.43.2 by @backnotprop in #1576
      • feat(ui): mention tokens render as chips in the comment composer; ui 0.44.0 by @backnotprop in #1577
      • feat(ui): annotation card header slot and @ mentions on the card's edit box; ui 0.45.0 by @backnotprop in #1578
      • feat(ui): host labels on the embed picker; ui 0.45.1 by @backnotprop in #1579
      • Preserve OpenCode agent switching on older hosts by @rcdailey in #1570
      • fix(pi-extension): allow plan submission device through planning write guard by @FNDEVVE in #1547
      • fix(ui): keep image annotation save action visible by @katya4oyu in #1469
      • fix: build review before hook in root build by @rNoz in #1389
      • chore: remove the pierre-guard project skill by @backnotprop in #1573
      • fix(annotate): folder empty state names diagram files by @backnotprop in #1588
      • fix(pi): notify review URL in RPC sessions by @Shujakuinkuraudo in #1407
      • docs: complete the local compile command in AGENTS.md by @centraldogma99 in #1420
      • fix(ui): whitespace-only and block-boundary selections no longer throw or create unanchorable annotations by @backnotprop in #1584
      • fix(ui): parse nested frontmatter maps and arrays of maps by @FNDEVVE in #1548
      • fix(share): allow explicit short links for small plans by @FNDEVVE in #1475
      • Add horizontal scroll for diffs with long lines by @Karrq in #1586
      • fix(review): stop contacting the git remote from the idle freshness poll; add PLANNOTATOR_GIT_REMOTE_CHECK opt-out and kill orphaned git transports on exit by @backnotprop in #1585
      • fix(review): prevent submission footer overlap by @leoreisdias in #1513
      • chore(review): remove the first-run review setup dialog; Tree is the default panel view by @backnotprop in #1587

      New Contributors

      Contributors

      @rcdailey returned with the OpenCode model switch in #1569 and then caught what it broke on older V2 hosts before anyone else hit it, fixing it in #1570. The ordering he landed, agent first and model second when the host supports it, is what OpenCode's own clients do.

      @Karrq wrote the per-file horizontal scrollbar in #1224 and waited a long time for it. The branch could not accept a maintainer push, so it was rebased and merged as #1586; the code is theirs and closes two separate reports.

      @FNDEVVE landed three more: the indentation- aware frontmatter parser in #1548, the Oh My Pi plan submission guard in #1547, and short links for small plans in #1475. Their #1474 is also why the review setup dialog was looked at in the first place; the investigation there found the seeded-cookie gate, and the owner chose to drop the dialog rather than repair it.

      @leoreisdias fixed the review submission dialog's footer overlap in #1513, with before and after screenshots and a regression test asserting the footer sits outside the scroll region.

      @katya4oyu kept the image annotator's Save button reachable on narrow screens in #1469, verified on a physical phone, following their compact-viewport toolbar fix from the previous cycle.

      @rNoz fixed the root build order in #1389, validated on a clean Linux checkout, and filed the issue behind it.

      @Shujakuinkuraudo made Pi Web RPC sessions show the review URL in #1407, a first contribution that came with the issue, the one-line diagnosis, and a regression test that does not need a real browser.

      @centraldogma99 corrected the documented compile command in #1420, also a first contribution. They traced both failure modes to the release workflow, including the macOS signing regression that kills a binary built with an older Bun without printing anything.

      The reports that shaped this release:

      • @freimer reported the idle ls-remote loop in #1553, with the hardware-token symptom that made the cost of a once-a-minute network probe obvious
      • @bohjak reported the block-boundary selection bug in #881, separating the crash from the garbage annotation and naming the exact line in the range model; the fix follows their diagnosis
      • @tekumara reported the unreachable horizontal scrollbar in #1566, and @TheOutdoorProgrammer had reported the same thing in #1048
      • @JaeyeongYang reported the frontmatter card showing wrong values for nested YAML in #1485
      • @alfkonee reported that Oh My Pi planning mode blocked plan submission in #1466

      Thank you. Plannotator gets better because you tell us where it falls short.

      Full Changelog : v0.27.16...v0.27.17

    11. 🔗 HexRaysSA/plugin-repository commits sync repo: +3 releases rss
      sync repo: +3 releases
      
      ## New releases
      - [clang-include](https://github.com/oxikkk/ida-clang-include): 1.3.0
      - [haruspex](https://github.com/0xdea/haruspex): 0.10.1
      - [rhabdomancer](https://github.com/0xdea/rhabdomancer): 0.10.1
      
    12. 🔗 r/LocalLLaMA I really don't understand Jev hype rss

      Isn't this what simple neural networks have been able to do for years? Doesn't seem anything special to me.

      submitted by /u/Manerfish
      [link] [comments]

    13. 🔗 Project Zero Windows Exploitation Techniques: Dangling COM Object Registrations rss

      This short blog post is about abusing a privilege escalation bug that Microsoft recently fixed in Windows, CVE-2026-66804, that I and 14 others reported. This issue is an incomplete fix for CVE-2026-50343, a bug dubbed “Dark Elevator” by Calif.

      The root cause of the bug was a dangling COM object registration for the CrossDevice COM object with the CLSID {E9F83CF2-E0C0-4CA7-AF01-E90C70BEF496}. A COM registration typically needs two parts: a server executable, which for in-process components is a DLL and a CLSID entry under the HKEY_CLASSES_ROOT registry key which points to that DLL.

      This object was registered in the system wide classes key, meaning it was accessible to all users on the system, including system services. However the server executable was missing. Specifically it was registered to use the DLL %PROGRAMDATA%\CrossDevice\CrossDevice.Streaming.Source.dll. Not only does this path not exist, it’s also within the C:\ProgramData directory. This is a common location for all users on the system and therefore permits anyone to create directories. Therefore you can create an arbitrary DLL file at that location and the COM object can be instantiated potentially leading to privilege escalation.

      But how to get the COM object, and thus the DLL, loaded into a privileged process? The fixed bug Calif blogged about, CVE-2026-50343, abused a weak registry key permissions to add the class as a installer plugin and then get the InstallService to load it into memory. The issue with the InstallService was fixed, so we need an alternative way to abuse the unfixed dangling COM reference.

      Abuse Custom COM Marshaling, Again

      A technique I’ve used multiple times in the past to load an arbitrary DLL into a privileged process is to abuse custom COM marshaling. When you call an interface method which is implemented out-of-process, the COM runtime will marshal the parameters into an RPC call to send to the server. If a parameter is a COM object then the runtime marshals that object into an OBJREF structure that allows the object to be used in the server. The two main types of OBJREFs are shown in the diagram below, or you can read about them in the official DCOM documentation here:

      The default COM marshaling strategy is by reference which produces a Standard OBJREF containing all the information needed to connect to the original object. The object might even be on a completely different computer. When the object is unmarshaled this information is used to create an RPC channel back to the caller so that the server can call methods on the object.

      The runtime also supports an opt-in marshal by value mechanism if the object implements the IMarshal interface. This allows the object to specify an arbitrary CLSID to use as the unmarshaling object, which doesn’t have to be the same as the object being passed in. When the object is unmarshaled in the server the CLSID is used to lookup an in-process server DLL to load.

      Therefore an obvious technique to exploit the dangling COM object registration is to send a Custom OBJREF to a privileged COM service specifying the CLSID of the dangling object. When unmarshaled, which happens automatically in the runtime before the target method is called, the malicious DLL will be loaded and we’d get privilege escalation. The following code shows how trivial it is to specify the dangling COM class in an IMarshal implementation:

      class FakeMarshal : public IMarshal {
          // Inherited via IMarshal
          HRESULT GetUnmarshalClass(REFIID riid, void* pv, 
                                    DWORD dwDestContext, void* pvDestContext, 
                                    DWORD mshlflags, CLSID* pCid) override
          {
              return CLSIDFromString(L"{E9F83CF2-E0C0-4CA7-AF01-E90C70BEF496}", pCid);
          }
          // ...
      };
      

      We need to find a privileged service to send the marshaled COM object to become an administrator. Unfortunately, finding such a service isn’t so simple. The fact that a custom marshaling object will cause an arbitrary DLL to be loaded into the process and code executed is a risky operation, especially across privilege boundaries. Therefore Microsoft implemented a mitigation which can be enabled to disable custom marshaling in the process unless the class is explicitly opted in, or is one of a small number of trusted components such as classes in the runtime library.

      Since Windows 8 this mitigation is implemented through two mechanisms, the first and original method is setting the EOAC_NO_CUSTOM_MARSHAL capabilities flag when calling CoInitializeSecurity. The second, added to improve security in AppContainer sandboxes is set through the IGlobalOptions::Set method and specifying the COMGLB_UNMARSHALING_POLICY property type. As we’re not trying to escape from a sandbox the only value of importance is COMGLB_UNMARSHALING_POLICY_STRONG which disables custom marshaling similar to the capabilities flag.

      As the dangling COM object isn’t registered as a trusted marshaler this means we need to find a privileged COM server that doesn’t enable these mitigations. The easiest approach is to scan the processes at runtime. The capability flags are stored in the value combase!gCapabilities while the marshaling policy is stored in combase!g_GLBOPT_UnmarshalingPolicy.

      However, I kept thinking there must be a COM service that runs as SYSTEM and doesn’t enable custom marshaling. After a bit of fiddling I found one, although there’s no doubt others. It turned out to be a COM service I’ve researched and exploited before, the Shell Create Object Handler object. This is an interesting COM object, in that while it runs in a SYSTEM service, it’s not directly instantiable:

      PS> $cls = Get-ComClass -Clsid 135fd325-45b7-4c30-89f8-4386961669f0
      PS> $o = New-ComObject -Class $cls
      Exception calling "CreateInstanceAsObject" with "3" argument(s): "Class not registered"
      
      PS> $cls.AppIdEntry | Select Name, RunAs, IsService
      Name                        RunAs               IsService
      ----                        -----               ---------
      Shell Create Object Handler nt authority\system     False
      

      Normally, when a COM object is hosted by a privileged service, it’s registered with the name of a system service that RPCSS will start automatically when the object class is requested. However, in this case as there’s no service,creating the object fails with a “Class not registered” error. In order to create the COM server, the service needs to already be running as the SYSTEM user before you call CoCreateInstance.

      Instead you have to start the privileged server via the \Microsoft\Windows\Shell\CreateObjectTask scheduled task. Fortunately this task can be started by normal users, which you can verify with my Get- AccessibleScheduledTask command:

      PS> Get-AccessibleScheduledTask -Executable | 
               ? Name -Match Shell\\CreateObjectTask
      TokenId  Access                     Name
      -------  ------                     ----
      77E3156D GenericExecute|GenericRead ...\Shell\CreateObjectTask
      

      Of course just starting this task is not enough, you also need to create a global named event, ShellCreateObjectTaskReadyEvent otherwise the task will immediately exit and not export the COM service. A simple script to create an instance is shown below:

      PS> $ev = New-NtEvent -Win32Path "Global\ShellCreateObjectTaskReadyEvent" -InitialState $false
      PS> Start-ScheduledTask -TaskPath "\Microsoft\Windows\Shell\" -TaskName "CreateObjectTask"
      PS> $ev.Wait()
      PS> $o = New-ComObject -Clsid "135fd325-45b7-4c30-89f8-4386961669f0"
      PS> $o
      InterfaceName Iid
      ------------- ---
      IUnknown      00000000-0000-0000-c000-000000000046
      

      You can verify that the object is hosted in a privileged process with the Get-ComProcess command and checking the CustomMarshalAllowed property. Note this command is currently broken on Windows 11 25H2 due to changing structures that I’ve not had a chance to update, it still works on previous versions.

      PS> $objref = Get-ComObjRef -Object $o
      PS> $p = Get-ComProcess -ProcessId $objref.ProcessId
      PS> $p | Select Name, User, CustomMarshalAllowed
      Name    User                CustomMarshalAllowed
      ----    ----                --------------------
      dllhost NT AUTHORITY\SYSTEM                 True
      

      At this point we have everything we need to exploit the dangling COM object, we’ve got a COM service running as SYSTEM with custom marshaling allowed. We can use the CoGetInstanceFromIStorage API to create the object, passing the “fake” marshaled object as the pstg parameter. This object will get marshaled to the COM server process and then unmarshaled unconditionally during object activation. We do need to implement a fake IStorage interface to get it past the local API implementation, which isn’t that difficult but I thought I’d see if there’s an easier way. Let’s look at the supported interfaces:

      PS> Get-ComInterface -Object $o
      
      Name                 IID               HasProxy   HasTypeLib     
      ----                 ---               --------   ----------     
      IUnknown             00000000-0000-... False      False          
      IMarshal             00000003-0000-... False      False          
      IMarshal2            000001cf-0000-... False      False          
      ICreateObject        75121952-e0d0-... True       False
      
      PS> Get-ComInterface -Name ICreateObject | ConvertTo-ComSourceCode -Parse
      [
        object,
        uuid(75121952-E0D0-43E5-9380-1D80483ACF72),
      ]
      interface ICreateObject : IUnknown {
          HRESULT Proc3([in] GUID* p0, [in] IUnknown* p1, 
                        [in] GUID* p2, [out, iid_is(p2)] IUnknown** p3);
      }
      

      The COM object only has one unique interface, ICreateObject. Converting the interface proxy to IDL shows that it takes an IUnknown pointer as its second parameter. Therefore to exploit the dangling COM registration we can just pass the “fake” marshaled object to this parameter and get privileged code execution. I’ve attached an updated, fully working exploit of the bug to the original issue here.

      It’s worth noting that while this exploitation technique makes it easy to exploit dangling COM registrations, it can also be used to exploit buggy COM class custom unmarshalers. Sometimes, just the act of loading a DLL into a process can cause a crash.

      Finding the Original Dangling COM Object Registration

      As a footnote, a quick way to try and find other dangling COM servers would be to use the following PowerShell script with my OleViewDotNet and NtObjectManager modules installed:

      function Test-ComServer {
          param($Server)
          try {
              Use-NtObject($lib = Import-Win32Module -Path $Server -Flags AsDataFile) {
                  $true
              }
          } catch {
              $false
          }
      }
      
      PS> $db = Get-ComDatabase -LoadMode MachineOnly
      PS> $cs = Get-ComClass -Database $db -ServerType InProcServer32
      PS> $cs | ? { -not (Test-ComServer $_.DefaultServer) } | 
              Sort DefaultServer | Select Name, DefaultServer
      

      This will print out any in-process COM class from the machine hive where LoadLibrary can’t find the DLL. It’s important to use LoadLibrary via the Import-Win32Module command as some of the COM registrations only specify the file name and you want to ensure these are resolved correctly according to the system path.

      This script will find the dangling CrossDevice COM class on an unpatched system. Note, you’ll need to manually inspect the paths to see if a DLL can be planted at that location. You could make it smarter by checking if the path is in a directory that can be written to, or even test if an existing DLL can be modified, but that’s an exercise for the reader.

    14. 🔗 r/LocalLLaMA Clarification on the Qwen-image-2.1 license rss
    15. 🔗 r/LocalLLaMA ZCode is now open source rss

      ZCode is now open source | ZCode is now open source , and the reported security issues have been addressed. Source code: https://github.com/zai-org/ZCode The repo includes its desktop app, web workspace, backend, Agent CLI, and runtime. Official announcement: In response to the ZCode product security issues reported by the community, we have completed the necessary remediation and sincerely apologize to all our users. We have open-sourced ZCode at github.com/zai-org/ZCode, placing the code under community scrutiny and making ZCode more open and transparent. We sincerely thank the community developers who previously identified issues in ZCode. Going forward, we will establish an ongoing product security vulnerability reporting and response process. We welcome developers to continue reviewing ZCode and reporting potential issues, and we will provide rewards based on the severity of the issues reported. With respect to the code data referenced by the community, we confirm that no such data is retained and that it has never been used for model training. Following the remediation, we invited the China Academy of Information and Communications Technology (CAICT) and NSFOCUS to conduct security assessments. The results are as follows: Through its technical assessment, CAICT confirmed that the zcode-prod Alibaba Cloud OSS bucket is in a zero-data state. Security remediation has been completed in the ZCode v3.14.0 client. The Repo Wiki feature has been removed, and the workflow for generating and uploading local repository snapshots has been disabled. NSFOCUS confirmed that all data objects in the zcode-prod Alibaba Cloud OSS bucket, as well as the bucket itself, have been deleted. Remediation has been completed in the ZCode v3.14.0 client. The Repo Wiki entry point and the associated generation workflow have been removed, and no functional path capable of triggering the generation of local repository snapshots or transmitting local files externally was identified. Once again, we sincerely apologize and welcome continued scrutiny from the community. The full security assessment report will be released soon. submitted by /u/ResearchCrafty1804
      [link] [comments]
      ---|---

    16. 🔗 Rust Blog GitHub Actions leaking secrets when Miri output is cached rss

      The Rust Security Response Team was notified that Miri stores all environment variables to target/, allowing secrets to persist in caches.

      While not necessary a vulnerability in and of itself, when paired with GitHub Actions caching behavior, it is possible for this to expose secrets to PRs.

      Overview

      GitHub Actions makes it possible to cache directories between runs. Typical setups allow CI runs on main (and other branches) to write to cache, and PRs can only read from cache (preventing cache poisoning). Rust projects tend to speed up CI by caching binaries built by cargo install and sometimes the contents of target/.

      PR CI can be triggered by anyone who can open PRs on your repository. GitHub requires maintainer approval for the first PR, but future PRs will rerun CI on every push. Anyone who has previously landed a change can trigger a CI run extracting information from cached target/ and then cover their tracks by pushing a second commit to the PR.

      GitHub sometimes hides overwritten commits in its UI, making this kind of attack harder to detect. CI run logs and overwritten commits are also deleted after a few months.

      When cargo miri is invoked, Miri needs to retain build-relevant environment variables between runs1. The current code to do so achieves this by storing all environment variables to target/. This, of course, persists when target/ is cached.

      If your environment contained secrets, these can now be accessed by PRs via the cache.

      Our fix

      Our short term fix for this is to make Miri only preserve CARGO_* environment variables (excepting CARGO_*_TOKEN) and OUT_DIR. In the longer term, Miri and cargo may figure out better ways to inform Miri of the relevant list of environment variables. Note that this patch may not be available on nightly yet.

      We also performed an ecosystem scan of GitHub repositories and identified 1 repository with this issue and 7 repositories that do not appear to be vulnerable but should be cautious anyway. We have reached out to those maintainers.

      Am I affected?

      It is likely that our scan was imperfect, so we recommend you check your own GitHub Actions setups if you run Miri.

      You are vulnerable if:

      • You run cargo miri in CI
      • The step that runs cargo miri has access to secrets as an environment variable:
        • By being passed in to the step itself as an environment variable
        • By being set in env for the workflow
        • By being passed in to a previous step that persists it in the environment somehow
      • The workflow being used caches the target directory, usually done via actions/cache or swatinem/rust-cache
      • The cache is accessible to PRs (common and often the intended use case)

      Possible quick fixes include:

      • Disabling cache for that job.
      • Scoping secrets to steps in that job that do not call Miri.
      • Temporarily disabling Miri.

      Once done, please clear the cache. Consider rotating any secrets that might have leaked.

      The Miri release in the upcoming nightly (2026-09-22) will no longer have this problem.

      Even if you do not run Miri, ensure jobs that can write to public caches do not have access to secrets. Many tools do not have special handling for secrets, and assume the entire environment can be written to the filesystem.

      Threat model

      We consider it bad practice to have a cache that can easily be tainted by secrets.

      If caching target/, it is worth making sure that the inputs to processes that create target/ (anything invoking cargo) do not have secrets available. It is generally rare for standard cargo build/test subcommands to need any secrets or tokens2, so this is mostly a matter of being careful about having secrets exposed as environment variables to the entire job.

      Cargo/Miri/Rust does not guarantee that environment variables will be safe from being copied into target/. While we are treating this as a security issue and patching it out of an abundance of caution, this is not something you should rely on in general. Beyond official Rust tooling, it is possible for build scripts to be doing things that lead to the environment being stored in compilation artifacts.

      Acknowledgements

      Thanks to Predrag Gruevski of OpenAI for reporting this issue to us. Furthermore, the ecosystem scan was performed using Codex access and credits donated by OpenAI, which we also thank them for.

      Issue triage and remediation was performed by Manish Goregaokar, Ralf Jung, Ben Kimock, Weihang Lo, Jacob Finkelman, Walter Pearce, Josh Stone, and Mark Rousskov.

      1. Miri is invoked multiple times by cargo miri for complicated reasons

      2. In theory it could come up with build scripts reading from the network

  4. September 20, 2026
    1. 🔗 r/LocalLLaMA Qwen3.8-Flash-Next Cosmic Arcade oneshot slop game rss

      Qwen3.8-Flash-Next Cosmic Arcade oneshot slop game | To test what it can do. Qwen3.8-Flash-Next Intel Autoround W4A16 running locally on 4xV620 ~2k prefill and 70ts decode.. Were running around 3 hours. Harness is OMP (I think it made a big difference). Most of the time model was running 2 browsers simultaneously and testing/fixing everything. The most sloppy prompt possible:

      create a game where a space traveller in the space he neets eniemes who shoots in him and asteroids which he should avoid. he have a blaster gun to shoot enemies and asteroid. space traveller in scafandr and fyoing on the rocket. game should be very lifelike detailed and done with html and js (use any lib you want). 3d game photorealistic. ofc run the browser to debug and fix stuff always
      

      submitted by /u/Thin_Pollution8843
      [link] [comments]
      ---|---

    2. 🔗 r/LocalLLaMA Lawsuit says Anthropic, OpenAI, SpaceXAI and Google made illegal agreement on AI slowdown rss
    3. 🔗 r/LocalLLaMA Qwen-Image-2.1 released! rss

      Qwen-Image-2.1 released! | Meet Qwen-Image-2.1, the most balanced and cost-effective image generation model in the Qwen-Image series! Now open weights! 🎨 A unified model for both generation and editing, delivering top-tier quality in a lightweight package. Highlights: - Compact & exceptionally fast: A lightweight 7B architecture that outperforms most closed-source models, with drastically accelerated inference for multi-image inputs. - Native transparency: Natively generates and edits RGBA layers, enabling seamless compositing and text editing within transparent images. - Versatile, high-fidelity editing: Supports up to 10 reference images and precise local control while preserving strict fidelity for portraits and products. - Broad coverage & stunning aesthetics: Excels at panoramas, infographics, and virtual try-ons, delivering realistic textures and elegant typography. Start to create your next masterpiece with Qwen-Image-2.1! - Blog: https://qwen.ai/blog?id=qwen-image-2.1 - GitHub: https://github.com/QwenLM/Qwen-Image-2.1 - Model Scope: https://www.modelscope.cn/models/Qwen/Qwen-Image-2.1 - Hugging Face: https://huggingface.co/Qwen/Qwen-Image-2.1 submitted by /u/ResearchCrafty1804
      [link] [comments]
      ---|---

    4. 🔗 earendil-works/pi v0.86.1 release

      New Features

      • Meta Muse provider — Sign in with Meta using /login meta or use META_API_KEY to access Muse Spark models. See Meta (Muse subscription).

      Added

      • Added Meta (Muse subscription) login via /login meta with automatic Model API key refresh, plus META_API_KEY support (#9096 by @xl0).

      Changed

      • Enabled Node's persistent compile cache before loading the bundled CLI runtime, reducing repeat launch time.

      Fixed

      • Fixed /bug descriptions dropping line breaks from pasted diagnostics.
      • Fixed /bug hints appearing for user cancellations and retryable provider failures such as service unavailability.
      • Fixed clipboard copy failing in containers and WSL without WSLg by restoring the OSC 52 fallback when no display is available, and added a verified Windows clipboard backend for WSL (#9688).
      • Fixed inherited z.ai Prompt too long errors not being recognized as context overflow (#9805).
      • Fixed inherited Cerebras models advertising unsupported strict tool schemas, which caused HTTP 400 errors when strict and non-strict tools were mixed (#9804 by @EdenGottlieb).
    5. 🔗 Register Spill Joy & Curiosity #100 rss

      It's the week of Jev! I'm really, really, really, really excited about it. I mean: really.

      It's like someone blew up a confetti bomb in the world of LLMs and now you realize how grey everything looked before.

      But Jev is not an LLM. It's a model "built to make fast, structured decisions that software can use directly." TypeSafe says we should think of Jev "as a frontier-intelligence function call: unstructured state in, typed probabilistic decisions out."

      I explained it as a "smart if-statement" to someone and my only slightly longer explanation is this:

      Think of how you'd get an LLM to decide between a fixed set of options.

      Then imagine it orders of magnitude faster and cheaper.

      "What's the best label for this?"

      "Should I click here or there?"

      "What's the next line I should look at?"

      "Do I go left or right?"

      "Invalid or valid?"

      "Which of these widgets should I show?"

      I had Amp build a little Copilot-style autocomplete for a shell, with Jev picking the next most likely command from shell history. Then Amp built a Neovim plugin (and called it hunch.nvim, which is a great name) that uses Jev to predict the line you next most likely want to jump to. Now, let's linger on this a bit.

      Two years ago, that was what Cursor was famous for. Yes, Cursor did and does more than that and the quality isn't close, but… when we were working on Zed's Edit Predictions we had to fine-tune a model to get into the same league! Now it's a single API call and the latency is 200ms. That is incredible!

      Then I built a prototype that uses Jev to turn the Amp Dial, switching between models based on your prompt.

      Yes, all of this was possible before, but it's so fast and so cheap that I still can't believe it.

      Sometimes a change in cost and performance is what creates a whole new category of technology. In my room, there are lightbulbs that contain computers, that can talk over a local network with me. Yes, we had computers in homes in the 70s and 80s, but no one would've ever thought that we'd have so many computers that are so tiny and cheap that we'd put them in freaking lightbulbs.

      That's what makes me so excited about Jev. It feels like we now have a truly smart Lego brick that we can use everywhere. Fun times.

      • What I believe about the future of software development. I posted this originally on X, saying that most predictions I see are still way too conservative, and it completely blew up.

      • "I don't like passkeys". Passkeys are such a weird technology. I can see how they're technically brilliant and solve a lot of issues, but it does feel like Google and Apple and 1Password invited The Guy Who Invented Cookie Banners and said: what would you do, how would you roll this out?

      • Colossus published a very long Mark Zuckerberg profile. Fascinating read. It's very well written and somehow managed to make me think thoughts about Zuckerberg that I haven't thought before, which is quite the feat, considering that we've all been aware of Zuckerberg for, what, nearly twenty years now?

      • Einride and Lidl Launch First Autonomous Cab-less Truck on German Public Road. As an Aldi man myself, let me say: hell yeah, let's go, Lidl!

      • How To Write With An LLM. I like this! I still don't know how to use LLMs for writing, because I never want them to write something for me and even seeing how they would write it seems to poison my brain. I should probably add an "only tell me what to change and why, but never ever show me how you'd write it" to my system prompts.

      • Marc Brooker, Distinguished Engineer at AWS: "I believe that, long-term, humans have no role in routinely reviewing code. […] The idea that humans will reliably look through code to find the increasingly rare issues that automated tools miss seems like a fantasy." Yep.

      • I wanted to link to Powermove here and say "look, editable software! It's happening! Jellyware!" but now realize that it's not quite that yet. It's a video editor with an agent inside, but it doesn't seem like you can edit the video editor itself. That's coming, though.

      • We are all Product Engineers now: "The cost of writing code collapsed, and the cost of reviewing, fixing and operating it is following, and I'm assuming it gets there. What's left of making software is finding out what people actually want, defining it precisely, and making it pleasant to use. That cost is per piece of software and doesn't transfer, so as the amount of software goes to infinity, which it will because there's no ceiling on demand, that cost becomes the whole job. That job is called a product engineer." Obviously agree, but what I didn't know about was Google's APM program: "Formalized training of product people barely exists. Google's APM program, which Marissa Mayer started in 2002 and which is the template everyone copies, takes about fifty people a year out of something like twelve thousand applicants." Would love to read more about it.

      • "I asked Astra to create an interactive aquarium wallpaper for my Mac. The fish respond to the cursor!" Beautiful!

      • John Gruber, Daring Fireball, with Thoughts and Observations on Apple's 'Surprise and Shine' Event; the Announcements of the iPhones 18 Pro, AirPods 5, Apple Watches Series 12 and Ultra 4, and the iPhone Duo; and the Dawn of the Ternus, John Ternus Era at Apple. Yes, that's the title. The whole thing is Peak Gruber, I love it. What a writer. Now, I really do enjoy his words and sentences, but let me also use this occasion to say how much I admire him as a Pedantic Punctuation Pro: the numbered lists vs. the bulleted lists, the space between the numbers and the colon in aspect ratios, using × in display resolutions, … You could show me this sentence without any other context and I'd say it was written by Gruber: "The original iPhone (2007) display was precisely 3 : 2 (480⁠ ⁠×⁠ ⁠320 pixels, and let's call it 1.5 : 1 for comparison's sake to the following ratios), and this remained true through the iPhone 4 and 4S (960⁠ ⁠×⁠ ⁠640 pixels, 2× retina)."

      • This was a very entertaining and fascinating read: why I can't stop thinking about Papua New Guinea and what I think everyone should know about it. I've become somewhat of a Papua New Guinea Head myself (that's what they call us (no, they don't)), after reading this piece, They Burn Witches Here, nearly a decade ago. I couldn't shut up about it at work. For two weeks straight: "Dude, did you know that in Papua New Guinea…" Until one day a colleague said: "Yeah, I did know." Turns out that colleague, Nick Skelton, was a tour guide in PNG (as we call it) and even wrote a book about it, which I immediately ordered and read.

      • Moats & the Barbell-ification of Software: "Long term, I think the evolution of the software industry might mirror what happened to newspapers in the 1990s. There will be a smaller number of very large software companies. […] I also think there will be one large software company by industry (e.g., Legal, Finance, Medicine) […] I think most mid-sized point solutions will likely be consolidated or die off. The optimal strategy for the winner will be to do it all. […] Lastly, I think there will be an explosion of "small" software. Most of this will be people building software for themselves or their own companies, but I think there might also be an explosion of small software businesses that make niche software, similar to the D2C explosion of the 2010s (powered by Shopify and Meta Ads)."

      • AI-generated posters don't have to be horrible. Yes! Exactly! Now, read this, and then imagine you're a person who can come up with all these styles without having to ask ChatGPT first. And then, on top of that, imagine that the very same person also knows something about music, and literature, and politics. Imagine how they could combine what they know and mix and remix. That , I think, will be valuable in the future.

      • Window Sweaters: "A little Mac app I made to give my windows sweaters. 🧶 Knitted borders, colours inspired by your favourite apps, and a cosier desktop."

      • This is one of the funniest tweets of all time.

      You should ask Jev whether you should subscribe. No, actually, I know the answer: you should.

    6. 🔗 HexRaysSA/plugin-repository commits sync repo: +1 release rss
      sync repo: +1 release
      
      ## New releases
      - [SigMaker](https://github.com/mahmoudimus/ida-sigmaker): 1.15.0
      
    7. 🔗 Jamie Brandon 0061: i'm not a cat, artificial adventures, synthetic sagas, anthropic, sponsors rss
      (empty)
    8. 🔗 Jamie Brandon Synthetic sagas rss
      (empty)
    9. 🔗 Filip Filmar An icosahedron on HDMI, drawn by a TxHDL core rss

      tl;dr: A RISC-V core written in TxHDL draws a turning icosahedron on a monitor, with the TxHDL logo in the corner. Watch it at https://youtu.be/YbHtntvvydk. The whole thing, core, memory, video, Ethernet and a serial loader, is one bitstream in the board’s flash, and the program that draws is 560 lines of Rust that go down the serial port in about a second. Read on for how it is put together.

      What you are looking at

      The board is an Alinx AX7A200B, with an Artix-7 200T on it. The core is Vreteno, an RV32IMC that I wrote in TxHDL together with Dragiša Janković. If you have not seen TxHDL before: you write the hardware as a Rust program, and the Verilog, the simulation and the checks all fall out of a Rust library and a few macros. I wrote a whole post about it if you want the long version.