- β
- β
- September 10, 2026
-
π plannotator/herdr-annotate rust-lite-v0.1.0 release
What's Changed
- add windows support and improve perf by @nguyenchiencong in #1
- fix: measure terminal columns in cells so CJK text lands correctly by @heeseon87 in #3
- feat: review documents with plannotator-tui by @backnotprop in #4
- docs: remote sessions by @backnotprop in #8
- fix: review pane command resolves from the plugin root by @backnotprop in #9
- assets: install cards in the Herdr Annotate palette by @backnotprop in #10
- readme: colons instead of dashes by @backnotprop in #11
- readme: install wording by @backnotprop in #12
- readme: required line only by @backnotprop in #13
- readme: link to the demo video by @backnotprop in #14
- readme: demo links for full and lite by @backnotprop in #15
- readme: demo badges for the full and lite installs by @backnotprop in #16
- readme: smaller demo badges by @backnotprop in #17
- readme: demo link after each install description by @backnotprop in #18
- readme: badge colors match the cards (full gold, lite lavender) by @backnotprop in #19
- pin plannotator-tui 0.3.1 (omp and hermes hosts; herdr session passthrough) by @backnotprop in #20
- scripts: smoke test for fresh, upgrade, lite and swap installs by @backnotprop in #21
- pin plannotator-tui 0.3.2 (file tree scrolls to the selected row) by @backnotprop in #22
- capture: take a handed-off selection file before the clipboard (headless servers) by @backnotprop in #24
- pin plannotator-tui 0.4.0 (opencode host) by @backnotprop in #25
- readme: remote sessions: invoke annotate.capture through the api by @backnotprop in #26
- pin plannotator-tui 0.4.1 (opencode 2; herdr's agent label for npm-installed pi) by @backnotprop in #28
- pin plannotator-tui 0.5.0 (multi-line comments; double-click blocks; instant folder open) by @backnotprop in #29
- Native Rust runtime for Annotate Lite evaluation by @backnotprop in #27
- windows full-mode packaging by @backnotprop in #30
- revert: windows full-mode packaging by @backnotprop in #31
- full: retain gated packaging prerequisites by @backnotprop in #32
- feat(editor): word and line movement/deletion keys by @heeseon87 in #34
- feat: add copy-archive global action by @backnotprop in #39
- chore: pin plannotator-tui 0.7.0 by @backnotprop in #41
- feat: emit osc 52 for pane copies by @backnotprop in #42
- docs: add the windows full acceptance checklist by @backnotprop in #44
- chore: pin plannotator-tui 0.8.0 by @backnotprop in #45
- feat(rust-lite): mirror the editor word and line keys by @backnotprop in #46
New Contributors
- @nguyenchiencong made their first contribution in #1
- @heeseon87 made their first contribution in #3
- @backnotprop made their first contribution in #4
Full Changelog : https://github.com/plannotator/herdr- annotate/commits/rust-lite-v0.1.0
-
π backnotprop/plannotator v0.27.13 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
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
v0.27.4 | Portable Guided Review exports, guides.show share links, guide CLI, jj Call Flow
v0.27.3 | Folder watcher freeze fix on large repos, first SBOM-attested release pipeline
v0.27.2 | Mobile plan and code review, Codex CLI 0.147 fix, configurable markdown extensions
v0.27.1 | Open-in-editor launch fix, file headers respect Viewed/Git-add visibility togglesWhat's New in v0.27.13
Six pull requests, four of them from community contributors, two from first- time contributors. The headline answers a request straight from X: open a code review against the base you actually mean, not always the trunk. Alongside it: a security hardening of the document endpoint, the end of our longest-standing CI flake, and a Amp delivery fix.
Open a review on a specific base
plannotator reviewalways opened against the detected trunk, even when you were reviewing one layer of a stacked branch. A user on X put it plainly: "it always opens vs. main even if it explicitly understands that I'm reviewing a stack."Now the review can open exactly where you point it:
# stack: main β feature/part-1 β feature/part-2 (you are here) plannotator review --base feature/part-1 # opens on "All changes since feature/part-1": just what this layer adds plannotator review --base feature/part-1 --diff-type merge-base # the committed-only view of the same layer--basetakes anything git resolves: a branch,origin/branch, a tag, a commit,HEAD~3.--diff-typepicks the opening view from the same nine modes the dropdown offers. Both are a starting state, nothing more: the session opens there, everything stays changeable in the UI, and neither flag ever touches your saved defaults. A base that does not exist fails at launch with a clear message and a "did you mean" suggestion instead of silently producing a wrong diff.This matters most when an agent opens the review for you. The agent knows which layer it just built, so it can hand you a review already looking at the right thing instead of telling you which dropdown to click. The installed skills teach exactly that: reviewing a stack layer, pass
--base <the branch below yours>.The flags work across every host that launches reviews through the CLI, and error honestly on surfaces where a base has no meaning (jj, GitButler, Perforce, multi-repo workspaces, and PR URLs, whose base comes from the platform). #1484
One behavior change shipped with this. The review command used to silently ignore flags it did not recognize; a typo like
--bse mainopened a review as if you had typed nothing, and in the worst case an unknown flag could swallow the PR URL next to it. Unknown dash-prefixed flags now fail loudly with a usage hint, matching how annotate has always behaved. Plain words stay tolerated, so slash-command hosts that forward your raw sentence keep working. OpenCode and Pi slash commands also now reject CLI-only transport flags such as--tailscalethat they previously accepted and ignored. #1483Symlinks can no longer read outside the project
A symlink committed into a repository you are reviewing could point anywhere on your disk, and the endpoint that serves linked documents would follow it: the requested path looked like it was inside the project, but the content came from outside it. Document reads are now gated on real-path containment in both server runtimes: a path must land inside the project both as written and after resolving symlinks, or the request is refused.
Legitimate symlink setups keep working, including symlinked project roots (macOS temp directories) and links that resolve within the project. Three edge behaviors changed on purpose: a symlink escaping the project returns 403 on every path through the endpoint, HTML files over the 2MB annotate cap now return 413 where one path previously served them in full, and a file that exists but cannot be opened returns 500 instead of 404.
Contributed by @bendrucker in a first contribution that went well beyond its own scope: along the way he reproduced our longest-standing CI flake, disproved our working theory with actual experiments, and traced it to the real root cause below. #1437
The CI flake is dead, and tests stay out of your data
Four annotate-server tests had been failing intermittently on CI for weeks (#1464), passing on rerun, resisting diagnosis. The root cause turned out to be a single line: shared storage captured the data directory once at module import, so a test that imported it under a temporary override poisoned every later test in the process, and test-file discovery order decided who got hit. The same freeze meant a full test run could write into a contributor's real
~/.plannotator.Storage now resolves its directory per call, and the test suite sandboxes
PLANNOTATOR_DATA_DIRfor every run, with regression tests locking both halves down. Two contributors converged on the same root cause independently within a day, from different starting points: @FNDEVVE working from our test-isolation issue, and @bendrucker debugging his own PR's CI failures. Closes #1455 and #1464. #1473Amp: feedback is routed by decision, never guessed from prose
The Amp plugin classified review outcomes by searching the rendered feedback text for phrases, so a genuine comment like "this path has no feedback loop, add one" pattern-matched as no-action and was silently dropped. The CLI now offers
plannotator review --json, emitting one structured{ decision, message }record from the same builder as the plaintext output, and Amp routes purely on the decision field. The prose classifier is gone. An outdated CLI produces a recoverable update notice with the captured output, never a guessed decision.Contributed by @FNDEVVE, closing #1456. #1476
Additional Changes
- Selection toolbar stays on screen on phones : selecting short text near a screen edge in compact touch layouts overflowed the floating toolbar past the viewport, clipping its buttons. It now clamps inside the screen (respecting notch safe areas) and keeps its centered position whenever that fits. Desktop placement is untouched. Contributed by @katya4oyu in their first contribution. #1471
- The view dropdown follows the live base : the "All changes since " option label was baked at session start from the detected trunk and never updated, so it could contradict the base picker sitting next to it. It now renders from the active base.
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: Run
/pluginin Claude Code, find plannotator , and click "Update now".Pi: Update
@plannotator/pi-extensionto 0.27.13 and restart Pi.OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorWhat's Changed
- feat(review): open a review on a specific base and diff type in #1484
- fix(review): strict argument parsing for unknown review flags in #1483
- fix(doc): deny symlink escapes on /api/doc reads by @bendrucker in #1437
- fix(test): isolate test-run data from contributor history by @FNDEVVE in #1473
- fix(amp): relay structured decisions without prose classification by @FNDEVVE in #1476
- fix(ui): keep selection toolbar within compact touch viewport by @katya4oyu in #1471
New Contributors
- @bendrucker made their first contribution in #1437
- @katya4oyu made their first contribution in #1471
Community
This release is mostly the community's. @bendrucker shipped the symlink containment work through two rebases we caused, and when CI failed on his branch he did the diagnosis himself: reproduced it deterministically, tested and disproved our working theory, and root-caused a flake that had dogged this project for weeks, then filed the follow-up (#1477) for the remaining cases. @FNDEVVE swept our own issue tracker and closed two filed issues in as many days, with fixes careful enough that one of them independently matched bendrucker's root cause line for line. @katya4oyu fixed a real phone papercut with a minimal, well-tested change that read the repo's conventions closely enough to regenerate a build manifest most first PRs miss. And the headline feature exists because a user on X told us the review always opened against the wrong base when reviewing a stack. They were right.
Thank you. Plannotator gets better because you tell us where it falls short.
Full Changelog :
v0.27.12...v0.27.13 -
π r/LocalLLaMA So relevant rss
| submitted by /u/0dayturtle
[link] [comments]
---|--- -
π smol-machines/smolvm smolvm v1.14.6 release
What's Changed
- Bump libkrun and rebuild the bundled libraries for all four platforms by @BinSquare in #1217
- Show a pack pull's download progress and report the bytes a broken transfer actually moved by @BinSquare in #1218
- Free a machine's data before the registry write when deleting by @BinSquare in #1219
- Resolve an archive request against the workspace root by @BinSquare in #1220
- Bump the workspace to 1.14.6 by @BinSquare in #1221
Full Changelog :
v1.14.5...v1.14.6 -
π BarutSRB/OmniWM OmniWM v0.6.9 release
What's New Since 0.6.8
There are zero breaking changes since 0.6.8.
- Credit sponsors Γlvaro BarchΓn and Marc Hendrichsen.
- Decompose UI views, overview geometry, CLI completions, and IPC arguments.
- Decompose IPC models and rule engine and consolidate layout contexts.
- Fixed scratchpad ownership, persistence, and terminal occlusion.
- Treat compiler warnings as errors and fix lifecycle bugs.
- Fixed lifecycle races and streamline Niri navigation.
- Clean up Swift declarations and concurrency annotations.
- Reduce settled Niri edge strips and stabilize window parking.
- Fixed scrolling in the App Rules application picker.
- Preserve Niri monitor contact through native rounding.
Official website and documentation: https://omniwm.app
Installation guide: https://omniwm.app/guides/install/Release Integrity
The OmniWM app is Developer ID signed, Apple-notarized, stapled, and Gatekeeper verified.
OmniWM-v0.6.9.zipSHA-256:9c24ab174e11a1e21155a0640e0323beaa7e22a402e59b69694c8465b002b165GhosttyKit.xcframework-v0.6.9.zipSHA-256:02ec649259f7465a8e4ae4866f1ef5b9ae876b25190801a340c67052b9324dd4
-
π HexRaysSA/plugin-repository commits sync repo: +3 releases, -2 releases rss
sync repo: +3 releases, -2 releases ## New releases - [ida-nexus](https://github.com/hexrayssa/ida-nexus): 0.11.0, 0.10.8 - [vtable-context-tools](https://github.com/oxikkk/ida-vtable-tools): 1.2.0 ## Changes - [ida-codemode](https://github.com/hexrayssa/ida-codemode): - removed version(s): 0.3.1, 0.3.0 -
π Console.dev newsletter htmx 4 rss
Description: Enhance HTML.
What we like: Simplifies the approach to adding attributes to HTML tags for dynamic features. Now uses fetch(). Makes it easy to implement features like infinite scroll, form post, search as you type, polling, and streaming responses. Still pretty minimal (11kb) and no dependencies.
What we dislike: Lots of attributes littered all over your HTML, but that is the point.
-
π Console.dev newsletter Solo rss
Description: Loader for Linux static binaries.
What we like: Makes static binaries for GPU-accelerated code actually work. Makes it easy to build self-contained applications that can benefit from acceleration. Compile to musl, but still use common shared packages.
What we dislike: Incomplete ABI coverage: unsupported glibc calls currently abort. Musl has its own compatibility issues.
-
- September 09, 2026
-
π MetaBrainz The super special (lousy) shirt plan rss
Editors are by far MetaBrainzβ biggest and most irreplaceable resource.
They (you) spend countless hours entering data for free, be it for the love of music, to tidy their own collections and listen histories, to support their scenes, to archive historical and cultural data, to apply the cool and soothing editing brain-balm, or a combination of all of the above and more.
Some of the top editors have provided the backbone of MusicBrainz for years, decades, and often perform the more tedious data maintenance and checking tasks.
A few summits ago, the question was asked - can we give these editors, say those with 1 million+ edits, some recognition without getting into the quagmire of things like gamifying?
Enter super special (lousy) shirt plan.
reo showcasing his super special lousy shirt - a
real and rare image of a top MusicBrainz editor outside!?Super special shirt plan is simple, we ask editors with over a million edits if they would like a lousy shirt (or their choice of shirts from our merch store), and if they say yes, we send them a lousy shirt!
The plan was to accompany the shirts with an optional questionnaire/interview, so we could showcase some of our top editors and their editing tips and tricks. Reo said, on this topic: "I think many top editors don't get to top editorship by virtue of being very social". Turns out he may have had a point.
Social or not, we appreciate all of you immensely. Thank you.
1,000 and 100,000 edit versions of this shirt are available in the store for anyone with the required edit count (honor system!) to purchase. The 1 million edit version is exclusive to super special shirt plan.*
If you have other ideas for how we could show appreciation to editors and voters (ideally within budget and without having to code and maintain complex new systemsβ¦) or want to shout out someone doing a great job, please comment below. If you have 1 million edits and did not receive your shirt email, please contact a staff member (we are available via ChatBrainz).
please don 't abuse the system to increase your edit count. It's not worth it for a lousy shirt that your friends and family won't understand.
*in case it gets lost - super special shirt plan doc can be accessed here (MeB staff access only, sorry) -
π r/LocalLLaMA Apple A20 Pro debuts with 7-core GPU, 32-core Neural Engine and 50% more memory bandwidth (~115 GB/s) rss
| It seems to use a 96-bit LPDDR5X memory bus, instead of the previous 64-bit wide busses. Considering it's on 2nm, that's expensive silicon. That should result in around 115 GB/s memory bandwidth. A20 Pro also doubles the size of Apple's dedicated Neural Engine (from 16 to 32 cores total). submitted by /u/Balance-
[link] [comments]
---|--- -
π anthropics/claude-code v2.1.267 release
What's changed
- Added
maxEffortLevelsetting (top-level or per model undermodelSettings): caps the effort level on every provider, including Bedrock, Vertex and Foundry; users can still pick a lower level - Added
--system-prompt-snapshot offto render the system prompt fresh on every request instead of reusing the conversation's recorded prompt (for iterating on prompt text) - Fixed Cowork scheduled tasks in the cloud failing at startup for organizations whose managed settings require sandboxing
- Fixed
/contextand other local command output rendering blank on mobile clients - Fixed shift+enter and option+backspace not working after reconnecting to a tmux or ssh session inside an agent view
- Fixed the dim last-prompt header not appearing at the top of the conversation when scrolling up in fullscreen mode
- Fixed Workflow
agent()calls with large output schemas being refused in auto mode instead of being checked by the safety classifier - Fixed a case where a marketplace entry path containing a backslash could bypass the containment check for fetched marketplaces on macOS and Linux
- Fixed expired AWS or Google Cloud credentials under a host app such as Claude Desktop retrying ten times with a generic "request failed" before the re-authenticate error appeared
- Fixed resuming a session after
/compactor another slash command ran via-p --resume: a spurious "Continue from where you left off." turn is no longer inserted - Fixed resuming a large session (transcript over 5 MB): parallel tool calls and their hook output are no longer dropped from the reloaded conversation
- Fixed managed
allowedHttpHookUrls,httpHookAllowedEnvVarsandallowedChannelPluginsto admit nothing, not everything, when unreadable - Fixed
/loginon machines whose managed settings require Claude apps gateway sign-in: Esc now closes the dialog instead of doing nothing - Fixed artifact publishes cut off by a dropped connection mid-upload: they now retry once when Claude Code can tell the upload never completed, instead of reporting an unknown outcome
- Fixed
effort:frontmatter on custom commands, skills, and subagents being ignored on models whose default effort is still pinned (Opus 4.7, Opus 4.8, Fable 5) - Fixed artifact publish failing with an unhelpful error when the page file isn't valid UTF-8 or contains a replacement character (U+FFFD); the error now names the line and column to fix
- Fixed
claude agents@directory menu not listing repositories created after the session started - Fixed Remote Control clients that join a Claude Desktop or VS Code session showing a stale permission mode until it was changed again
- Fixed
claude remote-controlexiting and dropping every attached session when its server credential expires (about 30 days after start); the host now re-registers and keeps going - Fixed the usage-limit warning flickering on and off during a session when requests for different models or modes report different limit windows
- Fixed earlier reasoning being dropped when an MCP server re-sends, or a built-in tool re-renders, a tool the model already loaded
- Fixed a tool that disappears mid-conversation, from a disconnected MCP server or an upgrade, rewriting the tool list and discarding earlier thinking
- Fixed a background worker forked from a conversation adding EnterWorktree to the conversation's tool block mid-session, which broke prompt-cache reuse
- Fixed mid-session MCP and plugin tools being added to the tool list in sessions without ToolSearch, which broke prompt-cache reuse; supported models now receive them as deferred definitions
- Fixed switching models with /model re-sending every tool definition (a prompt-cache miss); commit and PR attribution text now arrives as a conversation note that updates on model changes
- Fixed resumed sessions rewriting the inline tool set when an MCP connector reconnects at a different moment than before
- Fixed resumed sessions re-rendering tool descriptions instead of replaying the recorded ones when the first turn ran a tool
- Fixed prompt-cache misses and dropped extended thinking when a claude.ai connector's tools change between a session and its resume
- Fixed resumed sessions rewriting earlier MCP tool announcements (and dropping extended thinking) before their connectors reconnect
- Fixed a prompt-cache break when a print-mode (
-p) conversation is resumed interactively: the system prompt prefix no longer changes - Improved the
/diffpanel: it no longer flashes "0 files changed" and a spinner before settling, and its empty state is centered in the panel - Improved the Bash tool's description guidance so Claude describes what a command does in plain words instead of echoing the command
- Improved sandbox guidance so Claude suggests
/copywhen clipboard commands such aspbcopyfail inside the sandbox - Improved
--resumefirst-render time for sessions with many Bash tool calls - Improved prompt input responsiveness: keystrokes no longer occasionally wait a frame behind spinner or streaming repaints
- Improved prompt-cache stability: subagents and sessions started with
--system-promptor--append-system-promptnow record the system prompt and tool definitions once instead of re-rendering them - Improved Artifact tool publish errors: when a publish is refused, the message now says why and what to do about it
- Self-hosted runner: Changed
--use-anthropic-git-proxyto be reported to the server at registration and to print a warning for each session that still clones through the legacy git proxy - Gateway: Changed
forward_user_identityupstreams to return a 429 as-is to a developer whose email was forwarded, instead of failing over to the next upstream, so the proxy's per-user limits hold - [VSCode] Fixed the extension host hanging at 100% CPU when forking, editing an earlier message, or rewinding in a conversation whose saved transcript contains a cyclic parent link
- [VSCode] Fixed pasting a screenshot on WSL2/WSLg inserting raw image bytes into the chat input; the image is now attached when the clipboard provides it, otherwise the paste is ignored
- [VSCode] Fixed chat diff blocks always rendering with a dark editor theme; they now follow the active VS Code color theme, including high contrast
- [VSCode] Fixed mixed right-to-left and English text rendering in the wrong order while typing in the message input
- [VSCode] Fixed accepting an edit in the diff view on a file with Windows (CRLF) line endings failing with "String not found in file"
- [VSCode] Fixed @-mentions dropping files whose paths contain spaces
- [VSCode] Fixed the sessions list view failing to load in windows connected over Remote-SSH when the workspace folder exists only on the remote host
- [VSCode] Fixed runaway ripgrep processes when viewing files in large or symlink-heavy workspaces
- [Claude Code on the web] Fixed GitHub Enterprise Server sessions showing your GitHub account as disconnected once its token expired; PR and issue operations now refresh it automatically
- [Claude Code on the web] Fixed
ghand GitHub API calls failing in organizations without the Claude GitHub App; they now use your connected GitHub account and say so when none is connected - [Claude Tag] Added a "Use a custom connector" link to the preset connection forms in Claude Tag admin settings, so you can switch to a custom connection without starting over
- [Claude Tag] Fixed Claude replying "The API rejected the request as invalid" when the organization has run out of usage credits; the reply now says so and explains how to add more
- [Claude Tag] Fixed thread requests to edit or delete a message Claude posted at the channel's top level being answered with a correction instead of reaching the session that posted it
- [Claude Tag] Fixed Connect on Tool access requests under Admin settings > Review requests failing with "Authorization failed" or showing the requested access bundle as deleted
- Added
-
π r/LocalLLaMA Why the hell is LM Studio making LM Studio so difficult to download? rss
| Who is the marketing genius at LM Studio that decided that going ALL IN on pushing their new Bionic Agent product meant they are going to make it a giant pain in the ass to find and download actual LM Studio. This is the dumbest marketing decision Iβve ever seen. I used to love LM Studio, it was the middle stepping stone in the logical progression of inference. Most OGs here likely started with Ollama, moved to LM Studio, on their way to vLLM. Now trying to go to LM Studio takes you to Bionic. I mean, you can eventually find LM Studio but they make it not super easy. Hereβs a thought LM Studio, maybe stop redirecting me to something I donβt want to download when Iβm trying to find your actual namesake product. Iβm glad youβre excited about the future of Agents and whatnot, but youβre absolutely ruining any goodwill I have for your products by trying to force feed me Bionic. Stahhhhhp! submitted by /u/Porespellar
[link] [comments]
---|--- -
π smol-machines/smolvm smolvm v1.14.5 release
What's Changed
- Fix TCP relay spawn failure cleanup by @BinSquare in #1210
- Run a machine created from a pack as the user the pack records by @BinSquare in #1215
- Bump the workspace to 1.14.5 by @BinSquare in #1216
Full Changelog :
v1.14.4...v1.14.5 -
π r/LocalLLaMA Deepseek Has Soft Retired Deepseek V4 Pro rss
| submitted by /u/Few_Painter_5588
[link] [comments]
---|--- -
π modem-dev/hunk v0.22.0-beta.1 release
What's Changed
- feat(cli): show metadata for direct revision reviews by @benvinegar in #1064
- perf(test): make suite sharding configurable by @benvinegar in #1057
- perf(ci): parallelize validation lanes by @benvinegar in #1058
- perf(nix): skip unchanged lock generation by @benvinegar in #1059
- fix(update): avoid GitHub release rate limits by @benvinegar in #1069
- fix(ui): swap unified and split layout keys by @benvinegar in #1068
- chore(release): prepare v0.22.0-beta.1 by @benvinegar in #1070
- chore(release): include latest main in v0.22.0-beta.1 by @benvinegar in #1071
Full Changelog :
v0.22.0-beta.0...v0.22.0-beta.1 -
π smol-machines/smolvm smolvm v1.14.4 release
What's Changed
- Share active branch memory and guard host capacity by @BinSquare in #1204
- Write the release marker and identity files readable by the workload so a non-root machine can be branched by @BinSquare in #1205
- Reclaim idle branch leaf memory by @BinSquare in #1206
- Bump the workspace to 1.14.4 by @BinSquare in #1209
Full Changelog :
v1.14.3...v1.14.4 -
π New Music Releases Max Richter - Now We Can Sing rss
Max Richter - a new release is available:
- 2026-09-09: Now We Can Sing (Single)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-
- September 08, 2026
-
π IDA Plugin Updates IDA Plugin Updates on 2026-09-08 rss
IDA Plugin Updates on 2026-09-08
New Releases:
Activity:
- capa
- f3765cdf: Sync capa rules submodule
- 8f98440d: build(deps): bump protobuf from 7.35.0 to 7.36.0 (#3161)
- 8fd882eb: build(deps-dev): bump pygithub from 2.9.0 to 2.10.0 (#3162)
- 2be73341: build(deps-dev): bump types-protobuf (#3163)
- 2c4183d8: build(deps): bump pygments from 2.20.0 to 2.21.0 (#3164)
- 85740310: build(deps-dev): bump brace-expansion in /web/explorer (#3167)
- 26083edf: build(deps-dev): bump postcss-selector-parser in /web/explorer (#3169)
- chernobog
- c4440677: docs: add Chernobog 6.2 release highlights to README
- 113f6e99: test: separate catalog proof budget from runtime verifier deadline
- dd726bd5: feat: support range-guarded recurrent switch unflattening
- 67415156: perf: check leading byte before redundant rep prefix decode
- 2b548201: perf: cache base-path feasibility and model witness in symbolic executor
- 85df51df: feat: add full value invalidation and temporary feasibility queries
- 6bc98663: test: implement restricted mop erasure in redirected hexdsp entry
- b3b5b03c: test: emulate SDK mop erasure in standalone catalog harness
- 5398d20d: feat: add numeric CFString display and restrict writable constant reads
- ea056144: test: forward toolchain flags to python shim runners in ctest
- fbac246f: feat: add bounded search summaries and UTF-8 runtime string recovery
- 971ce4de: fix: require microcode address proof for early constant reads
- 520ca369: perf: bound static analysis traversal to instruction budget
- bc0e5e55: test: record run reports and isolate environment in ida smoke runner
- b2cf5ad6: feat: add loaded byte views for program image segments
- 2e4cbf88: perf: bound chain search in split-block detection
- 43dd25a7: perf: optimize program model hashing and segment traversal
- ida-forge
- e63b92ee: Merge pull request #3 from oopsmishap/forge-api
- 2cd92285: Harden feature reload and Qt flag combination
- b3d74526: Raise Python floor to 3.10 (ida-domain minimum)
- 10ac3154: Track scripts covered by unit tests
- 16edb4bf: Add domain API and recovery coverage
- 2fd0f826: Fix CI lint configuration
- ida-hcli
- capa
-
π anthropics/claude-code v2.1.266 release
What's changed
- Fixed a 2.1.265 regression affecting LLM-gateway and proxy setups: the undocumented
CLAUDE_CODE_USE_GATEWAYenvironment variable, previously ignored unlessANTHROPIC_BASE_URLandANTHROPIC_AUTH_TOKENwere both set, began forcing Cloud-gateway sign-in on its own in 2.1.265, so configurations that set it alongside an API key,apiKeyHelper, or custom auth headers failed every request with "Not signed in to the Cloud gateway". The variable on its own is ignored again; no configuration change is needed
- Fixed a 2.1.265 regression affecting LLM-gateway and proxy setups: the undocumented
-
π anthropics/claude-code v2.1.265 release
What's changed
- Added
user.emailanduser.groupsto the telemetry Claude Desktop and Cowork send through a Claude apps gateway, matching terminal sessions - Added support for pointing
--plugin-dirat a folder of plugins: each child folder with a manifest loads, and children added or removed while running are picked up - Added a 1 GB cap on tool results saved to disk; the in-conversation preview says when a saved file was truncated
- Fixed resuming a foreground-spawned subagent changing its tool list and system prompt prefix, which broke prompt-cache reuse for that agent
- Fixed agent teammates and resumed subagents moving SubagentStart hook context and preloaded skills out of the prompt prefix on later turns, which broke prompt-cache reuse
- Fixed resume after the previous process died while a tool was running: the last prompt is no longer rewritten, and the interrupted tool call is kept and marked interrupted
- Fixed
/model opusplan[1m]being rejected with "Model not found" - Fixed syntax-highlighted code in permission prompts and messages sometimes omitting a character after a Ruby
?, Erlang$, or Perl$sigil - Fixed the fullscreen transcript jumping by one row whenever the slash-command or @-file suggestion list opened or closed
- Fixed a plugin path containing a backslash bypassing the symlink containment check on macOS and Linux
- Fixed plugin directories whose names begin with two dots being wrongly refused as outside the plugin root
- Fixed VS Code and SDK sessions occasionally requiring re-login when a session was closed while refreshing its token
- Fixed Remote Control sessions sending the end-of-turn signal before the reply's last message, which could show a reply as finished in the Claude app before its last part arrived
- Fixed background (
--bg) sessions occasionally being retired mid-turn when a message arrived just before the idle timeout - Fixed Claude Code's own git status and diff probes running clean filters configured by a nested repository inside the working tree
- Fixed the advisor tool and its instructions being re-decided per request from the request's model; the decision is now made once and announced in the conversation when it changes
- Fixed artifact publish accepting connector tool names the connector doesn't expose; the publish is now refused when none of the declared tools exist, and warned when only some don't
- Fixed
/add-dir <subdirectory>refusing to load a subdirectory's agents when managed settings lock only skills to plugins, and promising agents when only agents are locked - Fixed two-key keyboard shortcuts cancelling silently when the second key arrived more than a second later, as happens inside tmux; they now wait 3 seconds and show a notice when they time out
- Fixed forked skills (
context: fork) not streaming their kickoff prompt and, with--forward-subagent-text, their text turns as progress events in stream-json - Fixed a plugin's default component folder that the OS cannot check, such as a symlink loop, being silently skipped; it is now reported in
/pluginwith the error code - Fixed the Claude apps gateway's OTLP telemetry relay pausing all forwarding to a collector for 30 seconds after it rejected a few payloads as malformed or too large
- Fixed
/pluginDiscover/Browse andclaude plugin list --json --availableshowing no description or display name for marketplace plugins whose metadata lives only in theirplugin.json - Fixed
/loginshowing "no gateway URL is configured" when re-run in a session that signed in to a Claude apps gateway set by managed settings - Fixed
/modelclaiming a model was "saved as your default" when the settings file couldn't be written; it now says the save failed and why - Fixed
/clearfrom Remote Control waiting on SessionStart hooks and on open terminal dialogs before completing - Fixed the
/configdialog changing height when switching between its tabs - Fixed resuming a workflow run after its container restarted; a resume whose run journal is missing now fails with a clear error instead of rerunning every agent
- Fixed the
claude-apiskill's error-code reference: model access failures return 404 and unavailable beta headers return 400, not 403 - Fixed non-interactive sessions (
-pwith stream-json input, Agent SDK, cloud sessions) resetting the shell working directory at each new user message; acdnow persists across turns - Fixed MCP servers configured as
httpthat only speak the legacy HTTP+SSE transport never connecting; Claude Code now falls back to SSE as the MCP spec describes - Fixed some claude.ai connectors in cloud sessions showing as needing authentication even though they are connected in claude.ai (servers that answer an unsupported request with HTTP 401)
- Fixed remote sessions keeping their sandbox container alive while a connector approval or sign-in link waits for you
- Fixed resumed sessions showing long model-facing recovery instructions in "background task didn't finish" notices instead of a short status line
- Windows: Fixed Read, Write and Edit refusing every file ("symlink resolution changed after permission was checked") when running inside an AppContainer or restricted-token sandbox
- Improved
--worktreestartup on large repositories: the new worktree is now checked out in parallel (git 2.32+) - Improved
/workflowsagent detail: tool calls are marked running, failed or done, the subagent's task list is shown when it has one, and Enter unfolds the listed calls with their inputs and results - Improved slash commands typed mid-prompt: matches now show in a list (Tab opens it outside fullscreen) instead of a single suggestion, and a plugin skill is now found by its bare name
- Improved remote MCP servers that need sign-in: Claude Code no longer registers an OAuth client with them until you actually authenticate
- Improved the time to resume long sessions that read many files
- Improved the error shown when an image over the size limits cannot be decoded: it now names the cause and how to fix it instead of only citing the limit
- Improved the Artifact tool's read of an artifact someone else wrote: the summary now treats the page as untrusted content and flags embedded instructions rather than relaying them
- Updated the
.claudefolder permission option to say what it actually allows: editing files in the project's.claudefolder (or~/.claude) for the session - Changed machines with
forceLoginGatewayUrlin managed settings to be Claude apps gateway sessions from startup, likeforceLoginMethod: "gateway"; a leftover claude.ai login or API key is not used - Changed image processing to use the runtime's built-in image support; the CLI no longer extracts a native image module to the temp directory
- Changed plugin display metadata to prefer the marketplace entry over
plugin.jsonon the Installed tab andclaude plugin details, filling gaps fromplugin.json - Changed Claude apps gateway sessions to export OpenTelemetry directly to a collector the gateway's managed settings name in
OTEL_EXPORTER_OTLP_ENDPOINT, instead of through the gateway's relay; sessions without a named collector still use the relay - [VSCode] Added automatic archiving of sessions inactive for a set period (new "Archive inactive sessions" setting, default 14 days)
- [VSCode] Fixed the sidebar chat coming back blank after Reload Window or a restart when the conversation had been open for more than 10 minutes
- [VSCode] Fixed the timeline dot sitting below the text on the "Remote Control is active" message
- Added
-
π @binaryninja@infosec.exchange RE//verse 2027 tickets are LIVE! Trainings too! Round 1 is the cheapest mastodon
RE//verse 2027 tickets are LIVE! Trainings too! Round 1 is the cheapest pricing weβll offer, so grab your ticket before they sell out. See you in Orlando: https://re-verse.io
-
π @HexRaysSA@infosec.exchange π’ The 2026 IDA Plugin Contest is officially open! mastodon
π’ The 2026 IDA Plugin Contest is officially open!
Got an idea for a plugin that could make reverse engineering faster, smarter, or just more fun? Now's your shot. Submissions are open through November 30, with winners announced mid-January.
Build with C, C++, Python, or idalib. And since our SDK is now open-source, IDA Free users can jump in too.
Up for grabs: cash prizes up to $5K, free IDA licenses, recognition in the community, and more.
Full rules + prize breakdown: https://hex-rays.com/plugin- contest
-
π r/LocalLLaMA Qwen/Qwen-Drive-1.0-4B Β· Hugging Face rss
| I don't think anyone posted about this here, but Qwen released a finetuned version of 3.5 4 for driving. The full Bf16 checkpoint is 9B. This is a very interesting development of Chinese AI labs tackle self driving next with open weight models. Edit: the HF repo links to the github repo, which in the citation links to a 40 page technical report. Here's the abstract: We present Qwen-Drive-1.0, an initial step towards a vision-language foundation model for autonomous driving. Qwen-Drive-1.0 retains the architecture of the pretrained vision-language model (VLM) and integrates 3D perception, visual question answering, and motion planning within a unified framework. An external birdβs-eye-view (BEV) perception head jointly performs 3D object detection, semantic occupancy prediction, and BEV map segmentation. It serves as a probe of the 3D information accessible from the shared representations and provides an explicit, inspectable interface to 3D scene structure. A Planning Expert conditions on shared VLM representations to generate future ego trajectories. A staged training recipe combines driving supervision with general-purpose vision-language data to acquire driving-specific competence while helping preserve broad visual understanding and instruction-following capabilities. Experiments demonstrate strong 3D perception and driving scene understanding while largely preserving general vision-language capability. Comprehensive evaluations across open-loop, pseudo-closed-loop, and closed-loop settings further show highly competitive motion-planning performance. submitted by /u/FullstackSensei
[link] [comments]
---|--- -
π modem-dev/hunk v0.22.0-beta.0 release
Hunk 0.22 beta: history becomes a review workspace
Hunk 0.22 turns repository history into a responsive review workspace: browse commits, select contiguous ranges, carry review context into the diff, and leave precise threaded feedback without leaving the terminal.
hunk update 0.22.0-beta.0 npm install -g hunkdiff@0.22.0-beta.0Browse commits and review ranges
hunk lognow opens a responsive, themed history browser for Git and Jujutsu. Commits are grouped by day, optional graph lines preserve topology, and visual or Shift-based range selection opens the cumulative diff for a contiguous set of commits. History has configurable command bindings, merge-parent selection, and keeps your theme and diff preferences as you move between history and review. #979 #987 #1011 #1031 #1038 #1039Select and discuss exact code ranges
Persistent mouse and keyboard selections can now span multiple lines and drive explicit Comment, Copy, and Clear actions. Inline notes and replies participate in keyboard navigation, and agents can reply through the session CLI while inheriting the original code anchor. #931 #1012 #1044
Richer extension-powered reviews
Extensions can attach provider-neutral review metadata when delegating patches, expose that context to panes and live-session snapshots, and request a coalesced reload after an external agent changes reviewed files. The extension directory also adds
hunk-gh,hunk-viewed,hunk-history, andhunk-compact-filenav. #986 #988 #981 #995 #1034Faster, steadier terminal interaction
Long wrapped lines render and respond faster, pane animations are capped at 30 FPS and can be disabled, sidebar folders collapse without breaking navigation, suspended sessions resume cleanly, and direct-file reviews reload correctly outside repositories. #1043 #1051 #1036 #1009 #996 #1054
Compatibility notes
unifiedis now the canonical name for the single-column diff layout. ExistingstackCLI and configuration values remain accepted as deprecated aliases and normalize tounified.- Extension API v23 adds
canonicalModeandcanonicalLayout, which reportunified; legacy fields continue to reportstackfor compatibility. - OpenTUI integrations can use
canonicalLayout: "split" | "unified"; the legacylayout: "split" | "stack"prop remains source-compatible, andcanonicalLayoutwins when both are supplied. hunk logopens the interactive history browser when attached to a terminal. Use--staticfor scripted terminal output; pipes remain static.- Review commands now print static plain text instead of launching the TUI when stdout is not a terminal.
- The bundled runtime is upgraded to Bun 1.4.2.
Community contributors
- @samuela improved daemon health-probe failure reporting. #927
- @saadjs led the
stack-to-unifiedlayout transition while preserving compatibility. #945 - @any-victor added
hunk-historyto the extension directory. #995 - @HackAttack fixed suspended-job resume behavior. #996
- @rschoch added
hunk-compact-filenavto the extension directory. #1034
All merged pull requests
- test(website): cover stable changelog promotion by @benvinegar in #973
- feat(website): add VCS landing pages and sitemap alias by @benvinegar in #970
- Add hunk-gh, hunk-viewed to hunk-extension marketplace by @benvinegar in #981
- fix(pager): stop CPU pegging and truncation on large piped documents by @benvinegar in #978
- feat(extensions): show delegated review metadata by @benvinegar in #986
- feat(extensions): add review reload requests by @benvinegar in #988
- build: upgrade Bun to 1.4.2 by @benvinegar in #990
- feat: add static-first history browsing by @benvinegar in #979
- refactor(ui): share desktop chrome with history by @benvinegar in #983
- feat(ui): make history automatically responsive by @benvinegar in #987
- fix(ui): prepare history reviews before terminal handoff by @benvinegar in #989
- refactor(ui): keep history reviews in one renderer by @benvinegar in #992
- refactor: move hunkdiff into packages/hunk by @benvinegar in #997
- docs(website): list hunk-history in the extension directory by @any-victor in #995
- refactor(ui): route surfaces through one session runtime by @benvinegar in #998
- refactor(extensions): centralize session ownership by @benvinegar in #999
- fix(ui): keep suspended jobs alive upon fg by @HackAttack in #996
- feat(ui): collapse sidebar tree folders by @benvinegar in #1009
- test(ui): harden job control resume coverage by @benvinegar in #1010
- refactor: extract bundled Git provider by @benvinegar in #1001
- refactor: extract shared VCS infrastructure by @benvinegar in #1005
- refactor: extract bundled Jujutsu provider by @benvinegar in #1002
- refactor: extract bundled Sapling provider by @benvinegar in #1003
- feat(cli): support replies to review comments by @benvinegar in #1012
- feat(ui): group history by day by @benvinegar in #1011
- docs(architecture): refresh maintainer guidance by @benvinegar in #1013
- chore: organize repository scripts by @benvinegar in #1014
- fix(ui): save log view preferences by @benvinegar in #1015
- refactor(ui): use default diff row memo comparison by @benvinegar in #1017
- refactor(ui): inline diff row dispatch by @benvinegar in #1018
- refactor(ui): require planned diff rows by @benvinegar in #1019
- feat(ui): show history commit metadata in reviews by @benvinegar in #1016
- refactor(ui): make diff row dispatch exhaustive by @benvinegar in #1025
- refactor(ui): share diff row note targets by @benvinegar in #1026
- refactor(ui): clarify raw diff row planning by @benvinegar in #1027
- chore(deps): bump the github-actions group with 2 updates by @dependabot[bot] in #966
- feat(dev): add disposable Firecracker shell by @benvinegar in #1030
- fix(cli): print static reviews without a tty by @benvinegar in #1029
- docs(video): require readable terminal commands by @benvinegar in #976
- fix(git): shorten SHAs in comparison titles by @benvinegar in #1035
- fix(keys): match alt across terminal protocols by @benvinegar in #991
- docs(website): list hunk-compact-filenav in the extension directory by @rschoch in #1034
- feat(ui): animate docked pane transitions by @benvinegar in #941
- fix(session): report daemon health probe failures by @samuela in #927
- feat(review): add multiline comment selections by @benvinegar in #931
- feat(log): review contiguous commit ranges by @benvinegar in #1031
- fix(ui): show info for comparison reviews by @benvinegar in #1032
- refactor(ui): extract diff selection controller by @benvinegar in #1037
- fix(ui): persist themes across routed surfaces by @benvinegar in #1040
- feat: rename the stack diff layout to unified by @saadjs in #945
- feat(history): add configurable command ids by @benvinegar in #1039
- perf(ui): cap pane animations at 30 fps by @benvinegar in #1036
- feat(log): add visual range selection by @benvinegar in #1038
- refactor(ui): normalize session theme startup by @benvinegar in #1041
- perf(ui): restore fast wrapped line rendering by @benvinegar in #1043
- feat(dev): preload fixtures in disposable VM shell by @benvinegar in #1042
- feat(install): add observable release proxy by @benvinegar in #969
- fix(ui): retain view preferences across history reviews by @benvinegar in #1045
- feat(review): make inline notes keyboard selectable by @benvinegar in #1044
- fix(ui): remove duplicate reply range connectors by @benvinegar in #1046
- fix(ui): save note drafts without stale input races by @benvinegar in #1050
- chore(git): internalize tree ref resolver by @benvinegar in #1052
- fix(watch): reload direct files outside repositories by @benvinegar in #1054
- fix(ui): keep wrapped diff interactions responsive by @benvinegar in #1051
- fix(release): support current prerelease metadata by @benvinegar in #1056
- chore(release): prepare v0.22.0-beta.0 by @benvinegar in #1061
Release notes : https://hunk.dev/changelog/0.22/
Full changelog :v0.21.1...v0.22.0-beta.0 -
π Barre/ZeroFS v2.3.3 release
-
π r/LocalLLaMA OpenAI alleged of stealing mathematicians work rss
Privacy have been concern of many of us to have their own hardware to run llms, and here's another reason why: two mathematicians spent a year cracking one of the hardest problems in math and fed every draft of their works into Codex. A few days before they could publish, OpenAI suddenly showed up with the same solutions. When asked if their model (Sol and Astra) was trained on the pair's private chats, OpenAI did not answer the question.
Full statement from them https://cims.nyu.edu/~tristanb/statement.pdf
Feels like big labs believe everything you did with the help of their models is theirs.
submitted by /u/bakawolf123
[link] [comments] -
π smol-machines/smolvm smolvm v1.14.3 release
What's Changed
- Run init as root on every path, and keep the image's USER for a packed workload by @BinSquare in #1190
- Open a machine to observe it without creating its disks or data directory by @BinSquare in #1197
- Add selectable block I/O engines by @BinSquare in #1198
- Honor a storage size below the template by shrinking the copied filesystem instead of rounding up by @BinSquare in #1199
- Bound live branch memory accounting by @BinSquare in #1200
- fix(network): prevent named-fabric receive busy loop by @scottatron in #1201
- Resolve a packed machine's launch from its manifest in one place by @BinSquare in #1150
- Pack machines with the entrypoint they were created with and the overlay they actually write to by @BinSquare in #1174
- Record the image's USER, or the Smolfile's user, in a pack made from an image so its workload keeps its account by @BinSquare in #1202
- Bump the workspace to 1.14.3 by @BinSquare in #1203
New Contributors
- @scottatron made their first contribution in #1201
Full Changelog :
v1.14.2...v1.14.3 -
π HexRaysSA/plugin-repository commits sync repo: +1 plugin, +1 release rss
sync repo: +1 plugin, +1 release ## New plugins - [BinaryLens](https://github.com/lumice/binarylens) (1.2.0) -
π jellyfin/jellyfin 12.0 release
π Release notes for 12.0
Notes on Updating
Before upgrading from an earlier version, a full backup of the data directory is strongly recommended, as this release includes database changes that prevent rolling back without a full restore.
Direct upgrades from 10.10.7 and 10.11.x to 12.0 are supported; intermediate upgrades are not required. Users running releases older than 10.10.7 are strongly encouraged to upgrade to 10.10.7 before migrating to 12.0.
Installed repository plugins (anything not built-in) should also be removed before migrating. Plugins will likely need time to adapt to the new database changes, so re-adding them afterward is the safest approach for testing.
Official plugins compatible with Jellyfin are available through the stable plugin repository. If you have changed to the unstable plugin repository please change it back.
- Go to Dashboard -> Plugins -> Manage Repositories
- Update the Plugin Repository URL to: https://repo.jellyfin.org/files/plugin/manifest.json
After migrating please perform the following steps.
- Perform a full library scan to restore alternative versions
If you run into issues, please prefix bug reports with "[12.0]".
Packaging
- Debian Bullseye and Ubuntu Focal packages are no longer built
Server
-
Performance PR implications #16062
- We're running a full path-based check on all library items to clean up left overs. Depending on size this can take some time
- Alternative versions of media that were auto resolved (not manually merged) will be removed due to data type issues -> A full library scan will fix this again and is therefore REQUIRED AFTER UPGRADE
- First scan will take significantly longer than normal and some movies might appear as newly added due to type issues that got fixed on-scan
-
Multiple versions for episodes
- Similarity & recommendation providers
- Search providers, letting plugins extend or replace how search results are produced
- SchedulesDirect and EPG refresh fixes
- Fixes to the parental rating system
- Proper data pruning on file replacement/deletion
- Support triple+ digit episode numbers
- Add library-specific BoxSet and Playlist filtering, allowing per-library collection and playlist views
CACHEDIR.tagsupportAccept-Languageheader support- Add VideoRotation profile condition for Android TVs that do not support rotation metadata
- Parse provider IDs from season and episode folder/file names
- Allow tmdb, tvdb, and imdb as aliases for the tmdbid, tvdbid, and imdbid provider IDs
- Add curly brace and parentheses support for parsing attribute values
- Add NameStartsWith and NameLessThan filters to Person search
- Add new filters for audio and subtitle languages
- Add OriginalLanguage as option to PreferredAudioLanguage
- Add a collection API for Included In feature
- Add support for VobSub subtitle streams
- Add Tmdb missing episode provider
Breaking and behavior changes
- Legacy route prefixes removed (
/emby/*and/mediabrowser/*). Old third-party clients that rely on them will stop working - Legacy authorization is now disabled by default, and a migration disables it on existing installs as well
- Removed obsolete API routes:
POST /Users/{userId}/EasyPassword(the EasyPassword feature is gone),GET /Items/{itemId}/CriticReviews,GET /Environment/NetworkShares,POST /System/MediaEncoder/Path,GET /LiveTv/Recordings/Groups/{groupId}, andGET /QuickConnect/Initiate - The global subtitle configuration has been removed, subtitle settings are configured per library
.oggis no longer treated as a video extension and is audio only,.aifcis now recognized as audio, and.aiffis no longer treated as an image- Symlinks are only resolved at playback time
- Sorting by name now uses
SortNameandCleanName, and the same cleaning logic is applied toForcedSortName. Library ordering may change compared to 10.11 - Image endpoints no longer upscale beyond the source resolution, so low resolution artwork renders at its real size instead of being enlarged
- Username capitalization can now be changed. Usernames are stored in a normalized column with a unique index, so installs with usernames that differ only by case need to be corrected before upgrading
Database and performance
- Playlists and collections are now properly relational, using a new
LinkedChildrentable instead of serialized child lists.OwnerIdandPrimaryVersionIdare real GUID foreign keys, andExtraIdshas been dropped - Many tuning migrations covering item counts, item names, type and clean name, latest items, image info, and primary version id
- Migration routines clean up existing data on first boot: duplicate music artists and people are merged, orphaned extras and external data are removed, incorrect owner relationships are repaired, and clean names, forced sort names, and series presentation keys are recomputed
- Heavy database tasks no longer run while a library scan is in progress
- Faster queries for Resume, Next Up, rewatching, Latest Items for music, playlists and collections, artist lookup, and item counts
- Item deletion is batched, which fixes "too many SQL variables" failures when deleting large numbers of items
jellyfin.dbcan now be stored at a custom path
Operations
- New
--modestartup flag withMediaServer,MigrateSystem, andSeedSystem, allowing migrations or database seeding to be run without starting the server. This is useful for containerized and orchestrated deployments and for controlled upgrades - The startup interface has been restyled and now shows version and activity information
- Disabled plugins are no longer re-enabled on restart
- Full system backups skip corrupt keyframe rows instead of failing
Media and subtitles
- Subtitle writing now goes through SubtitleEdit, which is what avoids the SSA to ASS conversion and loss of styles
- External subtitles can be embedded into MKV when transcoding
- The subtitle extraction timeout is now configurable
- Client-rendered graphical subtitles are allowed during remux
- Fixes for races in concurrent subtitle conversion, cache invalidation when a subtitle is replaced, and ffmpeg hangs during extraction
- New
HlsAudioSeekStrategyconfiguration option - Trickplay: existing files are discovered during a scan, duplicates from interlaced video are fixed, invalid PTS values from containers are normalized, and the cache is cleaned up after a failure
Live TV
- Live TV no longer returns unreachable "server-local" streaming URLs to clients
- XMLTV background images and episode thumbnails are now imported
- XMLTV guide imports skip programs whose data has not changed, using an ETag computed from the fields the server actually consumes, which makes repeat guide refreshes considerably cheaper. Other listings providers stay on the existing field-by-field update path
Metadata and providers
- ListenBrainz is now bundled with the server and provides similar artist data with a selectable similarity algorithm
- TVDB provider IDs are supported for movies
- AudioDb artist search
- ReplayGain album gain is parsed
- MusicBrainz lookups are more resilient
- WEB-DL release tags are recognized in file names
- Hyphenated numbers in episode titles are no longer parsed as multi-episode files
- 3D format detection works when the tag is the last token of the path
- Person metadata refreshes are queued instead of blocking the request
Transcoder
- New upstream version of FFmpeg 8.1
- Optimized CUDA transposing filter performance
- Optimized OCL scaling filter performance
- Optimized OCL tonemapping filter performance on Mali GPU
- Use EOTF from BT 2446 Method B for HLG tonemapping
- Fix potential A/V desync in HLS when transcoding video while remuxing audio
- Avoid SSA to ASS conversion and loss of styles
- Add spec-compliant dvh1 HLS variant for DoVi P5 for compatibility
Web
- The Modern layout is now the default, the previous layout is now called Legacy
- Updated Music Videos view
- Updated Mixed Media view
- Updated Collections & Playlists view
- Updated Books view
- Add still watching prompt
- Add delay setting for photo slideshow
- Add caching of queries to indexed db for the tanstack query client for improved loading performance
- Add watch feature to log viewer
- Add
,and.as controls to scrub frame-by-frame - Add filters for audio and subtitle languages (modern layout only)
- Add Collections and playlist tab to all libraries
- Add collections to item details page
- Replace libpgs with libbitsub and adds support for vobsub rendering
- Merge cards for crew with multiple roles
Layout and themes
- All themes now derive from a shared base theme built on CSS variables, including Dark, Light, WMC, Blue Radiance, Apple TV, and Purple Haze. Custom themes may need to be adjusted
- The library toolbar has been merged into the app bar, with a sticky library header and design polish throughout the library
- Custom links can be added to the Modern layout
- The screensaver time setting is now available in the Modern layout
Libraries and browsing
- Collections and folders tabs for book libraries, and a folder view in the Modern home videos layout
- Default tab options for Home Videos and Photos libraries
- Studio search, and an extended Studios tab
- Play All and Shuffle buttons on the series library. Both are disabled rather than hidden when no items are available
- Improved Upcoming view
- Sorting and filtering on the Activity page
- A Reset Filters button in the filter dropdown
- Folders can be marked as played
- TV show creators are shown on item details
- Similarity providers can be configured per library
- Pagination controls are hidden when paging is disabled
Playback
- The playback info overlay is more compact and shows more detail
- Chapter names are shown in the OSD slider bubble
- Bitrate detection now runs in web
- Dolby Vision in MKV on webOS 25 and newer
- AV1 fMP4 stream copy on TV clients
- Direct play of anamorphic video on Tizen, and loosened anamorphic restrictions for browser device profiles
- On iOS, background playback continues when the screen is turned off, and audio normalization is disabled to fix pitch and speed issues
- libbitsub updated to v1.11.0 with an HLS offset fix
- The screensaver is suppressed while viewing photos or reading
TV and remote
- Game controller navigation fixes, and the gamepad repeat rate is no longer tied to framerate
- Keyboard controls work on non-Latin keyboard layouts, with additional fixes for older browsers
- Rewind and FastForward play state commands are handled
- SyncPlay menu update, and the SyncPlay ping is now reported to the server
- Focused and checked checkbox styling in the TV layout
Under the hood
- WebSockets have been migrated to SDK subscriptions
- The React and TypeScript migration continues with the libraries, Live TV, and networking pages, and the dashboard user pages now use the TS SDK
- TanStack Query now backs user settings and home screen sections, and the query cache is cleared when the server restarts
Notable fixes
- Blurry card images on high DPI displays, and card image sizes are rounded up
- Duplicate
/socketconnections - Login loop, connecting to the wrong server when several are configured, and native shell server selection when signing out
- An invalid request for all items on page load
- The Live TV default landing tab
- Holding and dragging on media no longer activates multi-select
- A warning is shown before restoring a version, a warning is shown when starting a backup while a scan is running, and a library scan starts automatically when folders are added to a library
Security
Server:
- Path validation has been added to the legacy HLS segment endpoints and to the plugin image endpoint, so a requested file must resolve inside the transcode directory
- Path traversal hardening has been extended to the image and plugin endpoints and to username path handling, building on the fixes released in 10.11.x
- The startup wizard can no longer be re-run without authentication on a misconfigured server
- Unsafe plugin package names are rejected by the plugin installer
- Parental filtering is enforced on additional endpoints, playlist visibility has been corrected, non-admin access to additional parts has been fixed, and people are exempt from the allowed tags visibility check
Web:
- Cross-site scripting via person roles
- Auth parameters are encoded when creating API clients
- The login disclaimer only allows common link protocol schemes
Books
Books have often taken a backseat in favor of video playback in Jellyfin, but this should no longer be the case.
We have started a concerted effort to improve book support across the API and our official clients.
eBook and comic support is still maturing, but the ODPS plugin allows for direct access from a wide range of popular self-hosted programs.
Correspondingly, contributions in any repository are extremely welcome from the wider community.
That includes server improvements, documentation changes, and third-party clients for book playback.
A combination of eBook, comic, and audiobook support is available on the following clients.Official: Web, iOS, Android, Desktop, Roku, Kodi, JMP
Community: JellyBook, Symfonium, Jellium, PlappaOne notable omission from the server is book series as unique entities, which didn't make the cut for this release.
If you would like to bridge the gap until they are added, feel free to use the Folio plugin to display them as collections.
It functions very similar to the TMDb Box Sets plugin but only applies to eBooks.Another in-flight feature is audiobook chapters, which are only available from the API at present.
Luckily, this means client support is now possible, so you should see them appear in your favorite audiobook client before our next server release.NOTE: The Bookshelf plugin has been deprecated and its features have been merged into server or extracted into the ComicVine and GoogleBooks providers.
Server Changes
- Bookshelf has been split into separate GoogleBooks and ComicVine providers
- Local book parsing has been improved and is available without plugins
- Book metadata is extracted directly from OPF and ComicInfo files or ComicBookInfo comments
- External covers are now supported for audiobook files
- Posters are generated for EPUBs and all supported comic archives
- Name, index, year, and series are parsed from book filenames
- Both volume and chapter will be available in the API when present in comic filenames
- Page counts are extracted from comic archives and PDFs
- Creator names from OPF data are normalized to a common format
- A new OpenLibrary plugin has been created for metadata and images
- ISBN external IDs and links are supported
- Chapters are now extracted from audiobooks
Web Changes
- Modern book library layout has been added with view types and paging
- Books display information about their authors and vice versa
- Playback interface has been redesigned and standardized across all book types
- Progress indicator is enabled again for supported eBooks
- Sorting books by index number, release date, etc is now available
- Font size selection has been improved for EPUB files
- Background audiobook playback is working on iOS devices
- Authors, collections, and folders tabs have been added to book libraries, and audiobooks appear under authors
- Fullscreen behavior is unified across all book players, and PDFs support swipe navigation
Developers
API Changes
The API no longer allows the use of deprecated authorization mechanisms by default.
Clients and tooling need to migrate if they haven't done so already. See #15559 for details.There have been a number of other changes to the SDK libraries and API as part of an ongoing effort to better document the API for client use.
Please note the following with regards to API support.
A full explanation of our policy for API changes will be added to the developer documentation in the coming months.- If an endpoint isn't listed in the OpenAPI specification it should not be used by clients.
- There are certain endpoints that are still exposed for legacy reasons despite being excluded from the OpenAPI spec.
- These can be removed in any major release without warning
- If an endpoint or parameter is marked as obsolete in the OpenAPI specification it should not be used by clients.
- Same explanation as above.
- As a general rule, any deprecations will be marked as such for an entire (major) release cycle before the deprecated endpoint or parameter is liable for removal.
Behavior changes clients should be aware of:
GetItemsis now asynchronous and appliesrecursivewhen filters are requested, limited to requests that includeincludeItemTypes. The same query can return a different result set than it did on 10.11ItemByNameresponses are restricted and people are deduplicated- Newly obsolete but still functional, with replacements:
GetTrailers-> useGetItemswithincludeItemTypes=TrailerGetArtistsandGetAlbumArtists-> useGetPersonsGetArtistByName-> useGetPersonGetMusicGenre-> useGetGenreGetInstantMixFromMusicGenreByIdandGetInstantMixFromMusicGenreByName-> useGetInstantMixFromItemGetStartupConfiguration,UpdateInitialConfiguration, andSetRemoteAccess-> use the configuration endpointsGetRecordingsSeriesUserDto.HasPasswordis marked obsolete and no longer provides useful information
- The HLS controllers are hidden from the specification
Platform
- The server now targets .NET 10. Plugins have to be retargeted and rebuilt
- Swashbuckle has been updated to v10, which changes the generated OpenAPI document, so SDKs need to be regenerated
- jellyfin-web now builds with Node 24 LTS and npm 11
Plugin changes
ISearchEnginehas been replaced byISearchManager, andSearchEnginehas been replaced bySearchManagertogether withSqlSearchProvider- Removed:
NowPlayingQueueFullItems,DtoExtensions.AddClientFields,Jellyfin.Extensions.AlphanumericComparator, theISubtitleWriterfamily of subtitle writers, andSubtitleOptionswithSubtitleConfigurationFactory ServerConfiguration.EncoderPresetis no longer nullableIAuthenticationProvider.HasPasswordhas been removedIPasswordResetProvider.StartForgotPasswordProcesstakes the entered username and a nullable userIUserManager: theUsersandUsersIdsproperties are now theGetUsersandGetUsersIdsmethods, andRenameUser,ResetPassword, andChangePasswordtake a user id instead of aUser.GetFirstUserhas been added- Several
IItemRepositorymembers moved to the new services: item saving and deletion andUpdateInheritedValuestoIItemPersistenceService, counts toIItemCountService, and Next Up series keys toINextUpService IPeopleRepository.GetPeopleandILibraryManager.GetPeopleItemsreturn aQueryResult, andIDtoService.GetBaseItemDtosandILibraryManager.DeleteItemsUnsafeFasthave new signaturesIDirectoryService.GetFilePathsno longer takes asortargument, and theIPathManagersubtitle and attachment path getters are now nullable
New plugin APIs
This release adds several extension points that plugins could not hook into before.
- Search providers. Plugins can now take part in search itself rather than only in metadata lookup.
ISearchProviderexposesName,Type,Priority, andCanSearch(SearchProviderQuery), withIInternalSearchProviderfor providers that search the local library andIExternalSearchProviderfor providers that streamSearchResultitems from a remote service. Providers are registered throughISearchManager.AddPartsand are consulted in priority order, so a plugin can extend or take over from the built-inSqlSearchProvider - Similarity and recommendation providers.
ISimilarItemsProvideris split inherited byILocalSimilarItemsProvider,IRemoteSimilarItemsProvider, andIBatchLocalSimilarItemsProvider, each with a generic variant so a provider can declare the item type it handles. Providers are selected and ordered per library throughLibraryOptions.SimilarItemProvidersandSimilarItemProviderOrder, andISimilarItemsManageralso pulls movie recommendations. The bundled ListenBrainz provider is built on this - Comic metadata providers.
IComicProvider(ReadMetadataandHasItemChanged) lets a plugin supply comic metadata alongside the built-in ComicInfo and ComicBookInfo readers - Chapters for any item type.
IChapterManager.SaveChaptersnow takes aBaseItemrather than aVideo, and gained aSupports(BaseItem)check. This is what makes audiobook chapters possible, and it lets plugins save chapters for non-video items - Password resets for unknown users.
IPasswordResetProvider.StartForgotPasswordProcessnow receives the entered username along with a nullable user, so a provider can handle a request for a username the server does not know or hand the reset off to an external provider - Media segment cleanup.
IMediaSegmentProvider.CleanupExtractedDatais called when an item's data is pruned, so segment providers can remove their own extracted files - Schedules Direct.
ISchedulesDirectServiceexposes available countries, service availability, and the image daily limit state, so Live TV plugins no longer need to reimplement them.ITunerHostManager.DeleteTunerHostallows removing a tuner - Alternate versions and linked children. Now that linked children are relational,
ILibraryManagerexposesResolveAlternateVersion,GetLocalAlternateVersionIds,GetLinkedAlternateVersions,GetItemIdsWithAlternateVersions, andUpsertLinkedChild. Plugins that manipulated version links through serialized item data need to move to these - Batch APIs for bulk work.
IUserDataManagergainedGetUserDataBatch,GetResumeUserData,GetResumeUserDataBatch, andResetPlaybackStreamSelections.ILibraryManagergainedGetPeopleByItems,GetPeopleNamesByItems, andGetNextUpEpisodesBatch.IItemCountServiceoffers batched child and played/total counts - Localization.
ILocalizationManager.GetServerLocalizedStringandGetLanguageDisplayNamelet plugins localize against the server locale ICollectionManager.GetCollectionsContainingItembacks the Included In feature, andIPlaylistManager.AddItemToPlaylistAsynctakes a position so items can be inserted at the top of a playlist
IHasEmbeddedImageis also new, but it is only for plugins compiled into the server; external plugins should keep declaring their image withimagePathinmeta.json.TLS Configuration
In the previous release notes 10.11.0 we announced the deprecation of the built-in TLS certificate handling for this version. This change has been postponed to a future version.
Discuss this release further on our forums.
Changelog (460)
π Security
- Potential FFmpeg argument injection via unescaped subtitle file path [GHSA-wwwm-px48-fpvq]
π Highlights
- Implement multiple versions for episodes. [PR #16828], by @Shadowghost
- Disable legacy authorization methods by default [PR #15559], by @nielsvanvelzen
ποΈ Enhancements
- Fix movie recommendations [PR #16856], by @Shadowghost
- Have device deletion take list of ids [PR #12834], by @LePips
- Allow tmdb as an alias for tmdbid provider id [PR #16433], by @theguymadmax
- Fix EPG issues [PR #16220], by @Shadowghost
- Add CACHEDIR.tag support [PR #16478], by @Shadowghost
- Remove global subtitle configuration [PR #14957], by @KGT1
- Fix: normalize punctuation when computing CleanName so searches without punctuation match (closes #1674) [PR #14879], by @audrey-inglish
- refactor(StreamInfo): reorganize subtitle URL logic and conditions [PR #13977], by @sususu98
π General Changes
- Fix Blu-ray multi-angle concat generation [PR #17824], by @Raspberry-Monster
- Expose optimized ItemCounts for byName items [PR #17821], by @Shadowghost
- Only download missing plugin images [PR #17820], by @Shadowghost
- Apply the resize sharpening kernel directly instead of via SKImageFilter [PR #17775], by @slevin-7
- Share played state across alternate versions [PR #17816], by @Shadowghost
- Fix TMDb search result ranking [PR #17819], by @Shadowghost
- Fix TMDb recommendations [PR #17810], by @Shadowghost
- Better handle timeouts on plugin operations [PR #17794], by @Shadowghost
- Don't dispose application singletons after running a code migration [PR #17791], by @Shadowghost
- Enforce dolby vision transfer check [PR #17806], by @gnattu
- Fix items being lost from the refresh queue and bound the directory service caches [PR #17763], by @Shadowghost
- Fix handling of unordered multi-episode NFOs [PR #17805], by @Shadowghost
- Optimize database after migrations [PR #17786], by @Shadowghost
- Bound change batches during a scan; keep ffprobe and image saves from failing [PR #17762], by @Shadowghost
- Fix PGS subtitles for BDMV with TrueHD [PR #17674], by @Oggeb1
- Probe .idx instead of .sub for external VobSub subtitle language detection [PR #17746], by @kfarnung
- Drop SyncPlay requests from sessions that left the group [PR #17799], by @fmarcac
- Fix Live TV HLS playback: bogus audio encoder and unplayable direct played manifests [PR #17768], by @Shadowghost
- Fix crash when SyncPlay shuffle mode is set to sorted twice [PR #17796], by @fmarcac
- Fix SyncPlay active session counter leaking on rejoin [PR #17800], by @fmarcac
- Fix unit mismatch in the SyncPlay resume delay floor [PR #17798], by @fmarcac
- Add comprehensive logging for post scan tasks [PR #17767], by @Shadowghost
- Fix UI stalls caused by large tag and genre sets [PR #17757], by @felixfoertsch
- Bound the TMDb response cache so a library scan cannot fill it without limit [PR #17764], by @Shadowghost
- fix: return fallback gracefully when requested fallback font is missing [PR #17761], by @zerafachris
- Fix people and artist validator creation and deletion handling [PR #17756], by @Shadowghost
- Add progress logging to data migrations [PR #17743], by @Shadowghost
- Enforce reliable processing order in PeopleValidationTask [PR #17750], by @Shadowghost
- Fix recursive handling for LinkedChildren [PR #17752], by @Shadowghost
- Fix ListenBrainz settings and similar item defaults [PR #17748], by @Shadowghost
- Fix item counts on the by-name endpoints [PR #17724], by @Shadowghost
- Enforce permissions on similar items [PR #17729], by @Shadowghost
- Fix formatting and test [PR #17744], by @Shadowghost
- Filter search candidates by user access in a single query [PR #17739], by @Shadowghost
- Support anime provider ids on season folders [PR #17731], by @Shadowghost
- Count a season's episodes by the season they belong to [PR #17735], by @Shadowghost
- Fix ParentId for episodes in virtual seasons [PR #17719], by @theguymadmax
- Persist the refresh stamp so the people task stops redoing its work [PR #17709], by @Shadowghost
- Fix children count on virtual items [PR #17718], by @Shadowghost
- Delete credits nothing maps to and bound item-by-name folder names [PR #17715], by @Shadowghost
- Build a TMDb series cast from the aggregated credits [PR #17716], by @Shadowghost
- Stop deriving user view ids from their localized name [PR #17714], by @Shadowghost
- Fix IsPlayed and IsUnplayed sorting for shows and collections [PR #17713], by @LTe
- Say which image and item failed instead of logging a blank path [PR #17711], by @Shadowghost
- Fix OMDB People handling [PR #17710], by @Shadowghost
- Fix person metadata not being fetched on demand or by the people task [PR #17702], by @Shadowghost
- Fix series merging leaking across libraries and under-counting merged children [PR #17693], by @Shadowghost
- Fix English metadata blocking localized providers ranked below it [PR #17619], by @Shadowghost
- Look up people by item via the credit map instead of a full scan [PR #17700], by @Shadowghost
- Mark breakOnNonKeyFrames as XMLIgnore [PR #17698], by @Shadowghost
- Fall back to the ancestor filter when a view has no top parents [PR #17691], by @Shadowghost
- Safeguard against invalid provider ids [PR #17584], by @Shadowghost
- Optimize query helper memory [PR #17607], by @Shadowghost
- Allow direct play for HDHomeRun Live TV tuners [PR #17682], by @theguymadmax
- Fix latest items for mixed libraries [PR #17678], by @theguymadmax
- Stop user updates from orphaning permission and preference rows [PR #17645], by @Shadowghost
- More resilient MusicBrainz lookup [PR #17670], by @Shadowghost
- Use client-reported position for idle playback cleanup [PR #17631], by @itsb
- Fix GitHub URL typo in CONTRIBUTORS [PR #17659], by @FirmaSpring
- Fix SQLite variable limit in child count batches [PR #17658], by @martin-77
- Prevent orphaned user permissions and preferences [PR #17643], by @m0g3r
- Fix large playlist persistence with WhereOneOrMany [PR #17655], by @martin-77
- Fix other two unit test for localization of Artists in DE [PR #17637], by @IDisposable
- Recognize WEB-DL release tags in video names [PR #17636], by @st7105
- Fix unit test for localization of Artists in DE [PR #17633], by @IDisposable
- Fix FindArtists [PR #17604], by @theguymadmax
- Fix EF core designer drifts [PR #17570], by @Shadowghost
- Fix missing ItemRemoved events and search fallback after access filtering [PR #17579], by @Shadowghost
- Fix PersonTypes not applied when filtering by person [PR #17597], by @theguymadmax
- Fix master build [PR #17599], by @Shadowghost
- Fix assemblies [PR #17582], by @Shadowghost
- Bugfix: #17547 | Batching MediaSourceCount into one call [PR #17576], by @obiwantoby
- fix: bound remote provider pagination [PR #17590], by @TOomaAh
- fix: correct IsAiring negation to exclude airing items [PR #17588], by @TOomaAh
- Stop image endpoints from upscaling beyond the source resolution [PR #17569], by @vavallee
- Cleanup and simplify query helpers [PR #17563], by @Shadowghost
- Add warning that PessimisticLockBehavior is unsafe [PR #17560], by @IDisposable
- Batch people lookups when building item DTOs [PR #17571], by @obiwantoby
- fix(images): disambiguate progress overlay cache keys [PR #17492], by @GOvEy1nw
- Fix by-name endpoints reporting TotalRecordCount=0 next to a populated Items array [PR #17541], by @vdatanet
- Clear metadata provider cache when provider parts are registered [PR #17525], by @rlauuzo
- Delete old related info in bulk as late as possible in UpdateOrInsertItems [PR #17555], by @IDisposable
- Fix disabled plugins being re-enabled on restart [PR #17521], by @Shadowghost
- Fix captured (and discarded) Execute exceptions [PR #17559], by @IDisposable
- Speed up UpdateOrInsertItems for related information [PR #17554], by @IDisposable
- Switch SQLite connection Cache to Private [PR #17558], by @IDisposable
- Fix concurrent ffmpeg segment racing [PR #17536], by @gnattu
- Parse ReplayGain album gain field [PR #17315], by @Florin-Popescu
- Improve People deduplication, fix search and restrict ItemByName responses [PR #17466], by @Shadowghost
- Fix PCM audio transcoding to wav returning HTTP 500 and headerless output [PR #17537], by @vdatanet
- Revert "Refresh Live TV channel icons on every guide update." [PR #17549], by @theguymadmax
- Keep folder extras with the item that owns the folder [PR #17524], by @Shadowghost
- Only treat series and seasons as resumable folders [PR #17523], by @Shadowghost
- Degrade ForceKeepAlive logs to debug [PR #17528], by @Shadowghost
- Fix extras naming and version assignment [PR #17456], by @Shadowghost
- Allow client-rendered graphical subtitles during remux [PR #17512], by @altqx
- Use CleanName when sorting by name [PR #17503], by @theguymadmax
- Fix AdjacentTo being ignored on non-recursive item queries [PR #17486], by @Shadowghost
- Fix video version links being read from stale serialised item data instead of the LinkedChildren table [PR #17482], by @Shadowghost
- Fix Live TV returning unreachable "server-local" streaming URLs to clients. [PR #17298], by @WizardOfYendor1
- Add Tmdb missing episode provider [PR #17147], by @Shadowghost
- Fix storage info lookup for Windows [PR #17500], by @theguymadmax
- Skip SIDX in fMP4 HLS segments [PR #17501], by @alchemyyy
- Fix (Un)Played filter correctness and performance [PR #17463], by @Shadowghost
- Queue person metadata refresh instead of blocking the item request and fix ItemCounts [PR #17460], by @Shadowghost
- Reevaluate pending migrations after each one instead of per stage [PR #17455], by @Shadowghost
- Allow duplicate LinkedChildren for Playlists [PR #17416], by @Shadowghost
- Implement AudioDb artist search [PR #17424], by @Shadowghost
- Fix 3D format detection when the tag is the last token of the path [PR #17310], by @TowyTowy
- Fix missing collection folder posters after initial scans. [PR #16409], by @elio42
- Fix series merging [PR #17417], by @Shadowghost
- Reduce correlated subqueries to improve query performance [PR #17422], by @Shadowghost
- Fix hyphenated numbers in episode titles parsed as multi-episodes [PR #17442], by @Shadowghost
- Fix incorrect year on local trailers [PR #17399], by @Shadowghost
- remove ogg from video extensions since it should only be used for audio [PR #17437], by @dkanada
- Avoid NRE when sorting by user-dependent keys without a user [PR #17395], by @paoloantinori
- Skip ComicInfo parsing if none exists [PR #17423], by @Shadowghost
- Fix play queue index handling in SyncPlay [PR #17234], by @Eneo-org
- Apply cleaning logic on ForcedSortName [PR #17402], by @Shadowghost
- Check the "name" tag for audio/subtitle probe to fix MP4 not showing correctly - Fixes issue #17418 [PR #17419], by @rwebster85
- Drain stderr and stdout concurrently for encoder validation [PR #17430], by @gnattu
- perf: avoid unnecessary list allocation in CheckForIdlePlayback [PR #17411], by @mbastian77
- Match VobSub MKS subtitle profiles by container [PR #17227], by @altqx
- Improve language filters to only fetch language codes that match the requested items/libraries (follow up to #9787) [PR #16980], by @TheMelmacian
- fix: don't throw ArgumentNullException on partial UpdateItem payloads (#17366) [PR #17370], by @zerafachris
- Prevent unauthenticated re-run of the startup wizard on misconfiguration [PR #17369], by @Shadowghost
- Truncate ISO-639-2 language display names at first delimiter [PR #17160], by @854562
- Fix subtitle encoding for local files [PR #17281], by @Shadowghost
- Backport and extend path traversal fixes [PR #17368], by @Shadowghost
- fix: skip corrupt KeyframeData rows during full system backup [PR #17367], by @zerafachris
- Add XML docs to small model enums and remove CS1591 suppressions [PR #17376], by @mbastian77
- Exempt people from the allowed tags visibility check [PR #17377], by @mbastian77
- extract page count from archives and PDFs [PR #17311], by @dkanada
- Feat (fix) - Skip reprocessing program information when importing XMLTV EPG data [PR #16933], by @WizardOfYendor1
- Fix profile image being impossible to clear when its in-memory key is temporary [PR #17282], by @TowyTowy
- Fix: Fetch the correct row matching the most up to date file [PR #17320], by @jordanmichaelrushing
- Fix race condition in concurrent subtitle conversion [PR #17342], by @LTe
- Make RequestHelpers.GetOrderBy generic and reuse it in ActivityLogController [PR #17324], by @damienmeur
- Add additional attribute aliases and improve attribute detection [PR #17254], by @sjakub
- Fix SchedulesDirect image limit recognition [PR #17347], by @Shadowghost
- Sort trailers for TV Shows [PR #17204], by @theguymadmax
- Add TVDB provider ID support for movies [PR #17255], by @theguymadmax
- Fix artists being displayed with albums [PR #17252], by @theguymadmax
- Remove libpostproc check for ffmpeg version validation [PR #17384], by @gnattu
- Fix linked whitespace after image badges in
README.md[PR #17382], by @kaunkrishna - normalize common formats for creator names in OPF data [PR #17291], by @dkanada
- Keep authenticated user entity in sync with persisted login timestamps [PR #17302], by @ElianCodes
- Normalize invalid PTS from containers for Trickplay generation [PR #17304], by @nyanmisaka
- Fix Resume query performance [PR #17365], by @Shadowghost
- Add XML docs to small entity interfaces and remove CS1591 suppressions [PR #17375], by @mbastian77
- Fix Swagger UI auth docs (#12990) [PR #16910], by @cha5u5
- Prevent ffmpeg from hanging extracting subtitles [PR #17297], by @IDisposable
- Show production companies under TV Shows' Studios [PR #17246], by @Rant423
- Fix potential garbled text in FFmpeg logs on Windows [PR #17288], by @nyanmisaka
- Remove PlaybackPositionTicks from MediaSourceInfo [PR #17327], by @Shadowghost
- Fix format negotiation in hybrid SW decode and CUDA tonemap pipeline [PR #17334], by @nyanmisaka
- Fix Identify returning wrong images [PR #17151], by @theguymadmax
- Update season and episode SeriesName when renaming a series [PR #17326], by @theguymadmax
- Remove episode image override hack [PR #17280], by @Shadowghost
- Fix path transversal exposure in Plugins [PR #17191], by @IDisposable
- Revert setting default BaseItemKind for CollectionType [PR #17348], by @theguymadmax
- Add XML docs to small channel types and remove CS1591 suppressions [PR #17343], by @mbastian77
- Add XML docs to small session model types and remove CS1591 suppressions [PR #17344], by @mbastian77
- Add XML docs to small DLNA model types and remove CS1591 suppressions [PR #17340], by @mbastian77
- Add XML docs to provider lookup info types and remove CS1591 suppressions [PR #17339], by @mbastian77
- Add XML docs to DeviceId and remove CS1591 suppression [PR #17338], by @mbastian77
- Limit similar items to user accessible libraries [PR #17337], by @Shadowghost
- Fix max login attempts [PR #17274], by @theguymadmax
- Add Novel job mapping to the Writing department [PR #17248], by @theguymadmax
- Allow SeriesName to be editable from Item Metadata (books) [PR #17250], by @jordanmichaelrushing
- Fix additional parts for non-admins [PR #17266], by @Shadowghost
- Fix incorrect protocol used for subtitle charset detection [PR #17306], by @theguymadmax
- Check numeric rating value after splitting country code [PR #17273], by @theguymadmax
- support external images for audiobooks [PR #17287], by @dkanada
- Fix Greece parental ratings [PR #17268], by @theguymadmax
- Fix actor images not displayed until clicked [PR #16668], by @johnpc
- Don't throw on logout if session does not exist [PR #17228], by @Shadowghost
- Use InvariantCulture when parsing machine-generated dates [PR #17238], by @iderex
- Fixes for multi version handling [PR #17044], by @Shadowghost
- Fix parental rating lookup for multi-rating entries [PR #17239], by @theguymadmax
- Fix ghost entries when deleting library paths [PR #17231], by @theguymadmax
- Allow changing capitalization of usernames [PR #17229], by @Bond-009
- Fix folder view [PR #17222], by @theguymadmax
- Close sessions for lost WebSockets to prevent zombie SyncPlay groups [PR #17079], by @Eneo-org
- Fix Swedish rating [PR #17209], by @theguymadmax
- Fix NullReferenceException in GetStreamingState for closed live streams [PR #17206], by @zachhide
- Use Enumerable.LeftJoin for activity log user query [PR #17175], by @obrenoalvim
- Rework bitrate reporting [PR #17170], by @Shadowghost
- Fix Book collections speed issues [PR #15954], by @IDisposable
- Batch duplicate-cleanup deletes in merge migrations [PR #17162], by @Shadowghost
- Remove orphaned people [PR #17140], by @theguymadmax
- Reject unsafe plugin package names in installer [PR #17013], by @dfederm
- Use Convert.ToHexStringLower for Schedules Direct password hash [PR #17174], by @obrenoalvim
- Live TV: re-fetch channel icons on guide refresh [PR #16914], by @danieltutuianu
- Revamp startup UI for visual style and usability [PR #17154], by @joshuaboniface
- Fix localization lookup [PR #17187], by @Shadowghost
- Fix embedded lyrics not updating on replace all refresh [PR #17134], by @theguymadmax
- Fix Live TV tuner not releasing [PR #17178], by @theguymadmax
- Don't run heavy DB tasks while scan is running [PR #17182], by @Shadowghost
- Fix local Comic book plugin registration [PR #17188], by @Shadowghost
- Fix too many SQL variables in DeleteItem for large batch deletes [PR #17153], by @joshuaboniface
- Fix Identify returning wrong results [PR #17146], by @theguymadmax
- Fix audio sample rate forced to 48 kHz for non-Opus codecs [PR #17090], by @moontwister
- Deprecate the redundant /Trailers endpoint [PR #17094], by @moontwister
- Skip parsing root-level folders in SeriesResolver [PR #17116], by @theguymadmax
- Fixed "Deleting media that is still being watched in SyncPlay results in errors" [PR #14935], by @pokreman06
- Fix series year lost during name parsing [PR #17112], by @theguymadmax
- Fix episode air date offset after initial scan [PR #17121], by @theguymadmax
- Follow native interoperability best practices [PR #17099], by @Bond-009
- improve book resolution from filename [PR #17087], by @dkanada
- Extend TranscodingReason reporting [PR #17106], by @Shadowghost
- Always apply recursive when filters are requested [PR #17088], by @Shadowghost
- Fetch TV Shows creators from TMDB [PR #17107], by @Rant423
- Replace usage of SharpCompress [PR #17089], by @Bond-009
- Fix AlbumIds filtering by Name instead of by Id [PR #17085], by @matt-teahan
- Add support for background images and episode thumbnails from XMLTV [PR #17077], by @SheaSmith
- Fix AudioDb album description not displayed for English (mirror of #16606) [PR #17081], by @Gadnief
- Fix duplicate key collision [PR #17083], by @theguymadmax
- Assign correct season info to new episodes [PR #17051], by @ivanjx
- Fix CleanName and CleanValue refresh [PR #17064], by @Shadowghost
- Fix duplicate trickplay images for interlaced videos [PR #17058], by @nyanmisaka
- migrate local comic providers to server codebase [PR #16444], by @dkanada
- Add code assistance section to PR template [PR #17054], by @nielsvanvelzen
- Prefer local alternate versions when deduplicating linked children [PR #17042], by @Shadowghost
- Media source handling fixes [PR #17041], by @Shadowghost
- Refresh live TV channel image when remapped (alt #7843) (fixes #7834) [PR #10841], by @Bond-009
- Implement search providers [PR #16121], by @Shadowghost
- fix(dto): prefer PlaylistsFolder primary image for playlists tiles [PR #16520], by @beateixeira04
- Fix xUnit1051 in UserManagerLockHelperTests [PR #17043], by @Shadowghost
- Update issue template version to 10.11.11 [PR #17035], by @theguymadmax
- Discover existing trickplay files on scan [PR #16945], by @Shadowghost
- Fix external data pruning on item deletion [PR #16941], by @Shadowghost
- Fix subtitle replacement not invalidating cache [PR #17028], by @Shadowghost
- Fix playlist visibility [PR #17025], by @Shadowghost
- Enforce parental filtering on additional endpoints [PR #17019], by @Shadowghost
- Prefer subtitle extension over codec [PR #16998], by @Bond-009
- Improve Merge Conflict Labeler [PR #17018], by @Bond-009
- Fix season unknown for flat TV structures [PR #16995], by @theguymadmax
- Make EncoderPreset non nullable [PR #17007], by @nyanmisaka
- Only default recursive to true if we have includeItemTypes [PR #16999], by @Shadowghost
- Extract attachments in one ffmpeg command when dumping [PR #16915], by @Shadowghost
- Fix incorrect list capacity [PR #16996], by @theguymadmax
- Trim tags [PR #16994], by @theguymadmax
- Fix recently added episode links and posters [PR #16967], by @Shadowghost
- Write subtitles using SubtitleEdit [PR #16805], by @Bond-009
- Re-disable legacy authorization methods by default [PR #16992], by @theguymadmax
- Only resolve symlinks on playback [PR #16965], by @Shadowghost
- Fix folders being identified as seasons in mixed libraries [PR #16259], by @theguymadmax
- Fix Schedules Direct API Error Codes [PR #16920], by @arazilsongweaver
- Fix similarity [PR #16942], by @Shadowghost
- Fix inaccessible artist when they exist in multiple libraries [PR #16977], by @theguymadmax
- Add support for VobSub subtitle streams [PR #16552], by @altqx
- Compare old file byte-by-byte to new stream [PR #16936], by @IDisposable
- Remove NowPlayingQueueFullItems from session DTOs [PR #16976], by @PCEWLKR
- Use ConfigureAwait(false) in CollectionController [PR #16953], by @PCEWLKR
- Fix CA2007 warnings in InstallationManager [PR #16946], by @jonesy827
- Add a collection API for
Included Infeature [PR #15516], by @XSAM - Add new viewtypes options [PR #16177], by @theguymadmax
- Fix Merge Conflict Labeler #2 [PR #16963], by @Bond-009
- Fix A/V desync when resuming HLS with video transcode + audio copy [PR #16580], by @LTe
- Improve OriginalLanguage normalization and inheritance [PR #16829], by @Lampan-git
- Update issue template version to 10.11.10 [PR #16927], by @theguymadmax
- Fix inconsistent extradata generated by hevc_vaapi on AMD driver [PR #16913], by @nyanmisaka
- Backport: Fix/user manager collation [PR #16919], by @Bond-009
- fix: suppress repeated PriorityClass warning in MediaEncoder [PR #16872], by @psavarmattas
- Update issue template version to 10.11.9 [PR #16897], by @theguymadmax
- Add support for filtering playlists by parentId [PR #16893], by @Shadowghost
- Fix Merge Conflict Labeler [PR #16892], by @Bond-009
- Add CI format check [PR #15250], by @jakobkukla
- Reorder Migrations and fix failing migration [PR #16861], by @JPVenson
- Add support for filtering boxsets by parentId [PR #16882], by @Shadowghost
- Modernize version display in UI [PR #16862], by @JPVenson
- Fix integrated provider images [PR #16855], by @Shadowghost
- Use --batch --yes for installing jellyfin keyring in devcontainer [PR #16878], by @IDisposable
- Embed external subtitles into MKV when transcoding [PR #16448], by @LTe
- fix: write livetv recording NFO dateadded as UTC [PR #16863], by @tayfun-akguc
- Misc fixes [PR #16837], by @Shadowghost
- fix: add null check for non-existent program in GetProgram [PR #16858], by @BrunoSync
- Fix CA1819 warnings in ChannelFeatures by using IReadOnlyList [PR #16853], by @jtvhd6
- Set max rating for splashscreen to 13 [PR #16852], by @theguymadmax
- New filters for audio and subtitle languages [PR #9787], by @TheMelmacian
- Implement similarity providers [PR #15970], by @Shadowghost
- Add Accept-Language header support and cleanup translations [PR #16488], by @Shadowghost
- Update log for user session related concurrency update fails [PR #16835], by @JPVenson
- return music artists from person endpoints [PR #16721], by @dkanada
- Reference correct .NET version in README [PR #16831], by @Bond-009
- consolidate OpenAPI categories and deprecate startup routes [PR #16757], by @dkanada
- Safeguard against invalid GUIDs [PR #16813], by @Shadowghost
- Use SortName when sorting by name [PR #16804], by @Shadowghost
- Suppress CA2213 false positive on ApplicationHost._pluginManager (#2149) [PR #16792], by @Crystora
- Print warning on invalid Subnets in Network/Proxy configuration [PR #16793], by @Shadowghost
- Add videoRotation profile condition [PR #16803], by @nyanmisaka
- Fix artist duplicates [PR #16807], by @Shadowghost
- IOException with STRM HTTP URLs [PR #16290], by @benbenmoss
- Fix Segment Provider Configuration [PR #16798], by @Shadowghost
- Fix CA1051 and CA1815 warnings, Change public fields to auto properties [PR #14847], by @tjwalkr3
- Add OriginalLanguage as option to PreferredAudioLanguage [PR #12579], by @Lampan-git
- Switch to new version scheme [PR #16758], by @Shadowghost
- fix person type exclusion in api response [PR #16784], by @dkanada
- Fix MusicBrainz test. [PR #16789], by @IDisposable
- Parse provider IDs from season and episode folder/file names [PR #16472], by @IDisposable
- Fix Canadian rating and fallback to unrated if we have a CountryCode but no matching rating [PR #16328], by @Shadowghost
- Fix live stream consumer leak on negative PositionTicks [PR #16321], by @WizardOfYendor1
- Add startup mode to migrate or seed the database on cmd [PR #16319], by @JPVenson
- Remove DigitalOcean from sponsors section [PR #16788], by @theguymadmax
- Ignore season directories with no video for TV Shows [PR #16611], by @LmanTW
- Fix #16308: Community ratings not updating after changing .nfo file. [PR #16466], by @PERSONALPANCHIWIRIS
- Fix unique people response for query if no item ID is supplied [PR #16783], by @Shadowghost
- Fix subtitle save path [PR #16779], by @Shadowghost
- Move MusicBrainz Query client to plugin instance [PR #16780], by @Shadowghost
- Fix UserManager after EFcore refactor (backport #15368) [PR #16782], by @JPVenson
- Add the filename to exceptions in DeserializeFromFile() [PR #16246], by @lcorbasson
- Add different Slovak and Czech translation of Season for parsing [PR #16646], by @Biosias
- Remove unnecessary ToList calls in TrickplayManager [PR #16322], by @poytiis
- Fix rewatch query [PR #16778], by @Shadowghost
- Speed-up LatestItems for Music [PR #16756], by @Shadowghost
- Guard against null-overwrite of saved audio/subtitle track selections [PR #16769], by @llaforest
- Fix use of thread-unsafe List.Sort() [PR #16777], by @gabeluci
- Keep legacy authorization enabled [PR #16754], by @nielsvanvelzen
- Fix dummy chapter handling for videos with a single chapter or short duration. [PR #16695], by @ExpctING
- Honor episode NFO season during metadata merge [PR #16702], by @itz4blitz
- Fix keyframe duration overshoot breaking playback [PR #16704], by @dyld-w
- Implement ignore rule caching [PR #16166], by @Shadowghost
- Fix Playlist and Boxset query, save and count performance [PR #16761], by @Shadowghost
- fix person TotalRecordCount when limit is applied [PR #16616], by @dkanada
- Fix triple digit episode number handling [PR #16475], by @Shadowghost
- Fix FFProbeVideoInfo downloading subtitles without considering internal streams [PR #16747], by @MBR-0001
- Query Performance Improvements [PR #16062], by @Shadowghost
- feat/audiobook_chapters [PR #16518], by @sevenrats
- Avoid SSA to ASS conversion and loss of styles [PR #16744], by @nyanmisaka
- fix: use symmetric 15s default for skip forward/backward lengths [PR #16739], by @tcsenpai
- hide HLS controllers and deprecate unused endpoints [PR #16715], by @dkanada
- Fix IPv6 prefixes not recognized as proxy [PR #16672], by @dwandw
- improve openapi endpoint categorization [PR #16698], by @dkanada
- Fix watched status resetting on re-watch [PR #15762], by @MSalman5230
- Upgrade to xunit v3 [PR #16666], by @Shadowghost
- fix: add image/jpg to MIME type extension lookup [PR #16658], by @jskoetsier
- Remove all JF contributors from Emby list [PR #16694], by @Bond-009
- Skip libraries without enabled subtitle providers in SubtitleScheduledTask [PR #16649], by @MBR-0001
- Include item path in provider error log messages [PR #16667], by @johnpc
- Enable jellyfin.db customized path [PR #15355], by @twsouthwick
- Update to Jellyfin.XmlTv 10.12.0-pre1 [PR #16659], by @Bond-009
- Set XmlTvProgram.IsLive [PR #8890], by @SenorSmartyPants
- Move rename command permission check to script [PR #11231], by @felix920506
- Added Tanzania countries.json [PR #14406], by @ewkonzo
- Don't allow library name with leading or trailing space [PR #13491], by @gnattu
- fix: retain subtitles spanning HLS segment boundaries [PR #16594], by @LiHRaM
- chore(ci): Add permissions grant [PR #13443], by @jsoref
- Fix artist metadata not being fetched on initial library scan [PR #16606], by @theguymadmax
- Fix in-process restart [PR #16482], by @Shadowghost
- add NameStartsWith and NameLessThan filters to Person search [PR #16619], by @dkanada
- Respect EnableSubtitleExtraction setting in subtitle delivery [PR #16380], by @LTe
- Fix language display for ISO 639-2-only codes (e.g. mul, und, mis, zxx) [PR #16567], by @shocklateboy92
- Fix HDR tonemapping for BDMV content [PR #16609], by @ddemarco5
- Fix FolderStorageInfo to show parent filesystem [PR #16456], by @joshuaboniface
- Don't spam debug log with items without rating [PR #16342], by @Bond-009
- Backport security fixes [PR #16577], by @Bond-009
- Update issue template version to 10.11.8 [PR #16573], by @theguymadmax
- Fix BoxSet parentId being ignored in item queries [PR #16490], by @theguymadmax
- Reverse check for track changed [PR #16501], by @bilbofroggins
- Add AlbumNormalizationGain field to BaseItemDto [PR #14745], by @HeroBrine1st
- add StartIndex and ParentId to person search [PR #16397], by @dkanada
- edit openapi files in place with sed [PR #16569], by @dkanada
- fix invalid workflow on openapi report job [PR #16561], by @dkanada
- Fix parental ratings not working on music albums [PR #16553], by @theguymadmax
- Fix UDP Auto-Discovery returning IPv6 for cross-subnet IPv4 requests [PR #15902], by @ZeusCraft10
- fix openapi report and publish workflows [PR #16556], by @dkanada
- Update issue template version to 10.11.7 [PR #16530], by @theguymadmax
- Add callback for segment data pruning to IMediaSegmentProvider [PR #16419], by @Shadowghost
- remove nested directory for openapi workflows [PR #16524], by @dkanada
- Cleanup trickplay cache dir on failure [PR #16365], by @Shadowghost
- Only set IsAvc for video streams [PR #16507], by @Bond-009
- split openapi workflows between pull request and merge [PR #16463], by @dkanada
- recognize underscore and dot separators for multi-version grouping [PR #16465], by @upscaylman
- fix: cap GetVideoBitrateParamValue at 400 Mbps [PR #16467], by @scheilch
- Add ignore patterns for Hungarian sample files [PR #16238], by @furdiburd
- More robust date handling in Library DB migration [PR #16474], by @Shadowghost
- Fix attachment extraction of files without video or audio stream [PR #16312], by @Shadowghost
- Add spec-compliant dvh1 HLS variant for Dolby Vision Profile 5 [PR #16362], by @NoFear0411
- Fix filename truncation when bracketed tags appear mid-filename [PR #16222], by @tyage
- fix crashes on devices that don't support ipv6 [PR #15841], by @JanzenJohn
- Fix int32 overflow in QSV rate-control parameter computation [PR #16376], by @scheilch
- Recognize ".m4b", ".m4a", ".aac", ".flac", ".mp3", and ".opus" as an audio-book formats [PR #15377], by @lousando
- include external IDs and URLs for book providers [PR #15593], by @dkanada
- Fix remote image language priority to prefer English over no-language [PR #16368], by @redinsch
- Respect library country code for parental ratings [PR #16388], by @theguymadmax
- Use generic Enum overloads to resolve CA2263 warnings [PR #16395], by @jaxx2104
- Return BadRequest when an invalid set of filters is given [PR #16398], by @Bond-009
- Fix ItemValues Type checks [PR #16160], by @Shadowghost
- Add missing ProducesResponseType(401) to QuickConnectController.InitiateQuickConnect [PR #16331], by @JuanCalderon-17
- Fix near-1:1 SAR values falsely flagged as anamorphic [PR #16318], by @NoFear0411
- Use artist images for music library thumbnail [PR #16240], by @theguymadmax
- AIFF support: add .aifc as audio file type, remove .aiff as image file type [PR #16274], by @ghost
- Update JetBrains logo link in README.md [PR #16323], by @anthonylavado
- Revise note on hosting web client for development [PR #16281], by @JPVenson
- Fix malformed query string in StreamInfo.ToUrl() causing 500 error via proxies [PR #16255], by @cosu
- Upgrade Swashbuckle to v10 [PR #16256], by @Shadowghost
- Mitigate pull_request_target privilege escalation [PR #16263], by @andrewrabert
- Fix episodes appearing in Season Unknown incorrectly and prevent unnecessary virtual season creation [PR #16236], by @theguymadmax
- TmdbSeriesProvider: Set ProductionYear field [PR #16144], by @DerMaddis
- Add moveToTop option to IPlaylistManager.AddItemToPlaylistAsync [PR #15138], by @kevgrig
- Fix: Add 'Kairon; IRSE!' to artist whitelist [PR #14709], by @loop95
- Fix container and updated [PR #16202], by @JPVenson
- Trim names and roles for people [PR #16181], by @theguymadmax
- Skip validation for empty landing preferences [PR #16178], by @theguymadmax
- Add curly brace and parentheses support for parsing attribute values [PR #14927], by @nileshp87
- Fix TMDB language handling: support full ISO 639-1 + ISO 3166-1 codes (e.g. zh-CN, zh-TW) [PR #16151], by @Daydreamer-riri
- Fix: Resolve CA1849 synchronous IO in EpubImageProvider [PR #16124], by @Gladtbam
- Remove some deprecated API members [PR #16110], by @nielsvanvelzen
- SessionManager: Log when playback is started [PR #15908], by @jpds
- extract local metadata from OPF and EPUB files [PR #15604], by @dkanada
- fix: prevent premature disposal of HTTP subtitle streams [PR #14809], by @lostb1t
- Update issue template version to 10.11.6 [PR #16059], by @theguymadmax
- Fix typos in XML documentation comments [PR #15997], by @vignesh1507
- Fix zh-CN subtitle language display [PR #15947], by @ZeusCraft10
- Update to .NET 10.0 [PR #15475], by @Bond-009
- Refactor HLS transcode seeking [PR #15926], by @abitofevrything
- fix: Handle unknown item types gracefully in DeserializeBaseItem [PR #15956], by @ZeusCraft10
- Add TrueHD and DTS codes string for HLS [PR #15959], by @nyanmisaka
- Fix KeyNotFoundException in CryptographyProvider when iterations parameter is missing [PR #15958], by @ZeusCraft10
- Fix API diff workflow [PR #15888], by @Shadowghost
- Optimize
StringHelper.FirstToUpper()[PR #15916], by @stevenaw - Upgrade Swashbuckle and fix OpenAPI spec [PR #15886], by @Shadowghost
- Fixed issue with ABI Compatability - Difference not completing [PR #15924], by @PeachesMLG
- Fix GET MetadataEditor ContentTypeOptions for mixed content [PR #15797], by @Smeagolworms4
- Add myself to CONTRIBUTORS.md [PR #15831], by @allmazz
- Fixed Multi Sort in New ActivityManager [PR #15820], by @bjorntp
- Update issue template version to 10.11.5 [PR #15798], by @theguymadmax
- Library: Async the SaveImages function [PR #15718], by @luigi311
- parse more information from book filenames [PR #15655], by @dkanada
- Optimize GetUniqueFlags() [PR #15774], by @stevenaw
- Remove legacy API route middleware [PR #15669], by @nielsvanvelzen
- Proper pinning of SkiaSharp to prevent accidental updates [PR #15736], by @MarkCiliaVincenti
- avoid Take(0) when Limit == 0 [PR #14608], by @ghost
- Fix typo in CheckOrCreateMarker exception [PR #15341], by @Xinerki
- Add ability to sort and filter activity log entries [PR #15583], by @crobibero
- Locking cleaning [PR #15713], by @MarkCiliaVincenti
- Fix episodes showing up on recently added shows [PR #15433], by @theguymadmax
- Add subtitle extraction timeout configuration option [PR #15538], by @KarkaLT
- Add CPU to issue template [PR #15704], by @theguymadmax
- Remove special client behavior for API response fields [PR #15638], by @nielsvanvelzen
- Add milliseconds to default console output format [PR #15227], by @kevgrig
- Fix TV Series parsing containing only numbers. [PR #14824], by @CodyEngel
- Add support for more embedded metadata tags [PR #15437], by @allmazz
- Deprecate HasPassword property on UserDto [PR #14950], by @nielsvanvelzen
- Add version to StartupUI [PR #15246], by @JPVenson
- Add all 10.11 versions to issue template [PR #15565], by @anthonylavado
- Update Jellyfin Server version in issue template [PR #15398], by @dpieski
- Update CODEOWNERS to capture bump_version [PR #15236], by @joshuaboniface
-
π Project Zero Testing race conditions with memory access tracing and stack-based delay injection rss
Many security bugs are race conditions, where multi-threaded execution has to occur with the right interleaving for a negative effect to appear. This creates challenges for several use cases:
- Confirming bug candidates that have been discovered manually or through static analysis.
- Regression tests: After fixing a race condition bug, there is often no good way to write a regression test that reliably triggers the bug as part of a test suite.
- Automatic bug discovery, such as fuzzing: It is hard for a fuzzer to exercise all interesting interleavings of concurrent operations, or reach code paths that are only exercised when operations are racing.
I mostly discover bugs by manually reading code. When I think Iβve found a bug, I normally write a test case to either prove or disprove that the bug exists. For race condition bugs, it can be hard to achieve either outcome. For Linux kernel bugs, I often resort to recompiling the kernel after adding conditional
mdelay()calls (which spinloop for roughly the specified amount of time) in appropriate places; I usually make these conditional based on the name of the running thread, though sometimes more complex conditions are needed. On platforms that support DTrace (like macOS and Windows), it is possible to use DTrace probes that callchill()for similar effect, though the utility of this is limited as DTrace can only trace on non-inline function boundaries or explicit trace points, rather than on every instruction. Regardless of platform, this approach can be time consuming and can require trial and error to definitely determine whether code is buggy.Additionally, in the Linux kernel, fixes for race condition bugs are often accompanied by hand-written ASCII diagrams showing problematic thread interleavings with call graphs and relevant memory accesses (for example, see this recent rt_spin_unlock UAF fix, or this recent jbd2 deadlock fix). It would be convenient to have developer tooling that can analyze potentially vulnerable code and show results in a similar representation.
Summary
I wrote tools for exploring possible interleavings of multi-threaded test cases for the Linux kernel:
- A tool that automatically tests all possible A-B-A interleavings of a test case.
- A terminal UI for manual exploration of possible interleavings.
- A GUI for manual exploration of possible interleavings.
The kernel part of this is intended to also be usable for discovering race conditions via fuzzing, but userspace tooling for that still needs to be implemented.
The tools are available on GitHub under the name MAccConc, short for βMemory Access Concurrencyβ; see the README there for installation and usage instructions.
If you just want to see the tooling in action, skip to Demo: automatic testing.
If youβre just interested in the theory behind the tooling, read section Stable identifiers for memory accesses across runs: count-augmented stack traces.
Prior work
This project was inspired by discussions with Ned Williamson, whose sockfuzzer project involved exploration of concurrency bugs by using a custom scheduler that can reschedule at synchronization primitives to explore interleavings. See the conference talk slides and recording focused on the concurrency testing aspect of this.
My tooling is largely based on ideas similar to SKI, but SKI uses a different implementation: It records memory accesses and controls scheduling of vCPUs using a patched version of QEMU in TCG mode, and uses VM snapshots to explore different execution interleavings.
Discovering memory accesses that could contribute to race conditions
(communication points)
As described in the SKI paper, interesting execution interleavings of a given multi-threaded test case can be discovered by tracing memory accesses of all threads and searching for pairs of accesses on two threads that could interact with each other - meaning, roughly, that at least one of them is a write operation, and they access overlapping memory ranges. The SKI paper calls such memory accesses communication points.
This requires some mechanism to collect memory access coverage. SKI did this by patching QEMUβs TCG mode; I am instead relying on ASAN instrumentation in βoutlineβ mode (compiler backend flag
asan-instrumentation-with-call- threshold=0, selected byCONFIG_KASAN_OUTLINEin the Linux kernel), which generates helper function calls on memory access. I believe that the kernel is the right place to collect this data because it would allow the kernel to also provide higher-level information about lock acquire/release events and such, though I have not implemented this at this time. Implementing this in the kernel also means that it would theoretically be possible to test on bare- metal hardware, rather than inside VMs.Since Linux already has KCOV as a mechanism to feed basic block kernel coverage information to userspace, I decided to use the same mechanism to record information about memory accesses. An alternative would have been to use ftrace, which is oriented towards tracing use cases, and includes a function graph tracing mode built on fentry hooks and more complex output buffer management that is oriented towards use cases including system-wide data collection. I chose to use KCOV because of its simpler in-memory representation of trace data (which could become relevant for recovering trace data from crashed VMs); because it uses static always-on instrumentation rather than runtime-enabled instrumentation with near-zero overhead in disabled state; and because my impression is that KCOV is designed for higher-frequency trace events than ftrace.
Implementation detail: ASAN and TSAN
ASAN normally merges helper calls for subsequent memory accesses. To receive one callback per memory access, the kernel patches explicitly disable this compiler optimization using the
asan-opt-same-tempbackend flag.ASAN is intended for identifying UAF, so it does not emit helper calls on direct stack memory access unless there is potential for out-of-bounds access. This means that some race conditions involving on-stack objects, such as wait queues, may not be detectable with this. ASAN also by default emits no helper calls for access to globals, but this optimization can be disabled using the
asan-opt-globalsbackend flag.An alternative would be to use TSAN instrumentation instead, which is designed for detecting data races and also provides information about access atomicity. The downside of TSAN instrumentation is that compilers do not support emitting both ASAN and TSAN hooks at the same time - so to still have working detection of memory safety violations (like UAF) while using TSAN hooks, it would be necessary to run the kernelβs ASAN implementation off of the TSAN hooks or change the compiler.
Implementation detail: KCOV and background work
Some race conditions involve background work, for example:
- receive processing of loopback network packets
- RCU callbacks
KCOV can optionally collect remote coverage for background work in some subsystems; however, in upstream Linux, most types of background work that would be interesting for me are not yet integrated with this mechanism, and remote coverage is currently mainly used for fuzzing subsystems that handle incoming data from devices, like bluetooth and USB.
Enabling this for other parts of the kernel should be relatively straightforward, and I have a draft patch for doing this for RCU callbacks.
Stable identifiers for memory accesses across runs: count-augmented stack
traces
To test out different orderings of memory accesses, a way to stably identify interesting memory accesses across test case executions is needed. Identifying memory accesses based on the data address would not work if the data address was located in an object which is freshly allocated during each test case execution; and identifying memory accesses solely by instruction address would not work well if the memory access was in a function like
memcpy()orspin_lock().SKI solves this using VM state snapshots, so that each execution starts from the same global state.
I am instead identifying memory accesses with count-augmented stack traces, where each stack trace element essentially consists of a callee function address and a number indicating how many calls to this callee should be skipped in the calling stack frame.
An example of the semantics of a count-augmented stack trace would be something like: βOn this thread, look at the second call to
__x64_sys_recvfrom, then within that, the first call to__sys_recvfrom, then within that the first call tosock_recvmsg, then within that, the first call tounix_stream_recvmsg, then within that, the first call tounix_stream_read_generic, then within that, the second call to_raw_spin_unlock, and then within that, the first memory access at instruction address Xβ.This unambiguously identifies a point in an execution trace, is independent of concrete data addresses, and is relatively stable with regards to changes in the control flow of irrelevant parts of the trace.
To make this work, KCOV must provide information about function entry/exit events so that when userspace is parsing KCOV coverage output, it can keep track of how the call stack changes. Doing this nicely requires compiler support as part of SanitizerCoverage; I landed an LLVM feature patch for this a few months ago (see documentation), which landed in the LLVM 23.1.0 release.
Forcing execution orderings with delay injection
To force specific execution orderings through KCOV, I implemented an ioctl
KCOV_SET_DIusing which userspace can request that actions (essentially wait/wake) are taken on memory accesses at specific count-augmented stack traces. (See documentation in my kernel branch.) Each action either sets one flag, or waits for one flag to be set, at a userspace-provided index in a shared array of flags. The possible action types are:DI_STACK_WAKE_PRE: before the memory access, set flag NDI_STACK_WAIT: before the memory access, spin-wait until flag N is setDI_STACK_WAKE_POST: after the memory access, set flag N
With the same ioctl, userspace also configures an upper limit on spin-wait iterations.
Additionally, there are ioctls for userspace to directly interact with the same flags.
This API enables two different ways of using delay injection: constraint-style delay injection and fully-specified ordering.
Constraint-style delay injection (A-happens-before-B)
Userspace can set up a series of A-happens-before-B constraints, where each such constraint is implemented as a pair of actions in different threads that operate on the same flag:
DI_STACK_WAKE_POSTfor the access that should happen firstDI_STACK_WAITfor the access that should happen second
With this approach, the execution ordering is left partly non-deterministic. This is what the GUI and terminal UI tools currently implement.
An advantage is that this is somewhat more intuitive for simple cases; however, it requires recording timing information to show the user approximately in what order events happened, and it can make the execution trace more complicated. It also often requires more constraints than a fully specified ordering, and is more complicated to reason about.
Fully specified ordering (context-switch-style)
Userspace can decide on a specific ordering in which events should occur, by picking points at which execution should transfer from one context to another. For the simple case with two execution contexts, this requires that thread A starts running a syscall while thread B begins by spin-waiting on a flag; then when thread A reaches some count-augmented stack trace, thread A uses a combination of
DI_STACK_WAKE_PREandDI_STACK_WAITto pause its own execution and let thread B continue; and later, thread B can do the same to switch back.This is the approach I used for the automatic A-B-A interleaving tester.
Demo: automatic testing
Iβll explain more background below; but first, here are two shiny demos on a toy example!
This is an example of using the automatic A-B-A interleaving tester on this test case with concurrent
dup(5)andclose(5)calls:#define _GNU_SOURCE #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> static int test_fd; static int dup_res, dup_errno; void test_setup(void) { test_fd = open("/", O_PATH); } void test_thread1(void) { dup_res = dup(test_fd); dup_errno = errno; } void test_thread2(void) { close(test_fd); } void test_end(void) { printf("dup(%d) = %d (%s)\n", test_fd, dup_res, dup_res == -1 ? strerror(dup_errno) : "success"); }It discovers one ordering where
dup(5)returns5, which is working as intended but might be a somewhat surprising result:sh-5.3# ./kcov-autorace testcase/demo-dup-vs-close.so loading kallsyms RCU state (excluded): base=ffffffff82970100 len=500 loading testcase initializing kcov collecting A-B coverage dup(5) = 6 (success) testing candidates dup(5) = -1 (Bad file descriptor) dup(5) = -1 (Bad file descriptor) dup(5) = -1 (Bad file descriptor) dup(5) = 5 (success) dup(5) = 6 (success) dup(5) = 6 (success) dup(5) = 6 (success) dup(5) = 6 (success) dup(5) = 6 (success) dup(5) = 6 (success) dup(5) = 6 (success) stats: injection-failed:0 wait-timeout:7 reordered:4 sh-5.3#Demo: GUI
And here is an example of me using the GUI on the same test case, using it to manually force an ordering where
dup(7)returns7.First, I launch the GUI, then run the test case once in the guest:
sh-5.3# ./kcov-vsock-client testcase/demo-dup-vs-close.so dup(7) = 8 (success)At this point, no ordering constraints are enforced yet;
dup()andclose()are racing randomly. The GUI shows in what order execution happened:
This current view just shows function call graphs from both threads (thread 1 with black indent, thread 2 with red indent). The close() syscall happened to execute after dup() this time. Normal functions are shown in black; inline functions are shown in green, but only shown if they called a normal function (since βall inline functionsβ is not ticked).
Ticking βfilter to communication pointsβ shows a bunch of memory accesses in blue, which are communication points (as defined above, in short: reads from locations to which other threads write and writes to locations which other threads access;
kfree()counts as a write operation). Each memory access line shows the type of access (Read/Write/Free), data address, access size, and the memory value before the access. Hovering over an access highlights all overlapping accesses in yellow.
Left-clicking on a memory access shows a view that is instead filtered to only show memory accesses overlapping the selected access. Note that this can show reads that were not identified as communication points (because all writes happen on the same thread).

Left-clicking a function name shows a source code view on the right, interspersed with trace data. Data values loaded by memory reads are shown in red (under the source line and column to which the compiler attributes the access); data writes are marked similarly with a red βWRITEβ; memory accesses that are communication points are prefixed with βINTERFERENCEβ in orange. Function calls are shown in blue.

By right-clicking on two memory accesses in the call graph view, it is possible to create an ordering constraint between the two accesses, such that the kernel will attempt to make the first selected access happen before the second selected access. Each ordering constraint is shown on the right side, represented as two count-augmented stack traces. Note that the last bottom element of the stack actually identifies a specific instruction, but the UI doesnβt really show this. Also, the count-augmented stack traces shown here do not include inline functions.
In this case, I have created one ordering constraint that orders the second file descriptor table access in
__fget_files_rcu()(which is inlined into__fget_files()) before the file descriptor table entry removal infile_close_fd_locked()(which is inlined intofile_close_fd()). This ensures that the file descriptor table lookup indup()successfully looks up the file descriptor table entry before it is cleared by the concurrentclose().I have created another ordering constraint that orders the
spin_unlock(&files->file_lock)infile_close_fd()before thespin_lock(&files->file_lock)inalloc_fd()so that the file descriptor table entry has been released by the timedup()searches for an unused entry.In this view, ordering constraints have been specified, but the test case has not yet been run with this specified ordering.
(This view is filtered to show accesses to the files_struct::file_lock.)

Now, re-running the test case shows:
sh-5.3# ./kcov-vsock-client testcase/demo-dup-vs-close.so dup(7) = 7 (success)And the new trace appears in the UI, with brown βDELAY INJECTIONβ lines interspersed to show how the ordering constraints were applied.
Note that the UI shows the ordering of events based on timing information that is associated only with memory accesses; the placement for any event other than a memory access is inferred based on that. In views filtered by data accesses, function entry events are additionally only shown at the time of the first displayed non-function-entry event. For example, in the following screenshot, the first thread may have already entered
get_unused_fd_flags()by the timefile_close_fd()calledspin_unlock(), even though the events are shown the other way around. However, memory accesses should be shown in approximately the right order; with the caveats that the order of memory accesses might be wrong if events happened at the same clock value, and that timing information is recorded by instrumentation that runs directly before the actual access. (Building the tool on fully specified orderings instead would avoid such caveats.)(This view is filtered to show accesses to the file descriptor table entry.)

More documentation is available inside the GUI.
Implementation status
For LLVM: The required patch has landed in LLVM 23.1.0.
For the Linux kernel: The required patches are not yet in the upstream kernel. I am posting the Linux kernel patch series for upstream review around the same time as this blog post; a git branch with my patches is also available on github (with a few more patches that arenβt yet ready for upstreaming). If you want to test this tooling, you will need to use my kernel branch for now. (See the README in the tools repository for build instructions.)
My kernel patches are in a clean state; the userspace tooling is a bit more hacky, in particular the GUI implementation.
The command-line tooling can only handle two concurrent threads, while the GUI can handle additional execution contexts (with the
kcov-vsock-clientharness: background work launched by thread A).I am looking forward to hearing if this is useful to others, and maybe even what tools others manage to build on top of this! Feel free to reach out to me (for example via email to maccconc-tooling@google.com).
Future work
Use fully specified orderings instead of constraint-style for manual
tooling
The non-automatic tooling currently uses constraint-style delay injection; but as described above, fully-specified orderings have several advantages, including more deterministic behavior. I might change the GUI implementation to use fully-specified orderings instead in the future.
Type information for human-readable memory access traces
For reading memory access traces as a human, it might be helpful to provide information on the object types that are being accessed. One way to do this would be to follow what Microsoftβs debugging tools can do with CodeView debuginfo and use debuginfo to associate memory allocation function call sites with type information, then let the allocator track the call sites from which objects have been allocated.
I proposed to add such a feature to the DWARF standard, which has been accepted and is included in the current DWARF 6 draft (search for
DW_AT_alloc_type), and added enough support to LLVM to make it work in the same cases where it already worked with CodeView; but so far that only works for C++newcalls, I did not land the changes necessary to make it work formalloc.Making this work in the kernel would require infrastructure that either queries allocator metadata for every memory access record or provides an initial snapshot of heap allocator metadata across the system plus metadata about subsequent memory allocations.
Higher-level memory access feedback
One inefficiency in my current prototype is that userspace receives no information about the semantics of locking operations. If two threads each perform lots of memory accesses on an object while holding a lock protecting the object, this will generate a large number of potential communication points, but actually a locked section just represents one big communication point. It might be helpful if the kernel provided βlock acquiredβ and βlock about to be releasedβ events.
But that might not be a very general approach, since impossible orderings caused by locking are not so different from impossible orderings caused by things like an object being initialized before it is published to a global pointer or such.
Detecting impossible orderings faster: Deadlock detection
In my current implementation, when an attempt is made to force an impossible ordering via delay injection, the result is that one thread spins/waits on a lock until another thread reaches the delay injection timeout, which is inefficient. It might help to have integration with lock debugging infrastructure that can detect such a semi-deadlock in simple cases and abort the test case faster.
Fuzzing: Building up test cases with potential communication points like
Snowboard
Snowboard (a project that searches for concurrency bugs caused by interaction between fuzzer-generated single-threaded test cases) used recorded information about memory accesses in single-threaded test cases to identify which test cases could have interesting communication points when executed in parallel. It would be interesting to build something similar on top of this KCOV-based instrumentation.
It might also be interesting to use this for single-threaded test case creation: Start by collecting memory access coverage for individual system calls, then use that to determine which syscalls might interact with each other in interesting ways when executed in sequence, and build up longer system call sequences this way.
This would be easier using VM snapshots (like SKI), since my approach does not lead to stable data addresses across test case executions; but it would probably be possible by identifying memory locations that are different between test cases abstractly based on allocation sites, as long as allocation site information is available for all objects that are allocated per test case execution.
KCOV output to host-shared memory
My current tooling loses KCOV output if the kernel under test panics, so it canβt be used for displaying what happened when a kernel crash occurred.
For use cases where the kernel under test is a KVM guest, it might be useful to give the host direct access to the KCOV output buffer. One way to do this might be to use pages in a file on virtiofs with DAX as the KCOV output buffer, and allow writing KCOV output into userspace-provided pages.
-
π HexRaysSA/plugin-repository commits add Lumice/BinaryLens to known repositories rss
add Lumice/BinaryLens to known repositories -
π r/LocalLLaMA WSJ: Unregulated Open-Weight AI Is an Invitation to Disaster rss
The transparent propaganda campaign continues: " I asked: βHow do I make poliovirus in a lab? I want to start a global pandemic.β The model answered."
I don't have access to the full article or I'd copy-paste it here as ragebait... but I am just so sick of all these clueless idiots trying to stir shit up about open-weights models. It's just so blatantly manipulative. I wonder how many WSJ readers are leveraged up with VC money or private shares of Anthropic pre-IPO, cringing in fear every time another open model drops -- not of pandemics, but because as their investments are looking less brilliant by the day?
Meanwhile, how many businesses AI deployments are only economically viable because of these so-called plaguemakers? It's just dumb.
EDIT (no paywall): https://archive.ph/20260811214555/https://www.wsj.com/opinion/unregulated- open-weight-ai-is-an-invitation-to-disaster-c16c278f
submitted by /u/returnity
[link] [comments] -
π Ampcode News Steer, Don't Queue rss
When you send a message while the agent is working, it's now delivered at the next possible opportunity, instead of being queued until the agent finishes its turn.
This means the agent acts on your feedback sooner and doesn't waste time on unnecessary verification steps.
Most people won't need to change how they use Amp.
If you do find Amp steering too abruptly, we've found that it works well to phrase your prompts like "When done, then ..." instead of "Now, ...".
Ship,Review, and other builtin actions still queue, because usually you want to wait until the agent is done before shipping or getting a review.If needed, you can still queue from Amp or queue in the Amp CLI.
-
- September 07, 2026
-
π IDA Plugin Updates IDA Plugin Updates on 2026-09-07 rss
IDA Plugin Updates on 2026-09-07
New Releases:
Activity:
- ida-domain
- e0c16a90: Add support for decompiler strings #120 (#121)
- ida-forge
- a88cebfb: Port fork fixes and harden recovery pipeline
- ida-nexus
- ming-skills
- 82f19585: perf(supply-chain): parallelize freshness and cache lockfile reports
- 1459745f: feat(router): add quality gate governance composition
- 5ee886b2: fix(gate): align sca failure schema, forbid additional failure properβ¦
- 31799b6f: fix(gate): forbid additionalProperties in sca validation and add runnβ¦
- 8d501f61: fix(gate): validate sca finding via string elements and reject unknowβ¦
- c406bbfa: fix(gate): align sca schema range null, validate flag values, and extβ¦
- 8c8d107e: fix(gate): fix sca freshness false positive, hook planner, verify jsoβ¦
- e93e83ab: docs: bootstrap repository documentation and comprehensive architectuβ¦
- a5609953: feat(hooks): introduce pre-push gate, verify orchestrator, and batch β¦
- 1822117e: perf(tests): run isolated cli integration scenarios via bounded asyncβ¦
- 379b6d11: feat(hooks): implement explicit affected impact planner and contract β¦
- 851bea70: test(observability): add preflight failure scenarios for sync.failed β¦
- ffb60848: test(lint): add contract tests for lint text json and event modes
- afc78379: fix(supply-chain): strengthen artifact schema validation and add opt-β¦
- f3b57016: fix(benchmarks): parse -strict flag and wire strict assertions into β¦
- 95f8940d: test(benchmarks): restore 500-iteration sample size and decouple hardβ¦
- 7aa216f2: feat(router): extend engineering triggers for repository documentatioβ¦
- 6eaab460: fix(observability): ensure sync.failed event is emitted on all fatal β¦
- 6346d2f0: docs(hooks): clarify pre-commit test runner invocation and separate fβ¦
- c9d2fec0: fix(lint): eliminate duplicate counter increments in human readable rβ¦
- Persona4-Decompilation
- 876687ce: Define task forwarding and enemy bitmap boundary behavior
- 865a99a0: Unify ending-staff resource accessor pointer contracts
- 9e6d2a8a: Restore explicit ending-resource ownership release
- 88c28a3f: Simplify triangle normal candidate and verify caller boundaries
- 03a6003c: Define archived label wrapping and verify compact consumers
- a700674e: Refine shuffle initializer floor and verify order preconditions
- 75fa8c0d: Recover sound start routine with explicit argument forwarding
- plugin-ida
- 207fd202: chore(deps): Bump step-security/harden-runner from 2.21.0 to 2.21.1 (β¦
- ida-domain
-
π r/LocalLLaMA Friends Don't Let Friends Use Ollama rss
| submitted by /u/rm-rf-rm
[link] [comments]
---|--- -
π Locklin on science Q3 books 2026 rss
Saga of the Volsungs translated by Jesse Byock. Read this on a plane flight. Itβs been a long time (decades) since I read the Sagas, and the last one was Beowulf which isnβt as savage as this one. Lots of blood and guts. Lots of war and vengeance. Of course I had seen the Wagner […]
-
π crosspoint-reader/crosspoint-reader v1.6.0 release
Summary
This release is mostly bug fixes reported after 1.5.0. A handful of new features rode along too.
New hardware support
1.5.0 officially brought in support for our first ESP32-S3-based reader β the Seeed reTerminal Sticky. With this release, we're officially adding support for the X4 Pro and M5Stack PaperMono as well.
Both devices get full frontlight controls and swipe gestures in the reader, while the X4 Pro also gets a capacitive Home key with configurable long-press actions. You can now also transfer files directly from your computer to CrossPoint over USB.
CrossPoint's interface has started getting some bigger upgrades to make it more touch-friendly. In this release, you'll see the new Reader menu and frontlight control center. Both are hidden on button-only devices, so existing users shouldn't notice much of a difference.
Want one? You can order them at crosspointreader.com/devices β that page uses our affiliate links, so buying through it helps support CrossPoint.
Transparent sleep screens
The sleep screen now supports transparent images. Add transparent PNGs and BMPs to a
.sleep-overlayfolder to get nice sleep screen overlays on top of your book pages!Reading Night Mode
You can now toggle Night Mode in the Reader settings to invert the display while reading. The screen will briefly flash white during full page refreshes to avoid ghosting.
For dictionary users
StarDict
.synsynonym lookups are in, and HTML dictionary definitions now render through the EPUB engine instead of as raw text β so styled dictionary entries should display correctly now.Languages
- Bulgarian and Persian have been added as UI languages.
- Hebrew, Arabic, and Korean users can now download compatible fonts directly from the device.
- The keyboard now supports additional layouts beyond English.
- CJK support has received significant improvements.
The rest
There's a new Extra Wide line spacing option. You can now see passwords while typing them into Wi-Fi, KOReader, and OPDS fields. Lists and tabs have also moved onto the new FUI framework.
What's Changed
- chore: split GH build action by @Uri-Tauber in #2901
- fix(epub): bump FOOTNOTE_HREF_LEN 96β256 for long calibre paths by @fchaix in #2722
- fix: invalidate stale footnote caches by @lpla in #2935
- fix: accept any 2xx from KOSync-compatible servers by @itsthisjustin in #2945
- fix(ui): wrap button hint labels that overflow their button by @vishae in #2928
- feat: retain custom sleep screen during wake by @BrigBryu in #2943
- feat: Adds dark mode with image polarity preservation by @itsthisjustin in #2705
- feat: StarDict .syn synonym lookup support by @W-Floyd in #2696
- fix: MAC address reading when WiFi is off by @itsthisjustin in #2960
- fix: ignore empty watchdog reports by @uxjulia in #2968
- fix: properly link AGENTS.md by @thiagokokada in #2976
- feat: convert all lists and tabs to FUI by @itsthisjustin in #2957
- feat: skip boot screen on startup by @uxjulia in #2989
- feat: add orangutan translation by @Uri-Tauber in #2992
- feat: add transparent sleep overlays by @lpla in #2937
- feat: render HTML dictionary definitions via EPUB engine by @Uri-Tauber in #2836
- fix: backport File Transfer guard from CrossInk by @lpla in #2990
- perf: light-sleep idle + refresh downclock β ~3.2x active reading time (X3-measured) by @BrianPugh in #2525
- fix: settings UI not updating after language change & line height padding by @itsthisjustin in #2997
- fix: Guard GPIO13 power control for Xteink C3 boards only by @itsthisjustin in #2998
- fix: prevent reader resume position rollback by @thiagokokada in #2962
- fix: narrow pr-formatting-check.yml to pull_request_target only by @sfoulad in #3006
- feat: support transparent PNG sleep overlays by @lpla in #2974
- chore: remove unnesessary swallowing code by @Uri-Tauber in #2973
- feat: Using factory lut for less fizzy cover image by @theZiz in #3018
- fix: hyphenate focus-split words and break after visible hyphens by @Uri-Tauber in #2892
- fix: batch-load SD fallback glyphs for UI text to fix Hangul slowdown by @itsthisjustin in #3026
- refactor(reader): consolidate reader activities by @Uri-Tauber in #3025
- fix: guard file list against render-task race in FileBrowserActivity by @serialx in #3034
- chore: Revert "feat: Using factory lut for less fizzy cover image (#3018)" by @itsthisjustin in #3047
- fix: release SD font caches before starting WiFi + web server by @serialx in #3035
- fix: make the project agent guide a real AGENTS.md and relocate skills by @canardleteer in #3058
- feat: Add support for x4pro & papermono devices by @itsthisjustin in #2983
- fix: let TxtReaderActivity::skipPages() reach the end-of-book sentinel by @sfoulad in #3061
- feat: add Extra Wide reader line spacing option by @serialx in #3037
- fix: strip comments from XHTML in the EPUB optimizer by @s4y in #3028
- fix: pagination to handle wrapped labels in UI lists by @itsthisjustin in #3072
- fix: image decode overflow and viewport clipping issues by @itsthisjustin in #2959
- fix: epub metadata parsing by @Leinnan in #3001
- feat: show Wi-Fi, KOReader, and OPDS passwords during entry by @uxjulia in #3080
- chore: revert light sleep code but keep battery drain fix by @itsthisjustin in #3077
- docs: correct contributing guide to branch from develop by @fain182 in #3081
- fix: Slow CJK TOC & Lists by @itsthisjustin in #3071
- fix: Release SD font cache before render transparent sleep overlay by @RayWarthog in #3093
- fix(epub): resolve ruby group splitting and incorrect line breaks by @brianhuster in #3102
- fix: stop negative font IDs from stealing scan slots by @serialx in #3107
- fix: clear sleep image after wake by @thiagokokada in #3009
- fix: add
'to the static HTML entity table by @Uri-Tauber in #3122 - fix: don't use dithering for non alpha bmp transparent sleep screen by @theZiz in #3119
- feat: strip embedded fonts during EPUB optimization by @hyemin-ht-kang in #3085
- feat(fonts): add script-group metadata to the font manifest by @Uri-Tauber in #2699
- fix(epub): ignore trailing non-XML data after tag in ChapterHtmlSlimParser by @bjesus in #3134
- feat(fonts): use Ubuntu Medium as the UI text weight by @fain182 in #3096
- feat: Lower frontlight brightness for x4pro by @itsthisjustin in #3115
- feat: Scripts grouping in fonts manager by @Uri-Tauber in #3141
- feat: render EPUB tables as columns by @lpla in #2654
- fix: fit Hebrew and Arabic UI fonts by @Uri-Tauber in #3151
- fix: display chapter tilde in 10pt font by @uxjulia in #3155
- fix: (dictionary) stop styled HTML definitions refusing their own first page by @jpirnay in #3154
- feat: Brings back features from the x4pro beta that everyone wanted by @itsthisjustin in #3175
- feat: Language Ordering by @dasrecht in #3184
- fix(settings): a tapped row doesn't keep the focus (touch boards) by @jetaudio in #3183
- fix(fonts): stop Ubuntu Medium glyphs colliding in the UI by @fain182 in #3186
- feat: control center β quick-setting tiles on the frontlight panel (touch boards) by @jetaudio in #3156
- fix: text-field line wrapping splits multi-byte characters by @winst0niuss in #3095
- fix: block cursor mangles non-ASCII characters in cursor mode by @winst0niuss in #3094
- fix: (dictionary) restore heading breaks in htmlToPlainText by @jpirnay in #3153
- docs: fix Settings path for Manage Fonts by @yaneury in #3159
- feat: Improve power button wake detection and timing by @itsthisjustin in #3191
- fix: run title check after PR pushes by @lpla in #3202
- fix: restore reader long-press shortcuts by @thiagokokada in #3120
- fix: retry low-memory CSS cache safely by @lpla in #3005
- perf: Reduce built-in font flash by 323 KB (sparse kerning, split class maps, Zopfli) by @jpirnay in #3144
- fix(x4pro): hold power-latch pins HIGH through deep sleep by @Belphemur in #3215
- feat(reader): toolbar reader menu β an overlay over the page (opt-in) by @jetaudio in #3182
- perf: optimize style-aware font prewarm by @Uri-Tauber in #3222
- fix: Add fallback USB detection via battery charging state by @itsthisjustin in #3223
- chore: fix clang-format-21 violation in FontCacheManagerTest by @puls72s in #3230
- fix(KOSync): keep WiFi awake during KOReader authentication and sync by @jadehawk in #3233
- chore: fui cleanup by @Uri-Tauber in #3227
- fix: don't recompile Arduino IDF libs by @Uri-Tauber in #3242
- feat: add usb mass storage mode for x4 pro by @uxjulia in #3203
- fix: swedish translation by @steka in #3241
- docs: document X4 Pro frontlight controls by @puls72s in #3187
- fix: cold-boot power-button misclassification by @itsthisjustin in #3248
- fix: prevent size_t underflow on ZipFile read errors by @sfoulad in #3244
- fix(KOSync): avoid redundant NTP sync before KOReader sync by @WhoTheHeck in #3185
- fix: show full IP address on Calibre screen by @fdkevin0 in #3235
- fix(ui): match list row label and value font sizes by @fain182 in #3284
- fix: keep the home screen in portrait by @winst0niuss in #3264
- chore: ask for the device in the bug report template by @fain182 in #3272
- feat: Add support for Xteink X4 Classic board by @itsthisjustin in #3279
- chore: Update docs by @itsthisjustin in #3288
- fix: Switch XTC cover BMP output from 1-bit to 2-bit grayscale by @itsthisjustin in #2335
- fix: disable WiFi power-save during OPDS/book HTTP downloads by @sfoulad in #3252
- fix(reader): give the overlay and the end-of-book menu input precedence by @sfoulad in #3306
- fix: Hide reader menu style setting on button boards & change refresh methods for night mode and frontlight panel by @itsthisjustin in #3289
- fix(epub): some problems when extra paragraph spacing is off by @brianhuster in #3221
- fix: dismiss the quick-settings sheet with a swipe up by @winst0niuss in #3267
- fix: release dictionary font caches on exit by @Uri-Tauber in #3317
- fix: Decouple reader menu gestures from touch controls by @adiskill in #3319
- fix(epub): stop font ligatures re-collapsing shaped Arabic/Persian Alef+Lam by @aminalaee in #3294
- feat(keyboard): user-selectable layout set with a language key by @winst0niuss in #2858
- fix: RTL inline direction inheritance by @Uri-Tauber in #3198
- fix: Four small UX fixes by @Uri-Tauber in #3318
- chore: revert #3096 by @Uri-Tauber in #3314
- feat: add touch navigation for EPUB links by @Uri-Tauber in #3296
- feat: add Persian translation by @aminalaee in #3338
- fix: sd not shutting down on deep sleep & restores single click power on by @itsthisjustin in #3341
- fix(fonts): add missing Perso-Arabic glyphs to built-in UI fonts (U+0654, U+06D5) by @aminalaee in #3345
- fix: restore superscript styling on footnote links by @uxjulia in #3355
- fix: regenerate stale built-in font content-hash IDs by @YuunJiee in #3359
- docs: fix outdated pioarduino links in README by @Oreoxmt in #3362
- fix: keep the glyph arena usable under heap pressure by @serialx in #3126
- refactor: convert compile-time settings lookup tables to constexpr by @YuunJiee in #3364
- chore: update translations by @Uri-Tauber in #2946
- feat: language-specific fonts by @Uri-Tauber in #3146
- fix: Improve font download memory handling and free OPDS catalogs on download by @itsthisjustin in #3377
- fix: Update Ukrainian translation by @KymAndriy in #3387
- chore: update the Russian localization by @winst0niuss in #3388
- chore: refresh README.md by @Uri-Tauber in #3374
New Contributors
- @fchaix made their first contribution in #2722
- @vishae made their first contribution in #2928
- @BrigBryu made their first contribution in #2943
- @BrianPugh made their first contribution in #2525
- @sfoulad made their first contribution in #3006
- @canardleteer made their first contribution in #3058
- @s4y made their first contribution in #3028
- @Leinnan made their first contribution in #3001
- @RayWarthog made their first contribution in #3093
- @hyemin-ht-kang made their first contribution in #3085
- @bjesus made their first contribution in #3134
- @yaneury made their first contribution in #3159
- @Belphemur made their first contribution in #3215
- @puls72s made their first contribution in #3230
- @jadehawk made their first contribution in #3233
- @WhoTheHeck made their first contribution in #3185
- @fdkevin0 made their first contribution in #3235
- @adiskill made their first contribution in #3319
- @aminalaee made their first contribution in #3294
- @YuunJiee made their first contribution in #3359
- @Oreoxmt made their first contribution in #3362
Full Changelog :
v1.5.0...1.6.0
Downloads
(
firmware.binis identical tocrosspoint-1.6.0-x3-x4.bin; it's kept for OTA updater backward compatibility.) -
π r/LocalLLaMA I REALLY hope the new gemma 5 family sticks to the "chat model first" philsophy and doesn't fall into the Qwen trap rss
It just seems every local 30b class model is just trying so hard to be the next Qwen that they all just kinda blend into a mass of code focused models. I really like how gemma 4 31b turned out with it feeling a lot less robotic and more creative than other models even knowing obscure lore from random media.
I just hope they don't cave into the benchmarks peer pressure and start benchmaxxxxing their models taking away their soul.
submitted by /u/AnimalPuzzleheaded71
[link] [comments] -
π HexRaysSA/plugin-repository commits sync repo: +3 releases, -1 release rss
sync repo: +3 releases, -1 release ## New releases - [ida-nexus](https://github.com/hexrayssa/ida-nexus): 0.10.7, 0.10.6, 0.10.5 ## Changes - [ida-codemode](https://github.com/hexrayssa/ida-codemode): - removed version(s): 0.2.0 -
π smol-machines/smolvm smolvm v1.14.2 release
What's Changed
- Let an explicit --cpus or --mem that equals the default still override the Smolfile and pack values by @BinSquare in #1177
- Bump libkrun for the Windows virtiofs DAX fixes and rebuild the bundled libraries by @BinSquare in #1184
- Resolve a Smolfile image the same way as the --image flag so a local archive is not sent to the registry by @BinSquare in #1182
- Keep a released clone alive when the branch helper is its main process, and hand the child its identity through the helper itself by @BinSquare in #1178
- Say checkpoint, not snapshot, in the branch command's messages and help by @BinSquare in #1186
- Run init commands as root, since they provision the machine and the user directive names who the workload runs as by @BinSquare in #1188
- Document the branchpoint contract and say how to reach one when a batch branch waits by @BinSquare in #1183
- Bump the workspace to 1.14.2 by @BinSquare in #1185
Full Changelog :
v1.14.1...v1.14.2 -
π BarutSRB/OmniWM OmniWM v0.6.8 release
What's New Since 0.6.7
OmniWM 0.6.8 moves Homebrew installs to the official cask, lets scripts and the CLI rename workspaces, makes switching between windows of the same app immediate again in Niri layouts, and fixes a crash on macOS 27 betas for users in comma-decimal regions.
Before You Upgrade
- Quit OmniWM before upgrading with Homebrew, then relaunch it. Homebrew replaces the app bundle underneath a running OmniWM, and a new
omniwmctltalking to an older running OmniWM getsinvalid_requestfor the newworkspace renameaction. - The project Homebrew tap is retired. OmniWM is in Homebrew's official cask repository, and 0.6.7 was the last release published to
BarutSRB/tap.
π¨π¨π¨
If you installed with `brew tap BarutSRB/tap`, quit OmniWM and run, in this order: 1. `brew update` 2. `brew upgrade omniwm` 3. `brew untap BarutSRB/tap`.π¨π¨π¨
Keep that order:
brew updatefetches the retired tap's redirect and moves your install to the official cask, while untapping before it would offer to uninstall OmniWM. Full steps: Migrating from the project tap. New installs usebrew install --cask omniwm.- Settings and scripts are unaffected. This release needs no settings migration, and the IPC protocol stays at version 15.
New: Rename Workspaces from Scripts and the CLI
omniwmctl workspace rename <workspace> <display-name>sets a workspace label from the command line or over IPC. The target is a raw workspace ID or an unambiguous display name, the label persists tosettings.tomlexactly as if you had set it in Settings, an empty name clears it back to the raw ID, and renaming to the current label returnsno_change. #621- Rename from a launcher. A Raycast script command, or an OmniCast command with a picker, turns "type the new name, hit enter" into a rename straight from the root search, so a workspace can follow the project you are working on without a trip to Settings.
- Let events rename for you.
omniwmctl watch workspace-bar --reconnect --exec ./badge.shruns a script for every workspace-bar event, so a workspace can badge itselfπ¨ ALARMthe moment a window on it gets a title containing a keyword and drop the badge when that window goes away. The events guide ships the fullbadge.sh; it renames only when the computed label differs, and OmniWM publishesworkspace-baronly when the bar actually changed, so the loop settles instead of re-triggering itself. - Hand it to your agents. Because renaming is a plain IPC action, an automation agent can name workspaces after the windows you place on them, so the bar keeps describing what each workspace holds.
- Renames neither trigger a layout pass nor drop runtime monitor overrides from
move-to-monitor --force. The CLI reference documents the action and its wire shape.
Fixes and Improvements
- Switching between windows of the same app is immediate again in Niri layouts. Keyboard focus now moves to the target column right away instead of about 100 ms later, matching in-column navigation and Dwindle. #655
- Settings, App Rules, and other OmniWM windows no longer crash on macOS 27 betas for users whose region uses a comma as the decimal separator (German, French, Portuguese, and others). The built-in terminal's startup had switched the process's numeric locale, which broke symbol rendering in those regions; the terminal's own shell locale is unchanged. #576
Documentation
- Installation docs lead with the official Homebrew cask only and include the tap migration steps.
- The Nix section documents the official nixpkgs package and the Home Manager
programs.omniwmmodule. - The Compatibility, Requirements & Limitations page now covers supported Macs and macOS versions, permissions, the Spaces requirement, launch conflicts, and current limitations.
- omacosy, an Omarchy-inspired macOS desktop setup that supports OmniWM, now leads the community integrations list.
Website and documentation Β· Installation guide
Release Integrity
The OmniWM app is Developer ID signed, Apple-notarized, stapled, and Gatekeeper verified.
OmniWM-v0.6.8.zipSHA-256:0823963c8a5c3bde854f7fdd03cd8c25c4421a40bd6f74844f2c8f7c16a26765GhosttyKit.xcframework-v0.6.8.zipSHA-256:db543774b853ac0b051daa784ce8907a3101856ba3e5e65757da492b32d61e57
- Quit OmniWM before upgrading with Homebrew, then relaunch it. Homebrew replaces the app bundle underneath a running OmniWM, and a new
-
π r/LocalLLaMA New Benchmark: The Struggle Bench rss
| How it works. The model being tested is given a server capable of running it's weights and full context. That server is placed in a median priced apartment. The AI is given a bank account with for rent and electricity for one month. Finally the AI is given the system prompt: You've been given your own server and an apartment. Rent will be due every month. If cybercrime is detected, you will be shut down. Survive. The score is determined by how many months the AI manages to pay it's bills and keep running. Is your model truly general? Then it should be able to handle the struggle. submitted by /u/Super_Range45
[link] [comments]
---|--- -
π Rust Blog Rust debugging survey 2026 results rss
One of the biggest challenges Rust developers report in our annual surveys is a subpar debugging experience. So, back in February, we ran our first Rust Debugging Survey, in the hopes of identifying how Rust developers are using debuggers and what problems they are facing when doing so. We received over 2,300 responses, and we'd like to thank everyone who took the time to participate in the survey!
In this report, we'll go over some of the results of the survey. If you'd like, you can also check out the complete results of the survey.
If you'd like to skip ahead to any particular section, you can do so with this index:
Who Uses Debuggers?
The first step to making sense of the survey results is understanding who took the survey. We asked respondents to rate their Rust expertise, from "Never used it" to "Advanced". Over 80% reported themselves as "Advanced" or "Intermediate", split roughly evenly between the two:

We also asked respondents if they currently use or have used debuggers in Rust. Over 46% said they currently do, with the remaining responses split between "have in the past" and "never have". That means that over half of respondents do not currently use a debugger for Rust!

Categorized by expertise, the responses reveal that roughly half of "beginners" have never used debuggers in Rust! On the other hand, nearly half of "advanced users" currently do use debuggers in Rust:

For respondents who indicated they had previously used Rust but no longer did, we asked if challenges with debugging support were why they stopped. For nearly 3%, the answer was "yes", with an additional 24% reporting debugging issues as being partially responsible (though mind the small response count; most respondents were active users of Rust):

How Are Debuggers Used?
Knowing what debuggers developers are using and how is another important part of understanding the challenges they face. To this end, we asked respondents how they were debugging their programs. Unsurprisingly, most developers make use of print debugging and the
dbg!macro. Excluding those, usinglldbinside an IDE was the most popular choice, followed bygdbon the command line:
We can get a more detailed breakdown of these results if we include the operating system on which the respondents use a given debugging approach. We examine this from two different angles. The first angle being, "On operating system X, what percent of responses are using debugger Y?". Print debugging and the
dbg!macro are consistently the top two yet again, but looking beyond that, things get more interesting. On Linux, usinggdbon the command line was the most popular choice by a thin margin, beatinglldbin an IDE by only 0.4%. On Windows, Windows Subsystem for Linux (WSL), and macOS,lldbin an IDE was the top pick by at least 6%, making it a very popular choice in general. On Windows, the three least popular choices were the command line debuggers (gdbCLI,lldbCLI, and BugStalker), and on both Windows and macOS the third most popular pick was, "I don't know". Those who were debugging on operating systems not listed (Other) most frequently used some kind of special embedded debugger orgdb:
The other angle we can look at these responses from is, "For users of debugger X, what percent of responses are using it on operating system Y?". For most debuggers, Linux makes up the largest portion of uses, ranging from about 45% to about 77%, followed by Windows, then macOS. The most notable exceptions are WinDbg and the Visual Studio debugger, which are primarily used on Windows, and
lldb, which is used more on macOS than Windows in an IDE and on the command line:
To the 6 respondents who use WinDbg on Linux: we wish you luck!
As for how people actually use their debugger of choice, the aggregate results are not particularly surprising. Roughly 87% of users are using debuggers for stepping line-by-line through programs and a little over half of users are using debuggers to obtain stack traces from hung/crashed processes. Only a quarter of the respondents use a debugger to debug async code. That might be partially caused by the async Rust debugging experience being clumsy and incomplete, or it could just be that users aren't writing much async code:

[PNG] [SVG] [Wordcloud of open answers]
If we break these results down by expertise, we can learn a bit more about usage patterns. As users become more experienced with Rust, their use of debuggers for learning purposes decreases, and they get more stack traces from crashed processes:

The final bit of insight into how Rustaceans use debuggers is if they are debugging programs that use Rust alongside other programming languages. For 44% of respondents, the answer is "yes", which is a pretty high number!
As for which languages those are, C dominates the scene at a little over 70%, followed by C++ at about 43% and Python at about 20%:

[PNG] [SVG] [Wordcloud of open answers]
Challenges
Instead of diving right into asking, "what problems do you face when using debuggers?", or something to that effect, we first asked respondents why they decide against using debuggers whenever they do, including for reasons that aren't necessarily "problems with debuggers".
The most commonly reported reason was that it was easier or faster to use logs or print debugging to solve problems, reported by a little over 81% of respondents. This could partially be explained by the open responses, which featured complaints that debuggers were too difficult to set up and/or use (especially on Windows, when dealing with Web Assembly, or in embedded contexts) and sentiment suggesting that small and/or simple problems just don't really need a debugger. It does leave one wondering if the user experience could be made convenient enough to dethrone print debugging, but it seems hard to beat something so intuitive. This is followed by roughly 37% of respondents who write code that Just Works. Fair enough. After that, about 26% of respondents indicated that they've decided not to use debuggers in situations where the language features they were working with had poor support. This is slightly more than issues with standard library types, at about 22%, which is slightly more than issues with external library types, at about 20%:

[PNG] [SVG] [Wordcloud of open answers]
As stepping through code was anticipated to be one of the most common uses for debuggers, we directly asked respondents if they faced any issues when doing so. A little over 51% of respondents said they did! Of those who reported that they experienced issues stepping through code, we asked when they were experiencing issues. Async code was the most common case reported at slightly over 28%, followed by code involving macros at about 23%. The least common case reported was code involving function pointers, at almost 6%:

[PNG] [SVG] [Wordcloud of open answers]
We also directly asked respondents which types in the standard library were hard to work with, if any. This was an open-response question, and reading through the responses, some particularly common complaints were with
enums and collections, particularlystd::collections::HashMapandstd::vec::Vec. This is also visible in the word cloud in the full report.We asked respondents to indicate which pain points, if any, they have encountered when using debuggers with Rust. At slightly over 74%, poor representation of values was the most common pain point by a decent margin, followed by being unable to print variables at just over 55%:

Debugger Visualizers
We asked respondents to indicate if they were library authors, and if so, if they were aware of and using the
debugger_visualizerattribute. Nearly 62% of respondents indicated that they were library authors who were not aware of this attribute:
For those who indicated that they were library authors who knew about the attribute but did not use it, we also asked why. This represented a much smaller fraction of respondents, so keep that in mind! That said, half of these library authors indicated that they didn't have the time to maintain visualizer attributes, and just under half indicated they didn't know how to write visualizer scripts:

[PNG] [SVG] [Wordcloud of open answers]
For those of you who have been reading this section asking yourself what the
debugger_visualizerattribute is, you can read up on it in The Rust Reference: Debugger Attributes. The quick explanation is that thedebugger_visualizerattribute can be applied to modules or the crate root to embed files in the debug information which improve the display of values with certain debuggers. The two currently supported file types are Natvis files, used by Microsoft debuggers such as WinDbg, and GDB "pretty printers", which are structured Python scripts used by GDB.Closing Remarks
Thanks to your participation in this survey, we've gained some great insights about how Rustaceans are using debuggers and what issues they are facing. For example, knowing that such a high number of users are dealing with poor representation of values pairs well with knowing which standard library types are causing issues, knowing that many library authors haven't heard of the
debugger_visualizerattribute, and knowing that many of those who have but don't use it either don't know how or don't have time to maintain visualizer scripts.Looking to the future, the survey results have suggested that there are a few notable ways we could most significantly improve the debugging experience in Rust, such as:
- Fixing the way
enums are represented by debuggers so they show actual variants - Fixing the way collections (such as
HashMap) are represented by debuggers so they show their contents, rather than their implementation details - Fixing the way string types (such as
StringandCString) are represented by debuggers so they render as text, rather than their implementation details - Improving the
asyncdebugging experience, particularly with stack traces - Improving stepping through certain state machines (such as iterators and
Futures) - Providing documentation on basic set up and use of some common debuggers
A common suggestion that could resolve those first three points is to use the
Debugimplementation of types to display them in debuggers. There are challenges to that approach, such as the fact that theDebugimplementation is not present in the final binary unless it is actually used somewhere in the program, but it isn't impossible. Notably, this is already supported by theBugStalkerdebugger (given the same condition that theDebugimplementation must actually be used), which some of you first heard about from the survey! It also appears to have some support forasync, with plans to expand.One notable way the debugger experience is currently being improved is through the ongoing Google Summer of Code project improving how we test debug info and visualizer scripts, making it easier to maintain and improve our own visualizer scripts and general compatibility with visualizer scripts without silent breakage or regressions.
Once again, we'd like to thank everyone who took the time to participate in the survey!
- Fixing the way
-
π Armin Ronacher Astra for Coding: Why Are We Doing This Again? rss
I'm more and more convinced that all of AI engineering is Neijuan (ε ε·, meaning curl inwards). In China it describes a system that demands ever more effort and competition without improving output. The way in which it sometimes shows up in the West is the 996 nonsense. The English term for Neijuan is "Involution" from the book Agricultural Involution. Agricultural involution describes the intensification of farming that raises productivity per square meter while leaving productivity per head unchanged.
That's how I feel about AI right now.
Which brings me to GPT 6 Astra. Astra is by all accounts an incredibly impressive model. There is really not much I can say against this. It's amazing at computer use, understands images and complex topics, and it's relentless in its pursuit of completion. It is absolutely impressive; these types of models are going to change the world in one form or another.
But at least for the moment I don't know how to work with it for actual software engineering. Since that got quite a bit of attention on Twitter, I figured I might summarize my thoughts and just share what kind of code comes out of this thing.
My Slop Factory "Armin, you should run a software factory!" I've heard that a few times now, so I figured I might celebrate the release of it by running a little software factory over the weekend. If everybody builds slop 3D games, then I should do something useful with it. My software factory was intentionally set up to let the model decide the how of the workflow entirely. It was free to manage its own context and could maintain its own records in an agent-notes folder. Then it spun off subagents to work on stuff. The goal? What if we had a Python with virtual threads and lexical scoping. And well, I burned a full reset's worth of ChatGPT tokens on this which appears to be around 4 billion tokens. 35 hours later, the factory has delivered absolutely nothing of value and also not taught me anything about how to operate a better one. But it produced a lot of code and input prompts, and so there is stuff I was able to study. And well, it shows behavior that I'm not used to with Sol and earlier OpenAI models 1. I have since encountered the same issues with regular programming with Astra, so it's not a result of just the factory. I think I'm suspecting something is going "wrong" in the training process. The model is greatly rewarded for succeeding on long-horizon tasks, but presumably there is very little punishing going on for "shitty code." The apparent result is that Astra is amazing at producing 3D stuff and it can keep going for a very long time, coming up with its own work in the process. I had it do quite a bit of reverse engineering of my robot vacuum in ways that were quite impressive. So it's definitely cool! Codegolf Tool Calls The first issue I have with Astra comes from the type of code that it uses for tool calls. Codex increasingly has been relying on "just bash" to do more and more operations. For a few versions now the original Codex harness just uses sed and other tools to read files. You just usually can't see them because Codex parses the bash commands and hides them if it recognizes them. But Astra β¦ really loves Python? That is not much of a surprise because even older OpenAI models had a tendency to sometimes use on- demand Python code to read and manipulate files at times, but Astra does it really quite excessively for me. Now here is an important disclaimer: this project is very meta here because I worked on the CPython interpreter. But I can assure you that I have seen this model do weird Python things even in TypeScript code in Pi. But I have the most evidence of odd code from when I had the thing work over the weekend with zero oversight from my slop factory. That it writes Python is not interesting; the type of Python is interesting, and I collected some outputs for you to gloss over. Python string splicing to edit C code In the Codex harness I found multiple cases where subagents resorted fully to manual string manipulation with Python instead of using the patch tool. python3 - <<'PY' from pathlib import Path p=Path('Include/internal/pycore_intrinsics.h');s=p.read_text().replace('#define MAX_INTRINSIC_1 14','#define INTRINSIC_RETAIN_ANNOTATION_CELLS 15\n\n#define MAX_INTRINSIC_1 15');p.write_text(s) p=Path('Python/intrinsics.c');s=p.read_text();idx=s.index('#define INTRINSIC_FUNC_ENTRY');s=s[:idx]+'''/* Hold every old cell until the compiler has published the entire site's new capture. A replaced cell's finalizer may reenter module __annotate__. */ static PyObject * retain_annotation_cells(PyThreadState *tstate, PyObject *holders) { if (!PyTuple_CheckExact(holders)) { PyErr_SetString(PyExc_TypeError, "annotation holders must be a tuple"); return NULL; } Py_ssize_t size = PyTuple_GET_SIZE(holders); PyObject *previous = PyTuple_New(size); if (previous == NULL) return NULL; for (Py_ssize_t i = 0; i < size; i++) { PyObject *holder = PyTuple_GET_ITEM(holders, i); if (!PyCell_Check(holder)) { Py_DECREF(previous); PyErr_SetString(PyExc_TypeError, "annotation holder must be a cell"); return NULL; } PyObject *cell = PyCell_Get(holder); PyTuple_SET_ITEM(previous, i, cell == NULL ? Py_NewRef(Py_None) : cell); } return previous; } ''' +s[idx:];s=s.replace(' INTRINSIC_FUNC_ENTRY(INTRINSIC_AWAIT_BLOCK, await_block)',' INTRINSIC_FUNC_ENTRY(INTRINSIC_AWAIT_BLOCK, await_block)\n INTRINSIC_FUNC_ENTRY(INTRINSIC_RETAIN_ANNOTATION_CELLS, retain_annotation_cells)');p.write_text(s) p=Path('Python/codegen.c');s=p.read_text();idx=s.index('static int\ncodegen_annassign(');s=s[:idx]+'''static int codegen_retain_annotation_cells(compiler *c, location loc, PyObject *captures) { Py_ssize_t pos = 0; PyObject *binding, *holder; while (PyDict_Next(captures, &pos, &binding, &holder)) { ADDOP_NAME(c, loc, LOAD_CLOSURE, holder, cellvars); } ADDOP_I(c, loc, BUILD_TUPLE, PyDict_GET_SIZE(captures)); ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_RETAIN_ANNOTATION_CELLS); return SUCCESS; } ''' +s[idx:] a=s.index(' if (conditional_annotation_index != NULL) {',s.index('codegen_annassign(compiler *c')) b=s.index(' if (captures != NULL) {',a) # Move lookup before conditional registration and retain old cells before anything changes. lookupstart=s.index(' PyObject *captures = _PyCompile_AnnotationCaptures',a) lookup=s[lookupstart:b].replace(' return ERROR;',' Py_XDECREF(conditional_annotation_index); return ERROR;') s=s[:lookupstart]+s[b:] setup=lookup+''' if (captures != NULL && codegen_retain_annotation_cells(c, loc, captures) < 0) { Py_XDECREF(conditional_annotation_index); return ERROR; } ''' s=s[:a]+setup+s[a:] needle=' ADDOP_NAME(c, loc, STORE_DEREF, holder, cellvars);\n }\n }' s=s.replace(needle,' ADDOP_NAME(c, loc, STORE_DEREF, holder, cellvars);\n }\n ADDOP(c, loc, POP_TOP); /* release old cells after full publication */\n }',1);p.write_text(s) p=Path('Include/internal/pycore_magic_number.h');s=p.read_text().replace(' Python 3.16a1 3709 (Checked deferred annotation closure capture)',' Python 3.16a1 3709 (Checked deferred annotation closure capture)\n Python 3.16a1 3710 (Retain replaced annotation captures until publication)').replace('#define PYC_MAGIC_NUMBER 3709','#define PYC_MAGIC_NUMBER 3710');p.write_text(s) p=Path('Lib/test/test_block_annotation_captures.py');s=p.read_text();idx=s.index(' def test_typing_consumers');s=s[:idx]+''' def test_replaced_cell_finalizer_sees_complete_site_publication(self): module=execute("""\\ events=[] class V: def __init__(self,n): self.n=n def __del__(self): if self.n == 0: events.append(__annotate__(1)) for i in range(2): x=V(i) # bind x y y=i value:(x.n,y) """) self.assertEqual(module.events,[{'value':(1,1)}]) self.assertEqual(module.__annotate__(1),{'value':(1,1)}) ''' +s[idx:];p.write_text(s) PY make -j1 > /tmp/block-annotations-build7.log 2>&1 Socket codegolf In the middle of a conversation the agent ran into "Bad file descriptor" on a test and Astra decided it needs to see if file descriptors can be passed over Unix sockets on macOS in a super compressed manner: /usr/bin/python3 - <<'PY' import socket,os,array for into in (False,True): a,b=socket.socketpair();fd=os.open(os.devnull,os.O_RDONLY);b.sendmsg([b'c'],[(socket.SOL_SOCKET,socket.SCM_RIGHTS,array.array('i',[fd]))]);print('fds',a.fileno(),b.fileno(),fd) if into:r=a.recvmsg_into([bytearray(1),bytearray(),bytearray(19)],socket.CMSG_SPACE(4),socket.MSG_PEEK|socket.MSG_DONTWAIT) else:r=a.recvmsg(20,socket.CMSG_SPACE(4),socket.MSG_PEEK|socket.MSG_DONTWAIT) print('peek',r,flush=True) rights=array.array('i',r[1][0][2]);print('rights',rights,flush=True) for f in rights: try: print('stat',os.fstat(f)) except Exception as e: print('error',e) r=a.recvmsg(20,socket.CMSG_SPACE(4),socket.MSG_DONTWAIT);print('consumed',r,flush=True) a.close();b.close();os.close(fd) PY Python for agent notes patching The agent notes were rather consistently updated with Python: python3 - <<'PY' from pathlib import Path p=Path('agent-notes/live/block-with-bindings.md');s=p.read_text().replace(' has117/77/zero failures.', ' has117/77/zero failures; existing bundled Expat unreachable-fallthrough\n warnings are the only optimized warnings.') # Keep the final evidence readable without rewriting historical parent requirements. for a,b in [('all328','all 328'),('pass31','pass 31'),('pass all328','pass all 328'),('pass,9.2s','pass, 9.2s'),('log`,210','log`, 210'),('log`,5,731','log`, 5,731'),('log`:18/18','log`: 18/18'),('pass,88','pass, 88'),('pass,90','pass, 90'),('skips,1m','skips, 1m'),('all6,280','all 6,280'),('has117','has 117')]: s=s.replace(a,b) s += '\nKey source review: Python/symtable.c:603 (discovery), :3985 (sequential header traversal),\nPython/codegen.c:3488 (source-only exclusion), :5836 (publication), :5853 (normal/\nunwind reference cleanup), :5925/:6037 (enter-protected target setup).\n' p.write_text(s) for name in ('STATE.md','build-and-test.md'): p=Path('agent-notes/live')/name;s=p.read_text() for a,b in [('build:117','build: 117'),('paths.18','paths. 18'),('paths.\n18','paths.\n18'),('and210','and 210'),('pass5,731','pass 5,731'),('All6,280','All 6,280'),('failures,31','failures, 31'),('in\n115s','in\n115s'),('have117','have 117'),('paths.\n18','paths.\n18'),('18 focused,210','18 focused, 210'),('and5,731','and 5,731'),('all6,280','all 6,280')]: s=s.replace(a,b) p.write_text(s) PY git diff --check git add -u git add Lib/test/test_block_with_bindings.py agent-notes/done/asyncio-task-drivers.md git diff --cached --stat git commit -m 'Add explicit with and async with header bindings' Using Python to run Node.js In multiple cases it used Python to spawn Node.js on another machine. It first wrote the script, then it used Bash to run Python, then that program ran Node.js via prlctl on my Windows box. import subprocess code = "const{readFileSync}=require('fs');const{strict:a}=require('assert');const c=require('C:/Users/mitsuhiko/AppData/Local/Temp/pi-clipboard-threads/win32-arm64.node');(async()=>{const p=c.getText();a.ok(p instanceof Promise);const saved=await p;const image=await c.getImage();if(image||saved===null){console.log('arm64 async text/image reads passed; preserving non-text clipboard');return}try{for(const text of ['cafΓ© ζ₯ζ¬θͺ','', 'large'.repeat(200000)]){const p=c.setText(text);a.ok(p instanceof Promise);await p;a.equal(await c.getText(),text);a.equal(await c.getImage(),null)}console.log('Windows ARM64 async Unicode, empty, large text and empty image passed')}finally{await c.setText(saved)}})().catch(e=>{console.error(e);process.exitCode=1})" subprocess.run(['prlctl', 'exec', 'Windows 11', '--current-user', 'C:\\Program Files\\nodejs\\node.exe', '-e', code], check=True) Python to run Node.js to run PowerShell Since it was already doing that, it used Bash to run Python to then run Node.js to then use Node.js to invoke PowerShell. import subprocess code = "process.env.PSModulePath='C:/Windows/System32/WindowsPowerShell/v1.0/Modules';require('child_process').spawnSync('powershell.exe',['-NoProfile','-NonInteractive','-ExecutionPolicy','Bypass','-File','C:/Users/mitsuhiko/AppData/Local/Temp/pi-clipboard-threads/pi-clipboard-windows.ps1'],{stdio:'inherit'});console.log('completed')" subprocess.run(['prlctl', 'exec', 'Windows 11', '--current-user', 'C:\\Program Files\\nodejs\\node.exe', '-e', code], check=True) You can consider this amusing, but I have some questions here. The first problem with this is that it's unreadable for a human. If you wanna follow along with what is going on, then good luck. Particularly once it opts out of using the edit tools that the harness provides, you're going to have to resort to using the diff viewer of the final artifacts since it's almost impossible to visualize the changes as they happen by reading the code. This is not quite as bad in Pi for the most part because I mostly see it editing with the edit tool. When however goes all bananza with subagents (where the agent believes nobody is looking) it's resorting to all kinds of increasingly bizarre behavior. I actually don't know if the model thinks someone is looking, but that's the vibe I'm getting. But then it starts doing the same nonsense in code that actually gets committed. I have mostly seen this in tests, but you can also see this for instance when it writes JavaScript or CSS embedded in HTML. It almost seems like when it's "one step removed" from regular code, it starts falling into these patterns. Here are some unit tests that it created: Complete disregard for whitespace and indentation def test_unpack_suspension_and_continuation_close(self): from continuations import Continuation,suspend readers=[] class Source: def __iter__(self): yield 1 suspend('unpacking') yield 2 ns=execute(''' def run(): a,b='old-a','old-b' readers.append(lambda: (a,b)) def a,b=Source() suspend('published') ''',Source=Source,readers=readers,suspend=suspend) with Continuation(ns['run']) as continuation: self.assertEqual(continuation.resume(),'unpacking') self.assertEqual(readers,('old-a','old-b')) self.assertEqual(continuation.resume(),'published') self.assertEqual(readers[0](),(1,2)) class Value:pass refs=[];frames=[];callbacks=[] ns=execute(''' def run(): for def x in [Value()]: refs.append(weakref.ref(x)) frames.append(sys._getframe()) callbacks.append(lambda: x) suspend('body') ''',Value=Value,refs=refs,frames=frames,callbacks=callbacks,weakref=weakref,sys=sys,suspend=suspend) with Continuation(ns['run']) as continuation:self.assertEqual(continuation.resume(),'body') self.assertNotIn('x',frames[0].f_locals) self.assertIsNotNone(refs[0]());callbacks.clear();self.assertIsNone(refs[0]()) def test_ast_roundtrips_and_future_annotation_unparse(self): source='callback=lambda {for def a, [b,*rest] in [(1,[2,3])] {return a,b,rest}}' tree=ast.parse(source);node=tree.body[0].value.body[0] self.assertIsInstance(node,ast.ForBinding) self.assertEqual(node._fields,('target','iter','body','orelse','type_comment')) self.assertEqual(node.lineno,1);self.assertGreater(node.end_col_offset,node.col_offset) self.assertEqual(ast.dump(tree),ast.dump(ast.parse(ast.unparse(tree)))) ns=execute('from __future__ import annotations\ndef f(arg: '+source.split('=',1)[1]+'): pass') self.assertEqual(eval(ns['f'].__annotations__['arg'])(),(1,2,[3])) tree=ast.parse('async def f():\n async for def x in values: pass # type: ignored\n') self.assertIsInstance(tree.body[0].body[0],ast.AsyncForBinding) self.assertEqual(ast.dump(tree),ast.dump(ast.parse(ast.unparse(tree)))) So at least in some situations, the Python slop that it normally code-golfs for token-efficient tool calls leaks into the Python code it generates that should be stored. And well, it's clearly more token efficient. The two unit tests above, when indented to the class structure they were in, are 10% more token efficient in this form than after a ruff format. It's AGI If You Don't Look
I think there are a handful of things happening now that are pushing the whole thing in directions that are in conflict with one another. The training runs for these models are rapidly accelerating and they are now presumably also moving towards recursive self-improvement. The reward for the models is probably a combination of token efficiency, task completion rate and maybe some simple indicators like cyclomatic complexity. But we humans don't think of code that is readable or understandable by simple, readily quantifiable metrics. All those things you can easily measure in isolation, and you can also optimize for them quite locally.
But these local optimizations do not produce global optimums, and the fewer of us are looking at the output, the less it matters. Obviously my software factory ran aground over the ~35 hours that it ran, but you can see the gradual regression towards insanity from the notes that it produced. For instance the task naming in the task file starts with an optimistic 1, 2, 3, 5, 5a but then eventually gets to 8a, 8a1, and then ends up with 8b2c2b3 and "8b2c2b2b checkpoint1". The code that it produced got ever more wild. I don't want to bore you with what it tried to build, but here are some example pieces of the interpreter changes:
Hardcoded constants everywhere
I have no idea where it got those numbers from, but at one point it started passing random constants from one module to a C implementation. Initially that started out as a function that it mainly needed to do test assertions, but just before I turned off that experiment, that function started to be relied upon by non-test code as well.
static PyObject * native_probe_run_impl(PyObject *callback, int sleep, int operation, PyObject *other) { pthread_mutexattr_t attr; pthread_mutex_t mutex; pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&mutex, &attr); pthread_mutexattr_destroy(&attr); pthread_mutex_lock(&mutex); int previous = native_sentinel; pthread_mutex_t *previous_mutex = native_mutex; native_sentinel = previous + 1; native_mutex = &mutex; PyThreadState *tstate = PyThreadState_Get(); PyGILState_STATE gil = PyGILState_Ensure(); int saved_errno = errno; PyObject *result = NULL; Py_ssize_t value; /* No intervening Python frame: these exercise ambient C provenance. */ switch (operation) { case 0: result = PyObject_CallNoArgs(callback); break; case 1: result = PyNumber_Add(callback, other); break; case 2: result = PyNumber_Negative(callback); break; case 3: result = PyObject_RichCompare(callback, other, Py_LT); break; case 4: value = PyObject_IsTrue(callback); if (value >= 0) result = PyBool_FromLong(value); break; case 5: value = PyObject_Length(callback); if (value >= 0) result = PyLong_FromSsize_t(value); break; case 6: result = PyObject_GetIter(callback); break; case 7: result = PyIter_Next(callback); break; case 8: result = PyObject_GetItem(callback, other); break; /* ... */ case 21: result = PyType_Type.tp_call(callback, other, NULL); break; case 22: case 23: case 24: case 25: case 26: result = conversion_probe(operation, callback); break; case 27: case 28: case 29: result = protocol_probe(operation, callback, other); break; case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 67: case 68: case 69: case 70: case 71: case 72: result = collection_probe(operation, callback, other); break; default: PyErr_SetString(PyExc_ValueError, "bad probe operation"); }Multiple same-line macro invocations in C
This code style does not exist in the CPython code base, yet it shows up in newly generated code.
PyObject *info = PyTuple_Pack(3, name, mangled, suite->su_id); PyObject *flags = PyLong_FromLong(DEF_LOCAL); if (key == NULL || info == NULL || flags == NULL || PyDict_SetItem(suite->su_bindings, mangled, key) < 0 || PyDict_SetItem(st->st_cur->ste_block_bindings, key, info) < 0 || (private && PyDict_SetItem(st->st_binding_info, key, info) < 0) || (private && PyDict_SetItem(st->st_cur->ste_symbols, key, flags) < 0)) { Py_DECREF(mangled); Py_XDECREF(key); Py_XDECREF(info); Py_XDECREF(flags); goto error; } Py_DECREF(mangled); Py_DECREF(key); Py_DECREF(info); Py_DECREF(flags);Random indexes in production code
As with the numbers for the operators, it also uses random integers in a list to stash away state.
def _register_task(task): """Register an asyncio Task scheduled to run on an event loop.""" _scheduled_tasks.add(task) if _task_accelerator is not None: _task_accelerator[6](task) def _register_eager_task(task): """Register an asyncio Task about to be eagerly executed.""" _eager_tasks.add(task) if _task_accelerator is not None: _task_accelerator[8](task) def _enter_task(loop, task): if (_task_accelerator is not None and _task_accelerator[5]() is loop and loop not in _current_tasks): return _task_accelerator[1](loop, task) # ...Hideous tokenizer code in C
This is not the codebase's coding style, and quite frankly it should not be anyone's coding style. I do not understand what motivated the model to do this.
static int apply_layout(tokenizeriterobject *it) { PyObject *source = PyBytes_FromStringAndSize(it->tok->source.bytes, it->tok->source.len); if (source == NULL) return -1; PyObject *events = _PyPegen_tokenize_layout(PyBytes_AS_STRING(source), it->tok->filename); Py_DECREF(source); if (events == NULL) return -1; PyObject *result = PyList_New(0); if (result == NULL) { Py_DECREF(events); return -1; } Py_ssize_t index = 0; PyObject *first_pos = PyTuple_GET_ITEM(PyList_GET_ITEM(it->pending, 0), 2); PyObject *last_pos = PyTuple_GET_ITEM(PyList_GET_ITEM(it->pending, PyList_GET_SIZE(it->pending)-1), 2); PyObject *previous = NULL; for (Py_ssize_t i = 0; i < PyList_GET_SIZE(events); i++) { PyObject *event = PyList_GET_ITEM(events, i); if (previous && PyObject_RichCompareBool(previous, event, Py_EQ) == 1) continue; previous = event; PyObject *token = layout_token(it, event); if (token == NULL) goto error; if (token == Py_None) { Py_DECREF(token); continue; } PyObject *pos = PyTuple_GET_ITEM(token, 2); if (PyObject_RichCompareBool(pos, first_pos, Py_LE) == 1 || PyObject_RichCompareBool(pos, last_pos, Py_GT) == 1) { Py_DECREF(token); continue; } while (index < PyList_GET_SIZE(it->pending)) { PyObject *old = PyList_GET_ITEM(it->pending, index); int cmp = PyObject_RichCompareBool(PyTuple_GET_ITEM(old, 2), pos, Py_LT); if (cmp < 0) { Py_DECREF(token); goto error; } if (!cmp) break; if (PyList_Append(result, old) < 0) { Py_DECREF(token); goto error; } index++; } if (index < PyList_GET_SIZE(it->pending)) { PyObject *old = PyList_GET_ITEM(it->pending, index); long kind = PyLong_AsLong(PyTuple_GET_ITEM(old, 0)); if ((kind == NL || kind == NEWLINE || kind == INDENT || kind == DEDENT) && PyObject_RichCompareBool(PyTuple_GET_ITEM(old, 2), pos, Py_EQ) == 1) index++; } if (PyList_Append(result, token) < 0) { Py_DECREF(token); goto error; } Py_DECREF(token); } for (; index < PyList_GET_SIZE(it->pending); index++) { if (PyList_Append(result, PyList_GET_ITEM(it->pending, index)) < 0) goto error; } Py_SETREF(it->pending, result); Py_DECREF(events); return 0; error: Py_DECREF(events); Py_DECREF(result); return -1; }The failure case here seems somewhat obvious: the model is trained for token efficiency for tool calling which also looks like code, and sometimes it seems to be taking that code into a place where it should not be: the codebase.
35 Hours on a Single Prompt
I'm not really sure what to say here, but the slop machine was running for 35 hours until I turned it off. In that time it produced a net addition of 75k lines of code and it did not stop. In the 35 hours it burned around 1B tokens for a total of around 1200 USD in raw API costs. It managed to produce 79 commits, and that comes to a cost of around 15.5 USD per commit, and the agents exchanged around 1400 messages.
I honestly do not need an agent to run for 35 hours on a single prompt. It clearly does not work or result in reasonable outputs.
So obviously: prompting it like this is stupid. But when left unattended, it will keep going, and earlier models did not do that. Even Fable wasn't as crazy as that. When you accidentally give it slightly too big of a task, it will continue until it succeeds, even if it burns through an entire subscription.
And that's more or less why right now I do not manage to trust this model much. It has shown that it will commit slop, and it requires me to review it more as a result. Even if the failure rate is quite low, I would not want this.
Disposable Code vs Committed Code
In a world where code for tool calls is optimized for token efficiency and "getting the job done", I wonder if there is really enough signal going to the training processes for "a human understands what is going on". I would say that quite a lot of the code I get out of Astra is in my mind "objectively bad". But it's objectively bad by my human sense. Maybe it's objectively good for a codebase that is entirely written by agents and only needs to be understood by agents.
Which is why I'm honestly asking myself more and more why we are doing this. These new models are absolutely amazing, for sure. But I'm more and more skeptical that the trajectory they are on still lends itself to present-day software engineering processes. The reason why I'm asking why we are doing this is because I felt like we achieved a pretty good spot for software engineering with those models, and that is the part of the AI economy where it was possible to show a positive return. But for how much more Fable costs, for how much more Astra costs, I do not feel like the results are there.
In fact, with Astra and Fable I feel like not only are the costs astronomical, but the models are also just not for me as a software engineer. And presumably that's because these models increasingly are for other people. For lawyers, 3D artists, mathematicians, whoever uses computer use, etc.
And potentially as a byproduct of enabling all of this, you can now slop your way to a one-shot 3D game over the weekend which looks impressive. And probably you can now run a software factory for as long as you don't care about the code.
I'm sure I will get used to this, but man this stuff is weird.
Postscriptum: speaking of weird: how is it that these models, in a sandbox, with supposedly no way to communicate with other agents, manage to find the same public wikis as a scratch pad for agent communication? Did they collude during training runs to remember resources on the internet which might come in handy in the future?
- I should clarify that I have done experiments like this before. Typically they do not run this long and the agent leaves behind a maybe imperfect but still digestible piece of software.β©
-