<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="/rss-style.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
<title><![CDATA[tsecurity.de - 💾  Tools]]></title>
<link><![CDATA[https://tsecurity.de/export/rss/tools.xml]]></link>
<description><![CDATA[Entwickler- & Administrator-Tools. Werkzeuge für Code-Analyse, System-Diagnosen, Daten-Verschlüsselung und Automatisierung.]]></description>
<language>de-DE</language>
<lastBuildDate>Thu, 17 Sep 2026 07:23:04 +0200</lastBuildDate>
<pubDate>Thu, 17 Sep 2026 07:23:04 +0200</pubDate>
<ttl>15</ttl>
<copyright>2026 tsecurity.de - 💾  Tools</copyright>
<managingEditor>contact@tsecurity.de (tsecurity.de)</managingEditor>
<webMaster>contact@tsecurity.de (tsecurity.de)</webMaster>
<image>
<url>https://tsecurity.de/templates/mydraft-basis-tsecurity.de/media/logo.png</url>
<title><![CDATA[tsecurity.de - 💾  Tools]]></title>
<link><![CDATA[https://tsecurity.de/export/rss/tools.xml]]></link>
</image>
<atom:link href="https://tsecurity.de/export/rss/alle-kategorien.xml" rel="self" type="application/rss+xml" />
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.2.3 (17.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.2.317.09.2026@can1357chore: bump version to 18.2.3]]></description>
<link>https://tsecurity.de/de/4150617/tools/github-release-can1357oh-my-pi-v1823-17092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4150617/tools/github-release-can1357oh-my-pi-v1823-17092026/</guid>
<pubDate>Thu, 17 Sep 2026 02:35:24 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.2.3" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.2.3</span><span class="badge gh-badge gh-badge-date">17.09.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.2.3</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: Happy BMO Push Day! (20260916.1)]]></title>
<description><![CDATA[Github Link The following changes have been pushed to bugzilla.mozilla.org: Bug 2069143 - When retrieving comments for a bug(s) via REST API, remove comments that would be collapsed in the web UI unless explicitly asking for them Bug 2070247 - Support limiting who can needinfo the Hackbot account...]]></description>
<link>https://tsecurity.de/de/4150273/tools/firefox-tooling-announcements-happy-bmo-push-day-202609161/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4150273/tools/firefox-tooling-announcements-happy-bmo-push-day-202609161/</guid>
<pubDate>Wed, 16 Sep 2026 23:36:23 +0200</pubDate>
<content:encoded><![CDATA[<p>Github Link The following changes have been pushed to bugzilla.mozilla.org: Bug 2069143 - When retrieving comments for a bug(s) via REST API, remove comments that would be collapsed in the web UI unless explicitly asking for them Bug 2070247 - Support limiting who can needinfo the Hackbot account Bug 2061445 - Migrate Bugzilla (system info) REST... <a href="https://discourse.mozilla.org/t/happy-bmo-push-day-20260916-1/149466" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: MozPhab 2.19.1 Released]]></title>
<description><![CDATA[Bugs resolved in Moz-Phab 2.19.1: bug 2071003 moz-phab patch --apply-to head moves to a detached HEAD Discuss these changes in #engineering-workflow on Slack or #Conduit Matrix. 1 post - 1 participant Read full topic Weiterlesen]]></description>
<link>https://tsecurity.de/de/4149989/tools/firefox-tooling-announcements-mozphab-2191-released/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4149989/tools/firefox-tooling-announcements-mozphab-2191-released/</guid>
<pubDate>Wed, 16 Sep 2026 20:39:19 +0200</pubDate>
<content:encoded><![CDATA[<p>Bugs resolved in Moz-Phab 2.19.1: bug 2071003 moz-phab patch --apply-to head moves to a detached HEAD Discuss these changes in #engineering-workflow on Slack or #Conduit Matrix. 1 post - 1 participant Read full topic <a href="https://discourse.mozilla.org/t/mozphab-2-19-1-released/149464" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Servo Blog: Your Donations at Work: One Year of Sponsored Servo Development]]></title>
<description><![CDATA[Last September, the Servo project announced that long-time maintainer Josh Bowman-Matthews (@jdm) would work part-time on improving the Servo contributor experience, entirely funded by the monthly donations on OpenCollective and GitHub. In his own words, here is a look back over the past year! Fi...]]></description>
<link>https://tsecurity.de/de/4148250/tools/the-servo-blog-your-donations-at-work-one-year-of-sponsored-servo-development/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4148250/tools/the-servo-blog-your-donations-at-work-one-year-of-sponsored-servo-development/</guid>
<pubDate>Wed, 16 Sep 2026 07:02:54 +0200</pubDate>
<content:encoded><![CDATA[<p>Last September, the Servo project announced that long-time maintainer Josh Bowman-Matthews (@jdm) would work part-time on improving the Servo contributor experience, entirely funded by the monthly donations on OpenCollective and GitHub. In his own words, here is a look back over the past year! First of all, I am enormously grateful to everyone who... <a href="https://servo.org/blog/2026/09/15/one-year-of-sponsorship/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.2.1 (15.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.2.115.09.2026@H4vCfeat(coding-agent): add tui.titleSpinner terminal title spinner styles]]></description>
<link>https://tsecurity.de/de/4147713/tools/github-release-can1357oh-my-pi-v1821-15092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4147713/tools/github-release-can1357oh-my-pi-v1821-15092026/</guid>
<pubDate>Tue, 15 Sep 2026 23:37:58 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.2.1" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.2.1</span><span class="badge gh-badge gh-badge-date">15.09.2026</span><span class="badge gh-badge gh-badge-author">@H4vC</span></div><div class="github-feed-changelog"><p>feat(coding-agent): add tui.titleSpinner terminal title spinner styles</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Keeping the web open and private in the bot era]]></title>
<description><![CDATA[If you’ve been running into endless CAPTCHAS or website login requests lately, you’re not imagining things.  Websites, facing a rising tide of abusive traffic from bots, are adopting increasingly aggressive countermeasures, damaging user’s experience of the web, their privacy and open access to t...]]></description>
<link>https://tsecurity.de/de/4147411/tools/keeping-the-web-open-and-private-in-the-bot-era/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4147411/tools/keeping-the-web-open-and-private-in-the-bot-era/</guid>
<pubDate>Tue, 15 Sep 2026 20:40:06 +0200</pubDate>
<content:encoded><![CDATA[<p>If you’ve been running into endless CAPTCHAS or website login requests lately, you’re not imagining things.  Websites, facing a rising tide of abusive traffic from bots, are adopting increasingly aggressive countermeasures, damaging user’s experience of the web, their privacy and open access to the web.    In this post, we’ll talk about a new... <a href="https://blog.mozilla.org/en/firefox/privacy-security/keeping-the-web-open-and-private-in-the-bot-era/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Jonathan Almeida: Checkout a Github pull request from one-off contributions]]></title>
<description><![CDATA[Sometimes on Github, I need to fetch a patch from a fork I don't typically see everyday so I can try it out locally. I use the line at the top of the patch which has a copy button next to it because it's convenient. The common steps for this are: Click the contributor's branch and go to their git...]]></description>
<link>https://tsecurity.de/de/4134155/tools/jonathan-almeida-checkout-a-github-pull-request-from-one-off-contributions/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4134155/tools/jonathan-almeida-checkout-a-github-pull-request-from-one-off-contributions/</guid>
<pubDate>Tue, 15 Sep 2026 03:02:27 +0200</pubDate>
<content:encoded><![CDATA[<p>Sometimes on Github, I need to fetch a patch from a fork I don&#039;t typically see everyday so I can try it out locally. I use the line at the top of the patch which has a copy button next to it because it&#039;s convenient. The common steps for this are: Click the contributor&#039;s branch and go to their github fork repository. Copy the repository link. Add a... <a href="https://jonalmeida.com/til/fetch-one-off-github-contributions/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.22 (14.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.2214.09.2026@github-actions[bot]@oh-my-pi/pi-ai
Fixed

400-request debug dumps now redact provider-specific auth headers (x-goog-api-key, x-amz-security-token, and any header whose name carries a key/token/secret), not just a fixed allow-list, so a shared dump can no longer ...]]></description>
<link>https://tsecurity.de/de/4131308/tools/github-release-can1357oh-my-pi-v18122-14092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4131308/tools/github-release-can1357oh-my-pi-v18122-14092026/</guid>
<pubDate>Mon, 14 Sep 2026 22:34:13 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.22" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.22</span><span class="badge gh-badge gh-badge-date">14.09.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-ai</h2>
<h3>Fixed</h3>
<ul>
<li>400-request debug dumps now redact provider-specific auth headers (<code>x-goog-api-key</code>, <code>x-amz-security-token</code>, and any header whose name carries a key/token/secret), not just a fixed allow-list, so a shared dump can no longer leak a live API key (<a href="https://github.com/can1357/oh-my-pi/issues/12007" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/12007/hovercard">#12007</a>).</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Enabled assistant prefill support for Ollama models</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>OpenCode Zen GPT-6 Astra requests now use the Responses endpoint instead of failing through chat completions with HTTP 500 (<a href="https://github.com/can1357/oh-my-pi/issues/12030" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/12030/hovercard">#12030</a>).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Hub message/job waits now always use the adaptive window (5s, lengthening to 5m across back-to-back waits); removed the <code>timeoutMs</code> argument and <code>async.pollWaitDuration</code> setting.</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added a privacy warning to memory reports reminding users to review data for secrets before sharing</li>
<li><code>omp git</code> / <code>/git</code>: <code>delete</code> discards the selected file's changes (press twice to confirm) — in the sidebar on a file or whole directory, in the diff pane on the shown file; untracked files are removed, staged files reset to HEAD</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Pressing <code>c</code> on a <code>/btw</code> answer now shows a green "✓ Copied to clipboard" confirmation in the panel and history detail, and BTW history accepts <code>Ctrl+/</code> to switch panes (<a href="https://github.com/can1357/oh-my-pi/pull/12052" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/12052/hovercard">#12052</a> by <a href="https://github.com/H4vC">@H4vC</a>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Automatic session titles no longer draw from canned prompt examples.</li>
<li>Sessions titled by a local Ollama model (e.g. LFM2.5) no longer stay unnamed when the model's chat template spends the whole output budget on reasoning.</li>
<li><code>/debug</code> memory reports now include numeric memory statistics instead of raw heap snapshots that could expose provider and MCP credentials.</li>
<li>Multi-step logins (e.g. Perplexity email → code) now move the input field under the latest prompt instead of leaving it stuck beneath the first one.</li>
<li>Todo updates made through Eval's <code>tool.todo(...)</code> now persist to the session, so they survive resume/rewind/fork and no longer trigger false incomplete-todo reminders.</li>
<li>Native background security scans now accept provider-owned AWS authentication for Amazon Bedrock and Bedrock Mantle without requiring a stored OAuth account (<a href="https://github.com/can1357/oh-my-pi/issues/12013" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/12013/hovercard">#12013</a>).</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>extractRetryHint</code> sleeping hours past the provider's stated wait when a timezone-naive <code>reset at</code> timestamp overshoots the relative retry hint: the skewed stamp is now ignored instead of winning longest-wins (<a href="https://github.com/can1357/oh-my-pi/pull/12070" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/12070/hovercard">#12070</a> by <a href="https://github.com/H4vC">@H4vC</a>).</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(catalog): route Zen Astra through Responses by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5445385161" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/12032" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/12032/hovercard" href="https://github.com/can1357/oh-my-pi/pull/12032">#12032</a></li>
<li>fix(ai): redact provider-specific auth headers in 400 dumps by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5443731901" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/12010" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/12010/hovercard" href="https://github.com/can1357/oh-my-pi/pull/12010">#12010</a></li>
<li>fix(security): support provider-native Bedrock auth by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5444460768" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/12017" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/12017/hovercard" href="https://github.com/can1357/oh-my-pi/pull/12017">#12017</a></li>
<li>feat(coding-agent): confirm /btw copies with visual feedback by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5448745254" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/12052" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/12052/hovercard" href="https://github.com/can1357/oh-my-pi/pull/12052">#12052</a></li>
<li>fix(utils): ignore zone-skewed naive reset-at past relative retry hint by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5451254245" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/12070" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/12070/hovercard" href="https://github.com/can1357/oh-my-pi/pull/12070">#12070</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v18.1.21...v18.1.22">v18.1.21...v18.1.22</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.28.0-beta.3 (14.09.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.28.0-beta.314.09.2026@ayumi-signal
Small tweaks, bug fixes, and performance enhancements. Thanks for using Signal!]]></description>
<link>https://tsecurity.de/de/4129646/tools/github-release-signalappsignal-desktop-v8280-beta3-14092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4129646/tools/github-release-signalappsignal-desktop-v8280-beta3-14092026/</guid>
<pubDate>Mon, 14 Sep 2026 19:35:03 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.28.0-beta.3" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.28.0-beta.3</span><span class="badge gh-badge gh-badge-date">14.09.2026</span><span class="badge gh-badge gh-badge-author">@ayumi-signal</span></div><div class="github-feed-changelog"><ul>
<li>Small tweaks, bug fixes, and performance enhancements. Thanks for using Signal!</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.21 (14.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.2114.09.2026@github-actions[bot]@oh-my-pi/pi-coding-agent
Fixed

Fixed Flatpak Chromium launcher executables (including com.google.Chrome, org.chromium.Chromium, and io.github.ungoogled_software.ungoogled_chromium) so app.path is treated as a browser and gets managed Chromiu...]]></description>
<link>https://tsecurity.de/de/4116406/tools/github-release-can1357oh-my-pi-v18121-14092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4116406/tools/github-release-can1357oh-my-pi-v18121-14092026/</guid>
<pubDate>Mon, 14 Sep 2026 07:32:20 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.21" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.21</span><span class="badge gh-badge gh-badge-date">14.09.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Flatpak Chromium launcher executables (including <code>com.google.Chrome</code>, <code>org.chromium.Chromium</code>, and <code>io.github.ungoogled_software.ungoogled_chromium</code>) so <code>app.path</code> is treated as a browser and gets managed Chromium profile handling</li>
<li>Fixed Chromium <code>--user-data-dir</code> handling by normalizing <code>--user-data-dir &lt;dir&gt;</code> and relative profile paths to absolute <code>--user-data-dir=...</code> values before launch</li>
<li>Browser automation now works alongside an already-running Chrome using an isolated profile, keeps requested profiles separate, and never kills reused browser processes.</li>
<li>First-use Chromium installation and browser operations no longer consume Eval's runtime timeout or reset its kernel while waiting.</li>
<li>Browser startup reuses a successful system-Chrome fallback instead of retrying an unavailable download during the same open.</li>
<li>Browser clicks and other interactions no longer stall when OMP-owned tabs are in the background, including after worker timeout recovery.</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Added</h3>
<ul>
<li>Added <code>getBrowserProfilesDir()</code> (<code>~/.omp/browser-profiles</code>; XDG: <code>$XDG_STATE_HOME/omp/browser-profiles</code>) for profiles of Chromium browsers spawned by the browser tool.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Timed out stalled Chrome-for-Testing metadata requests after 30 seconds when looking up download metadata</li>
<li>Concurrent browser installations share one download without replacing a running browser, and stalled downloads time out with partial files cleaned up for retry.</li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v18.1.20...v18.1.21">v18.1.20...v18.1.21</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.20 (13.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.2013.09.2026@can1357chore: bump version to 18.1.20]]></description>
<link>https://tsecurity.de/de/4105264/tools/github-release-can1357oh-my-pi-v18120-13092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4105264/tools/github-release-can1357oh-my-pi-v18120-13092026/</guid>
<pubDate>Sun, 13 Sep 2026 22:02:26 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.20" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.20</span><span class="badge gh-badge gh-badge-date">13.09.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.1.20</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.19 (13.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.1913.09.2026@github-actions[bot]@oh-my-pi/pi-agent-core
Added

Added Agent.getPendingToolResults() for reconstructing live displays before buffered tool results are persisted (#11868 by @serverinspector).
Added opt-in host authorization and exact-once streamed child executio...]]></description>
<link>https://tsecurity.de/de/4088078/tools/github-release-can1357oh-my-pi-v18119-13092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4088078/tools/github-release-can1357oh-my-pi-v18119-13092026/</guid>
<pubDate>Sun, 13 Sep 2026 02:33:47 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.19" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.19</span><span class="badge gh-badge gh-badge-date">13.09.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Added</h3>
<ul>
<li>Added <code>Agent.getPendingToolResults()</code> for reconstructing live displays before buffered tool results are persisted (<a href="https://github.com/can1357/oh-my-pi/pull/11868" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11868/hovercard">#11868</a> by <a href="https://github.com/serverinspector">@serverinspector</a>).</li>
<li>Added opt-in host authorization and exact-once streamed child execution for discard-safe local reads.</li>
</ul>
<h3>Changed</h3>
<ul>
<li><code>Tool &lt;name&gt; not found</code> now also suggests mounted <code>xd://</code> devices, not just the advertised tool set, via the new <code>suggestFallbackToolNames</code> option (<a href="https://github.com/can1357/oh-my-pi/issues/11516" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11516/hovercard">#11516</a>, <a href="https://github.com/can1357/oh-my-pi/issues/10109" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/10109/hovercard">#10109</a> by <a href="https://github.com/oldschoola">@oldschoola</a>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Speculative stream sessions are now discarded when a hook or argument transform replaces a call's arguments while keeping its ID, instead of releasing deferred work planned from the original code (<a href="https://github.com/can1357/oh-my-pi/pull/11889" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11889/hovercard">#11889</a> by <a href="https://github.com/h4vc">@h4vc</a>).</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>Charm Hyper accounts now report their remaining prepaid credit balance in <code>/usage</code> (<a href="https://github.com/can1357/oh-my-pi/pull/11656" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11656/hovercard">#11656</a> by <a href="https://github.com/oldschoola">@oldschoola</a>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Kimi Code's 7-day rate-limiting window being mislabeled as "Total quota" in <code>omp usage</code>, causing accounts whose monthly subscription pool is exhausted to appear 100% free while chat completions fail; parsed <code>totalQuota</code> add-on packs into the true "Total quota" row when present, and recognized Kimi's HTTP 403 <code>access_terminated_error</code> as a credential-rotatable usage limit. (<a href="https://github.com/can1357/oh-my-pi/pull/11827" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11827/hovercard">#11827</a> by <a href="https://github.com/revofusion">@revofusion</a>)</li>
<li>Fixed provider streams that die after emitting <code>toolcall_start</code> but before any argument content failing validation with empty <code>{}</code> arguments; the uncommitted attempt is now discarded and retried (<a href="https://github.com/can1357/oh-my-pi/pull/11823" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11823/hovercard">#11823</a> by <a href="https://github.com/justdoGIT">@justdoGIT</a>).</li>
<li>Fixed Windows <code>zcode://</code> (Z.AI coding-plan) OAuth sign-in never completing after a successful browser authorization: the native callback handler is now registered with a path the Windows shell can launch, so the <code>zcode://zai-auth/callback</code> redirect reaches omp instead of being silently dropped by the browser (<a href="https://github.com/can1357/oh-my-pi/pull/11907" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11907/hovercard">#11907</a> by <a href="https://github.com/oldschoola">@oldschoola</a>).</li>
<li>Codex OAuth login now accepts valid account tokens that expose an email but omit <code>chatgpt_account_id</code>, without fabricating a workspace header (<a href="https://github.com/can1357/oh-my-pi/pull/11847" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11847/hovercard">#11847</a> by <a href="https://github.com/nguyennguyenit">@nguyennguyenit</a>).</li>
<li>Fixed Muse Code login failing when Meta returns no assigned subscription tier (<code>subs_tier_id</code>/<code>subs_tier_name</code> as null); sign-in now succeeds and usage is reported without a tier (<a href="https://github.com/can1357/oh-my-pi/pull/11843" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11843/hovercard">#11843</a> by <a href="https://github.com/John-Cusack">@John-Cusack</a>).</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added Charm Hyper as a built-in provider with API-key login, live model discovery, and per-model pricing, effort ladders, and limits read straight from its catalog (<a href="https://github.com/can1357/oh-my-pi/pull/11656" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11656/hovercard">#11656</a> by <a href="https://github.com/oldschoola">@oldschoola</a>).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added default-off speculative execution for validated local reads, including reads projected from nested JavaScript and Python eval cells.</li>
<li><code>/usage</code> now shows prepaid credit balances (e.g. Charm Hyper's <code>100 credits left</code>) on the provider cards and account summaries instead of <code>no data</code> (<a href="https://github.com/can1357/oh-my-pi/pull/11656" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11656/hovercard">#11656</a> by <a href="https://github.com/oldschoola">@oldschoola</a>).</li>
<li>Retry fallback chains now support per-model reasoning efforts: a fallback entry may carry an explicit thinking suffix (<code>"default": ["openai/gpt-5-mini:low"]</code>), and pressing <code>t</code> on a fallback row in <code>/models</code> sets or clears it. Bare entries keep inheriting the failing turn's effort. (<a href="https://github.com/can1357/oh-my-pi/pull/11842" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11842/hovercard">#11842</a> by <a href="https://github.com/H4vC">@H4vC</a>).</li>
<li>Added <code>task.agentServiceTierOverrides</code> for sparse exact-name service-tier overrides on task/eval agents, so selected agents can use priority/Fast mode without accelerating every subagent (<a href="https://github.com/can1357/oh-my-pi/pull/9668" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9668/hovercard">#9668</a> by <a href="https://github.com/alphastorm">@alphastorm</a>).</li>
<li>Added session-local <code>/btw</code> history with persistent answers and follow-ups; bare <code>/btw</code> reopens history, Escape cancels running answers before closing, and new questions no longer replace an in-progress answer.</li>
<li>Added <code>f follow up</code> in BTW history to continue a selected side conversation with an English input prompt, persistent multi-turn history, and no changes to the main conversation.</li>
<li>Completed inline BTW answers now support <code>f follow up</code> directly; history uses <code>Tab</code> for pane navigation and <code>Enter</code> or <code>f</code> to start a follow-up.</li>
<li>Codex web search now accepts valid email-only OAuth credentials without requiring or fabricating a <code>ChatGPT-Account-Id</code> header (<a href="https://github.com/can1357/oh-my-pi/pull/11847" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11847/hovercard">#11847</a> by <a href="https://github.com/nguyennguyenit">@nguyennguyenit</a>).</li>
<li>Sessions now stay alive when their working directory is removed instead of crashing while preparing shell tools (<a href="https://github.com/can1357/oh-my-pi/issues/11828" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11828/hovercard">#11828</a>).</li>
<li>MCP tool calls spelled with the Claude Code doubled separator (<code>mcp__server__tool</code>) now reach their registered tool (<a href="https://github.com/can1357/oh-my-pi/issues/11516" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11516/hovercard">#11516</a> by <a href="https://github.com/oldschoola">@oldschoola</a>).</li>
<li>MCP HTTP reconnects now release obsolete tool generations instead of growing session memory on every reconnect (<a href="https://github.com/can1357/oh-my-pi/issues/11784" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11784/hovercard">#11784</a>).</li>
<li><code>/debug</code> memory reports now keep large heap snapshots out of JavaScript strings and reject empty snapshots instead of saving zero-byte files (<a href="https://github.com/can1357/oh-my-pi/issues/11785" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11785/hovercard">#11785</a>).</li>
<li>Sloppy-mode edits now drop a copied <code>[N more lines in ...]</code> read notice the same way they already drop the other read-metadata rows, so a pasted projection can no longer leak into the matched pattern or the written text (<a href="https://github.com/can1357/oh-my-pi/pull/11797" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11797/hovercard">#11797</a> by <a href="https://github.com/vasyza">@vasyza</a>).</li>
<li><code>/usage</code> now honors a provider's configured <code>baseUrl</code> when checking credentials before any model has been discovered, so a proxy-scoped API key is no longer sent to the provider's canonical host (<a href="https://github.com/can1357/oh-my-pi/pull/11656" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11656/hovercard">#11656</a> by <a href="https://github.com/oldschoola">@oldschoola</a>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed completed tool cards reverting to pending after refocusing live sessions, and tool output collapsing behind finished reasoning segments (<a href="https://github.com/can1357/oh-my-pi/pull/11868" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11868/hovercard">#11868</a> by <a href="https://github.com/serverinspector">@serverinspector</a>).</li>
<li>Invalid <code>WATCHDOG.yml</code> entries now produce startup/editor warnings while healthy advisors remain available (<a href="https://github.com/can1357/oh-my-pi/pull/11882" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11882/hovercard">#11882</a> by <a href="https://github.com/olegpulatov">@olegpulatov</a>).</li>
<li>Claude Code session imports now preserve typed user text stored alongside tool results (<a href="https://github.com/can1357/oh-my-pi/issues/11854" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11854/hovercard">#11854</a>).</li>
<li>Extension commands now settle BTW writes before creating, switching, or branching sessions, preventing side requests from outliving their source session (<a href="https://github.com/can1357/oh-my-pi/pull/11335" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11335/hovercard">#11335</a> by <a href="https://github.com/Ant39140">@Ant39140</a>).</li>
<li>Session selection and active-session deletion now settle BTW writes before switching or removing history, preventing stale saves from blocking the next session (<a href="https://github.com/can1357/oh-my-pi/pull/11335" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11335/hovercard">#11335</a> by <a href="https://github.com/Ant39140">@Ant39140</a>).</li>
<li>Escape now cancels BTW follow-ups that are still waiting for startup writes, without launching a model request (<a href="https://github.com/can1357/oh-my-pi/pull/11335" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11335/hovercard">#11335</a> by <a href="https://github.com/Ant39140">@Ant39140</a>).</li>
<li>BTW history now rejects out-of-range timestamps instead of failing during display (<a href="https://github.com/can1357/oh-my-pi/pull/11335" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11335/hovercard">#11335</a> by <a href="https://github.com/Ant39140">@Ant39140</a>).</li>
<li>BTW follow-ups now preserve separate user/assistant messages and reuse an isolated topic-specific provider session for prompt caching; cancellation or failure starts a fresh transport generation.</li>
<li>Restored Escape cancellation for running BTW answers and removed the separate <code>x</code> shortcut; cancelled output stays visible, and closing another history entry returns to any still-running BTW panel instead of hiding it.</li>
<li>BTW history now rejects stale cross-process writes and protects running topics with an OS-backed lease, preventing one instance from erasing another instance's follow-ups.</li>
<li>Copying a BTW topic now falls back to its most recent nonempty answer after an empty failed or cancelled follow-up.</li>
<li>Invalid or cancelled <code>/move</code> operations no longer cancel BTW requests; busy side conversations block relocation, and stalled history writes stop session operations with a bounded error instead of hanging indefinitely.</li>
<li>Session shutdown now shows closing progress before waiting for live commands or BTW history writes, and stops progress updates when cleanup completes or fails.</li>
<li>Failed BTW terminal saves now block session operations while retaining the answer for copying and safe retry, instead of being treated as a successful flush.</li>
<li>Standalone <code>!cd</code> now shares the BTW relocation guard with <code>/move</code> and <code>/wt</code>, refusing before shell execution when a side conversation is active or unsaved.</li>
<li><code>/wt</code> now checks BTW migration availability before creating a branch or checkout, preventing unused worktrees when a side conversation is busy.</li>
<li><code>/move</code> now checks BTW migration availability before confirming or creating a missing target directory, preventing leftover directories after a refused move.</li>
<li>BTW errors now shorten embedded home paths and sanitize control characters and oversized text before display, while retaining original diagnostic errors.</li>
<li>Speculative reads now open the authorized resolved target while rendering the requested path, so enabling speculation no longer changes read output for symlinks; video targets are declined at authorization (<a href="https://github.com/can1357/oh-my-pi/pull/11892" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11892/hovercard">#11892</a> by <a href="https://github.com/h4vc">@h4vc</a>).</li>
<li>JavaScript speculation now verifies the retained tool-bridge dispatcher and string-coercion intrinsic identities before projecting reads (<a href="https://github.com/can1357/oh-my-pi/pull/11892" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11892/hovercard">#11892</a> by <a href="https://github.com/h4vc">@h4vc</a>).</li>
<li>Speculative eval sessions are now discarded at reconciliation when a hook or transform appends source the stream never verified, instead of releasing reads planned from the original code (<a href="https://github.com/can1357/oh-my-pi/pull/11892" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11892/hovercard">#11892</a> by <a href="https://github.com/h4vc">@h4vc</a>).</li>
<li>Speculative reads now classify format and rendering by the requested path while opening the resolved target, so symlinks with a different extension read exactly like ordinary reads (<a href="https://github.com/can1357/oh-my-pi/pull/11892" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11892/hovercard">#11892</a> by <a href="https://github.com/h4vc">@h4vc</a>).</li>
<li>JavaScript speculation now validates coercion intrinsics used by <code>String()</code> and <code>.join()</code> inputs, not just template and <code>+</code> operands (<a href="https://github.com/can1357/oh-my-pi/pull/11892" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11892/hovercard">#11892</a> by <a href="https://github.com/h4vc">@h4vc</a>).</li>
<li>Speculative reads now infer the summary language from the requested path while reading the resolved target, so cross-language symlinks summarize exactly like ordinary reads (by <a href="https://github.com/h4vc">@h4vc</a>).</li>
<li>The structural summary cache now keys on the parser language path, so one file read through different extensions no longer reuses a stale summary (by <a href="https://github.com/h4vc">@h4vc</a>).</li>
<li>Fixed the Windows installer failing on Windows PowerShell 5.1: OS architecture detection no longer depends on the .NET <code>RuntimeInformation</code> type that only resolves reliably on PowerShell 7, and the script now requires PowerShell 5.1+ with a clear upgrade message instead of failing cryptically (<a href="https://github.com/can1357/oh-my-pi/pull/11905" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11905/hovercard">#11905</a> by <a href="https://github.com/h4vc">@h4vc</a>).</li>
<li>Speculative reads now infer the summary language from the requested path while reading the resolved target, so cross-language symlinks summarize exactly like ordinary reads (<a href="https://github.com/can1357/oh-my-pi/pull/11892" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11892/hovercard">#11892</a> by <a href="https://github.com/h4vc">@h4vc</a>).</li>
<li>The structural summary cache now keys on the parser language path, so one file read through different extensions no longer reuses a stale summary (<a href="https://github.com/can1357/oh-my-pi/pull/11892" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11892/hovercard">#11892</a> by <a href="https://github.com/h4vc">@h4vc</a>).</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Added</h3>
<ul>
<li>Added public <code>acquireFileLock()</code> and <code>FileLockHandle</code> APIs for holding and explicitly releasing exclusive OS-backed file locks.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Child-shell environment filtering now tolerates a removed process working directory by retaining the resolved project directory (<a href="https://github.com/can1357/oh-my-pi/issues/11828" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11828/hovercard">#11828</a>).</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(debug): avoid heap snapshot string limits by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5429066751" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11786" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11786/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11786">#11786</a></li>
<li>fix(mcp): release obsolete tools after reconnect by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5429418444" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11787" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11787/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11787">#11787</a></li>
<li>fix(catalog): give deepseek-flash the V4.1 Flash wire contract by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5430127799" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11799" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11799/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11799">#11799</a></li>
<li>fix(utils): tolerate deleted working directories by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5432224353" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11829" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11829/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11829">#11829</a></li>
<li>feat(catalog): add Charm Hyper provider by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oldschoola/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oldschoola">@oldschoola</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5420471322" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11656" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11656/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11656">#11656</a></li>
<li>fix(ai): rotate accounts when Anthropic reports credits_required by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AshishKumar4/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AshishKumar4">@AshishKumar4</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5396121224" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11333" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11333/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11333">#11333</a></li>
<li>fix(tui): hide tool activity in retired transcript history by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/notnotype/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/notnotype">@notnotype</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5426080985" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11734" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11734/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11734">#11734</a></li>
<li>fix(ai): fall back to the canonical Anthropic usage endpoint when a custom baseUrl does not serve it by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sandboiii/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sandboiii">@sandboiii</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5399429952" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11376" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11376/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11376">#11376</a></li>
<li>fix(ai): retry tool calls with empty args by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/justdoGIT/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/justdoGIT">@justdoGIT</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5431972263" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11823" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11823/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11823">#11823</a></li>
<li>feat(coding-agent): per-model reasoning efforts in retry fallback chains by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5433055786" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11842" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11842/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11842">#11842</a></li>
<li>feat(coding-agent): add persistent btw history and follow-ups by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ant39140/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ant39140">@Ant39140</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5396135476" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11335" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11335/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11335">#11335</a></li>
<li>test(release): sync native-core file list with VCS entrypoints by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5354487091" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/10884" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10884/hovercard" href="https://github.com/can1357/oh-my-pi/pull/10884">#10884</a></li>
<li>fix(coding-agent): make status test worktree-safe by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5424628845" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11716" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11716/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11716">#11716</a></li>
<li>fix(ai): allow null subs_tier_id/subs_tier_name in Muse Code login response by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/John-Cusack/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/John-Cusack">@John-Cusack</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5433150928" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11843" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11843/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11843">#11843</a></li>
<li>fix(cli): return non-zero when a JSON print-mode turn fails by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JamieJ5926/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JamieJ5926">@JamieJ5926</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5412390436" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11545" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11545/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11545">#11545</a></li>
<li>fix(ai): allow Codex OAuth login without account ID by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nguyennguyenit/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nguyennguyenit">@nguyennguyenit</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5433392353" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11847" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11847/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11847">#11847</a></li>
<li>test(coding-agent): make two path assertions pass on Windows by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oleg494/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oleg494">@oleg494</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5433744420" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11851" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11851/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11851">#11851</a></li>
<li>fix(ai): distinguish Kimi weekly limit from total quota and rotate on termination by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/revofusion/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/revofusion">@revofusion</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5432148674" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11827" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11827/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11827">#11827</a></li>
<li>test(coding-agent): assert the shortened artifact notice path independently by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oleg494/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oleg494">@oleg494</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5433847948" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11853" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11853/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11853">#11853</a></li>
<li>fix(edit): drop a copied "more lines in ..." read notice in sloppy mode by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vasyza/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vasyza">@vasyza</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5430105529" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11797" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11797/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11797">#11797</a></li>
<li>fix(session): preserve text in mixed Claude records by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5433929212" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11856" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11856/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11856">#11856</a></li>
<li>fix(tui): skip hidden thinking formatting by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/redsolver/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/redsolver">@redsolver</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5418148581" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11632" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11632/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11632">#11632</a></li>
<li>feat(task): add per-agent service-tier overrides by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alphastorm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alphastorm">@alphastorm</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5239564950" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9668" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9668/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9668">#9668</a></li>
<li>feat: Add speculative tool and eval execution by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wn-mitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wn-mitch">@wn-mitch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5247579540" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9732" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9732/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9732">#9732</a></li>
<li>Wnmitch/spec followup nits by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5436045728" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11889" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11889/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11889">#11889</a></li>
<li>fix(advisor): preserve healthy WATCHDOG entries and surface warnings by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/olegpulatov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/olegpulatov">@olegpulatov</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5435679540" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11882" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11882/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11882">#11882</a></li>
<li>fix(mcp): resolve the Claude Code tool-name spelling to its registered tool by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oldschoola/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oldschoola">@oldschoola</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5435568649" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11876" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11876/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11876">#11876</a></li>
<li>test(utils,coding-agent): fix Windows-only suite failures by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5436151402" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11893" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11893/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11893">#11893</a></li>
<li>fix(spec): exact-code reconcile, transform coercion gates, lexical cl… by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5436149566" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11892" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11892/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11892">#11892</a></li>
<li>fix(ai): anchor proxy tunnel socket in a typed const by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5436504279" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11901" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11901/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11901">#11901</a></li>
<li>docs(changelog): add 11892 links to follow-up entries, drop agent duplicate by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5436543429" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11902" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11902/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11902">#11902</a></li>
<li>fix(coding-agent): version-robust fetch/socket/console typings by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5436574962" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11903" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11903/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11903">#11903</a></li>
<li>fix(install): pwsh version check for pwsh installer by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5436600094" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11905" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11905/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11905">#11905</a></li>
<li>fix(tui): preserve live tool results and retire closed reasoning by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/serverinspector/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/serverinspector">@serverinspector</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5434910641" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11868" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11868/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11868">#11868</a></li>
<li>fix(auth): register zcode:// handler with a shell-launchable path by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oldschoola/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oldschoola">@oldschoola</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5436661623" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11907" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11907/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11907">#11907</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sandboiii/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sandboiii">@sandboiii</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5399429952" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11376" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11376/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11376">#11376</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/justdoGIT/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/justdoGIT">@justdoGIT</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5431972263" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11823" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11823/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11823">#11823</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/John-Cusack/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/John-Cusack">@John-Cusack</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5433150928" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11843" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11843/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11843">#11843</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nguyennguyenit/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nguyennguyenit">@nguyennguyenit</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5433392353" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11847" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11847/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11847">#11847</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vasyza/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vasyza">@vasyza</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5430105529" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11797" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11797/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11797">#11797</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/redsolver/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/redsolver">@redsolver</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5418148581" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11632" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11632/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11632">#11632</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wn-mitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wn-mitch">@wn-mitch</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5247579540" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9732" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9732/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9732">#9732</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v18.1.18...v18.1.19">v18.1.18...v18.1.19</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Nightly: The Need for Speed Controls – These Weeks in Firefox: Issue 208]]></title>
<description><![CDATA[Highlights Firefox 154 went out today! Lots of goodies in there for our users, including support for NVIDIA GeForce NOW The new 2 week release cycle is now in effect. This means that Firefox 155 is slated to hit release on September 1st! You can follow along at https://whattrainisitnow.com/ As pa...]]></description>
<link>https://tsecurity.de/de/4059329/tools/firefox-nightly-the-need-for-speed-controls-these-weeks-in-firefox-issue-208/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4059329/tools/firefox-nightly-the-need-for-speed-controls-these-weeks-in-firefox-issue-208/</guid>
<pubDate>Fri, 11 Sep 2026 22:04:45 +0200</pubDate>
<content:encoded><![CDATA[<p>Highlights Firefox 154 went out today! Lots of goodies in there for our users, including support for NVIDIA GeForce NOW The new 2 week release cycle is now in effect. This means that Firefox 155 is slated to hit release on September 1st! You can follow along at https://whattrainisitnow.com/ As part of the Nova redesign, a “Use Linux system theme”... <a href="https://blog.nightly.mozilla.org/2026/09/11/the-need-for-speed-controls-these-weeks-in-firefox-issue-208/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Jonathan Almeida: Perf wins from relocating MOZ_OBJDIR have a dev experience cost]]></title>
<description><![CDATA[This is the opposite of what I wanted to write about: relocating your MOZ_OBJDIR outside of your source directory will make your IDE faster. In mozilla-central (the firefox monorepo), a default object files directory is created within the same source directory. This is equivalent to the build/ di...]]></description>
<link>https://tsecurity.de/de/4049980/tools/jonathan-almeida-perf-wins-from-relocating-mozobjdir-have-a-dev-experience-cost/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4049980/tools/jonathan-almeida-perf-wins-from-relocating-mozobjdir-have-a-dev-experience-cost/</guid>
<pubDate>Fri, 11 Sep 2026 06:03:50 +0200</pubDate>
<content:encoded><![CDATA[<p>This is the opposite of what I wanted to write about: relocating your MOZ_OBJDIR outside of your source directory will make your IDE faster. In mozilla-central (the firefox monorepo), a default object files directory is created within the same source directory. This is equivalent to the build/ directory you would typically see in other projects.... <a href="https://jonalmeida.com/til/do-not-relocate-objdir/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.16 (09.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.1609.09.2026@github-actions[bot]@oh-my-pi/pi-ai
Fixed

Codex SSE streams that end without a terminal completion event now retry when replay-safe and remain transient errors when partial output prevents replay (#11349).

@oh-my-pi/pi-coding-agent
Added

/rename without a titl...]]></description>
<link>https://tsecurity.de/de/4047814/tools/github-release-can1357oh-my-pi-v18116-09092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4047814/tools/github-release-can1357oh-my-pi-v18116-09092026/</guid>
<pubDate>Fri, 11 Sep 2026 02:06:21 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.16" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.16</span><span class="badge gh-badge gh-badge-date">09.09.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-ai</h2>
<h3>Fixed</h3>
<ul>
<li>Codex SSE streams that end without a terminal completion event now retry when replay-safe and remain transient errors when partial output prevents replay (<a href="https://github.com/can1357/oh-my-pi/issues/11349" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11349/hovercard">#11349</a>).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li><code>/rename</code> without a title now generates a session name from recent conversation using the configured tiny model.</li>
<li>Added opt-in experimental notes-backed context windows with persistent branch-local notes, searchable original session history, retained latest user requests, and a model-callable rollover tool, including in Code Mode.</li>
<li><code>/loop</code> accepts <code>--until '&lt;cmd&gt;'</code> / <code>--while '&lt;cmd&gt;'</code> to gate each iteration on a shell command's exit status, so a loop can stop on real project state instead of only a count or duration. (<a href="https://github.com/can1357/oh-my-pi/pull/10858" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10858/hovercard">#10858</a> by <a href="https://github.com/andyhite">@andyhite</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Read error and preview rendering now sanitizes tabs and Windows-style CRLF (e.g. ssh host-key failures, tab-indented fetched content) so raw output can no longer tear the result frame.</li>
<li>Unset <code>tiny</code> model roles now honor the configured <code>@smol</code> fallback in direct execution and the <code>/models</code> Roles view (<a href="https://github.com/can1357/oh-my-pi/issues/11311" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11311/hovercard">#11311</a>).</li>
<li>Extension Control Center (<code>/extensions</code>) search now accepts <code>j</code> and <code>k</code>, so extensions like <code>jira</code>/<code>json</code> are searchable; bare <code>j</code>/<code>k</code> no longer move the list selection (use arrow keys or the configured <code>tui.select.up</code>/<code>down</code>) (<a href="https://github.com/can1357/oh-my-pi/issues/11350" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11350/hovercard">#11350</a>).</li>
<li>Codex turns interrupted before terminal completion now auto-continue after resolved tool calls instead of stopping (<a href="https://github.com/can1357/oh-my-pi/issues/11349" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11349/hovercard">#11349</a>).</li>
<li>Fixed the status line's <code>pi</code> brand/working segment double-padding the first separator, so every gap around a separator is a single space (<a href="https://github.com/can1357/oh-my-pi/issues/11103" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11103/hovercard">#11103</a>).</li>
<li><code>/handoff</code> no longer leaves the TUI in a running state when completion races with delayed session events (<a href="https://github.com/can1357/oh-my-pi/issues/11263" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11263/hovercard">#11263</a>).</li>
<li>Fixed legacy Pi extensions failing to load when calling <code>ctx.isProjectTrusted()</code> in an event handler; the extension context now exposes it (always <code>true</code>, since OMP applies no project-trust gating) (<a href="https://github.com/can1357/oh-my-pi/issues/7955" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7955/hovercard">#7955</a>).</li>
<li>Fixed Ctrl+Z jobs exiting successfully after <code>fg</code> instead of restarting the TUI because terminal teardown left Bun without a referenced event-loop handle while waiting for <code>SIGCONT</code> (<a href="https://github.com/can1357/oh-my-pi/issues/8585" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8585/hovercard">#8585</a>).</li>
<li>Extensions loaded by the npm CLI now apply settings overrides to the active session, so generated agents and model choices remain isolated between sessions (<a href="https://github.com/can1357/oh-my-pi/pull/11047" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11047/hovercard">#11047</a> by <a href="https://github.com/mgpai22">@mgpai22</a>).</li>
<li>Live task dispatch now reloads added, changed, removed, and deleted project task and retry settings before resolving subagents (<a href="https://github.com/can1357/oh-my-pi/issues/11191" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/11191/hovercard">#11191</a>).</li>
<li>Reset <code>/loop</code> iterations combined with <code>--while</code> / <code>--until</code> no longer keep submitting without resetting when vibe mode is enabled while the condition command is still running; the loop now disables itself instead (<a href="https://github.com/can1357/oh-my-pi/pull/10858" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10858/hovercard">#10858</a>).</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>$which</code> capturing <code>Bun.which</code> at import on Linux and Windows, so <code>Bun.which</code> stubs installed later (e.g. per-test spies) are honoured and PATH-only language servers no longer leak into test results.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>feat(coding-agent): add experimental notes-backed context windows by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5355096005" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/10893" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10893/hovercard" href="https://github.com/can1357/oh-my-pi/pull/10893">#10893</a></li>
<li>fix(coding-agent): sanitize tabs and CR in read error rendering by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5392884014" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11305" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11305/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11305">#11305</a></li>
<li>TUI: single delta marker for turn elapsed time in usage rows by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JamieJ5926/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JamieJ5926">@JamieJ5926</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5395729912" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11332" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11332/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11332">#11332</a></li>
<li>fix(agent): retry truncated Codex streams by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5397573954" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11356" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11356/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11356">#11356</a></li>
<li>fix(tui): let /extensions search accept j and k by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5397525591" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11352" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11352/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11352">#11352</a></li>
<li>fix(coding-agent): honor configured smol fallback for tiny by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5393755540" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11312" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11312/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11312">#11312</a></li>
<li>fix(tui): clear stale loader after handoff completion by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5387912318" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11264" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11264/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11264">#11264</a></li>
<li>fix(auth): refresh desktop database for native zcode:// oauth by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5389537280" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11287" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11287/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11287">#11287</a></li>
<li>fix(update): validate foreign symlink targets by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5376496543" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11155" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11155/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11155">#11155</a></li>
<li>fix(compaction): rearm idle timer after setting changes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5290281161" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/10244" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10244/hovercard" href="https://github.com/can1357/oh-my-pi/pull/10244">#10244</a></li>
<li>feat(coding-agent): gate /loop iterations on a shell condition  by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/andyhite/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andyhite">@andyhite</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5353071423" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/10858" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10858/hovercard" href="https://github.com/can1357/oh-my-pi/pull/10858">#10858</a></li>
<li>fix(tests): dispose status lines before settings teardown by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5369580229" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11098" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11098/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11098">#11098</a></li>
<li>fix(commit): route agentic pipeline through commit model by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5361058276" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/10993" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10993/hovercard" href="https://github.com/can1357/oh-my-pi/pull/10993">#10993</a></li>
<li>fix(eval): return immediate thenable handles from JS completion/agent by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5361012386" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/10992" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10992/hovercard" href="https://github.com/can1357/oh-my-pi/pull/10992">#10992</a></li>
<li>fix(plan-mode): inline approved plan content by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5356988599" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/10926" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10926/hovercard" href="https://github.com/can1357/oh-my-pi/pull/10926">#10926</a></li>
<li>docs: fix README hashline package link to deleted directory by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5354494381" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/10885" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10885/hovercard" href="https://github.com/can1357/oh-my-pi/pull/10885">#10885</a></li>
<li>fix(coding-agent): recheck vibe guard after loop condition gate by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5398551957" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11367" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11367/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11367">#11367</a></li>
<li>fix(coding-agent): break tiny/smol fallback cycle on default alias by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5398401736" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11363" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11363/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11363">#11363</a></li>
<li>fix(settings): refresh project cache before reload by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5382622303" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11198" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11198/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11198">#11198</a></li>
<li>fix(coding-agent): discover --plugin-dir agents without claude opt-in by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5376307962" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11153" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11153/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11153">#11153</a></li>
<li>fix(tui): drop trailing pad from pi status segment by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5369918950" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11105" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11105/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11105">#11105</a></li>
<li>fix(coding-agent): preserve npm extension session settings by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5365201368" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11051" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11051/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11051">#11051</a></li>
<li>fix(coding-agent): restore getSupportedThinkingLevels in legacy pi-ai shim by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5347096117" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/10801" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10801/hovercard" href="https://github.com/can1357/oh-my-pi/pull/10801">#10801</a></li>
<li>fix(task): ignore Claude marketplace model aliases by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5095037679" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7967" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7967/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7967">#7967</a></li>
<li>fix(coding-agent): keep suspended sessions alive for fg by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5158487423" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8629" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8629/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8629">#8629</a></li>
<li>feat(catalog): update Fire Pass models to glm-5.2-fast and kimi-k3-fast by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/olegpulatov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/olegpulatov">@olegpulatov</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5353114192" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/10859" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10859/hovercard" href="https://github.com/can1357/oh-my-pi/pull/10859">#10859</a></li>
<li>feat(coding-agent): generate a title when /rename has no arguments by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gitpushoriginmaster/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gitpushoriginmaster">@gitpushoriginmaster</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5367509801" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11084" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11084/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11084">#11084</a></li>
<li>fix(extensions): expose ctx.isProjectTrusted for legacy pi extensions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5094542187" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7958" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7958/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7958">#7958</a></li>
<li>test(ai): gate the ::1 callback bind assertion on the host's IPv6 loopback by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PeterPonyu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PeterPonyu">@PeterPonyu</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5401499802" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11385" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11385/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11385">#11385</a></li>
<li>fix(utils): resolve Bun.which per call in whichFresh by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PeterPonyu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PeterPonyu">@PeterPonyu</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5401540646" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11386" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11386/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11386">#11386</a></li>
<li>test(coding-agent): make the project-venv setup test hermetic to an activated env by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PeterPonyu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PeterPonyu">@PeterPonyu</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5401629808" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11387" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11387/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11387">#11387</a></li>
<li>fix(coding-agent): guard reset loops against in-flight vibe activation by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5398644590" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11368" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11368/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11368">#11368</a></li>
<li>docs: point AGENTS.md VCS helpers at natives/vcs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PeterPonyu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PeterPonyu">@PeterPonyu</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5402168880" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11396" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11396/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11396">#11396</a></li>
<li>fix(coding-agent): complete title signal stub in working-accent harness by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H4vC/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H4vC">@H4vC</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5402268436" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11398" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11398/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11398">#11398</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gitpushoriginmaster/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gitpushoriginmaster">@gitpushoriginmaster</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5367509801" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11084" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11084/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11084">#11084</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PeterPonyu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PeterPonyu">@PeterPonyu</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5401499802" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/11385" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/11385/hovercard" href="https://github.com/can1357/oh-my-pi/pull/11385">#11385</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v18.1.15...v18.1.16">v18.1.15...v18.1.16</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.27.0 (10.09.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.27.010.09.2026@trevor-signal
This update introduces more granular settings to give you significantly more control over your Signal notifications. Now you can choose what appears on the app badge, adjust notification preferences for muted threads, and more! We also added...]]></description>
<link>https://tsecurity.de/de/4047812/tools/github-release-signalappsignal-desktop-v8270-10092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4047812/tools/github-release-signalappsignal-desktop-v8270-10092026/</guid>
<pubDate>Fri, 11 Sep 2026 02:06:17 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.27.0" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.27.0</span><span class="badge gh-badge gh-badge-date">10.09.2026</span><span class="badge gh-badge gh-badge-author">@trevor-signal</span></div><div class="github-feed-changelog"><ul>
<li>This update introduces more granular settings to give you significantly more control over your Signal notifications. Now you can choose what appears on the app badge, adjust notification preferences for muted threads, and more! We also added a convenient button to restore the default notification settings if you ever make so many changes that you don't even know how to get ahold of yourself anymore.</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.28.0-beta.1 (10.09.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.28.0-beta.110.09.2026@trevor-signal
Small tweaks, bug fixes, and performance enhancements. Thanks for using Signal!]]></description>
<link>https://tsecurity.de/de/4047811/tools/github-release-signalappsignal-desktop-v8280-beta1-10092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4047811/tools/github-release-signalappsignal-desktop-v8280-beta1-10092026/</guid>
<pubDate>Fri, 11 Sep 2026 02:06:11 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.28.0-beta.1" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.28.0-beta.1</span><span class="badge gh-badge gh-badge-date">10.09.2026</span><span class="badge gh-badge gh-badge-author">@trevor-signal</span></div><div class="github-feed-changelog"><ul>
<li>Small tweaks, bug fixes, and performance enhancements. Thanks for using Signal!</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.28.0-beta.2 (11.09.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.28.0-beta.211.09.2026@ayumi-signal
Small tweaks, bug fixes, and performance enhancements. Thanks for using Signal!]]></description>
<link>https://tsecurity.de/de/4047810/tools/github-release-signalappsignal-desktop-v8280-beta2-11092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4047810/tools/github-release-signalappsignal-desktop-v8280-beta2-11092026/</guid>
<pubDate>Fri, 11 Sep 2026 02:06:10 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.28.0-beta.2" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.28.0-beta.2</span><span class="badge gh-badge gh-badge-date">11.09.2026</span><span class="badge gh-badge gh-badge-author">@ayumi-signal</span></div><div class="github-feed-changelog"><ul>
<li>Small tweaks, bug fixes, and performance enhancements. Thanks for using Signal!</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Nightly: Motion, Colour, Captions, Kit – These Weeks in Firefox: Issue 207]]></title>
<description><![CDATA[Highlights Want some Kit? Check out the store! Sebastian Zartner [:sebo] added a panel to expose @media emulation (#1692434) and provided a way to emulate @media (prefers-reduced-motion: reduce) (#1477920) More theme controls have been added to the New Tab customization panel: Improved Picture-in...]]></description>
<link>https://tsecurity.de/de/4047803/tools/firefox-nightly-motion-colour-captions-kit-these-weeks-in-firefox-issue-207/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4047803/tools/firefox-nightly-motion-colour-captions-kit-these-weeks-in-firefox-issue-207/</guid>
<pubDate>Fri, 11 Sep 2026 02:06:08 +0200</pubDate>
<content:encoded><![CDATA[<p>Highlights Want some Kit? Check out the store! Sebastian Zartner [:sebo] added a panel to expose @media emulation (#1692434) and provided a way to emulate @media (prefers-reduced-motion: reduce) (#1477920) More theme controls have been added to the New Tab customization panel: Improved Picture-in-Picture caption support from some volunteer... <a href="https://blog.nightly.mozilla.org/2026/09/08/motion-colour-captions-kit-these-weeks-in-firefox-issue-207/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: MozPhab 2.19.0 Released]]></title>
<description><![CDATA[Bugs resolved in Moz-Phab 2.19.0: bug 1987220 moz-phab patch --apply-to here should apply to the original base revision and rebase, rather than applying the raw diff on HEAD bug 2016442 add moz-phab list subcommand Discuss these changes in #engineering-workflow on Slack or #Conduit Matrix. 1 post...]]></description>
<link>https://tsecurity.de/de/4047801/tools/firefox-tooling-announcements-mozphab-2190-released/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4047801/tools/firefox-tooling-announcements-mozphab-2190-released/</guid>
<pubDate>Fri, 11 Sep 2026 02:06:07 +0200</pubDate>
<content:encoded><![CDATA[<p>Bugs resolved in Moz-Phab 2.19.0: bug 1987220 moz-phab patch --apply-to here should apply to the original base revision and rebase, rather than applying the raw diff on HEAD bug 2016442 add moz-phab list subcommand Discuss these changes in #engineering-workflow on Slack or #Conduit Matrix. 1 post - 1 participant Read full topic <a href="https://discourse.mozilla.org/t/mozphab-2-19-0-released/149411" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: Happy BMO Push Day! (20260908.1)]]></title>
<description><![CDATA[Github Link The following changes have been pushed to bugzilla.mozilla.org: Bug 1205300 - Missing: related documentation “Reporting” Bug 2068120 - Thunderbird access to “Iteration” and “Due Date” fields Bug 2066252 - Prevent save if keyword checkin-needed-tb exists without target milestone Bug 20...]]></description>
<link>https://tsecurity.de/de/4047800/tools/firefox-tooling-announcements-happy-bmo-push-day-202609081/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4047800/tools/firefox-tooling-announcements-happy-bmo-push-day-202609081/</guid>
<pubDate>Fri, 11 Sep 2026 02:06:05 +0200</pubDate>
<content:encoded><![CDATA[<p>Github Link The following changes have been pushed to bugzilla.mozilla.org: Bug 1205300 - Missing: related documentation “Reporting” Bug 2068120 - Thunderbird access to “Iteration” and “Due Date” fields Bug 2066252 - Prevent save if keyword checkin-needed-tb exists without target milestone Bug 2070017 - Reinstate web bounty form Bug 2059948 - Do... <a href="https://discourse.mozilla.org/t/happy-bmo-push-day-20260908-1/149413" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[About:Community: Game on: Play, share, and help shape Mozilla]]></title>
<description><![CDATA[P.S. Apologies for the delay in publishing this edition on the community blog. The original newsletter was sent to subscribers on August 27. Firefox was leveling up in August! GeForce NOW arrived on Firefox for Windows, JPEG XL support was on the way, and the Firefox + NVIDIA teams joined forces ...]]></description>
<link>https://tsecurity.de/de/4047799/tools/aboutcommunity-game-on-play-share-and-help-shape-mozilla/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4047799/tools/aboutcommunity-game-on-play-share-and-help-shape-mozilla/</guid>
<pubDate>Fri, 11 Sep 2026 02:06:04 +0200</pubDate>
<content:encoded><![CDATA[<p>P.S. Apologies for the delay in publishing this edition on the community blog. The original newsletter was sent to subscribers on August 27. Firefox was leveling up in August! GeForce NOW arrived on Firefox for Windows, JPEG XL support was on the way, and the Firefox + NVIDIA teams joined forces for a Reddit AMA. We also invited SUMO and Mozilla... <a href="https://blog.mozilla.org/community/2026/09/10/newsletter-aug-2026/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Jonathan Almeida: Move MOZ_OBJDIR outside of mozilla-central to speed up your IDE]]></title>
<description><![CDATA[In mozilla-central (the firefox monorepo), a default object store directory is created within the source directory. This is equivalent to the build/ directory you would typically see in other projects. While this is typically fine, I've found that Android Studio indexes these files and we don't (...]]></description>
<link>https://tsecurity.de/de/4047798/tools/jonathan-almeida-move-mozobjdir-outside-of-mozilla-central-to-speed-up-your-ide/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4047798/tools/jonathan-almeida-move-mozobjdir-outside-of-mozilla-central-to-speed-up-your-ide/</guid>
<pubDate>Fri, 11 Sep 2026 02:06:03 +0200</pubDate>
<content:encoded><![CDATA[<p>In mozilla-central (the firefox monorepo), a default object store directory is created within the source directory. This is equivalent to the build/ directory you would typically see in other projects. While this is typically fine, I&#039;ve found that Android Studio indexes these files and we don&#039;t (yet?) have the ability to inform it to not do so... <a href="https://jonalmeida.com/til/relocate-objdir-mozbuild/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Desktop Settings: Removing technical jargon]]></title>
<description><![CDATA[Our goal for this phase of work is to remove the technical jargon, use plain language, and make it effortless for everyone to make informed decisions about their settings. With over 250 blocks of settings content to untangle, we aimed for incremental improvements rather than striving for perfecti...]]></description>
<link>https://tsecurity.de/de/4047797/tools/desktop-settings-removing-technical-jargon/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4047797/tools/desktop-settings-removing-technical-jargon/</guid>
<pubDate>Fri, 11 Sep 2026 02:06:01 +0200</pubDate>
<content:encoded><![CDATA[<p>Our goal for this phase of work is to remove the technical jargon, use plain language, and make it effortless for everyone to make informed decisions about their settings. With over 250 blocks of settings content to untangle, we aimed for incremental improvements rather than striving for perfection. While our previous research leaned heavily on... <a href="https://blog.thunderbird.net/2026/09/desktop-settings-removing-technical-jargon/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.13 (07.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.1307.09.2026@can1357chore: bump version to 18.1.13]]></description>
<link>https://tsecurity.de/de/4026368/tools/github-release-can1357oh-my-pi-v18113-07092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/4026368/tools/github-release-can1357oh-my-pi-v18113-07092026/</guid>
<pubDate>Mon, 07 Sep 2026 02:32:37 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.13" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.13</span><span class="badge gh-badge gh-badge-date">07.09.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.1.13</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.11 (05.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.1105.09.2026@can1357chore: bump version to 18.1.11]]></description>
<link>https://tsecurity.de/de/3974679/tools/github-release-can1357oh-my-pi-v18111-05092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3974679/tools/github-release-can1357oh-my-pi-v18111-05092026/</guid>
<pubDate>Sat, 05 Sep 2026 17:32:50 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.11" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.11</span><span class="badge gh-badge gh-badge-date">05.09.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.1.11</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: rclone/rclone v1.75.1 (04.09.2026)]]></title>
<description><![CDATA[rclone/rclonev1.75.104.09.2026@ncwVersion v1.75.1]]></description>
<link>https://tsecurity.de/de/3956459/tools/github-release-rclonerclone-v1751-04092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3956459/tools/github-release-rclonerclone-v1751-04092026/</guid>
<pubDate>Fri, 04 Sep 2026 18:42:22 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/rclone/rclone/releases/tag/v1.75.1" target="_blank" rel="noopener nofollow">rclone/rclone</a><span class="badge gh-badge gh-badge-version">v1.75.1</span><span class="badge gh-badge gh-badge-date">04.09.2026</span><span class="badge gh-badge gh-badge-author">@ncw</span></div><div class="github-feed-changelog"><p>Version v1.75.1</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: Firefox DevTools MCP 0.10.2 released]]></title>
<description><![CDATA[Firefox DevTools MCP (firefox-devtools-mcp) 0.10.2 is out on npm. New tools: press_key — sends a single key, optionally with modifiers, to a snapshot element or the focused element (Return, Escape, Tab, arrows, ctrl+shift+t, …). type_text — types text key by key into the focused element, with an ...]]></description>
<link>https://tsecurity.de/de/3956453/tools/firefox-tooling-announcements-firefox-devtools-mcp-0102-released/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3956453/tools/firefox-tooling-announcements-firefox-devtools-mcp-0102-released/</guid>
<pubDate>Fri, 04 Sep 2026 18:42:20 +0200</pubDate>
<content:encoded><![CDATA[<p>Firefox DevTools MCP (firefox-devtools-mcp) 0.10.2 is out on npm. New tools: press_key — sends a single key, optionally with modifiers, to a snapshot element or the focused element (Return, Escape, Tab, arrows, ctrl+shift+t, …). type_text — types text key by key into the focused element, with an optional key to press afterwards. set_network_cache... <a href="https://discourse.mozilla.org/t/firefox-devtools-mcp-0-10-2-released/149369" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.10 (04.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.1004.09.2026@github-actions[bot]@oh-my-pi/pi-agent-core
Fixed

Fixed Codex V2 remote compaction ignoring explicit thinking-off.
Fixed Codex V2 remote compaction rebuilding the request prefix differently from normal turns, restoring prompt-cache reuse (#10786).

@oh-my-pi/pi-...]]></description>
<link>https://tsecurity.de/de/3955163/tools/github-release-can1357oh-my-pi-v18110-04092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3955163/tools/github-release-can1357oh-my-pi-v18110-04092026/</guid>
<pubDate>Fri, 04 Sep 2026 12:22:07 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.10" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.10</span><span class="badge gh-badge gh-badge-date">04.09.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Codex V2 remote compaction ignoring explicit thinking-off.</li>
<li>Fixed Codex V2 remote compaction rebuilding the request prefix differently from normal turns, restoring prompt-cache reuse (<a href="https://github.com/can1357/oh-my-pi/issues/10786" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/10786/hovercard">#10786</a>).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Changed</h3>
<ul>
<li>Subagent <code>yield</code> now takes <code>data</code>/<code>error</code> directly instead of nesting them under a <code>result</code> wrapper.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Codex V2 remote compaction rebuilding the request prefix differently from normal turns, restoring prompt-cache reuse (<a href="https://github.com/can1357/oh-my-pi/issues/10786" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/10786/hovercard">#10786</a>).</li>
<li>Restored mouse clicks, hover, and wheel scrolling in Plan Review.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(compaction): preserve codex v2 cache prefix by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5345495794" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/10789" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/10789/hovercard" href="https://github.com/can1357/oh-my-pi/pull/10789">#10789</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v18.1.9...v18.1.10">v18.1.9...v18.1.10</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.9 (04.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.904.09.2026@can1357
windows_sys::core::GUID has no zeroed; use its Default impl. Silenced the unused mode parameter on non-unix in atomic_write, where no per-file mode bits exist.]]></description>
<link>https://tsecurity.de/de/3954297/tools/github-release-can1357oh-my-pi-v1819-04092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3954297/tools/github-release-can1357oh-my-pi-v1819-04092026/</guid>
<pubDate>Fri, 04 Sep 2026 08:11:45 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.9" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.9</span><span class="badge gh-badge gh-badge-date">04.09.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><ul>
<li><code>windows_sys::core::GUID</code> has no <code>zeroed</code>; use its <code>Default</code> impl. Silenced the unused <code>mode</code> parameter on non-unix in <code>atomic_write</code>, where no per-file mode bits exist.</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.27.0-beta.3 (03.09.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.27.0-beta.303.09.2026@indutny-signal
This update introduces more granular settings to give you significantly more control over your Signal notifications. Now you can choose what appears on the app badge, adjust notification preferences for muted threads, and more! We al...]]></description>
<link>https://tsecurity.de/de/3951652/tools/github-release-signalappsignal-desktop-v8270-beta3-03092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3951652/tools/github-release-signalappsignal-desktop-v8270-beta3-03092026/</guid>
<pubDate>Fri, 04 Sep 2026 00:11:43 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.27.0-beta.3" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.27.0-beta.3</span><span class="badge gh-badge gh-badge-date">03.09.2026</span><span class="badge gh-badge gh-badge-author">@indutny-signal</span></div><div class="github-feed-changelog"><ul>
<li>This update introduces more granular settings to give you significantly more control over your Signal notifications. Now you can choose what appears on the app badge, adjust notification preferences for muted threads, and more! We also added a convenient button to restore the default notification settings if you ever make so many changes that you don't even know how to get ahold of yourself anymore.</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Performance Blog: Introducing PerfCompare’s Simple View]]></title>
<description><![CDATA[We heard you. You don’t want to open your PerfCompare performance comparison and feel like you need a background in statistics to interpret the Mann-Whitney-U results. Cliff’s Delta, CLES, and normality tests, oh my! It should not feel like you’ve blindly walked into a college stats exam, unless ...]]></description>
<link>https://tsecurity.de/de/3951178/tools/mozilla-performance-blog-introducing-perfcompares-simple-view/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3951178/tools/mozilla-performance-blog-introducing-perfcompares-simple-view/</guid>
<pubDate>Thu, 03 Sep 2026 22:41:39 +0200</pubDate>
<content:encoded><![CDATA[<p>We heard you. You don’t want to open your PerfCompare performance comparison and feel like you need a background in statistics to interpret the Mann-Whitney-U results. Cliff’s Delta, CLES, and normality tests, oh my! It should not feel like you’ve blindly walked into a college stats exam, unless of course, you love statistics. For the rest, all... <a href="https://blog.mozilla.org/performance/2026/09/03/introducing-perfcompares-simple-view/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: PerfCompare just deployed (Sept 3, 2026)]]></title>
<description><![CDATA[The latest version of PerfCompare is now live! This includes the launch of PerfCompare’s Simple View. Read the following blog post, Introducing PerfCompare’s Simple View, to learn more. Check out the change-log below to see the updates: Highlights: [kala-moz] Bug 2059826 - Simplified View: Create...]]></description>
<link>https://tsecurity.de/de/3951177/tools/firefox-tooling-announcements-perfcompare-just-deployed-sept-3-2026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3951177/tools/firefox-tooling-announcements-perfcompare-just-deployed-sept-3-2026/</guid>
<pubDate>Thu, 03 Sep 2026 22:41:36 +0200</pubDate>
<content:encoded><![CDATA[<p>The latest version of PerfCompare is now live! This includes the launch of PerfCompare’s Simple View. Read the following blog post, Introducing PerfCompare’s Simple View, to learn more. Check out the change-log below to see the updates: Highlights: [kala-moz] Bug 2059826 - Simplified View: Create checkbox selection for advanced columns and display... <a href="https://discourse.mozilla.org/t/perfcompare-just-deployed-sept-3-2026/149361" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.27.0-beta.2 (03.09.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.27.0-beta.203.09.2026@jamiebuilds-signal
This update introduces more granular settings to give you significantly more control over your Signal notifications. Now you can choose what appears on the app badge, adjust notification preferences for muted threads, and more! W...]]></description>
<link>https://tsecurity.de/de/3950391/tools/github-release-signalappsignal-desktop-v8270-beta2-03092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3950391/tools/github-release-signalappsignal-desktop-v8270-beta2-03092026/</guid>
<pubDate>Thu, 03 Sep 2026 21:46:34 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.27.0-beta.2" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.27.0-beta.2</span><span class="badge gh-badge gh-badge-date">03.09.2026</span><span class="badge gh-badge gh-badge-author">@jamiebuilds-signal</span></div><div class="github-feed-changelog"><ul>
<li>This update introduces more granular settings to give you significantly more control over your Signal notifications. Now you can choose what appears on the app badge, adjust notification preferences for muted threads, and more! We also added a convenient button to restore the default notification settings if you ever make so many changes that you don't even know how to get ahold of yourself anymore.</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v@signalapp/types@0.3.0 (28.08.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv@signalapp/types@0.3.028.08.2026@automated-signalPublish Packages]]></description>
<link>https://tsecurity.de/de/3949618/tools/github-release-signalappsignal-desktop-vsignalapptypes030-28082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3949618/tools/github-release-signalappsignal-desktop-vsignalapptypes030-28082026/</guid>
<pubDate>Thu, 03 Sep 2026 19:52:53 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/%40signalapp%2Ftypes%400.3.0" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v@signalapp/types@0.3.0</span><span class="badge gh-badge gh-badge-date">28.08.2026</span><span class="badge gh-badge gh-badge-author">@automated-signal</span></div><div class="github-feed-changelog"><p>Publish Packages</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v@signalapp/mock-server@27.0.0 (28.08.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv@signalapp/mock-server@27.0.028.08.2026@automated-signalPublish Packages]]></description>
<link>https://tsecurity.de/de/3949617/tools/github-release-signalappsignal-desktop-vsignalappmock-server2700-28082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3949617/tools/github-release-signalappsignal-desktop-vsignalappmock-server2700-28082026/</guid>
<pubDate>Thu, 03 Sep 2026 19:52:51 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/%40signalapp%2Fmock-server%4027.0.0" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v@signalapp/mock-server@27.0.0</span><span class="badge gh-badge gh-badge-date">28.08.2026</span><span class="badge gh-badge gh-badge-author">@automated-signal</span></div><div class="github-feed-changelog"><p>Publish Packages</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.26.0 (03.09.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.26.003.09.2026@jamiebuilds-signal
Finding yourself can be a lifelong process, but now you'll appear as "You" in the group member search to make it a little easier.]]></description>
<link>https://tsecurity.de/de/3949616/tools/github-release-signalappsignal-desktop-v8260-03092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3949616/tools/github-release-signalappsignal-desktop-v8260-03092026/</guid>
<pubDate>Thu, 03 Sep 2026 19:52:49 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.26.0" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.26.0</span><span class="badge gh-badge gh-badge-date">03.09.2026</span><span class="badge gh-badge gh-badge-author">@jamiebuilds-signal</span></div><div class="github-feed-changelog"><ul>
<li>Finding yourself can be a lifelong process, but now you'll appear as "You" in the group member search to make it a little easier.</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.27.0-beta.1 (03.09.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.27.0-beta.103.09.2026@jamiebuilds-signal
This update introduces more granular settings to give you significantly more control over your Signal notifications. Now you can choose what appears on the app badge, adjust notification preferences for muted threads, and more! W...]]></description>
<link>https://tsecurity.de/de/3949615/tools/github-release-signalappsignal-desktop-v8270-beta1-03092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3949615/tools/github-release-signalappsignal-desktop-v8270-beta1-03092026/</guid>
<pubDate>Thu, 03 Sep 2026 19:52:46 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.27.0-beta.1" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.27.0-beta.1</span><span class="badge gh-badge gh-badge-date">03.09.2026</span><span class="badge gh-badge gh-badge-author">@jamiebuilds-signal</span></div><div class="github-feed-changelog"><ul>
<li>This update introduces more granular settings to give you significantly more control over your Signal notifications. Now you can choose what appears on the app badge, adjust notification preferences for muted threads, and more! We also added a convenient button to restore the default notification settings if you ever make so many changes that you don't even know how to get ahold of yourself anymore.</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: Firefox Profiler Deployment (September 3, 2026)]]></title>
<description><![CDATA[The latest version of the Firefox Profiler is now live! Check out the full changelog below to see what’s changed: Highlights: [Andrew Creskey] Show which network requests were prefetched (#6259) [Florian Quèze] profiler-cli: accept --limit 0 as unlimited, and make truncation loud (#6267) Other Ch...]]></description>
<link>https://tsecurity.de/de/3949609/tools/firefox-tooling-announcements-firefox-profiler-deployment-september-3-2026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3949609/tools/firefox-tooling-announcements-firefox-profiler-deployment-september-3-2026/</guid>
<pubDate>Thu, 03 Sep 2026 19:52:27 +0200</pubDate>
<content:encoded><![CDATA[<p>The latest version of the Firefox Profiler is now live! Check out the full changelog below to see what’s changed: Highlights: [Andrew Creskey] Show which network requests were prefetched (#6259) [Florian Quèze] profiler-cli: accept --limit 0 as unlimited, and make truncation loud (#6267) Other Changes: [Nazım Can Altınova] Update oxfmt 0.59.0 →... <a href="https://discourse.mozilla.org/t/firefox-profiler-deployment-september-3-2026/149360" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.7 (03.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.703.09.2026@can1357fix(coding-agent/tiny): derived worker log path from runtime dir, not…]]></description>
<link>https://tsecurity.de/de/3948872/tools/github-release-can1357oh-my-pi-v1817-03092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3948872/tools/github-release-can1357oh-my-pi-v1817-03092026/</guid>
<pubDate>Thu, 03 Sep 2026 18:20:01 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.7" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.7</span><span class="badge gh-badge gh-badge-date">03.09.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>fix(coding-agent/tiny): derived worker log path from runtime dir, not…</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Thunderbird Desktop New Protocol Support: Microsoft Graph API]]></title>
<description><![CDATA[As many of you know, Microsoft will be disabling Exchange Web Services (EWS) support on its Microsoft 365 platform later this year. The Thunderbird Desktop team has been hard at work to ensure continuity of functionality through this transition, and today we are pleased to announce the release of...]]></description>
<link>https://tsecurity.de/de/3940558/tools/thunderbird-desktop-new-protocol-support-microsoft-graph-api/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3940558/tools/thunderbird-desktop-new-protocol-support-microsoft-graph-api/</guid>
<pubDate>Wed, 02 Sep 2026 22:20:35 +0200</pubDate>
<content:encoded><![CDATA[<p>As many of you know, Microsoft will be disabling Exchange Web Services (EWS) support on its Microsoft 365 platform later this year. The Thunderbird Desktop team has been hard at work to ensure continuity of functionality through this transition, and today we are pleased to announce the release of native Thunderbird support for the Microsoft Graph... <a href="https://blog.thunderbird.net/2026/09/thunderbird-desktop-new-protocol-support-microsoft-graph-api/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.4 (02.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.402.09.2026@can1357chore: bump version to 18.1.4]]></description>
<link>https://tsecurity.de/de/3939658/tools/github-release-can1357oh-my-pi-v1814-02092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3939658/tools/github-release-can1357oh-my-pi-v1814-02092026/</guid>
<pubDate>Wed, 02 Sep 2026 19:05:55 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.4" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.4</span><span class="badge gh-badge gh-badge-date">02.09.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.1.4</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.3 (02.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.302.09.2026@can1357fix: bazel builds]]></description>
<link>https://tsecurity.de/de/3938188/tools/github-release-can1357oh-my-pi-v1813-02092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3938188/tools/github-release-can1357oh-my-pi-v1813-02092026/</guid>
<pubDate>Wed, 02 Sep 2026 15:43:53 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.3" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.3</span><span class="badge gh-badge gh-badge-date">02.09.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>fix: bazel builds</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[AI on your terms: Firefox meets you where you are]]></title>
<description><![CDATA[People feel differently about AI, and here at Firefox, we think that is completely reasonable. Something else that is completely reasonable: deciding for yourself how and when you engage with AI features.For some of you, AI is part of your everyday life, whether you are using it to summarize a la...]]></description>
<link>https://tsecurity.de/de/3938184/tools/ai-on-your-terms-firefox-meets-you-where-you-are/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3938184/tools/ai-on-your-terms-firefox-meets-you-where-you-are/</guid>
<pubDate>Wed, 02 Sep 2026 15:43:39 +0200</pubDate>
<content:encoded><![CDATA[<p>People feel differently about AI, and here at Firefox, we think that is completely reasonable. Something else that is completely reasonable: deciding for yourself how and when you engage with AI features.For some of you, AI is part of your everyday life, whether you are using it to summarize a large amount of information, brainstorm ideas for... <a href="https://blog.mozilla.org/en/firefox/firefox-ai-on-your-terms/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[curl 8.22.0]]></title>
<description><![CDATA[Welcome to this new release. Get it as always from https://curl.se. If you rather want a security-patched older release branch, stay tuned for the follow-up Rock-solid curl announcement within a few days. Release presentation Numbers the 276th release6 changes70 days (total: 10,887)302 bugfixes (...]]></description>
<link>https://tsecurity.de/de/3935531/tools/curl-8220/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3935531/tools/curl-8220/</guid>
<pubDate>Wed, 02 Sep 2026 11:47:02 +0200</pubDate>
<content:encoded><![CDATA[<p>Welcome to this new release. Get it as always from https://curl.se. If you rather want a security-patched older release branch, stay tuned for the follow-up Rock-solid curl announcement within a few days. Release presentation Numbers the 276th release6 changes70 days (total: 10,887)302 bugfixes (total: 14,489)525 commits (total: 39,608)0 new... <a href="https://daniel.haxx.se/blog/2026/09/02/curl-8-22-0/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Developer Experience: Firefox WebDriver Newsletter 155]]></title>
<description><![CDATA[WebDriver is a remote control interface that enables introspection and control of user agents. As such, it can help developers to verify that their websites are working and performing well with all major browsers. The protocol is standardized by the W3C and consists of two separate specifications...]]></description>
<link>https://tsecurity.de/de/3928482/tools/firefox-developer-experience-firefox-webdriver-newsletter-155/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3928482/tools/firefox-developer-experience-firefox-webdriver-newsletter-155/</guid>
<pubDate>Tue, 01 Sep 2026 19:09:58 +0200</pubDate>
<content:encoded><![CDATA[<p>WebDriver is a remote control interface that enables introspection and control of user agents. As such, it can help developers to verify that their websites are working and performing well with all major browsers. The protocol is standardized by the W3C and consists of two separate specifications: WebDriver classic (HTTP) and the new WebDriver... <a href="https://fxdx.dev/firefox-webdriver-newsletter-155/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.1.1 (01.09.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.1.101.09.2026@can1357chore: bump version to 18.1.1]]></description>
<link>https://tsecurity.de/de/3926854/tools/github-release-can1357oh-my-pi-v1811-01092026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3926854/tools/github-release-can1357oh-my-pi-v1811-01092026/</guid>
<pubDate>Tue, 01 Sep 2026 18:06:53 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.1.1" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.1.1</span><span class="badge gh-badge gh-badge-date">01.09.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.1.1</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Privacy Blog: Browsers compete on privacy. When the operating system allows.]]></title>
<description><![CDATA[For more than two decades, Mozilla has advocated for an internet where people, not powerful platforms, determine how technology works for them. Meaningful consumer choice requires more than the ability to select a browser. People should also be able to choose what their browser can do, from the p...]]></description>
<link>https://tsecurity.de/de/3926850/tools/mozilla-privacy-blog-browsers-compete-on-privacy-when-the-operating-system-allows/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3926850/tools/mozilla-privacy-blog-browsers-compete-on-privacy-when-the-operating-system-allows/</guid>
<pubDate>Tue, 01 Sep 2026 18:06:50 +0200</pubDate>
<content:encoded><![CDATA[<p>For more than two decades, Mozilla has advocated for an internet where people, not powerful platforms, determine how technology works for them. Meaningful consumer choice requires more than the ability to select a browser. People should also be able to choose what their browser can do, from the privacy protections it provides to the ways they can... <a href="https://blog.mozilla.org/netpolicy/2026/09/01/browsers-compete-on-privacy-when-the-operating-system-allows/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Introducing Ad Blocker for Firefox on iOS: More Control, Fewer Distractions]]></title>
<description><![CDATA[There’s only so much room on your screen. Pop-ups, overlays, and ads can take over fast, getting between you and what you came to do.



That’s where Ad Blocker for Firefox on iOS comes in: a built-in option that blocks many third-party ads and ad-related trackers before they load, helping reduce...]]></description>
<link>https://tsecurity.de/de/3926849/tools/introducing-ad-blocker-for-firefox-on-ios-more-control-fewer-distractions/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3926849/tools/introducing-ad-blocker-for-firefox-on-ios-more-control-fewer-distractions/</guid>
<pubDate>Tue, 01 Sep 2026 18:06:49 +0200</pubDate>
<content:encoded><![CDATA[<p>There’s only so much room on your screen. Pop-ups, overlays, and ads can take over fast, getting between you and what you came to do.</p>



<p>That’s where Ad Blocker for Firefox on iOS comes in: a built-in option that blocks many third-party ads and ad-related trackers before they load, helping reduce clutter and distractions while you browse.  </p>



<figure class="wp-block-video"><video controls src="https://blog.mozilla.org/wp-content/blogs.dir/278/files/2026/08/ENG_Firefox_AdBlocker_16x9_Long.mp4" preload="none"></video></figure>



<h2 class="wp-block-heading"><br><strong>How it works</strong></h2>



<p>Ad Blocker uses Apple’s WebKit Content Blocker technology and the EasyList filter list to determine what gets blocked. There’s no separate extension to install, and you can turn it on in Settings &gt; Browsing &gt; Ad Blocker. It’s off by default, so you decide whether to use it.</p>



<p>Ad Blocker won’t block every ad. Ads served directly by the site you’re visiting and ads shown in search results will still appear. Sponsored shortcuts and other sponsored content shown by Firefox when you open a new tab are separate from ads on the web pages you visit, so Ad Blocker doesn’t affect them.</p>



<p>Ad Blocker works alongside the privacy protections already built into Firefox, including <a href="https://support.mozilla.org/en-US/kb/enhanced-tracking-protection-firefox-ios">Enhanced Tracking Protection</a>, which blocks many trackers and limits tracking across the web. </p>



<h2 class="wp-block-heading"><strong>More control over how you experience the web</strong></h2>



<p>On Desktop and Android, Firefox already supports a strong ecosystem of <a href="https://addons.mozilla.org/en-US/firefox/">ad-blocking and privacy extensions</a>, giving people the flexibility to choose the tools that work best for them. We value that ecosystem and will keep supporting it.</p>



<p>iOS <a href="http://blog.mozilla.org/netpolicy/2026/09/01/browsers-compete-on-privacy-when-the-operating-system-allows">works differently</a>. Extensions aren’t available in the same way, and we know people want more options. Bringing ad blocking to Firefox on iOS meant building it directly into the browser. <br><br>Giving people choice in how they experience the web is important to us. Advertising helps fund much of the open web, supporting the publishers, creators and websites people rely on. We also know that ads can sometimes crowd the screen or interrupt what you’re trying to do.</p>



<p>That’s why Ad Blocker is optional: you decide whether it’s part of how you browse. It’s part of a broader approach across Firefox to give you more control over your experience, from the <a href="https://www.firefox.com/en-GB/features/add-ons/">extensions</a> you use to <a href="https://blog.mozilla.org/en/firefox/how-to-use-ai-controls/">how AI shows up</a> in your browser.</p>



<h2 class="wp-block-heading"><strong>Try it</strong></h2>



<p>To turn on Ad Blocker, go to Settings &gt; Browsing &gt; Ad Blocker.</p>



<p>If you find an ad you expected to be blocked, a site that behaves strangely or something we should improve, let us know on <a href="https://connect.mozilla.org/t5/discussions/ios-ad-blocker-experiment/m-p/133902/highlight/true#M53829">Mozilla Connect</a>. </p>



<p>Visit our <a href="https://support.mozilla.org/en-US/kb/block-ads-firefox-ios">Support page</a> for more details on Ad Blocker for Firefox on iOS. For more on Firefox’s built-in privacy protections, check out <a href="https://www.firefox.com/en-US/user-privacy/">How Firefox Protects Your Data</a>.</p>
<p>The post <a href="https://blog.mozilla.org/en/firefox/ad-blocker-on-ios/">Introducing Ad Blocker for Firefox on iOS: More Control, Fewer Distractions</a> appeared first on <a href="https://blog.mozilla.org/en/">The Mozilla Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Localization (L10N): Minding My Language: My Internship Story]]></title>
<description><![CDATA[Hello everyone! It’s Jamie. My internship at Mozilla is quite unfortunately coming to an end, after which I will be heading back to study at the University of Toronto. In this post, I want to share a rundown of my story working on the Localization (L10N) team, break down the projects I built, and...]]></description>
<link>https://tsecurity.de/de/3912577/tools/mozilla-localization-l10n-minding-my-language-my-internship-story/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3912577/tools/mozilla-localization-l10n-minding-my-language-my-internship-story/</guid>
<pubDate>Mon, 31 Aug 2026 22:34:42 +0200</pubDate>
<content:encoded><![CDATA[<p>Hello everyone! It’s Jamie. My internship at Mozilla is quite unfortunately coming to an end, after which I will be heading back to study at the University of Toronto. In this post, I want to share a rundown of my story working on the Localization (L10N) team, break down the projects I built, and reflect on what made this experience so special.... <a href="https://blog.mozilla.org/l10n/2026/08/31/minding-my-language-my-internship-story/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Privacy Blog: How Challengers Thrive and Competition Survives In Today’s Ecosystem]]></title>
<description><![CDATA[The web should be a place where people can choose how they connect, which tools they use, and who they trust. At Mozilla, we live these values, prioritizing products that ensure users can control their experience and that the web remains a global public resource. Challengers across the tech ecosy...]]></description>
<link>https://tsecurity.de/de/3912576/tools/mozilla-privacy-blog-how-challengers-thrive-and-competition-survives-in-todays-ecosystem/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3912576/tools/mozilla-privacy-blog-how-challengers-thrive-and-competition-survives-in-todays-ecosystem/</guid>
<pubDate>Mon, 31 Aug 2026 22:34:41 +0200</pubDate>
<content:encoded><![CDATA[<p>The web should be a place where people can choose how they connect, which tools they use, and who they trust. At Mozilla, we live these values, prioritizing products that ensure users can control their experience and that the web remains a global public resource. Challengers across the tech ecosystem provide these competitive opportunities, but... <a href="https://blog.mozilla.org/netpolicy/2026/08/31/how-challengers-thrive-and-competition-survives-in-todays-ecosystem/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Servo Blog: July in Servo: more platforms, faster canvas, web fonts in SVG, and more!]]></title>
<description><![CDATA[Servo 0.5.0 contains all of the changes we landed in July, which came out to 488 commits, and we now publish binaries for Linux aarch64 (@mukilan, #46760)! DOM text selections are now visible (@mrobinson, @SimonSapin, #46698, #46864, #46742, #46889, #46126). Interactive selection is coming soon! ...]]></description>
<link>https://tsecurity.de/de/3898994/tools/the-servo-blog-july-in-servo-more-platforms-faster-canvas-web-fonts-in-svg-and-more/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3898994/tools/the-servo-blog-july-in-servo-more-platforms-faster-canvas-web-fonts-in-svg-and-more/</guid>
<pubDate>Mon, 31 Aug 2026 13:39:58 +0200</pubDate>
<content:encoded><![CDATA[<p>Servo 0.5.0 contains all of the changes we landed in July, which came out to 488 commits, and we now publish binaries for Linux aarch64 (@mukilan, #46760)! DOM text selections are now visible (@mrobinson, @SimonSapin, #46698, #46864, #46742, #46889, #46126). Interactive selection is coming soon! For security fixes, see § Security. We’ve shipped... <a href="https://servo.org/blog/2026/08/31/july-in-servo/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.0.10 (28.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.0.1028.08.2026@can1357chore: bump version to 18.0.10]]></description>
<link>https://tsecurity.de/de/3833322/tools/github-release-can1357oh-my-pi-v18010-28082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3833322/tools/github-release-can1357oh-my-pi-v18010-28082026/</guid>
<pubDate>Fri, 28 Aug 2026 20:26:42 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.0.10" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.0.10</span><span class="badge gh-badge gh-badge-date">28.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.0.10</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.0.9 (28.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.0.928.08.2026@can1357fix(ci): tolerated newer lint names in bazel clippy and scoped pi-vcs…]]></description>
<link>https://tsecurity.de/de/3820584/tools/github-release-can1357oh-my-pi-v1809-28082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3820584/tools/github-release-can1357oh-my-pi-v1809-28082026/</guid>
<pubDate>Fri, 28 Aug 2026 06:39:17 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.0.9" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.0.9</span><span class="badge gh-badge gh-badge-date">28.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>fix(ci): tolerated newer lint names in bazel clippy and scoped pi-vcs…</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Performance Blog: The Road to Better Performance Profiles – Part 2]]></title>
<description><![CDATA[Following the symbolication work from Part 1, I undertook two more efforts to improve performance profiles for the Performance team. Native Profiling (Bugs 2030161, 2030166, 2047451, and 2030423) The first effort was to use platform-specific profilers to generate profiles in CI of browsers runnin...]]></description>
<link>https://tsecurity.de/de/3815612/tools/mozilla-performance-blog-the-road-to-better-performance-profiles-part-2/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3815612/tools/mozilla-performance-blog-the-road-to-better-performance-profiles-part-2/</guid>
<pubDate>Fri, 28 Aug 2026 00:55:04 +0200</pubDate>
<content:encoded><![CDATA[<p>Following the symbolication work from Part 1, I undertook two more efforts to improve performance profiles for the Performance team. Native Profiling (Bugs 2030161, 2030166, 2047451, and 2030423) The first effort was to use platform-specific profilers to generate profiles in CI of browsers running the Speedometer 3 benchmark, the industry-leading... <a href="https://blog.mozilla.org/performance/2026/08/26/the-road-to-better-performance-profiles-part-2/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: MozPhab 2.18.0 Released]]></title>
<description><![CDATA[Bugs resolved in Moz-Phab 2.18.0: bug 1898339 moz-phab incorrectly uploads symlinks as text files when using Mercurial bug 2063674 Consider reminding people of their review queue when they push to try or moz-phab bug 2064223 Add pyrefly type checking to moz-phab test suite Discuss these changes i...]]></description>
<link>https://tsecurity.de/de/3811827/tools/firefox-tooling-announcements-mozphab-2180-released/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3811827/tools/firefox-tooling-announcements-mozphab-2180-released/</guid>
<pubDate>Thu, 27 Aug 2026 22:24:38 +0200</pubDate>
<content:encoded><![CDATA[<p>Bugs resolved in Moz-Phab 2.18.0: bug 1898339 moz-phab incorrectly uploads symlinks as text files when using Mercurial bug 2063674 Consider reminding people of their review queue when they push to try or moz-phab bug 2064223 Add pyrefly type checking to moz-phab test suite Discuss these changes in #engineering-workflow on Slack or #Conduit Matrix.... <a href="https://discourse.mozilla.org/t/mozphab-2-18-0-released/149287" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.0.8 (27.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.0.827.08.2026@can1357chore: bump version to 18.0.8]]></description>
<link>https://tsecurity.de/de/3808989/tools/github-release-can1357oh-my-pi-v1808-27082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3808989/tools/github-release-can1357oh-my-pi-v1808-27082026/</guid>
<pubDate>Thu, 27 Aug 2026 19:36:38 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.0.8" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.0.8</span><span class="badge gh-badge gh-badge-date">27.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.0.8</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Serge Guelton: Pros and Cons of Unified Build]]></title>
<description><![CDATA[Unified builds (also know as Jumbo Builds) is a build techniques that aims at improving build time through the concatenation of several sources as a single unified source before compilation. The goal is obtained through implicit caching of header instantiation, although it implies a trade-off wit...]]></description>
<link>https://tsecurity.de/de/3802216/tools/serge-guelton-pros-and-cons-of-unified-build/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3802216/tools/serge-guelton-pros-and-cons-of-unified-build/</guid>
<pubDate>Thu, 27 Aug 2026 13:20:31 +0200</pubDate>
<content:encoded><![CDATA[<p>Unified builds (also know as Jumbo Builds) is a build techniques that aims at improving build time through the concatenation of several sources as a single unified source before compilation. The goal is obtained through implicit caching of header instantiation, although it implies a trade-off with parallelism. Let&#039;s illustrate this behavior... <a href="http://serge-sans-paille.github.io/pythran-stories/pros-and-cons-of-unified-build.html" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.0.7 (26.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.0.726.08.2026@can1357chore: bump version to 18.0.7]]></description>
<link>https://tsecurity.de/de/3786420/tools/github-release-can1357oh-my-pi-v1807-26082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3786420/tools/github-release-can1357oh-my-pi-v1807-26082026/</guid>
<pubDate>Wed, 26 Aug 2026 22:21:19 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.0.7" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.0.7</span><span class="badge gh-badge gh-badge-date">26.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.0.7</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.26.0-beta.1 (26.08.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.26.0-beta.126.08.2026@ayumi-signal
Finding yourself can be a lifelong process, but now you'll appear as "You" in the group member search to make it a little easier.]]></description>
<link>https://tsecurity.de/de/3785269/tools/github-release-signalappsignal-desktop-v8260-beta1-26082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3785269/tools/github-release-signalappsignal-desktop-v8260-beta1-26082026/</guid>
<pubDate>Wed, 26 Aug 2026 21:50:07 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.26.0-beta.1" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.26.0-beta.1</span><span class="badge gh-badge gh-badge-date">26.08.2026</span><span class="badge gh-badge gh-badge-author">@ayumi-signal</span></div><div class="github-feed-changelog"><ul>
<li>Finding yourself can be a lifelong process, but now you'll appear as "You" in the group member search to make it a little easier.</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.25.0 (26.08.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.25.026.08.2026@ayumi-signal
We added two new zoom levels in the appearance settings, so even with very little effort you can still give your messages 110% (or 90%).]]></description>
<link>https://tsecurity.de/de/3781964/tools/github-release-signalappsignal-desktop-v8250-26082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3781964/tools/github-release-signalappsignal-desktop-v8250-26082026/</guid>
<pubDate>Wed, 26 Aug 2026 20:07:52 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.25.0" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.25.0</span><span class="badge gh-badge gh-badge-date">26.08.2026</span><span class="badge gh-badge gh-badge-author">@ayumi-signal</span></div><div class="github-feed-changelog"><ul>
<li>We added two new zoom levels in the appearance settings, so even with very little effort you can still give your messages 110% (or 90%).</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.0.6 (26.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.0.626.08.2026@can1357chore: bump version to 18.0.6]]></description>
<link>https://tsecurity.de/de/3771838/tools/github-release-can1357oh-my-pi-v1806-26082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3771838/tools/github-release-can1357oh-my-pi-v1806-26082026/</guid>
<pubDate>Wed, 26 Aug 2026 10:18:37 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.0.6" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.0.6</span><span class="badge gh-badge gh-badge-date">26.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.0.6</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Nightly: Icons! Lots of them! – These Weeks in Firefox: Issue 206]]></title>
<description><![CDATA[Highlights Starting in Firefox 154, we’ve added a new capability for changing the default browser icon for Windows (Windows-only, for now, and not MSIX / Store installs) in about:settings#appearance! Notice any bugs? File them here! Hubert Boma Manilla continued his work to handle CSS files in th...]]></description>
<link>https://tsecurity.de/de/3768557/tools/firefox-nightly-icons-lots-of-them-these-weeks-in-firefox-issue-206/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3768557/tools/firefox-nightly-icons-lots-of-them-these-weeks-in-firefox-issue-206/</guid>
<pubDate>Tue, 25 Aug 2026 22:50:20 +0200</pubDate>
<content:encoded><![CDATA[<p>Highlights Starting in Firefox 154, we’ve added a new capability for changing the default browser icon for Windows (Windows-only, for now, and not MSIX / Store installs) in about:settings#appearance! Notice any bugs? File them here! Hubert Boma Manilla continued his work to handle CSS files in the Debugger (#2036376, #2037041). The feature can now... <a href="https://blog.nightly.mozilla.org/2026/08/25/icons-lots-of-them-these-weeks-in-firefox-issue-206/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.0.5 (25.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.0.525.08.2026@can1357chore: bump version to 18.0.5]]></description>
<link>https://tsecurity.de/de/3766695/tools/github-release-can1357oh-my-pi-v1805-25082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3766695/tools/github-release-can1357oh-my-pi-v1805-25082026/</guid>
<pubDate>Tue, 25 Aug 2026 17:48:43 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.0.5" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.0.5</span><span class="badge gh-badge gh-badge-date">25.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.0.5</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Jonathan Almeida: SSH access to Github over HTTPS]]></title>
<description><![CDATA[While using guest wifi during travels, I was trying to fetch some changes from a github remote and my git fetch is over SSH which happens over port 22. Most (TCP?) ports are blocked on public or hotel wifi, so with some help1 I learnt that Github serves SSH over 443 too. A simple ssh config fixes...]]></description>
<link>https://tsecurity.de/de/3761570/tools/jonathan-almeida-ssh-access-to-github-over-https/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3761570/tools/jonathan-almeida-ssh-access-to-github-over-https/</guid>
<pubDate>Tue, 25 Aug 2026 01:19:58 +0200</pubDate>
<content:encoded><![CDATA[<p>While using guest wifi during travels, I was trying to fetch some changes from a github remote and my git fetch is over SSH which happens over port 22. Most (TCP?) ports are blocked on public or hotel wifi, so with some help1 I learnt that Github serves SSH over 443 too. A simple ssh config fixes this: Host github.com HostName ssh.github.com Port... <a href="https://jonalmeida.com/til/github-serves-ssh-over-tls-port/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: Happy BMO Push Day! (20260824.1)]]></title>
<description><![CDATA[Github Link The following changes have been pushed to bugzilla.mozilla.org: Bug 1224099 - create 2fa user documentation Bug 1832783 - Wrong error message for exceeding file size Bug 2064475 - phab-bot leaves #release-managers review as non-blocking when a user manually adds it first Bug 2043229 -...]]></description>
<link>https://tsecurity.de/de/3761569/tools/firefox-tooling-announcements-happy-bmo-push-day-202608241/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3761569/tools/firefox-tooling-announcements-happy-bmo-push-day-202608241/</guid>
<pubDate>Tue, 25 Aug 2026 01:19:58 +0200</pubDate>
<content:encoded><![CDATA[<p>Github Link The following changes have been pushed to bugzilla.mozilla.org: Bug 1224099 - create 2fa user documentation Bug 1832783 - Wrong error message for exceeding file size Bug 2064475 - phab-bot leaves #release-managers review as non-blocking when a user manually adds it first Bug 2043229 - Display a “Show External” button beneath... <a href="https://discourse.mozilla.org/t/happy-bmo-push-day-20260824-1/149251" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[William Lachance: Writing the Docs: 2026 Edition]]></title>
<description><![CDATA[It's been about 5 years since I was working heavily on documentation and metadata at Mozilla. I wrote a bunch about this at the time: A principled reorganization of docs.telemetry.mozilla.org (May 2020) Mozilla Telemetry in 2020: From “Just Firefox” to a “Galaxy of Data” (July 2020) The Glean Dic...]]></description>
<link>https://tsecurity.de/de/3759286/tools/william-lachance-writing-the-docs-2026-edition/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3759286/tools/william-lachance-writing-the-docs-2026-edition/</guid>
<pubDate>Mon, 24 Aug 2026 19:03:12 +0200</pubDate>
<content:encoded><![CDATA[<p>It&#039;s been about 5 years since I was working heavily on documentation and metadata at Mozilla. I wrote a bunch about this at the time: A principled reorganization of docs.telemetry.mozilla.org (May 2020) Mozilla Telemetry in 2020: From “Just Firefox” to a “Galaxy of Data” (July 2020) The Glean Dictionary (January 2021). I don&#039;t think I ever wrote... <a href="https://wrla.ch/log/2026/08/writing-the-docs-2026-edition/?utm_source=mozilla&amp;utm_medium=RSS" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[William Lachance: Glean Dictionary + DuckDB]]></title>
<description><![CDATA[While working on Writing the Docs: 2026 Edition, I experimented a bit with updating the Glean Dictionary to incorporate some of the ideas in the essay, in particular those around reference documentation. As a sort of demonstration that documentation about an application can be treated as a data p...]]></description>
<link>https://tsecurity.de/de/3759285/tools/william-lachance-glean-dictionary-duckdb/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3759285/tools/william-lachance-glean-dictionary-duckdb/</guid>
<pubDate>Mon, 24 Aug 2026 19:03:11 +0200</pubDate>
<content:encoded><![CDATA[<p>While working on Writing the Docs: 2026 Edition, I experimented a bit with updating the Glean Dictionary to incorporate some of the ideas in the essay, in particular those around reference documentation. As a sort of demonstration that documentation about an application can be treated as a data product in and of itself, I hacked up a quick ETL... <a href="https://wrla.ch/log/2026/08/glean-dictionary-duckdb/?utm_source=mozilla&amp;utm_medium=RSS" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hacks.Mozilla.Org: Intent to Ship: JPEG XL]]></title>
<description><![CDATA[It isn’t often that new image formats land in browsers. In the early 2000s we had JPEG, GIF, and PNG. The 2010s gave us WebP, which was a modest step up from JPEG. But the 2020s have given us two new image formats that are a big step up from previous formats: AVIF and JPEG XL. We shipped AVIF bac...]]></description>
<link>https://tsecurity.de/de/3759284/tools/hacksmozillaorg-intent-to-ship-jpeg-xl/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3759284/tools/hacksmozillaorg-intent-to-ship-jpeg-xl/</guid>
<pubDate>Mon, 24 Aug 2026 19:03:10 +0200</pubDate>
<content:encoded><![CDATA[<p>It isn’t often that new image formats land in browsers. In the early 2000s we had JPEG, GIF, and PNG. The 2010s gave us WebP, which was a modest step up from JPEG. But the 2020s have given us two new image formats that are a big step up from previous formats: AVIF and JPEG XL. We shipped AVIF back in 2021, and today we posted our intent to ship... <a href="https://hacks.mozilla.org/2026/08/intent-to-ship-jpeg-xl/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.0.3 (23.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.0.323.08.2026@can1357chore: bump version to 18.0.3]]></description>
<link>https://tsecurity.de/de/3752652/tools/github-release-can1357oh-my-pi-v1803-23082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3752652/tools/github-release-can1357oh-my-pi-v1803-23082026/</guid>
<pubDate>Sun, 23 Aug 2026 10:56:00 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.0.3" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.0.3</span><span class="badge gh-badge gh-badge-date">23.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.0.3</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.0.2 (23.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.0.223.08.2026@can1357chore: bump version to 18.0.2]]></description>
<link>https://tsecurity.de/de/3752229/tools/github-release-can1357oh-my-pi-v1802-23082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3752229/tools/github-release-can1357oh-my-pi-v1802-23082026/</guid>
<pubDate>Sun, 23 Aug 2026 07:47:49 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.0.2" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.0.2</span><span class="badge gh-badge gh-badge-date">23.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.0.2</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.0.1 (23.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.0.123.08.2026@can1357
The resize replay logic now tracks both width and height and clears the previous replay size before re-offering history.
A new encodeKittyDeleteAllImages function is used during destructive resets to remove all Kitty graphics.
Tests were updated to reflec...]]></description>
<link>https://tsecurity.de/de/3752075/tools/github-release-can1357oh-my-pi-v1801-23082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3752075/tools/github-release-can1357oh-my-pi-v1801-23082026/</guid>
<pubDate>Sun, 23 Aug 2026 04:48:05 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.0.1" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.0.1</span><span class="badge gh-badge gh-badge-date">23.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><ul>
<li>The resize replay logic now tracks both width and height and clears the previous replay size before re-offering history.</li>
<li>A new encodeKittyDeleteAllImages function is used during destructive resets to remove all Kitty graphics.</li>
<li>Tests were updated to reflect the new resize behavior and image deletion semantics.</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v18.0.0 (22.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv18.0.022.08.2026@can1357chore: bump version to 18.0.0]]></description>
<link>https://tsecurity.de/de/3751215/tools/github-release-can1357oh-my-pi-v1800-22082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3751215/tools/github-release-can1357oh-my-pi-v1800-22082026/</guid>
<pubDate>Sat, 22 Aug 2026 11:27:09 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v18.0.0" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v18.0.0</span><span class="badge gh-badge gh-badge-date">22.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 18.0.0</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.4.4 (22.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.4.422.08.2026@can1357chore: bump version to 17.4.4]]></description>
<link>https://tsecurity.de/de/3749137/tools/github-release-can1357oh-my-pi-v1744-22082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3749137/tools/github-release-can1357oh-my-pi-v1744-22082026/</guid>
<pubDate>Sat, 22 Aug 2026 03:04:49 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.4.4" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.4.4</span><span class="badge gh-badge gh-badge-date">22.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 17.4.4</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.4.3 (21.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.4.321.08.2026@can1357chore: bump version to 17.4.3]]></description>
<link>https://tsecurity.de/de/3748562/tools/github-release-can1357oh-my-pi-v1743-21082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3748562/tools/github-release-can1357oh-my-pi-v1743-21082026/</guid>
<pubDate>Sat, 22 Aug 2026 00:02:32 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.4.3" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.4.3</span><span class="badge gh-badge gh-badge-date">21.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 17.4.3</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.4.2 (21.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.4.221.08.2026@can1357chore: bump version to 17.4.2]]></description>
<link>https://tsecurity.de/de/3747983/tools/github-release-can1357oh-my-pi-v1742-21082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3747983/tools/github-release-can1357oh-my-pi-v1742-21082026/</guid>
<pubDate>Fri, 21 Aug 2026 22:06:47 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.4.2" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.4.2</span><span class="badge gh-badge gh-badge-date">21.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 17.4.2</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Rust Programming Language Blog: Enabling the next-generation trait solver on nightly]]></title>
<description><![CDATA[After nearly 4 years of active development, the next-generation trait solver is close to stabilization. We are enabling it by default on nightly to surface any remaining issues and plan to stabilize it in the next months. This is the largest single change to the Rust compiler since its initial re...]]></description>
<link>https://tsecurity.de/de/3747508/tools/the-rust-programming-language-blog-enabling-the-next-generation-trait-solver-on-nightly/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3747508/tools/the-rust-programming-language-blog-enabling-the-next-generation-trait-solver-on-nightly/</guid>
<pubDate>Fri, 21 Aug 2026 19:04:52 +0200</pubDate>
<content:encoded><![CDATA[<p>After nearly 4 years of active development, the next-generation trait solver is close to stabilization. We are enabling it by default on nightly to surface any remaining issues and plan to stabilize it in the next months. This is the largest single change to the Rust compiler since its initial release. It completely replaces how we prove... <a href="https://blog.rust-lang.org/2026/08/21/enabling-next-solver-on-nightly/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.3.3 (14.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.3.314.08.2026@github-actions[bot]@oh-my-pi/pi-ai
Fixed

Distinguished Gemini thought-only STOP responses from empty transports, avoiding repeated identical reasoning requests and duplicate Antigravity endpoint streams while surfacing the missing final output for session-level ...]]></description>
<link>https://tsecurity.de/de/3746294/tools/github-release-can1357oh-my-pi-v1733-14082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746294/tools/github-release-can1357oh-my-pi-v1733-14082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:54:04 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.3.3" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.3.3</span><span class="badge gh-badge gh-badge-date">14.08.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-ai</h2>
<h3>Fixed</h3>
<ul>
<li>Distinguished Gemini thought-only <code>STOP</code> responses from empty transports, avoiding repeated identical reasoning requests and duplicate Antigravity endpoint streams while surfacing the missing final output for session-level recovery.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Fixed</h3>
<ul>
<li>Automatically continued Gemini turns that stopped after thinking without final output, using a bounded final-answer reminder instead of exhausting generic retries.</li>
<li>Retried Gemini <code>MALFORMED_FUNCTION_CALL</code> failures when every emitted tool call was proven unexecuted, while preserving real tool-result and visible-output replay guards.</li>
<li>Kept current terminal retry errors in one pinned banner with attempt context while surfacing local continuation failures instead of stale provider errors.</li>
</ul>
<h2>@oh-my-pi/hashline</h2>
<h3>Fixed</h3>
<ul>
<li>Recovered dangling range separators in hunk headers (<code>PUT 244.=:</code>, <code>CUT 5.=</code>) as single-line ranges (<code>N.=N</code>) instead of rejecting the header as an orphan payload line.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Gemini reports rendering their final headings and tables as one raw code block when the model emitted a lone closing Markdown fence without its opener.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(gemini): recover malformed, empty, and broken Markdown turns by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5147339298" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8493" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8493/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8493">#8493</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.3.2...v17.3.3">v17.3.2...v17.3.3</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.3.4 (14.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.3.414.08.2026@github-actions[bot]@oh-my-pi/pi-agent-core
Fixed

Fixed Codex-compatible V2 remote compaction with an explicit v2Endpoint by sending the required feature-negotiation header (#8524).

@oh-my-pi/pi-ai
Fixed

Fixed omp usage invalidate to discard stale OAuth and API...]]></description>
<link>https://tsecurity.de/de/3746293/tools/github-release-can1357oh-my-pi-v1734-14082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746293/tools/github-release-can1357oh-my-pi-v1734-14082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:54:04 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.3.4" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.3.4</span><span class="badge gh-badge gh-badge-date">14.08.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Codex-compatible V2 remote compaction with an explicit <code>v2Endpoint</code> by sending the required feature-negotiation header (<a href="https://github.com/can1357/oh-my-pi/issues/8524" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8524/hovercard">#8524</a>).</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>omp usage invalidate</code> to discard stale OAuth and API-key usage snapshots, then force a cache-bypassing, per-provider serialized refresh with a broker request budget sized for the full unfiltered account batch, so upgraded subscriptions do not silently retain pre-change quota data.</li>
<li>Fixed quota reporting and Cookie capture guidance for China (Beijing) Alibaba Token Plan credentials (<a href="https://github.com/can1357/oh-my-pi/issues/8509" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8509/hovercard">#8509</a>).</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added wire constants for Codex V2 remote-compaction feature negotiation.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed raw <code>COPILOT_GITHUB_TOKEN</code> credentials skipping plan-specific endpoint discovery, which routed GitHub Copilot Business model requests to the personal endpoint and returned HTTP 403. The GitHub Copilot model cache is now scoped per credential, so switching the token no longer serves another account's stale endpoint for the cache TTL (<a href="https://github.com/can1357/oh-my-pi/issues/8507" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8507/hovercard">#8507</a>).</li>
<li>Fixed the OpenRouter <code>deepseek/deepseek-v4-pro-0813</code> route silently clamping the reasoning effort to <code>high</code>: the dated SKU advertises (and accepts) the wire-exact <code>low</code>/<code>high</code>/<code>max</code> ladder, so its effort override no longer collapses to <code>high</code>-only. The undated <code>deepseek/deepseek-v4-pro</code> OpenRouter route stays <code>high</code>-only. (<a href="https://github.com/can1357/oh-my-pi/issues/8517" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8517/hovercard">#8517</a>)</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Changed</h3>
<ul>
<li>Replaced the MuPDF-WASM PDF document backend with <code>pdf-inspector</code> through <code>@oh-my-pi/pi-natives</code>, preserving cached text conversion and PDF line selectors while reporting pages that need OCR.</li>
<li>Restored <code>read &lt;pdf&gt;:</code> and <code>read &lt;pdf&gt;:&lt;image&gt;.png</code> page rendering by automatically capturing PDF pages through the headless Chromium browser tool.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Streamable HTTP MCP sessions being invalidated by opening the optional GET SSE stream before sending <code>notifications/initialized</code>, which prevented Figma Dev Mode MCP from connecting (<a href="https://github.com/can1357/oh-my-pi/issues/8514" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8514/hovercard">#8514</a>).</li>
<li>Fixed the <code>/hotkeys</code> table describing Ctrl+D (<code>app.exit</code>) as "Exit (when editor is empty)" when it actually exits unconditionally and saves the current prompt as a resumable draft (<a href="https://github.com/can1357/oh-my-pi/issues/8530" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8530/hovercard">#8530</a>).</li>
<li>Fixed Ctrl+G external editors failing to launch on Windows because Bun re-quoted the embedded <code>cmd.exe /c</code> command line (<a href="https://github.com/can1357/oh-my-pi/issues/8544" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8544/hovercard">#8544</a>).</li>
</ul>
<h2>@oh-my-pi/pi-mnemopi</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>recall()</code> silently dropping <code>scope='global'</code> rows whenever a <code>channelId</code> filter was active: <code>buildWhere()</code> appended a redundant hard <code>channel_id = ?</code> clause on top of the <code>(session_id = ? OR scope = 'global' OR channel_id = ?)</code> visibility clause, so global rows whose <code>channel_id</code> didn't match (e.g. imported rows with <code>channel_id NULL</code>) were excluded. Channel isolation is preserved by the visibility clause alone. This made imported/global episodic memory permanently unrecallable through callers that always pass a channel (such as the coding-agent memory backend). (<a href="https://github.com/can1357/oh-my-pi/issues/8525" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8525/hovercard">#8525</a>)</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Added</h3>
<ul>
<li>Added the async <code>pdfToMarkdown</code> native API backed by <code>pdf-inspector</code>, with page numbering, page-count, OCR-needed-page, and encoding-issue metadata.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Docker images (<code>Dockerfile</code>, <code>scripts/install-tests/*.dockerfile</code>) build the native addon through the cargo/napi-rs backend (<code>OMP_NATIVE_BUILD_BACKEND=cargo</code>) instead of Bazel: a single fixed host target gains nothing from hermetic cross toolchains, and none of those images shipped bazelisk. <code>OMP_NATIVE_CARGO_PROFILE</code> picks the profile for that path (images use <code>ci</code>, local default stays <code>local</code>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed the root Cargo workspace failing to load when a stale directory exists under <code>crates/</code> — e.g. a deleted crate whose directory survived <code>git reset --hard</code>. <code>members</code> no longer globs <code>crates/pi-*</code>, so a directory without a <code>Cargo.toml</code> can no longer break every cargo and Bazel build.</li>
<li>Fixed Docker build contexts shipping nested build output: <code>.dockerignore</code> patterns are anchored at the context root, so bare <code>target/</code> and <code>dist/</code> matched neither <code>go-port/*/target</code> (~1.4 GB) nor <code>packages/*/dist</code> (~600 MB).</li>
<li>Fixed <code>deviceCheckGenerateToken</code> aborting the whole process with <code>SIGTRAP</code> when called from a macOS session without GUI/graphic access (SSH, a launchd <code>LaunchDaemon</code>, a CI runner, a service account, a sandbox), which made every <code>openai-codex/*</code> OAuth model unusable for such accounts. <code>-[DCDevice isSupported]</code> synchronously opens an XPC connection to the per-user DeviceCheck metadata daemon, which exists only in an interactive GUI login session; without one the connection setup hits <code>_xpc_api_misuse</code> and traps before any completion handler runs, so the promise never rejects. The binding now checks the caller's security session for the <code>sessionHasGraphicAccess</code> attribute first and resolves <code>{ supported: false, error: … }</code> instead of touching DeviceCheck when it is absent (<a href="https://github.com/can1357/oh-my-pi/issues/8353" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8353/hovercard">#8353</a>).</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed a terminal Device-Attributes reply leaking into the composer as literal text (e.g. <code>1;22;…;52c</code>) when it arrived after the startup capability-probe sentinel FIFO drained, a race made observable by the added latency of an SSH/zmx PTY chain. DA1 replies (<code>CSI ? … c</code>) and split private-CSI responses are now consumed for the whole session lifetime, not only while a probe sentinel is outstanding (<a href="https://github.com/can1357/oh-my-pi/issues/8542" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8542/hovercard">#8542</a>).</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(catalog): discover Copilot endpoint for env tokens by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5148396983" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8510" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8510/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8510">#8510</a></li>
<li>fix(ai): restore Beijing Token Plan quota reporting by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5148448108" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8513" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8513/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8513">#8513</a></li>
<li>fix(mcp): initialize sessions before opening sse stream by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5148665081" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8515" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8515/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8515">#8515</a></li>
<li>fix(catalog): grant low/high/max to OpenRouter deepseek-v4-pro-0813 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5148913864" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8519" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8519/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8519">#8519</a></li>
<li>fix(mnemopi): keep global rows recallable under channelId filter by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5149149447" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8526" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8526/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8526">#8526</a></li>
<li>fix(agent): add Codex V2 compaction feature header by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5149152598" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8527" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8527/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8527">#8527</a></li>
<li>docs: correct /hotkeys Ctrl+D copy to match save-draft-and-exit by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5149798333" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8531" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8531/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8531">#8531</a></li>
<li>fix(pi-natives): guard DeviceCheck token generation on GUI session by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5149980929" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8533" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8533/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8533">#8533</a></li>
<li>fix(tui): swallow late DA responses for the whole session by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5150925086" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8543" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8543/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8543">#8543</a></li>
<li>fix(coding-agent): restore Windows external editor launch by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5151142306" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8546" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8546/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8546">#8546</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.3.3...v17.3.4">v17.3.3...v17.3.4</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.3.5 (16.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.3.516.08.2026@github-actions[bot]@oh-my-pi/pi-agent-core
Added

Added automatic retry support for transient provider failures during one-shot completions, allowing callers such as compaction to opt in to resilient request handling.

Fixed

Fixed /handoff, branch summarization,...]]></description>
<link>https://tsecurity.de/de/3746292/tools/github-release-can1357oh-my-pi-v1735-16082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746292/tools/github-release-can1357oh-my-pi-v1735-16082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:54:03 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.3.5" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.3.5</span><span class="badge gh-badge gh-badge-date">16.08.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Added</h3>
<ul>
<li>Added automatic retry support for transient provider failures during one-shot completions, allowing callers such as compaction to opt in to resilient request handling.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed /handoff, branch summarization, and manual /compact failing outright on transient provider errors (e.g. Anthropic overloaded/429/529 responses); these operations now retry automatically instead of leaving the user's context full.</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>Added retryable oneshot completion support (<code>retryTransientCompletion</code>) so non-agent LLM calls correctly retry on transient provider failures (Anthropic overload/rate-limit errors, HTTP 429/500/502/503/529), honoring provider-supplied retry-after timing before giving up.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed xAI availability detection so paid-key-only setups correctly default to <code>xai/grok-4.5</code> instead of the free SuperGrok catalog; explicit <code>xai-oauth/…</code> selectors still work as before.</li>
<li>Fixed xAI Responses requests sending unsupported parameters (reasoning summary, presence/frequency penalties) that some models rejected.</li>
<li>Fixed Umans usage reporting incorrectly marking quota as exhausted based on raw request counts instead of actual weighted usage, and improved the usage display to show both a soft-cap warning and a hard exhaustion limit with an accurate countdown to reset.</li>
<li>Fixed <code>omp usage invalidate</code> to fully clear stale usage data and force a fresh refresh, so upgraded subscriptions no longer show outdated quota information.</li>
<li>Improved session recovery to correctly treat certain Cursor HTTP/2 connection errors as transient instead of ending the session.</li>
<li>Fixed OpenAI-compatible streams (e.g. DeepSeek) that are cut off mid-generation being silently treated as a completed response instead of being retried.</li>
<li>Fixed DeepSeek resource-exhaustion interruptions not being automatically retried.</li>
<li>Fixed tool-call IDs being lost during same-model replay, which could break correlation with custom gateways.</li>
<li>Fixed Kimi Code multi-account routing to prefer accounts with more available quota, respect usage-limit cooldowns, and keep consistent usage history across token refreshes.</li>
<li>Fixed Anthropic custom signing-proxy conversations losing tool-search results and thinking content during replay.</li>
<li>Fixed rare runaway response loops across model providers so they now fail gracefully instead of repeating indefinitely.</li>
<li>Fixed xAI rejecting entire turns due to certain MCP tool schema shapes, restoring compatibility while isolating any remaining incompatible tools rather than failing the whole request.</li>
<li>Fixed Alibaba DashScope/Bailian transient per-minute rate limits being misclassified as full quota exhaustion, causing unnecessary long backoffs instead of quick retries.</li>
<li>Fixed Anthropic-compatible streams dropping thinking content, which broke replay of prior reasoning.</li>
<li>Updated the Alibaba Coding Plan China login flow to point to the current Bailian API-key management console.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added support for GLM-5.3 on the z.AI provider, featuring a unified low/high/max reasoning-effort ladder across all hosts, mandatory thinking mode, 1M context, and default-model status for the z.AI provider.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Switched the paid xAI provider (xai / XAI_API_KEY) from Chat Completions to the OpenAI Responses API, aligning it with SuperGrok (xai-oauth) for prompt-cache affinity, reasoning-effort handling, and encrypted-reasoning replay.</li>
<li>Changed the paid xAI (XAI_API_KEY) default model to grok-4.5.</li>
<li>Changed the SuperGrok (xai-oauth) default model to grok-4.5.</li>
<li>Improved reasoning continuity for xAI models by requesting and replaying encrypted reasoning content across multi-turn Responses API calls.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Codex Daybreak Blue and Red model discovery reporting zero token prices, which incorrectly labeled the models as free in the model picker.</li>
<li>Fixed Baseten's moonshotai/Kimi-K3 catalog metadata so its low/high/max thinking levels are available.</li>
<li>Fixed opencode-go/deepseek-v4-flash Responses requests sending forced named tool_choice selectors that are rejected while thinking mode is active.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added Extensions tab group to settings schema</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Routed paid xAI models (XAI_API_KEY / xai/…) through the Responses API used by SuperGrok OAuth instead of Chat Completions, including reliable replay of encrypted reasoning content on follow-up turns.</li>
<li>Updated the default model for XAI_API_KEY (xai) to grok-4.5, and the default SuperGrok OAuth (xai-oauth) model to grok-4.5. Automatic model selection continues to prefer paid xai/grok-4.5 when only XAI_API_KEY is set, with xai-oauth/grok-4.5 still available explicitly.</li>
<li>Stopped sending presence/frequency penalties and stop sequences to xAI reasoning models such as grok-4.5, which reject them.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>hub</code> job and wait lists hiding stale running subagent registrations that have no turn in flight, ensuring they remain visible so operators can cancel them</li>
<li>Fixed external thinking scratchpads running alongside native reasoning on xAI Grok 4 and other reasoning-only Responses models that reject <code>reasoning.effort</code></li>
<li>Fixed llama.cpp model discovery producing a baseUrl without the /v1 prefix for non-Qwen models, causing 404 errors on OpenAI-compatible endpoints.</li>
<li>Fixed prompt caching on open-weight providers (DeepSeek, Qwen, GLM, …) so tool schemas stay cached across directory changes and midnight rollovers.</li>
<li>Fixed omp --fork omitting the source session's artifact directory, so CLI-created forks now preserve artifact:// references like interactive /fork.</li>
<li>Fixed long ask option labels being hard-truncated at the terminal width; labels now wrap onto indented continuation lines.</li>
<li>Fixed toggling display.showTokenUsage from /settings leaving existing token-usage rows stale until the transcript was rebuilt.</li>
<li>Fixed mid-run auto-compaction blocking the live loop while waiting on extension handlers, which could hang after a snapcompact or context-full pass.</li>
<li>Reduced peak memory for persisted subagent revival probes by streaming large file-backed session journals instead of loading them fully.</li>
<li>Improved responsiveness of streaming edit previews for large diffs by rendering only the visible tail.</li>
<li>Fixed repeated /btw panels committing transient frames to native scrollback and replaying conversation history after dismissal.</li>
<li>Clarified that closing browser tool sessions releases managed handles without closing pages in spawned, CDP-connected, or relay browsers.</li>
<li>Fixed interrupted vibe_wait calls being reported as elapsed timeout windows.</li>
<li>Improved checkpoint/rewind prompt rendering to stay accurate after a rewind and be more concise.</li>
<li>Fixed Cursor turns dying with HTTP/2 stream errors (NGHTTP2_INTERNAL_ERROR / NGHTTP2_REFUSED_STREAM) after tool calls already had results, instead of leaving the agent idle until the user typed "continue".</li>
<li>Fixed mixed-case plugin tool names being lowercased during tool-set refresh, which unmounted them from xd:// whenever MCP tools connected.</li>
<li>Fixed Exa MCP servers being unmounted when their config explicitly requests tools the native Exa integration does not provide, breaking /mcp reconnect exa.</li>
<li>Fixed Claude Code custom tool discovery attempting to import non-module files from .claude/tools.</li>
<li>Fixed Agent Hub parking a mid-spawn child session so subsequent task calls failed with an ownership error and the row could never be revived.</li>
<li>Fixed the welcome banner displaying a stale model name when the session's active model changes after startup (e.g. after a delayed config load or an explicit /model switch).</li>
<li>Fixed Nix standalone binaries retaining Bun's build-time package in their runtime closure.</li>
<li>Fixed birch user/custom message card contrast on dark terminals, where chat bubbles could render light-on-light.</li>
<li>Fixed hidden tool snapshots preventing long streamed assistant responses from entering terminal scrollback.</li>
<li>Prevented omp models from loading ambient hook factories while preserving extension-contributed providers.</li>
<li>Fixed the ask dialog's multi-select mode dead-ending on Enter; Space now toggles options and Enter submits the current selection.</li>
<li>Fixed workspace diagnostics reporting a clean workspace when its checker crashed without producing output.</li>
<li>Fixed manual /compact failing outright when a summarization request hit a transient provider overload.</li>
<li>Fixed transient Anthropic failures (overloaded_error, rate_limit_error, 429/500/502/503/529) aborting or silently degrading side-effect-free background LLM calls such as session title generation, TTS speech enhancement, commit-message generation, thinking/stop classifiers, memory extraction/consolidation, and commit analysis/summary/changelog passes; these now retry with backoff honoring retry-after instead of failing or returning an indistinguishable empty result.</li>
<li>Fixed the shared headless browser daemon launching from the macOS system Google Chrome bundle, which could cause macOS to route the user's link clicks to the automation daemon and silently swallow them; the daemon now prefers an isolated Chrome for Testing binary on macOS.</li>
<li>Reclaimed abandoned daemon runtime directories under ~/.omp/run/daemons/, preventing unbounded growth of leftover Chromium profiles and broker state.</li>
<li>Kept the welcome screen's Tips, LSP Servers, and Recent sessions visible when a long model name still leaves enough terminal width for both columns.</li>
<li>Fixed focused shimmer animation frames (ultrathink, orchestrate, workflowz) repainting the full TUI too frequently, causing high CPU usage while composing prompts on WSL2.</li>
<li>Fixed the /debug report bundle including unrelated historic sessions, leaking other sessions' files and bloating archives.</li>
<li>Fixed adopted keep-alive agents remaining stuck in a running state in the registry after deferred turn settlement, and prevented stale refs from sustaining bare hub wait calls indefinitely.</li>
<li>Fixed home-relative marketplace catalog paths not being expanded before cache access, preventing updates from writing into a literal ~ directory.</li>
<li>Fixed broker-owned headless Chromium opening and retaining an unowned blank foreground window on Windows.</li>
<li>Fixed the auto thinking classifier failing every turn on Anthropic models served through LiteLLM/Vertex due to a thinking-budget mismatch.</li>
<li>Fixed always-ask approval prompts bypassing edit preview readiness when a built-in tool executes under its wire-level alias, such as edit running as apply_patch.</li>
<li>Fixed lsp reload crashing non-rust-analyzer language servers by sending them a rust-analyzer-specific request; that request is now gated to rust-analyzer only.</li>
<li>Fixed browser open failing with "Shared browser daemon unavailable" when HTTP_PROXY/HTTPS_PROXY is set, because liveness probes were incorrectly routed through the proxy.</li>
<li>Fixed defaultThinkingLevel: auto skipping classification for user-invoked /skill: turns, leaving the effort stuck on pending auto.</li>
<li>Fixed custom-tool directory discovery recursing into subtrees despite a non-recursive default, which could crash startup when scanning large dependency directories such as Python venvs.</li>
<li>Repaired torn session JSONL appends after disk-write failures, rewrote malformed resumed files before their next append, retried transient persistence failures, and surfaced failures in the TUI.</li>
<li>Prevented Anthropic model fallback from replaying model-bound thinking blocks across models, and surfaced immutable-thinking errors without retrying the unchanged invalid turn.</li>
<li>Fixed empty-stop failure messages always suggesting a context problem even when the provider billed output tokens; the message now reports the billed token count and points at a provider-side filter/translation issue when appropriate.</li>
<li>Fixed a parked, session-less agent-registry entry with no reviver permanently poisoning its agent id, preventing fresh subagent spawns from reusing that id.</li>
<li>Made extension tool-call timeouts configurable and paused them during user dialogs.</li>
<li>Fixed /vibe cancellation leaving an in-flight model turn unaware that Vibe mode and its tools were removed.</li>
<li>Fixed empty local-model stops lingering on the persisted active branch after retries, preventing them from resurfacing after reload or a mid-retry process kill.</li>
<li>Fixed the Biome linter client silently dropping every diagnostic due to an outdated JSON output schema; it now supports Biome 2.x's diagnostic format.</li>
<li>Fixed <code>hub jobs</code> and empty <code>hub wait</code> snapshots hiding running subagents that have no live turn, which removed the only way to discover and <code>hub cancel</code> a stale registration; such agents are listed again and flagged as having no turn in flight.</li>
<li>Fixed external thinking being offered on xAI reasoning-only Responses models (grok-4 family) that reject <code>reasoning.effort</code>, where the private scratchpad ran alongside native reasoning instead of replacing it.</li>
<li>Fixed the extension tool-call handler timeout rendering outside a titled section in <code>/settings</code> by registering its Extensions group on the Tools tab.</li>
</ul>
<h2>@oh-my-pi/pi-mnemopi</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where transient provider failures (such as Anthropic overload or rate limit errors) were incorrectly treated as empty responses; these failures are now retried automatically before falling back.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed the native <code>xargs</code> builtin panicking in <code>-I</code>/<code>-i</code> replace mode when stdin is empty; it now exits successfully without running the command, matching GNU behavior.</li>
<li>Fixed inline-code foreground color incorrectly carrying into plain text when a Markdown codespan ended exactly at a soft-wrap boundary.</li>
<li>Fixed <code>wrapTextWithAnsi</code> leaving a trailing space plus a stray underline open/close pair on the line above a soft wrap when a style opened immediately after that space (e.g. <code>read this thread &lt;underline&gt;https://…</code>), a regression from the codespan color-bleed fix: only sequences that follow visible content now ride along with the current token, while sequences after whitespace still wait for the token they style.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed long CPU-bound event-loop stalls being misclassified as system sleep and omitted from loop-blocked diagnostics.</li>
<li>Fixed focused components with markers falling back to full-screen redraws instead of direct row updates, preserving cursor position and native scrollback across marker changes.</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed the Markdown renderer incorrectly breaking into a raw code block when a 4-space-indented line (such as a box-drawing tree child under a └── branch) directly followed paragraph text; it now correctly stays part of the paragraph, matching standard Markdown behavior.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>feat(catalog): add GLM-5.3 support with uniform low/high/max effort ladder and mandatory thinking by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oldschoola/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oldschoola">@oldschoola</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5148917122" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8520" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8520/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8520">#8520</a></li>
<li>feat(catalog): route paid xAI through Responses like SuperGrok by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/geraint0923/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/geraint0923">@geraint0923</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5046082278" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7454" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7454/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7454">#7454</a></li>
<li>fix(discovery): honor non-recursive glob in loadFilesFromDir by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5151753411" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8553" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8553/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8553">#8553</a></li>
<li>fix(coding-agent): stop invalid Anthropic thinking fallback by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5152697082" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8560" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8560/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8560">#8560</a></li>
<li>fix(ai): fail truncated OpenAI-compatible streams instead of silently stopping by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iacore/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iacore">@iacore</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5152894870" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8563" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8563/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8563">#8563</a></li>
<li>fix(browser): probe CDP endpoints over raw TCP to bypass HTTP_PROXY by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5153731848" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8569" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8569/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8569">#8569</a></li>
<li>fix(mcp): keep Exa MCP servers that request non-native tools by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dhruvkej9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dhruvkej9">@dhruvkej9</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5154960071" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8576" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8576/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8576">#8576</a></li>
<li>fix(session): repair torn JSONL appends by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5156736897" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8598" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8598/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8598">#8598</a></li>
<li>fix: stop mid-run compaction from hanging the live loop by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Thytu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Thytu">@Thytu</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5157274813" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8604" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8604/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8604">#8604</a></li>
<li>fix(tui): wait for wire-aliased edit previews by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5157440818" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8608" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8608/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8608">#8608</a></li>
<li>fix(auto-thinking): clear proxy thinking budget in online classifiers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5157854549" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8612" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8612/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8612">#8612</a></li>
<li>fix(catalog): price Codex Daybreak aliases by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SJY051/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SJY051">@SJY051</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5157965416" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8614" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8614/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8614">#8614</a></li>
<li>fix(browser): suppress blank shared startup window by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5158118742" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8624" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8624/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8624">#8624</a></li>
<li>fix(tui): refresh token usage rows when toggled by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/notnotype/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/notnotype">@notnotype</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5158317617" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8626" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8626/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8626">#8626</a></li>
<li>fix(cli): expand marketplace catalog home paths by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5158456005" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8628" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8628/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8628">#8628</a></li>
<li>fix(ai): restore Kimi multi-account quota recovery by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5158624966" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8632" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8632/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8632">#8632</a></li>
<li>fix(hub): prevent stale agent refs from blocking wait by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5158935195" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8636" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8636/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8636">#8636</a></li>
<li>fix(ai): preserve opaque Chat Completions tool-call IDs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5159232852" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8642" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8642/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8642">#8642</a></li>
<li>perf(session): stream persisted session init probes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lemonleks/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lemonleks">@lemonleks</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5159382919" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8645" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8645/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8645">#8645</a></li>
<li>fix(debug): scope report bundle to current session subtree by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5159466303" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8650" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8650/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8650">#8650</a></li>
<li>fix(browser): clarify close release semantics by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/koopmannleon19977-cmyk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/koopmannleon19977-cmyk">@koopmannleon19977-cmyk</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5159541165" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8651" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8651/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8651">#8651</a></li>
<li>fix(tui): bound magic-keyword shimmer CPU by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5159545211" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8652" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8652/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8652">#8652</a></li>
<li>fix(ask): wrap long option labels in the rich ask dialog instead of truncating by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5159571952" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8654" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8654/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8654">#8654</a></li>
<li>fix(tui): preserve welcome columns for long model names by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5159657267" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8658" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8658/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8658">#8658</a></li>
<li>perf(coding-agent): bound streaming diff previews by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lemonleks/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lemonleks">@lemonleks</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5160212232" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8662" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8662/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8662">#8662</a></li>
<li>fix(coding-agent): preserve artifacts in CLI forks by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/anatoli-tsinovoy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/anatoli-tsinovoy">@anatoli-tsinovoy</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5160268882" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8664" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8664/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8664">#8664</a></li>
<li>perf(coding-agent): bound completed diff rendering by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lemonleks/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lemonleks">@lemonleks</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5160332323" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8665" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8665/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8665">#8665</a></li>
<li>fix(ai): stop runaway repeated responses by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pstarkgit/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pstarkgit">@pstarkgit</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5160568179" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8669" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8669/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8669">#8669</a></li>
<li>fix(launch): prune dead daemon runtime dirs on broker startup by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5160996581" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8676" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8676/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8676">#8676</a></li>
<li>fix(browser): prefer Chrome for Testing on macOS headless launch by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5161015051" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8677" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8677/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8677">#8677</a></li>
<li>fix(catalog): omit forced tool choice for go responses by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5119574996" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8244" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8244/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8244">#8244</a></li>
<li>fix(tui): multi-select ask dialog submits on Enter instead of dead-ending by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhang17-24/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhang17-24">@zhang17-24</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5123039623" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8265" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8265/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8265">#8265</a></li>
<li>fix(tui): preserve scrollback after hidden tool snapshots by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dannyboy-ai/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dannyboy-ai">@dannyboy-ai</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5126031922" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8285" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8285/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8285">#8285</a></li>
<li>fix(ai): preserve streamed thinking start content by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/max12525k/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/max12525k">@max12525k</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5127580385" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8319" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8319/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8319">#8319</a></li>
<li>fix(ai): rotate Cursor conversationId after a poisoned conversation by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhang17-24/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhang17-24">@zhang17-24</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5133662380" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8349" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8349/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8349">#8349</a></li>
<li>fix(catalog): Add missing thinking levels to Baseten Kimi K3 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jcfrancisco/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jcfrancisco">@jcfrancisco</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5136504080" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8364" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8364/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8364">#8364</a></li>
<li>fix: retry transient Anthropic failures at oneshot LLM call sites by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wonjun3991/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wonjun3991">@wonjun3991</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5136972665" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8370" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8370/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8370">#8370</a></li>
<li>fix(models): isolate ambient hooks from catalog listing by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/starlink-awaken/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/starlink-awaken">@starlink-awaken</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5138747009" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8414" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8414/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8414">#8414</a></li>
<li>fix(nix): remove build-time Bun closure reference by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bjin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bjin">@bjin</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5139511107" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8422" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8422/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8422">#8422</a></li>
<li>fix(theme): improve birch user/custom card contrast by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/atacolak/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/atacolak">@atacolak</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5139965217" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8426" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8426/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8426">#8426</a></li>
<li>fix(tui): welcome banner shows stale model name after model changes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jacobleft/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jacobleft">@jacobleft</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5140698802" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8428" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8428/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8428">#8428</a></li>
<li>fix(extensions): pause tool-call timeout during human dialogs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Seljuke/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Seljuke">@Seljuke</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5143177729" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8441" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8441/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8441">#8441</a></li>
<li>fix(tui): classify a long loop block by CPU time instead of duration by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mustaqeem66/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mustaqeem66">@Mustaqeem66</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5143290325" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8442" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8442/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8442">#8442</a></li>
<li>fix(tui): keep btw panels out of scrollback by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ant39140/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ant39140">@Ant39140</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5143356477" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8444" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8444/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8444">#8444</a></li>
<li>fix(lsp): don't report a crashed checker as a clean workspace by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mustaqeem66/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mustaqeem66">@Mustaqeem66</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5143850852" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8448" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8448/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8448">#8448</a></li>
<li>fix(hub): skip mid-spawn stubs in persisted scan by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tahsinrahman/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tahsinrahman">@tahsinrahman</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5144112685" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8453" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8453/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8453">#8453</a></li>
<li>fix(ci): distinguish a watchdog kill from an OOM kill in the sequential test path by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mustaqeem66/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mustaqeem66">@Mustaqeem66</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5144563344" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8458" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8458/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8458">#8458</a></li>
<li>use /v1/ APIs for llama.cpp for better compatibility by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cphlipot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cphlipot">@cphlipot</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5144710313" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8459" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8459/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8459">#8459</a></li>
<li>fix(edit): add compact seen-line retries by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Kigbnajd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Kigbnajd">@Kigbnajd</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5144726236" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8461" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8461/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8461">#8461</a></li>
<li>fix(coding-agent): filter Claude custom tool modules by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Kigbnajd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Kigbnajd">@Kigbnajd</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5145305123" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8471" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8471/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8471">#8471</a></li>
<li>fix(ai): classify DashScope/Bailian 429 TPM throttle as transient instead of quota exhaustion by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Vitus213/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Vitus213">@Vitus213</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5145602984" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8476" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8476/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8476">#8476</a></li>
<li>fix(agent): remove capped empty stop tails by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5147287193" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8491" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8491/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8491">#8491</a></li>
<li>fix(coding-agent): reclaim dead parked agent corpses on respawn by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5147324889" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8492" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8492/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8492">#8492</a></li>
<li>fix(agent): optimize checkpoint/rewind prompt rendering by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5148123024" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8503" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8503/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8503">#8503</a></li>
<li>fix(agent): name billed output tokens on capped empty stops by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5148444917" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8512" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8512/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8512">#8512</a></li>
<li>fix(session): resume Cursor turns after HTTP/2 stream reset by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joseotaviorf/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joseotaviorf">@joseotaviorf</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5148725027" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8516" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8516/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8516">#8516</a></li>
<li>fix(ai): report Umans usage from weighted effective requests by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MertSoylu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MertSoylu">@MertSoylu</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5150127210" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8537" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8537/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8537">#8537</a></li>
<li>fix(coding-agent): keep the system prompt byte-stable across date/cwd changes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MertSoylu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MertSoylu">@MertSoylu</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5150538137" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8538" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8538/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8538">#8538</a></li>
<li>fix(tests): prune bazel convenience symlinks from bun test discovery by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jonathanm10/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jonathanm10">@Jonathanm10</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5151260897" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8547" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8547/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8547">#8547</a></li>
<li>fix(vibe): distinguish wait abort from timeout by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Capslockb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Capslockb">@Capslockb</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5151438126" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8550" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8550/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8550">#8550</a></li>
<li>fix(coding-agent): classify user-invoked /skill turns under auto thinking by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5152075110" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8556" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8556/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8556">#8556</a></li>
<li>fix(utils): stop indented code interrupting paragraphs in the vendored marked lexer by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chan1103/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chan1103">@chan1103</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5152256649" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8557" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8557/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8557">#8557</a></li>
<li>fix(ai): preserve Anthropic tool-search replay blocks by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5152722938" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8561" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8561/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8561">#8561</a></li>
<li>fix(lsp): gate rust-analyzer/reloadWorkspace behind rust-analyzer check by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5153957618" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8572" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8572/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8572">#8572</a></li>
<li>fix(tui): stop inline code color bleed at soft wraps by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5155742784" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8586" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8586/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8586">#8586</a></li>
<li>fix(builtins): handle empty xargs replace input by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5156693606" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8597" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8597/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8597">#8597</a></li>
<li>fix(vibe): cancel active turn on mode exit by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5128870712" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8327" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8327/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8327">#8327</a></li>
<li>fix(ai): update Alibaba China console URL by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5162446434" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8692" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8692/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8692">#8692</a></li>
<li>fix(coding-agent): map biome 2.x json reporter schema by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5162920420" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8695" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8695/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8695">#8695</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/geraint0923/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/geraint0923">@geraint0923</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5046082278" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7454" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7454/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7454">#7454</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dhruvkej9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dhruvkej9">@dhruvkej9</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5154960071" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8576" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8576/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8576">#8576</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Thytu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Thytu">@Thytu</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5157274813" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8604" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8604/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8604">#8604</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SJY051/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SJY051">@SJY051</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5157965416" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8614" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8614/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8614">#8614</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/notnotype/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/notnotype">@notnotype</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5158317617" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8626" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8626/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8626">#8626</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/koopmannleon19977-cmyk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/koopmannleon19977-cmyk">@koopmannleon19977-cmyk</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5159541165" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8651" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8651/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8651">#8651</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pstarkgit/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pstarkgit">@pstarkgit</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5160568179" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8669" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8669/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8669">#8669</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/max12525k/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/max12525k">@max12525k</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5127580385" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8319" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8319/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8319">#8319</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wonjun3991/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wonjun3991">@wonjun3991</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5136972665" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8370" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8370/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8370">#8370</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/starlink-awaken/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/starlink-awaken">@starlink-awaken</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5138747009" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8414" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8414/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8414">#8414</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/atacolak/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/atacolak">@atacolak</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5139965217" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8426" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8426/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8426">#8426</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jacobleft/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jacobleft">@jacobleft</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5140698802" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8428" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8428/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8428">#8428</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Seljuke/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Seljuke">@Seljuke</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5143177729" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8441" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8441/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8441">#8441</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tahsinrahman/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tahsinrahman">@tahsinrahman</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5144112685" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8453" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8453/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8453">#8453</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cphlipot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cphlipot">@cphlipot</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5144710313" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8459" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8459/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8459">#8459</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Vitus213/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Vitus213">@Vitus213</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5145602984" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8476" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8476/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8476">#8476</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joseotaviorf/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joseotaviorf">@joseotaviorf</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5148725027" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8516" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8516/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8516">#8516</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MertSoylu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MertSoylu">@MertSoylu</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5150127210" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8537" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8537/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8537">#8537</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jonathanm10/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jonathanm10">@Jonathanm10</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5151260897" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8547" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8547/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8547">#8547</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Capslockb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Capslockb">@Capslockb</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5151438126" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8550" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8550/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8550">#8550</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.3.4...v17.3.5">v17.3.4...v17.3.5</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.3.6 (17.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.3.617.08.2026@can1357chore: bump version to 17.3.6]]></description>
<link>https://tsecurity.de/de/3746291/tools/github-release-can1357oh-my-pi-v1736-17082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746291/tools/github-release-can1357oh-my-pi-v1736-17082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:54:02 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.3.6" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.3.6</span><span class="badge gh-badge gh-badge-date">17.08.2026</span><span class="badge gh-badge gh-badge-author">@can1357</span></div><div class="github-feed-changelog"><p>chore: bump version to 17.3.6</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.3.7 (18.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.3.718.08.2026@github-actions[bot]@oh-my-pi/pi-ai
Changed

Send the omp/ User-Agent on xAI chat (xai and xai-oauth) unless the request already set its own.

@oh-my-pi/pi-catalog
Changed

Changed the paid xAI (XAI_API_KEY) and SuperGrok (xai-oauth) default models to grok-4.6.

F...]]></description>
<link>https://tsecurity.de/de/3746290/tools/github-release-can1357oh-my-pi-v1737-18082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746290/tools/github-release-can1357oh-my-pi-v1737-18082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:54:01 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.3.7" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.3.7</span><span class="badge gh-badge gh-badge-date">18.08.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-ai</h2>
<h3>Changed</h3>
<ul>
<li>Send the <code>omp/&lt;version&gt;</code> User-Agent on xAI chat (<code>xai</code> and <code>xai-oauth</code>) unless the request already set its own.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Changed</h3>
<ul>
<li>Changed the paid xAI (XAI_API_KEY) and SuperGrok (xai-oauth) default models to grok-4.6.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Raised the GPT-5.6 Sol/Terra/Luna context window on the Codex transport (openai-codex) from 372K to 1M tokens: OpenAI enabled the 1M window for subscription Codex on 2026-08-16, but the Codex model registry still reports the stale 272,000, so discovery now floors these SKUs at 1,000,000 instead of trusting the reported value (<a href="https://github.com/openai/codex/issues/38917" data-hovercard-type="issue" data-hovercard-url="/openai/codex/issues/38917/hovercard">openai/codex#38917</a>).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added <code>ExtensionAPI.registerFileWriteFallback(handler)</code> and <code>ExtensionAPI.registerFileDeleteFallback(handler)</code>, letting an extension supply a fallback writer or deleter that is consulted when a native <code>write</code>, <code>edit</code>, or <code>apply_patch</code> byte-write or unlink is denied with a permission error (<code>EPERM</code>/<code>EACCES</code>/<code>EROFS</code>) — for hosts that embed the agent inside a sandbox that denies direct filesystem access but exposes a privileged channel. The brokered path is symlink-resolved so a handler's allowlist sees the real destination, a destination that cannot be resolved is not brokered at all, and <code>req.sessionId</code> names the session that issued the mutation so a handler sharing the process-wide registry can enforce policy per session. See <a href="https://github.com/can1357/oh-my-pi/docs/extensions.md"><code>docs/extensions.md</code></a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Send the <code>omp/&lt;version&gt;</code> User-Agent on xAI chat (<code>xai</code> and <code>xai-oauth</code>) unless the request already set its own (<a href="https://github.com/can1357/oh-my-pi/pull/8840" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8840/hovercard">#8840</a> by <a href="https://github.com/Jaaneek">@Jaaneek</a>).</li>
<li>Updated the default model for XAI_API_KEY (xai) and SuperGrok OAuth (xai-oauth) to grok-4.6. Automatic model selection continues to prefer paid xai/grok-4.6 when only XAI_API_KEY is set, with xai-oauth/grok-4.6 still available explicitly.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>omp stats</code> and <code>/stats</code> dashboards being unreachable from container hosts by accepting an explicit <code>--host</code> bind address while preserving the <code>127.0.0.1</code> default.</li>
</ul>
<h2>@oh-my-pi/omp-stats</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed the stats dashboard being unreachable from container hosts by accepting an explicit <code>--host</code> bind address while preserving loopback-only binding and same-origin API access by default.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(ai): send omp User-Agent on xAI chat only by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jaaneek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jaaneek">@Jaaneek</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5174339338" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8840" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8840/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8840">#8840</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jaaneek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jaaneek">@Jaaneek</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5174339338" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8840" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8840/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8840">#8840</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.3.6...v17.3.7">v17.3.6...v17.3.7</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.3.8 (19.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.3.819.08.2026@github-actions[bot]@oh-my-pi/pi-agent-core
Fixed

Fixed /compact (and automatic compaction) resurrecting pre-/clear conversation turns: prepareCompaction now honors the latest reset_boundary, so a compaction after an in-place /clear only summarizes messages creat...]]></description>
<link>https://tsecurity.de/de/3746289/tools/github-release-can1357oh-my-pi-v1738-19082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746289/tools/github-release-can1357oh-my-pi-v1738-19082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:54:01 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.3.8" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.3.8</span><span class="badge gh-badge gh-badge-date">19.08.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>/compact</code> (and automatic compaction) resurrecting pre-<code>/clear</code> conversation turns: <code>prepareCompaction</code> now honors the latest <code>reset_boundary</code>, so a compaction after an in-place <code>/clear</code> only summarizes messages created after the reset (<a href="https://github.com/can1357/oh-my-pi/issues/8718" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8718/hovercard">#8718</a>).</li>
<li>Hardened compaction summarization against prompt injection: conversation history and previous summaries are now treated as untrusted, and embedded <code>&lt;conversation&gt;</code>/<code>&lt;previous-summary&gt;</code> boundary tags are neutralized before prompt assembly (<a href="https://github.com/can1357/oh-my-pi/pull/8727" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8727/hovercard">#8727</a> by <a href="https://github.com/koopmannleon19977-cmyk">@koopmannleon19977-cmyk</a>).</li>
<li>Compaction summarization input is now bounded to the summary model's context (windowed fold for oversized spans) and deterministic context-overflow 400s are no longer retried up to the full retry budget; artifact ids containing <code>503</code> no longer misclassify hard 400s as transient.</li>
<li>Fixed remote compaction mirroring the <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5168457240" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8789" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8789/hovercard" href="https://github.com/can1357/oh-my-pi/issues/8789">#8789</a> Responses shape: <code>buildOpenAiNativeHistory</code> now hoists an assistant <code>message</code> wedged between a tool-call batch and its outputs ahead of the batch, so compaction requests to strict opencode-go gateways match the canonical <code>message(s) → calls → outputs</code> order (<a href="https://github.com/can1357/oh-my-pi/issues/8789" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8789/hovercard">#8789</a>).</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Changed</h3>
<ul>
<li>Fixed Gemini thought summaries occasionally leaking a raw <code>```thinking</code> / <code>``````thinking</code> fence delimiter into the reasoning block, so it no longer shows up as fence spam in the thinking display or persisted transcripts (<a href="https://github.com/can1357/oh-my-pi/issues/8719" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8719/hovercard">#8719</a>).</li>
<li>Fixed the OpenCode Go login prompting for an "OpenCode Zen API key": the shared login flow now names the provider you selected, so connecting OpenCode Go asks for an OpenCode Go key (the <code>opencode.ai/auth</code> console is still shared, as documented upstream) (<a href="https://github.com/can1357/oh-my-pi/issues/8738" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8738/hovercard">#8738</a>).</li>
<li>Fixed Anthropic-compatible endpoints with strict prompt validation (e.g. Z.AI GLM <code>api.z.ai/api/anthropic</code>, which rejects the whole request with <code>400 code 1213 "The prompt parameter was not received normally"</code>) failing sessions once a tool returned empty output on a vision-capable model: empty successful <code>tool_result</code> blocks now encode as <code>content: ""</code> instead of <code>content: []</code>, which both the official API and strict compatible endpoints accept.</li>
<li>Fixed <code>retry.usageReservePct</code> (Reserve Margin) ignoring Claude Fable/Mythos weekly tier usage until it hit 100%, so a Fable model kept serving turns past the configured reserve; reserve health now honors the mapped tier row while credential-wide hard blocks still require confirmed exhaustion (<a href="https://github.com/can1357/oh-my-pi/issues/8773" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8773/hovercard">#8773</a>).</li>
<li>Fixed <code>cursor-agent</code> streams stalling with "Provider stream stalled while waiting for the next event" when Cursor asked the client to approve a hosted WebFetch / web search (reproduced on <code>cursor-grok-4.6-xhigh</code> after "I'll fetch the page…"). Those <code>interaction_query</code> frames — including the newer WebFetch field 9 this proto did not name — were dropped, so the server waited forever and the idle watchdog aborted a live connection. Permission queries are now answered; hosted search/fetch is approved, unnamed permission fields get an <code>approved</code> reply on the same field number, and prompts this client cannot serve are rejected so the turn can continue.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed thinking effort selections being ignored for local Qwen 3.8+ models on llama.cpp and vLLM: the Qwen chat-completions dialects only toggled <code>enable_thinking</code>, so the chat template always reasoned at its <code>xhigh</code> default no matter which level was selected. The encoder now routes the requested effort onto the template's <code>reasoning_effort</code> kwarg (<code>chat_template_kwargs</code> for both Qwen dialects, plus the top-level field newer llama.cpp builds map natively).</li>
<li>Fixed OpenAI Completions, Amazon Bedrock, and Cursor providers ignoring <code>onPayload</code> replacement payloads. The hook now transforms the actual request body sent upstream on these providers, matching the Anthropic/Gemini/OpenAI Responses replacement contract. <code>devin-agent</code> still does not fire the hook (its payload is a protobuf object).</li>
<li>Fixed Codex requests failing outright when the signed-in ChatGPT account is not entitled to the requested model; the exact model denial is now classified as an account-policy error so credential rotation can reach an entitled sibling account</li>
<li>Fixed Perplexity email-OTP login after its verification response renamed the encrypted session token from <code>token</code> to <code>challenge_token</code>.</li>
<li>Cloud Code Assist Gemini 3.6/3.7 Flash requests at <code>minimal</code> now send <code>thinkingLevel: LOW</code> on the aliased <code>-low</code> SKU instead of <code>MINIMAL</code>, which the API rejects with HTTP 400.</li>
<li>Answer Cursor <code>interaction_query</code> permission gates (hosted web search, Exa, unnamed field-9 WebFetch) so the Run RPC continues instead of sitting silent until the 300s idle watchdog.</li>
<li>Fixed provider tool calls arriving with flattened array argument paths (e.g. Gemini's <code>questions[0].id</code>) being stripped and rejected by argument validation; well-formed flattened paths are now rebuilt into the nested arrays the tool schema expects (<a href="https://github.com/can1357/oh-my-pi/issues/8886" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8886/hovercard">#8886</a>).</li>
<li>Fixed opencode-go (Console Go) rejecting Responses turns with <code>400 No tool output found for tool call …</code> (naming a random call of the batch on each retry) when a model streamed a trailing text/thinking block after its tool calls: <code>buildResponsesInput</code> emitted that block as an assistant <code>message</code> item wedged between the <code>function_call</code> batch and its <code>function_call_output</code> items. Such interleaved messages are now hoisted ahead of their call batch (canonical <code>message(s) → calls → outputs</code>), which the strict gateway validator accepts; content is unchanged (<a href="https://github.com/can1357/oh-my-pi/issues/8789" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8789/hovercard">#8789</a>).</li>
<li>Fixed the OpenAI-wire transport sleeping on a LiteLLM concurrency-admission 429 (<code>rate_limit_type: max_parallel_requests</code>, <code>Retry-After: 60</code>) and retrying it up to 6 times (~300s) before session recovery saw the error. Because a 60s hint equals the transport's <code>maxDelayMs</code> cap, <code>fetchWithRetry</code> kept sleeping and retrying; the request now surfaces on the first attempt so <code>TurnRecovery</code>'s concurrency backoff/model fallback runs promptly. Genuine RPM/quota 429s (no such marker) still honor <code>Retry-After</code> (<a href="https://github.com/can1357/oh-my-pi/issues/8854" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8854/hovercard">#8854</a>).</li>
<li>Fixed OAuth login (Codex <code>localhost:1455</code>, and any <code>localhost</code> callback flow) failing on hosts with IPv6 disabled at the kernel (<code>ipv6.disable=1</code>). The <code>::1</code> companion listener added in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5103078408" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8081" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8081/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8081">#8081</a> fails there with Bun's generic "Is port X in use?" message (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1999749395" data-permission-text="Title is private" data-url="https://github.com/oven-sh/bun/issues/7187" data-hovercard-type="issue" data-hovercard-url="/oven-sh/bun/issues/7187/hovercard" href="https://github.com/oven-sh/bun/issues/7187">oven-sh/bun#7187</a>), which the in-use check misread as a real collision — tearing down the healthy IPv4 listener and surfacing a bogus "port 1455 is in use" error. The dual-bind path now detects the missing IPv6 loopback up front and serves IPv4 alone (<a href="https://github.com/can1357/oh-my-pi/issues/8814" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8814/hovercard">#8814</a>).</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added a Cursor variant-collapse table folding the per-effort Grok siblings (<code>cursor-grok-4.5</code> low/medium/high and <code>cursor-grok-4.6</code> low/medium/high/xhigh, plus their <code>-fast</code> service-tier lanes) into one logical model per lane with effort routing onto the live wire ids, matching Devin's <code>grok-4-5</code> collapse (<a href="https://github.com/can1357/oh-my-pi/issues/8803" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8803/hovercard">#8803</a>).</li>
<li>Regenerated the Cursor agent protobufs to model hosted WebFetch permission queries (<code>interaction_query</code> / <code>interaction_response</code> field 9) and the matching <code>ToolCall</code> variant (field 37).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed a physically corrupt <code>models.db</code> (<code>SQLITE_CORRUPT*</code> / <code>SQLITE_NOTADB</code>, "database disk image is malformed") permanently disabling the model cache. The shared read/write paths swallowed unrecoverable SQLite corruption as a best-effort miss and cached the broken handle, so a successful live catalog could never overwrite the corrupt cache and every later process repeated the miss — a runtime provider extension with no bundled catalog was left with only its bootstrap model. Corruption now self-heals: the cache closes the handle, quarantines <code>models.db</code>(+<code>-wal</code>/<code>-shm</code>) aside, recreates a fresh database, and retries the operation once; <code>SQLITE_BUSY</code>, permission, and unrelated errors keep their existing best-effort paths (<a href="https://github.com/can1357/oh-my-pi/issues/8867" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8867/hovercard">#8867</a>).</li>
<li>Fixed local Qwen 3.8+ models (llama.cpp, vLLM, loopback custom providers) exposing the generic <code>minimal..high</code> thinking ladder instead of the chat template's real <code>low</code>/<code>medium</code>/<code>xhigh</code> <code>reasoning_effort</code> tiers. The derived metadata now marks thinking as mandatory (the official 3.8 template raises on <code>enable_thinking: false</code>), vLLM-served Qwen routes through the <code>chat_template_kwargs</code> dialect (top-level <code>enable_thinking</code> is ignored by vLLM), and vLLM discovery lights up the reasoning dial for Qwen 3.8+ ids its <code>/v1/models</code> endpoint reports as non-reasoning.</li>
<li>Fixed <code>deepseek-v4-pro-0813</code> surfacing from Alibaba Token Plan discovery with <code>contextWindow</code>/<code>maxTokens</code> of <code>null</code>. The dated DeepSeek V4 Pro snapshot was missing from <code>ALIBABA_TOKEN_PLAN_DISCOVERED_MODEL_LIMITS</code>, so unlike its <code>deepseek-v4-flash-0731</code> sibling it fell through to unknown limits (<a href="https://github.com/can1357/oh-my-pi/issues/8847" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8847/hovercard">#8847</a>).</li>
<li>Cloud Code Assist Gemini 3.6/3.7 Flash no longer maps user <code>minimal</code> to wire <code>thinkingLevel: MINIMAL</code> when that effort is aliased onto the <code>-low</code> SKU. The request now sends <code>LOW</code>, which those SKUs accept.</li>
<li>Fixed SuperGrok (<code>xai-oauth</code>) Grok 4.6 hiding the thinking-level picker: the Responses effort-capable allowlist now includes <code>grok-4.6</code>, so <code>/model</code> can select the documented <code>low</code>/<code>medium</code>/<code>high</code>/<code>xhigh</code> ladder (<code>max</code> is rejected by api.x.ai).</li>
<li>Marked CoreWeave runtime discovery as authoritative so stale bundled model ids that the endpoint no longer serves stop appearing as selectable models.</li>
<li>ChatGPT Codex discovery that advertises only worker <code>-wm</code> SKUs now also registers the plain model route, so a configured <code>openai-codex/&lt;model&gt;</code> keeps resolving instead of fuzzy-falling-back to the <code>-wm</code> SKU some accounts reject.</li>
<li>Fixed <code>opencode-go/muse-spark-1.2</code> (and <code>muse-spark-1.2-contributor</code>) failing every tool-call turn with <code>OpenAI completions stream closed before a finish_reason was received</code>. The Go gateway serves these ids only at <code>/zen/go/v1/responses</code>, but the <code>/zen/go/v1/models</code> discovery omits the <code>provider.npm</code> hint, so the resolver fell through to <code>openai-completions</code>; both ids are now pinned to <code>openai-responses</code> like <code>deepseek-v4-flash</code> (<a href="https://github.com/can1357/oh-my-pi/issues/8957" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8957/hovercard">#8957</a>).</li>
<li>Fixed GitHub Copilot <code>grok-4.6</code> / <code>grok-4.6-1m</code> failing with HTTP 400 <code>unsupported_api_for_model</code> by routing them through the OpenAI Responses API (<code>/responses</code>) instead of <code>/chat/completions</code>, matching <code>grok-4.5</code>. Stale cached completion routes are invalidated on refresh (<a href="https://github.com/can1357/oh-my-pi/issues/8807" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8807/hovercard">#8807</a>).</li>
<li>Fixed Cursor Grok 4.5/4.6 discovery classifying the versioned ids as non-reasoning: <code>GetUsableModels</code> ships no <code>thinkingDetails</code> and the bundled references read <code>reasoning: false</code>, so the picker hid the effort ladder. Discovery now marks <code>cursor-grok-&lt;version&gt;</code> ids as reasoning models (the non-reasoning <code>grok-code-*</code> ids stay out) (<a href="https://github.com/can1357/oh-my-pi/issues/8803" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8803/hovercard">#8803</a>).</li>
<li>Fixed GMI Cloud (<code>gmi-cloud</code>) models resolved via <code>/v1/models</code> discovery surfacing with <code>null</code> context windows, zero pricing, and no reasoning/thinking metadata for every model except the bundled <code>deepseek-ai/DeepSeek-V4-Flash</code> seed. GMI's endpoint returns only bare <code>{id}</code> rows, so the mapper now recovers intrinsic capability metadata (context window, output limit, reasoning, thinking ladder) for resold open-weight models from the cross-provider canonical reference index — matching the SiliconFlow behavior — while never borrowing another provider's pricing (<a href="https://github.com/can1357/oh-my-pi/issues/8890" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8890/hovercard">#8890</a>).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added <code>providers.cacheRetention</code> setting (<code>/settings</code> → Providers → Protocol) to control prompt-cache retention per request: <code>auto</code> keeps the provider default (Anthropic: 5m entries with idle keep-alive refreshes), <code>short</code> forces 5m, <code>long</code> restores 1h TTLs where supported and disables the keep-alive refresh loop, <code>none</code> disables prompt caching.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>The <code>read</code> tool now materializes a local text file once per invocation instead of once per consumer. A ranged read of a file within the snapshot cap previously cost four opens and three UTF-8 decodes — an 8KiB binary sniff, a streaming scan for the rendered window, a whole-file read for bracket context, and another whole-file read to hash the snapshot — with two of those readers separately normalizing line endings; whole-file reads under the structural summarizer paid a fifth read. Byte counts and truncation boundaries are now measured on the buffered bytes, so they stay exact for content that is not valid UTF-8. Files above the snapshot cap keep streaming, since nothing on that path wants the whole file. Raw reads, which skip the tree-sitter parse that documented the old cost, no longer pay for it.</li>
<li>Documented that <code>bash.patterns</code> gates the <code>bash</code> tool only and does not cover a shell that <code>eval</code> can spawn via subprocess, and that closing that path needs a <code>tools.approval.eval</code> policy — noted in <code>docs/bash-tool-runtime.md</code>, <code>docs/approval-mode.md</code>, and <code>docs/settings.md</code> (<a href="https://github.com/can1357/oh-my-pi/issues/8838" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8838/hovercard">#8838</a>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed the <code>/btw</code> panel re-committing its frame to native scrollback on every update while the primary turn is still streaming: a live region that pins itself (an anchored HUD/panel such as <code>/btw</code>) no longer leaks its scrolled-off rows just because an unpinned transcript seam sits above it in the same frame (<a href="https://github.com/can1357/oh-my-pi/issues/8793" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8793/hovercard">#8793</a>).</li>
<li>Fixed a submitted <code>/skill:&lt;name&gt;</code> command staying invisible in the transcript until its awaited preflight (memory recall, <code>before_agent_start</code> hooks, auto-thinking classification, pre-prompt compaction) finished, so a slow step such as a Hindsight auto-recall timeout made the command look unaccepted. Idle skill submissions now paint an optimistic row immediately — like a normal prompt — and reconcile it in place when the canonical <code>message_start</code> lands (<a href="https://github.com/can1357/oh-my-pi/issues/8895" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8895/hovercard">#8895</a>).</li>
<li>Fixed broker-backed MCP OAuth credentials never refreshing, so remote OAuth MCP servers dropped out of <code>/mcp</code> once their access token expired under <code>omp auth-broker serve</code>. The client threw on the broker-redacted refresh sentinel instead of asking the broker to refresh, and the broker had no <code>mcp_oauth:*</code> refresh path (<code>POST /v1/credential/:id/refresh</code> answered <code>Unknown OAuth provider</code>). The client now routes redacted MCP refreshes through the broker, and the broker refreshes MCP credentials with a generic <code>refresh_token</code> grant from the credential's embedded token endpoint and client id — so the background refresher also keeps MCP tokens live (<a href="https://github.com/can1357/oh-my-pi/issues/8933" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8933/hovercard">#8933</a>).</li>
<li>Fixed <code>omp commit</code> split-commit failing with <code>corrupt binary patch</code> when a split commit contains a binary file. <code>parseFileDiffs</code> split the captured diff on <code>"\ndiff --git "</code>, consuming the <code>\n</code> that terminates each block, and <code>patch.join</code> stripped trailing newlines — both dropped the blank line that terminates a <code>GIT binary patch</code> block, so the rebuilt patch was rejected by <code>git apply --binary</code>. Both trailing and mid-diff binary blocks now survive the parse/rebuild round-trip byte-exact (<a href="https://github.com/can1357/oh-my-pi/issues/8899" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8899/hovercard">#8899</a>).</li>
<li>Fixed <code>omp update</code> (and other non-launch subcommands) crashing with <code>error: Unknown option '--cwd'</code> when a leading global launch flag preceded the subcommand — e.g. a shell alias/wrapper that runs <code>omp --cwd &lt;dir&gt; update</code>. <code>resolveCliArgv</code> hoisted the subcommand to the front but forwarded the launch-only flag into <code>update</code>'s strict <code>node:util.parseArgs</code> parser, which rejected it. Launch-global flags before a launch-shaped command (<code>acp</code>/<code>launch</code>) are still forwarded; before any other subcommand they are now stripped as inapplicable (<a href="https://github.com/can1357/oh-my-pi/issues/8891" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8891/hovercard">#8891</a>).</li>
<li>Fixed Claude Code marketplace plugins ignoring the <code>enabledPlugins</code> switch in <code>~/.claude/settings.json</code> and <code>.claude/settings(.local).json</code>: a plugin turned off for a project no longer loads there, and a local-scope install enabled for a project loads even when its recorded <code>projectPath</code> is a different directory</li>
<li>Fixed revived subagents (warm lifecycle reviver and cold persisted reviver) rebuilding the session without initializing the extension runtime, leaving every runtime action throwing <code>ExtensionRuntimeNotInitializedError</code>. An extension with a <code>tool_call</code> handler that touched a runtime action (e.g. <code>appendEntry</code>) then tripped the fail-closed gate in <code>emitToolCall</code> and blocked every tool — including the hidden <code>yield</code> — so the revived agent could neither finish nor exit and looped until killed. Both revivers now call the shared <code>initializeExtensions</code> helper, restoring runtime actions, <code>onError</code>, and the <code>session_start</code> event (<a href="https://github.com/can1357/oh-my-pi/issues/8824" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8824/hovercard">#8824</a>).</li>
<li>Fixed <code>omp commit</code> split-commit crashing with a misleading <code>No diff found for &lt;path&gt;</code> when a staged binary (or any payload) pushed <code>git diff --cached --binary</code> past the 8 MiB subprocess output cap. The capture is truncated silently, so files sorting after the binary vanished from the parsed diff; the split flow now requests a complete diff and fails fast naming the real cause instead (<a href="https://github.com/can1357/oh-my-pi/issues/8897" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8897/hovercard">#8897</a>).</li>
<li>Fixed a mid-run compaction being misread as a phantom overflow: after a compaction rebased the in-flight context snapshot, <code>getContextBreakdown</code> used message position (<code>anchorIndex &gt;= cutoffCount</code>) as a freshness proxy, so an in-flight provider response whose request predated the compaction out-ranked the rebased estimate and reported the pre-compaction token count (~2.6x the real one). This tripped the "Compaction freed too little context to make progress" guard and drove the frame-rescue path on a byte-identical <code>tokensBefore</code>. Assistant context snapshots now carry a monotonic compaction epoch, and a post-cutoff anchor whose epoch predates the last compaction is no longer trusted over the rebased estimate (<a href="https://github.com/can1357/oh-my-pi/issues/8887" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8887/hovercard">#8887</a>).</li>
<li>Fixed <code>after_provider_response</code> extension handlers receiving the primary session model in <code>ctx.model</code> and <code>ctx.models.current()</code> for cross-provider side requests. <code>ExtensionRunner.emitAfterProviderResponse</code> accepted the response model but discarded it, so a handler revoking a credential on an HTTP 402 could target the wrong provider. It now threads the response model into the context, matching <code>emitBeforeProviderRequest</code> (<a href="https://github.com/can1357/oh-my-pi/issues/8955" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8955/hovercard">#8955</a>).</li>
<li>Fixed the TinyFish web search provider ignoring the <code>lang:</code>/<code>language:</code> query directive, so every request fell back to the API's US/English geolocation. <code>parsed.lang</code> now maps onto TinyFish's <code>location</code>/<code>language</code> parameters (e.g. <code>lang:it-it</code> → <code>location=IT&amp;language=it</code>), matching the DuckDuckGo, Perplexity, and SearXNG providers (<a href="https://github.com/can1357/oh-my-pi/issues/8913" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8913/hovercard">#8913</a>).</li>
<li>Fixed the <code>/model</code> Roles panel silently dropping roles and model-keyed fallback chains that fell past the visible panel height: the list had no scroll window, so entries below the cutoff were unreachable with no indication anything was missing. The panel now windows around the cursor like the provider list and shows an <code>↑/↓ N more</code> hint when rows are clipped (<a href="https://github.com/can1357/oh-my-pi/issues/8817" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8817/hovercard">#8817</a>).</li>
<li>Fixed task and eval subagents discovering newly added agent definitions while resolving their role aliases from stale startup settings. Subagent preflight now atomically reloads persisted settings before agent discovery while preserving live runtime overrides.</li>
<li>Fixed images returned by tools mounted under <code>xd://</code> rendering only as file links instead of inline terminal graphics.</li>
<li>Resume Cursor idle-stall turns after completed MCP/todo tool results. The watchdog already closes the Connect stream, so unmarked blocks no longer need the <code>exec-resolved</code> marker to continue.</li>
<li>Fixed the Web Search Provider Order settings summary showing providers excluded from web search (<a href="https://github.com/can1357/oh-my-pi/issues/8884" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8884/hovercard">#8884</a>).</li>
<li>Fixed subagents aborting when external thinking exposes <code>think</code> as the required prelude before their remaining tools become callable (<a href="https://github.com/can1357/oh-my-pi/pull/8909" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8909/hovercard">#8909</a> by <a href="https://github.com/olegpulatov">@olegpulatov</a>).</li>
<li>Fixed session-title generation ignoring user <code>/skill:&lt;name&gt;</code> invocations, so titles now see the skill name and args instead of only later assistant text.</li>
<li>Fixed destructive <code>rm</code> escaping the critical-pattern approval check when anything separates the flags from the target, so <code>rm -rf -- /</code>, <code>rm --recursive --force /</code> and <code>rm -rf --no-preserve-root /</code> are now classified critical like <code>rm -rf /</code>. <code>--no-preserve-root</code> is treated as critical wherever it appears, since it is what defeats coreutils' own refusal to recurse on <code>/</code>.</li>
<li>Fixed thinking-loop aborts (<code>AIError.Flag.ThinkingLoop</code>) walking <code>retry.fallbackChains</code> and switching to another model family on attempt 1, so a healthy planning turn on Grok 4.6 (SuperGrok / Cursor OAuth) no longer gets replaced by whatever the chain lists next. The loop guard now re-samples the same model with its <code>thinking-loop-redirect</code> notice, and no longer parks the model selector on a fallback cooldown. (<a href="https://github.com/can1357/oh-my-pi/issues/8760" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8760/hovercard">#8760</a>)</li>
<li>Fixed the clipboard image-paste keybind attaching Finder's generated file icon instead of the copied image on macOS. Current Finder <code>Cmd+C</code> pasteboards advertise both a <code>public.file-url</code> and a generated 1024x1024 icon bitmap, so <code>arboard::get_image()</code> succeeded with the icon and <code>InputController.handleImagePaste</code> attached it before the file-URL branch was ever reached. The handler now probes <code>readMacFileUrlsFromClipboard()</code> before the bitmap representation, so an image file URL wins over the co-advertised icon; pure bitmap pasteboards (screenshots, browser copies) and non-image file URLs still fall through to the image/text paths (<a href="https://github.com/can1357/oh-my-pi/issues/8769" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8769/hovercard">#8769</a>).</li>
<li>Fixed the Home Manager module (<code>programs.omp.settings</code>) breaking every launch on macOS with <code>Failed to acquire native file lock … Permission denied (os error 13)</code>. The declared config is now copied into <code>~/.omp/agent/config.yml</code> as a writable file via <code>home.activation</code> instead of a read-only <code>/nix/store</code> symlink, so OMP can acquire its config lock and persist runtime changes; <code>home-manager switch</code> still reapplies the declared settings (<a href="https://github.com/can1357/oh-my-pi/issues/8775" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8775/hovercard">#8775</a>).</li>
<li>Fixed OpenCode MCP servers 401ing when config used OpenCode's <code>{env:VAR}</code>/<code>{file:path}</code> substitution (e.g. <code>Bearer {env:MCP_KEY}</code> headers); the OpenCode loader now expands those tokens the way OpenCode does instead of only <code>${VAR}</code> (<a href="https://github.com/can1357/oh-my-pi/issues/8778" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8778/hovercard">#8778</a>).</li>
<li>Fixed <code>omp update</code> leaking Bun's raw <code>fetch()</code> error ("pass <code>verbose: true</code> in the second argument to fetch()") when a proxy environment variable (<code>HTTPS_PROXY</code>, <code>ALL_PROXY</code>, …) uses an unsupported scheme such as SOCKS; the update check now reports an actionable message naming the offending variable and the http/https proxy requirement (<a href="https://github.com/can1357/oh-my-pi/issues/8784" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8784/hovercard">#8784</a>).</li>
<li>Fixed worker subprocesses (memory embeddings, tiny-model titles, TTS/STT, JS eval, browser relay, LSP mux, daemon broker) running with their cwd pinned to the CLI install directory. They share the agent's foreground process group, and terminal cwd heuristics such as kitty's <code>new_tab_with_cwd</code> pick the newest process in that group, so new terminal tabs opened in <code>~/.bun/install/global/node_modules/@oh-my-pi/pi-coding-agent/dist</code> while any worker was alive. Workers now spawn with the absolute host entry and inherit the agent's cwd.</li>
<li>Preserved MCP <code>ImageContent</code> tool-result blocks so vision-capable models and the TUI can inspect returned images instead of receiving only a text placeholder (<a href="https://github.com/can1357/oh-my-pi/issues/8687" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8687/hovercard">#8687</a>).</li>
<li>Fixed a whole-file <code>read</code> of a file with a UTF-8 BOM minting a hashline tag hashed from BOM-bearing text. Because the patcher's live read strips the BOM, the next edit to that file only applied through stale-hash recovery and reported that the file had changed externally when it had not.</li>
<li>Extension bare imports of workspace members now resolve inside installed git-dependency monorepo plugins (the walk recognizes <code>workspaces</code> roots; installed node_modules copies still shadow members)</li>
<li>Fixed <code>omp completions &lt;shell&gt;</code> hanging after writing shell completion scripts to stdout by invoking <code>postmortem.quit(0)</code> upon completion. Prevents lingering event loop handles (such as background timers or sockets loaded when inspecting command metadata) from pinning the process and blocking tools like <code>chezmoi</code>.</li>
<li>Fixed <code>omp --smoke-test</code> recursively deleting unrelated directories in <code>os.tmpdir()</code> (tmux/ssh sockets, editor state, build trees). The smoke broker now keeps its runtime dir under a private parent, and the dead-scope reclaim refuses any root that is not the <code>daemons</code> container and only prunes entries named like a 16-hex daemon scope key (<a href="https://github.com/can1357/oh-my-pi/issues/8721" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8721/hovercard">#8721</a>).</li>
<li>Fixed high CPU during multi-subagent / workflowz / orchestrate sessions: each live tool block (streaming args, a running partial tool, or a <code>task</code> subagent) armed its own 80ms spinner <code>setInterval</code> driving <code>requestComponentRender</code>, so N concurrent live blocks created N unsynchronized repaint timers that kept the render scheduler awake near-continuously. The per-block timers are now consolidated into a single shared spinner ticker that repaints every live block in one coalesced frame per glyph step, independent of block count (<a href="https://github.com/can1357/oh-my-pi/issues/8731" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8731/hovercard">#8731</a>).</li>
<li>Fixed <code>omp update</code> writing to the PATH launcher instead of the running binary on binary-only releases (major bumps or <code>omp.dist: "binary"</code>): a foreign symlink — e.g. an admin symlink into a shared install — now resolves to its real binary in every distribution channel, avoiding an <code>EACCES</code> on a root-owned link directory or a split-brain copy that shadows the shared install. Package-manager launchers keep their deliberate in-place takeover. (<a href="https://github.com/can1357/oh-my-pi/issues/8732" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8732/hovercard">#8732</a>)</li>
<li>Added <code>.css</code> to the built-in Biome server <code>fileTypes</code> so CSS files route through Biome's linter/asserter by default instead of requiring a full per-project <code>fileTypes</code> override. (<a href="https://github.com/can1357/oh-my-pi/pull/8741" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8741/hovercard">#8741</a>)</li>
<li>Fixed memory extraction sending its instructions, few-shot examples, and the user's message as a single user turn, which caused small local models to echo the examples instead of extracting facts; instructions now travel as a system turn and the raw text as the user turn</li>
<li>Fixed local title generation stopping on a stop string that appeared in the prompt instead of the generated tokens</li>
<li>Fixed the Subagents HUD role display and restored generated task labels by keeping spawn handles separate from UI descriptions.</li>
<li>Fixed <code>models.yml</code> custom-model providers declaring <code>auth: oauth</code> being rejected by validation with "apiKey is required", which forced a dummy <code>apiKey</code> that then shadowed the broker's OAuth tokens (<a href="https://github.com/can1357/oh-my-pi/pull/8937" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8937/hovercard">#8937</a> by <a href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a>).</li>
<li>Provider-qualified model selectors (e.g. <code>anthropic/claude-opus-5</code>) now fail closed when the named provider is unavailable instead of silently re-binding to OpenRouter's same-named flat id and billing the aggregator (<a href="https://github.com/can1357/oh-my-pi/issues/8832" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8832/hovercard">#8832</a>).</li>
<li>Fixed PlanYolo plan approval dropping all MCP tools: the post-handoff tool restore now accounts for MCP discovery that completed while planning instead of restoring a pre-discovery snapshot.</li>
<li>Fixed parallel <code>web_search</code> calls hanging forever past the 60s timeout when the shared headless-browser daemon or page died mid-setup; browser fallback setup and teardown are now abort-protected (<a href="https://github.com/can1357/oh-my-pi/issues/8865" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8865/hovercard">#8865</a>).</li>
<li>Fixed extension-package <code>.mcp.json</code> <code>${VAR}</code> env placeholders (stdio env/command/args/cwd, HTTP url/headers/oauth) reaching MCP servers unexpanded.</li>
<li>Advisor blocker advisories raised inside the post-interrupt immune window now wake a new turn instead of parking as asides until the next user prompt.</li>
<li>The exit banner only advertises <code>omp --resume &lt;id&gt;</code> when the session was actually written to disk, so the printed command no longer fails for sessions that ended before persistence (<a href="https://github.com/can1357/oh-my-pi/issues/8860" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8860/hovercard">#8860</a>).</li>
<li>Fixed terminals that deliver Shift+Enter as a bare LF (or the legacy CSI <code>13;2~</code> form) getting a plain switch instead of summarize-and-switch in the <code>/tree</code> selector (<a href="https://github.com/can1357/oh-my-pi/issues/8821" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8821/hovercard">#8821</a>).</li>
<li>Fixed OMP panicking at startup when the host environment contains a non-UTF-8 variable value; such entries are now skipped when copying the host environment into the shell (<a href="https://github.com/can1357/oh-my-pi/issues/8925" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8925/hovercard">#8925</a>).</li>
<li>Fixed <code>/mcp reauth</code> refusing to run the OAuth flow for HTTP MCP servers that allow unauthenticated <code>initialize</code> but require auth for <code>tools/call</code>; endpoint discovery now runs against the server URL before giving up (<a href="https://github.com/can1357/oh-my-pi/issues/8922" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8922/hovercard">#8922</a>).</li>
</ul>
<h2>@oh-my-pi/collab-web</h2>
<h3>Fixed</h3>
<ul>
<li>The ask tool card now renders the note the user attached to their answer; previously it was dropped from HTML exports and the collab guest view.</li>
</ul>
<h2>@oh-my-pi/pi-mnemopi</h2>
<h3>Added</h3>
<ul>
<li>Added optional task metadata to the runtime LLM completion interface so hosts can tell an extraction call from a consolidation call and choose the matching prompt</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Changed</h3>
<ul>
<li><code>enclosingBlockBoundaries</code> and <code>blockRangeAt</code> now reuse a parsed tree-sitter tree when the same source and language were parsed before, and skip subtrees whose line span holds no visible line. Together these cut the block-context work the <code>read</code> tool performs on every non-raw read: for an 81KB TypeScript source with a mid-file window, 13.4ms to 4.45ms on a first parse and to 0.149ms once the tree is cached; for a 1.06MB source, 188.1ms to 55.8ms and to 0.440ms. The tree cache is bounded (12 entries, 4MiB of retained source) and verifies content byte-for-byte on every hit, so a hash collision can only cost a re-parse. The subtree skip is proven equivalent by differential comparison against the exhaustive walk across 4827 repository files and 38,616 window comparisons.</li>
</ul>
<h2>@oh-my-pi/snapcompact</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed image-based compaction confusing digit <code>0</code> with letter <code>O</code> and corrupting compacted identifiers (e.g. Slack IDs): the default frame fonts (X.org <code>8x13</code>, <code>6x12</code>, <code>5x8</code>) drew zero as a bare oval indistinguishable from <code>O</code>. Zero now carries a disambiguating interior slash (<code>8x13</code>) or bar (<code>6x12</code>/<code>5x8</code>); unscii-8 already shipped a slashed zero (<a href="https://github.com/can1357/oh-my-pi/issues/8713" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8713/hovercard">#8713</a>).</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed images rendering as the <code>[Image: …]</code> text card on SIXEL terminals that expose no identifying environment variable (foot, xterm, contour): the graphics probe no longer requires Windows Terminal, and no longer reads an XTSMGRAPHICS success reply as a failure.</li>
<li>Fixed the multiline editor ignoring a <code>tui.input.submit</code> remap onto Ctrl+Enter: the hardcoded Ctrl/Shift+Enter → newline fallbacks now yield to an explicit submit binding, so Ctrl+Enter can be used to submit (<a href="https://github.com/can1357/oh-my-pi/issues/8906" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8906/hovercard">#8906</a>).</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Added</h3>
<ul>
<li>Exported <code>BINARY_SNIFF_BYTES</code>, the header window <code>isProbablyBinary</code> sniffs, so a caller holding the whole file in memory can classify the identical prefix through <code>isProbablyBinaryHeader</code> instead of reopening the file.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>Preserve MCP tools across PlanYolo handoff by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nick-maderight/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nick-maderight">@nick-maderight</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5177059413" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8866" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8866/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8866">#8866</a></li>
<li>fix(tui): render xdev tool images inline by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/daandden/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/daandden">@daandden</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5178330196" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8872" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8872/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8872">#8872</a></li>
<li>fix(compaction): bound summarization input and stop retrying overflow by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PaleRoses/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PaleRoses">@PaleRoses</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5185485027" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8920" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8920/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8920">#8920</a></li>
<li>fix(catalog): mark coreweave discovery authoritative by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dmontague-crwv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dmontague-crwv">@dmontague-crwv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5185657928" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8923" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8923/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8923">#8923</a></li>
<li>fix: skip non-UTF-8 host env entries instead of panicking at startup by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/STRML/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/STRML">@STRML</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5185931675" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8928" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8928/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8928">#8928</a></li>
<li>fix(catalog): register plain Codex route for worker <code>-wm</code> SKUs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/STRML/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/STRML">@STRML</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5185962425" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8929" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8929/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8929">#8929</a></li>
<li>fix(robomp): validate review comment anchors before submitting by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/djdembeck/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/djdembeck">@djdembeck</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5186542657" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8936" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8936/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8936">#8936</a></li>
<li>fix(coding-agent): allow auth oauth without apiKey in models.yml by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5186565456" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8937" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8937/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8937">#8937</a></li>
<li>fix(mcp): preserve image tool results by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5162061726" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8688" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8688/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8688">#8688</a></li>
<li>fix(snapcompact): disambiguate digit zero from letter O in frame fonts by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5163860737" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8715" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8715/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8715">#8715</a></li>
<li>fix(pi-ai): honor onPayload replacement payloads in openai-completions, bedrock and cursor by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ranxianglei/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ranxianglei">@ranxianglei</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5164020640" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8717" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8717/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8717">#8717</a></li>
<li>fix(ai): strip leaked ```thinking delimiters from Gemini thought summaries by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5164105072" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8722" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8722/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8722">#8722</a></li>
<li>fix(launch): scope daemon prune to the daemons container by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5164117674" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8723" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8723/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8723">#8723</a></li>
<li>fix(tui): detect SIXEL outside Windows Terminal by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shrimpza/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shrimpza">@shrimpza</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5164176925" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8724" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8724/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8724">#8724</a></li>
<li>fix(agent): harden compaction summaries against prompt injection by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/koopmannleon19977-cmyk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/koopmannleon19977-cmyk">@koopmannleon19977-cmyk</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5164708725" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8727" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8727/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8727">#8727</a></li>
<li>fix(tui): consolidate live tool spinner timers into one shared ticker by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5164840722" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8733" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8733/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8733">#8733</a></li>
<li>fix(ai): name selected provider in opencode login prompt by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5165197737" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8739" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8739/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8739">#8739</a></li>
<li>fix(catalog): expose grok-4.6 thinking levels on xai-oauth by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Unravl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Unravl">@Unravl</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5165868713" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8745" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8745/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8745">#8745</a></li>
<li>fix(memory): separate extraction instructions from user input by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alphastorm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alphastorm">@alphastorm</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5165979015" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8750" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8750/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8750">#8750</a></li>
<li>fix(tiny): match title stop string against generated tokens only by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alphastorm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alphastorm">@alphastorm</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5166043596" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8752" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8752/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8752">#8752</a></li>
<li>fix(coding-agent): classify destructive rm with long options as critical by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ghosty-11/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ghosty-11">@ghosty-11</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5166051045" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8753" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8753/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8753">#8753</a></li>
<li>fix(auth): rotate when a ChatGPT account lacks the requested Codex model by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alphastorm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alphastorm">@alphastorm</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5166081789" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8756" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8756/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8756">#8756</a></li>
<li>fix(coding-agent): keep thinking-loop retries on the same model by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5166423913" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8761" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8761/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8761">#8761</a></li>
<li>fix(ai): encode empty successful tool_result content as empty string by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pgagarinov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pgagarinov">@pgagarinov</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5166728421" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8768" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8768/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8768">#8768</a></li>
<li>fix(tui): prefer macOS file URL over Finder icon bitmap on image paste by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5166835904" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8770" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8770/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8770">#8770</a></li>
<li>fix(ai): honor Fable/Mythos tier usage in usage-reserve health by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5166964458" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8774" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8774/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8774">#8774</a></li>
<li>fix(nix): install writable home-manager config instead of store symlink by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5167195426" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8776" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8776/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8776">#8776</a></li>
<li>fix(discovery): expand OpenCode {env:} and {file:} config tokens by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5167389085" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8781" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8781/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8781">#8781</a></li>
<li>fix(update): surface actionable message for unsupported proxy schemes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5167833829" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8785" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8785/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8785">#8785</a></li>
<li>fix(collab-web): render the user-added note in ask tool cards by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Liangzhi233/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Liangzhi233">@Liangzhi233</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5168062473" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8786" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8786/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8786">#8786</a></li>
<li>fix(tests): stop ANTHROPIC_BASE_URL from failing the Anthropic suites by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Huang-404-Q/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Huang-404-Q">@Huang-404-Q</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5169017856" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8795" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8795/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8795">#8795</a></li>
<li>fix(tui): show subagent role and generate real HUD labels by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/atacolak/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/atacolak">@atacolak</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5169192803" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8797" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8797/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8797">#8797</a></li>
<li>fix(tests): stop the checkout location and system zshrc from failing tests by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Huang-404-Q/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Huang-404-Q">@Huang-404-Q</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5169854553" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8799" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8799/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8799">#8799</a></li>
<li>fix(tests): isolate TUI scrollback tests from terminal multiplexers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Huang-404-Q/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Huang-404-Q">@Huang-404-Q</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5170672412" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8806" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8806/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8806">#8806</a></li>
<li>fix(ai): accept Perplexity OTP challenge token by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/onsails/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/onsails">@onsails</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5172449720" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8819" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8819/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8819">#8819</a></li>
<li>fix: resolve workspace-member imports in installed git-dep monorepo plugins by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sjawhar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sjawhar">@sjawhar</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5173021958" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8826" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8826/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8826">#8826</a></li>
<li>fix(ai): answer Cursor hosted WebFetch permission queries by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Unravl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Unravl">@Unravl</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5173277437" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8830" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8830/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8830">#8830</a></li>
<li>fix: provider-qualified model selectors fail closed instead of shadowing to OpenRouter by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/STRML/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/STRML">@STRML</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5173511051" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8833" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8833/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8833">#8833</a></li>
<li>perf(pi-ast): cache parsed trees and prune subtrees that cannot hold a boundary by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alphastorm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alphastorm">@alphastorm</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5175428386" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8848" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8848/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8848">#8848</a></li>
<li>perf(read): materialize a local file once per read by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alphastorm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alphastorm">@alphastorm</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5175432033" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8849" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8849/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8849">#8849</a></li>
<li>fix(catalog): add deepseek-v4-pro-0813 discovery limits by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tommyldev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tommyldev">@tommyldev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5175577038" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8852" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8852/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8852">#8852</a></li>
<li>fix(discovery): honor Claude Code enabledPlugins for marketplace plugins by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/drycode/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/drycode">@drycode</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5175784056" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8857" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8857/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8857">#8857</a></li>
<li>fix(task): refresh model roles before agent discovery by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/z80dev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/z80dev">@z80dev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5176818003" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8864" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8864/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8864">#8864</a></li>
<li>fix(catalog): map aliased Gemini Flash minimal to LOW on Cloud Code Assist by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/audreyt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/audreyt">@audreyt</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5178029234" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8871" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8871/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8871">#8871</a></li>
<li>fix(web-search): abort-protect browser fallback setup and teardown by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kimono381/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kimono381">@kimono381</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5179612823" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8879" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8879/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8879">#8879</a></li>
<li>fix(coding-agent): stop pinning worker subprocess cwd to the install dir by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chuzui/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chuzui">@chuzui</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5179854938" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8883" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8883/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8883">#8883</a></li>
<li>fix(cursor): answer interactionQuery and resume idle-stall MCP turns by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bnivanov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bnivanov">@bnivanov</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5182036752" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8889" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8889/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8889">#8889</a></li>
<li>fix(discovery): expand extension-package MCP env placeholders by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/drycode/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/drycode">@drycode</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5183930528" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8903" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8903/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8903">#8903</a></li>
<li>Advisor blocker advisories wake a new turn instead of parking in the immune window by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/STRML/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/STRML">@STRML</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5184028415" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8905" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8905/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8905">#8905</a></li>
<li>fix(coding-agent): condition think prelude guidance for subagents by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/olegpulatov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/olegpulatov">@olegpulatov</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5184681445" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8909" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8909/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8909">#8909</a></li>
<li>fix(session): generate titles from /skill invocation args by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/qiyi71w/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/qiyi71w">@qiyi71w</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5184699384" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8911" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8911/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8911">#8911</a></li>
<li>fix(session): only advertise --resume when the session is on disk by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/re2zero/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/re2zero">@re2zero</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5185043472" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8915" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8915/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8915">#8915</a></li>
<li>fix(tui): treat bare LF as Shift+Enter in the /tree selector by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/re2zero/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/re2zero">@re2zero</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5185045003" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8916" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8916/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8916">#8916</a></li>
<li>fix(sdk): accept flattened array argument paths from providers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/re2zero/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/re2zero">@re2zero</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5185046387" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8917" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8917/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8917">#8917</a></li>
<li>fix(cli): exit cleanly after printing shell completions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/czchen/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/czchen">@czchen</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5163331074" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8704" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8704/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8704">#8704</a></li>
<li>fix(compaction): honor /clear reset boundary in prepareCompaction by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5164073284" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8720" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8720/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8720">#8720</a></li>
<li>fix(coding-agent): resolve update target from the running binary, not the PATH launcher by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5164843396" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8734" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8734/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8734">#8734</a></li>
<li>fix(task): initialize extension runtime on subagent revival by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5190760821" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8966" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8966/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8966">#8966</a></li>
<li>docs: clarify bash.patterns gates the bash tool only, not eval by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5190769387" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8967" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8967/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8967">#8967</a></li>
<li>fix(ai): hoist assistant message interleaved in responses tool batch by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5190776454" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8968" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8968/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8968">#8968</a></li>
<li>fix(tui): pin anchored regions under an unpinned streaming seam by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5190815515" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8970" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8970/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8970">#8970</a></li>
<li>fix(ai): surface litellm concurrency-admission 429 immediately by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5190851453" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8973" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8973/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8973">#8973</a></li>
<li>fix(catalog): self-heal a corrupt models.db model cache by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5190897735" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8975" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8975/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8975">#8975</a></li>
<li>fix(commit): fail loudly when staged binary truncates split-commit diff by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5190952706" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8976" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8976/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8976">#8976</a></li>
<li>fix(tui): honor tui.input.submit remap onto ctrl+enter by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5190978312" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8977" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8977/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8977">#8977</a></li>
<li>fix(compaction): reject stale pre-compaction anchor in context breakdown by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191012446" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8978" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8978/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8978">#8978</a></li>
<li>fix(coding-agent): paint optimistic row for idle /skill submits by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191056544" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8979" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8979/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8979">#8979</a></li>
<li>fix(catalog): route opencode-go muse-spark to responses api by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191101554" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8980" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8980/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8980">#8980</a></li>
<li>fix(catalog): route copilot grok-4.6 through responses api by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191114216" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8981" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8981/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8981">#8981</a></li>
<li>fix(ai): serve IPv4-only OAuth callback when IPv6 is disabled by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191179505" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8982" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8982/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8982">#8982</a></li>
<li>fix(mcp): refresh broker-backed MCP OAuth credentials by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191184076" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8983" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8983/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8983">#8983</a></li>
<li>fix(sdk): thread response model into after_provider_response context by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191256484" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8985" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8985/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8985">#8985</a></li>
<li>fix(coding-agent): honor lang: directive in TinyFish search by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191261043" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8986" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8986/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8986">#8986</a></li>
<li>fix(catalog): collapse Cursor Grok 4.5/4.6 effort siblings by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191333800" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8988" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8988/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8988">#8988</a></li>
<li>fix(tui): scroll the /model Roles view so clipped rows stay reachable by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191341204" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8990" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8990/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8990">#8990</a></li>
<li>fix(catalog): recover gmi-cloud model params from canonical index by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191379160" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8991" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8991/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8991">#8991</a></li>
<li>fix(commit): preserve binary patch terminators in split-commit round-trip by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191477532" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8993" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8993/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8993">#8993</a></li>
<li>fix(cli): strip launch-global flags before non-launch subcommands by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191483799" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8995" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8995/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8995">#8995</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nick-maderight/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nick-maderight">@nick-maderight</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5177059413" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8866" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8866/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8866">#8866</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PaleRoses/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PaleRoses">@PaleRoses</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5185485027" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8920" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8920/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8920">#8920</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dmontague-crwv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dmontague-crwv">@dmontague-crwv</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5185657928" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8923" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8923/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8923">#8923</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/STRML/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/STRML">@STRML</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5185931675" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8928" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8928/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8928">#8928</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ranxianglei/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ranxianglei">@ranxianglei</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5164020640" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8717" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8717/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8717">#8717</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shrimpza/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shrimpza">@shrimpza</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5164176925" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8724" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8724/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8724">#8724</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Unravl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Unravl">@Unravl</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5165868713" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8745" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8745/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8745">#8745</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ghosty-11/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ghosty-11">@ghosty-11</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5166051045" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8753" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8753/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8753">#8753</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pgagarinov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pgagarinov">@pgagarinov</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5166728421" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8768" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8768/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8768">#8768</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Liangzhi233/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Liangzhi233">@Liangzhi233</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5168062473" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8786" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8786/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8786">#8786</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Huang-404-Q/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Huang-404-Q">@Huang-404-Q</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5169017856" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8795" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8795/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8795">#8795</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/onsails/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/onsails">@onsails</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5172449720" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8819" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8819/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8819">#8819</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sjawhar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sjawhar">@sjawhar</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5173021958" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8826" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8826/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8826">#8826</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tommyldev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tommyldev">@tommyldev</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5175577038" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8852" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8852/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8852">#8852</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/drycode/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/drycode">@drycode</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5175784056" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8857" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8857/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8857">#8857</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kimono381/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kimono381">@kimono381</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5179612823" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8879" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8879/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8879">#8879</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chuzui/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chuzui">@chuzui</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5179854938" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8883" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8883/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8883">#8883</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bnivanov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bnivanov">@bnivanov</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5182036752" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8889" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8889/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8889">#8889</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/qiyi71w/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/qiyi71w">@qiyi71w</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5184699384" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8911" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8911/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8911">#8911</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/czchen/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/czchen">@czchen</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5163331074" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8704" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8704/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8704">#8704</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.3.7...v17.3.8">v17.3.7...v17.3.8</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.4.0 (20.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.4.020.08.2026@github-actions[bot]@oh-my-pi/pi-agent-core
Breaking Changes

Replaced global token counting functions (countTokens, countTokensConservatively, setTokenizerModel, and estimateTokens) with model-scoped, immutable Tokenizer instances (agent.tokenizer). Use tokenizer...]]></description>
<link>https://tsecurity.de/de/3746288/tools/github-release-can1357oh-my-pi-v1740-20082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746288/tools/github-release-can1357oh-my-pi-v1740-20082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:53:58 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.4.0" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.4.0</span><span class="badge gh-badge gh-badge-date">20.08.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Replaced global token counting functions (<code>countTokens</code>, <code>countTokensConservatively</code>, <code>setTokenizerModel</code>, and <code>estimateTokens</code>) with model-scoped, immutable <code>Tokenizer</code> instances (<code>agent.tokenizer</code>). Use <code>tokenizer.countTokens(text, mode?)</code>, <code>tokenizer.countMessage(message)</code>, or <code>tokenizer.countMessages(messages)</code>.</li>
<li>Updated context management functions (<code>findCutPoint</code>, <code>prepareBranchEntries</code>, <code>collectShakeRegions</code>, <code>pruneToolOutputs</code>, <code>pruneSupersededToolResults</code>, and <code>trimRemoteCompactionInputToContextWindow</code>) to require an explicit <code>Tokenizer</code> instance.</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added <code>Tokenizer.checkTokenBudget(text, budget)</code> to efficiently verify if text fits within a token limit using fast byte-bound checks before falling back to full tokenization.</li>
<li>Added provider-anchored transcript token estimation (<code>findTranscriptUsageAnchor</code>, <code>isTranscriptUsageAnchor</code>, <code>estimateTranscriptTokens</code>) to calculate transcript token counts incrementally from the latest reported assistant turn usage.</li>
<li>Added <code>remotePreserveReusable()</code> to check whether a previous remote compaction payload remains reusable with the active model.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Expanded native tokenizer support across catalog models, adding exact embedded token counting for Claude, Qwen 3.5+, DeepSeek V3/V4/R1, Kimi K2/K3, and GLM-5+ models. <code>Tokenizer</code> now constructs from a resolved catalog <code>Model</code>.</li>
<li><code>createCompactionSummaryMessage</code> takes an options object after <code>(summary, tokensBefore, timestamp)</code>; <code>CompactionSummaryMessage</code> gained optional <code>method</code> and <code>tokensAfter</code> display metadata.</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>Added model metadata fields (<code>context_length</code>, <code>max_output_tokens</code>, <code>input_modalities</code>, etc.) to auth gateway model listing responses</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed tool-argument repair applying lossy transformations (such as stringifying objects or stripping unrecognized keys) when validating union schemas (<code>anyOf</code>/<code>oneOf</code>), preventing corrupted tool call and subagent payloads</li>
<li>Fixed 400 errors when communicating with local OpenAI-compatible inference servers that reject <code>chat_template_kwargs.reasoning_effort</code> by improving reasoning effort parameter fallback and compatibility handling</li>
<li>Fixed DeepSeek-family models on hosts like Fireworks losing reasoning whenever tools were offered: a redundant <code>tool_choice: "auto"</code> is now omitted so the provider keeps thinking enabled; forced and <code>"none"</code> selectors still take priority (<a href="https://github.com/can1357/oh-my-pi/issues/1207" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/1207/hovercard">#1207</a>)</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Models now include an optional <code>tokenizer</code> family field across bundled, discovered, and custom models (supporting Claude, Qwen, DeepSeek, Kimi, and GLM families), with support for explicit overrides in model configuration.</li>
<li>Added long-context cost tiers (<code>cost.longContext</code>) to subscription Codex GPT-5.6 models (Sol, Terra, Luna) matching first-party API pricing above 272K input tokens.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Bundled model metadata is prebuilt during generation, reducing catalog startup work.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed tool-call turn failures for <code>opencode-go/muse-spark-1.2</code> and related variants by ensuring API transport pins apply to live discovery and automatically inferring response routes for gateway-first OpenCode models (<a href="https://github.com/can1357/oh-my-pi/issues/8957" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8957/hovercard">#8957</a>).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li><code>/cleanse</code> (and <code>omp cleanse</code>) — run the checker/repair loop in-session, with a live status board of running checkers, repair subagents, and token/cost totals.</li>
<li><code>omp ps</code> — interactive monitor for daemon-supervised background processes.</li>
<li>Composer layouts — <code>composer.shape</code> picks the editor frame (rounded box, Claude Code rules, upstream-pi rules, borderless), with live previews in <code>/settings</code> and the setup wizard.</li>
<li>Context line — <code>statusLine.contextLine</code> gauge (<code>percentage</code>, <code>annotated</code>, <code>embedded</code>) showing context usage and compaction boundaries.</li>
<li>Backgroundable Python — <code>eval</code> cells can run async and auto-background like <code>bash</code>, with configurable thresholds.</li>
<li>Local Claude token counting — Anthropic-family tokens now count via a native local tokenizer, and every counter (session maintenance, advisor, stats, context tools) uses the active model's own tokenizer.</li>
<li><code>extendedContext</code> setting — pick whether models with premium long-context pricing (272K/1M tiers on Codex-class models) use the extended window or compact early and stay on standard pricing.</li>
<li><code>/extended-context</code> — toggle premium long-context windows without leaving the session.</li>
<li>Speculative compaction — with <code>compaction.asyncEnabled</code>, all compaction modes compact in parallel while the session continues, then splice the result in instantly.</li>
<li><code>tokenizer</code> property on custom models and <code>modelOverrides</code> to pin the tokenizer family for proxy models.</li>
<li><code>qwenTemplateReasoningEffort</code> in <code>models.yml</code> <code>compat</code> to disable the Qwen 3.8+ reasoning-effort template parameter for strict local servers.</li>
<li>Click-to-toggle and drag-to-reorder for list-valued editors in <code>/settings</code>.</li>
<li><code>icon.subscription</code> and <code>icon.advisor</code> symbol-theme tokens (Nerd Font, Unicode, ASCII).</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Typing anywhere in the /models UI now immediately focuses the model list for instant search and arrow navigation.</li>
<li>Revamped the todo HUD — overall progress renders along the tree-spine connector with smooth completion transitions.</li>
<li>Compaction divider now names the maintenance method that fired (<code>remote-compacted</code>, <code>soft-compacted</code>, <code>handed-off</code>, <code>snap-compacted</code>) and shows the before → after context size (e.g. <code>256K→20K</code>).</li>
<li><code>/handoff</code> (and automatic handoff compaction) now compacts in place, replacing the session context instead of forking a new session.</li>
<li>Compaction method priorities — <code>compaction.methodOrder</code> takes an ordered preference list (e.g. <code>[remote, snap]</code> uses remote compaction where the provider supports it, such as OpenAI, and snap everywhere else), replacing <code>compaction.strategy</code>/<code>compaction.remoteEnabled</code>.</li>
<li>Unified inline overlays and selectors (model picker, settings, <code>/cleanse</code>) into one titled rounded-box panel style.</li>
<li>Risk badges and warnings on <code>/settings</code> rows, starting with External Thinking.</li>
<li>Faster CLI Startup</li>
</ul>
<h3>Fixed</h3>
<ul>
<li><code>/models</code> keeps <code>auto</code> thinking on non-default roles such as <code>task</code> instead of changing the active model and displaying the role as <code>max</code>.</li>
<li>Subagent <code>yield</code> structured results no longer get corrupted by lossy argument repairs; prompt guidance improved for weak callers.</li>
<li>GitHub <code>file_read</code> returns proper image blocks and direct view URLs for image/binary files.</li>
<li>Cancelled prompts during pre-stream turn setup restore the text and image attachments to the editor.</li>
<li><code>top</code> builtin accepts single-dash macOS flags such as <code>-pid</code> and <code>-stats</code>.</li>
<li>GNU/BSD compat sweep across built-in shell utilities (<code>timeout</code>, <code>diff</code>, <code>find</code>, <code>date</code>, <code>tail</code>, <code>head</code>, <code>rg</code>, <code>stat</code>, <code>truncate</code>, <code>cksum</code>, <code>sleep</code>, <code>which</code>, <code>nohup</code>, <code>kill</code>).</li>
</ul>
<h2>@oh-my-pi/hashline</h2>
<h3>Added</h3>
<ul>
<li>Added an opener-escape landing correction for insertions anchored on a construct's opening line to place shallower sibling constructs after the enclosing block rather than splitting the opener from its body.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where single-line replacements echoing attributes or decorators (such as <code>#[napi]</code> or <code>@Injectable()</code>) could lead to silently duplicated annotations.</li>
<li>Increased the default snapshot-store path capacity from 30 to 256 to prevent early tags in wide sessions from aging out and triggering misleading "hash is not from this session" errors.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Added</h3>
<ul>
<li>Added offline <code>countTokens</code> support for Anthropic Claude families (<code>ClaudeV3</code>, <code>ClaudeV47</code>, <code>ClaudeV5</code>) via a high-performance native port of <code>ctok</code>.</li>
<li>Added exact offline token counting support for Qwen (3.5+, 3.6+, 3.8), DeepSeek (V3, V4, R1), Kimi (K2, K3), and GLM-5 models alongside rebuilt OpenAI encodings, with optimized zero-allocation string passing from JavaScript.</li>
<li>Added <code>nodeChainAt</code> native API to retrieve innermost-first tree-sitter node chains with grammar kinds and line spans for structural syntax analysis.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Improved shell builtins (<code>grep</code>, <code>rg</code>, <code>sed</code>, <code>cat</code>, <code>head</code>, <code>tail</code>, <code>jq</code>, <code>ls</code>, etc.) to stream output progressively with destination-aware line buffering for pipes, terminals, and live TUI output, while maintaining block buffering for file writes.</li>
<li>Updated compound blocks (<code>{ ...; }</code>, <code>(...)</code>) and shell-function pipeline stages to run concurrently with other pipeline stages, preventing head-of-line blocking and pipe buffer deadlocks.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed the shell output minimizer dropping failure details from non-TTY <code>bun test</code> runs: the <code>(fail)</code> line, code frame, <code>error:</code> assertion, and stack trace are now kept instead of collapsing a failing run to bare pass/fail counts; unrecognized failing test formats now fall back to head/tail instead of counts-only output.</li>
</ul>
<h2>@oh-my-pi/omp-stats</h2>
<h3>Changed</h3>
<ul>
<li>Window token estimates now incorporate broker-reported fleet token burn when an auth broker is configured, accurately tracking fleet-wide usage instead of undercounting with local-only statistics.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue in subscription-window insights where distinct limits sharing a duration label (such as Anthropic overall vs. model-scoped 7-day windows) were incorrectly merged, which inflated window-equivalents and skewed tokens-per-window estimates. Windows are now grouped by provider limit ID.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Added</h3>
<ul>
<li>Added composer border styles (<code>box</code>, <code>claude</code>, <code>pi</code>, <code>borderless</code>) via <code>ComposerStyle</code> objects and <code>getComposerStyle</code>, unifying chrome geometry and rendering across the editor and previews.</li>
<li>Added support for warning risk notes and row markers in settings lists.</li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.3.8...v17.4.0">v17.3.8...v17.4.0</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.4.1 (21.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.4.121.08.2026@github-actions[bot]@oh-my-pi/pi-agent-core
Fixed

Fixed Codex remote compaction requests failing for region-pinned enterprise ChatGPT workspaces when requests egress from a different region.

@oh-my-pi/pi-ai
Added

Added Codex Responses support for Code Mode, pre...]]></description>
<link>https://tsecurity.de/de/3746287/tools/github-release-can1357oh-my-pi-v1741-21082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746287/tools/github-release-can1357oh-my-pi-v1741-21082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:53:48 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.4.1" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.4.1</span><span class="badge gh-badge gh-badge-date">21.08.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Codex remote compaction requests failing for region-pinned enterprise ChatGPT workspaces when requests egress from a different region.</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>Added Codex Responses support for Code Mode, preserving tool modes and passing tool namespace metadata during sessions.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed OpenAI Codex requests failing with HTTP 401 data residency errors on enterprise ChatGPT workspaces when connecting from a different region via VPN or proxy.</li>
<li>Fixed concurrent xAI OAuth token refreshes revoking shared credentials across multiple processes.</li>
<li>Fixed Amazon Bedrock Converse multi-turn conversations failing on models like Amazon Nova due to unsigned reasoning content in replayed turns.</li>
<li>Fixed Antigravity OAuth login handling for project discovery and free-tier onboarding against Cloud Code Assist endpoints.</li>
<li>Fixed provider-detected OAuth access token expiration terminating active turns instead of automatically refreshing credentials and replaying the request.</li>
<li>Fixed compatibility issues with OpenAI-compatible servers (such as NInfer and vLLM) rejecting <code>reasoning_effort</code> inside <code>chat_template_kwargs</code>.</li>
<li>Fixed Google Cloud Code Assist and Antigravity rejecting MCP tool schemas with unsupported annotations (<code>x-mcp-header</code>, <code>deprecated</code>, <code>readOnly</code>, <code>writeOnly</code>, <code>$comment</code>).</li>
<li>Fixed Cursor provider issues with native file edit streaming (<code>editToolCall</code>) and ensuring always-apply system rules are properly preserved.</li>
<li>Fixed Cursor HTTP/2 requests ignoring standard proxy environment variables (<code>HTTP_PROXY</code>, <code>HTTPS_PROXY</code>, <code>ALL_PROXY</code>, <code>NO_PROXY</code>).</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added helper functions and constants for reading enterprise ChatGPT workspace data-residency regions from Codex OAuth access tokens and forwarding the residency header to Codex backend endpoints.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Preserved API-advertised <code>tool_mode</code> metadata (such as <code>code_mode_only</code> for GPT-5.6 Code Mode models) on Codex catalog models and types (<a href="https://github.com/can1357/oh-my-pi/pull/9069" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9069/hovercard">#9069</a>).</li>
<li>Added an optional <code>tokenizer</code> family field across bundled, discovered, and custom catalog models (<code>claude-v3</code>/<code>v47</code>/<code>v5</code>, Qwen 3.5+, DeepSeek V3/V4/R1, Kimi K2/K3, and GLM-5+), which can also be explicitly overridden in model configuration.</li>
<li>Updated subscription Codex GPT-5.6 Sol, Terra, and Luna models to include first-party <code>cost.longContext</code> pricing tiers for token inputs exceeding 272K tokens.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Vercel AI Gateway Muse Spark 1.2 Contributor requests failing with HTTP 400 errors by capping advertised output allowances to the model's 131K limit.</li>
<li>Fixed LiteLLM model discovery to route OpenAI models through the Responses API for reasoning summaries in thinking blocks (<a href="https://github.com/can1357/oh-my-pi/pull/9085" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9085/hovercard">#9085</a>).</li>
<li>Fixed OpenCode Console Go and Zen Responses providers rejecting forced tool choices by automatically downgrading forced or named tool selections to <code>auto</code>.</li>
<li>Fixed OpenCode Go Muse Spark 1.2 and Muse Spark 1.2 Contributor models failing during tool calls or missing reasoning effort levels, ensuring they correctly route to the Responses API with full thinking, context, and multimodal support (<a href="https://github.com/can1357/oh-my-pi/issues/8957" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8957/hovercard">#8957</a>).</li>
<li>Improved OpenCode gateway model discovery to automatically infer the Responses API route for unlisted models from sibling gateways and billing base variants.</li>
<li>Fixed Cursor GPT-5.6 (Luna, Sol, and Terra) model discovery creating duplicate rows for each thinking tier by collapsing tiers into unified models with configurable reasoning effort (<a href="https://github.com/can1357/oh-my-pi/issues/9025" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/9025/hovercard">#9025</a>).</li>
<li>Fixed Google Gemini CLI model discovery failing with <code>403 PERMISSION_DENIED</code> by directing catalog refresh requests to the appropriate Antigravity discovery endpoints (<a href="https://github.com/can1357/oh-my-pi/issues/8885" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8885/hovercard">#8885</a>).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added <code>PERSONALITY.md</code> support: <code>~/.omp/agent/PERSONALITY.md</code> (profile/XDG-aware agent dir) replaces the system prompt's personality block text; <code>personality: none</code> still omits the block (<a href="https://github.com/can1357/oh-my-pi/issues/8528" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8528/hovercard">#8528</a>)</li>
<li>Sloppy edits now support inline replacements with <code>⟪old│new⟫</code> syntax (<code>⟪old│⟫</code> for deletions and <code>⟪│new⟫</code> for insertions), alongside automatic recovery for common formatting mistakes without needing a retry.</li>
<li>Sloppy edits now recover operations that mix <code>⟪old│new⟫</code> inline replacements with a <code>»</code> REWRITE instead of failing the payload: a redundant REWRITE is dropped, a diverging one is applied as the final text, and a note explains the interpretation.</li>
<li>Expanded archive support in <code>read</code> and <code>write</code> tools: <code>read</code> can now inspect and extract members from <code>.rar</code>, <code>.7z</code>, <code>.iso</code>, <code>.cab</code>, <code>.deb</code>, <code>.rpm</code>, <code>.cpio</code>, <code>.ar</code>/<code>.a</code>, <code>.lzh</code>, <code>.arj</code>, compressed tar files (<code>.tar.bz2</code>, <code>.tar.xz</code>, <code>.tar.zst</code>), package formats (<code>.whl</code>, <code>.ipa</code>, <code>.xpi</code>, <code>.vsix</code>, <code>.nupkg</code>, <code>.cbz</code>, <code>.cbr</code>), <code>.asar</code> archives, and single-file compressed streams; <code>write</code> can create <code>.tar.zst</code> and update <code>.asar</code> archives.</li>
<li>Added Code Mode for Codex <code>code_mode_only</code> models via <code>providers.openai-codex.codeMode</code> (<code>off</code>/<code>on</code>/<code>auto</code>), demoting non-essential tools into an eval bridge with generated TypeScript definitions.</li>
<li>MCP tool names longer than 64 characters are now automatically truncated with a deterministic hash suffix to comply with strict provider validators.</li>
<li>Marketplace-installed plugins with manifest settings can now be configured through <code>omp plugin config</code> and Settings → Plugins.</li>
<li>Configured discovery providers with <code>authHeader</code> now preserve cached models across application restarts.</li>
<li>Added repeat read warning hints when identical file content is read multiple times.</li>
<li>Explicit DAP adapters can now attach without a PID or port when <code>attachDefaults</code> provide the target arguments.</li>
<li>Added <code>isProjectTrusted()</code> compatibility shim to <code>ExtensionContext</code> for extensions targeting upstream per-directory trust gates.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Added <code>compaction.asyncEnabled</code> (default: on) to speculatively summarize context in the background before hitting threshold limits, avoiding blocking summarization pauses.</li>
<li>Replaced <code>compaction.strategy</code> and <code>compaction.remoteEnabled</code> with an ordered <code>compaction.methodOrder</code> preference list.</li>
<li>Handoff maintenance (<code>/handoff</code> and automatic handoff compaction) now commits generated summaries directly to the active session instead of starting a new session.</li>
<li>Added <code>extendedContext</code> setting (<code>/settings</code> → Context → General, default: on) to optionally clamp models with premium long-context pricing tiers (such as OpenAI GPT-5.6 Sol/Terra/Luna) to standard-pricing token limits before compaction triggers.</li>
<li>Token counting and token estimations are now dynamically scoped to each specific model tokenizer rather than using a single process-global tokenizer.</li>
<li><code>omp cleanse</code> and <code>/cleanse</code> now feature a live interactive status board displaying active checkers, repair subagents, tool metrics, and token/cost totals in real time.</li>
<li>Eval-bridge nested <code>tool.&lt;name&gt;()</code> calls now enforce ACP permission gates and tool allowlists identically to direct tool calls.</li>
<li>Added <code>tokenizer</code> option to custom models and <code>modelOverrides</code> to allow overriding the local tokenizer family for proxied model endpoints.</li>
<li>Added <code>qwenTemplateReasoningEffort</code> to the <code>models.yml</code> <code>compat</code> schema to configure or disable reasoning effort flags for strict local inference servers.</li>
<li>Settings menus now support click-to-toggle and drag-to-reorder for list items, as well as warning indicators and risk notes on sensitive options such as External Thinking.</li>
<li>Supervised process completion notices now render as compact single-line entries.</li>
<li>The todo HUD header now displays a consolidated progress bar showing task completion across all stages.</li>
<li><code>/settings</code> rows can now carry a risk note: a warning glyph on the row plus a warning-colored line above the description. <code>External Thinking</code> (<code>externalThinking</code>, <code>--external-thinking</code>) is the first user — providers have flagged the request shape it produces as abuse, up to account-level enforcement, so both the settings entry and <code>--help</code> now say so.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed regional HTTP 401 data-residency errors during Codex chat, web search, and image generation requests by passing token residency metadata on requests.</li>
<li>Fixed macOS SSH ControlMaster socket creation failures caused by <code>sun_path</code> length limits when using named profiles.</li>
<li>Fixed an issue where Nix-packaged builds failed to load on-demand native addons (<code>onnxruntime-node</code>/<code>sherpa-onnx</code>) due to missing shared C++ runtime library paths.</li>
<li>Fixed external editor spawning (Ctrl+G, plan review, <code>/todo edit</code>) failing to attach to visible terminals for editors like <code>emacsclient</code>.</li>
<li>Fixed <code>omp --resume</code> spinning at 100% CPU when new session entries arrived during initial transcript rendering.</li>
<li>Fixed session resume hints and fatal exit messages omitting the active <code>--profile</code> argument.</li>
<li>Fixed MCP OAuth authorization requests failing on pre-registered clients with restricted scopes by using RFC 9728 <code>scopes_supported</code>.</li>
<li>Fixed isolated task subagents causing out-of-memory crashes on repositories with large uncommitted binary files by pre-sizing diffs and enforcing snapshot limits.</li>
<li>Fixed LM Studio and lazy-loaded local models retaining uninitialized context lengths by re-probing loaded context lengths after initial inference.</li>
<li>Fixed project-scoped Claude Code marketplace plugins incorrectly loading into sessions in other projects.</li>
<li>Fixed configured advisors backed by discoverable providers remaining inactive on initial session startup until manually toggled.</li>
<li>Fixed resolving <code>--model @&lt;role&gt;</code> failing for roles backed by discovery providers like oMLX, Ollama, and llama-swap.</li>
<li>Fixed retry fallback chains stopping prematurely when encountering nested fallback configurations, and fixed session role priority during fallback chain selection.</li>
<li>Fixed cancelled prompts disappearing upon abort during turn setup, properly restoring user text and attachments to the input editor.</li>
<li>Fixed built-in shell utilities (<code>grep</code>, <code>rg</code>, <code>diff</code>, <code>find</code>, <code>timeout</code>, <code>top</code>, <code>date</code>, <code>head</code>, <code>tail</code>, <code>stat</code>, <code>truncate</code>, <code>kill</code>) across numerous POSIX/GNU/BSD compatibility edge cases and early-pipeline SIGPIPE handling.</li>
<li>Fixed Cursor sessions missing standard string-replacement edit tooling after server tool injection.</li>
<li>Fixed <code>hub wait</code> duplicating frozen rows into native scrollback during viewport overflow.</li>
<li>Fixed dark-theme contrast issues on markdown code-fence headers.</li>
<li>Fixed prompt guidance and descriptions for Task tools and SSH usage.</li>
<li>ACP editor clients that support elicitation forms (Zed) can now use <code>ask</code>, so the agent can pose single-choice, multi-select, and free-text questions inline instead of guessing.</li>
<li><code>/retry</code> and <code>/handoff</code> now work over ACP, so editor clients (Zed) list them and can run them instead of sending the text to the model.</li>
<li>Added <code>qwenTemplateReasoningEffort</code> to the <code>models.yml</code> <code>compat</code> schema, so the auto-enabled Qwen 3.8+ template effort dialect (<code>chat_template_kwargs.reasoning_effort</code>) can be switched off per provider/model for strict local servers that reject unknown <code>chat_template_kwargs</code>.</li>
<li>Extensions can provide a normalized <code>usage</code> provider through <code>pi.registerProvider()</code>. Its reports now flow through AuthStorage caching, history, and usage displays, and the override is removed when the extension provider is unregistered.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Changed</h3>
<ul>
<li><code>bun run build:native</code> now builds through the local cargo/napi-rs backend by default, with Bazel available as an opt-in via <code>OMP_NATIVE_BUILD_BACKEND=bazel</code> or extra Bazel arguments after <code>--</code>.</li>
</ul>
<h2>@oh-my-pi/snapcompact</h2>
<h3>Added</h3>
<ul>
<li>Restored <code>providerFrameBudget()</code> to allow callers to size archives according to the maximum frame budget the provider will send.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where character-based truncation could split inline base64 data URLs into corrupted payloads that were rejected by OpenAI-compatible providers. Data URLs are now replaced atomically with placeholders before truncation, and previously affected archives are healed during re-compaction.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Added</h3>
<ul>
<li>Added optional <code>getNativeScrollbackLiveRegionPinnedStart()</code> hook to allow nested transcripts to pin a later dashboard without shifting the earliest live seam.</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Added</h3>
<ul>
<li>New unified archive API <code>@oh-my-pi/pi-utils/ar</code>, providing an <code>openArchive</code>/<code>ArchiveReader</code> interface across formats (including ZIP/ZIP64, tar with gz/bz2/xz/zst compression, ASAR, RAR 4/5, 7z, ISO 9660, CAB, cpio, RPM, Unix ar, Debian packages, LZH, ARJ, and single-stream compressed files) with lazy ranged reads for local files or HTTP range requests via <code>httpByteSource</code>, size limits, symlink-safe extraction, and deterministic archive creation for zip, tar, tar.gz, tar.zst, and asar.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(task): bound isolation baseline capture to avoid host OOM by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191415503" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8992" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8992/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8992">#8992</a></li>
<li>fix(retry): reach a fallback model's own chain instead of burning the budget on it by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/STRML/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/STRML">@STRML</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5192491276" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9000" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9000/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9000">#9000</a></li>
<li>fix(providers): refresh LM Studio runtime context after JIT load by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5192843736" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9002" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9002/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9002">#9002</a></li>
<li>fix(extensions): expose project trust to improve extension compatibility by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CallumWayve/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CallumWayve">@CallumWayve</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5193642282" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9007" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9007/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9007">#9007</a></li>
<li>fix(advisor): activate enabled advisor after model discovery settles by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5194149362" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9014" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9014/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9014">#9014</a></li>
<li>fix(ai): strip MCP x-mcp-header annotation from Google/CCA schema by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5194519761" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9017" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9017/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9017">#9017</a></li>
<li>fix(cli): include active profile in session resume hint by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5194804851" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9020" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9020/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9020">#9020</a></li>
<li>fix(catalog): collapse cursor gpt-5.6 effort siblings by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5195543447" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9026" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9026/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9026">#9026</a></li>
<li>fix(ai): retry provider-requested OAuth refresh by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5197156680" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9038" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9038/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9038">#9038</a></li>
<li>feat(acp): expose the ask tool through elicitation forms by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joseotaviorf/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joseotaviorf">@joseotaviorf</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5197729335" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9042" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9042/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9042">#9042</a></li>
<li>fix(discovery): isolate Claude project plugins by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5197887012" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9044" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9044/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9044">#9044</a></li>
<li>fix(tools): correct SSH guidance tool names by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MikeeI/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MikeeI">@MikeeI</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5197994142" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9045" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9045/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9045">#9045</a></li>
<li>fix(coding-agent): clarify task spawn-policy defaults by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MikeeI/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MikeeI">@MikeeI</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5198044960" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9046" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9046/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9046">#9046</a></li>
<li>fix(coding-agent): correct task overlap guidance by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MikeeI/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MikeeI">@MikeeI</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5198045178" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9047" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9047/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9047">#9047</a></li>
<li>fix(catalog): correct gemini cli discovery endpoint by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5198751124" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9051" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9051/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9051">#9051</a></li>
<li>fix(pi-builtins): accept pgrep -q on linux by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5198985241" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9055" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9055/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9055">#9055</a></li>
<li>fix(natives): cover prompt-or-granted desktop permission state by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5198985607" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9056" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9056/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9056">#9056</a></li>
<li>fix(cursor): honor standard proxy env vars on the HTTP/2 run path by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5199080970" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9059" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9059/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9059">#9059</a></li>
<li>fix(catalog): disable forced tool choice for OpenCode Responses by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bchap1n/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bchap1n">@bchap1n</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5199171730" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9060" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9060/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9060">#9060</a></li>
<li>fix: cap snapcompact frames at the provider image budget by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Thytu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Thytu">@Thytu</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5199356734" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9061" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9061/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9061">#9061</a></li>
<li>fix(snapcompact): elide inline base64 data URLs before truncation by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oshinop/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oshinop">@oshinop</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5199516191" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9066" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9066/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9066">#9066</a></li>
<li>fix(ssh): bound control-path under sun_path for macOS profiles by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5199911549" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9072" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9072/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9072">#9072</a></li>
<li>fix(coding-agent): restore inherit stdio for external editor by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5200423263" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9079" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9079/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9079">#9079</a></li>
<li>feat(acp): expose /retry and /handoff over ACP by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joseotaviorf/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joseotaviorf">@joseotaviorf</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5200737273" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9081" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9081/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9081">#9081</a></li>
<li>fix(catalog): route LiteLLM OpenAI models through Responses by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jbkkd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jbkkd">@jbkkd</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5201339662" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9085" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9085/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9085">#9085</a></li>
<li>fix(ai): never resend unsigned Bedrock reasoning content on replay by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/acomito/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/acomito">@acomito</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5201359823" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9086" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9086/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9086">#9086</a></li>
<li>fix(nix): preload libstdc++ so runtime-downloaded addons load on NixOS by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lz37/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lz37">@lz37</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5201887129" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9091" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9091/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9091">#9091</a></li>
<li>fix(auth): stop concurrent xAI OAuth refresh replay by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5202151876" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9093" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9093/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9093">#9093</a></li>
<li>docs(context-files): document disabling a single context file by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Honza-Jelinek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Honza-Jelinek">@Honza-Jelinek</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5202678165" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9097" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9097/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9097">#9097</a></li>
<li>fix(mcp): prefer RFC 9728 resource scopes over auth-server catalogue by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5202997907" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9100" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9100/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9100">#9100</a></li>
<li>fix(tui): bound the resume transcript replay restart loop to stop 100% CPU livelock on --resume by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mustaqeem66/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mustaqeem66">@Mustaqeem66</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5203108353" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9101" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9101/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9101">#9101</a></li>
<li>fix(dap): support preattached GDB remote adapters by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CoffeeImpliesCode/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CoffeeImpliesCode">@CoffeeImpliesCode</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5203934712" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9107" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9107/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9107">#9107</a></li>
<li>fix(plugins): expose marketplace plugin settings by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5204093615" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9109" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9109/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9109">#9109</a></li>
<li>fix(catalog): cap Vercel Muse Spark contributor output tokens by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jnyross/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jnyross">@jnyross</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5204496104" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9115" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9115/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9115">#9115</a></li>
<li>fix(models): restore auth headers for discovery cache by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5204547806" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9117" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9117/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9117">#9117</a></li>
<li>fix(theme): make markdown code fence borders legible on dark themes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mustaqeem66/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mustaqeem66">@Mustaqeem66</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5204627522" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9118" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9118/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9118">#9118</a></li>
<li>fix(tui): stop hub wait from smearing job rows into scrollback by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shentry/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shentry">@shentry</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5204962579" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9121" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9121/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9121">#9121</a></li>
<li>fix(nix): give dlopen'd ONNX addons a libstdc++ path by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/labi-le/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/labi-le">@labi-le</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5205601955" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9127" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9127/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9127">#9127</a></li>
<li>fix(ai/providers): declare Codex workspace data residency from token claims by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DusKing1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DusKing1">@DusKing1</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5205658946" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9128" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9128/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9128">#9128</a></li>
<li>fix(lsp): hard wall-clock bound on per-server diagnostics pipeline (edit tool hang) by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mustaqeem66/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mustaqeem66">@Mustaqeem66</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5205891565" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9129" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9129/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9129">#9129</a></li>
<li>fix(mcp): cap minted tool names at 64 chars by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5206243792" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9131" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9131/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9131">#9131</a></li>
<li>fix: heal Qwen XML tool-call markup by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jzupnick/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jzupnick">@jzupnick</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5187796629" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8945" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8945/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8945">#8945</a></li>
<li>fix(ai): execute Cursor native StrReplace editToolCall by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/eggpeat/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/eggpeat">@eggpeat</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5187888853" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8946" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8946/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8946">#8946</a></li>
<li>fix(coding-agent): preserve shell operators after internal URLs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sundbp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sundbp">@sundbp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5189445339" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8959" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8959/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8959">#8959</a></li>
<li>fix(advisor): defer in-progress non-blocker advice instead of dropping it by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/barthazian/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/barthazian">@barthazian</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5189622892" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8960" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8960/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8960">#8960</a></li>
<li>fix(tui): stop scrollback row loss across mux height-only resizes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ephraimduncan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ephraimduncan">@ephraimduncan</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5189706861" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8961" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8961/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8961">#8961</a></li>
<li>fix(sdk): refresh discoverable providers for deferred role aliases by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5190850709" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8972" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8972/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8972">#8972</a></li>
<li>fix(coding-agent): stop shared-role yaml order stealing retry fallback by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/atacolak/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/atacolak">@atacolak</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191195273" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8984" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8984/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8984">#8984</a></li>
<li>fix(ai): strip deprecated/readOnly/writeOnly/$comment annotation keywords from CCA/Google tool schemas by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/daviddatuX25/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/daviddatuX25">@daviddatuX25</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191478858" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8994" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8994/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8994">#8994</a></li>
<li>fix(ai): forward OMP system prompts on Cursor requestContext.rules by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/atacolak/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/atacolak">@atacolak</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191903521" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8997" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8997/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8997">#8997</a></li>
<li>fix(catalog): recover opencode-go muse-spark thinking levels by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Unravl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Unravl">@Unravl</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5192401100" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8999" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8999/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8999">#8999</a></li>
<li>feat(coding-agent): support extension usage providers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CallumWayve/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CallumWayve">@CallumWayve</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5193603609" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9006" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9006/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9006">#9006</a></li>
<li>fix(ci): fetch crates before the offline cargo-deny check by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/svperfecta/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/svperfecta">@svperfecta</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5209216296" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9156" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9156/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9156">#9156</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CallumWayve/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CallumWayve">@CallumWayve</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5193642282" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9007" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9007/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9007">#9007</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bchap1n/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bchap1n">@bchap1n</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5199171730" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9060" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9060/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9060">#9060</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oshinop/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oshinop">@oshinop</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5199516191" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9066" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9066/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9066">#9066</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jbkkd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jbkkd">@jbkkd</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5201339662" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9085" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9085/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9085">#9085</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/acomito/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/acomito">@acomito</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5201359823" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9086" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9086/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9086">#9086</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lz37/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lz37">@lz37</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5201887129" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9091" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9091/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9091">#9091</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Honza-Jelinek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Honza-Jelinek">@Honza-Jelinek</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5202678165" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9097" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9097/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9097">#9097</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CoffeeImpliesCode/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CoffeeImpliesCode">@CoffeeImpliesCode</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5203934712" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9107" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9107/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9107">#9107</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jnyross/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jnyross">@jnyross</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5204496104" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9115" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9115/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9115">#9115</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shentry/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shentry">@shentry</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5204962579" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9121" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9121/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9121">#9121</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/labi-le/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/labi-le">@labi-le</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5205601955" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9127" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9127/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9127">#9127</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DusKing1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DusKing1">@DusKing1</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5205658946" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/9128" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/9128/hovercard" href="https://github.com/can1357/oh-my-pi/pull/9128">#9128</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jzupnick/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jzupnick">@jzupnick</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5187796629" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8945" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8945/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8945">#8945</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/barthazian/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/barthazian">@barthazian</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5189622892" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8960" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8960/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8960">#8960</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/daviddatuX25/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/daviddatuX25">@daviddatuX25</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5191478858" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8994" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8994/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8994">#8994</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.4.0...v17.4.1">v17.4.0...v17.4.1</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[curl performance]]></title>
<description><![CDATA[tldr: the live version is here: https://curl.se/perf/ How fast is “fast” and is it good enough? Does it run as fast now as it did before or was there a regression? What exactly needs to be fast? How fast is it? These are questions that many projects and products face, and in curl we are no differ...]]></description>
<link>https://tsecurity.de/de/3746286/tools/curl-performance/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746286/tools/curl-performance/</guid>
<pubDate>Fri, 21 Aug 2026 17:52:34 +0200</pubDate>
<content:encoded><![CDATA[<p>tldr: the live version is here: https://curl.se/perf/ How fast is “fast” and is it good enough? Does it run as fast now as it did before or was there a regression? What exactly needs to be fast? How fast is it? These are questions that many projects and products face, and in curl we are no different. Yet, performance testing and comparisons are... <a href="https://daniel.haxx.se/blog/2026/08/14/curl-performance-2/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[There’s a libcurl.dll in my system32]]></title>
<description><![CDATA[This afternoon I had a meeting with IT people at a huge US power infrastructure company. They had found a libcurl.dll file in their C:\Windows\System32 directory and asked us for help to upgrade it. Their vulnerability scanner identified it as vulnerable to several publicly known vulnerabilities....]]></description>
<link>https://tsecurity.de/de/3746285/tools/theres-a-libcurldll-in-my-system32/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746285/tools/theres-a-libcurldll-in-my-system32/</guid>
<pubDate>Fri, 21 Aug 2026 17:52:16 +0200</pubDate>
<content:encoded><![CDATA[<p>This afternoon I had a meeting with IT people at a huge US power infrastructure company. They had found a libcurl.dll file in their C:\Windows\System32 directory and asked us for help to upgrade it. Their vulnerability scanner identified it as vulnerable to several publicly known vulnerabilities. Can we bump it to the latest version please? No. We... <a href="https://daniel.haxx.se/blog/2026/08/17/theres-a-libcurl-dll-in-my-system32/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v@signalapp/mock-server@26.0.0 (13.08.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv@signalapp/mock-server@26.0.013.08.2026@automated-signalPublish Packages]]></description>
<link>https://tsecurity.de/de/3746284/tools/github-release-signalappsignal-desktop-vsignalappmock-server2600-13082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746284/tools/github-release-signalappsignal-desktop-vsignalappmock-server2600-13082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:51:38 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/%40signalapp%2Fmock-server%4026.0.0" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v@signalapp/mock-server@26.0.0</span><span class="badge gh-badge gh-badge-date">13.08.2026</span><span class="badge gh-badge gh-badge-author">@automated-signal</span></div><div class="github-feed-changelog"><p>Publish Packages</p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.24.0 (20.08.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.24.020.08.2026@scottnonnenberg-signal
We made it easier to search for group members on the group settings page, so you can quickly figure out if your Mom already added your second cousin to the third-annual extended family reunion BBQ group.]]></description>
<link>https://tsecurity.de/de/3746283/tools/github-release-signalappsignal-desktop-v8240-20082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746283/tools/github-release-signalappsignal-desktop-v8240-20082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:51:09 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.24.0" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.24.0</span><span class="badge gh-badge gh-badge-date">20.08.2026</span><span class="badge gh-badge gh-badge-author">@scottnonnenberg-signal</span></div><div class="github-feed-changelog"><ul>
<li>We made it easier to search for group members on the group settings page, so you can quickly figure out if your Mom already added your second cousin to the third-annual extended family reunion BBQ group.</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.25.0-beta.1 (20.08.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.25.0-beta.120.08.2026@scottnonnenberg-signal
We added two new zoom levels in the appearance settings, so even with very little effort you can still give your messages 110% (or 90%).]]></description>
<link>https://tsecurity.de/de/3746282/tools/github-release-signalappsignal-desktop-v8250-beta1-20082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746282/tools/github-release-signalappsignal-desktop-v8250-beta1-20082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:44 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.25.0-beta.1" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.25.0-beta.1</span><span class="badge gh-badge gh-badge-date">20.08.2026</span><span class="badge gh-badge gh-badge-author">@scottnonnenberg-signal</span></div><div class="github-feed-changelog"><ul>
<li>We added two new zoom levels in the appearance settings, so even with very little effort you can still give your messages 110% (or 90%).</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.24.1 (20.08.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.24.120.08.2026@scottnonnenberg-signal
We made it easier to search for group members on the group settings page, so you can quickly figure out if your Mom already added your second cousin to the third-annual extended family reunion BBQ group.]]></description>
<link>https://tsecurity.de/de/3746281/tools/github-release-signalappsignal-desktop-v8241-20082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746281/tools/github-release-signalappsignal-desktop-v8241-20082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:42 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.24.1" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.24.1</span><span class="badge gh-badge gh-badge-date">20.08.2026</span><span class="badge gh-badge gh-badge-author">@scottnonnenberg-signal</span></div><div class="github-feed-changelog"><ul>
<li>We made it easier to search for group members on the group settings page, so you can quickly figure out if your Mom already added your second cousin to the third-annual extended family reunion BBQ group.</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.25.0-beta.2 (20.08.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.25.0-beta.220.08.2026@scottnonnenberg-signal
We added two new zoom levels in the appearance settings, so even with very little effort you can still give your messages 110% (or 90%).]]></description>
<link>https://tsecurity.de/de/3746280/tools/github-release-signalappsignal-desktop-v8250-beta2-20082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746280/tools/github-release-signalappsignal-desktop-v8250-beta2-20082026/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:40 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.25.0-beta.2" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.25.0-beta.2</span><span class="badge gh-badge gh-badge-date">20.08.2026</span><span class="badge gh-badge gh-badge-author">@scottnonnenberg-signal</span></div><div class="github-feed-changelog"><ul>
<li>We added two new zoom levels in the appearance settings, so even with very little effort you can still give your messages 110% (or 90%).</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Andreas Farre: Tracing algorithms through web specifications]]></title>
<description><![CDATA[A bug comes in, or someone shows me a page doing something surprising, and the question is always the same one. Is that what the spec says? Not what we all assume it says, and not what Gecko happens to do, but what the algorithm actually does when you follow it step by step. So I open html.spec.w...]]></description>
<link>https://tsecurity.de/de/3746279/tools/andreas-farre-tracing-algorithms-through-web-specifications/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746279/tools/andreas-farre-tracing-algorithms-through-web-specifications/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:39 +0200</pubDate>
<content:encoded><![CDATA[<p>A bug comes in, or someone shows me a page doing something surprising, and the question is always the same one. Is that what the spec says? Not what we all assume it says, and not what Gecko happens to do, but what the algorithm actually does when you follow it step by step. So I open html.spec.whatwg.org, find the entry point, and start reading.... <a href="https://blog.farre.se/posts/2026/08/17/tracing-web-specs/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: MozPhab 2.16.0 and 2.16.1 Released]]></title>
<description><![CDATA[Bugs resolved in Moz-Phab 2.16.1: bug 2063077 Run tests in parallel with pytest-xdist bug 2063810 Obscure error installing MozPhab Bugs resolved in Moz-Phab 2.16.0: bug 2050987 moz-phab self-update fails when installed via uv tool: “No module named pip” Discuss these changes in #engineering-workf...]]></description>
<link>https://tsecurity.de/de/3746278/tools/firefox-tooling-announcements-mozphab-2160-and-2161-released/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746278/tools/firefox-tooling-announcements-mozphab-2160-and-2161-released/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:36 +0200</pubDate>
<content:encoded><![CDATA[<p>Bugs resolved in Moz-Phab 2.16.1: bug 2063077 Run tests in parallel with pytest-xdist bug 2063810 Obscure error installing MozPhab Bugs resolved in Moz-Phab 2.16.0: bug 2050987 moz-phab self-update fails when installed via uv tool: “No module named pip” Discuss these changes in #engineering-workflow on Slack or #Conduit Matrix 1 post - 1... <a href="https://discourse.mozilla.org/t/mozphab-2-16-0-and-2-16-1-released/149211" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Developer Experience: Firefox WebDriver Newsletter 154]]></title>
<description><![CDATA[WebDriver is a remote control interface that enables introspection and control of user agents. As such, it can help developers to verify that their websites are working and performing well with all major browsers. The protocol is standardized by the W3C and consists of two separate specifications...]]></description>
<link>https://tsecurity.de/de/3746277/tools/firefox-developer-experience-firefox-webdriver-newsletter-154/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746277/tools/firefox-developer-experience-firefox-webdriver-newsletter-154/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:30 +0200</pubDate>
<content:encoded><![CDATA[<p>WebDriver is a remote control interface that enables introspection and control of user agents. As such, it can help developers to verify that their websites are working and performing well with all major browsers. The protocol is standardized by the W3C and consists of two separate specifications: WebDriver classic (HTTP) and the new WebDriver... <a href="https://fxdx.dev/firefox-webdriver-newsletter-154/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Privacy Blog: Brazil is Taking an Important Step Toward More Open & Competitive Digital Markets]]></title>
<description><![CDATA[Read the Portuguese version here. Competition is a strength of the internet. When people freely choose among browsers, search engines, and apps, companies compete on merit. However, digital markets have concentrated around ‘gatekeepers’ that control discovery, making it harder for independent dev...]]></description>
<link>https://tsecurity.de/de/3746276/tools/mozilla-privacy-blog-brazil-is-taking-an-important-step-toward-more-open-competitive-digital-markets/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746276/tools/mozilla-privacy-blog-brazil-is-taking-an-important-step-toward-more-open-competitive-digital-markets/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:29 +0200</pubDate>
<content:encoded><![CDATA[<p>Read the Portuguese version here. Competition is a strength of the internet. When people freely choose among browsers, search engines, and apps, companies compete on merit. However, digital markets have concentrated around ‘gatekeepers’ that control discovery, making it harder for independent developers to reach users. Traditional enforcement has... <a href="https://blog.mozilla.org/netpolicy/2026/08/18/brazil-is-taking-an-important-step-toward-more-open-competitive-digital-markets/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Privacy Blog: Brasil dá um passo importante para a promoção de mercados digitais abertos e competitivos]]></title>
<description><![CDATA[Leia a versão em inglês aqui. A concorrência é o ponto forte da internet. Com a possibilidade de as pessoas escolherem navegadores, mecanismos de pesquisa e aplicativos livremente, a concorrência entre das empresas se baseia no mérito. No entanto, os mercados digitais estão concentrados em “guard...]]></description>
<link>https://tsecurity.de/de/3746275/tools/mozilla-privacy-blog-brasil-d-um-passo-importante-para-a-promoo-de-mercados-digitais-abertos-e-competitivos/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746275/tools/mozilla-privacy-blog-brasil-d-um-passo-importante-para-a-promoo-de-mercados-digitais-abertos-e-competitivos/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:28 +0200</pubDate>
<content:encoded><![CDATA[<p>Leia a versão em inglês aqui. A concorrência é o ponto forte da internet. Com a possibilidade de as pessoas escolherem navegadores, mecanismos de pesquisa e aplicativos livremente, a concorrência entre das empresas se baseia no mérito. No entanto, os mercados digitais estão concentrados em “guardiões” que controlam a descoberta, dificultando o... <a href="https://blog.mozilla.org/netpolicy/2026/08/18/brasil-da-um-passo-importante-para-a-promocao-de-mercados-digitais-abertos-e-competitivos/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: MozPhab 2.17.0 Released]]></title>
<description><![CDATA[Bugs resolved in Moz-Phab 2.17.0: bug 2036748 submit: parallelise per-commit upload + creatediff across the stack bug 2036749 git: skip restoring git checkout in cleanup/finalize when HEAD already on branch bug 2060484 " Phabricator Error: Validation errors" should display the revision Discuss th...]]></description>
<link>https://tsecurity.de/de/3746274/tools/firefox-tooling-announcements-mozphab-2170-released/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746274/tools/firefox-tooling-announcements-mozphab-2170-released/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:27 +0200</pubDate>
<content:encoded><![CDATA[<p>Bugs resolved in Moz-Phab 2.17.0: bug 2036748 submit: parallelise per-commit upload + creatediff across the stack bug 2036749 git: skip restoring git checkout in cleanup/finalize when HEAD already on branch bug 2060484 &quot; Phabricator Error: Validation errors&quot; should display the revision Discuss these changes in #engineering-workflow on Slack or... <a href="https://discourse.mozilla.org/t/mozphab-2-17-0-released/149223" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[This Week In Rust: This Week in Rust 665]]></title>
<description><![CDATA[Hello and welcome to another issue of This Week in Rust! Rust is a programming language empowering everyone to build reliable and efficient software. This is a weekly summary of its progress and community. Want something mentioned? Tag us at @thisweekinrust.bsky.social on Bluesky or @ThisWeekinRu...]]></description>
<link>https://tsecurity.de/de/3746273/tools/this-week-in-rust-this-week-in-rust-665/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746273/tools/this-week-in-rust-this-week-in-rust-665/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:27 +0200</pubDate>
<content:encoded><![CDATA[<p>Hello and welcome to another issue of This Week in Rust! Rust is a programming language empowering everyone to build reliable and efficient software. This is a weekly summary of its progress and community. Want something mentioned? Tag us at @thisweekinrust.bsky.social on Bluesky or @ThisWeekinRust on mastodon.social, or send us a pull request.... <a href="https://this-week-in-rust.org/blog/2026/08/19/this-week-in-rust-665/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Support.Mozilla.Org: Firefox new release cadence and what to expect]]></title>
<description><![CDATA[Some of you may have heard about this change from the announcement the team shared in early July,  but Firefox is moving to a two-week release cycle. The first release on the new cadence is Firefox 155 on September 1, 2026, two weeks earlier than the originally planned September 15 release. Why t...]]></description>
<link>https://tsecurity.de/de/3746272/tools/supportmozillaorg-firefox-new-release-cadence-and-what-to-expect/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746272/tools/supportmozillaorg-firefox-new-release-cadence-and-what-to-expect/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:25 +0200</pubDate>
<content:encoded><![CDATA[<p>Some of you may have heard about this change from the announcement the team shared in early July,  but Firefox is moving to a two-week release cycle. The first release on the new cadence is Firefox 155 on September 1, 2026, two weeks earlier than the originally planned September 15 release. Why this is happening If you’ve been following recent... <a href="https://blog.mozilla.org/sumo/2026/08/19/firefox-new-release-cadence-and-what-to-expect/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Rust Programming Language Blog: Supply chain attack on arrayref]]></title>
<description><![CDATA[What happened On 2026-08-20 at 7:15 UTC we got a report that the proc-macro1 crate was malicious. The Rust Security Response Team verified this to be the case: the crate had a build script that was downloading a malicious payload. This crate proc-macro1 and others like it (proc-macro-en, aovine, ...]]></description>
<link>https://tsecurity.de/de/3746271/tools/the-rust-programming-language-blog-supply-chain-attack-on-arrayref/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746271/tools/the-rust-programming-language-blog-supply-chain-attack-on-arrayref/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:24 +0200</pubDate>
<content:encoded><![CDATA[<p>What happened On 2026-08-20 at 7:15 UTC we got a report that the proc-macro1 crate was malicious. The Rust Security Response Team verified this to be the case: the crate had a build script that was downloading a malicious payload. This crate proc-macro1 and others like it (proc-macro-en, aovine, arone, aronenao, tinymember) have been deleted.... <a href="https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Rust Programming Language Blog: Announcing Rust 1.98.0]]></title>
<description><![CDATA[The Rust team is happy to announce a new version of Rust, 1.98.0. Rust is a programming language empowering everyone to build reliable and efficient software. If you have a previous version of Rust installed via rustup, you can get 1.98.0 with: $ rustup update stable If you don't have it already,...]]></description>
<link>https://tsecurity.de/de/3746270/tools/the-rust-programming-language-blog-announcing-rust-1980/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746270/tools/the-rust-programming-language-blog-announcing-rust-1980/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:22 +0200</pubDate>
<content:encoded><![CDATA[<p>The Rust team is happy to announce a new version of Rust, 1.98.0. Rust is a programming language empowering everyone to build reliable and efficient software. If you have a previous version of Rust installed via rustup, you can get 1.98.0 with: $ rustup update stable If you don&#039;t have it already, you can get rustup from the appropriate page on our... <a href="https://blog.rust-lang.org/2026/08/20/Rust-1.98.0/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Add-on Reviews: YouTube your way — browser extensions put you in charge of your video experience]]></title>
<description><![CDATA[YouTube wants you to experience YouTube in prescribed ways. But with the right browser extension, you’re free to alter YouTube to taste. Change the way the site looks, behaves, and delivers your favorite videos.  Enhancer for YouTube With dozens of customization features, Enhancer for YouTube has...]]></description>
<link>https://tsecurity.de/de/3746269/tools/firefox-add-on-reviews-youtube-your-way-browser-extensions-put-you-in-charge-of-your-video-experience/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746269/tools/firefox-add-on-reviews-youtube-your-way-browser-extensions-put-you-in-charge-of-your-video-experience/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:21 +0200</pubDate>
<content:encoded><![CDATA[<p>YouTube wants you to experience YouTube in prescribed ways. But with the right browser extension, you’re free to alter YouTube to taste. Change the way the site looks, behaves, and delivers your favorite videos.  Enhancer for YouTube With dozens of customization features, Enhancer for YouTube has the power to dramatically reorient the way you... <a href="https://addons.mozilla.org/blog/youtube-your-way-browser-extensions-put-you-in-charge-of-your-video-experience/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Add-on Reviews: Extension starter pack]]></title>
<description><![CDATA[You’ve probably heard about “ad blockers,” “tab managers,” “anti-trackers” or any number of browser customization tools commonly known as extensions. And maybe you’re intrigued to try one, but you’ve never installed an extension before and the whole notion just seems a bit vague.  Let’s demystify...]]></description>
<link>https://tsecurity.de/de/3746268/tools/firefox-add-on-reviews-extension-starter-pack/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746268/tools/firefox-add-on-reviews-extension-starter-pack/</guid>
<pubDate>Fri, 21 Aug 2026 17:50:13 +0200</pubDate>
<content:encoded><![CDATA[<p>You’ve probably heard about “ad blockers,” “tab managers,” “anti-trackers” or any number of browser customization tools commonly known as extensions. And maybe you’re intrigued to try one, but you’ve never installed an extension before and the whole notion just seems a bit vague.  Let’s demystify extensions.  An extension is simply an app that... <a href="https://addons.mozilla.org/blog/extension-starter-pack/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Tom Ritter: webaudio fingerprinting on alibaba]]></title>
<description><![CDATA[There's a popular post going around about Alibaba doing WebAudio fingerprinting and in the process, mucking around with the author's Bluetooth headphones. Here's the tl;dr: browser fingerprinting is a far-too-pervasive method of tracking users across the web, but at least for WebAudio specificall...]]></description>
<link>https://tsecurity.de/de/3746267/tools/tom-ritter-webaudio-fingerprinting-on-alibaba/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746267/tools/tom-ritter-webaudio-fingerprinting-on-alibaba/</guid>
<pubDate>Fri, 21 Aug 2026 17:49:08 +0200</pubDate>
<content:encoded><![CDATA[<p>There&#039;s a popular post going around about Alibaba doing WebAudio fingerprinting and in the process, mucking around with the author&#039;s Bluetooth headphones. Here&#039;s the tl;dr: browser fingerprinting is a far-too-pervasive method of tracking users across the web, but at least for WebAudio specifically, it&#039;s not very effective. Firefox has largely... <a href="http://ritter.vg/blog-webaudio_alibaba.html" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox and Exa: Building AI search around people, not platforms]]></title>
<description><![CDATA[AI has changed how we browse. Full stop. The real question is whether AI leads to one browser experience for everyone, or gives people more ways to make the browser work for them.  Firefox was always built to give users an alternative to the status quo, and our approach with AI is no different. M...]]></description>
<link>https://tsecurity.de/de/3746250/tools/firefox-and-exa-building-ai-search-around-people-not-platforms/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746250/tools/firefox-and-exa-building-ai-search-around-people-not-platforms/</guid>
<pubDate>Fri, 21 Aug 2026 16:58:38 +0200</pubDate>
<content:encoded><![CDATA[<p>AI has changed how we browse. Full stop. The real question is whether AI leads to one browser experience for everyone, or gives people more ways to make the browser work for them.  Firefox was always built to give users an alternative to the status quo, and our approach with AI is no different. Much of the industry is going in another direction:... <a href="https://blog.mozilla.org/en/firefox/firefox-exa-partnership/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Smart Window: Finish what you start online]]></title>
<description><![CDATA[Browsers make it easy to start things, but picking them back up is another story. We start planning a trip or researching a purchase, and before long we’re comparing options and chasing ideas across dozens of tabs. That work rarely happens in one sitting. When we come back after an interruption, ...]]></description>
<link>https://tsecurity.de/de/3746249/tools/smart-window-finish-what-you-start-online/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746249/tools/smart-window-finish-what-you-start-online/</guid>
<pubDate>Fri, 21 Aug 2026 16:57:25 +0200</pubDate>
<content:encoded><![CDATA[<p>Browsers make it easy to start things, but picking them back up is another story. We start planning a trip or researching a purchase, and before long we’re comparing options and chasing ideas across dozens of tabs. That work rarely happens in one sitting. When we come back after an interruption, we have to figure out where we were, what we’d... <a href="https://blog.mozilla.org/en/firefox/firefox-smart-window/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[A billion searches a year, now built in: Startpage comes to Firefox]]></title>
<description><![CDATA[Firefox users were choosing Startpage long before today — to the tune of more than a billion searches a year, every one of them required some assembly: an extension, a manual setting, a workaround. 



Today, starting with Firefox 154, that choice becomes as easy as head to the drop-down menu, hi...]]></description>
<link>https://tsecurity.de/de/3746248/tools/a-billion-searches-a-year-now-built-in-startpage-comes-to-firefox/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746248/tools/a-billion-searches-a-year-now-built-in-startpage-comes-to-firefox/</guid>
<pubDate>Fri, 21 Aug 2026 16:56:12 +0200</pubDate>
<content:encoded><![CDATA[<p>Firefox users were choosing Startpage long before today — to the tune of more than a billion searches a year, every one of them required some assembly: an extension, a manual setting, a workaround. </p>



<p>Today, starting with Firefox 154, that choice becomes as easy as head to the drop-down menu, hit ‘select,’ and start searching. <a href="http://startpage.com/privacy-please/featured-article/firefox-integration">Startpage</a> is now a built-in search option for Firefox users on desktop in Germany, France, Austria, Switzerland, and the Netherlands. Android and iOS are coming soon. Whether you want to search with Startpage, or another preferred search engine, it’s as easy as opening your search settings, picking a default, and done.</p>



<p>And if you’re happy with your current search engine, nothing about your setup changes. </p>



<figure class="wp-block-video"><video controls src="https://blog.mozilla.org/wp-content/blogs.dir/278/files/2026/08/set-default_en-US_no-google.mp4" preload="none"></video></figure>



<p></p>



<h2 class="wp-block-heading"><strong>Why Europe first</strong></h2>



<p>This launch starts in Startpage’s home markets: a Netherlands-based search engine, now built into the browser for some of the most privacy-conscious users in the world. At a moment when so much of the web experience is decided by a handful of very large companies, a search option that’s private by design and European by origin isn’t a small thing. </p>



<h2 class="wp-block-heading"><strong>What Startpage delivers</strong></h2>



<p>Startpage delivers full, high-quality search results without the privacy trade off. Queries aren’t stored or linked to you, and there are no AI answers pushed above your search results. In fact, there’s no AI at all. Based in the Netherlands, Startpage built its product around a simple idea: great search and personal privacy can go hand in hand.</p>



<p>“So much of your web experience is prescribed before you ever open a browser. We’d rather you decide how you want to search. Adding Startpage puts a genuinely private search engine option — real results, zero profiling, AI-free — one click away for millions of people in Europe,” said Ajit Varma, Head of Firefox.</p>



<h2 class="wp-block-heading"><strong>Users asked with one billion searches</strong></h2>



<p>Startpage ranks among the most-requested search engines in the <a href="https://connect.mozilla.org/t5/discussions/try-startpage-search-in-firefox-150/m-p/123320">Firefox community</a>. When demand is this clear, our job is to remove the friction. </p>



<p>“More and more of what people use online comes from a handful of very large companies, and search is where that concentration gets felt most directly. Firefox has always been the browser for people who want to make their own decisions about the web, which makes it a natural home for private search. Firefox users already run over a billion Startpage searches a year. Now Startpage is built in for everyone in these markets,” said Stewart Marlborough, President of Startpage.</p>



<p>That’s the pattern we want: people who use Firefox every day tell us what they need, and we ship it.</p>



<h2 class="wp-block-heading"><strong>Search is a choice. Firefox treats it like one. </strong></h2>



<p>Most browsers have already decided how you’re going to search. Firefox hasn’t. Pick your search engine, control what happens to your queries, decide who sees data about you, even turn AI on or off. It should always be your call. Not everyone wants the same thing from search, and a browser shouldn’t pretend they do.</p>



<h2 class="wp-block-heading"><strong>Try it out</strong></h2>



<p>If you’re in Germany, France, Austria, Switzerland, or the Netherlands, update to <a href="https://www.firefox.com/">Firefox 154</a> and you’ll find Startpage in your search settings.  </p>
<p>The post <a href="https://blog.mozilla.org/en/firefox/startpage-on-firefox/">A billion searches a year, now built in: Startpage comes to Firefox</a> appeared first on <a href="https://blog.mozilla.org/en/">The Mozilla Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The wait is over. NVIDIA GeForce NOW adds Firefox to its supported browser lineup.]]></title>
<description><![CDATA[Gamers have asked for GeForce NOW support for years. Today, NVIDIA made it official, opening up GeForce RTX-powered play to Firefox on Windows. Firefox users can now stream more than 2,000 PC games from virtually anywhere, no downloads, installs, or hardware upgrades required, just a Windows PC a...]]></description>
<link>https://tsecurity.de/de/3746247/tools/the-wait-is-over-nvidia-geforce-now-adds-firefox-to-its-supported-browser-lineup/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746247/tools/the-wait-is-over-nvidia-geforce-now-adds-firefox-to-its-supported-browser-lineup/</guid>
<pubDate>Fri, 21 Aug 2026 16:54:29 +0200</pubDate>
<content:encoded><![CDATA[<p>Gamers have asked for GeForce NOW support for years. Today, NVIDIA made it official, opening up GeForce RTX-powered play to Firefox on Windows. Firefox users can now stream more than 2,000 PC games from virtually anywhere, no downloads, installs, or hardware upgrades required, just a Windows PC and a browser. Gaming: one of the web’s toughest... <a href="https://blog.mozilla.org/en/firefox/firefox-nvidia-geforce-now-partnership/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[A New Framework for Open Source AI]]></title>
<description><![CDATA[Open or closed AI isn’t a fringe question anymore; it’s a live policy debate, with real consequences for who gets to build, audit, and compete in the AI ecosystem. But as that debate plays out in Washington, Brussels, and beyond, the harder questions are still very much up for discussion. What do...]]></description>
<link>https://tsecurity.de/de/3746246/tools/a-new-framework-for-open-source-ai/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3746246/tools/a-new-framework-for-open-source-ai/</guid>
<pubDate>Fri, 21 Aug 2026 16:53:12 +0200</pubDate>
<content:encoded><![CDATA[<p>Open or closed AI isn’t a fringe question anymore; it’s a live policy debate, with real consequences for who gets to build, audit, and compete in the AI ecosystem. But as that debate plays out in Washington, Brussels, and beyond, the harder questions are still very much up for discussion. What does meaningful openness actually require? Where... <a href="https://blog.mozilla.org/en/mozilla/ai/open-source-ai-framework/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.3.1 (13.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.3.113.08.2026@github-actions[bot]@oh-my-pi/pi-catalog
Added

Added dynamic Antigravity and Gemini CLI discovery support for Gemini 3.7 Flash, with low/medium/high thinking-level routing.

Changed

Updated model metadata, context windows, pricing, and configurations in the cata...]]></description>
<link>https://tsecurity.de/de/3717464/tools/github-release-can1357oh-my-pi-v1731-13082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3717464/tools/github-release-can1357oh-my-pi-v1731-13082026/</guid>
<pubDate>Fri, 14 Aug 2026 00:56:24 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.3.1" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.3.1</span><span class="badge gh-badge gh-badge-date">13.08.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added dynamic Antigravity and Gemini CLI discovery support for Gemini 3.7 Flash, with low/medium/high thinking-level routing.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Updated model metadata, context windows, pricing, and configurations in the catalog</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Claude Code user discovery ignoring CLAUDE_CONFIG_DIR for configuration, plugins, MCP servers, and imported sessions.</li>
<li>Fixed the status-line git branch display freezing after switching branches.</li>
<li>Fixed Pi extension contexts omitting the runtime mode, which caused TUI guards to silently disable extension UI.</li>
<li>Fixed extension-registered tool names being rejected by the --tools flag before extension discovery, which prevented least-privilege sessions from allowlisting plugin tools.</li>
<li>Fixed omp plugin install failing with cloning errors for legacy Pi extensions whose tool schemas use legacy-typebox builders.</li>
<li>Fixed omp update aborting with chmod ENOENT when concurrent update runs overlapped by using unique download temporary paths.</li>
<li>Fixed the browser tool executable probe launching the user's installed GUI Chromium on Windows: the <code>--version</code> version probe from <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/can1357/oh-my-pi/commit/ecb22957cf0b00554041e13ec338d2826a6967e5/hovercard" href="https://github.com/can1357/oh-my-pi/commit/ecb22957cf0b00554041e13ec338d2826a6967e5">ecb2295</a> was Linux-scoped but ran for every platform candidate, so on Windows it could hand off to a running <code>chrome.exe</code>, open a normal browser window, then reject the candidate and fall back to cached Chrome for Testing. The probe is now confined to Linux (<a href="https://github.com/can1357/oh-my-pi/issues/8445" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8445/hovercard">#8445</a>).</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>omp</code> failing to start on a clean Windows install with <code>Failed to load pi_natives native addon for win32-x64 ... The specified module could not be found</code> (LoadLibrary error 126). The shipped win32-x64 addon linked the dynamic MSVC CRT (<code>/MD</code>) and imported <code>VCRUNTIME140.dll</code> from the Visual C++ Redistributable, which is absent on a fresh Windows install. The addon now statically links the CRT (<code>+crt-static</code> for rustc plus the <code>static_link_msvcrt</code> cc feature for its C dependencies), so the <code>.node</code> imports only core Windows system DLLs (<a href="https://github.com/can1357/oh-my-pi/issues/8439" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8439/hovercard">#8439</a>).</li>
</ul>
<h2>@oh-my-pi/omptype</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed TypeBox adapter omitting pattern, non-URL format, and multipleOf constraints from the emitted JSON Schema.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed screen flashing in Herdr panes during transcript streaming.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(coding-agent): watch git dir so branch display tracks switches by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5138763715" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8415" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8415/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8415">#8415</a></li>
<li>fix(extensions): populate runtime mode in context by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5139583916" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8423" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8423/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8423">#8423</a></li>
<li>fix(cli): allow extension tools in --tools allowlists by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5139607874" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8424" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8424/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8424">#8424</a></li>
<li>fix(extensions): lower embedded omptype schemas in Type.Unsafe by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5139648823" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8425" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8425/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8425">#8425</a></li>
<li>fix(tui): stop direct Herdr pane flicker by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5142543325" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8433" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8433/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8433">#8433</a></li>
<li>fix(update): unique temp path for concurrent self-updates by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5142930314" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8435" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8435/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8435">#8435</a></li>
<li>fix(discovery): honor Claude config directory by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5143083309" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8440" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8440/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8440">#8440</a></li>
<li>fix(natives): static-link win32 MSVC CRT so addon needs no VC++ redist by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5143335851" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8443" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8443/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8443">#8443</a></li>
<li>fix(coding-agent): confine browser executable probe to Linux by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5143599497" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8446" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8446/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8446">#8446</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.3.0...v17.3.1">v17.3.0...v17.3.1</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: can1357/oh-my-pi v17.3.2 (14.08.2026)]]></title>
<description><![CDATA[can1357/oh-my-piv17.3.214.08.2026@github-actions[bot]@oh-my-pi/pi-ai
Fixed

Dropped unsigned thinking blocks from Antigravity Claude requests instead of sending them without a signature, preventing HTTP 400 responses when resuming sessions or switching models.
Classified Antigravity HTTP 429 resp...]]></description>
<link>https://tsecurity.de/de/3717463/tools/github-release-can1357oh-my-pi-v1732-14082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3717463/tools/github-release-can1357oh-my-pi-v1732-14082026/</guid>
<pubDate>Fri, 14 Aug 2026 00:56:24 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/can1357/oh-my-pi/releases/tag/v17.3.2" target="_blank" rel="noopener nofollow">can1357/oh-my-pi</a><span class="badge gh-badge gh-badge-version">v17.3.2</span><span class="badge gh-badge gh-badge-date">14.08.2026</span><span class="badge gh-badge gh-badge-author">@github-actions[bot]</span></div><div class="github-feed-changelog"><h2>@oh-my-pi/pi-ai</h2>
<h3>Fixed</h3>
<ul>
<li>Dropped unsigned thinking blocks from Antigravity Claude requests instead of sending them without a signature, preventing HTTP 400 responses when resuming sessions or switching models.</li>
<li>Classified Antigravity HTTP 429 responses from structured <code>google.rpc.ErrorInfo</code> reasons (<code>QUOTA_EXHAUSTED</code>, <code>RATE_LIMIT_EXCEEDED</code>, and <code>INSUFFICIENT_G1_CREDITS_BALANCE</code>), using retry delays of five minutes or longer to distinguish rotatable quota windows from transient throttling instead of relying only on message regexes.</li>
</ul>
<h3>Removed</h3>
<ul>
<li>Removed the Antigravity identity-prompt injection (<code>ANTIGRAVITY_SYSTEM_INSTRUCTION</code> and <code>shouldInjectAntigravitySystemInstruction</code>): Cloud Code Assist accepts arbitrary system instructions on gemini-3.x and Claude routes (verified live), and the injected stub never matched the real client's system prompt anyway. User system prompts are now sent unmodified (still tagged <code>role: "user"</code>).</li>
<li>Fixed Antigravity <code>auto</code> mode not failing over to the sandbox endpoint when the daily endpoint returned a thinking-only <code>STOP</code>, which caused Advisor turns to be falsely recorded as empty-response failures (<a href="https://github.com/can1357/oh-my-pi/issues/8480" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8480/hovercard">#8480</a>).</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added support for the <code>deepseek-v4-pro:preview</code> model</li>
<li>Added support for the <code>gemini-3.7-flash</code> model</li>
<li>Added dynamic Antigravity client-version discovery from the official update manifest (darwin/arm64 channel), so version-gated models appear without a code change; <code>PI_AI_ANTIGRAVITY_VERSION</code> remains available as an override.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Antigravity discovery missing Gemini 3.7 Flash: Cloud Code Assist gates newer models on the client version in the <code>User-Agent</code>, and the pinned <code>antigravity/hub/2.1.4</code> was too old. The user-agent now matches the captured 2.8.0 client format (<code>antigravity/hub/2.8.0 (aidev_client; os_type=darwin; arch=arm64; cl=963137146)</code>); os_type/arch stay pinned to the darwin/arm64 reference client. Overridable via <code>PI_AI_ANTIGRAVITY_VERSION</code> / <code>PI_AI_ANTIGRAVITY_CL</code> / <code>PI_AI_ANTIGRAVITY_OS</code> / <code>PI_AI_ANTIGRAVITY_ARCH</code>.</li>
</ul>
<h3>Removed</h3>
<ul>
<li>Removed <code>ANTIGRAVITY_SYSTEM_INSTRUCTION</code> from <code>wire/gemini-headers</code>; the Antigravity transport and web search no longer inject a fake identity prompt.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed the parent TUI stalling after a subagent submits its result until terminal focus or resize wakes the event loop (<a href="https://github.com/can1357/oh-my-pi/issues/8462" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8462/hovercard">#8462</a>).</li>
<li>Fixed <code>omp update</code> misclassifying foreign npm/bun bin aliases while preserving package-manager ownership for globally linked checkouts (<a href="https://github.com/can1357/oh-my-pi/issues/8468" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8468/hovercard">#8468</a>).</li>
<li>Fixed <code>read</code> hashline headers collapsing nested in-workspace paths to the bare basename, which let a same-basename file at the session cwd capture a verbatim follow-up <code>edit</code> and deterministically reject it with <code>hash is not from this session</code>. Headers now retain the workspace-relative path (e.g. <code>[src/settings.json#0063]</code>) (<a href="https://github.com/can1357/oh-my-pi/issues/8482" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8482/hovercard">#8482</a>).</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>fetchWithRetry()</code> aborts during retry backoff to preserve the documented <code>"Request was aborted"</code> error contract (<a href="https://github.com/can1357/oh-my-pi/issues/8450" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8450/hovercard">#8450</a>).</li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.3.1...v17.3.2">v17.3.1...v17.3.2</a></p></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.23.0 (13.08.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.23.013.08.2026@indutny-signal
Tweaks, bug fixes, and performance enhancements. Keep on texting, calling, and video chatting as usual.]]></description>
<link>https://tsecurity.de/de/3717462/tools/github-release-signalappsignal-desktop-v8230-13082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3717462/tools/github-release-signalappsignal-desktop-v8230-13082026/</guid>
<pubDate>Fri, 14 Aug 2026 00:56:23 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.23.0" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.23.0</span><span class="badge gh-badge gh-badge-date">13.08.2026</span><span class="badge gh-badge gh-badge-author">@indutny-signal</span></div><div class="github-feed-changelog"><ul>
<li>Tweaks, bug fixes, and performance enhancements. Keep on texting, calling, and video chatting as usual.</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Release: signalapp/Signal-Desktop v8.24.0-beta.1 (13.08.2026)]]></title>
<description><![CDATA[signalapp/Signal-Desktopv8.24.0-beta.113.08.2026@indutny-signal
We made it easier to search for group members on the group settings page, so you can quickly figure out if your Mom already added your second cousin to the third-annual extended family reunion BBQ group.]]></description>
<link>https://tsecurity.de/de/3717461/tools/github-release-signalappsignal-desktop-v8240-beta1-13082026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3717461/tools/github-release-signalappsignal-desktop-v8240-beta1-13082026/</guid>
<pubDate>Fri, 14 Aug 2026 00:56:23 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><div class="github-feed-badges"><a class="badge gh-badge gh-badge-repo" href="https://github.com/signalapp/Signal-Desktop/releases/tag/v8.24.0-beta.1" target="_blank" rel="noopener nofollow">signalapp/Signal-Desktop</a><span class="badge gh-badge gh-badge-version">v8.24.0-beta.1</span><span class="badge gh-badge gh-badge-date">13.08.2026</span><span class="badge gh-badge gh-badge-author">@indutny-signal</span></div><div class="github-feed-changelog"><ul>
<li>We made it easier to search for group members on the group settings page, so you can quickly figure out if your Mom already added your second cousin to the third-annual extended family reunion BBQ group.</li>
</ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Jonathan Almeida: Regenerate the BuildConfig file without assembling the whole module]]></title>
<description><![CDATA[We have tokens that are added to official builds when a CI server is building the production-ready application. These tokens are added to the BuildConfig.java by using the [buildConfigField]1 function in a build.gradle. While testing, you want to quickly regenerate just this file to see changes o...]]></description>
<link>https://tsecurity.de/de/3717460/tools/jonathan-almeida-regenerate-the-buildconfig-file-without-assembling-the-whole-module/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3717460/tools/jonathan-almeida-regenerate-the-buildconfig-file-without-assembling-the-whole-module/</guid>
<pubDate>Fri, 14 Aug 2026 00:56:22 +0200</pubDate>
<content:encoded><![CDATA[<p>We have tokens that are added to official builds when a CI server is building the production-ready application. These tokens are added to the BuildConfig.java by using the [buildConfigField]1 function in a build.gradle. While testing, you want to quickly regenerate just this file to see changes occur with a new value. Instead of using the more... <a href="https://jonalmeida.com/til/regenerate-build-config/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Localization (L10N): L10n Report: August Edition 2026]]></title>
<description><![CDATA[Please note some of the information provided in this report may be subject to change as we are sometimes sharing information about projects that are still in early stages and are not final yet.  Welcome! Are you a locale leader and want us to include new members in our upcoming reports? Contact u...]]></description>
<link>https://tsecurity.de/de/3717459/tools/mozilla-localization-l10n-l10n-report-august-edition-2026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3717459/tools/mozilla-localization-l10n-l10n-report-august-edition-2026/</guid>
<pubDate>Fri, 14 Aug 2026 00:56:22 +0200</pubDate>
<content:encoded><![CDATA[<p>Please note some of the information provided in this report may be subject to change as we are sometimes sharing information about projects that are still in early stages and are not final yet.  Welcome! Are you a locale leader and want us to include new members in our upcoming reports? Contact us! Changes to the localization team A lot has... <a href="https://blog.mozilla.org/l10n/2026/08/13/l10n-report-august-edition-2026/" target="_blank" rel="noopener nofollow">Weiterlesen</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.13]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Fixed

Fixed Cursor sessions re-executing settled tools when an owned dialect projector rebuilds toolCall blocks: snapshotAssistantContentBlock now copies kCursorExecResolved explicitly so agent-loop still skips already-settled calls.

@oh-my-pi/pi-ai
Changed

Standardized...]]></description>
<link>https://tsecurity.de/de/3714789/tools/github-v17213/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3714789/tools/github-v17213/</guid>
<pubDate>Thu, 13 Aug 2026 16:28:45 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Cursor sessions re-executing settled tools when an owned dialect projector rebuilds toolCall blocks: <code>snapshotAssistantContentBlock</code> now copies <code>kCursorExecResolved</code> explicitly so agent-loop still skips already-settled calls.</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Changed</h3>
<ul>
<li>Standardized first-party outbound User-Agent headers on <code>omp/&lt;version&gt;</code> via the shared <code>USER_AGENT</code> utility.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed the Amazon Bedrock and Cursor transports ignoring <code>StreamOptions.headers</code>; both built their request headers from scratch, so caller-supplied tracing or attribution headers were silently dropped while working on every other provider (<a href="https://github.com/can1357/oh-my-pi/pull/8107" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8107/hovercard">#8107</a> by <a href="https://github.com/svperfecta">@svperfecta</a>).</li>
<li>Fixed Antigravity Flash turns hanging after successful response headers when the endpoint never emitted an SSE event; the provider now cancels the stalled body and fails over after 60 seconds while retaining the longer allowance for Pro reasoning starts.</li>
<li>Fixed Cursor exec-bridge bash/grep calls failing ArkType validation when the server omitted optional frame fields: synthesized and executed tool args now drop <code>undefined</code> keys (<code>cwd</code>, <code>case</code>, <code>skip</code>, <code>timeout</code>) instead of writing <code>optional: value || undefined</code>.</li>
<li>Fixed Cursor sessions double-executing settled tools when <code>tools.format</code> is an owned dialect (e.g. <code>gemini</code>): <code>wrapInbandToolStream</code> rebuilt toolCall blocks without copying <code>kCursorExecResolved</code>, so agent-loop re-ran bash/grep/todo and appended a second result for the same call id.</li>
<li>Fixed Codex Responses Lite requests for opaque model codenames such as Daybreak omitting the required <code>reasoning.context: "all_turns"</code> value and failing with HTTP 400.</li>
<li>Fixed Cursor personal usage reporting for current Pro / Pro+ / Ultra <code>/api/usage-summary</code> payloads that expose <code>individualUsage.plan</code> (and optional <code>onDemand</code>) instead of the older <code>individualUsage.overall</code> bucket (<a href="https://github.com/can1357/oh-my-pi/pull/7998" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7998/hovercard">#7998</a> by <a href="https://github.com/dnth">@dnth</a>).</li>
<li>Allowed passive Google callers to accept empty or thinking-only <code>STOP</code> responses as successful silence instead of exhausting the provider's empty-response retry budget. (<a href="https://github.com/can1357/oh-my-pi/issues/8223" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8223/hovercard">#8223</a>)</li>
<li>Fixed the AWS credential resolver ignoring <code>role_arn</code> profiles: shared-config role chaining (<code>source_profile</code> recursion, <code>web_identity_token_file</code>, <code>credential_source</code>) now resolves via STS <code>AssumeRole</code>/<code>AssumeRoleWithWebIdentity</code>, honoring <code>role_session_name</code>/<code>duration_seconds</code>/<code>external_id</code>, so Bedrock is detected on EKS/IRSA and multi-account setups instead of reporting "No models available" (<a href="https://github.com/can1357/oh-my-pi/issues/8209" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8209/hovercard">#8209</a>).</li>
<li>Fixed Bedrock availability being under-detected on Nitro/EKS hosts: the EC2 metadata probe now recognizes Nitro DMI markers (<code>board_asset_tag</code> instance ids, <code>Amazon EC2</code> vendor fields) in addition to the Xen <code>ec2</code> UUID prefix (<a href="https://github.com/can1357/oh-my-pi/issues/8209" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8209/hovercard">#8209</a>).</li>
<li>Fixed DeepSeek Responses targets (opencode-go) rejecting a thinking-mode continuation with <code>400 The reasoning_text in the thinking mode must be passed back to the API</code> after a prewalk hand-off plus mid-run compaction: the Responses input builder re-encoded replayed assistant turns without a reasoning item, so the request enabled reasoning but shipped no <code>reasoning_text</code>. The encoder now synthesizes a <code>reasoning_text</code> reasoning item for every replayed assistant turn when the target requires reasoning replay in thinking mode (<code>requiresReasoningContentForAllAssistantTurns</code> / <code>requiresReasoningContentForToolCalls</code>), mirroring the chat-completions <code>reasoning_content</code> safety net (<a href="https://github.com/can1357/oh-my-pi/issues/8248" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8248/hovercard">#8248</a>).</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Changed</h3>
<ul>
<li>Standardized catalog discovery User-Agent headers on <code>omp/&lt;version&gt;</code> via the shared <code>USER_AGENT</code> utility.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Marked <code>meta/muse-spark-1.2</code> and <code>muse-spark-1.2-contributor</code> as image-capable (<code>input: ["text", "image"]</code>) with the same Responses reasoning, thinking, and cost metadata as <code>muse-spark-1.1</code> (contributor uses its discounted 0.1/0.2 pricing), so <code>omp models</code> no longer lists them as text-only.</li>
<li>Fixed GLM-5.2 thinking levels across Baseten, CoreWeave, HuggingFace, and other uppercase-ID resellers, which were getting the generic <code>xhigh</code> effort ladder instead of the GLM-5.2-specific tiers. Also added Baseten <code>zai-org/GLM-5.2-Fast</code> and Fireworks <code>glm-5.2-fast</code> as reasoning models (<a href="https://github.com/can1357/oh-my-pi/pull/8200" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8200/hovercard">#8200</a> by <a href="https://github.com/jcfrancisco">@jcfrancisco</a>).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added <code>searxng.safesearch</code> setting option for SearXNG searches</li>
<li><code>omp update</code> now honors an <code>omp.dist</code> distribution field published in the release's npm manifest and treats major-version bumps without one as binary-only: bun/npm-managed installs are migrated to the standalone GitHub release binary in place instead of running a package-manager install that a non-npm release (e.g. a runtime change) would break. Windows script-shim installs (npm's <code>omp.cmd</code>/<code>omp.ps1</code>) are taken over seamlessly by installing <code>omp.exe</code> beside the shims and retiring them.</li>
<li>Added support for Cloudflare AI Gateway routing for Gemini search</li>
<li>Added support for Exa MCP search provider</li>
<li>Added domain inclusion/exclusion filtering and URL deduplication for TinyFish search</li>
<li>Fixed <code>/vibe</code> mode losing the pre-vibe toolset when a session already in vibe mode switches into another session that is also in vibe mode, which left <code>bash</code>, <code>edit</code>, <code>write</code>, <code>grep</code>, <code>glob</code>, <code>task</code>, and <code>hub</code> silently unavailable after exiting the mode; the pre-vibe toolset is now recorded on the <code>mode_change</code> entry and restored from there.</li>
<li>Preserved extension-filtered pasted image payloads and source links when <code>/goal</code>, <code>/plan</code>, or <code>/vibe</code> submits the composer draft.</li>
<li>Fixed Agent Hub lineage registration timestamps displaying in UTC instead of the user's local timezone.</li>
<li>Fixed Python/Julia/Ruby eval kernels failing to start after their staged runner script was cleared mid-session (e.g. a macOS tmpdir sweep): the memoized runner path is now re-validated so a long-lived process self-heals instead of only recovering on restart (<a href="https://github.com/can1357/oh-my-pi/issues/8140" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8140/hovercard">#8140</a>).</li>
<li>Fixed session resume fully reading and parsing the journal twice by reusing the entries already loaded by <code>SessionManager.open()</code> (<a href="https://github.com/can1357/oh-my-pi/issues/8117" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8117/hovercard">#8117</a>).</li>
<li>Fixed RPC <code>message_end</code> frames being serialized more than once before output while preserving v1 and v2 wire bytes (<a href="https://github.com/can1357/oh-my-pi/issues/8118" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8118/hovercard">#8118</a>).</li>
<li>Fixed message conversion caching strongly retaining the last session transcript and converted output after session disposal (<a href="https://github.com/can1357/oh-my-pi/issues/8119" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8119/hovercard">#8119</a>).</li>
<li>Fixed timed-out LSP requests continuing to consume server CPU and block queued requests by sending <code>$/cancelRequest</code> (<a href="https://github.com/can1357/oh-my-pi/issues/8116" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8116/hovercard">#8116</a>).</li>
<li>Fixed <code>shutdownAll()</code> leaving the configured LSP idle checker alive and preventing short-lived SDK hosts from exiting (<a href="https://github.com/can1357/oh-my-pi/issues/8115" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8115/hovercard">#8115</a>).</li>
<li>Fixed terminal Mermaid borders and junctions using low-contrast UI chrome colors instead of the active theme's readable content color.</li>
<li>Fixed Cursor provider sessions flooding bash/grep validation errors (<code>cwd</code>/<code>case</code>/<code>skip</code> "was undefined") when Cursor omitted optional exec-frame fields; the exec bridge now omits unset optional kwargs before tool execution and transcript synthesis.</li>
<li>Added structured reset-reason logging to advisor context re-primes (issue <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5035207460" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7226" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7226/hovercard" href="https://github.com/can1357/oh-my-pi/issues/7226">#7226</a>): every history-rewrite trigger (compact, auto-compaction, compaction-rescue, shake, drop-images, prune-tool-outputs, prune-stale-tool-results, conversation-boundary, context-maintenance) now emits an <code>advisor context reset</code> debug event with its reason, so full-transcript replays can be attributed to a concrete path.</li>
<li>Added <code>quarantine-recovery</code> and <code>quarantine-retry-exhausted</code> reset reasons to advisor context-reset debug logs, so advisor full re-primes after quarantined output remain attributable without changing quarantine retry semantics (issue <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5035207460" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7226" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7226/hovercard" href="https://github.com/can1357/oh-my-pi/issues/7226">#7226</a>).</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Standardized first-party outbound User-Agent headers on <code>omp/&lt;version&gt;</code> via the shared <code>USER_AGENT</code> utility.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>/usage</code>, <code>/advisor status</code>, and every other panel command answering only after the agent stopped working. Since <code>17.0.1</code> their output was queued until the turn settled (to stop mid-turn transcript mounts duplicating rows in native scrollback, issues <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4831550707" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/4806" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/4806/hovercard" href="https://github.com/can1357/oh-my-pi/issues/4806">#4806</a>/<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4984722348" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6767" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6767/hovercard" href="https://github.com/can1357/oh-my-pi/issues/6767">#6767</a>), and the deferral was silent, so on a long turn the command was indistinguishable from a dead one. The panel now renders immediately above the editor in an anchored container that is cleared and rebuilt in place, never entering the transcript, and the full output still lands in the transcript at the next settle. The preview is capped to 40% of the viewport (minimum 6 rows) so a tall report cannot push the prompt off screen.</li>
<li>Fixed the todo panel showing no progress while the agent worked through a plan: every sub-todo read as unchecked no matter how far along the run was. Three causes, all in the collapsed (default) view — the walking viewport dropped <em>every</em> closed row, so a completion only ever removed a line and the card's strike-reveal animation ran against a row nobody rendered; the phase the agent was actually in was the one phase header rendered without a <code>done/total</code> count; and the 60s todo auto-clear deleted closed tasks from an unfinished plan, resetting the phase counter to <code>0/n</code> and renumbering the stages until the next <code>todo</code> call restored the real snapshot. The viewport now keeps the newest closed task as a checked lead row (additive to the open-task cap), every phase header carries its progress, counts include abandoned tasks, and auto-clear only fires once the whole list is settled.</li>
<li>Status-line <code>usage</code> now renders monthly Cursor quotas (<code>mo N%</code>) in addition to the existing <code>5h</code> / <code>7d</code> windows (<a href="https://github.com/can1357/oh-my-pi/pull/7998" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7998/hovercard">#7998</a> by <a href="https://github.com/dnth">@dnth</a>).</li>
<li>Restored the <code>ctx.ui.custom()</code> overlay API that regressed after v0.45.6: <code>overlayOptions</code> (anchor/width/maxHeight/margin positioning and sizing) is now forwarded to <code>showOverlay</code> instead of a hardcoded full-cover geometry, <code>onHandle</code> receives the resulting <code>OverlayHandle</code>, and <code>OverlayHandle</code>/<code>OverlayOptions</code> are exported from the extension API types again.</li>
<li>Fixed a content refusal that arrives after the model already emitted a tool call ending the turn outright instead of consulting the model fallback chain. When the refused turn produced nothing visible and every emitted tool call provably never executed (each paired with a synthetic <code>executed: false</code> result), the turn is now retryable and the configured <code>retry.fallbackChains</code> entry gets its chance, matching how a refusal with no tool calls already behaves.</li>
<li>Fixed proxy discovery preferring the bundled catalog name over the proxy-reported name, so <code>omp models refresh</code> now updates stale display names (e.g. a proxy serving <code>longcat-2.0</code> as <code>"LongCat"</code> no longer shows the raw id).</li>
<li>Fixed the compiled binary build on Windows: <code>Bun.Glob.scan</code> yields backslash-separated paths, which the legacy Pi virtual module used verbatim for export keys and generated identifiers, producing invalid JavaScript.</li>
<li>Fixed Ctrl+O (<code>app.tools.expand</code>) not expanding truncated tool output while a tool-approval prompt or other selection dialog held keyboard focus, by promoting the shortcut to a global input listener that fires regardless of focus (it still defers to fullscreen overlays and the tree selector's own Ctrl+O filter cycle) (<a href="https://github.com/can1357/oh-my-pi/issues/7837" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7837/hovercard">#7837</a>).</li>
<li>Fixed <code>omp commit</code> printing a wall of bundled source when a <code>pre-commit</code>/<code>commit-msg</code> hook refuses a commit: hook failures are now reported with the hook's own message, split plans report how far they got, and the command exits non-zero cleanly (<a href="https://github.com/can1357/oh-my-pi/issues/7834" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7834/hovercard">#7834</a>).</li>
<li>Fixed <code>omp commit --push</code> exiting 0 without pushing when the working tree is already clean; it now pushes the existing commits (or fails non-zero if the push is refused) (<a href="https://github.com/can1357/oh-my-pi/issues/7834" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7834/hovercard">#7834</a>).</li>
<li>Subagents spawned through a model-role alias now inherit that role's <code>retry.fallbackChains</code> entry instead of the <code>default</code> chain. Both spawn paths (<code>task</code> and vibe workers) expand the alias — the bundled <code>task</code> agent's <code>@task</code>, <code>sonic</code>/<code>scout</code>'s <code>@smol</code> — before it reaches the executor, so the role identity was lost and every child was pinned to the <code>default</code> chain, routing retries onto models the operator had deliberately kept out of the role's chain. Completes <a href="https://github.com/can1357/oh-my-pi/pull/7694" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7694/hovercard">#7694</a>, which only covered agents whose unexpanded alias reached the executor (<a href="https://github.com/can1357/oh-my-pi/pull/7910" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7910/hovercard">#7910</a> by <a href="https://github.com/enieuwy">@enieuwy</a>).</li>
<li>Fixed standalone <code>AGENTS.md</code> discovery stopping at nested Git repository roots, so enclosing workspace instructions are loaded while home-level instructions remain scoped correctly.</li>
<li>Split the advisor Session update delivery into per-source-message user messages (single <code>Agent.prompt(AgentMessage[])</code> call) so provider prompt caches grow with the session instead of staying pinned at the instructions/tools boundary; rendering stays byte-identical to the old single-block update.</li>
<li>Restore the advisor primary-context dedup map when a failed advisor turn is rolled back, so retried batches re-deliver first-time plan/goal context in full instead of collapsing it to "(unchanged — still in effect)".</li>
<li>Include all renderer-read fields (excludeFromContext, bashExecution command, pythonExecution code, branch/compaction summary + fromId, fileMention files) in advisor prefix fingerprints so clones changing only those fields correctly trigger a re-render.</li>
<li>Fixed Gemini advisors treating a valid silent review as an empty-response failure, repeatedly retrying the turn and eventually dropping the advisor backlog. (<a href="https://github.com/can1357/oh-my-pi/issues/8223" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8223/hovercard">#8223</a>)</li>
<li>Fixed bash-tool commands receiving an unguarded <code>CI=1</code>, which broke clap-based CLIs (e.g. <code>tauri android build</code>) that parse <code>CI</code> as a strict boolean, and ignored the documented <code>PI_BASH_NO_CI</code> opt-out. The per-command env now injects clap-compatible <code>CI=true</code> and honors <code>PI_BASH_NO_CI</code>/<code>CLAUDE_BASH_NO_CI</code> (<a href="https://github.com/can1357/oh-my-pi/issues/8229" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8229/hovercard">#8229</a>).</li>
<li>Fixed macOS key hints rendering the Linux/Windows modifier names <code>Alt</code> and <code>Super</code> across every hint surface (<code>/hotkeys</code>, status bar, autocomplete, pending-message bar, copy selector, ask dialog): <code>alt</code> now renders as <code>Option</code> and <code>super</code> as <code>Cmd</code> on darwin, and the static <code>/hotkeys</code> navigation rows are platform-aware instead of hardcoding macOS <code>Option</code>/<code>Cmd</code> names on every platform (<a href="https://github.com/can1357/oh-my-pi/issues/8235" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8235/hovercard">#8235</a>).</li>
<li>Fixed <code>omp plugin uninstall &lt;plugin&gt; --dry-run</code> actually removing the plugin on both the npm and marketplace routes; dry-run now reports what would be removed and leaves installed plugin state unchanged (<a href="https://github.com/can1357/oh-my-pi/issues/8178" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8178/hovercard">#8178</a>).</li>
<li>Fixed handled OMP shutdown persisting running subagents as terminally aborted instead of restoring their transcripts as parked and revivable. (<a href="https://github.com/can1357/oh-my-pi/issues/8216" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8216/hovercard">#8216</a>)</li>
<li>Fixed <code>always-ask</code> approval prompts opening before large edit previews finish rendering, preventing blind approvals (<a href="https://github.com/can1357/oh-my-pi/issues/7957" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7957/hovercard">#7957</a>).</li>
<li>Fixed Pi-compatible extensions registering tools during asynchronous session startup being omitted from the live model tool registry.</li>
</ul>
<h3>Removed</h3>
<ul>
<li>Removed the <code>resolveAgentModelSource</code> model-resolver export, whose only use was being fed to <code>resolveExplicitModelRole</code>. Replaced by <code>resolveAgentModelSelection</code>, which returns the expanded <code>patterns</code> and the pre-expansion <code>role</code> together so a spawn path cannot derive one without the other (<a href="https://github.com/can1357/oh-my-pi/pull/7910" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7910/hovercard">#7910</a> by <a href="https://github.com/enieuwy">@enieuwy</a>).</li>
<li>A run is now attributed to the model that actually produced its output, not whichever model the session was last pointed at. A retry fallback that errored on its first request — an exhausted quota, a hard provider error — was credited with the whole run in the Agent Hub row and the settled task result, even when the previous model did every turn. Sessions expose the serving model directly, holding the last model that produced output while a candidate is armed but unproven, and transcript-derived history stops at the newest turn that produced output.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed inline images rendering permanently cropped on Kitty direct-placement terminals (WezTerm, Warp) when an image block straddled the viewport top during streaming: placements are now clipped to the visible slice at write time, and a placement id whose cells reached native scrollback is never re-used (<a href="https://github.com/can1357/oh-my-pi/pull/8070" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8070/hovercard">#8070</a> by <a href="https://github.com/voonfoo">@voonfoo</a>)</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Changed</h3>
<ul>
<li>Changed stale process-log retention from the newest five files globally to one newest file per completed process and day within the current and previous four local calendar days. This preserves bounded daily diagnostic coverage while continuing to remove one-use audit files.</li>
<li>Changed outbound User-Agent consumers to share the versioned <code>USER_AGENT</code> constant (<code>omp/&lt;version&gt;</code>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Mermaid ASCII state pseudostates rendering empty boxes, miscoloring final-state borders, and inverting rounded corners in bottom-to-top diagrams.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(lsp): stop idle checker during shutdown by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MikeeI/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MikeeI">@MikeeI</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5108138868" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8154" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8154/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8154">#8154</a></li>
<li>fix: make terminal Mermaid state diagrams readable by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shawnkoh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shawnkoh">@shawnkoh</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5112507997" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8172" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8172/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8172">#8172</a></li>
<li>fix(cursor): omit undefined exec args and keep exec-resolved under owned dialects by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jairuspace/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jairuspace">@jairuspace</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5113722635" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8183" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8183/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8183">#8183</a></li>
<li>fix(ai): resolve AWS role_arn/source_profile role chains for Bedrock by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5116938670" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8212" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8212/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8212">#8212</a></li>
<li>Fix/8030 osc133 command start by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mustaqeem66/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mustaqeem66">@Mustaqeem66</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5116991302" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8213" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8213/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8213">#8213</a></li>
<li>fix(agent): park subagents on shutdown by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5117341375" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8218" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8218/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8218">#8218</a></li>
<li>fix(ai): support Daybreak Responses Lite by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pickpocket/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pickpocket">@pickpocket</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5118356341" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8228" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8228/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8228">#8228</a></li>
<li>fix(coding-agent): emit clap-compatible CI=true and honor PI_BASH_NO_CI by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5118472847" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8230" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8230/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8230">#8230</a></li>
<li>fix(tui): render platform-aware modifier labels on macOS by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5118681971" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8238" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8238/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8238">#8238</a></li>
<li>fix(utils): retain one rolled log per process day by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5024385234" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7120" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7120/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7120">#7120</a></li>
<li>fix(advisor): prevent false full replays and preserve cache growth by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cuipengfei/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cuipengfei">@cuipengfei</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5036114455" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7247" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7247/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7247">#7247</a></li>
<li>fix: discover workspace AGENTS files by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/listellm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/listellm">@listellm</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5070014576" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7703" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7703/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7703">#7703</a></li>
<li>fix(coding-agent): answer panel commands immediately during a turn by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mvid/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mvid">@mvid</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5084354024" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7856" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7856/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7856">#7856</a></li>
<li>fix(task): key subagent fallback chains off the pre-expansion model role by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/enieuwy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/enieuwy">@enieuwy</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5090508859" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7910" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7910/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7910">#7910</a></li>
<li>fix(coding-agent): let a classifier refusal cascade when its tool calls never ran by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mvid/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mvid">@mvid</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5092366361" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7930" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7930/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7930">#7930</a></li>
<li>fix(coding-agent): resolve xd:// device dispatches against device user policy first by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/re2zero/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/re2zero">@re2zero</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5093056517" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7945" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7945/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7945">#7945</a></li>
<li>fix(tui): show edit previews before approval by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5094605283" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7959" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7959/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7959">#7959</a></li>
<li>fix(coding-agent): surface todo progress in the collapsed panel by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/z80dev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/z80dev">@z80dev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5094763344" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7965" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7965/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7965">#7965</a></li>
<li>fix(session): attribute a run to the model that produced its output by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/enieuwy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/enieuwy">@enieuwy</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5095737209" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7980" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7980/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7980">#7980</a></li>
<li>fix(vibe): restore the pre-vibe toolset when switching between vibe sessions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iskWang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iskWang">@iskWang</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5095892928" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7983" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7983/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7983">#7983</a></li>
<li>fix(ai): map Cursor plan rails to dashboard percents and show mo N% by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dnth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dnth">@dnth</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5096771401" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7998" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7998/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7998">#7998</a></li>
<li>test(coding-agent): hermeticize agent dir in claude-plugins discovery tests by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5097854672" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8018" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8018/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8018">#8018</a></li>
<li>fix(tui): keep pasted images when a mode command submits the draft by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fatihaziz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fatihaziz">@fatihaziz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5100379526" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8050" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8050/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8050">#8050</a></li>
<li>fix(prompts): disambiguate the grep tool from shell grep in the system prompt by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhang17-24/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhang17-24">@zhang17-24</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5102135661" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8066" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8066/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8066">#8066</a></li>
<li>fix(extensions): register lifecycle tools by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mrexodia/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mrexodia">@mrexodia</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5102420900" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8069" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8069/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8069">#8069</a></li>
<li>fix(tui): clip direct Kitty placements when image blocks straddle the viewport top by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/voonfoo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/voonfoo">@voonfoo</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5102671343" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8070" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8070/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8070">#8070</a></li>
<li>fix(coding-agent): display subagent registration time locally by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/anatoli-tsinovoy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/anatoli-tsinovoy">@anatoli-tsinovoy</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5102798926" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8074" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8074/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8074">#8074</a></li>
<li>fix(ai): bind the IPv6 loopback so dev servers stop stealing OAuth callbacks by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jwaldrip/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jwaldrip">@jwaldrip</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5103078408" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8081" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8081/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8081">#8081</a></li>
<li>test(coding-agent): flush immediate before asserting tiny-title prewarm by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5103315936" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8087" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8087/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8087">#8087</a></li>
<li>fix(catalog): mark muse-spark-1.2 as image capable by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chenb67/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chenb67">@chenb67</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5103368756" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8089" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8089/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8089">#8089</a></li>
<li>fix(ai): honor StreamOptions.headers in Bedrock and Cursor by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/svperfecta/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/svperfecta">@svperfecta</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5104494721" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8107" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8107/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8107">#8107</a></li>
<li>fix(ai): fail over stalled Antigravity streams by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5105910860" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8130" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8130/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8130">#8130</a></li>
<li>fix(eval): re-validate memoized kernel runner path by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5107541758" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8141" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8141/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8141">#8141</a></li>
<li>perf(session): reuse parsed journal during resume by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MikeeI/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MikeeI">@MikeeI</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5108135810" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8149" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8149/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8149">#8149</a></li>
<li>perf(rpc): reuse serialized output frames by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MikeeI/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MikeeI">@MikeeI</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5108136555" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8150" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8150/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8150">#8150</a></li>
<li>perf(session): weakly cache conversion histories by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MikeeI/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MikeeI">@MikeeI</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5108137664" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8152" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8152/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8152">#8152</a></li>
<li>fix(lsp): cancel requests after client timeout by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MikeeI/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MikeeI">@MikeeI</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5108138274" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8153" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8153/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8153">#8153</a></li>
<li>fix(cli): honor dry-run in plugin uninstall by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5112911302" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8179" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8179/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8179">#8179</a></li>
<li>fix(status-line): recognized kimi-code subscription windows in the usage segment by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tehfiend/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tehfiend">@tehfiend</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5115134622" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8197" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8197/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8197">#8197</a></li>
<li>fix(catalog): Fix reasoning levels of GLM-5.2 models; add Fireworks GLM 5.2 Fast by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jcfrancisco/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jcfrancisco">@jcfrancisco</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5115924691" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8200" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8200/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8200">#8200</a></li>
<li>fix(advisor): accept silent Gemini reviews by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5118179593" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8226" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8226/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8226">#8226</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shawnkoh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shawnkoh">@shawnkoh</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5112507997" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8172" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8172/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8172">#8172</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jairuspace/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jairuspace">@jairuspace</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5113722635" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8183" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8183/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8183">#8183</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pickpocket/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pickpocket">@pickpocket</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5118356341" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8228" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8228/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8228">#8228</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cuipengfei/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cuipengfei">@cuipengfei</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5036114455" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7247" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7247/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7247">#7247</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/listellm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/listellm">@listellm</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5070014576" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7703" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7703/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7703">#7703</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/re2zero/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/re2zero">@re2zero</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5093056517" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7945" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7945/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7945">#7945</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/z80dev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/z80dev">@z80dev</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5094763344" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7965" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7965/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7965">#7965</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iskWang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iskWang">@iskWang</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5095892928" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7983" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7983/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7983">#7983</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dnth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dnth">@dnth</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5096771401" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7998" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7998/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7998">#7998</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mrexodia/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mrexodia">@mrexodia</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5102420900" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8069" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8069/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8069">#8069</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jwaldrip/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jwaldrip">@jwaldrip</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5103078408" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8081" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8081/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8081">#8081</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chenb67/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chenb67">@chenb67</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5103368756" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8089" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8089/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8089">#8089</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/svperfecta/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/svperfecta">@svperfecta</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5104494721" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8107" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8107/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8107">#8107</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tehfiend/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tehfiend">@tehfiend</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5115134622" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8197" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8197/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8197">#8197</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jcfrancisco/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jcfrancisco">@jcfrancisco</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5115924691" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8200" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8200/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8200">#8200</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.12...v17.2.13">v17.2.12...v17.2.13</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.14]]></title>
<description><![CDATA[@oh-my-pi/pi-ai
Added

Added forceReasoningOff and disableReasoning options to disable reasoning in OpenAI and Azure OpenAI models

@oh-my-pi/pi-coding-agent
Added

Added externalThinking setting for private scratchpad reasoning via the new think tool

Full Changelog: v17.2.13...v17.2.14]]></description>
<link>https://tsecurity.de/de/3714788/tools/github-v17214/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3714788/tools/github-v17214/</guid>
<pubDate>Thu, 13 Aug 2026 16:28:45 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>Added <code>forceReasoningOff</code> and <code>disableReasoning</code> options to disable reasoning in OpenAI and Azure OpenAI models</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added <code>externalThinking</code> setting for private scratchpad reasoning via the new <code>think</code> tool</li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.13...v17.2.14">v17.2.13...v17.2.14</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.15]]></title>
<description><![CDATA[@oh-my-pi/pi-ai
Fixed

Fixed an issue where AWS_BEDROCK_SKIP_AUTH failed to expose Amazon Bedrock models when AWS credential files were unavailable.
Fixed an issue where forceReasoningOff was ignored by Anthropic and Google transports, which allowed native thinking alongside a caller-supplied ext...]]></description>
<link>https://tsecurity.de/de/3714787/tools/github-v17215/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3714787/tools/github-v17215/</guid>
<pubDate>Thu, 13 Aug 2026 16:28:45 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-ai</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where AWS_BEDROCK_SKIP_AUTH failed to expose Amazon Bedrock models when AWS credential files were unavailable.</li>
<li>Fixed an issue where forceReasoningOff was ignored by Anthropic and Google transports, which allowed native thinking alongside a caller-supplied external scratchpad.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed classification of model IDs with large minor versions (e.g., <code>claude-opus-5-11</code>) or three-part versions, ensuring they no longer fall back to stale default configurations.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added <code>--external-thinking</code> CLI flag to force external thinking tool activation.</li>
<li>Added <code>omp compress</code> command, which uses an isolated, two-tool agent loop to rewrite single or multiple text files (supporting glob patterns and concurrent processing) into dense prompt registers.</li>
<li>Expanded tool discovery in <code>omp cleanse</code> to support <code>staticcheck</code> and <code>golangci-lint</code> (Go); <code>mypy</code>, <code>pylint</code>, <code>flake8</code>, <code>ty</code>, and <code>basedpyright</code> (Python); <code>oxlint</code>, <code>deno lint</code>, <code>stylelint</code>, and <code>vue-tsc</code> (JS/TS); and <code>actionlint</code> (GitHub Workflows).</li>
<li>Added support for natural language requests in <code>omp cleanse "&lt;request&gt;"</code>, which launches a discovery subagent to automatically inspect the project, determine the correct commands, and map outputs.</li>
<li>Added an interactive picker to <code>omp cleanse</code> when run without arguments on a TTY, allowing users to run all checkers, select a specific checker, or describe what to fix.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Restricted the <code>think</code> tool to GPT, Claude, and Gemini transports that support native reasoning replacement.</li>
<li>Increased the default subagent cap for <code>omp cleanse</code> from 8 to 32.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed a hang in headless <code>omp -p</code> runs when <code>plan.defaultOnStartup: true</code> is enabled by disabling the startup default in print mode.</li>
<li>Fixed <code>display.hideToolActivity</code> failing to hide certain activity blocks, such as reminders, diagnostics, and completions.</li>
<li>Fixed several issues in the MCP Streamable HTTP transport, including updating the negotiated protocol version to <code>2025-11-25</code>, resolving connection drops and SSE resumption gaps, and preventing double-execution of tools during auth refreshes.</li>
<li>Fixed <code>/handoff</code> losing local artifacts (plans, scratch files, research notes) by copying them across the handoff session boundary.</li>
<li>Replaced libarchive-based tar parsing with a hardened, in-process tar reader to prevent crashes and safely handle complex archive structures, symlinks, and sparse metadata.</li>
<li>Fixed <code>Ctrl+O</code> tool-output expansion failing to reach launch-completion messages wrapped in the hidden tool activity container.</li>
</ul>
<h2>@oh-my-pi/hashline</h2>
<h3>Added</h3>
<ul>
<li>Added a post-apply parse advisory warning that alerts users when an applied edit fails to parse (despite the pre-edit content parsing successfully), helping catch balance-neutral misplacements that previously failed silently.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed a bug where Rust lifetimes (e.g., <code>'static</code>) were incorrectly parsed as starting a string literal, which blinded the delimiter-balance scanner and could lead to silent signature deletions. Single-quote lexing on <code>.rs</code> files is now language-aware and correctly distinguishes lifetimes from character literals.</li>
<li>Fixed an issue where terminal newlines in files were incorrectly exposed as editable blank rows.</li>
</ul>
<h2>@oh-my-pi/snapcompact</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Anthropic model ID parsing to be case-insensitive and extended the high-resolution 1932px frame tier to Claude Opus 5 and later, preventing sessions from falling back to lower-resolution 1568px frames and preserving full history per compaction.</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Changed</h3>
<ul>
<li>Extended parsed Server-Sent Events (SSE) to include optional id and retry fields, enabling reconnecting transports to retain stream cursors and respect server-requested retry intervals.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(snapcompact): extend high-res frame tier to opus 5+ by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5121639518" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8257" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8257/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8257">#8257</a></li>
<li>fix(coding-agent): copy local artifacts across handoff session boundary by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5122501077" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8262" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8262/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8262">#8262</a></li>
<li>fix(mcp): send MCP-Protocol-Version header and negotiate 2025-11-25 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5123100463" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8268" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8268/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8268">#8268</a></li>
<li>fix(ai): honor Bedrock skip-auth during model discovery by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5123140281" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8269" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8269/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8269">#8269</a></li>
<li>fix(tui): hide remaining activity in hidden-tool mode by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dannyboy-ai/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dannyboy-ai">@dannyboy-ai</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5123752389" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8273" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8273/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8273">#8273</a></li>
<li>fix(coding-agent): stop print mode hanging on plan.defaultOnStartup by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5123933615" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8276" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8276/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8276">#8276</a></li>
<li>fix(read): avoid libarchive for tar reads by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5121944387" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8260" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8260/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8260">#8260</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.14...v17.2.15">v17.2.14...v17.2.15</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.3.0]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Fixed

Improved the manual /shake command to retain a small history of recent tool results, preventing the agent from losing its active working context.

@oh-my-pi/pi-ai
Breaking Changes

Renamed withGeminiThinkingLoopGuard to withThinkingLoopGuard; the guard applies to Ge...]]></description>
<link>https://tsecurity.de/de/3714786/tools/github-v1730/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3714786/tools/github-v1730/</guid>
<pubDate>Thu, 13 Aug 2026 16:28:45 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Fixed</h3>
<ul>
<li>Improved the manual <code>/shake</code> command to retain a small history of recent tool results, preventing the agent from losing its active working context.</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Renamed <code>withGeminiThinkingLoopGuard</code> to <code>withThinkingLoopGuard</code>; the guard applies to Gemini, DeepSeek, and Grok model-id families.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Updated OpenCode Go integration to use the official usage endpoint, removing hardcoded caps, enabling real-time credential validation, and routing multi-key pools based on rolling and weekly headroom.</li>
<li>Optimized Anthropic prompt caching with rolling 5-minute breakpoints and idle refreshes to keep the prompt prefix warm.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Ollama chat adapter to correctly forward sampling parameters like temperature and topP to the provider.</li>
<li>Fixed OpenAI agent turns ending prematurely after a web search with no visible answer, ensuring the agent continues processing the search results.</li>
<li>Fixed a resource leak where completed model streams retained provider concurrency permits longer than necessary.</li>
<li>Fixed image input support for qwen3.8-max and newer models when using DashScope compatible-mode.</li>
<li>Fixed xAI usage reporting falling back to a stale cache when a new weekly cycle starts with 0% consumed credits.</li>
<li>Fixed Together AI login validation failures by querying the authenticated models list instead of a hardcoded model.</li>
<li>Fixed credential-health probes and usage fetches failing when using reference-stored API keys (such as environment variables or commands) by ensuring secrets are correctly resolved.</li>
<li>Fixed Perplexity email-OTP login by preserving the session cookies required for verification.</li>
<li>Fixed thinking configuration for OpenAI and Daybreak models to correctly send reasoning.effort: "none" when thinking is disabled.</li>
<li>Fixed Grok runaway thinking streams bypassing the thinking-loop guard.</li>
</ul>
<h3>Removed</h3>
<ul>
<li>Removed legacy local request-cost estimation machinery and database schemas previously used for OpenCode Go estimates.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Removed <code>OpenAICompat.enableGeminiThinkingLoopGuard</code>; thinking-loop eligibility is derived solely from the <code>model.id</code> family.</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added first-party OpenAI Daybreak Blue, Daybreak Red, and GPT-5.6 Cyber models with full support for their documented API pricing (including long-context rates above 272K input), token limits, tools, and reasoning effort controls (off/low/medium/high/xhigh/max).</li>
<li>Added calculateUncachedInputCost() to calculate prompt pricing against active context-length tiers without prompt caching.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Anthropic cache-write pricing to correctly honor mixed 5-minute and 1-hour TTL usage instead of incorrectly charging all writes at the 5-minute rate.</li>
<li>Fixed Ollama Cloud DeepSeek V4 Flash and older reasoners to correctly apply the DeepSeek effort contract (e.g., low/high/max) instead of the generic effort ladder.</li>
<li>Added a default request timeout to OpenAI-compatible model discovery to prevent stalled provider endpoints from hanging startup indefinitely.</li>
<li>Fixed Anthropic cache-write pricing to honor mixed 5-minute and 1-hour TTL usage instead of charging every write at the 5-minute rate.</li>
<li>Fixed Ollama Cloud DeepSeek V4 Flash (including dated/preview tags like <code>deepseek-v4-flash:0731</code>) exposing the generic <code>minimal</code>/<code>low</code>/<code>medium</code>/<code>high</code>/<code>xhigh</code> effort ladder without <code>max</code>; the <code>ollama-chat</code> transport now applies the DeepSeek effort contract (Flash → <code>low</code>/<code>high</code>/<code>max</code>, older reasoners → <code>high</code>/<code>max</code>), matching the direct API and every other host (<a href="https://github.com/can1357/oh-my-pi/issues/8334" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8334/hovercard">#8334</a>).</li>
<li>Exposed the <code>low</code> reasoning-effort tier for DeepSeek V4 Pro on the direct API and faithful aggregator routes, matching DeepSeek's updated API contract advertising <code>reasoning_effort</code> <code>low</code>/<code>high</code>/<code>max</code> for both V4 SKUs; OpenRouter's non-Flash route still exposes only <code>high</code>, and the older V3.x/R1 reasoners remain <code>high</code>/<code>max</code> (<a href="https://github.com/can1357/oh-my-pi/issues/8405" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8405/hovercard">#8405</a>).</li>
<li>Bounded OpenAI-compatible model discovery with a default request timeout so a stalled provider <code>/models</code> endpoint can no longer hang startup indefinitely in <code>resolveModelDiscoveryFallback</code> (<a href="https://github.com/can1357/oh-my-pi/issues/8315" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8315/hovercard">#8315</a>).</li>
<li>Fixed Codex-discovered <code>gpt-daybreak-*</code> aliases being treated as unknown models, restoring the GPT-5.6 <code>low</code>/<code>medium</code>/<code>high</code>/<code>xhigh</code>/<code>max</code> effort ladder and its 372K fallback only when the Codex registry omits <code>context_window</code>.</li>
<li>Fixed first-party OpenAI GPT-5.6 aliases to preserve wire-level <code>off</code> through generated pro aliases and to price requests above 272K input at each SKU's documented long-context rates.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Removed the global <code>advisor.subagents</code> setting. Subagent advisors are now configured per agent via frontmatter or <code>task.agentAdvisor</code>. Existing configurations of <code>advisor.subagents: true</code> will automatically migrate to <code>task.agentAdvisor: { task: "on" }</code>.</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added Astral <code>ty</code> as a built-in fallback Python LSP server (<code>ty server</code>), ordered behind <code>pyright</code>, <code>basedpyright</code>, and <code>pylsp</code>.</li>
<li>Added first-party Nix support, including reproducible source builds for Linux and macOS, a pinned development shell, NixOS and Home Manager modules, and offline Bun dependency support.</li>
<li>Added support for per-agent advisors configured via the <code>advisor</code> frontmatter field or the <code>task.agentAdvisor</code> settings, allowing different agents to be advised by different models.</li>
<li>Redesigned the <code>/agents</code> interface as a fullscreen hub featuring a scope sidebar, type-to-filter search, a pinned detail pane, mouse support, and interactive property chips for configuring agent settings.</li>
<li>Prepared for the upcoming npm package rename by updating <code>omp update</code> and startup version checks to follow the <code>omp.rename</code> pointer in the published manifest.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Updated <code>/usage</code>, <code>omp usage</code>, and the status line to display authoritative OpenCode Go quota usage directly from the official endpoint, replacing estimated costs with actual usage across three time windows (5h, 7d, and monthly).</li>
<li>Documented the source-available local protocol relay and clarified that production collaboration relay binaries are not currently published.</li>
<li>Enabled bounded Anthropic prompt-cache refreshes for the main agent loop while isolating advisor and side-channel requests from the shared refresh timer.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed multiple Language Server Protocol (LSP) issues, including concurrent sessions sharing backend overlays, stale document overlays after workspace edits, incorrect transactional edit advertisements, unhandled snippet placeholders in rust-analyzer, and failing to restore overwritten targets during failed file renames.</li>
<li>Fixed LSP <code>diagnostics</code> incorrectly reporting success when all language servers failed.</li>
<li>Fixed Hindsight memory scoping splitting repositories across multiple scopes on case-sensitive filesystems by lowercasing the project label.</li>
<li>Fixed the CLI crashing at startup with a raw <code>AuthBrokerError</code> when the configured auth broker is unreachable, replacing it with an actionable error message.</li>
<li>Fixed various resource and process leaks, including idle launch brokers staying alive indefinitely, stale MCP connections leaving child processes open, and undrained stdout in DAP <code>runInTerminal</code> requests.</li>
<li>Fixed custom STB-backed vision providers failing to decode WebP images by automatically detecting image formats from bytes and normalizing WebP blocks.</li>
<li>Fixed command-backed provider API keys (<code>!command</code>) staying pinned to cached values after receiving an HTTP 401 error.</li>
<li>Fixed the <code>/agents</code> Control Center failing to open when model overrides are configured as YAML arrays.</li>
<li>Fixed session-title generation regressions by restoring plain-sentence phrasing and name-fidelity instructions.</li>
<li>Fixed agent-facing prompts and system instructions mentioning tools that are absent from the current session catalog.</li>
<li>Fixed manual <code>/shake</code> discarding all tool results; it now retains a small recent tail of results to preserve active working context.</li>
<li>Fixed <code>omp install</code> failing validation for extensions importing legacy <code>is&lt;Tool&gt;ToolResult</code> event guards.</li>
<li>Fixed profile aliases generated by standalone binaries invoking Bun's embedded virtual script instead of the installed <code>omp</code> command.</li>
<li>Fixed <code>/skill:&lt;name&gt;</code> tokens in <code>/plan</code> or <code>/vibe</code> inline prompts being treated as literal text instead of executing the skill.</li>
<li>Fixed long streaming <code>write</code> previews stalling the TUI by optimizing file scanning and splitting.</li>
<li>Fixed the Windows console disappearing when running commands like <code>/stats</code>.</li>
<li>Fixed retry-fallback selection switching to a fallback model with a context window too small to hold the current session context.</li>
<li>Fixed OpenCode discovery ignoring <code>opencode.jsonc</code> files and rejecting comments in <code>opencode.json</code>.</li>
<li>Fixed WSL2 startup hanging forever when the Windows interop pipe is wedged: the WSL host-home discovery probes (<code>cmd.exe</code>, <code>wslpath</code>) now run under a 500ms hard timeout and fall back to the Linux <code>$HOME</code>/<code>~/.omp</code> candidates (<a href="https://github.com/can1357/oh-my-pi/issues/8402" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8402/hovercard">#8402</a>).</li>
</ul>
<h2>@oh-my-pi/hashline</h2>
<h3>Fixed</h3>
<ul>
<li>Repaired mis-set replacement ranges using exact outside-row matches, indentation, tree-sitter structure, and a narrow pure-closer shape: opening comment fences and other syntax-essential edges are retained only when a parse-valid candidate satisfies those constraints; ambiguous placements are rejected.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where shell-internal background jobs (such as <code>yes &gt;/dev/null &amp;</code>) could survive a one-shot shell session and consume CPU indefinitely after the command returned.</li>
</ul>
<h2>@oh-my-pi/omptype</h2>
<h3>Added</h3>
<ul>
<li>Added <code>type.withJsonSchema(schema, json)</code> to wrap a validation-only schema, ensuring JSON Schema emission yields the provided <code>json</code> verbatim even when nested inside objects, arrays, or unions. Schemas with defaults or output-changing morphs are rejected to prevent transformed outputs from being discarded.</li>
</ul>
<h2>@oh-my-pi/omp-stats</h2>
<h3>Added</h3>
<ul>
<li>Added cost-weighted <code>cacheSavings</code> metric alongside <code>cacheRate</code>, accounting for cache-read discounts and write premiums against equivalent uncached prompt costs.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ensured the embedded dashboard archive is byte-reproducible by sorting entries and zeroing tar and gzip timestamps during compilation.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where repeated pane-width adjustments or terminal resizing could corrupt native scrollback and soft-wrap behavior.</li>
<li>Fixed an issue where scaled OSC 66 Markdown headings (such as "Large Headings" on Kitty) would render as invisible placeholders or get partially cleared after a redraw or terminal resize.</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Fixed</h3>
<ul>
<li>Optimized performance of partial JSON parsing for long streaming tool-call arguments.</li>
<li>Fixed Mermaid ASCII multi-word edge labels where routed lines would show through spaces.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(tui): preserve scrollback across multiplexer width changes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shawnkoh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shawnkoh">@shawnkoh</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5102771426" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8072" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8072/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8072">#8072</a></li>
<li>fix(session): forward retry fallback events to extensions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5103009920" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8080" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8080/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8080">#8080</a></li>
<li>fix(cli): surface actionable error when auth broker is unreachable by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5104139267" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8097" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8097/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8097">#8097</a></li>
<li>fix(utils): mask routed lines beneath edge labels by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5104233563" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8101" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8101/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8101">#8101</a></li>
<li>fix(discovery): support OpenCode JSONC configs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5104476153" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8106" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8106/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8106">#8106</a></li>
<li>fix(launch): rearm broker idle shutdown on terminal settlement by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5105327184" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8122" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8122/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8122">#8122</a></li>
<li>fix(agent): reject cold revive that finishes after lifecycle dispose by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5105327395" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8123" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8123/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8123">#8123</a></li>
<li>fix(dap): drain runInTerminal debuggee stdout by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5105344472" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8125" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8125/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8125">#8125</a></li>
<li>fix(coding-agent): show scope in /ssh add hint by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kevcube/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kevcube">@kevcube</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5105590054" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8128" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8128/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8128">#8128</a></li>
<li>fix(coding-agent): ship omp:// docs to npm consumers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5106981258" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8136" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8136/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8136">#8136</a></li>
<li>fix(coding-agent): interpret inline /skill in mode-command prompts by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5107069085" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8138" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8138/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8138">#8138</a></li>
<li>fix(extensions): preserve unsafe schemas during plugin install by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5107786466" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8144" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8144/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8144">#8144</a></li>
<li>fix(ai): preserve perplexity otp session cookies by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5109403821" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8157" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8157/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8157">#8157</a></li>
<li>fix(coding-agent): lowercase the hindsight project label by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alvorithm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alvorithm">@alvorithm</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5109554994" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8159" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8159/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8159">#8159</a></li>
<li>fix(coding-agent): restore is*ToolResult guards on legacy pi shim by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5110606457" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8163" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8163/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8163">#8163</a></li>
<li>docs(collab): clarify relay self-hosting availability by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5111251538" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8166" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8166/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8166">#8166</a></li>
<li>fix(rpc): strip snapcompact archive from compact result by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5111883978" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8169" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8169/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8169">#8169</a></li>
<li>fix(session): resolve wire-name aliases in hasBuiltInTool by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5114035411" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8185" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8185/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8185">#8185</a></li>
<li>feat(lsp): add Astral ty as built-in Python primary LSP server by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/FNDEVVE/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/FNDEVVE">@FNDEVVE</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5114069384" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8186" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8186/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8186">#8186</a></li>
<li>fix(coding-agent): gate prompt tool mentions on session tool availability by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5115494752" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8199" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8199/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8199">#8199</a></li>
<li>fix(agent): support array model overrides in dashboard by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5116198770" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8202" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8202/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8202">#8202</a></li>
<li>fix(cli): handle standalone profile aliases by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5118575751" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8236" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8236/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8236">#8236</a></li>
<li>chore: force refresh provider api key command by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/djjorjinho/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/djjorjinho">@djjorjinho</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5121195788" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8253" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8253/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8253">#8253</a></li>
<li>fix(ai): continue after answerless hosted search by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kfxhjz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kfxhjz">@kfxhjz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5122775509" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8263" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8263/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8263">#8263</a></li>
<li>fix(omp): prevent false reset fireworks by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oleksoleksoleks/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oleksoleksoleks">@oleksoleksoleks</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5123052824" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8266" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8266/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8266">#8266</a></li>
<li>fix(coding-agent): skip idle mid-turn persistence waits by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethancawse/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethancawse">@ethancawse</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5125880863" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8283" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8283/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8283">#8283</a></li>
<li>fix(ai): release provider permit before stream completion by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethancawse/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethancawse">@ethancawse</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5125880948" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8284" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8284/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8284">#8284</a></li>
<li>Fix open browser behaviour on Windows by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/x86matthew/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/x86matthew">@x86matthew</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5126316345" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8288" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8288/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8288">#8288</a></li>
<li>fix(ai): stop stripping images from multimodal qwen3.8-max on DashScope by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5126858033" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8307" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8307/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8307">#8307</a></li>
<li>fix(coding-agent): suppress circular plan-yolo startup note by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5127388298" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8313" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8313/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8313">#8313</a></li>
<li>fix(mcp): show config source in startup failures by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jeffscottward/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jeffscottward">@jeffscottward</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5127541478" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8316" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8316/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8316">#8316</a></li>
<li>fix(catalog): bound openai-compatible model discovery with default timeout by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5127546257" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8317" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8317/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8317">#8317</a></li>
<li>fix(tui): keep scaled OSC 66 heading reserved rows intact on repaint by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5127719531" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8320" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8320/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8320">#8320</a></li>
<li>fix(ai): handle omitted creditUsagePercent in fresh xAI weekly periods by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bubua12/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bubua12">@bubua12</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5128607090" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8325" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8325/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8325">#8325</a></li>
<li>fix(ai): validated together login against models endpoint by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5129238046" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8333" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8333/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8333">#8333</a></li>
<li>fix(catalog): apply DeepSeek effort contract on Ollama Cloud by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5129520951" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8335" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8335/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8335">#8335</a></li>
<li>fix(usage): use authoritative OpenCode Go quotas by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/will-bogusz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/will-bogusz">@will-bogusz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5130406977" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8337" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8337/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8337">#8337</a></li>
<li>fix(coding-agent): normalize WebP for STB-backed models by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethancawse/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethancawse">@ethancawse</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5130946580" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8339" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8339/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8339">#8339</a></li>
<li>fix(natives): stop detached internal shell jobs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5132424541" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8343" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8343/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8343">#8343</a></li>
<li>fix(eval): allow awaiting Python workflow helpers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Kigbnajd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Kigbnajd">@Kigbnajd</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5133508144" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8348" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8348/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8348">#8348</a></li>
<li>fix(mnemopi): contain lifecycle hook failures by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5133852513" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8352" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8352/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8352">#8352</a></li>
<li>fix(bash): resolve msys drive paths in utility builtins by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5134469401" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8356" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8356/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8356">#8356</a></li>
<li>docs: reconcile session dir layout with the 17.2.9 hashed-scheme revert by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tenequm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tenequm">@tenequm</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5134837431" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8359" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8359/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8359">#8359</a></li>
<li>test(coding-agent): fix pre-existing session-manager legacy migration test failure by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5097737827" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8016" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8016/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8016">#8016</a></li>
<li>fix(tui,utils): remove O(N²) hot paths when streaming long tool-call args by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AmecoCoding/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AmecoCoding">@AmecoCoding</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5099567200" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8040" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8040/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8040">#8040</a></li>
<li>fix(coding-agent): preserve ArkType command API compatibility by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/evandrodevbr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/evandrodevbr">@evandrodevbr</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5100214827" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8049" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8049/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8049">#8049</a></li>
<li>fix(compaction): manual /shake keeps a recent tail of tool results by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhang17-24/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhang17-24">@zhang17-24</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5102137463" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8067" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8067/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8067">#8067</a></li>
<li>fix(agent): fit-check retry fallback before switching models by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5102193677" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8068" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8068/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8068">#8068</a></li>
<li>fix(advisor): preserve advisor fallback role ownership by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5102873968" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8076" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8076/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8076">#8076</a></li>
<li>fix(build): set CMAKE_POLICY_VERSION_MINIMUM for audiopus_sys in cargo env by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5103367928" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8088" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8088/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8088">#8088</a></li>
<li>fix(mcp): close stale initial connections by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5105331299" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8124" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8124/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8124">#8124</a></li>
<li>fix(tui): keep large transcript rebuilds responsive by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5106963099" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8135" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8135/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8135">#8135</a></li>
<li>fix(lsp): correct workspace edit failure handling by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5137335277" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8391" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8391/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8391">#8391</a></li>
<li>fix(lsp): isolate document overlays across sessions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5137350198" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8392" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8392/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8392">#8392</a></li>
<li>fix(lsp): preserve workspace resource options by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5137351070" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8393" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8393/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8393">#8393</a></li>
<li>fix(lsp): reject unsupported rust-analyzer snippet edits by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5137351671" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8394" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8394/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8394">#8394</a></li>
<li>fix(lsp): roll back rename_file edits when the move fails by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5137356504" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8395" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8395/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8395">#8395</a></li>
<li>fix(lsp): abort rename_file when willRenameFiles fails on a supporting server by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5137367133" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8396" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8396/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8396">#8396</a></li>
<li>fix(lsp): fail diagnostics when every applicable server fails by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5137367615" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8397" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8397/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8397">#8397</a></li>
<li>fix(lsp): synchronize applied workspace edits by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5137401230" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8399" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8399/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8399">#8399</a></li>
<li>fix(discovery): bound WSL host-home probe with a hard timeout by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5137615764" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8403" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8403/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8403">#8403</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kevcube/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kevcube">@kevcube</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5105590054" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8128" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8128/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8128">#8128</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alvorithm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alvorithm">@alvorithm</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5109554994" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8159" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8159/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8159">#8159</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/FNDEVVE/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/FNDEVVE">@FNDEVVE</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5114069384" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8186" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8186/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8186">#8186</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/djjorjinho/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/djjorjinho">@djjorjinho</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5121195788" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8253" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8253/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8253">#8253</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kfxhjz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kfxhjz">@kfxhjz</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5122775509" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8263" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8263/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8263">#8263</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethancawse/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethancawse">@ethancawse</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5125880863" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8283" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8283/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8283">#8283</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/x86matthew/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/x86matthew">@x86matthew</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5126316345" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8288" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8288/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8288">#8288</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bubua12/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bubua12">@bubua12</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5128607090" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8325" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8325/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8325">#8325</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Kigbnajd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Kigbnajd">@Kigbnajd</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5133508144" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8348" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8348/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8348">#8348</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tenequm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tenequm">@tenequm</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5134837431" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8359" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8359/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8359">#8359</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AmecoCoding/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AmecoCoding">@AmecoCoding</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5099567200" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8040" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8040/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8040">#8040</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/evandrodevbr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/evandrodevbr">@evandrodevbr</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5100214827" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8049" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8049/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8049">#8049</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.15...v17.3.0">v17.2.15...v17.3.0</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[This Week In Rust: This Week in Rust 664]]></title>
<description><![CDATA[Hello and welcome to another issue of This Week in Rust!
Rust is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
@thisweekinrust.bsky.social on Bluesky or
@ThisWeekinRu...]]></description>
<link>https://tsecurity.de/de/3714785/tools/this-week-in-rust-this-week-in-rust-664/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3714785/tools/this-week-in-rust-this-week-in-rust-664/</guid>
<pubDate>Thu, 13 Aug 2026 16:28:42 +0200</pubDate>
<content:encoded><![CDATA[<p>Hello and welcome to another issue of <em>This Week in Rust</em>!
<a href="https://www.rust-lang.org/">Rust</a> is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
<a href="https://bsky.app/profile/thisweekinrust.bsky.social">@thisweekinrust.bsky.social</a> on Bluesky or
<a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or
<a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>.
Want to get involved? <a href="https://github.com/rust-lang/rust/blob/main/CONTRIBUTING.md">We love contributions</a>.</p>
<p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a> and archives can be viewed at <a href="https://this-week-in-rust.org/">this-week-in-rust.org</a>.
If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p>
<p>Want TWIR in your inbox? <a href="https://this-week-in-rust.us11.list-manage.com/subscribe?u=fd84c1c757e02889a9b08d289&amp;id=0ed8b72485">Subscribe here</a>.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#updates-from-rust-community">Updates from Rust Community</a></h4>


<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#official">Official</a></h5>
<ul>
<li><a href="https://blog.rust-lang.org/inside-rust/2026/08/10/call-for-testing-impl-and-mut-restrictions/">Call for testing: Restricting trait implementability and field mutability</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#foundation">Foundation</a></h5>
<ul>
<li><a href="https://rustfoundation.org/media/rust-teams-health-summit-september-8-in-montreal/">Rust Team Health Summit: September 8 in Montréal</a></li>
<li><a href="https://rustfoundation.org/media/catching-up-with-the-rust-content-team-rustweek-interviews-and-a-new-changelog-series/">Catching Up with the Rust Content Team: RustWeek Interviews and a New Changelog Series</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#newsletters">Newsletters</a></h5>
<ul>
<li><a href="https://rust-osdev.com/this-month/2026-07/">This Month in Rust OSDev: July 2026</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#projecttooling-updates">Project/Tooling Updates</a></h5>
<p>We are making changes to the Project/Tooling Updates Section - see <a href="https://github.com/rust-lang/this-week-in-rust/issues/8575">here</a> for more details</p>
<ul>
<li><a href="https://bevy.org/news/bevys-sixth-birthday/">Bevy's Sixth Birthday</a></li>
<li><a href="https://linebender.org/blog/fearless-simd-0-7/">fearless_simd v0.7: 64-bit integers, improved generics, SSE2, and upcoming v1.0</a></li>
<li><a href="https://github.com/matteobovetti/vairedb/releases/tag/v0.1.0">vairedb 0.1.0 - Cloud Native Distributed Analytical Database</a></li>
<li><a href="https://github.com/noahbald/oxvg/releases/tag/v0.0.7">OXVG 0.0.7: introducing an SVG-to-JSX transformer to the OXVG toolchain</a></li>
<li><a href="https://dev.to/zionsati/html-javascript-css-should-have-died-long-ago-1mm3">HTML, JavaScript, CSS should have died long ago</a></li>
<li><a href="https://lwn.net/SubscriberLink/1087069/d25c9e5027849a8a/">Even more formal verification for BPF</a></li>
<li><a href="https://github.com/kunobi-ninja/kache/releases/tag/v0.14.0">kache 0.14.0: debuggable restores and cross-clone convergence</a></li>
<li><a href="https://github.com/kunobi-ninja/kobe/releases/tag/v0.39.0">kobe 0.39.0: hardening the cluster-lease lifecycle</a></li>
<li><a href="https://github.com/renew-engine/renew/releases/tag/v0.1.1">renew 0.1.1: a deterministic, code-first game engine</a></li>
<li><a href="https://singhpratech.github.io/grit-datatype/">GRIT 1.1: type-check your quantized tensors</a></li>
<li><a href="https://flodl.dev/blog/making-room">floDl: Introducing AMD GPU support</a></li>
<li><a href="https://rolandsdev.blog/posts/caching-git-clones-across-a-slow-network/">git-cache-proxy: read-only cache for git</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#observationsthoughts">Observations/Thoughts</a></h5>
<ul>
<li><a href="https://epage.github.io/blog/2026/08/cargo-vision/">A Vision for Cargo</a></li>
<li><a href="https://smallcultfollowing.com/babysteps/blog/2026/08/10/cyclic-trait-solving/">Cylic trait implementations: motivation</a></li>
<li><a href="https://www.vectorware.com/blog/simd-on-gpu/">Rust SIMD on the GPU</a></li>
<li><a href="https://blog.jetbrains.com/rust/2026/08/10/rewriting-in-rust/">Rewriting in Rust: Performance, Failures, 2026 Reality Check</a></li>
<li><a href="https://erk.dev/2026/08/12/rangefrom-part-1">RangeFrom, Part 1..: History and background</a></li>
<li><a href="https://dmitrii.app/typed-conversations-make-illegal-agent-dialogues-unrepresentable/">Typed Conversations: Make Illegal Agent Dialogues Unrepresentable</a></li>
<li><a href="https://abdk4moura.github.io/post.html?post=2026-08-09-ecqv.md">ECQV: implicit certificates, and why I kept them out of the project that motivated them</a></li>
<li><a href="https://c410-f3r.github.io/thoughts/tls-handshakes-measuring-the-performance-of-4-cryptography-libraries/">TLS Handshakes: Measuring the Performance of 4 Cryptography Libraries</a></li>
<li><a href="https://kerkour.com/rust-scalable-backend-services">Building scalable backend services with Rust and PostgreSQL</a></li>
<li><a href="https://tweedegolf.nl/en/blog/240/PoC-for-universal-hardware-in-the-loop-HAL-test-suite/">PoC for universal hardware-in-the-loop HAL test suite — Tweede golf</a></li>
<li>[video] <a href="https://www.youtube.com/watch?v=ah11nzclXag">FLOSS 878 - A Tool With Opinions</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-walkthroughs">Rust Walkthroughs</a></h5>
<ul>
<li><a href="https://ashdnazg.github.io/articles/26/Downcasting-Arcs-in-Rust">Downcasting Arcs in Rust</a></li>
<li><a href="https://hotpath.rs/blog/profiling-rust-guide">Profiling Rust with hotpath-rs: The Complete Guide - From SQL Queries to CPU Sampling</a></li>
<li><a href="https://aaronqian.com/log/2026-08-01-chip-agnostic-architecture-bare-metal-rust/">A chip-agnostic architecture for bare-metal embedded Rust</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#research">Research</a></h5>
<ul>
<li><a href="https://arxiv.org/abs/2608.07135">Rust Coreutils: Rebuilding Unix Foundations in a Modern Language</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#miscellaneous">Miscellaneous</a></h5>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#crate-of-the-week">Crate of the Week</a></h4>
<p>This week's crate is <a href="https://crates.io/crates/literator">literator</a>, a crate for efficiently displaying the items of an iterator without temporary allocations.</p>
<p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1644">Nora</a> for the suggestion!</p>
<p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#calls-for-testing">Calls for Testing</a></h4>
<p>An important step for RFC implementation is for people to experiment with the
implementation and give feedback, especially before stabilization.</p>
<p>If you are a feature implementer and would like your RFC to appear in this list, add a
<code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or
guidance on which aspect(s) of the feature need testing.</p>
<p><em>No calls for testing were issued this week by
<a href="https://github.com/rust-lang/rust/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Rust</a>,
<a href="https://github.com/rust-lang/cargo/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Cargo</a>,
<a href="https://github.com/rust-lang/rustup/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Rustup</a> or
<a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing%20state%3Aopen">Rust language RFCs</a>.</em></p>
<p><a href="https://github.com/rust-lang/this-week-in-rust/issues">Let us know</a> if you would like your feature to be tracked as a part of this list.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers">Call for Participation; projects and speakers</a></h4>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cfp-projects">CFP - Projects</a></h5>
<p>Always wanted to contribute to open-source projects but did not know where to start?
Every week we highlight some tasks from the Rust community for you to pick and get started!</p>
<p>Some of these tasks may also have mentors available, visit the task page for more information.</p>

<ul>
<li><a href="https://github.com/diesel-rs/diesel/issues/4840">Diesel - Improve the documentation of our derives</a></li>
</ul>



<p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://github.com/rust-lang/this-week-in-rust?tab=readme-ov-file#call-for-participation-guidelines">here</a> or through a <a href="https://github.com/rust-lang/this-week-in-rust">PR to TWiR</a> or by reaching out on <a href="https://bsky.app/profile/thisweekinrust.bsky.social">Bluesky</a> or <a href="https://mastodon.social/@thisweekinrust">Mastodon</a>!</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cfp-events">CFP - Events</a></h5>
<p>Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.</p>



<p>If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a <a href="https://github.com/rust-lang/this-week-in-rust">PR to TWiR</a> or by reaching out on <a href="https://bsky.app/profile/thisweekinrust.bsky.social">Bluesky</a> or <a href="https://mastodon.social/@thisweekinrust">Mastodon</a>!</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#updates-from-the-rust-project">Updates from the Rust Project</a></h4>
<p>698 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2026-08-04..2026-08-11">merged in the last week</a></p>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#compiler">Compiler</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/160464">check the fallback map before queueing child in <code>visible_parent_map</code> breadth-first search</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159343">enable polonius alpha on nightly</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160673">improve <code>canonical_param_env_cache</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160399">interpret: skip deref-projection validity checks when they are not needed</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159763">optimize crate resolution for large workspace</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160160">optimize handling of solver errors</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160479">optimize <code>try_evaluate_obligations</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160317">perf: cache already-checked types in the privacy visitor</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160494">perf: lock-free root fast paths for hygiene queries</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157281">perf: skip irrelevant foreign impls when building the specialization graph</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160268">perf: store the fulfillment engine inline in ObligationCtxt</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158447">shallow resolve ty and const vars to their root vars, attempt 2</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160033">speed up <code>EverInitializedPlaces</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160555">split <code>apply_primary_terminator_effect</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159746">stabilize <code>c_variadic_naked_functions</code></a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#library">Library</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/160453">add fast path to <code>escape_string_symbol</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160432">core: generalize <code>BorrowedCursor::ensure_init</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159784">hint that memchr returns an in-bounds index</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160881">implement <code>&lt;OnceCell,OnceLock&gt;::new_init</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159300">implement <code>to_string()</code> on <code>ByteStr</code> and <code>ByteString</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/156935">introduce a <code>PinSafePointer</code> trait that generalizes <code>PinCoerceUnsized</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160816">mark const ptr methods and free functions as <code>inline(always)</code> to match *mut</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160732">optimize <code>slice::contains</code> for one-byte BytewiseEq types</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160480">single-pass ASCII lower/upper case conversion</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160820">stabilize <code>fs_set_times</code></a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cargo">Cargo</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/cargo/pull/17315"><code>docs(changelog)</code>: Pull the --verbose item</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17345"><code>docs(ref)</code>: Add missing config env variables</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/16632"><code>feat(log)</code>: emit build-started JSON message with <code>run_id</code></a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17214"><code>feat(profile)</code>: Add built-in profile debug</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17328"><code>feat(resolver)</code>: Report the min-publish-age in the lock message</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17126"><code>feat(toml)</code>: allow overriding inherited default-features in 2024</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17303"><code>feat(trim-paths)</code>: emit unremap files for final artifacts</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17322"><code>fix(clean)</code>: respect target with --doc</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17304"><code>fix(diag)</code>: Ensure diagnostic titles work without snippets</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17313"><code>fix(diag)</code>: Gate <code>blanket_hint_mostly_unused</code> with -Zprofile-hint-mostly-unused</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17307"><code>fix(diag)</code>: Remove complexity, perf, and nursery lint groups</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17306"><code>fix(git)</code>: Avoid use of git's core.fsmonitor</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17317"><code>fix(lock)</code>: Use more accurate 'highest, rather than 'latest'</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17327"><code>fix(resolver)</code>: Make min-publish-age relative to --publish-time</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17338"><code>fix(trim-paths): /cargo/deps</code> fallback sources</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17337"><code>fix(trim-paths)</code>: workspace remap under -Zroot-dir</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17331"><code>refactor(resolver): resolve()</code> does not need an optional gctx</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17314"><code>revert(compiler)</code>: forward verbose flag to rustc for local crates</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17326"><code>test(trim-paths)</code>: exercise unremap files with debuggers</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17336">doc: don't use mergeable info and json together</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17344">fix funding link</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17305">refactor: remove unnecessary mut in sources</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17347">test: handle non-deterministic compilation order</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rustdoc">Rustdoc</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/160576">Create output file after we checked that the standalone markdown file is valid</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159014">Do not take <code>doc(cfg())</code> into account when filtering doctests</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#clippy">Clippy</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17530"><code>cast_possible_truncation</code>: fix <code>try_from</code> suggestion expanding macros</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17229">don't lint <code>semicolon_if_nothing_returned</code> in <code>#[automatically_derived]</code> …</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/16634">fix <code>needless_range_loop</code> suggests wrongly for nested index</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17185"><code>needless_bool</code>: lint the early-return guard form</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17499">new lint: nonzero operators and methods</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17287"><code>redundant_pattern_matching</code>: parenthesize guarded <code>matches!</code> suggestion</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17452"><code>unwrap_or_default</code>: respect MSRV for raw-pointer Default impls</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-analyzer">Rust-Analyzer</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23032">account for trailing line continuations in byte strings</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23042">support <code>#[rustc_must_implement_one_of]</code> in the assists</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23082">add <code>replace_arith_with_strict</code> assist</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22994"><code>term_search</code> exclude useless target type</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23117">add parens on some common cases for <code>type_mismatch</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23055">allow <code>struct</code> literals in match guards inside <code>let</code> exprs</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23021">always allocate anon consts for c-strings/byte-strings literals</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23019">avoid array len type mismatch with string panic</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23059">avoid escaping bound vars produced by <code>infer_method_call's skip_binder</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22974">bound macro expansion depth across body and block boundaries</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23103">do not consider locals of <code>async fn</code> as upvars of the returned coroutine</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23096">do not declare the value NS constructor for structs/enum variants if it does not exist</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22922">don't panic when a lifetime is passed to an <code>ident</code> metavariable</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23120">fix 'no entry found for key' panic in VFS</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23040">fix upvars query of const block inside closure</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23020">fixed positive diagnostic for valid code</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23034">initialize <code>macro_depth</code> to the file's macro depth in docs.rs and assoc.rs</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23071">let <code>Param::parent_fn</code> return function for BuiltinDeriveImplMethod methods</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23078">normalize associated types in orphan checks</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23107">off-by-one in lifetime binders when lowering <code>dyn Trait&lt;'a&gt;</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23056">optimize memory usage of the item tree</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23054">parse inline asm with keyword as operand name</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23077">parse or pattern after range pattern</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23028">preserve trailing text when <code>InsertReplaceEdit</code> is unsupported</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23070">remove extra spaces in full function signatures</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22899">support macros in <code>#[doc]</code> attributes in IDE features</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23072">unresolved type variables shouldn't escape impl selection</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23036">when searching for a <code>pub macro</code>, consider it available to reverse dependencies</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h5>
<p>This week so many new performance improvements landed that we needed to roll 10 of them up together to keep the bors queue manageable, great work!
Also new is the LLVM 23 update which caused massive compile-time, run-time, bootstrap time and artifact size improvements.
These improvements are reduced by the merge of Polonius Alpha on nightly causing a 3.0% regression. There still seems to be some potential to mitigate this regression.</p>
<p>Triage done by <strong>@JonathanBrouwer</strong>.
Revision range: <a href="https://perf.rust-lang.org/?start=65dd30fb9e882a7e8f0be10caca62936db2a98b8&amp;end=771916f9028e7fe56d2685f2c4f698de5d7d6a45&amp;absolute=false&amp;stat=instructions%3Au">65dd30fb..771916f9</a></p>
<p><strong>Summary</strong>:</p>
<table>
<thead>
<tr>
<th>(instructions:u)</th>
<th>mean</th>
<th>range</th>
<th>count</th>
</tr>
</thead>
<tbody>
<tr>
<td>Regressions ❌ <br> (primary)</td>
<td>4.6%</td>
<td>[0.2%, 12.8%]</td>
<td>24</td>
</tr>
<tr>
<td>Regressions ❌ <br> (secondary)</td>
<td>4.3%</td>
<td>[0.2%, 14.3%]</td>
<td>30</td>
</tr>
<tr>
<td>Improvements ✅ <br> (primary)</td>
<td>-3.3%</td>
<td>[-16.4%, -0.2%]</td>
<td>251</td>
</tr>
<tr>
<td>Improvements ✅ <br> (secondary)</td>
<td>-5.2%</td>
<td>[-34.8%, -0.2%]</td>
<td>308</td>
</tr>
<tr>
<td>All ❌✅ (primary)</td>
<td>-2.6%</td>
<td>[-16.4%, 12.8%]</td>
<td>275</td>
</tr>
</tbody>
</table>
<p>1 Regression, 4 Improvements, 7 Mixed; 5 of them in rollups
25 artifact comparisons made in total</p>
<p><a href="https://github.com/rust-lang/rustc-perf/blob/e34d7594ad4dfdd6541038f505ec37d4602171f7/triage/2026/2026-08-09.md">Full report here</a></p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#approved-rfcs"></a><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></h5>
<p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These
are the RFCs that were approved for implementation this week:</p>
<ul>
<li><a href="https://github.com/rust-lang/rfcs/pull/3924">Cargo: <code>hints.min-opt-level</code></a></li>
<li><a href="https://github.com/rust-lang/rfcs/pull/3980">Add <code>extern "custom"</code></a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#final-comment-period">Final Comment Period</a></h5>
<p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs
which are reaching a decision. Express your opinions now.</p>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#tracking-issues-prs">Tracking Issues &amp; PRs</a></h6>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust"></a><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Rust</a>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/158580">std: map ENOTSUP to ErrorKind::Unsupported- #158580</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/156160">feat: add symmetric PartialEq impls for <code>Vec</code>, <code>&amp;[T]</code>, <code>&amp;mut [T]</code> versus <code>Cow&lt;'_, [T]&gt;</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160136">Add <code>Default</code> implementation for <code>std::sync::Once</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160229">Extend <code>dropping_{references,copy_types}</code> lints to <code>drop_in_place</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159986">lint on more incorrect usages of <code>core::ffi::c_void</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160302">target_features: sse (or at least avx2) is incompatible with soft-float ABI</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158515">Make let-else respect macro_rules expr metavariable grouping</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160441">PowerPC inline ASM: Fix scalar floats being in the wrong vector lane on little endian</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160436">stabilize <code>Box::take</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160745">make closures act like MaybeDangling</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160668">enable next solver by default in orphanck</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/154992">Error on projection of dyn noncompat type in old trait solver</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/155942">Stabilize <code>-Zprofile-sample-use</code></a></li>
</ul>


<a class="toclink" href="https://this-week-in-rust.org/atom.xml#compiler-team-mcps-only"></a><a href="https://github.com/rust-lang/compiler-team/issues?q=label%3Amajor-change%20label%3Afinal-comment-period%20state%3Aopen">Compiler Team</a> <a href="https://forge.rust-lang.org/compiler/mcp.html">(MCPs only)</a>
<ul>
<li><a href="https://github.com/rust-lang/compiler-team/issues/1029">Stop using dlltool for generating import libraries on MinGW</a></li>
<li><a href="https://github.com/rust-lang/compiler-team/issues/1022">Promote riscv64a23-unknown-linux-gnu to Tier 2 with host tools</a></li>
<li><a href="https://github.com/rust-lang/compiler-team/issues/1020">Drop tier 2 <code>i686-pc-windows-gnu</code> host tools</a></li>
</ul>






<a class="toclink" href="https://this-week-in-rust.org/atom.xml#leadership-council"></a><a href="https://github.com/rust-lang/leadership-council/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen">Leadership Council</a>
<ul>
<li><a href="https://github.com/rust-lang/leadership-council/issues/318">Allocate more funds for the Funding team in 2026</a></li>
<li><a href="https://github.com/rust-lang/leadership-council/issues/316">Allocate more funds to 2026 travel budget</a></li>
</ul>
<p><em>No Items entered Final Comment Period this week for
<a href="https://github.com/rust-lang/rfcs/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen">Rust RFCs</a>,
<a href="https://github.com/rust-lang/reference/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Language Reference</a>,
<a href="https://github.com/rust-lang/cargo/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Cargo</a>,
<a href="https://github.com/rust-lang/lang-team/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Language Team</a> or
<a href="https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Unsafe Code Guidelines</a>.</em>
Let us know if you would like your PRs, Tracking Issues or RFCs to be tracked as a part of this list.</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#new-and-updated-rfcs"></a><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></h5>
<ul>
<li><a href="https://github.com/rust-lang/rfcs/pull/3993">RFC: Support External Linkers</a></li>
</ul>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#upcoming-events">Upcoming Events</a></h4>
<p>Rusty Events between 2026-08-12 - 2026-09-09 🦀</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#virtual">Virtual</a></h5>
<ul>
<li>2026-08-13 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/rust-berlin">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/313345333/"><strong>Rust Hack and Learn</strong></a></li>
</ul>
</li>
<li>2026-08-13 | Virtual (Nürnberg, DE) | <a href="https://www.meetup.com/rust-noris">Rust Nuremberg</a><ul>
<li><a href="https://www.meetup.com/rust-noris/events/315619609/"><strong>Rust Nürnberg online</strong></a></li>
</ul>
</li>
<li>2026-08-14 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/f2hnzrug"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-16 | Virtual (Bangalore, IN) | <a href="https://discord.com/invite/pvYY69PvyS">Embedded Rust</a><ul>
<li><a href="https://discord.gg/tpsNpDHC?event=1536322186829242389"><strong>Silicon Sundays #2</strong></a></li>
</ul>
</li>
<li>2026-08-18 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc">Rust DC</a><ul>
<li><a href="https://www.meetup.com/rustdc/events/315604176/"><strong>Mid-month Rustful</strong></a></li>
</ul>
</li>
<li>2026-08-19 | Hybrid (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust">Vancouver Rust</a><ul>
<li><a href="https://www.meetup.com/vancouver-rust/events/314105333/"><strong>Dealing with Dependencies</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Hybrid (Seattle, WA, US) | <a href="https://www.meetup.com/join-srug">Seattle Rust User Group</a><ul>
<li><a href="https://www.meetup.com/seattle-rust-user-group/events/314520814/"><strong>August, 2026 SRUG (Seattle Rust User Group) Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Virtual (Charlottesville, VA, US) | <a href="https://www.meetup.com/charlottesville-rust-meetup">Charlottesville Rust Meetup</a><ul>
<li><a href="https://www.meetup.com/charlottesville-rust-meetup/events/315733791/"><strong>Tock OS Part #5 — Wireless Communication with the IEEE 802.15.4 protocol</strong></a></li>
</ul>
</li>
<li>2026-08-21 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/1bm27cah"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-25 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/310254775/"><strong>Fourth Tuesday</strong></a></li>
</ul>
</li>
<li>2026-08-27 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/rust-berlin/events/">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/313345334/"><strong>Rust Hack and Learn</strong></a></li>
</ul>
</li>
<li>2026-08-28 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/arkkrcj5"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-31 | Virtual (Global) | <a href="https://luma.com/rust-maven">Rust Maven</a><ul>
<li><a href="https://luma.com/nwfmsdtf"><strong>Workshop: Add tests to an open source Rust project</strong></a></li>
</ul>
</li>
<li>2026-09-01 | Virtual (Global) | <a href="https://luma.com/rust-maven">Rust Maven</a><ul>
<li><a href="https://luma.com/d9w26vav"><strong>Tauri: Cross-Platform desktop applications with Rust and web technologies</strong></a></li>
</ul>
</li>
<li>2026-09-02 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs/events/">Indy Rust</a><ul>
<li><a href="https://www.meetup.com/indyrs/events/wqzhftyjcmbdb/"><strong>Indy.rs - with Social Distancing</strong></a></li>
</ul>
</li>
<li>2026-09-04 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/sqf4ux01"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-09-08 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust/events/">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/310254774/"><strong>Second Tuesday</strong></a></li>
</ul>
</li>
<li>2026-09-08 | Virtual (London, UK) | <a href="https://www.meetup.com/women-in-rust/events/">Women in Rust</a><ul>
<li><a href="https://www.meetup.com/women-in-rust/events/315859305/"><strong>👋 Community Catch Up</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#africa">Africa</a></h5>
<ul>
<li>2026-09-08 | Johannesburg, ZA | <a href="https://www.meetup.com/johannesburg-rust-meetup/events/">Johannesburg Rust Meetup</a><ul>
<li><a href="https://www.meetup.com/johannesburg-rust-meetup/events/315750593/"><strong>Rust's extended standard library</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#asia">Asia</a></h5>
<ul>
<li>2026-08-22 | Bangalore, IN | <a href="https://hasgeek.com/rustbangalore">Rust Bangalore</a><ul>
<li><a href="https://hasgeek.com/rustbangalore/august-2026-rustacean-meetup/"><strong>August 2026 Rustacean Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-22 | Delhi, IN | <a href="https://www.meetup.com/rustdelhi">Rust Delhi</a><ul>
<li><a href="https://www.meetup.com/rustdelhi/events/315185336/"><strong>Rust Delhi X SciPy India Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-22 | Noida, IN | <a href="https://scipy.in/">SciPy India</a><ul>
<li><a href="https://scipy.in/sci-py-rs/"><strong>Scientific Computing in Rust and Python</strong></a></li>
</ul>
</li>
<li>2026-08-29 | Pune, IN | <a href="https://hasgeek.com/rustpune/">Rust Pune</a><ul>
<li><a href="https://hasgeek.com/rustpune/meetup-august-2026/"><strong>Rust Pune Meetup: August 2026</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#europe">Europe</a></h5>
<ul>
<li>2026-08-13 | Switzerland, CH | <a href="https://www.posttenebraslab.ch/wiki/events/start">PostTenebrasLab</a><ul>
<li><a href="https://www.posttenebraslab.ch/wiki/events/monthly_meeting/rust_meetup"><strong>Rust Meetup Geneva</strong></a></li>
</ul>
</li>
<li>2026-08-18 | Aarhus, DK | <a href="https://www.meetup.com/rust-aarhus">Rust Aarhus</a><ul>
<li><a href="https://www.meetup.com/rust-aarhus/events/315683629/"><strong>Hack Night: Trust but verify the LLM</strong></a></li>
</ul>
</li>
<li>2026-08-18 | Leipzig, DE | <a href="https://www.meetup.com/rust-modern-systems-programming-in-leipzig">Rust - Modern Systems Programming in Leipzig</a><ul>
<li><a href="https://www.meetup.com/rust-modern-systems-programming-in-leipzig/events/313816474/"><strong>Topic TBD</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Frankfurt, DE | <a href="https://www.meetup.com/rust-rhein-main">Rust Rhein-Main</a><ul>
<li><a href="https://www.meetup.com/rust-rhein-main/events/315855368/"><strong>Building an acoustic camera with egui and embassy</strong></a></li>
</ul>
</li>
<li>2026-08-27 | Manchester, UK | <a href="https://www.meetup.com/rust-manchester/events/">Rust Manchester</a><ul>
<li><a href="https://www.meetup.com/rust-manchester/events/315891530/"><strong>Rust Manchester August Talks</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#north-america">North America</a></h5>
<ul>
<li>2026-08-13 | Lehi, UT, US | <a href="https://www.meetup.com/utah-rust">Utah Rust</a><ul>
<li><a href="https://www.meetup.com/utah-rust/events/314696652/"><strong>Utah Rust August Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-13 | San Diego, CA, US | <a href="https://www.meetup.com/san-diego-rust">San Diego Rust</a><ul>
<li><a href="https://www.meetup.com/san-diego-rust/events/315601099/"><strong>San Diego Rust August Meetup - Back in person!</strong></a></li>
</ul>
</li>
<li>2026-08-15 | San Francisco, CA, US | <a href="https://flowercomputer.com/">Flower</a><ul>
<li><a href="https://partiful.com/e/juWAwRs3XMWP7s9wLNWK"><strong>BOG-A-THON 3</strong></a></li>
</ul>
</li>
<li>2026-08-18 | San Francisco, CA, US | <a href="https://www.meetup.com/san-francisco-rust-study-group">San Francisco Rust Study Group</a><ul>
<li><a href="https://www.meetup.com/san-francisco-rust-study-group/events/314997215/"><strong>Rust Hacking in Person</strong></a></li>
</ul>
</li>
<li>2026-08-19 | Hybrid (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust">Vancouver Rust</a><ul>
<li><a href="https://www.meetup.com/vancouver-rust/events/314105333/"><strong>Dealing with Dependencies</strong></a></li>
</ul>
</li>
<li>2026-08-19 | San Francisco, CA, US | <a href="https://luma.com/bayarearust">Bay Area Rust</a><ul>
<li><a href="https://luma.com/00f2s7q9"><strong>Bay Area Rust August Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Mountain View, CA, US | <a href="https://www.meetup.com/hackerdojo/events/">Hacker Dojo</a><ul>
<li><a href="https://www.meetup.com/hackerdojo/events/315929355/"><strong>RUST MEETUP at HACKER DOJO</strong></a></li>
</ul>
</li>
<li>2026-08-20 | New York, NY, US | <a href="https://www.meetup.com/rust-nyc/events/">Rust NYC</a><ul>
<li><a href="https://www.meetup.com/rust-nyc/events/316056830/"><strong>Rust NYC: 'Data Shapes Your Memory' and 'Rust in Peace'</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Hybrid (Seattle, WA, US) | <a href="https://www.meetup.com/join-srug">Seattle Rust User Group</a><ul>
<li><a href="https://www.meetup.com/seattle-rust-user-group/events/314520814/"><strong>August, 2026 SRUG (Seattle Rust User Group) Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-26 | Austin, TX, US | <a href="https://www.meetup.com/rust-atx">Rust ATX</a><ul>
<li><a href="https://www.meetup.com/rust-atx/events/315171660/"><strong>Rust Lunch - Fareground</strong></a></li>
</ul>
</li>
<li>2026-08-26 | Los Angeles, CA, US | <a href="https://www.meetup.com/rust-los-angeles/events/">Rust Los Angeles</a><ul>
<li><a href="https://www.meetup.com/rust-los-angeles/events/315963062/"><strong>Rust LA August! Rust in Quantum Computing</strong></a></li>
</ul>
</li>
<li>2026-08-27 | Atlanta, GA, US | <a href="https://www.meetup.com/rust-atl/events/">Rust Atlanta</a><ul>
<li><a href="https://www.meetup.com/rust-atl/events/313539331/"><strong>Rust-Atl</strong></a></li>
</ul>
</li>
<li>2026-09-03 | Saint Louis, MO, US | <a href="https://www.meetup.com/stl-rust/events/">STL Rust</a><ul>
<li><a href="https://www.meetup.com/stl-rust/events/315603673/"><strong>Cryptography + Quantum Computers</strong></a></li>
</ul>
</li>
<li>2026-09-08 | Montreal, QC, CA | <a href="https://rustfoundation.org/">Rust Foundation</a><ul>
<li><a href="https://rustfoundation.org/event/rust-teams-health-summit/"><strong>Rust Teams Health Summit</strong></a></li>
</ul>
</li>
<li>2026-09-08 - 2026-09-11 | Montreal, QC, CA | <a href="https://rustconf.com/">RustConf 2026</a><ul>
<li><a href="https://rustconf.com/schedule/"><strong>RustConf 2026, Hosted by the Rust Foundation</strong></a></li>
</ul>
</li>
<li>2026-09-09 | Montreal, QC, CA | <a href="https://www.meetup.com/women-in-rust/events/">Women in Rust</a><ul>
<li><a href="https://www.meetup.com/women-in-rust/events/315773005/"><strong>RustConf Coffee Break Meetup</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#oceania">Oceania</a></h5>
<ul>
<li>2026-08-27 | Melbourne, AU | <a href="https://luma.com/rustmelbourne">Rust Melbourne</a><ul>
<li><a href="https://luma.com/d0rndgyv"><strong>Rust Melbourne Meetup</strong></a></li>
</ul>
</li>
</ul>
<p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get
it mentioned here. Please remember to add a link to the event too.
Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#jobs">Jobs</a></h4>
<p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/1ttbtf5/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p>
<h3><a class="toclink" href="https://this-week-in-rust.org/atom.xml#quote-of-the-week">Quote of the Week</a></h3>
<blockquote>
<p>The AI discussion was already put to bed as off topic and derailing. Do not summon the Mods so carelessly, as they are wroth, and filled with cruel vengeance.</p>
</blockquote>
<p>– <a href="https://users.rust-lang.org/t/rust-being-non-standard-affects-compilers/141600/38">Simon Buchan on rust-users</a></p>
<p>Thanks to <a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328/1788">Jonas Fassbender</a> for the suggestion!</p>
<p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p>
<p>This Week in Rust is edited by:</p>
<ul>
<li><a href="https://github.com/nellshamrell">nellshamrell</a></li>
<li><a href="https://github.com/llogiq">llogiq</a></li>
<li><a href="https://github.com/ericseppanen">ericseppanen</a></li>
<li><a href="https://github.com/extrawurst">extrawurst</a></li>
<li><a href="https://github.com/U007D">U007D</a></li>
<li><a href="https://github.com/mariannegoldin">mariannegoldin</a></li>
<li><a href="https://github.com/bdillo">bdillo</a></li>
<li><a href="https://github.com/opeolluwa">opeolluwa</a></li>
<li><a href="https://github.com/bnchi">bnchi</a></li>
<li><a href="https://github.com/KannanPalani57">KannanPalani57</a></li>
<li><a href="https://github.com/tzilist">tzilist</a></li>
</ul>
<p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p>
<p><small><a href="https://www.reddit.com/r/rust/comments/1vn1ttk/this_week_in_rust_664/">Discuss on r/rust</a></small></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Ludovic Hirlimann: 20+ years of running "alpha quality" browser as my main web browser]]></title>
<description><![CDATA[ I have been accessing, using the internet since probably around 1991, using my dad's academic account and then schools and then home. I've used the internet before the web existed, sending emails, downloading freeware and sharewares from "huge" ftp repository. Sharing ftp site, using Usenet to f...]]></description>
<link>https://tsecurity.de/de/3713872/tools/ludovic-hirlimann-20-years-of-running-alpha-quality-browser-as-my-main-web-browser/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3713872/tools/ludovic-hirlimann-20-years-of-running-alpha-quality-browser-as-my-main-web-browser/</guid>
<pubDate>Tue, 11 Aug 2026 00:59:38 +0200</pubDate>
<content:encoded><![CDATA[<p> I have been accessing, using the internet since probably around 1991, using my dad's academic account and then schools and then home. I've used the internet before the web existed, sending emails, downloading freeware and sharewares from "huge" ftp repository. Sharing ftp site, using Usenet to find more and share more. This was a time you had to buy Ethernet <a href="https://en.wikipedia.org/wiki/NuBus">NuBus</a> card and install both Ethernet drivers and TCP/IP ones.</p><p>Then one day something called NCSA Mosaic came into the picture - this changed the way I consumed 'the network'. After a while some friends showed me Netscape, and mosaic faded away. I've used Netscape on Mac, Windows 3.11, NT, on <a href="https://en.wikipedia.org/wiki/Workstation">workstations</a> running Unix (hello Dec Alpha).</p><p>At the time my gig was either running OS/2, and Linux Slackware on my Pentium machine. I then got into the Beos world, and that was one OS that Netscape didn't ship binaries for. Microsoft had started pushing Internet explorer (IE). I was starting to work and *had* to use Windows. I came up with the idea of using Mozilla at work in order to find bugs that would later be fixed when I'd use it home on my favorite OS.</p><p>So I started using Mozilla builds for windows, and then following planet and mozilla.org to be aware of the process. I would now and then file bugzilla issues, often to discover they've been filled already :-) I clearly remember the day tabs were introduced. I walked around the room I was working in showing the great new feature to my colleagues that were using Mozilla. There were no formal releases, at the time CI-CD didn't exist completely yet, so you could keep the same version for a day or for a week depending on how broken the tree was</p><p> </p><div class="separator"></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL8rWGVc58B78xXXRi4p5iP1HxIdpnLO7ertu6xFNsQ0Oz4Cn_d_5YHgbSaC7nOrESvc0jn27QLSu4Fog5duJipEkNwIStmO_-kOT8eT_CWrZVia5O0PBGY_IQ2C2QkSILqPwyqkjiEk4l38AJ4ctgkexHu1Y_rm1B_zjJEb0nnix9SQlNxUNr/s1132/tbox-tidybox.png"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL8rWGVc58B78xXXRi4p5iP1HxIdpnLO7ertu6xFNsQ0Oz4Cn_d_5YHgbSaC7nOrESvc0jn27QLSu4Fog5duJipEkNwIStmO_-kOT8eT_CWrZVia5O0PBGY_IQ2C2QkSILqPwyqkjiEk4l38AJ4ctgkexHu1Y_rm1B_zjJEb0nnix9SQlNxUNr/s320/tbox-tidybox.png" width="320"></a></div>Then I continued using builds until updates became available, and I choose to use the nightly channel. At that time my motivation had changed, I had moved from dead BeOS to NeXTStep+1 aka Mac OS X. There was no way for me to help My then browser of choice <a href="https://caminobrowser.org/">Camino</a> at work. Mac OS X was way less popular in the tech industry that it is now.<p></p><p>The web landscape was dominated by <a href="https://en.wikipedia.org/wiki/Internet_Explorer">IE</a> , the mac version was unfortunately different meaning that using it made a bunch of websites unusable. </p><p>When Firefox got out, Camino started dying and I switched boats.</p><p>I then got employed by Mozillamessaging and used both Thunderbird and Firefox nightlies. I was the QA lead and there were no way I could test all the software and hardware combination used by our users. So crowd testing was very valuable to me.  At this point I had stopped reporting issues and the only thing I was reporting were crashes. </p><p>Since 2010 a bunch of Chrome related browsers have started taking the web over, a bit like in 2006 when Microsoft was running the show, instead now google is.  I currently run 2 versions of Firefox, nightly for personal stuff and release for work related ones. I occasionally have to fire a chrome related browser because testing with Ff from the vendors is not being done (I'm looking at DocuSign and FoundryVtt ).</p><p>So running nightly software has not been a burden at all, because there are a few crashes here and there, but I always submit, so the stability team at Mozilla can investigate. The idea is that if it crashes on me, it won't crash on my Dad's computer because he runs releases. Once or twice in the course of those 20 years did I have to either reinstall or create a new profile. That's how stable nightly has been for me.</p><p>I'm annoyed at some of the decision Mozilla makes, but again they are the most independent browser maker out there with a big enough team to deal with the <a href="https://ludovic.hirlimann.net/2026/01/are-mozillas-fork-any-good.html">development surface of a browser</a>. Hence, for some forseable future I'll be running nightlies in hopes of keeping the web open. I'm lurking at Servo and following it's development, reporting issues there because I see it has an alternative to Firefox, but it's far from being ready yet.</p><p>I'd encourage some of my readers to try/use <a href="https://www.firefox.com/en-US/channel/desktop/?redirect_source=mozilla-org#nightly">Nightly</a>. If you choose to do so, send in crash reports and enable telemetry.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Niko Matsakis: Cylic trait implementations: motivation]]></title>
<description><![CDATA[Lately I’ve been thinking about cyclic trait implementations. This is a problem that I’ve been trying to understand for years and years and I finally feel like I’m geting somewhere. I’m going to try to write out a series of blog posts documenting those explorations and, hopefully, culminating in ...]]></description>
<link>https://tsecurity.de/de/3713871/tools/niko-matsakis-cylic-trait-implementations-motivation/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3713871/tools/niko-matsakis-cylic-trait-implementations-motivation/</guid>
<pubDate>Tue, 11 Aug 2026 00:59:38 +0200</pubDate>
<content:encoded><![CDATA[<p>Lately I’ve been thinking about cyclic trait implementations. This is a problem that I’ve been trying to understand for years and years and I <em>finally</em> feel like I’m geting somewhere. I’m going to try to write out a series of blog posts documenting those explorations and, hopefully, culminating in a design that could be RFC’d. In this first post, I want to talk about one of the interesting questions, what I am going to call “internal” vs “external” proofs. I know that this material can seem abstract, so I’m going to try and connect it to “real Rust” as much as possible! This particular blog post is an introduction, explaining the general problem and giving some motivation for why we care.</p>
<h3>What <em>are</em> cyclic trait implementations?</h3>
<p>Right now in Rust we require most traits to have <em>non-cyclic</em>, or <em>inductive</em>, implementations. To explain what I mean, let’s consider this trait:</p>
<div class="highlight"><pre class="chroma" tabindex="0"><code class="language-rust"><span class="line"><span class="cl"><span class="k">trait</span><span class="w"> </span><span class="n">Dump</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">fn</span> <span class="nf">dump</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>Now imagine that we have an impl of this for <code>i32</code>:</p>
<div class="highlight"><pre class="chroma" tabindex="0"><code class="language-rust"><span class="line"><span class="cl"><span class="c1">// Impl I
</span></span></span><span class="line"><span class="cl"><span class="k">impl</span><span class="w"> </span><span class="n">Dump</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="kt">i32</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">fn</span> <span class="nf">dump</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="fm">println!</span><span class="p">(</span><span class="s">"</span><span class="si">{self}</span><span class="s">"</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>A simple impl for <code>Rc&lt;T&gt;</code> and `Option:</p>
<div class="highlight"><pre class="chroma" tabindex="0"><code class="language-rust"><span class="line"><span class="cl"><span class="c1">// Impl RC
</span></span></span><span class="line"><span class="cl"><span class="k">impl</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="n">Dump</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">Rc</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">where</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">T</span>: <span class="nc">Dump</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="k">fn</span> <span class="nf">dump</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">		</span><span class="n">T</span>::<span class="n">dump</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c1">// Impl Opt
</span></span></span><span class="line"><span class="cl"><span class="k">impl</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="n">Dump</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="nb">Option</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">where</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">T</span>: <span class="nc">Dump</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="k">fn</span> <span class="nf">dump</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">		</span><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">			</span><span class="n">T</span>::<span class="n">dump</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">		</span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>and finally a recursive <code>List</code> type that has an impl as well:</p>
<div class="highlight"><pre class="chroma" tabindex="0"><code class="language-rust"><span class="line"><span class="cl"><span class="k">struct</span> <span class="nc">List</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">value</span>: <span class="nc">Rc</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">next</span>: <span class="nb">Option</span><span class="o">&lt;</span><span class="n">Rc</span><span class="o">&lt;</span><span class="n">List</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;&gt;&gt;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c1">// Impl L
</span></span></span><span class="line"><span class="cl"><span class="k">impl</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="n">Dump</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">List</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">where</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">T</span>: <span class="nc">Dump</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">fn</span> <span class="nf">dump</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">		</span><span class="n">Dump</span>::<span class="n">dump</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">.</span><span class="n">value</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">       </span><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="bp">self</span><span class="p">.</span><span class="n">next</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">			</span><span class="n">Dump</span>::<span class="n">dump</span><span class="p">(</span><span class="n">n</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">		</span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>If I try to show that <code>List&lt;i32&gt;: Debug</code>, I do that by</p>
<ul>
<li>Applying “impl L” to show that <code>List&lt;i32&gt;: Debug</code> if <code>i32: Debug</code>
<ul>
<li>Then applying “impl I” to show that <code>i32: Debug</code></li>
</ul>
</li>
</ul>
<p>There’s no <em>cycle</em> here – that is, I didn’t have to use impl L to show that impl L is valid.</p>
<h3>Cyclic logic sounds bad, but it can be exactly what you want</h3>
<p>Now, when I said that “the impl L didn’t have to use the impl L to show that it is valid” that might not have sounded suspicious to you. In fact, it’s a pretty natural idea. After all, generally when you try to establish a logical argument, you aren’t allowed to use cyclic reasoning. That is, you can’t say: I know that Niko likes Rust because Niko lists Rust. So, in the same sense, it seems natural that I should not be able to say “I know that <code>List&lt;i32&gt;</code> implements <code>Dump</code> because <code>List&lt;i32&gt;</code> implements <code>Dump</code>”.</p>
<p>But actually, it would sometimes be really useful to say <em>exactly</em> that. One example is so-called “perfect derive”. In our <code>Dump</code> impl above, we had one where-clause, <code>T: Dump</code>. And if you were to create a custom derive for <code>Dump</code> and write <code>#[derive(Dump)]</code>, the impl I showed is typically exactly what you would get. But it’s not necessarily what you <em>want</em>. Consider what you get with <code>#[derive(Clone)]</code>:</p>
<div class="highlight"><pre class="chroma" tabindex="0"><code class="language-rust"><span class="line"><span class="cl"><span class="c1">// Impl LC1
</span></span></span><span class="line"><span class="cl"><span class="k">impl</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="nb">Clone</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">List</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">where</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">T</span>: <span class="nb">Clone</span><span class="p">,</span><span class="w"> </span><span class="c1">// &lt;-- generated but not really required!
</span></span></span><span class="line"><span class="cl"><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">fn</span> <span class="nf">dump</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">		</span><span class="n">List</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">			</span><span class="n">value</span>: <span class="nb">Clone</span>::<span class="n">clone</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">.</span><span class="n">value</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">			</span><span class="n">next</span>: <span class="nb">Clone</span>::<span class="n">clone</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">.</span><span class="n">next</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">		</span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>Here, the derive is going to create an impl that requires <code>T: Clone</code>. But if you look closely, you’ll see that all the fields only use <code>Rc&lt;T&gt;</code>, so in fact, we should be able to clone a <code>List</code> even without <code>T: Clone</code>! But how is the compiler to know this?</p>
<p>You might think that the compiler could do some super smarty-pants analysis on the fields to figure it out. And, in a way, it can: that is what cyclic trait solving is all about. The thing is, while the <em>compiler</em> can do that, the <em>derive</em> cannot – the derive doesn’t have access to the definitions of other types and so forth, and clearly we would need to know things about <code>Option</code> and <code>Rc</code> to figure out whether <code>T: Clone</code> is required here.</p>
<p>But what we <em>could</em> do is to generate a different impl. Instead of adding <code>T: Clone</code> for each type parameter, we could add a where-caluse for each field type. This makes sense: after all, we are just going to be calling <code>Clone</code> on every field, so it’s quite logical to say that the impl is valid if every field is cloneable:</p>
<div class="highlight"><pre class="chroma" tabindex="0"><code class="language-rust"><span class="line"><span class="cl"><span class="c1">// Impl LC2
</span></span></span><span class="line"><span class="cl"><span class="k">impl</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="nb">Clone</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">List</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">where</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">Rc</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span>: <span class="nb">Clone</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nb">Option</span><span class="o">&lt;</span><span class="n">Rc</span><span class="o">&lt;</span><span class="n">List</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;&gt;&gt;</span>: <span class="nb">Clone</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c1">// .. as above ..
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>Under <em>this</em> formulation, we can see that all we have to be able to do is to clone an <code>Rc&lt;_&gt;</code> and clone an <code>Option&lt;Rc&lt;_&gt;&gt;</code>, neither of which require that <code>T: Clone</code>.</p>
<h3>This idea is called <strong>perfect derive</strong></h3>
<p>We call this idea [perfect derive][] and it’s been a goal for a while. The thing is, cyclic reasoning <em>is</em> tricky to get right. The <code>Clone</code> example is actually an easy one: that one doesn’t really require cyclic reasoning:</p>
<ul>
<li>To show that <code>List&lt;i32&gt;: Clone</code> we have to show that…
<ul>
<li><code>Rc&lt;i32&gt;: Clone</code>, which is easy because <code>impl&lt;T&gt; Clone for Rc&lt;T&gt;</code> doesn’t have any where-clauses<sup><a class="footnote-ref" href="https://smallcultfollowing.com/babysteps/atom.xml#fn:1">1</a></sup></li>
<li><code>Option&lt;Rc&lt;List&lt;i32&gt;&gt;&gt;: Clone</code> uses the <code>impl&lt;T&gt; Clone for Option&lt;T&gt; where T: Clone</code> impl which requires…
<ul>
<li><code>Rc&lt;List&lt;i32&gt;&gt;: Clone</code>, which is again easy</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>But it’s not so easy for <code>Dump</code></h3>
<p>But if we use that same “cyclic derive pattern” to generate our <code>Dump</code> impl, things don’t work out so well. Instead of just a <code>T: Dump</code> bound, our <code>Dump</code> impl now has two bounds:</p>
<div class="highlight"><pre class="chroma" tabindex="0"><code class="language-rust"><span class="line"><span class="cl"><span class="c1">// impl L1
</span></span></span><span class="line"><span class="cl"><span class="k">impl</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="n">Dump</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">List</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">where</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">Rc</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span>: <span class="nc">Dump</span><span class="p">,</span><span class="w"> </span><span class="c1">// &lt;-- Used to be `T: Dump`
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nb">Option</span><span class="o">&lt;</span><span class="n">Rc</span><span class="o">&lt;</span><span class="n">List</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;&gt;&gt;</span><span class="p">,</span><span class="w"> </span><span class="c1">// &lt;-- This one is new!
</span></span></span><span class="line"><span class="cl"><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">fn</span> <span class="nf">dump</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="o">..</span><span class="p">.}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>Now imagine we try to show <code>List&lt;i32&gt;: Dump</code>. We begin by applying impl L1, which requires us to show that its where clauses hold:</p>
<ul>
<li>To show <code>List&lt;i32&gt;: Dump</code> we use impl L1, which has two where-clauses:
<ul>
<li><code>Rc&lt;i32&gt;: Dump</code>, this one is easy because the <code>Rc</code> impl requires that <code>i32: Dump</code> which is true.</li>
<li>But <code>Option&lt;Rc&lt;List&lt;i32&gt;&gt;&gt;: Dump</code> is tricky. The <code>Option</code> impl requires that…
<ul>
<li>We need to prove <code>Rc&lt;List&lt;i32&gt;&gt;: Dump</code>, and then the <code>Rc</code> impl requires that…
<ul>
<li>We need to prove <code>List&lt;i32&gt;: Dump</code>, but that is what we started with! That’s cyclic logic!</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Ugh. Something’s tricky here!</p>
<h3>We can’t just accept any old cycle because of supertraits</h3>
<p>Now, maybe you think we can just accept any cycles. And for these examples, it would be fine: but it’s not correct if you consider <em>supertraits</em>. Consider this trait and impl pair:</p>
<div class="highlight"><pre class="chroma" tabindex="0"><code class="language-rust"><span class="line"><span class="cl"><span class="k">trait</span><span class="w"> </span><span class="n">Magic</span>: <span class="nb">Copy</span> <span class="p">{</span><span class="w"> </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c1">// Impl M
</span></span></span><span class="line"><span class="cl"><span class="k">impl</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="n">Magic</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">T</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">where</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">T</span>: <span class="nc">Magic</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">{}</span><span class="w">
</span></span></span></code></pre></div><p>If you are naive, this weird trait-impl pair can be used to prove that <em>any</em> type is <code>Copy</code>, regardless of whether it has a <code>Copy</code> impl. For example:</p>
<ul>
<li>Say we want to prove that <code>String: Copy</code>. We observe that if a type implements <code>Magic</code>, it must implement <code>Copy</code>, so…
<ul>
<li>We begin by proving <code>String: Magic</code>. We use the impl M, which requires
<ul>
<li>that we show <code>String: Magic</code>, which is a cycle, so we accept it.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Uh oh, now we did something wrong. We proved that <code>String: Copy</code> even though there is no <code>Copy</code> impl. Something is fishy.</p>
<p>Now clearly we can all see the problem here – the implementation of <code>Magic</code> didn’t really add any information. It was just a tautology, saying that <code>T: Magic</code> if <code>T: Magic</code>. It’s not <em>wrong</em>, but implementing <code>Magic</code> was supposed to tell us more than just the fact that there is an impl of <code>Magic</code>, it was supposed to tell us also that the supertrait <code>Copy</code> is implemented. And that’s not true here.</p>
<p>But if you think about it, it’s hard to decide why we should reject impl M but accept the impl L1 of <code>Dump</code> for <code>List&lt;T&gt;</code>. They both wind up with a cyclic proof. So what’s the difference? This is the question we’ll be exploring over the next few blog posts.</p>
<h3>Soundness for traits</h3>
<p>This gets at an interesting question: what does it mean for the trait system to be <em>sound</em>. This seems obvious but actually it was a question I found kind of non-obvious for a long time.</p>
<p>We’ve found two satisfactory answers to that question. One of them involves converting to dictionary-passing style. <a href="https://nadrieril.github.io/blog/2026/03/22/what-if-traits-carried-values.html">Nadri explained that in a blog post</a>. I think that’s a great post to read. I’m going to give another definition here that doesn’t require converting to a dependently typed program<sup><a class="footnote-ref" href="https://smallcultfollowing.com/babysteps/atom.xml#fn:2">2</a></sup></p>
<p>My rough definition is this<sup><a class="footnote-ref" href="https://smallcultfollowing.com/babysteps/atom.xml#fn:3">3</a></sup>: the trait system is sound if, whenever it accepts some program P, that program cannot have a function that believes some <code>Trait</code> holds for the <code>T</code>, but there is no impl of <code>Trait</code> that can be used. So in the case of <code>Magic</code> and <code>Copy</code>, it’s easy to write a program that shows simple cyclic trait solving is unsound:</p>
<div class="highlight"><pre class="chroma" tabindex="0"><code class="language-rust"><span class="line"><span class="cl"><span class="k">trait</span><span class="w"> </span><span class="n">Magic</span>: <span class="nb">Copy</span> <span class="p">{}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">impl</span><span class="o">&lt;</span><span class="n">T</span>: <span class="nc">Magic</span><span class="o">&gt;</span><span class="w"> </span><span class="n">Magic</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="p">{}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">fn</span> <span class="nf">is_copy</span><span class="o">&lt;</span><span class="n">T</span>: <span class="nb">Copy</span><span class="o">&gt;</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="c1">// this function believes `T: Copy`
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">fn</span> <span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="c1">// this can be called because we believe that
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="c1">// * `String: Magic` because
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="c1">//     * `String: Magic`, and we accept cycles.
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="c1">// And then `String: Magic` implies `String: Copy`.
</span></span></span><span class="line"><span class="cl"><span class="w">	</span><span class="n">is_copy</span>::<span class="o">&lt;</span><span class="nb">String</span><span class="o">&gt;</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>By my definition, any sound type/trait system must reject this program because, if it were to execute, then execution would reach <code>is_copy::&lt;String&gt;</code> and yet there is no<code> Copy</code> impl that is judged to ber applicable to <code>String</code>. Uh oh!</p>
<h3>Coming next</h3>
<p>As I promised, this post was mostly focused on “setting the scene”. My goal was to explain what the problem is that we are trying to solve – permitting “good cyclic impls” but forbidding bad ones. I didn’t spend a lot of time on the bad ones, but it turns out that there’s a wide variety of unsound things one can do, some of which the compiler currently gets wrong, others of which it would only get wrong if we started permitting cycles.</p>
<p>My motivation for getting into this work is a bit complicated. I want perfect derive. But it’s also a loose end in our trait semantics that I really want to see nailed down before we move onto other tasks. Having auto traits (e.g., <code>Send</code>) work differently from other traits is clearly a “smell”, and without a strong understanding of the logical underpinnings of our trait system it’s easy to get things wrong when we build extensions.</p>
<p>In the next few posts I’ll go a bit deeper into the exploration I and others have been doing. I’ll talk about some of the “false starts” we took along the way and why they don’t work, and then about some of the solutions that are under consideration. Working through this stuff has really helped me to broaden my understanding of various areas of logic. By the time we’re done, we’ll cover<sup><a class="footnote-ref" href="https://smallcultfollowing.com/babysteps/atom.xml#fn:4">4</a></sup> coinduction and productivity, modal logic and the later modality, and we’ll see how our techniques might even help us with resolving specialization<sup><a class="footnote-ref" href="https://smallcultfollowing.com/babysteps/atom.xml#fn:5">5</a></sup>.</p>
<p>I cited it earlier, but if you want to read other tasks on the same subject, I definitely recommend <a href="https://nadrieril.github.io/blog/2026/03/22/what-if-traits-carried-values.html">Nadri’s post on dictionary-passing style</a>.</p>
<div class="footnotes">
<hr>
<ol>
<li>
<p>Apart from the default <code>Sized</code> bound, I’m ignoring that here <a class="footnote-backref" href="https://smallcultfollowing.com/babysteps/atom.xml#fnref:1">↩︎</a></p>
</li>
<li>
<p>I have found that both the dictionary-passing interpretation and the logic approach I’m using are valuable. In the end, they’re more or less equivalent, which I guess shouldn’t be surprising if you’ve heard of the <a href="https://en.wikipedia.org/wiki/Curry%E2%80%93Howard_correspondence">Curry Howard Correspondence</a>, but I’ll talk about that later perhaps. <a class="footnote-backref" href="https://smallcultfollowing.com/babysteps/atom.xml#fnref:2">↩︎</a></p>
</li>
<li>
<p>I would like to, but haven’t, define a simplified version of Rust that includes trait solving and simple type checkoing and show that it cannot <a href="https://en.wikipedia.org/wiki/Type_safety#Definitions">“go wrong”</a>. <a class="footnote-backref" href="https://smallcultfollowing.com/babysteps/atom.xml#fnref:3">↩︎</a></p>
</li>
<li>
<p>In a shallow way, I’m no expert! <a class="footnote-backref" href="https://smallcultfollowing.com/babysteps/atom.xml#fnref:4">↩︎</a></p>
</li>
<li>
<p>Plot twist, bet you didn’t see that coming! I sure didn’t. <a class="footnote-backref" href="https://smallcultfollowing.com/babysteps/atom.xml#fnref:5">↩︎</a></p>
</li>
</ol>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: Firefox Profiler Deployment (August 10, 2026)]]></title>
<description><![CDATA[The latest version of the Firefox Profiler is now live! Check out the full changelog below to see what’s changed:
Highlights:

[fatadel] Improve discoverability of downloading a local profile (#6216)
[Nazım Can Altınova] Add the ability to apply source maps from the CLI (#6229)

Other Changes:

[...]]></description>
<link>https://tsecurity.de/de/3713870/tools/firefox-tooling-announcements-firefox-profiler-deployment-august-10-2026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3713870/tools/firefox-tooling-announcements-firefox-profiler-deployment-august-10-2026/</guid>
<pubDate>Tue, 11 Aug 2026 00:59:38 +0200</pubDate>
<content:encoded><![CDATA[<p>The latest version of the <a href="https://profiler.firefox.com/" rel="noopener nofollow ugc">Firefox Profiler</a> is now live! Check out the full changelog below to see what’s changed:</p>
<p><strong>Highlights:</strong></p>
<ul>
<li>[fatadel] Improve discoverability of downloading a local profile (<a href="https://github.com/firefox-devtools/profiler/pull/6216" rel="noopener nofollow ugc">#6216</a>)</li>
<li>[Nazım Can Altınova] Add the ability to apply source maps from the CLI (<a href="https://github.com/firefox-devtools/profiler/pull/6229" rel="noopener nofollow ugc">#6229</a>)</li>
</ul>
<p><strong>Other Changes:</strong></p>
<ul>
<li>[fatadel] Create the Network track from the timeline-network schema display location (<a href="https://github.com/firefox-devtools/profiler/pull/6224" rel="noopener nofollow ugc">#6224</a>)</li>
<li>[Markus Stange] Only call <code>getRawFrameTableBuilderWithExistingContents</code> once per symbolication batch. (<a href="https://github.com/firefox-devtools/profiler/pull/6233" rel="noopener nofollow ugc">#6233</a>)</li>
<li>[Nazım Can Altınova] Handle the cli daemon startup failures more gracefully with better errors (<a href="https://github.com/firefox-devtools/profiler/pull/6241" rel="noopener nofollow ugc">#6241</a>)</li>
<li>[Nazım Can Altınova] Handle Text and Log marker payloads with their marker schema (<a href="https://github.com/firefox-devtools/profiler/pull/6247" rel="noopener nofollow ugc">#6247</a>)</li>
<li>[Nazım Can Altınova] Bump the Gecko profile version to make sure that the Text and Log marker changes are picked up in the frontends (<a href="https://github.com/firefox-devtools/profiler/pull/6252" rel="noopener nofollow ugc">#6252</a>)</li>
<li>[fatadel] Deactivate a menu button as soon as its panel is dismissed (<a href="https://github.com/firefox-devtools/profiler/pull/6251" rel="noopener nofollow ugc">#6251</a>)</li>
<li>[Nazım Can Altınova] <img alt=":clockwise_vertical_arrows:" class="emoji" height="20" src="https://emoji.discourse-cdn.com/twitter/clockwise_vertical_arrows.png?v=15" title=":clockwise_vertical_arrows:" width="20"> Sync: l10n → main (August 10, 2026) (<a href="https://github.com/firefox-devtools/profiler/pull/6253" rel="noopener nofollow ugc">#6253</a>)</li>
<li>[Nazım Can Altınova] Bump profiler-cli version to 0.8.0 (<a href="https://github.com/firefox-devtools/profiler/pull/6254" rel="noopener nofollow ugc">#6254</a>)</li>
</ul>
<p>Big thanks to our amazing localizers for making this release possible:</p>
<ul>
<li>de: Ger</li>
<li>de: Michael Köhler</li>
<li>el: George kitsoukakis</li>
<li>en-CA: chutten</li>
<li>en-CA: Saurabh</li>
<li>en-GB: Ian Neal</li>
<li>es-CL: ravmn</li>
<li>fy-NL, nl: Fjoerfoks</li>
<li>fr: Théo Chevalier</li>
<li>fy-NL: Fjoerfoks</li>
<li>ia: Melo46</li>
<li>it: Francesco Lodolo [:flod]</li>
<li>nl: Fjoerfoks</li>
<li>ru: michellemelsspam</li>
<li>ru: Valery Ledovskoy</li>
<li>tr: giray</li>
<li>tr: Selim Şumlu</li>
<li>zh-TW: Pin-guang Chen</li>
</ul>
<p>Find out more about the Firefox Profiler on <a href="https://profiler.firefox.com/" rel="noopener nofollow ugc">profiler.firefox.com</a>! If you have any questions, join the discussion on our <a href="https://chat.mozilla.org/#/room/%23profiler:mozilla.org" rel="noopener nofollow ugc">Matrix channel</a>!</p>
            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://discourse.mozilla.org/t/firefox-profiler-deployment-august-10-2026/149143">Read full topic</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Security Blog: Updated GPG key for signing Firefox and Thunderbird Releases]]></title>
<description><![CDATA[Today, we moved to a new GPG signing subkey used to sign certain Firefox and Thunderbird artifacts (namely Linux tarballs, RPM packages, checksums files) after an unencrypted copy of the previous subkey was inadvertently committed to a private GitHub repository.
Our review of available audit reco...]]></description>
<link>https://tsecurity.de/de/3713869/tools/mozilla-security-blog-updated-gpg-key-for-signing-firefox-and-thunderbird-releases/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3713869/tools/mozilla-security-blog-updated-gpg-key-for-signing-firefox-and-thunderbird-releases/</guid>
<pubDate>Tue, 11 Aug 2026 00:59:38 +0200</pubDate>
<content:encoded><![CDATA[<p>Today, we moved to a new GPG signing subkey used to sign certain Firefox and Thunderbird artifacts (namely Linux tarballs, RPM packages, checksums files) after an unencrypted copy of the previous subkey was inadvertently committed to a private GitHub repository.</p>
<p>Our review of available audit records found no evidence that the key was accessed by an unauthorized party while it was present in the repository. Access to the repository was limited to a small group within Mozilla, all of whom already had authorized access to the key through other means.</p>
<p>We have revoked the previous signing key and added safeguards to prevent similar issues in the future.</p>
<p><strong>For most users, no action is required.</strong></p>
<p>There are two cases where you may need to take action:</p>
<ul>
<li>If you manually verify our GPG signatures, you will need to import the new signing key and the revocation for the old key.</li>
<li>If you use Firefox RPM packages, some manual intervention may be required. See the instructions below for details.</li>
</ul>
<p>Thunderbird does not provide official RPM packages, so there is no RPM-specific action required.</p>
<h3>RPM Users</h3>
<p>Different RPM package management tools deal with GPG key rotations and revocations differently. See the sections below for what action (if any) you need to take to ensure you continue to receive the latest Firefox updates.</p>
<h4>Fedora 43 and later</h4>
<p>No special action needed. During the next update, dnf will download the updated key and you just need to confirm the import. Make sure the shown fingerprint matches <code>827E 6586 0867 9618 CD34 9F93 678E 455D 7676 7AA3</code> before accepting.</p>
<h4>Fedora 42 and older, RHEL/Rocky/Almalinux</h4>
<p>Dnf on these releases cannot replace the key on its own. Updates will fail with “Import of the key didn’t help, wrong key?” or “The GPG keys listed for the mozilla repository are already installed but they are not correct for this package”. The old keys must be removed manually:</p>
<p><code>sudo rpm -e --allmatches gpg-pubkey-14f26682d0916cdd81e37b6d61b7b526d98f0353</code><br>
<code>sudo rpm --import https://packages.mozilla.org/rpm/firefox/signing-key.gpg</code><br>
<code>sudo dnf clean all</code></p>
<p>Important: Remove the previous signing key before importing the new one. If you run <code>rpm --import</code> while the previous key is still installed, the command may report success even though the key is not updated.</p>
<h4>openSUSE/SUSE based distributions</h4>
<p>Same as the previous section, zypper won’t replace the key on its own and it must be removed manually. Updates will fail with “Signature verification failed” or “NOKEY”. Use the following commands:</p>
<p><code>sudo rpm -e --allmatches gpg-pubkey-14f26682d0916cdd81e37b6d61b7b526d98f0353</code><br>
<code>sudo rpm --import https://packages.mozilla.org/rpm/firefox/signing-key.gpg</code><br>
<code>sudo zypper refresh</code></p>
<h3>New GPG Key Details</h3>
<p>The GPG fingerprint is <code>14F2 6682 D091 6CDD 81E3 7B6D 61B7 B526 D98F 0353</code>. The new signing subkey’s fingerprint is <code>827E 6586 0867 9618 CD34 9F93 678E 455D 7676 7AA3</code>, and it expires 2028-08-05.</p>
<p>The new public key and revocation of the previous one can be fetched from:</p>
<ul>
<li>KEY files of the latest Firefox Nightly (https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/)</li>
<li>keys.openpgp.org, or</li>
<li>inline below</li>
</ul>
<p>This can be used to validate releases signed with the new key. Due to the nature of GPG signing, releases signed with the previous key will no longer be verifiable after importing the revocation.</p>
<p><code>-----BEGIN PGP PUBLIC KEY BLOCK-----</code><br>
<code>mQINBFWpQAQBEAC+9wVlwGLy8ILCybLesuB3KkHHK+Yt1F1PJaI30X448ttGzxCz</code><br>
<code>PQpH6BoA73uzcTReVjfCFGvM4ij6qVV2SNaTxmNBrL1uVeEUsCuGduDUQMQYRGxR</code><br>
<code>tWq5rCH48LnltKPamPiEBzrgFL3i5bYEUHO7M0lATEknG7Iaz697K/ssHREZfuuc</code><br>
<code>B4GNxXMgswZ7GTZO3VBDVEw5GwU3sUvww93TwMC29lIPCux445AxZPKr5sOVEsEn</code><br>
<code>dUB2oDMsSAoS/dZcl8F4otqfR1pXg618cU06omvq5yguWLDRV327BLmezYK0prD3</code><br>
<code>P+7qwEp8MTVmxlbkrClS5j5pR47FrJGdyupNKqLzK+7hok5kBxhsdMsdTZLd4tVR</code><br>
<code>jXf04isVO3iFFf/GKuwscOi1+ZYeB3l3sAqgFUWnjbpbHxfslTmo7BgvmjZvAH5Z</code><br>
<code>asaewF3wA06biCDJdcSkC9GmFPmN5DS5/Dkjwfj8+dZAttuSKfmQQnypUPaJ2sBu</code><br>
<code>blnJ6INpvYgsEZjV6CFG1EiDJDPu2Zxap8ep0iRMbBBZnpfZTn7SKAcurDJptxin</code><br>
<code>CRclTcdOdi1iSZ35LZW0R2FKNnGL33u1IhxU9HRLw3XuljXCOZ84RLn6M+PBc1eZ</code><br>
<code>suv1TA+Mn111yD3uDv/u/edZ/xeJccF6bYcMvUgRRZh0sgZ0ZT4b0Q6YcQARAQAB</code><br>
<code>tC9Nb3ppbGxhIFNvZnR3YXJlIFJlbGVhc2VzIDxyZWxlYXNlQG1vemlsbGEuY29t</code><br>
<code>PokCOAQTAQIAIgUCValABAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ</code><br>
<code>Ybe1JtmPA1NQqg//Rr6/V7uLqrIwx0UFknyNJasRJZhUkYxdGsLD18zO0Na8Ve3Q</code><br>
<code>sYpOC3ojpqaFUzpqm6KNv8eXfd/Ku7j3WGr9kPkbjZNghvy6V5Lva4JkxO6LMxKk</code><br>
<code>JYqiqF2o1Gfda8NfcK08GFy4C0L8zNwlADvmdMo4382tmHNGbTTft7BeVaRrE9xW</code><br>
<code>9eGmGQ2jYOsjxb5MsadAdZUuK8IC95ZHlUDR3gH9KqhfbQWp5Bo924Kiv+f2JUzN</code><br>
<code>rrG98eOm1Qb8F9rePzZ2DOYRJyOe4p8Gpl+kojCXNntkJgcwJ1a1yRE6wy9RzpeB</code><br>
<code>lCeoQuLS92MNne+deQZUskTZFoYXUadf6vbdfqL0nuPCKdl9lhef1QNwE30IRymt</code><br>
<code>6fhJCFffFQjGdeMfSiCHgcI8ichQbrzhBCGGR3bAHan9c2EbQ+puqG3Aa0YjX6Db</code><br>
<code>GJjWOI6A61bqSPepLCMVaXqV2mZEIaZWdZkOHjnRrU6CJdXG/+D4m1YBZwYM60eJ</code><br>
<code>kNu4eMMwMFnRsHiWf7bhqKptwuk8HyIGp2o4j8iqrFRVJEbK/ctdhA3H1AlKug9f</code><br>
<code>NrfwCfqhNCSBju97V03U26j04JMn9nrZ2UEGbpty+8ONTb38WX5/oC61BgwV8Ki4</code><br>
<code>6Lwyb7fImUzz8jE83pjh7s3+NCKvvbH+VfT12f+V/fsphN3EwGwJPTC3fX2IRgQQ</code><br>
<code>EQIABgUCVaz/SwAKCRB2JUA9fw0VsVNkAKDjhUW5GyFNcyj9ot48v+lSh5GBIACf</code><br>
<code>Ten/Rpo5tf77Uq7445cVs80EK5CIRgQQEQIABgUCVa064wAKCRDDTldH4j3WdwW5</code><br>
<code>AKCVDRxKjb/XYqGhjBCKYhbQ4xJuOACfVIpzE3wGLC/cm9eUnSVnv+elQnKIXgQQ</code><br>
<code>EQgABgUCVgZXYwAKCRACWrAQaxfqHqzWAP9dzEHoZNwH5JYxotudv3FOotVThaQr</code><br>
<code>jnk+5StnObpxnAD9FmYyAyYGh4o7axeDCgmW1J89+1cZtDnFPKnBpGFMB4uIXgQQ</code><br>
<code>EQoABgUCVa0s/gAKCRDwqefc055FLpQGAP99Z2ISKW+7FYoKJ3vDrxTtfcbZEff7</code><br>
<code>8ufoinmAlZb2bQD/a2fOcprjWDal9Orfq7g6htkX3VISemg+SDQ/ig+b3uyJARwE</code><br>
<code>EAECAAYFAlWs/X4ACgkQs8WpWFCKQ/JrjAf7B+fGzEs8xfc010a6KZXcO1W4/Va0</code><br>
<code>Q+zcqF+DpQwK7b3S6oD5tCVKD9oFyDXkrlT6Tnwuu+slZwRDIyH6hI6tPb3G8Gsk</code><br>
<code>vjXMeL0IdgZsw1DSxN0pZ0Z9mxFq/UkC/6TmFA1IJmOWtFCH/1irQWqbDxPmWp+d</code><br>
<code>Xs2EhH8QzX1KQOE9v/YlsCdmTstMiHy3R8r7prsonpCa36zGheC/UNDpycKdT8JL</code><br>
<code>zeCFcIWXmA7SCTeJ0XCSuS68FOwfe7nn9oagQZZe/6gh5ecuCoW9HLBWpyIPqUCz</code><br>
<code>1CXSImLc6BbZYMpAetacarVPa6hiltNicxFE/A3T1F8ZjAcugPKBngUR/4kBHAQQ</code><br>
<code>AQIABgUCVa0XXAAKCRBlc4Lb/yURCkCYB/95w/9/0rpi+5xtoO2NR0KlqYVG5+NF</code><br>
<code>1r42XB6t7gVJ9UGF3meV+ekgDSzNrfroqxpzWmV1t3MRJeSMmVS25nC1hAZVQHKd</code><br>
<code>gX9xVxW3SSufX/jPstvo2U/X3k8q8PhLS6Ihk8YJC3ScjMiNMRpkITMeVdXsdQsY</code><br>
<code>WStiT48wlWK4gSNMCG5iovdGDTEKErHTIWJl/Wx5el1kvUwg1rKo9uRS2CS/lnlV</code><br>
<code>6YztDY0cBBOqXP6pXXiWBuVW39LJxsSHq13vpeQ/GHeDxAJ6Y+fPuaV3qBmGZ91o</code><br>
<code>1/HkxTABFPkISylkPo/2PCoo4Hu31MZ0jQWdihJ7gzf+B7/w6whS79eAiQEcBBAB</code><br>
<code>AgAGBQJVrWVaAAoJEOQyfGw+ApnAc7AH/0TKg3VR4IEB3NP2C7dX/72PWO0EOh8J</code><br>
<code>w67XDccRK0lXDILg/CujsYq9EzEofv2LmQFvCuCkoBFEcGas+J2vP3jsY/G5bjZp</code><br>
<code>XALHkAx7MKlOgsgfeVqMtwaHIoR+y9Hg12TjM7Gt970UBwTIqC8SG6Z1bVWxUdc+</code><br>
<code>7Zsn43Dq8z99saOUKD6HMyl9upbjAYwL28NRQtIrNiDZ5lEmDOLh+4hWblxjxWMX</code><br>
<code>AKjg6sucrNzKD2uKGe9XdB6IkYpdfrNGPtgcnXWdfaRNk16eGVzWDVI/9mkY/G+L</code><br>
<code>E40eK6oRyMf736CvlQjcv7JBVGTsj3W28phNLLU0UidYK/QmS3AVmBeJARwEEAEC</code><br>
<code>AAYFAlXBWXAACgkQiRc/lXxV+V6gKQf/d/KfgiYg0Z4dqO3g1p40sgLuxVplhpDk</code><br>
<code>J4yP5K2isdb6I7GJykVw+po6tUCfB7KeLWiZy0I3KJDU1Ikk+Jv3uGSRMT1riSpM</code><br>
<code>Ja2pVhh+jaamHIFj2o0mG9HmEAuGKktJH8s6Jax3SiPGODRhFO8suc7B8FpB7f5q</code><br>
<code>TUDK2J18MlnSK3NN1/zl6OdXScrISQ0cNyJ0RMgW5RSXC7wKzR89tfcDK1wInD8r</code><br>
<code>cOMHz6Va5g8ehq2XCPKvBAlgo8El17+4UaRLhS0suVz4THPsGASYzZVKIhQQBf+8</code><br>
<code>xDXd6zJ/UgkC4iBWHtLm5jvm6Xhsu04s28TmgiH4FKLsstAUFzbiQYkBHAQQAQIA</code><br>
<code>BgUCVdIa6gAKCRCtfLmfgki6D8xCB/9Q+rCTDQCbWQkRoSV77+kmIb+KVFTcgxfR</code><br>
<code>Z1L0bKL5YqI6HuCJLgU1ioTxq8W4g+SDv4s69/LIajYYZvSRNv0kGRzm2D4vpcnw</code><br>
<code>ymyYCJkzcZkuBeyR50S69+1cStbFb7jZMpyZ6rwnKdYOccDSMdaynJGt4rqiY+ra</code><br>
<code>DPF0H4LExx9a1JFh21Fd0MDc15vsoRZtrOkM8QaKD85hZ/AGOwlw+Kb3DEfjNGcv</code><br>
<code>nuNp54HfJc0Z5kwVYoOKUatBgjLpRRvl43lUGRaaCCMaNpNZXM20ZhrbTjXRlko8</code><br>
<code>QVMUXqE20sDNwv+dDa6G8nBkIGNIHeixrVrVPP7hH5JRMtjZbsWFiQEcBBABCAAG</code><br>
<code>BQJVrQFGAAoJEFbucY3ODhVLNDgH/izNHcsr1BRnV3yQ6T9sTJJ187BwF1hRLR+Y</code><br>
<code>3op+fJr+nQ9301XAqLqNbzEB91hRUi2Gb8LTZxxq0gahWzSqmdAE0ObXGGlrEmfj</code><br>
<code>FSSTFyQ1xRvzooYNZzTjN91XX1dERjyj9SOHBETsZrN01BZB1t3EgoDM7PCNTsX0</code><br>
<code>qC65unWvBDftnLdiJ6s3UC9sorMk8q3Zl6DacFw8QKSmJL1R0OPvXiSOZtGQK9Jg</code><br>
<code>YyHiXQE3MOP5SFSk61e1IawocYn32CXM+EkgtXK5q/thc8OdwsgLAJmGpVB3qd2K</code><br>
<code>9OaEOKCUV/V91a2P8hCx8MMV2sQgHcMB221wDIWbD5PTHNtCegaJARwEEAEIAAYF</code><br>
<code>AlWtIrEACgkQo9ZSFzt2Po+mXgf/dUPf6q+aDFoDjLIsfJH5QS8Nn/7frUUdElg8</code><br>
<code>PdGxtZ6SQep6uR5fgc+PwOElhUxa665WYtRJ459RWAYmbh2kkP/paGBf9nW0A2wS</code><br>
<code>koXyJNydJcanyjwHyqKUbBLsXJAvGFtbYRsbeXkEPM5CaKgRUwc8Ilzo9/53CZF/</code><br>
<code>avZK4FJX00lZq0/Z8dIY8jUEF64IbJgbaUe1gkuxu7zURgjVKK4bb4lLy/s3tRe0</code><br>
<code>00hrKVbFcaNoIZs+Vk/3A/TFdYHFY6I2JpLIeSSJd/Ywh6/YZfGkSHfzn87Dfkyr</code><br>
<code>gXKQMQ5JvQQgKbO6GPBZSygxWU7R2tNNAJKHSh0/PJ8J7yrqj4kBHAQQAQgABgUC</code><br>
<code>Va05AwAKCRD20Pdh3MzspCvWB/9DAEaNx5WF3ktmw6jP5cCv60HDwgsmJHusGyAo</code><br>
<code>53Gwjo4Fx6hv5QYQpTbO4af+4KpFGkex+bZniOJWpT+NJkhx55xbzA903MoZ9+dI</code><br>
<code>oCtG4K41kA2mMYSpR097yF3fwtuP70UgMZqiCmz/iKFzsrdhjE0KvBjptnYGEWk5</code><br>
<code>MMh5xlpzGom3LV/A+KAmEdPw+GCaj5H6qG3/PtWXz+RmjG0sRPycHaNJCWuLz4xM</code><br>
<code>xV28oAG53Gqc3cDes4Hpds4fPOa8+we7yKTK/2O3lfOUOvKncsoS3vHC/GNfGD86</code><br>
<code>RX/vz2TW4GMaLmn75xcAYT0MINIFBf/tXjN1BNrmvrGkkxnbiQEcBBABCgAGBQJV</code><br>
<code>rQlbAAoJEDNC4bZno4hjKL8H/An2CRzW8IsEjFKD+J+xa5hJYQbcb5W5wjGSs9PL</code><br>
<code>/pRbH0t8FNS1DevRqoq3xdL5EEUpUgae54gix0An0qKhzC4MRdD9sYFy42mDP7f6</code><br>
<code>8Vw2sCZltfBtOHaha7Qj2U28DE9j7Dx04lkHWjdHudJV5PVaPpelW8EDIOMx+4nG</code><br>
<code>WnXiYEKKMRWpR2BVV1FXnsfbfP2HWpxVaxxWt7WqOmswU0lJCb2bSLteEn8YoA1i</code><br>
<code>CMLMdMaVXyX92v8Quh2N0NWtzXgc94ug8GiucGKoo2SpdFlXVCysqlPfKBestJlL</code><br>
<code>93dqP6dOwqoHqOscTJB6rvNzi2tmtAu7WDy4C+BBXNhbYpGJAhwEEAECAAYFAlWs</code><br>
<code>+ygACgkQljt4MQo3sXysaw/+J6Ztawe/qT5aLW6it+zLq+3oD21UgM1TVP81CjwL</code><br>
<code>hlHj9wuuGDe+xE8dZA7kvpngKjAxxXPQX/B4rz27Y+kHCvelOSrLW5kodTsPWIkL</code><br>
<code>cSYMRo4Pws0RIGQBXI8tDIaJJcj7BYb9O7OjCziTEjP5KxDeZ6o4n0NFnZk5NNhS</code><br>
<code>6B1VnC3Y34DIj4koxm1N5O5br4z8kTc5PN9bMxOZn2u+KxGIeEwZJbHvtrgeAxUP</code><br>
<code>96B2dUo+jgSuro5jSkIyD+wpfo5o6+/kCtDiXEWo//AHJAwOal02QAodUtrMggwz</code><br>
<code>J19FfnU8RgiKFjivrbfZi6ITM6RHg+DSF+KnaW2wkc3mGTB0qJsgSLGwOgfv37Qx</code><br>
<code>O1tTdPxbSfWnZJAspylC74dgh+XOYYDji9tjPtrKZ8sEaHiUVFlO4QTOTlB9yYwO</code><br>
<code>E7uI/3MKe3Q+0M2a85gvX+S0CdznpXo71aMFj0Hd/7ZMuKNausJZhagHAILbve1M</code><br>
<code>IATkkfbCTxg5bdYgvdVGAIgUEAAO8mvLl1EvOJgkME5a/I/mK6MLxByuCMaT0RMr</code><br>
<code>U9S881f+AJuJ3Qxbbo8vN0Iy9KmiCIptcSMKBKLHeMonYaXM8O392/XUKbgSBXkL</code><br>
<code>oTOybMT+LZhO0upOhpRJqmtyDT1Wjxp7FBku/sUjJXCVy7YpjwkkLxZmvWIhleb7</code><br>
<code>S8uJAhwEEAECAAYFAlWs/LgACgkQEstOl+B+Z9HYNA//UKMSIfS0bdY6K+zhxuMS</code><br>
<code>lIyol8Z/ynkDZSZ8SOeXZViLyRCRoXhY2g6JsygWLsZpthI8fnleQhwy1GLCxWMF</code><br>
<code>n/PiRjj++VHoJYK/ANP23bC+tyl+jT9gwoPF0eGdWnnot1jGO6f6jFqam0KAL/XN</code><br>
<code>6ePUrNo0jbrYVrEUer20PYsM3tqGlGgOOFikMoYWwsAVOEh2I5Sgi6iAYfx12RYW</code><br>
<code>eKw37loDwSr2FNZ5zjxdIyUQnKN1YMd0/Rfi2d86OVD7dV2qa94TFUvYmicpdcOM</code><br>
<code>9pogKVGmbhz7lirjuAidRhdZkuU+rxvIAd07Oc3bQRdsUCJAs/kjO71v9ov/NqKu</code><br>
<code>j/BLixxIa0D0eKE41yL13RCfZIG46nI/F5PvLXhDp7sIeohIWsvYv239A9yXfq6B</code><br>
<code>TeXZ1j8YTlY86yN38JStf8pbGWKlGARM7e1o9DHYY3irLCOWCAnKmF14wbbTMOAe</code><br>
<code>w2VzxV8895Bweeo2fyCOGFI6SzvOSaOQPUlfmiKmtJrwreg71Vsv64X8X6FHajZY</code><br>
<code>V9dYJFS2gO8cYJ/zajzn/oeYVTtpsFpJmq7fWByjGd7pAnZHuuSEy/57GEptmYRu</code><br>
<code>zmI2gn7vYz1rZAbLThFsk/auCU3VYke8Dd3jHnxBuq2+Pa8TmLxibvnE1ZKd0gqZ</code><br>
<code>dMNY/rT4+LZI+xDczzF3Z7mJAhwEEAECAAYFAlWtLOIACgkQirEyljoGU3rjMhAA</code><br>
<code>ijskigHf8Q3D3B4Oz673cLNOGfAyEdHWNqlJW0Vcdo05iF8q8utwqmziRWw4PbpO</code><br>
<code>cdPpUqLb61rWfjSkq4PVTOr8leHHNj/a4aiAYt8DtnpcwJqTmktiijo0Ptn0v8ao</code><br>
<code>fdRJSVLtPcV0FydLzK6oLovszdWAQ4iVdFjppvdDJtjT4ooXFmZgZg6KzqjEGm8G</code><br>
<code>4wS4tMlFR4AJZIpWN5gAeLZhCg3jfuKWEgAIVwJZfVPp8qFTIMDCbHGcmszqeDKj</code><br>
<code>G5hY8q+KeQBs7/jjibY7QjSk+qFvWPlES2NGCnjrD5NL+T5W0AlQZS3kgbDWbnSm</code><br>
<code>r/xr6OzL8+bi03J3gRW/oWmCIlzvxUJuLgR5M3TRS4GqYfNVs4etgIW7QZXwTo/5</code><br>
<code>W8zd5P8UcKOuEFPtmfRjoRZYY30TqrmO9BQkHLKcDbqgnWcm55HaRdkK6+j4tKik</code><br>
<code>f12/VXez1tP4CkHcMJWE4g3poANtZmHia2MPO9/+1P/pCxUb5jwBF+CDiDhDel1Y</code><br>
<code>8b7u/ERIugpl8TqGJx+GkUlw0cotZ7BoweNwLXwDDDQlIoA4BT+LFLGQBtUQKMQY</code><br>
<code>TrDv4PUucMfB96yiEwlw40IdkmHgcBxXFNNxDHMsxEIW2TYoITfmkShiIm7XkcSE</code><br>
<code>oilPpHFmh6JXpnqOsBhfO0FxKSWkNjsCKCMUGLww5kKJAhwEEAEIAAYFAlWs//EA</code><br>
<code>CgkQP/MbrxBL+eLdOg//Z9Tcp9kElDdZl3e6aJqGpGviNqIA20KbvYrham5Kn3B9</code><br>
<code>1LhvMkypT6fZWAwbNCBHxvOSbOolcSSLpbaHK3A5jsg5MhLJ2G3Xpf7Z91+Mqg/H</code><br>
<code>iOiJkaAhPoJ0Ny6BCB7jg3yaKLDP4wBwDbOH7JWuP7uQmQ12mqu6WFxok7e53bH5</code><br>
<code>i4gmu3QIO21RXyWoLJy/1Y5X3ljPZ1tNawy/Sz8UjeLau2Sl1mQ6JxWWCeLp7Cvw</code><br>
<code>p+j6nKOFm/hVDlgnFrfIp9aYHjR2fVpwIFxvfff94gm20EywerlcGOAMeT+1QKZy</code><br>
<code>1V1ekBVX+2zdQ8RPJGZPqXyxnLg9SyUhdLJBPNDNe5ALfolfn2pvBGM3hnRunGOs</code><br>
<code>PrK53WjGqvXXYhyIkJEd+UoyQBp6zUY/KKFK/7yjgZxX7sCSwNjDlFT2fB1gfll1</code><br>
<code>vKoYocPQl2t/B3beKOZJzBkSMk1hBdE0A7URkOoYrFQTdzsSUVwY+/0IAhvxqGKc</code><br>
<code>HhinLDFON6ee082511VVMrSbCxcnsThjc61CMYA1TxL01Jzb3QIoTWT3W1t2HRZD</code><br>
<code>/aXcDsg6UMHm1xC1MdZKeKpdJWrnnseC9b/tGuqw2EHitYDquVBmPkx0UoAdsbB5</code><br>
<code>ec3q8n4J45VJFJcSrrps/vRSNn0bUqcZlpZSZERdqBTBkbizxgFnvJx734JLhlaJ</code><br>
<code>AhwEEAEIAAYFAlWtG6MACgkQlWNH9vvzpBVikRAAmfUzps72Opq31lRHZXXGD4/H</code><br>
<code>FP9SyYRnWzaOWGDMfgO9p3IcRl3qRwOuThCvn+qxTHmRT8KUD8uko9zIU+ttx/zx</code><br>
<code>An3hvO1nCzsiW33N4vU+Y78Uvs7Rumm2CNif+dKDL41FnVpA191b3T3NGWfigvqB</code><br>
<code>78fWv/WJIuPJuAhCoJYFbK0Vv2/QF2UAo9O2wdBo0ELZKmP5tWfJuLbc8XzuzgaP</code><br>
<code>4xzRdgJ+P+IFA4q1zQ49FHQeRWBSWkxFAp3iI9sdH5Na+Lup2vLSDYYmdDOyII5w</code><br>
<code>5QQ+Y8M78Bvt5GBOk52KfTH3oNjDwtd7ae46yWrSy7razs75klSxi125IfcPr/r8</code><br>
<code>e6jt08WVDZRak5mLPryNlf/Y+ymFe07aIp3eiKO1/SJp2K73fCTslXDt/OuzKZSp</code><br>
<code>656hybxUrRPiXBxHMOWkcPllZqBXf6GxnN+Fdyutk/e+0EBjpK02AxHY3igA3411</code><br>
<code>2ZGTGXNCL8ywTidVweOfjyqiWAnCSUvF6+efjRgg2mlD1g6ZDRiKpl9p/ZGETjCh</code><br>
<code>urlpGSKhtCZWZIGt0x0iSLy4surqDrwwuBqEPSZ08KRr+q9R8HIPuAwjq2CjqDyj</code><br>
<code>DFNuLx8dhbUUVIAl7a9nJotsph5VK7c/BF0uLW5YnPJYsXG7z1KixL2ydoH1kL41</code><br>
<code>zXdcIWBP8H7yPVgUxCKJAhwEEAEIAAYFAlWtG98ACgkQvBcwG0kbPyEIVxAA4imw</code><br>
<code>p7Df/j5ZZcZ+kkBwAhFO+WnJMfkNNl4g/7vsFKbWFBpiYuGmlvX+poM3nTsWCuEv</code><br>
<code>v3QohbZHGJS/hY2kdAuxurTI6w4FvvJ0Akz1DUANIF9gfJ9Omu2Znb9xG1fzyCSc</code><br>
<code>EzUgaf3aim7zyp0arjjqR/msmd2sCjqvy5VgRK21tYAfhWmzdJQntIlCEExfTh9x</code><br>
<code>guELDLSK3j7ngZla1T3BwE1dlcPVD6l9bl/7ZV5uXmotOqFU+1dBcFG4NKNXmnG5</code><br>
<code>TV7x3Ih6Xt982SCpBgVsEow1XFPf0jflPBn6DGJsgpmuIjdymgpJacwZCYkGbTSj</code><br>
<code>wAeSibYvCw1MRYtrCXd7KlmmQxhYTvvzyoQSqaiIQM8daaXddcy4IdHoOoEJVzfA</code><br>
<code>/BCyEkb0KhhjTWXQoRBXcxhJYOUjH5nhHd+zml+MHHiy1dL+xANHaBzFaNHpxYUs</code><br>
<code>FN2MLcMW4rpCnOx/8pRu/o757Y2Ps+ypLUbGPxZJJa26zYXXTAUDDEgEFFM9Rifu</code><br>
<code>jVCps146sRbrodzgIajc4ScgAWVkHDTKYfq6IBLJZHp8KB1fYFkVrUtwjMmyZCpG</code><br>
<code>7FqWITGTWOoRbYAsInWuzT7PN+vb/sk0xOk1PzSJV1CmCH9izKrTqRAU42jd4yqV</code><br>
<code>IuQ3hN8wXoeolSlK3wl27fDtK2EDzVhklvjGdreJAhwEEAEIAAYFAlbwOBsACgkQ</code><br>
<code>RPRuFG0COV30vQ//Vzyu44NJZrDWdrAyMngMOZ+qIUkeRdtKHEzAFXl6je1ZLyXT</code><br>
<code>aSKhyWtdxD+NPA4E8vQbEqbcpvzkBhOgfNgVOxWUxC+njB5xhg4PuZLcffm+98S3</code><br>
<code>ncyu+bYuhA/kLgOJA2HL1vIQEobdM0XJhVM8G7bhKKSdS5NUd6BS8AgKL5YXbguO</code><br>
<code>ZwDVq0yuVPg9VNqG5eTwL8fvZhH4L6I5Rh/wv1g++FvnEGRR+7ePprkc2pnJC8j3</code><br>
<code>7Z08YzRf5aWCJu89EDsL8wWI/jydPcGLnitNEROfovRX/A647VUl7M4kL0oyblJb</code><br>
<code>9JFbzPK97YeMwQTUYQOHIp8KsYYKjuBvq9q/Rr9DNpyijp1pshfjEiEZ4YDjTkGX</code><br>
<code>uWu5EMSlVpC4nEtiBlKT3kMk1mqmc2F7A/g5ug1w+e72E1EbVJMDtAgzjc0+V4kt</code><br>
<code>RxtTGa8PlfyWouBwL6ReVpEyVz3NS7++QcSY98DgMODMxFggna/zf3bef/lC6RGk</code><br>
<code>kHyIOC+IhI+q72m0MjdCmzsSA8fqT0PNYs349+sCKw6ocgjSHZlR/8gEZbZC+Fwx</code><br>
<code>Jf6be2N7eo6hYctOe5XpLaMApVnD3qtw6C9CxWJ4zT6WLyI0SAF3YWmIgLtlYhfF</code><br>
<code>nRs0ObRXiO7tz0FBuTXD3vljjzq7t8DDK1IS4Cx5AnTZI4rz+/aiD0k5AhmJAhwE</code><br>
<code>EAEIAAYFAlbwOPIACgkQt4bvJaijiaC0TBAAppcnj7MhOQh+yQCzljw403/hEW5/</code><br>
<code>iVEyhfkEtF8lnJQPwSCvKphln4B9/E/Z6HBZ5MNew9xj/JrL/JZfk+E81vSs/fhg</code><br>
<code>lCXB83bFo/fZ6cnqhubcPlXyXLSAY7J195n+DdInbza5ABuaJW6UeVHbGGM+th7L</code><br>
<code>S6sYmzoOM1oU8mLzugo57M2a0SZNE2GTjeHFzdeFmKtjk6zGhJcdDMvKNalQZyuf</code><br>
<code>KSEc7+9j5r0KlJOWY4VMqfYMY6qgiQ89IVSutWbhj+oiivCgi030sXmrdOSwG8/G</code><br>
<code>gufKpYOQ1ZLXrxzowYJ02vAewYCe20PTyzGt5ReB9XkokffvHnKcxHxhyC6HiAyG</code><br>
<code>B+8+yf0tJk4Fd7uW6zjGDvphPQhH6bPObVVaMiayEfJhhHbRNmJnUKXRc2CGL0X6</code><br>
<code>vbZ12Y1bAALAttEpsNC544WMwLfUCcGfaRTF1E4OpQucU/uizaxGPiUd8Ateqt+m</code><br>
<code>3GwjY9HAb9QN8ejiOTkH6XsYSzw4KA4iPqqMySHY/DMyfFuilNWd8m93agApO+8r</code><br>
<code>9+6xjurnbkh50rYtunP3FCMul2QW1wXaGxPTt7a/IcL00NRVwZmJwa3Ys1OrYMRA</code><br>
<code>OXM0QvRzpHZOsuqHG45jjaRejMZKSQL0zJOyKgtv4YrG1fceLrZWvu7ZjWVNd+0B</code><br>
<code>nGitgBkGm5VQMuGJAhwEEAEIAAYFAlbwjIoACgkQpIWg7VG4t8QFOw//YFD2UifK</code><br>
<code>W2VfUy2ig+ewXOwe/BzVfweN/Im+HSN94ooTEwR5wgdYIjxPV+eEKFfAEsazv8b3</code><br>
<code>ktZJI+/IxEalHBA+mR4TC2/UlrOgsVCnTHYKL5yJRVHPrdOQ+Zm+kk4vszYocDtC</code><br>
<code>SPp+/aoRE8u91i6Qu0UdGjMe82HG6qdzVj6bXH9ZFRiWRsfkGxB31cnvfE+aZB+V</code><br>
<code>qfuy0pbqegJXUE/6In8XRsS12xAk58KM0b8jKQGqYaBB6xE9WDpip5sPycougy6U</code><br>
<code>29170n+U57c6+x5JQhHC/Rb2AqB8Yl1msC4bj4UsqxWHmLRdcqZs04GiVsrk2fLD</code><br>
<code>fSfsu023IZPyOhaV/t2KE4DwnAu4b9Sq7PNNzf9yrsgRL4c4OzWEYpMzt38V5QRt</code><br>
<code>ETJvuuthOypREVNuIs21oRomMJd+PjGsayDuKA7xe/SxDe8tPkoy+FdAfevPXfhy</code><br>
<code>NWX0vTtcZDpVustEMmoDs7EzlBddrNplsnRZoqW2JyMLErLujc5N8juDPqmAASVy</code><br>
<code>d7SBUD03e8apjzZSfJhbZsxw4W9z7+rETRSy7o2DPXCabjTGwB1naIc9W4wU/aWU</code><br>
<code>N81qZZecKLVLxpiXeoUwF3VIJme5Ye1KumsQpTJoi3tVmJ7XDaW9OD8shJtvhlOc</code><br>
<code>ddt1E4kl9iximuLfhzUjPJyS/ASYhpPNMVSJAhwEEAEKAAYFAlWtDgMACgkQw701</code><br>
<code>5G3UXaVUfg/+P9+3vFqijhzT7XkLuNrI9GTn3KslTAPU0Oe/BdLPTMKELqn1YVxk</code><br>
<code>lnrznLbjL9qkwYwXxY5HT6ykeS+CzQIDLLtXqR1NAz3EWVAm4dT+xqaJZmfCoJ40</code><br>
<code>+VqZdQHLjgmj9PFTK7f3vyZ3Ux6em7Z+h7C1ba8jYZS+6GnmGw6+v6LxzRh1SFUm</code><br>
<code>YBj/X+GPBYg6cnymr+9b2CwTMbczO5XN3hU9UtdF4UlupPvEuV5XWFpCw64kVwxP</code><br>
<code>OQvvUJ3aTqEGiCAqd8ntyVZ1MWtaob7GI/bj7dTOoSogUqF3aZawfoUHPp6izTd4</code><br>
<code>8aRnZhpsK47Y6jIaHDCILhKoAESTnpN1yjqaRIbviHJyYFOHnQESTS7AWrolQVmP</code><br>
<code>+pmThZWauh+PLVcs4ktp/6CKYvmgnP30HhrPczE7RVKIT32LU3MvT3nFzDmKUruK</code><br>
<code>eLUNO6LnJ8XwZEVIE3TOVcF+2ME3EcKfV4RwAlBBgYa8DB/CM/rCtoyxdxYSRpHn</code><br>
<code>9bxbNL6kn+CPAwRZGAChfOPGMhHBh3iDUJaIt79Cq9j6QcZUYfhj1sIvvkDyl0Bc</code><br>
<code>5U4slbTM6KP5aZgFlCcI9HWwGx/5qIbb1rQNVjxwtiUWediS04YaQ6yt7f/yXbdl</code><br>
<code>hxPdXDMe/9gdDyuDvP4+1FZbDiV6VT7Bl+UhQnkwf4kuCbSMFjdu+cyJAjMEEAEI</code><br>
<code>AB0WIQRZyp4tKjMd4lGqJCdfA8dnwkek1QUCWQ72QgAKCRBfA8dnwkek1aBpEACI</code><br>
<code>6mkO7aXYQyejkTbSyLdE7FoNI4Nq6aKvvQLt+vlGATLgSdz8v7QLGd3KkJYoO5SY</code><br>
<code>kKjrkGZG4Nb3GOCnWnewBmvCqt7C5/Idl1JTVPdF9CgMHQkwP2F8Tg5X1Ag9oZeL</code><br>
<code>yRKB/xWbX1LGizRy5s9G6yhq1rwoatNI+Wz36fdCmCqmphm92uPyxuAxy+JZhAbT</code><br>
<code>/vmANGKlEN5Wjryrp3tmMEhnuJykWq2ZxYiJ9jpx/cNLyjf8fSDBhLXOTG0FYBrZ</code><br>
<code>k+ZJtw1LlzA36K7IbnunO2qOJzDgvemo5FmGYcm6hyYCzqxBj1VJDmhHu7NZMeMn</code><br>
<code>vT4d8Py1xBPGPFRYmaK5AP/D07cdDPYawlZA6dMPGE8xSfQxbrayJrj0+vpjSJPt</code><br>
<code>DUHrg7L+PdpvyVxi8Py0Zfe05h6SjBPrw3eTQS6ODkoZQyh8D7M2HKUiUxvfufvn</code><br>
<code>LEfeWpd7Vp7hl/VdP3TtbOzL9H/89O5ywf7S/oRKaqgOWkYhs3cfyjqz2boQk8nw</code><br>
<code>N29sLzm5cH+APxNcju7sz07klp8dRNeImbmgj8mT1xId10mAixJ0NOY8udLhlwg1</code><br>
<code>UfsYhP+Yvy9yMcoSZOs5+RjluW/E2qubP3RUt81ohUupdM0NVUJiR/I3Ri6ARb3V</code><br>
<code>S2aAGtW4oS6PpyVT0dkWrlp8VqFpNTUKE95dNi5Og4kCTgQTAQoAOAIbAwIeAQIX</code><br>
<code>gBYhBBTyZoLQkWzdgeN7bWG3tSbZjwNTBQJpobDuBQsJCAcCBhUKCQgLAgQWAgMB</code><br>
<code>AAoJEGG3tSbZjwNTpYQQAK+60Ky1K+VzJMVvjTedchr/ACHsjRXDHfJHWp2hDBDg</code><br>
<code>GLjr0Muwo3XIaNyWhW1fwmxvyMULFVmWGb7qGTeI82O8yhY3bLMN6iA+XZwf1PsC</code><br>
<code>ZYHTls2KTYRUHYixobOA+9L0mWqWriNHeoBXe3c+SZ2jNYe/o4IR1X/zeVVpVkUq</code><br>
<code>pzKcKmhpDOfgWKZBxrBRFUm0wJnFrL+AcjVpeQi8CreR1AXzyRWT3pIGfpYilfTN</code><br>
<code>SZNy7e3oruplcu0Jk3aDdtTsJP95aej7nyI1eBdAk2hoMe4o2jCweaef5LO0y8u6</code><br>
<code>G6Kie9/LUAqQZVQuU7Zce0m0l9MNPujYv1pUy5RkMxtRyrUOJQLP60a1f1WZgU2Y</code><br>
<code>Om9OgS6gO+NoZ7fr4/5wj3C8Y7Hyzn7I1KXkvj+v6CF6u45xDPdfC5qj9p5HAE81</code><br>
<code>bPmUpXFkeeIwn8La3NJoVjiagl7OxuoFi27F4oKSGxnArPtIoiQYuIVsZ2pPvkhP</code><br>
<code>Lt2lLXbi5vGHfPKhK/kg/mvkUshiCK+jTpYZ078eg+meCFXOoRNH6Qkd7Q1MgrKz</code><br>
<code>OGAkuRVNWtnx1Ata8lxEqYuhaUlqW7okd1fNSdughtvZH5TgDUjlzkAS1eLsFIRC</code><br>
<code>qZIVBRUXgQvU02zt2OPdBuNgiXqRbZcSmsyKs1X22RG5i9WmTtP6Rv+ZL61pGsVA</code><br>
<code>uQINBGp0aqQBEADF5R+Xdp6U/SuormBFr8aSUAidp5f9kAEMNFtAWtDacRp/uWAK</code><br>
<code>U1pcC2bTOuMXDdKOq+2HG9mKAGBRP7ZJEBGrFHMj8bAK9RYJ4PdmkTbwQt6FrVs1</code><br>
<code>G2eL4PjIM6Y4DQAL8nQhuFyp4jQzXYYRqgi2a0y/JMiOQyGKhwCjRwAlJrBUplyi</code><br>
<code>mPJ4XfmtGKTj/2rcGQq4mIdDvCs6+YMyZRy8r8S8wZF+ysLpsEbqQPwgzG2uybF8</code><br>
<code>AMv4jcBT+c7Wb9WgQsnrAlQjsRoRgcS8swwIzm+ZXUMBwgv5zRzO5G2YCpuzuvx/</code><br>
<code>0/U0x1fJl1fpbW0785c+B+gIZMWmY3gdxl0JpqIpKpHj5GXXSBV72HmsOBUzui8u</code><br>
<code>0Ux2KlFlMvRL8IX5VPoPwOUzQazJM15B+5iToF3JmYlIRod73BQHrTj0NkwTFO9a</code><br>
<code>jRZCteoHOYOYY/o3lJGNFwSIkqH3Z4wa6P2Y2xpoejH0xsE25Z2NEp2H14/kyacJ</code><br>
<code>BF0Hq2Th/Bou7MtRr3ez43zt7h0v5GKL3JLAWfz5kit/Ux18h4Imqzsl/KSelDJM</code><br>
<code>4eUUGipO7dFfqO5MU/juqNt8RjvcIDO8Cnt7M+j53bANsRPJY428FiD3nqc+2WSS</code><br>
<code>EbmRaWq8SzNz5ywNeeJTLac3UvxUlUmskN2+UIM8QESHzpv5dn4u7x205wARAQAB</code><br>
<code>iQRyBBgBCgAmFiEEFPJmgtCRbN2B43ttYbe1JtmPA1MFAmp0aqQCGwIFCQPCZwAC</code><br>
<code>QAkQYbe1JtmPA1PBdCAEGQEKAB0WIQSCfmWGCGeWGM00n5NnjkVddnZ6owUCanRq</code><br>
<code>pAAKCRBnjkVddnZ6o8NvD/4tvmeD9UaKxJKiQmzL1yPBHT05M34pI3s2t9T0uSJf</code><br>
<code>hjz8DEzDruiuhTpwweTz4iOU9NBoBSGzmxYfrFE44IXvgNKMUKtoHWAFXt+3SEMP</code><br>
<code>eYOyXFBhWBBVQ6FO+5Ka8cHKfTbhU9TiLQhyCHwulWMZqLIHgGIaX3WuDEQxINbp</code><br>
<code>WXTIbkyLml3FlH7BeRCzJBGZm1TelosYSu3xRybveZr4khhSGNrvRuRKHYBT30qm</code><br>
<code>9VNkfHexvzg+WY9rif51iTCPnBk7XdPslHSe4E2/uuZafOCIHzsXlq3T0/Dqzcvw</code><br>
<code>7elaGWRiG+txo4bhnEnML6H46V7s7gqb+sdSUVVimHuq7WFWnojcw9Icg6yW2x/y</code><br>
<code>F6DvCXGFhUbP1GFggwLMIg0gbSV9wyQa849+07R9oIXUjrlliB3N0A8y5F08DCKD</code><br>
<code>6FfPjb3zZquyZr6f37RySoMXgsM6c4rlKPbR6Dks5Cjg6dHLfmCrLOX38bDJJxhY</code><br>
<code>ys1NXRSlH318ycm0wdiou2O9wV8sXTXcSOK/dc0M+g+QcA/23Pzn35lOiIlUHHNX</code><br>
<code>lD28CPhbjxjHoeUJeV+p6mux94FZTpaFSj1DgtMtP7hQoxhR6adF+nRK8rzSzyAx</code><br>
<code>TqzSQYpNrE5oJvf0QkxHScVR3uPfo8Vi9UIYVQRhoaUsIE8jlqTK3e7XLfiJ7v1j</code><br>
<code>GhwcD/40zySQmlQGfxSDx7ABR77qQTY/xjzXUKGpl6YecLUYV2FCpNYQuXGHTRcJ</code><br>
<code>jHpezJFkpzvZqpi67ZZXDX4Xz5xBXYI0UCAlnn1MrMh87Jygo5zgcxS7BuZA8YcD</code><br>
<code>6qbtkNtvuPq6vOsnyf7cFa6IbcZVTfeBN84ehy0oy6mWblYt0nGtZXc3+JoNfeCq</code><br>
<code>GRZ5iHZqopf7xL0cS+01+uNbikfMwnl10hVjP3zl9TI+D8Hm0pskJ8nZqoZBrupz</code><br>
<code>s7FR4+NTH96JzQxZFyV7v+LayOzf+M0FPrfspZkH933xABiJ/98BBCJciAB1KDAQ</code><br>
<code>SUfl+lm5ZEzOiXgMeOVtyhSUjW9Tgf9qEQtgs1+TcQ+LzrWcKCvAPXXEdxNvWCt7</code><br>
<code>a0c1MdArfBCjKQq7/65sibTdE6nqR+waDlZ14N3IbASf92sIrdP/S4KuL9R7gCGF</code><br>
<code>f23xNvIAA9DRmighFT1iymW+aYn0Wk2UFSlSisy1TUTV5p6fCIJ2ioQTA9252syA</code><br>
<code>pEp30Fyj2jC5Ep4PvTOD1cmN653DYLXVwsKMyoDcvWgQ7DFJGxhpkSKOoMViaZjQ</code><br>
<code>pFB9zEn1W389/OiXGIch+VtM9jhJvpEeuc4XaaZ34ED2RItO2QuEkRTpW2YPxegM</code><br>
<code>fUjVNQ/45uJ4qcFCD3/stBVB9Z1sr5bda+9dBAtRT2TgiwRFsLkCDQRgos3VARAA</code><br>
<code>tSRABroykqOO+3Zq3pehRGM2aft2djiigKhhVg+eJr+YffIU2Q73l9zniYSzVMkF</code><br>
<code>VuJPd7WkBnlEMIn8BUGh04op6MV+kzX0guu3v/9i/0agNS31xAdXzmf1i5sbQU1e</code><br>
<code>RylyZRSisM2iuF7BYrfSsOBHv71cf+iM94KxrzXiB1bDNL4DN0T5+vCoDjgHaXbt</code><br>
<code>en4Qdm6OdjBCUv9Ix8dhT4OzHwHOUK7gomTrQM6Hyb0vgQsDXKV2Ps/pWOSk/J2c</code><br>
<code>CrQUrafFqkVAAC3m6kaGU8te6YlAU7GFcf4MOPw15WTM2iaKWwPkwK9b/Ro/5RfZ</code><br>
<code>bqnde8EBAoFkg0X8mshGVDBtYCaW+1qUA3ZBcQzUvosYUsNQC9Nx8Y9/tkqCwIBU</code><br>
<code>zsxuIrSYHxeqPThxSMvCmg2qHXmmbAxsbOz3DTOwKpWSRGOCTGFpsLBqWigjG+L+</code><br>
<code>9iIx+7kr2gH8tYck1RPyQm04k9udD8wwXCvylTUzNVd876sN3o1xySaO5nz8JtM/</code><br>
<code>/xPPctFFMZmC01bBn+jRuapDqY+qTFL+eKherOUZgs3nHt7cEBz3m8neGg0/JhyB</code><br>
<code>wS6sQF7h0ETBapVDlKCRuvAgJHIrjejL5v+kVRrH9L6ey5CAdRG9SbffsNwZoo5o</code><br>
<code>8SrdGcX6hpFiqg1jZWvZv5x7/PPSW7fPuNNHsoxVRn8AEQEAAYkEcgQYAQoAJhYh</code><br>
<code>BBTyZoLQkWzdgeN7bWG3tSbZjwNTBQJgos3VAhsCBQkDwmcAAkAJEGG3tSbZjwNT</code><br>
<code>wXQgBBkBCgAdFiEEQ2D+IQnEl2MYb44h6+QekPbxL20FAmCizdUACgkQ6+QekPbx</code><br>
<code>L22N6w/+ObmFWpCr0dmV1tm+1tuCL05sJ031KFl3EkH389FmrMMoVk49e7H5Urn7</code><br>
<code>7ezQXO9Me8R0nZgVUavJdKcJzgf1IZtLq5Vq5q563I8gglr8rJaaefGYuv9jitx/</code><br>
<code>Ca2s+uvJMUHgMeBPmFFOKoIF8QgOJdkSht2lIkd6bd89ayLLoIXlGi8d6K4tEWeM</code><br>
<code>igtds9FYcyX7o8xXmt9XqCIaMbkJtiUzjz63dN0O81UCj0TvK17KXAvclhzrriZu</code><br>
<code>o2rOeDTBcQmKKy2UKZaJjUqiezuOg1t513ZIzhy1oXzg5CJb5jgsmZmjtJjr161f</code><br>
<code>v5d8Yockj73z2/z47wry6ThESfYSkIxJIiIP5SwZyNMeeHSZUnaMTqzd5kDL5qnN</code><br>
<code>rhJHCBByxcIBcGppv3VjZ1QNU1k0Tx+MzpfZtbE//idw+Q7Iz9T/3zjN79JhYi1t</code><br>
<code>zzaaQR6JoEiNMpHHkdkOGRwfdipM7oKl7HKl+zJCzaLTE4mbInCxSgn+1RhI+rGz</code><br>
<code>TXVxqIKonYrWra4EVBAgguMrxNMjuEtbsF54Q27x2+H/Mew+et6K/suqyh63Szfd</code><br>
<code>14LWEj4NaR89tEz76nJyJFuFtDeGSmu68/Pi5S8Ls9MxKJJiIJmc3lQqDUTHEiLc</code><br>
<code>7RtZAsgAWlLc6UnFsaCqXKJxuaMs7qFD7pqSGfHxYboBxax7Sqrttw//eC7rghiF</code><br>
<code>zfcnEZQn6+GPW3FJc5P1diSLto99six3uaWKjvSnZScvPOe8ogJt1JQpQAABoHfd</code><br>
<code>7HzzlGzJtU/yDL931WD6nETp6b/dk7t3aUpk8WFMG19L+L9QbEpjxDi2wozO7CGg</code><br>
<code>6FhC7mu+KsSsorLqd3QYKoBLG0Pb2K3Zz3PN7y17kf1Aixa2//prFNfpEGwP9flz</code><br>
<code>2TUvSdtd9JvcnDz+/3yB63tmuCsUPZaR3lhTkNiXZG7WTALA1AqIUKFpxI+cOQxa</code><br>
<code>O2+H6XXiON3x8A2Pzd1mZyuUMPk2c6I/c1ZfzJXxF/WJVfuztZXNCGocYF4kB3X0</code><br>
<code>7uOuiKrIDMXDT3Op3wJ0RInpjyyPlwwov3zIVQcG3mfWPclXNcIRSAdadLq6yhTB</code><br>
<code>UVbhMd2j2qga1vtaVlH/m0zFhib88RLf1/FiVX76D1q+anG+gT+SsMPd7hSGQQ2+</code><br>
<code>6ngBAvx4T1IHtFgPqfNaA49m8b3aAorGo6Bbzmwh4Xr+7DM2fSskBskGdIPZgA4V</code><br>
<code>yu4/PC5aCTyd0NqlBgj/g7XRQMGvFRkdnEIcVZbvxdzn4j16dS+43dUzFMLKThRb</code><br>
<code>kUaunaYoZPIYuiqbwCoFX7vJdgBMaTxYfkClc5LJSVr+X+9RYNwlOn4kiQzKstVt</code><br>
<code>l/qfpDow6QsGmA9J7v8Vt9JEg052REcZZmC5Ag0EValA9AEQAK/z677fpoVUj4zQ</code><br>
<code>z0g60wVWf+1y2lGb8iFYICmvrJyaEra5SRkyihYA1WmEzhN4T//tHw3UIfe646+G</code><br>
<code>kY3eIQW2jY9DM2XaElmMN8k/v54nbn5oD7rNEyCTFTvCOq5d74HH1vw96Lzay1vy</code><br>
<code>45E7jPWvqfg9Se8KAnzElohTJjizyhU+0QbmPHnQlY8gOkT/SvRo9bFEUnqjWh0f</code><br>
<code>Rq+K1tdLPhcFB1scc25iFqh9IAKUGDur8jQ+SDHCjgQlkFOg3rbqtaUOnVHPohfr</code><br>
<code>BM90ZNwuneFgQY7ZFSUidCimp/EN4CXnzgjDYXUUA42S8G86+G4KAJC22gRQo4mc</code><br>
<code>VmehwHTH0glfLmUK7TEu29A1KWNL3R/R7ZdyajjpCvUaK2A0Abj3ZE2BSDbJrVlb</code><br>
<code>BVfy5kfPdZjhd3wUWqFaDHiVcImcjZRWPncllhcy6fhqEy3ELZrkezpJjnARsVki</code><br>
<code>j3GXz6oX+HVULne2w0dkTXydR6muZI/GeNtrLHmA8B3/0/TllmLy8ChmYZVIKZ8z</code><br>
<code>t1ghq3f+hFTXgtZil7eBewZgA6L+EXXK6dZj14lbe6CMS2kungTX9stU1s42I+WR</code><br>
<code>biqiLpAxCX6qcLBOWrJwsOep2nvu5bhrPHptSfRhF4Vs1xteVFckCWhcLgdYi/Je</code><br>
<code>1XBEM+AAVa0k1FiywCg7MqlG6toLABEBAAGJBEQEGAECAA8FAlWpQPQCGwIFCQPC</code><br>
<code>ZwACKQkQYbe1JtmPA1PBXSAEGQECAAYFAlWpQPQACgkQHGnE5V6ZBdsvxQ/6A62Z</code><br>
<code>teN0b/TVfSJ51SdG66amwe2rpRX4UdSw7ifxo3qhgEICQmXR5c09qXwl17MFJWM3</code><br>
<code>FhGrbxnA5KGgeWGtqrPup4QZPKU+l2Ea2QLSJSiBq5QqqEgZvR14Lhr/hCGhBAq9</code><br>
<code>s/xbp8fbKNJj/uWiZ+uTPbt5T5rgKJ4+g3B6DNO1rH7F70OLrd32mxZs4pSxngHR</code><br>
<code>AyiMPB59yQVDsVMha0JTqC+P96itUzvnInc/9mwE0EMiBtpDTkoBwbJVPnuv+7Fj</code><br>
<code>kOLn5s5u3RLH9fe8z1xnV0fPC0/ndrlNiuBpAn3zVCsWasvW18Vz8K+CQY8Sw0Jw</code><br>
<code>75edBgFoz2QMFxHfDpMJefvMadB7mdte1lKk/Im9KFFH8Idh9b6zD0a/+Ooujukx</code><br>
<code>6QpFfAVhe2sT2CIm2nmMAuAZI2cCt7SC+REn9n9MSuIWxN8YTE3qgAUB6F3ea0O0</code><br>
<code>hGlLl+z5UOfX0bNAs+ebx/P6PczJtDzeqpmRb0QXqo55JWXLvmXT/fgjF7fNTTLs</code><br>
<code>yCtV+xH6ZFKGpvGJGJMHApEbz2a0hy12RZH58eI1ueN3Tzn8nI57+oYSsqFw/Qgc</code><br>
<code>dGXDonLGJsPVzIpQRg92/GXSukWF+MsCjVOilHRSY1wfPPmJ7+kMQ4rdXpjAhwNY</code><br>
<code>Jc1ff5N+omCxCKoFgYsCXlFCHFKs4JwRbTdd3MkuqBAAlBlIjym8NyJIBltfWcku</code><br>
<code>hQTX4BiBltGPNga9CpQsml519EePuLtoe5H0fTUp4UYbL0ZzyJImQE2uw/hMNZ36</code><br>
<code>bA057YtHOoP4FcPUwv6wsl5JC87UR1XFhAXb5xSU0qdi3hWh0hm772X6CBlM8lM6</code><br>
<code>GtT/fDZkSGNXMQaIs1X/O9vf8wGg+HwLJcaCvybI4w7w1K0R7WjWZlJXutCZf8hR</code><br>
<code>c0d88W/qSZYooKD9q2S7foqaJhySIaF11sH5ETvVP3oCfGVIVhKWb0Tp2jXPXlXL</code><br>
<code>eRAQA8S+4B1o5XHiM+J3SNXhPQHRGQ3VGcDn45itg3F4xQX2Qvo4SV42NMYd6Tyk</code><br>
<code>M/dIfQyJDOVg3CT3+nqfjCknf94SNvyZprHEPmpcDeseoPMw8kjKNwDwPXFLxBRn</code><br>
<code>tPgnqVXDcNN41OH2kqx4jF7FLlRmwNpB2mFVH8xeVuRm7h2WZRsaEoqvivhzRtES</code><br>
<code>VA2um5Eg763CVTcNYlK6MD/iy8JzbMuZBrlOHr58HKDdcOy1W0z2quESGoqrwA99</code><br>
<code>5IgPav/1DSpyuJPNc/oUTWlhpYshqYKoflezAyKj30+UzC3R/mY03ri6zUvCgXHN</code><br>
<code>gZlKUsM3VEXk6h5oDuaXniHLLzuxjTBVrILnGYgHSFRP80L/knz+o4Uvq4wj7NHn</code><br>
<code>ruc5fP1foFxRNsMt40yRJfW5Ag0EWUvZtQEQAL4dTYeBoI6UxWcu7kERc+Tz13WU</code><br>
<code>wSPmOIU6RdoXqBc2QyOki8s+uDqIJbpt2YJUPWnPgoU0rDt+msOG9tpAjPVg5pHJ</code><br>
<code>e8H9tXxvaPICQ1YxYw1m8E1kRGio4EurP2G/H/YI3vwRskqI8cp04t88k1DfeKvX</code><br>
<code>YVY34kO/VM12XTfRcsiMdmDubTqNPYU1kmYNeqMT+OzI9QE2kulCK0DHDJzqdJLn</code><br>
<code>Okrn1z0lrFAPoNpVtHZh4D7yB8FH3I1qk9npRdNXvSjhXu4ptvRuszktjEcfHK+i</code><br>
<code>kYP3jVqR4eWiOKrkVIWJOCsOKIUE27PXndGLbUuDzCvrKusR6W9vF+mYK1p3pT2P</code><br>
<code>YX8HEeJuzrd1UFBvCWPf2k5RQqHk4JIaKfjAlCPnSXmPHXqSGtD083RJhFkbz4U0</code><br>
<code>7/glHWer+M+Sw+hYT/v+XOhQm3CG/PUaeX2ud6GFefymX/tA1FYJqVxVOye2axoA</code><br>
<code>3lO7yM5sK/JHMdL7bFZtXVcGCwAqU2mkD2yEkFAzPLBHKigKg+4VimsTbG9jPOS+</code><br>
<code>qtv65x6uIOOsic3Ud2/BB/lfbvplIvQyJYw8HKb8O0XkUPcD3Q1i8p54JSHhiJm4</code><br>
<code>2H699uMmiJeLzTkQJG7KApEv6nOb+jLyr2DZXuX82/UvZAmzWZg/XOf2xz44/RDX</code><br>
<code>kL865dqRYenXNaOXABEBAAGJBHIEGAEIACYWIQQU8maC0JFs3YHje21ht7Um2Y8D</code><br>
<code>UwUCWUvZtQIbAgUJA8JnAAJACRBht7Um2Y8DU8F0IAQZAQgAHRYhBNzqxdlhNbkc</code><br>
<code>TqZyq7u+vbskxvNVBQJZS9m1AAoJELu+vbskxvNVBVMP/21uU+8NpPLpBn6SHJtI</code><br>
<code>AffFYMSnp0gplOjfiItA8HDbc1vqZlVpdk2xyFw6b7g+vTg1gQzF7uoAZK1czRLC</code><br>
<code>t7ocxntLVgPuSO1ZHt4hJG5Ze1UUJSDq8Pp+TTL43rg6irDLdYDBBHYESnXWAKRA</code><br>
<code>IuPb1e156pAdpSynwJ3+qPyqj5vDLkPrtMWGp7qWQpXcHaXMea8m4+/RLNIjvRof</code><br>
<code>/t6jrUermzs91Z+/C3N8ugD/aZrXTiNkF/H6BiuITZoB0j+rjy4fxEQvTYq9C3No</code><br>
<code>aBIRxJEPApxGnHKe9K9N1ZBELjCUCT1MkbBmf4CJtEgJvSScVh1yZNv+TVDfN6Rw</code><br>
<code>F9CwOM8bVrOH1VuX/L/XiIRRT02eGrvv3EvQ+BhceJpWN+GsHKQM658trZ7RhHo2</code><br>
<code>PR0ib+D7hWQprcktqutTfRFPMrgcFTPXKeR57cxvjk+B2LoLSOom3oTNEtUaMuBE</code><br>
<code>8E/jbONX34QsHWDKfLc3XpLEN+bO65AfTiR4/qtnZBmldBUG9xbrW0qcWz+M5P3S</code><br>
<code>6ssbor3VDxxrX+Fv6pJccwlgYNFQxQOz8GrZhF0cU48e+0XpU2NFeyueHQ8lb9yY</code><br>
<code>dvhc7mkGc87iIb+ILah57Wqi52Jd4f0DS2zkxN6ab5/UVEkffNwXfjN0IW28Ga4B</code><br>
<code>tZvoXVGVJo4vsGytMFdMRzRB/uAQAI21c3TTrO4TL42NcFQ0RY7yAlaKzXTXVNxC</code><br>
<code>8v/QQKIsDrNvs4w15rF/t2LXc8Cr3aUNuDtE7x+FaNwZLypCe+RFOy66AG2ENuNt</code><br>
<code>5tTGN3mgbJZl+01Cd1xPpOzmRfAJnH7YD+J4QuCEEgraAXPfp3MhjeHWtQaWDu29</code><br>
<code>fbTtPx0k/Bh0qxHFPWxhnYpktnjZEoMmwPMBeitCvcr66UzUmezgVZc0HxJ/LO9B</code><br>
<code>ss7P3egv60wPnXn579wDGnIriDUhHRcn2KuMI7eT4pL4HHjAAJB/8+vcUzYPuqtx</code><br>
<code>ULf5ciu8V+ajzHtqBcgwNR/gm/7i+4qKPo14fYBftH5PDj9iD88WIQX7paVbYHJZ</code><br>
<code>jrmnpM2iniL/DRVuxqAPToIc4hMXj8YPeTqS/1ckOzyYgFI9aRaLxZOR0uno1WTR</code><br>
<code>BifwOcy3NTwSHK/6YbtJbqoVwISJrGUuvOfBlkJZVlCzVsPG1+QZaPAL3HxVXavY</code><br>
<code>gCu2hze4OOWUe2Xuqihw8hb+F1rhP64/QtpjPxgLLb1NIBpm6OgdZjRjCbl9xnd3</code><br>
<code>RvH6hYxO+zgdn3icn2fFHhdZ7xtYcZZrg9QOXuv6LDvVe5I4VyszNs0jtdcx0P+T</code><br>
<code>5VIrKFAYyf0CCuL/UQTRrW0SrKOV/RZHuvdpVYK3YIAyd49kKjLk6O9awFQy7cXq</code><br>
<code>3PhjatBiuQINBFzwOeoBEACt8eaLW7jX3n5tQQ+ICeGOBIVbzAnXlH9bjdTqollM</code><br>
<code>+iiwkdlBNNEGku7+uQ9dTofem6cbSUXuh5kJNLy5tUIG4oGZLvpAjLdHP8zslgTg</code><br>
<code>lQymoWSbv2ss4pq8xoDbp6E51dkowkyFSuELZKMFHgPiJbfYXxQmbwEiFhGs4+21</code><br>
<code>lwtI4tVO9zs1XbzJD9XtomxkcYaePeBxpI9JnrWIUKt70JPZi/QcxPMG2si/Yitn</code><br>
<code>CVamcVw8Wri+W7MAJW3SyNjJUqx/cIOib8vdZVxvdWRIZmdkWkFO6vv4IotEBCfl</code><br>
<code>t6cD0EIy3Ijn3nDDf59v7wpdWXidjzVjKF0F8jUiX6S/ZuEz4lvdotpCgJGhDmdi</code><br>
<code>4pVCYbmShKbffgcSJ/BWn4wCOHKPA+XB75zzPj17dcWR8D9GM/sgusJy2fbHDcOd</code><br>
<code>ADPynKW3Ok1CENJDx7DTDwm2fPRMut4utSL1FMSl7zBDRabcPr1nw+zERjmSjm3R</code><br>
<code>91ayrQ9UKlP/4P8Xkhjc3FFWrRQ1Q7/SlkUmrTqSouQcOolGMa2ENNgqNeOY7oE5</code><br>
<code>xnPs64TLAzQ9z66u0dHTMODAS1A6C0l66LrPVYGoQLDkM7WQn7zznFdnKR2nsPOU</code><br>
<code>i0mMdyrG/62iARtNvuF4xdsUAoCKti3wOsXRuUhiXei4N4qdr8IaIEIFgYEKKtaq</code><br>
<code>zwARAQABiQRyBBgBCgAmFiEEFPJmgtCRbN2B43ttYbe1JtmPA1MFAlzwOeoCGwIF</code><br>
<code>CQPCZwACQAkQYbe1JtmPA1PBdCAEGQEKAB0WIQQJezEwd65ioC+E2k3xpmaPu31X</code><br>
<code>LgUCXPA56gAKCRDxpmaPu31XLopQEACKv8mYt4aMc0oA25UJXMRig2lXJDqOZBUS</code><br>
<code>vFFm8t6XgdG0zFdzFo4gqpje68kNyt9duhvOMsVwkzUr+5Di7FccvgwceU3X5ngW</code><br>
<code>pnV/GcXg79m5viipWUdBRoyZ90oi4D5K6fhlmszmWyiD7KDrjdtIdGnjAuprztkc</code><br>
<code>/JBlIwlmu/40JyDR5Dfxp256DlzsJ/HH8LbdjJG/F0XvtZUwcHefa7mDXtIWszsM</code><br>
<code>oJnEoLzOkZvJ13rhJcTHVQImClyS3o9+Pk6DTfy4Ad0w+9nF0rZp+8/GXZGilfn/</code><br>
<code>NXMj0elYu5WiyCBqargRkrHpebNKW9jxRca02aDS2Yrf8dlseO1d9FXZPOBWIxDR</code><br>
<code>G++TqRhBK8FUW00DikRDrrV5RsIiXtgtRqH+hwknE33i8m8/KKC5/pUl3Af5f+vM</code><br>
<code>KsT3s1mMX2zA+NmLUxJCXLz70WqLoShI8QEj+RLk9yuk97bo7KoNSv6xNwXotJKz</code><br>
<code>p08VAnVNX/QddmV6Z7SnocEs+S6Z0L69sEffMgUaCkH09mIt1yu0DaeOl7fM2iD3</code><br>
<code>VcO6jJ94Dg8olkhBgrZERe3sXR2fciFtsqHxYc9zP7YyL7vPbUQ8BogxEfIQZPGd</code><br>
<code>pnG5pTM0NSX/mgkOWI2VJFDe/rOFTdTk+8mKVnFdaUfHA48qIeS0V0zMLd4OZkrY</code><br>
<code>lW3iKvZps6IAEACauiivWdvKvJgKMyi3fvicXn4qL8nV1X6lmOBqDn4bb0N0mtpi</code><br>
<code>qXfvG950+29rcCJSj6qSMVj8ZHuwVktrEoWX6lpJbWwEdUh+35DnjfGOYN8gW8bx</code><br>
<code>0CfyqEx50W++DK5Wj+L+DL7jgJ/l7dMKxLdjijkg+v4yI516nzRbrx3x77U8n+H1</code><br>
<code>V9bHrDfScESnr3PtWS4ze4yDrr9Xp+YK8A7RkIctH2ToyEixin8utvfa56dGpUai</code><br>
<code>7gIRZ+0btWY0FX6g/VRHwwhLIzTsaFveQGuzFbXaGkOhRASitKtbQo2fD39qAMix</code><br>
<code>kKOctN9A/nA3dZU8BlJj7258+P36jQDOilr2Y7RlTSTZS5aXeAPbwILwKCNcDjV0</code><br>
<code>keerGSqiV2zkiH0vAJcxVokn+iMj6VOaM1RyxskgFara0Vt3IuAjnirES/OVuIkh</code><br>
<code>gpebmGXBPcHqLWpFDtEdLv6YtOwScE0eYb5/SA3XsmK3qgzEAzBfchwl4PqAhiQA</code><br>
<code>f/tbx5EgAUbFmwhEcgd9xMY5w6+8/5FjoXwHYmdfjKT9iD7QxF3LnymskoKQQGWB</code><br>
<code>HiwJjaA8LYPpopUg9we00zNdSGNXv1Lau9AM//ATiusH8iLJj33ofQh6FviQG6W3</code><br>
<code>TlLPqx/oIxxNj5bPAQy6dRKB1TxlWr4X0pUWxuqBeObPoHS9j0ysxKPru7kCDQRk</code><br>
<code>VUBzARAA1cD3n5ue0sCcZmqX2FbtIFRsk39rlGkvuxYABsWBTzr0RbRW7h46VzWb</code><br>
<code>OcU5ZmbJrp/bhgkSYRR3drmzT63yUZ62dnww6e5LJjGSt19zzcber9BHELjqKqfA</code><br>
<code>fLNsuZ7ZQ5p78c6uiJhe8WpbWogbspxJ20duraLGmK4Kl23fa3tF0Gng1RLhoFcS</code><br>
<code>VK/WtDZyC+elPKpch1Sru6sw/r8ktfuhNIRGxdbj/lFHNVOzCXb3MTAqpIynNGMo</code><br>
<code>cFFnqWLZLtItphHxPUqVr6LKvc3i3aMlC6IvLNg0Nu8O088Hg3Ah9tRmXKOshLjY</code><br>
<code>jPeXqM9edqoWWqpzxDTNl6JlFMwP+OacMKsyX7Wq+ZXC/o3ygC/oclYUKtiuoGg4</code><br>
<code>7fSCN2GS3V2GX2zFlT6SEvEQQb2g5yISLX9Q/g9AyJdqtfaLe4Fv6vM4P1xhOUDn</code><br>
<code>jmdoulm3FGkC701ZF7eFhMSRUM9QhkGH6Yz2TvS4ht6Whg7aVt4ErIoJfj9jzJOp</code><br>
<code>6k9vna5Lmgkj8l19NTiUQ7gk98H3wW4mRrINxZ2yQD47V/LJ+tUamJc5ac+I0VP7</code><br>
<code>c15xmKEJ2rfGCGhiSWQwZZw7Y2/qoADSBlI28RlBTuRP2i6AdwyJU+75CzxGzMpr</code><br>
<code>/wBLhZT+fNRV4HHd5dgR3YxajpkzZ6wXL2aaJhznFEmLBLokOwMAEQEAAYkEcgQY</code><br>
<code>AQoAJhYhBBTyZoLQkWzdgeN7bWG3tSbZjwNTBQJkVUBzAhsCBQkDwmcAAkAJEGG3</code><br>
<code>tSbZjwNTwXQgBBkBCgAdFiEErdcHlHlwDcrf3VM34207E/PZMnQFAmRVQHMACgkQ</code><br>
<code>4207E/PZMnRgdg/+LAha8Vh1SIVpXzUHVdx81kPyxBSaXtOtbBw6u9EiPW+xCUiF</code><br>
<code>/pyn7H1lu+hAodeNFADsXmmONKcBjURVfwO81s60gLKYBXxpcLLQXrfNOLrYMnok</code><br>
<code>r5FfuI3zZ0AoSnEoS9ufnf/7spjba8RldV1q2krdw1KtbiLq3D8v4E3qRfx5SqCA</code><br>
<code>+eJSavaAh3aBi6lvRlUSZmz8RWwq6gP9Z4BiTTyFp5jQv1ZKJb5OJ+44A0pS+RvG</code><br>
<code>DRq/bAAUQULLIJVOhiTM74sb/BPmeRYUS++ee10IFW4bsrKJonCoSQTXQexOpH6A</code><br>
<code>AFXeZDakJfyjTxnl3+AtA4VEp1UJIm0Ywe0h6lT0isSJPVp3RFZRPjq0g+/VniBs</code><br>
<code>vYhLE/70ph9ImU4HXdNumZVqXqawmIDRwv7NbYjpQ8QnzcP3vJ5XQ4/bNU/xWd1e</code><br>
<code>M2gdpbXI9B46ER7fQcIJRNrawbEbfzuHy5nINAzrznsg+fAC76w2Omrn547QiY2e</code><br>
<code>y7jy7k79tlCXGXWAt9ikkJ95BCLsOu5OTxPi4/UUS2en1yDbx5ej7Hh79oEZxzub</code><br>
<code>W1+v5O1+tXgMOWd6ZgXwquq50vs+X4mi7BKE2b1Mi6Zq2Y+Kw7dAEbYYzhsSA+SR</code><br>
<code>Pu5vrJgLTNQmGxxbrSA+lCUvQ8dPywXz00vKiQwI9uRqtK0LX1BLuHKIhg4OgxAA</code><br>
<code>nmFSZgu7wIsE2kBYwabCSIFJZzHu0lgtRyYrY8Xh7Pg+V9slIiMGG4SIyq5eUfmU</code><br>
<code>8bXjc4vQkE6KHxsbbzN6gFVLX1KDjxRKh+/nG/RDtfw/ic7iiXZfgkEqzIVgIrtl</code><br>
<code>Db/DK6ZDMeABnJcZZTJMAC4lWpJGgmnZxfAIGmtcUOA0CKGT43suyYET7L7HXd0T</code><br>
<code>M+cJRnbEb7m8OexT9Xqqwezfqoi1MGH2g8lRKQE4Z2eEFvCiuJnCw547wtpJWEQr</code><br>
<code>Gw1eqL3AS8Y051YqblbXLbgf5Oa49yo630ehq9OxoLd7+GdWwYBlr/0EzPUWezhd</code><br>
<code>IKKvh1RO+FQGAlzYJ6Pq7BPwvu3dC3YYdN3Ax/8dj5036Y+mHgDsnmlUk8dlziJ0</code><br>
<code>O3h1fke/W81ABx4ASBktXAf1IweRbbxqW8OgMhG6xHTeiEjjav7SmlD0XVOxjhI+</code><br>
<code>qBoNPovWlChqONxablBkuh0Jd6kdNiaSEM9cd60kK3GT/dBMyv0yVhhLci6HQZ+M</code><br>
<code>f4cbn0KtayzuQLOcdRCN3FF/JNQH3v6LA1MdRfmJlgC4UdiepBb1uCgtVIPizRuX</code><br>
<code>WDjyjzePZRN/AqaUbEoNBHhIz0nKhQGDbst4ugIzJWIX+6UokwPC3jvJqQQttccj</code><br>
<code>Ay6kXBmxfxyRMB5BEeLY0+qVPyvOxpXEGnlSHYmdIS65Ag0EZ9KQfQEQAOVIyh0s</code><br>
<code>ZPPFLWxoFT0WhPzHw8BhgnCBNdZAh9+SM0Apq2VcQKSjBjKiterOTtc6EVh0K2ik</code><br>
<code>bGKHQ1SvwNdsYL01cSkJSJORig/1Du1eh+2nlo8nut7xT//V+2FQyWFCLDeQvLlA</code><br>
<code>s3QHMrMYxTcwNk3qi/z1Z5Q4e6Re2aKRU00LtSomD6CKWy9nAaqTRNzzdndJwIyC</code><br>
<code>yshX4bbUzAzE7Wbgh/E0/FgBGw87LYITqyU6US4lvoUXB+89XxwMxO9I74L118gX</code><br>
<code>Eyybz+JN0/w87hXAKnaKjasSvobKE4mau8SXqmOO66MxiMaF4Xsmr3oIwo8q9W5d</code><br>
<code>+hA+t225ipq2rZZErmPL44deMCeKmepjLTa9CoxX2oVpDWGOYFRyJRkLDyyH4O3g</code><br>
<code>Co/5qv4rOTJqPFfKPtrjWFJKGf4P4UD0GSBX2Q+mOf2XHWsMJE4t8T7jxQCSAQUM</code><br>
<code>wt6M18h1auIqcfkuNvdJhcl2GvJyCMIbkA3AoiuKaSPgoVCmJdbc6Ao9ydmMUB5Q</code><br>
<code>1rYpMNKCMsuVP9OcX8FoHEVMXOvr0f6Wfj+iHytfO2VTqrw/cqoCyuPoSrgxjs1/</code><br>
<code>cRSz5g9fZ0zrOtQyNB5yJ3YPTG3va1/XLflrjPcT4ZUkej9nkFpCNWdEZVWD/z3v</code><br>
<code>XBGSV11N9Cdy60QbD4yZvDjV2GQ+dwAF1o1BABEBAAGJBHIEGAEKACYWIQQU8maC</code><br>
<code>0JFs3YHje21ht7Um2Y8DUwUCZ9KQfQIbAgUJA8JnAAJACRBht7Um2Y8DU8F0IAQZ</code><br>
<code>AQoAHRYhBAm+7WPzRiot/6s7h17LZJfBogJWBQJn0pB9AAoJEF7LZJfBogJW9I4Q</code><br>
<code>AJbv4Rhb4x6Jl75x2Lfp46/e3fZVDhzUdLjK8A/acRF7JRBuJVJRaijJ5tngdknm</code><br>
<code>lmbzfqlyzsMWUciAwVJRvijNFDeicet5zJpBRsXEUAug3iVCD1KlVvLzjCi9Eb9s</code><br>
<code>6xCQjSJ8DZE020s41wdqtb1nziDASAkg+YH2DzpTEaZVNM39uNDKbaJLYIjKA9MV</code><br>
<code>1YHArqUldFsoofBe4zIZRFyvMD7Gmr7Xm0IWYLrfmnenm1JJYIkvGUeVoP8dEonA</code><br>
<code>VhLVwvwwufobV0qdtMfhZsgFwf1XSHI9MtD4yAVtBqBTkfFeRLnBjJK/ywYxGqba</code><br>
<code>dt1b57I4ywTQ16oXNrlTF1Su0I8i/fo0i/9ohNl3opN3LbaEbhT37M4xpy4MgL2F</code><br>
<code>thddc2gWvF/8TFRaXw7LaLSR7HwO+Y0CpOtV/Ct4RzKEulY5DpV9b1JQJhpLcjMz</code><br>
<code>+pBDAM3KJuiV6Bcfoz5PZowFy74UmE02Vzk/oyuI/o4KMihy0UzWQVkOZTTu4eON</code><br>
<code>ktgGiZOnRFdiLKVgeLEDXTLdhbuwGS2+wX3I7lLP9AWpK8Ahc81eUwU6MwdbfwfJ</code><br>
<code>1ELtKaa/JmMjaWkr5aGrp88d8ePR9jYA47Z2q0esB67pRJVe0McVJlu9GQGq05S7</code><br>
<code>lZKs6mi9dHTzeHwua//IXHMK0s3WhMU7vGwJ3E2+pTstf8AQALSwkezD3QchPV+5</code><br>
<code>CAUYY7CmMXB6zzIU18wCS61Y8QdDvqmtWHdMVTp4xT14fS6cvB4uFzacGQJ7CVIW</code><br>
<code>eZgwEFzZiev3dKpnUOGg0WQSwmQQA0JCg6/qS0AeUPINjhWtNcR7voCqAYeRcjo4</code><br>
<code>7UJclD/KKNTCn27btHRaEmpTdTtC6sxiVElFObb3a9tHXqwLWp8gJ+NZ+6mlrvvH</code><br>
<code>2hm1CAyQTDRYC7nN69QJrKHR8HA3AeR5figQHLwvmfQlV2erZE17GT+L5t0HxX/H</code><br>
<code>KZCim91PApqa+7iY0eKPAG5iacABrBi9zzh/ex0ovvuxsBDKUFCSu7HIivnAVrdS</code><br>
<code>/kbO1qJ5I3MBMp0dlQ6PS6LeZIRhxts0aPPZedsXytoL7kFLISfJ55AuhJpskz+5</code><br>
<code>5uviJhp/H3zNBYtQ+dmFmp4RRk/Nvu0zv6OGtaZy6M5X24Pbzb/OApBML84cEmb3</code><br>
<code>iZie9J2ZYW68/D96sP09x6GItCJlCIdQZkRcwmkQwgtq9sJDw92/vSGeYdRn+oCA</code><br>
<code>xJ14eObCsVwcfJARLt45btEnx+zRCAHAHQHpV6qTGT6nqg57XuM9iNNdyTGKRU+I</code><br>
<code>klgb9LRxVAQfbn5uXYb5j2ox5pjxtbXTf9Lbo7RkygcWSKZPWmYgGsKS6jmXkDa/</code><br>
<code>TyOlPxkbaknpPbYMBztRT4Ju0VU4iQJSBCgBCgA8FiEEFPJmgtCRbN2B43ttYbe1</code><br>
<code>JtmPA1MFAmp0bIIeHQJXZSBubyBsb25nZXIgdHJ1c3QgdGhpcyBrZXkuAAoJEGG3</code><br>
<code>tSbZjwNTXUcQAIXCoftSFWYug+FmtfkQm8JFRA7NvcK9FcWLpknonbTj5XFhdj5X</code><br>
<code>EAdaYCPhit78h5iMW1nEEt9NAjuUCymqIYejHgH1G5TAy+bqmceQwuWJjy1JJ4V9</code><br>
<code>/UY+KRW7btOzAQINFfXFYJU/9nyCf8ToStpra/C3SYL/11ahsL++bmGx2aXF/l3C</code><br>
<code>BwuQihko6Amg+VbKCjT0ddzNcY6HaDWu/gZWbfyyGWlNt/Tm97okS/JJoXsX7rnd</code><br>
<code>zoqRBPv+rpJT3W67HfglPYy+1pUMfG8rvt9NkBf5A5onIs70j7A0NtSwgXveH2pB</code><br>
<code>CxmocGThQYqh75LkqSWCSGdl5TBIbiBI4SSPb2E5T56bBKJItfU9Ch66qjk/4b9/</code><br>
<code>tiS25JLO/ysdUdF0xM6EvVjeuCKy4PoeYqpa3T2YpOyMYjHo9Ohxw9Ikoe7x6GVD</code><br>
<code>EMbBKifZxc5JKwmgpCtPhT1y9jLa54KOx6sPn3hgmL8DkOPpozIXlO5iUV3eMsXE</code><br>
<code>JlamBQJfo58yREcyh+7mx7CM2P9O8SVSE90vssw1s/0vv9pgzLB0fkDU8S9Ukm4j</code><br>
<code>fKZ9HjhpGcTZoSyC+P4/OcM7woIf1d9tB0UV8h16NLoggnyF1qm6mpPml8iPdtlj</code><br>
<code>380ItMqZQIitrTtaiwh/Nhraf8jNUNREYunWrF8bN4GE8+0aptki15op</code><br>
<code>=LpNb</code><br>
<code>-----END PGP PUBLIC KEY BLOCK-----</code></p>
<p>The post <a href="https://blog.mozilla.org/security/2026/08/10/updated-gpg-key-for-signing-firefox-and-thunderbird-releases/">Updated GPG key for signing Firefox and Thunderbird Releases</a> appeared first on <a href="https://blog.mozilla.org/security">Mozilla Security Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Desktop Calendar: A Design Journey]]></title>
<description><![CDATA[Hello, Thunderbird community and followers of the blog! This is Jesse from the design team. Today’s post is about our recent journey in redesigning the calendar portion of Thunderbird, and what you can expect us to deliver in the near future. The calendar is a key part of any productivity toolset...]]></description>
<link>https://tsecurity.de/de/3713868/tools/desktop-calendar-a-design-journey/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3713868/tools/desktop-calendar-a-design-journey/</guid>
<pubDate>Tue, 11 Aug 2026 00:59:36 +0200</pubDate>
<content:encoded><![CDATA[<p>Hello, Thunderbird community and followers of the blog! This is Jesse from the design team. Today’s post is about our recent journey in redesigning the calendar portion of Thunderbird, and what you can expect us to deliver in the near future. The calendar is a key part of any productivity toolset, from your PC Desktop […]</p>
<p>The post <a href="https://blog.thunderbird.net/2026/08/desktop-calendar-a-design-journey/">Desktop Calendar: A Design Journey</a> appeared first on <a href="https://blog.thunderbird.net/">The Thunderbird Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.12]]></title>
<description><![CDATA[@oh-my-pi/pi-ai
Fixed

Fixed account-scoped Codex cyber-policy denials bypassing sibling credential rotation; replay-safe requests now try every configured account before surfacing the error.

@oh-my-pi/pi-catalog
Fixed

Fixed dynamically discovered alibaba-token-plan/qwen3.8-max metadata so thin...]]></description>
<link>https://tsecurity.de/de/3711794/tools/github-v17212/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3711794/tools/github-v17212/</guid>
<pubDate>Sun, 09 Aug 2026 04:07:28 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-ai</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed account-scoped Codex cyber-policy denials bypassing sibling credential rotation; replay-safe requests now try every configured account before surfacing the error.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed dynamically discovered <code>alibaba-token-plan/qwen3.8-max</code> metadata so thinking controls and image input are available (<a href="https://github.com/can1357/oh-my-pi/issues/8019" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8019/hovercard">#8019</a>).</li>
<li>Routed <code>opencode-go/deepseek-v4-flash</code> through the OpenAI responses API — the OpenCode Go gateway does not serve this model at <code>/zen/go/v1/chat/completions</code>, only at <code>/zen/go/v1/responses</code> (<code>deepseek-v4-pro</code> keeps chat completions).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed shell minimization replacing meaningful <code>rustc --print</code> output with <code>OK</code>.</li>
<li>Fixed shell minimization altering outputs shorter than 1,000 characters; these now pass through unchanged.</li>
<li>Fixed primary and advisor Codex sessions falling back to another provider before trying sibling accounts when an account lacks Trusted Access for Cyber approval.</li>
<li>Fixed task subagent assistant turns being omitted from the per-model TPS/TTFT aggregates shown by <code>/models</code>. (<a href="https://github.com/can1357/oh-my-pi/issues/8022" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8022/hovercard">#8022</a>)</li>
<li>Fixed terminal-title spinner writes consuming CPU during WSL/ConPTY agent waits by using the same static working separator as native Windows (<a href="https://github.com/can1357/oh-my-pi/issues/8012" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8012/hovercard">#8012</a>).</li>
<li>Fixed long-running sessions leaking memory for every completed keep-alive <code>task</code>/scout subagent: a disposed (parked) subagent's <code>AgentSession</code> stayed pinned through the lifecycle adoption record's reviver closure, and <code>dispose()</code> never released the message array, append-only provider transcript, session-manager entries, or the raw-SSE debug buffer, so heavy transcripts and captured provider wire frames accumulated for the process lifetime (<a href="https://github.com/can1357/oh-my-pi/issues/8003" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8003/hovercard">#8003</a>).</li>
<li>Fixed Z.AI web search dropping sources and exposing raw JSON when MCP responses double-encode content text (<a href="https://github.com/can1357/oh-my-pi/issues/8000" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8000/hovercard">#8000</a>).</li>
<li>Fixed <code>/handoff</code> masking empty/whitespace-only generation and harness-initiated aborts as "Handoff cancelled"; manual empty generation now surfaces a logged failure, harness aborts preserve their reason (or report "Handoff aborted by session"), and auto-handoff still falls back to context-full compaction (<a href="https://github.com/can1357/oh-my-pi/issues/7993" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7993/hovercard">#7993</a>).</li>
</ul>
<h2>@oh-my-pi/hashline</h2>
<h3>Breaking Changes</h3>
<ul>
<li><code>PUT N.=M @name</code> over a <em>span</em> now throws when <code>@name</code> was never captured, instead of warning and deleting the range. Pasting a never-captured register over a span wrote nothing back, so a mistyped or hallucinated register name silently destroyed content. Gap pastes (<code>PUT &gt;N @name</code>) keep the warned no-op behaviour from 17.2.11.</li>
</ul>
<h3>Added</h3>
<ul>
<li><code>applyEdits</code> now takes a <code>path</code> and uses the native tree-sitter parser to decide every boundary repair that depends on delimiter <em>semantics</em>. The authored edits are materialized first: if that result parses, it is returned untouched, so a <code>}</code> inside a regex literal, a string, or Markdown prose is never mistaken for a block closer. A closer-spare repair lands only when the repaired result is <em>shown</em> to parse — never on delimiter arithmetic alone — so an unrecognized language or an unprovable candidate leaves the edit exactly as authored. Wired through the patcher, recovery, section apply, and the edit tool's preview.</li>
<li>Auto-repair for replacement ranges that start one line early on a structural closer (the <code>}</code> of the construct above): the closer is spared and the payload lands after it, gated on the same parse proof.</li>
<li>Warning for balanced payloads over ranges that end mid-block (deleting opener(s) whose closer(s) survive below), pointing at the block-op remedy (<code>PUT N*:</code>). Raised only when the baseline parsed and the authored result does not, so it cannot fire on prose or an unknown language.</li>
<li>Warning when a <code>+</code> body row is itself a valid hunk header (<code>+CUT 5.=9</code>). Such a row is literal content by definition and is inserted into the file as text; naming it at the moment it happens turns a silent source-file corruption into an actionable diagnostic.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Rejected patches whose pasted <code>N:TEXT</code> read-output rows repeat a source line number. Each such row is recovered as a single-line <code>PUT N.=N:</code>, so a body written as consecutive lines under one number collapsed through the same-range coalescer, keeping only the last row and silently dropping the rest — in one incident replacing a block opener with <code>}</code> and deleting the following statement. The error now names the repeated line and teaches the explicit <code>PUT</code> form.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Changed</h3>
<ul>
<li>Consolidated every shell builtin into one crate, <code>crates/pi-builtins</code> (the renamed and de-vendored <code>brush-builtins</code> fork), with one module per command. The 46 <code>crates/vendor/uu-*</code> crates, <code>crates/vendor/jaq</code>, <code>crates/pi-uu-grep</code>, <code>crates/pi-uu-diff</code>, and everything that had accumulated inline in <code>pi-shell</code> (<code>fd</code>, <code>cmp</code>, <code>which</code>, the moreutils set, and the <code>ps</code>/<code>top</code>/<code>pgrep</code>/<code>pkill</code>/<code>pidwait</code>/<code>kill</code>/<code>sleep</code>/<code>timeout</code>/<code>nohup</code> process builtins) now live beside the bash builtins they sit next to at runtime, and register through <code>pi_builtins::utility_builtins()</code> and <code>pi_builtins::process_builtins()</code>. <code>pi-shell/src/shell.rs</code> shrank by ~4,200 lines.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>sort --compress-program</code> spawning its compressor and decompressor without the shell's working directory or exported environment, so a program installed only on the shell's <code>PATH</code> was not found, and with stderr inherited from the host process, where its diagnostics could corrupt the TUI. Both children now launch through the shell's child context and their stderr is forwarded to the command's own file descriptor.</li>
<li>Fixed <code>realpath -q</code> exiting 0 after a failed operand; it suppresses the diagnostic but now reports failure, matching GNU.</li>
</ul>
<h3>Removed</h3>
<ul>
<li>Removed <code>crates/pi-uutils-ctx</code>. Utility builtins previously reached their stdio, working directory, and environment through a thread-local context installed around each invocation; they now receive an explicit <code>Host</code> value (<code>pi-builtins/src/host.rs</code>) carrying the command's file descriptors, the shell working directory, the exported environment, cancellation, and the accumulated exit status. The uutils entry-point plumbing (<code>uumain</code>, <code>UResult</code>/<code>UError</code>, <code>set_exit_code</code>, <code>crate_version!</code>) went with it; each utility is now an ordinary brush builtin implementing <code>host::Utility</code>.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed slow Loader paints exceeding their cost-aware CPU duty cycle on WSL/ConPTY when a 200 ms backpressure cap was shorter than the proportional delay (<a href="https://github.com/can1357/oh-my-pi/issues/8012" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/8012/hovercard">#8012</a>).</li>
<li>Fixed display-math (<code>$$…$$</code>) fractions rendering as fragmented text when the numerator and denominator are written on separate source lines: <code>latexToBlock</code> treated the top-level newline between <code>\frac{num}</code> and <code>{den}</code> as a row break, severing <code>\frac</code> from its denominator. Such argument-continuation newlines are now preserved so the fraction stays stacked (<a href="https://github.com/can1357/oh-my-pi/issues/7996" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7996/hovercard">#7996</a>).</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(session): surface empty handoff generation as failure not cancel by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5096683452" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7994" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7994/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7994">#7994</a></li>
<li>fix(tui): keep display-math fractions intact across source newlines by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5096728323" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7997" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7997/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7997">#7997</a></li>
<li>fix(web-search): parse double-encoded Z.AI results by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5096832572" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8002" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8002/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8002">#8002</a></li>
<li>fix(agent): release parked subagent session memory on dispose by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5096957833" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8004" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8004/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8004">#8004</a></li>
<li>fix(tui): bound WSL idle animation CPU by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5097667885" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8014" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8014/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8014">#8014</a></li>
<li>fix(catalog): correct qwen3.8 max discovery metadata by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5097968543" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8021" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8021/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8021">#8021</a></li>
<li>fix(task): record subagent model performance by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5098286722" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/8023" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/8023/hovercard" href="https://github.com/can1357/oh-my-pi/pull/8023">#8023</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.11...v17.2.12">v17.2.11...v17.2.12</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.11]]></title>
<description><![CDATA[@oh-my-pi/pi-ai
Breaking Changes

Fixed handling of GitHub Copilot's model_not_available_for_integrator error to prevent unnecessary retries, preserving the actionable available models list.

Added

Added support for reporting Cursor personal monthly USD quotas and remaining balances, labeled by ...]]></description>
<link>https://tsecurity.de/de/3710614/tools/github-v17211/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3710614/tools/github-v17211/</guid>
<pubDate>Sat, 08 Aug 2026 00:37:59 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-ai</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Fixed handling of GitHub Copilot's model_not_available_for_integrator error to prevent unnecessary retries, preserving the actionable available models list.</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added support for reporting Cursor personal monthly USD quotas and remaining balances, labeled by verified profile email accounts.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where ANTHROPIC_BASE_URL was ignored for Anthropic chat requests, ensuring requests are routed to the configured host and forwarding ANTHROPIC_CUSTOM_HEADERS to non-official gateways.</li>
<li>Fixed an issue where a legacy pre-organization login credential could persist and cause a permanent error row in omp usage even after a successful organization-scoped re-login.</li>
<li>Fixed an issue where lazy provider streams (including Amazon Bedrock, Google, Cursor, Devin, and Ollama) ignored model-specific idle timeouts, which previously caused healthy but slow reasoning turns to prematurely time out.</li>
<li>Improved error classification for Simplified Chinese quota-exhaustion and rate-limit messages, ensuring affected credentials are correctly rotated or backed off instead of being treated as unknown errors.</li>
<li>Classified subscription and plan-cap 429 responses as rotatable usage limits rather than transient rate-limit throttles, enabling smoother credential rotation.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Fixed</h3>
<ul>
<li>Increased the default stream idle-timeout floor on Amazon Bedrock to 900 seconds for reasoning and adaptive-thinking models (such as Claude) to prevent premature watchdog timeouts during long reasoning stretches.</li>
<li>Fixed Devin model families (including SWE-1.7, Claude 5, Gemini 3.6 Flash, Kimi K3, Grok 4.5, and Inkling) to correctly group as logical models with reasoning-effort routing instead of separate wire variants.</li>
<li>Added missing context-window and output-token limits for dynamically discovered Alibaba Token Plan models.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added support for the Agent Plugins 1.0.0 standard, enabling automatic discovery, validation, and secure execution of compliant plugin packages.</li>
<li>Added the <code>omp share &lt;session&gt;</code> command to share saved sessions by ID prefix or file path without launching the agent.</li>
<li>Added the <code>AGENT=1</code> environment variable to child processes spawned by <code>coding-agent</code> to allow downstream tools to detect agent-driven execution.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Consolidated Exa web-search configuration under <code>exa.enabled</code>, automatically migrating legacy <code>exa.enableSearch</code> values and removing obsolete Researcher and Websets settings.</li>
<li>Removed stale <code>computer.backend</code> values during configuration migration.</li>
<li>Updated documentation and error messages for the JavaScript/TypeScript debug adapter (<code>js-debug-adapter</code>) to clarify supported installation paths (Mason, standalone tarball, or <code>JS_DEBUG_DAP_SERVER</code>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where <code>/reload-plugins</code> and the Agent Control Center failed to propagate updated agent definitions to existing tools without a restart.</li>
<li>Fixed legacy Pi extensions failing to load when calling <code>pi.unregisterProvider()</code>, ensuring provider replacements take effect immediately.</li>
<li>Fixed zero-width daemon readiness and wait regex matches being rejected by the hub wire decoder.</li>
<li>Fixed proxy model discovery preferring bundled catalog names over proxy-reported names, allowing <code>omp models refresh</code> to correctly update display names.</li>
<li>Fixed Windows compiled binary builds failing due to backslash-separated paths in <code>Bun.Glob.scan</code> producing invalid JavaScript in virtual modules.</li>
<li>Fixed the Ctrl+O (<code>app.tools.expand</code>) shortcut not expanding truncated tool output when a tool-approval prompt or selection dialog had keyboard focus.</li>
<li>Improved <code>omp commit</code> error reporting when pre-commit or commit-msg hooks fail, displaying the hook's own message and exiting non-zero cleanly instead of printing bundled source code.</li>
<li>Fixed <code>omp commit --push</code> exiting with code 0 without pushing when the working tree is already clean; it now correctly pushes existing commits.</li>
<li>Fixed <code>omp commit</code> exiting with code 0 when the commit agent failed and fell back to a mechanical commit; it now exits non-zero to indicate the fallback was used.</li>
<li>Fixed strict output schemas being rejected when native JSON Schema definition maps contain <code>ref</code> or applicator branches use <code>properties</code> without <code>type</code>.</li>
<li>Fixed shell syntax extraction in <code>cd &lt;path&gt; &amp;&amp; ...</code> commands to prevent redirects, extra arguments, or shell expansions from being incorrectly absorbed into the structured working directory path.</li>
<li>Applied reason-specific backoff to transient rate-limit retries and consolidated exhausted retry errors.</li>
<li>Fixed session-tree rows rendering as empty bullets for bookkeeping entries (such as title changes, credential pins, and mode changes); these are now hidden by default and properly labeled in <code>all</code> mode.</li>
<li>Fixed extension and custom tools inheriting same-named built-in TUI renderers, which could overwrite successful results with incorrect status text.</li>
<li>Fixed prewalk lifecycle handling to prevent plan injection on rejected same-model/same-effort arms, ensure consumed plan nudges do not return after context rebuilds, and prevent settings-enabled prewalk from implicitly re-arming restored sessions.</li>
<li>Fixed the todo completion reminder interrupting pauses when waiting for non-English questions (such as Chinese, Japanese, Korean, or Spanish prompts ending in <code>？</code> or <code>?</code>).</li>
<li>Normalized resolved file paths in read summaries, PDF image handles, and notebook errors to prevent agents from learning malformed paths.</li>
<li>Fixed a bug where a per-turn <code>before_agent_start</code> system prompt override was silently dropped during base-prompt rebuilds.</li>
<li>Fixed ACP <code>session/load</code> and <code>session/resume</code> failing with <code>ACP session not found</code> for sessions created under the legacy hashed project-directory scheme by falling back to a global ID scan.</li>
<li>Fixed <code>vault://&lt;name&gt;?op=...</code> commands targeting the active vault instead of the named vault in Obsidian CLI queries.</li>
<li>Fixed the status-line <code>session_name</code> segment to honor the <code>statusLine.sessionAccent</code> setting, falling back to the theme's accent color when disabled.</li>
<li>Fixed automatic <code>agent.continue()</code> paths failing to run context-fit maintenance when reverting to a smaller-context model after a cooldown expiry.</li>
<li>Fixed <code>/handoff</code> reporting "Handoff cancelled" for actual generation or stream timeout errors, ensuring the real error is surfaced.</li>
</ul>
<h2>@oh-my-pi/hashline</h2>
<h3>Changed</h3>
<ul>
<li>Pasting an empty named register (<code>PUT … @name</code> with no matching capture) now surfaces a warning listing available registers and removes the span target instead of throwing an error.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where pipe-numbered <code>read</code>/<code>search</code> rows copied into top-level and bare-body patch payloads were not properly recovered (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5090045419" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7905" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7905/hovercard" href="https://github.com/can1357/oh-my-pi/issues/7905">#7905</a>).</li>
</ul>
<h2>@oh-my-pi/pi-mnemopi</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where an interrupted local embedding model download could permanently corrupt the cache and silently disable semantic recall. The system now automatically detects incomplete model files, clears the corrupted cache, and retries the download.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Added</h3>
<ul>
<li>Added support for Windows hosts in <code>bun run build</code>, enabling local N-API builds against VS Build Tools without requiring a pre-configured vcvars prompt.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Replaced the miniaudio (<code>maudio</code>) dependency with in-house platform audio backends for <code>AudioCapture</code>/<code>AudioPlayback</code>: CoreAudio AudioQueue on macOS, shared-mode WASAPI on Windows, and PulseAudio (ALSA fallback) loaded via <code>dlopen</code> on Linux. Removes the bindgen/libclang requirement and the Windows rustc-ICE workaround from the native build.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed CPU feature detection (AVX2) on Windows hosts, resolving an issue where the native addon loader and local builds incorrectly fell back to the baseline variant, while improving startup performance by ~270ms.</li>
<li>Fixed <code>bun run build:bindings</code> failing on Windows due to incorrect resolution of the <code>@napi-rs/cli</code> entry point.</li>
<li>Fixed a compiler crash (rustc ICE) when building the <code>maudio</code> package for Windows.</li>
<li>Fixed synthesized macOS keyboard and pointer events suppressing physical user input.</li>
<li>Fixed several Wayland input and capture issues, including preventing read-only calls from acquiring persistent input control, fixing GNOME Wayland pointer input initialization, and resolving conflicts between <code>libei</code> input and PipeWire screen capture.</li>
<li>Fixed compilation of the <code>wayland-pipewire</code> Cargo feature.</li>
<li>Improved security on Wayland by cleaning up orphaned world-readable RemoteDesktop restore tokens on startup.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where Herdr panes lost native terminal scrollback during TUI transcript replacements or resize redraws.</li>
<li>Fixed an issue inside tmux where explicit display resets retained stale light/dark palettes and leaked terminal capability bytes into the editor.</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Added</h3>
<ul>
<li>Added <code>repair</code> and <code>rawKeys</code> options to <code>parseFrontmatter</code> to support spec-conformant loading (disabling lenient recovery and preserving keys verbatim), and exported <code>normalizeFrontmatterKeys</code> for manual key normalization.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed the in-house <code>marked</code> list tokenizer incorrectly consuming trailing blank lines at the end of input, ensuring correct list tightness and token generation matching standard <code>marked</code> behavior.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(tui): preserve scrollback in Herdr panes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chessl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chessl">@chessl</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5078798827" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7810" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7810/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7810">#7810</a></li>
<li>fix(coding-agent): clean up legacy Exa and computer settings by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chessl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chessl">@chessl</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5079298667" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7814" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7814/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7814">#7814</a></li>
<li>fix(coding-agent/tools): preserve native JSON Schema containers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kimprap/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kimprap">@kimprap</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5079409325" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7816" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7816/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7816">#7816</a></li>
<li>fix(ai): classify Simplified Chinese quota exhaustion as credential-rotatable by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/IceCodeNew/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/IceCodeNew">@IceCodeNew</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5080699687" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7828" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7828/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7828">#7828</a></li>
<li>fix(coding-agent): prefer proxy-reported model name over bundled catalog name by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vinhnguyen1211/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vinhnguyen1211">@vinhnguyen1211</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5081464111" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7832" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7832/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7832">#7832</a></li>
<li>fix(commit): report hook refusals cleanly and honor --push on a clean tree by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5081627253" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7836" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7836/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7836">#7836</a></li>
<li>fix(tui): make Ctrl+O expand tool output regardless of focus by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5081896468" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7840" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7840/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7840">#7840</a></li>
<li>fix(coding-agent): signalled fallback commits with a non-zero exit code by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhang17-24/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhang17-24">@zhang17-24</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5082644747" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7844" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7844/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7844">#7844</a></li>
<li>fix(catalog): enrich Alibaba Token Plan discovered model limits by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mustaqeem66/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mustaqeem66">@Mustaqeem66</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5083454267" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7849" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7849/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7849">#7849</a></li>
<li>fix(extensions): roll back providers after load failure by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mustaqeem66/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mustaqeem66">@Mustaqeem66</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5083725092" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7853" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7853/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7853">#7853</a></li>
<li>feat(coding-agent): mark child processes as agent-driven by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5083990908" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7854" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7854/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7854">#7854</a></li>
<li>fix(catalog): update Devin reasoning family routing by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/will-bogusz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/will-bogusz">@will-bogusz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5086031482" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7865" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7865/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7865">#7865</a></li>
<li>fix(status-line): honor sessionAccent toggle for session_name segment by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CaelumSea/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CaelumSea">@CaelumSea</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5086119373" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7867" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7867/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7867">#7867</a></li>
<li>fix(natives): prevent macos input suppression by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5086454638" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7873" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7873/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7873">#7873</a></li>
<li>fix(anthropic): honor ANTHROPIC_BASE_URL for chat requests by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5086716844" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7875" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7875/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7875">#7875</a></li>
<li>fix(auth): purge pre-org OAuth tombstone on org-scoped re-login by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5086824773" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7878" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7878/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7878">#7878</a></li>
<li>docs(agent-hub): document subagent observability by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5087243654" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7881" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7881/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7881">#7881</a></li>
<li>fix(natives): port wayland capture to pipewire 0.9 Rc handle API by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5087618001" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7887" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7887/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7887">#7887</a></li>
<li>fix(bash): constrain leading cd extraction to a single path token by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5087625249" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7888" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7888/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7888">#7888</a></li>
<li>fix(ai,catalog): widen Bedrock stream-stall watchdog via model compat by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/voonfoo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/voonfoo">@voonfoo</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5087855708" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7892" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7892/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7892">#7892</a></li>
<li>fix(natives): make Windows-host builds and addon loading work end to end by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zerx-lab/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zerx-lab">@zerx-lab</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5088557956" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7896" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7896/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7896">#7896</a></li>
<li>feat(ai): add Cursor personal usage reporting by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chessl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chessl">@chessl</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5058553518" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7613" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7613/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7613">#7613</a></li>
<li>perf(extensions): import extension modules concurrently by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/metaphorics/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/metaphorics">@metaphorics</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5070115533" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7709" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7709/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7709">#7709</a></li>
<li>fix(coding-agent): preserve before_agent_start prompt override across base rebuilds by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5075384014" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7756" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7756/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7756">#7756</a></li>
<li>docs(coding-agent): clarify js-debug-adapter install is not an npm package by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fcastillo18/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fcastillo18">@fcastillo18</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5075625420" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7759" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7759/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7759">#7759</a></li>
<li>fix(session): handle subscription-cap retry exhaustion by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5076704901" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7772" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7772/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7772">#7772</a></li>
<li>fix(vault): pass vault= as top-level obsidian cli option by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5076731824" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7773" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7773/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7773">#7773</a></li>
<li>fix(tui): gate built-in renderers by tool provenance by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5076732290" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7774" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7774/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7774">#7774</a></li>
<li>fix(tree): stop rendering bookkeeping entries as empty rows by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ParadaCarleton/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ParadaCarleton">@ParadaCarleton</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5076884476" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7782" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7782/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7782">#7782</a></li>
<li>fix(acp): resolve session/load across legacy session directories by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5076888727" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7783" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7783/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7783">#7783</a></li>
<li>fix(coding-agent): make prewalk lifecycle one-shot by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/eggpeat/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/eggpeat">@eggpeat</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5076997950" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7785" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7785/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7785">#7785</a></li>
<li>fix(read): normalize recovery paths by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5077342471" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7790" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7790/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7790">#7790</a></li>
<li>fix(tui): avoid leaking DA1 through tmux appearance refresh by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/anatoli-tsinovoy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/anatoli-tsinovoy">@anatoli-tsinovoy</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5078302210" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7801" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7801/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7801">#7801</a></li>
<li>fix(coding-agent): detect non-English questions in todo reminder guard by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5078448024" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7806" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7806/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7806">#7806</a></li>
<li>fix(ai): preserve Copilot integrator entitlement errors by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5079890724" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7821" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7821/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7821">#7821</a></li>
<li>fix(natives): share one runtime across wayland portal paths by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5087648477" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7889" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7889/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7889">#7889</a></li>
<li>fix(computer): lazily request wayland input permission by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5087668785" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7890" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7890/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7890">#7890</a></li>
<li>fix(session): surface real handoff errors instead of false cancel by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5089951657" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7904" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7904/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7904">#7904</a></li>
<li>fix(hashline): recover pipe-numbered read rows by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5090099679" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7906" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7906/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7906">#7906</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chessl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chessl">@chessl</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5078798827" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7810" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7810/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7810">#7810</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kimprap/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kimprap">@kimprap</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5079409325" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7816" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7816/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7816">#7816</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/IceCodeNew/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/IceCodeNew">@IceCodeNew</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5080699687" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7828" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7828/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7828">#7828</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vinhnguyen1211/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vinhnguyen1211">@vinhnguyen1211</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5081464111" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7832" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7832/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7832">#7832</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CaelumSea/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CaelumSea">@CaelumSea</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5086119373" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7867" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7867/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7867">#7867</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/voonfoo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/voonfoo">@voonfoo</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5087855708" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7892" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7892/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7892">#7892</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zerx-lab/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zerx-lab">@zerx-lab</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5088557956" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7896" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7896/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7896">#7896</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fcastillo18/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fcastillo18">@fcastillo18</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5075625420" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7759" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7759/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7759">#7759</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ParadaCarleton/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ParadaCarleton">@ParadaCarleton</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5076884476" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7782" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7782/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7782">#7782</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.10...v17.2.11">v17.2.10...v17.2.11</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.10]]></title>
<description><![CDATA[chore: bump version to 17.2.10]]></description>
<link>https://tsecurity.de/de/3707989/tools/github-v17210/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3707989/tools/github-v17210/</guid>
<pubDate>Thu, 06 Aug 2026 13:37:36 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><p>chore: bump version to 17.2.10</p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[This Week In Rust: This Week in Rust 663]]></title>
<description><![CDATA[Hello and welcome to another issue of This Week in Rust!
Rust is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
@thisweekinrust.bsky.social on Bluesky or
@ThisWeekinRu...]]></description>
<link>https://tsecurity.de/de/3707816/tools/this-week-in-rust-this-week-in-rust-663/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3707816/tools/this-week-in-rust-this-week-in-rust-663/</guid>
<pubDate>Thu, 06 Aug 2026 13:08:02 +0200</pubDate>
<content:encoded><![CDATA[<p>Hello and welcome to another issue of <em>This Week in Rust</em>!
<a href="https://www.rust-lang.org/">Rust</a> is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
<a href="https://bsky.app/profile/thisweekinrust.bsky.social">@thisweekinrust.bsky.social</a> on Bluesky or
<a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or
<a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>.
Want to get involved? <a href="https://github.com/rust-lang/rust/blob/main/CONTRIBUTING.md">We love contributions</a>.</p>
<p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a> and archives can be viewed at <a href="https://this-week-in-rust.org/">this-week-in-rust.org</a>.
If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p>
<p>Want TWIR in your inbox? <a href="https://this-week-in-rust.us11.list-manage.com/subscribe?u=fd84c1c757e02889a9b08d289&amp;id=0ed8b72485">Subscribe here</a>.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#updates-from-rust-community">Updates from Rust Community</a></h4>


<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#official">Official</a></h5>
<ul>
<li><a href="https://blog.rust-lang.org/2026/08/04/enabling-polonius-alpha-on-nightly/">Enabling the next iteration of the borrow checker on nightly</a></li>
<li><a href="https://blog.rust-lang.org/inside-rust/2026/08/04/funding-team-progress-update-july-2026/">Funding team progress update</a></li>
<li><a href="https://blog.rust-lang.org/inside-rust/2026/08/05/rust-langrust-is-adopting-an-llm-policy/">rust-lang/rust is adopting an LLM policy</a></li>
<li><a href="https://blog.rust-lang.org/inside-rust/2026/07/31/all-hands-2026-retrospective/">All Hands 2026 retrospective</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#newsletters">Newsletters</a></h5>
<ul>
<li><a href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-77">The Embedded Rustacean Issue #77</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#projecttooling-updates">Project/Tooling Updates</a></h5>
<ul>
<li><a href="https://kevat.app/">Kevat 0.4.0 — fast, resumable copy and move to external drives, now with a GUI on all three platforms</a></li>
<li><a href="https://github.com/kunobi-ninja/kache/releases/tag/v0.13.0">kache 0.13.0: keying the env vars proc-macros read</a></li>
<li><a href="https://kunobi.ninja/blog/kobe-101-leasing-kubernetes-clusters">kobe 101: lease a Kubernetes cluster, don't create one</a></li>
<li><a href="https://www.falkordb.com/blog/rewriting-falkordb-in-rust/">Rewriting FalkorDB in Rust: Make It Work, Make It Stable</a></li>
<li><a href="https://webrtc.rs/blog/2026/07/31/announcing-webrtc-v0.20.0.html">Announcing <code>webrtc</code> v0.20.0: Async-Friendly, Runtime-Agnostic WebRTC on Sans-I/O Core <code>rtc</code></a></li>
<li><a href="https://micheletti.io/proxelar-050/">Proxelar 0.5.0: sessions, rules, and more ways to capture traffic</a></li>
<li><a href="https://github.com/jchultarsky/mirador/releases/tag/v1.0.0">mirador 1.0.0: a personal terminal dashboard</a></li>
<li><a href="https://github.com/GCWing/BitFun/releases/tag/v0.2.15">BitFun 0.2.15: an open-source desktop AI agent built on a Rust runtime</a></li>
<li><a href="https://dev.to/sicklefire/mvis-v050-new-release-5997">mvis v0.5.0: CI/CD Profiling &amp; Allocation Histograms</a></li>
<li><a href="https://github.com/kmolan/multicalc-rust/releases/tag/v0.9.0">multicalc 0.9.0: scientific computation for embedded and robotics systems</a></li>
<li><a href="https://poltertype.com/blog/wrong-layout-typing-on-wayland/">Auto-correcting wrong-layout typing on Wayland is nearly impossible. We did it anyway</a></li>
<li><a href="https://github.com/fabperso/wimux/releases/tag/v0.1.0">wimux 0.1.0: a native Windows terminal multiplexer</a></li>
<li><a href="https://github.com/arian-shamaei/anthropometer/tree/main/docs/autopsy">amtr: a btop-style context-window monitor for Claude Code sessions, and the forensic autopsy of its own 153-hour build</a></li>
<li><a href="https://github.com/timescale/rsigma/releases/tag/v0.20.0">RSigma v0.20.0 release</a></li>
<li><a href="https://mostafa.dev/the-state-of-rsigma-7ba0a99020d9">The State of RSigma</a>, and <a href="https://mostafa.dev/the-state-of-rsigma-part-two-the-loop-c114f379dd78">Part Two: The Loop</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#observationsthoughts">Observations/Thoughts</a></h5>
<ul>
<li><a href="https://kerkour.com/firecracker-sandboxing-rust">How Firecracker microVMs work under the hood to sandbox untrusted code and AI agents</a></li>
<li><a href="https://pythonspeed.com/articles/faster-float-math-rust/">Faster floating point math with Rust’s new API</a></li>
<li><a href="https://blog.st.com/rust-mems-drivers/">Rust MEMS drivers: 3 reasons to try and adopt our new sensor driver</a></li>
<li><a href="https://alex.draftist.io/blog/the-bedrock-of-software-design-ycqvcedsj">The Bedrock of Software Design | Alex Fedoseev</a></li>
<li><a href="https://lordgoati.us/blog/tail-call/">Tail-Call Interpreters in Rust</a></li>
<li><a href="https://nnethercote.github.io/2026/07/31/how-to-speed-up-the-rust-compiler-in-july-2026.html">How to speed up the Rust compiler in July 2026</a></li>
<li><a href="https://kobzol.github.io/rust/2026/08/03/stf-june-july-2026.html">Sovereign Tech Fellowship for Rust maintenance (June-July 2026 report)</a></li>
<li><a href="https://jmmv.dev/2026/07/hello-getoptsargs.html">An old-new take on argument parsing in Rust</a></li>
<li><a href="https://dmitrii.app/stateless-servers-stateful-payloads-sessions-vs-continuations-measured-in-rust/">Stateless Servers, Stateful Payloads: Sessions vs Continuations, Measured in Rust</a></li>
<li>[video] <a href="https://www.youtube.com/watch?v=2937MGszrak">Rust in the age of Generative AI with Niko, Allen &amp; Zeeshan</a></li>
<li>[audio] <a href="https://corrode.dev/podcast/s06e09-jetbrains/">Rust in Production S06 E09: JetBrains with Orhun Parmaksız</a></li>
<li><a href="https://c410-f3r.github.io/thoughts/work-stealing-vs-executor-per-thread-evaluating-different-http-server-workloads-with-tokio-smol-and-glommio/">Work-Stealing vs. Executor-Per-Thread: Evaluating different HTTP server workloads with Tokio, Smol and Glommio</a></li>
<li><a href="https://github.com/Aefinity-AI/alice-aegis/blob/main/docs/posts/2026-08-05_uefi-soft-float-deletes-your-avx2.md">Your <code>#[target_feature(enable = "avx2")]</code> does nothing on <code>x86_64-unknown-uefi</code></a></li>
<li><a href="https://dev.to/fabperso/three-bugs-my-ai-agents-couldnt-fix-13bn">Three bugs my AI agents couldn't fix</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-walkthroughs">Rust Walkthroughs</a></h5>
<ul>
<li><a href="https://blog.implrust.com/posts/2026/08/blinky-with-stm32f103c8t6-embedded-rust/">Blinking an LED on STM32 Blue Pill (STM32F103C8T6) with Embedded Rust</a></li>
<li><a href="https://www.greyblake.com/blog/branchless-rust/">Branchless Rust: Making a Filter 4x Faster by Removing an <code>if</code></a></li>
<li><a href="https://oxi-dd65f4.gitlab.io/articles/word-pagination-gdi-rounding.html">Why modern font metrics cannot reproduce Word pagination</a></li>
<li><a href="https://github.com/JuanMarchetto/hooklog/blob/main/ARTICLE.md">Building hooklog on a six-day-old framework</a></li>
</ul>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#crate-of-the-week">Crate of the Week</a></h4>
<p>This week's crate is <a href="https://crates.io/crates/index_type">index_type</a>, a crate for providing strongly typed indices for collections.</p>
<p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1638">Roee Shoshani</a> for the self-suggestion!</p>
<p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#calls-for-testing">Calls for Testing</a></h4>
<p>An important step for RFC implementation is for people to experiment with the
implementation and give feedback, especially before stabilization.</p>
<p>If you are a feature implementer and would like your RFC to appear in this list, add a
<code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or
guidance on which aspect(s) of the feature need testing.</p>
<p><em>No calls for testing were issued this week by
<a href="https://github.com/rust-lang/rust/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Rust</a>,
<a href="https://github.com/rust-lang/cargo/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Cargo</a>,
<a href="https://github.com/rust-lang/rustup/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Rustup</a> or
<a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing%20state%3Aopen">Rust language RFCs</a>.</em></p>
<p><a href="https://github.com/rust-lang/this-week-in-rust/issues">Let us know</a> if you would like your feature to be tracked as a part of this list.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers">Call for Participation; projects and speakers</a></h4>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cfp-projects">CFP - Projects</a></h5>
<p>Always wanted to contribute to open-source projects but did not know where to start?
Every week we highlight some tasks from the Rust community for you to pick and get started!</p>
<p>Some of these tasks may also have mentors available, visit the task page for more information.</p>


<ul>
<li><a href="https://github.com/luohoa97/cordial/issues/6">Cordial - Unify the two implementations of the profile lock</a></li>
<li><a href="https://github.com/luohoa97/cordial/issues/7">Cordial - Fullscreen clips and letterboxes until the workspace is switched away and back</a></li>
<li><a href="https://github.com/lenra-io/dofigen/issues/481">Dofigen - Extend Dockerfiles</a></li>
</ul>


<p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://github.com/rust-lang/this-week-in-rust?tab=readme-ov-file#call-for-participation-guidelines">here</a> or through a <a href="https://github.com/rust-lang/this-week-in-rust">PR to TWiR</a> or by reaching out on <a href="https://bsky.app/profile/thisweekinrust.bsky.social">Bluesky</a> or <a href="https://mastodon.social/@thisweekinrust">Mastodon</a>!</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cfp-events">CFP - Events</a></h5>
<p>Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.</p>



<p>If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a <a href="https://github.com/rust-lang/this-week-in-rust">PR to TWiR</a> or by reaching out on <a href="https://bsky.app/profile/thisweekinrust.bsky.social">Bluesky</a> or <a href="https://mastodon.social/@thisweekinrust">Mastodon</a>!</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#updates-from-the-rust-project">Updates from the Rust Project</a></h4>
<p>630 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2026-07-28..2026-08-04">merged in the last week</a></p>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#compiler">Compiler</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/160193">improve CFG traversal</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160245">perf: avoid a heap allocation per basic block in MoveData's location maps</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159525">stabilize passing 128-bit integers via vector registers with <code>asm!</code> on x86</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#library">Library</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/159130">a bit optimize four-digit chunks in integer formatting</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160143">add NEON support for <code>is_ascii</code> and <code>eq_ignore_ascii_case</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159671">add semver check test command for checking API compatibility of stdlib</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/106643">allow only implementing <code>Read::read_buf</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159592">core: implement bounded random sampling</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160139">iter: specialize <code>Take::count</code> using <code>advance_by</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160342">iter: specialize <code>advance_by</code> method of <code>Fuse</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160079">make atomic operations const</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158548">move <code>std::io::copy</code> to <code>alloc::io</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157572">stabilize <code>size_of_val_raw, align_of_val_raw, Layout::for_value_raw</code></a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cargo">Cargo</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/cargo/pull/17300">add a suggestion when adding <code>[lints]</code> to a workspace to use <code>[workspace.lints]</code> instead</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17301">avoid parsing unchanged lockfiles</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17284">completions: complete paths for cargo run arguments</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17208">fix <code>manual_readme</code> lint for lower-priority README files</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17289">git: make checkout names independent of git config</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17293">make <code>__CARGO_TEST_FORCE_ARGFILE</code> available in distributed builds</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17269">pass rustdoc flags to final CCI merge step</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17268">prevent panic when <code>package.build</code> is empty</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17272">reworked how we enable the new build-dir layout on nightly</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17302">trim-paths: unambiguous and reversible remap rules</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rustdoc">Rustdoc</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/157058">label badge for notable traits</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160032">rustdoc-json: make <code>Stability</code> compatible with non-self-describing serde formats</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160232">fix ICE when a grapheme cluster joins a Prepend-class character to <code>_</code> or <code>:</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/160208">fix crash when trying to list attributes on an opaque type</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159854">only analyze head of self type when deciding impl inlining</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rustfmt">Rustfmt</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/154202">format <code>cfg_select!</code></a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#clippy">Clippy</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17468"><code>manual_div_ceil</code>: avoid suggestions that change evaluation count</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17473">fix <code>no_effect_underscore_binding</code> false positive on proc-macro generated code</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/16773">add check for image with embedded link to <code>doc_paragraphs_missing_punctuation</code></a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/16972">lint for UFCS call in <code>clone_on_copy</code></a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17024">trigger <code>float_cmp_const</code> for <code>assert_eq!</code> with const floats</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-analyzer">Rust-Analyzer</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23014">allow <code>self</code> as the last segment of a path</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22977">correctly handle unlinked module edge cases</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22959">support <code>CovariantUnsafeCell</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/21846">add <code>-Zjson-target-spec</code> on cargo calls where needed</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23003">add reference for same name param coerce matches</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23017">allow diverging rhs in destructuring assignments</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22938">avoid panic when checking <code>Copy</code> for hrtb closure arguments</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22996">detect the rust-analyzer component in a multi-line components array</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22965">do not alloc anon consts for bare paths in blocks</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22992">don't panic on a self-referential <code>impl Trait</code> function</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22956">double stack size for threads to 16MiB</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23015">exclude unknown types from term search</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22933">fix lookup <code>MACRO_CALL@...</code> in this Semantics due to include!</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23008">fix <code>ExprScopes</code> handling of exprs inside patterns</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22886">fix glob import shadowing bug</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22948">make mir debug execution work fot bitflags items</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22943">mark auto traits as coinductive</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22957">no hint with similar name raw-ident arg</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23004">parse postfix range inside closure in access</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22993">recognize format arguments after a backslash in raw strings</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23016">resolve assignment lhs in its expression scope</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22964">show qualified paths when type names collide in E0308</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22947">hir-ty, ide-diagnostics: use E0057/E0061 for arg-count mismatch (was E0107)</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22966">perf: avoid having a separate query for defined opaques</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/23001">perf: save an allocation in lifetime handling</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22937">report a config error for postfix snippets with item scope</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22940"><code>vfs</code>: use component-based path prefix matching for virtual paths</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h5>
<p>A lot of optimizations landed this week. Some big improvements to rustdoc in <a href="https://github.com/rust-lang/rust/pull/159854">#159854</a>, one big improvement in control flow graph traversal for <code>cranelift-codegen</code>, few more improvements to next-solver benchmarks and various other micro-optimizations, bringing the total to a nice round number of 10 improvements this week.</p>
<p>Triage done by <strong>@panstromek</strong>.
Revision range: <a href="https://perf.rust-lang.org/?start=ad0c9dce27a22416b65946bc0010edaf22ac6c83&amp;end=65dd30fb9e882a7e8f0be10caca62936db2a98b8&amp;absolute=false&amp;stat=instructions%3Au">ad0c9dce..65dd30fb</a></p>
<p><strong>Summary</strong>:</p>
<table>
<thead>
<tr>
<th>(instructions:u)</th>
<th>mean</th>
<th>range</th>
<th>count</th>
</tr>
</thead>
<tbody>
<tr>
<td>Regressions ❌ <br> (primary)</td>
<td>0.3%</td>
<td>[0.2%, 0.5%]</td>
<td>18</td>
</tr>
<tr>
<td>Regressions ❌ <br> (secondary)</td>
<td>2.1%</td>
<td>[0.1%, 16.8%]</td>
<td>64</td>
</tr>
<tr>
<td>Improvements ✅ <br> (primary)</td>
<td>-3.3%</td>
<td>[-39.8%, -0.2%]</td>
<td>97</td>
</tr>
<tr>
<td>Improvements ✅ <br> (secondary)</td>
<td>-6.1%</td>
<td>[-39.6%, -0.1%]</td>
<td>111</td>
</tr>
<tr>
<td>All ❌✅ (primary)</td>
<td>-2.7%</td>
<td>[-39.8%, 0.5%]</td>
<td>115</td>
</tr>
</tbody>
</table>
<p>1 Regression, 5 Improvements, 11 Mixed; 6 of them in rollups
32 artifact comparisons made in total</p>
<p><a href="https://github.com/rust-lang/rustc-perf/blob/c41ca2a96f74761503b333d9f416eb7012eef858/triage/2026/2026-08-03.md">Full report here</a></p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#approved-rfcs"></a><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></h5>
<p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These
are the RFCs that were approved for implementation this week:</p>
<ul>
<li><em>No RFCs were approved this week.</em></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#final-comment-period">Final Comment Period</a></h5>
<p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs
which are reaching a decision. Express your opinions now.</p>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#tracking-issues-prs">Tracking Issues &amp; PRs</a></h6>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust"></a><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Rust</a>
<ul>
<li><a href="https://github.com/rust-lang/rust/issues/117693">Tracking Issue for <code>core_io_borrowed_buf</code></a></li>
<li><a href="https://github.com/rust-lang/rust/issues/154645">Tracking Issue for <code>derive_macro_global_path</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159746">stabilize <code>c_variadic_naked_functions</code></a></li>
</ul>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#compiler-team-mcps-only"></a><a href="https://github.com/rust-lang/compiler-team/issues?q=label%3Amajor-change%20label%3Afinal-comment-period%20state%3Aopen">Compiler Team</a> <a href="https://forge.rust-lang.org/compiler/mcp.html">(MCPs only)</a>
<ul>
<li><a href="https://github.com/rust-lang/compiler-team/issues/1021">Implement a naming convention for lint/diagnostic-only <code>rustc_</code> attrs</a></li>
<li><a href="https://github.com/rust-lang/compiler-team/issues/1018">Encode OpenBSD <code>-current</code> version in targets' <code>target_env</code></a></li>
<li><a href="https://github.com/rust-lang/compiler-team/issues/1010">Add <code>target_feature_available_at_call_site</code></a></li>
<li><a href="https://github.com/rust-lang/compiler-team/issues/1001">Promote <code>wasm32-wasip3</code> to Tier 2</a></li>
</ul>
<p><em>No Items entered Final Comment Period this week for
<a href="https://github.com/rust-lang/rfcs/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen">Rust RFCs</a>,<a href="https://github.com/rust-lang/reference/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Language Reference</a>,
<a href="https://github.com/rust-lang/cargo/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Cargo</a>,
<a href="https://github.com/rust-lang/lang-team/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Language Team</a>,
<a href="https://github.com/rust-lang/leadership-council/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen">Leadership Council</a> or
<a href="https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Unsafe Code Guidelines</a>.</em>
Let us know if you would like your PRs, Tracking Issues or RFCs to be tracked as a part of this list.</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#new-and-updated-rfcs"></a><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></h5>
<ul>
<li><em>No New or Updated RFCs were created this week.</em></li>
</ul>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#upcoming-events">Upcoming Events</a></h4>
<p>Rusty Events between 2026-08-05 - 2026-09-02 🦀</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#virtual">Virtual</a></h5>
<ul>
<li>2026-08-05 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff">Rust and C++ Cardiff</a><ul>
<li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/315880365/"><strong>Operating Systems Book Club: Execution and Scheduling</strong></a></li>
</ul>
</li>
<li>2026-08-05 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs">Indy Rust</a><ul>
<li><a href="https://www.meetup.com/indyrs/events/315210367/"><strong>Indy.rs - with Social Distancing</strong></a></li>
</ul>
</li>
<li>2026-08-07 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/ii2jrwva"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-10 | Hybrid (Kuala Lumpur, Malaysia) | <a href="https://discord.gg/Uz88bnZA3B">Rust Malaysia Meetup</a><ul>
<li><a href="https://docs.google.com/forms/d/e/1FAIpQLSfwGMGqDit9jn9INA1EROWTbvnjTAZAO1oUQaEwqmao7AYy1A/viewform"><strong>Rust Meetup August 2026</strong></a></li>
</ul>
</li>
<li>2026-08-11 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/310254776/"><strong>Second Tuesday</strong></a></li>
</ul>
</li>
<li>2026-08-13 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/rust-berlin">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/313345333/"><strong>Rust Hack and Learn</strong></a></li>
</ul>
</li>
<li>2026-08-13 | Virtual (Nürnberg, DE) | <a href="https://www.meetup.com/rust-noris">Rust Nuremberg</a><ul>
<li><a href="https://www.meetup.com/rust-noris/events/315619609/"><strong>Rust Nürnberg online</strong></a></li>
</ul>
</li>
<li>2026-08-14 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/f2hnzrug"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-18 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc">Rust DC</a><ul>
<li><a href="https://www.meetup.com/rustdc/events/315604176/"><strong>Mid-month Rustful</strong></a></li>
</ul>
</li>
<li>2026-08-19 | Hybrid (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust">Vancouver Rust</a><ul>
<li><a href="https://www.meetup.com/vancouver-rust/events/314105333/"><strong>Dealing with Dependencies</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Hybrid (Seattle, WA, US) | <a href="https://www.meetup.com/join-srug">Seattle Rust User Group</a><ul>
<li><a href="https://www.meetup.com/seattle-rust-user-group/events/314520814/"><strong>August, 2026 SRUG (Seattle Rust User Group) Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Virtual (Charlottesville, VA, US) | <a href="https://www.meetup.com/charlottesville-rust-meetup">Charlottesville Rust Meetup</a><ul>
<li><a href="https://www.meetup.com/charlottesville-rust-meetup/events/315733791/"><strong>Tock OS Part #5 — Wireless Communication with the IEEE 802.15.4 protocol</strong></a></li>
</ul>
</li>
<li>2026-08-21 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/1bm27cah"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-25 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/310254775/"><strong>Fourth Tuesday</strong></a></li>
</ul>
</li>
<li>2026-08-27 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/rust-berlin/events/">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/313345334/"><strong>Rust Hack and Learn</strong></a></li>
</ul>
</li>
<li>2026-08-21 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/arkkrcj5"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-09-02 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs/events/">Indy Rust</a><ul>
<li><a href="https://www.meetup.com/indyrs/events/wqzhftyjcmbdb/"><strong>Indy.rs - with Social Distancing</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#africa">Africa</a></h5>
<ul>
<li>2026-08-11 | Johannesburg, ZA | <a href="https://www.meetup.com/johannesburg-rust-meetup">Johannesburg Rust Meetup</a><ul>
<li><a href="https://www.meetup.com/johannesburg-rust-meetup/events/315750593/"><strong>Rust's extended standard library</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#asia">Asia</a></h5>
<ul>
<li>2026-08-10 | Hybrid (Kuala Lumpur, MY) | <a href="https://discord.gg/Uz88bnZA3B">Rust Malaysia Meetup</a><ul>
<li><a href="https://docs.google.com/forms/d/e/1FAIpQLSfwGMGqDit9jn9INA1EROWTbvnjTAZAO1oUQaEwqmao7AYy1A/viewform"><strong>Rust Meetup August 2026</strong></a></li>
</ul>
</li>
<li>2026-08-22 | Bangalore, IN | <a href="https://hasgeek.com/rustbangalore">Rust Bangalore</a><ul>
<li><a href="https://hasgeek.com/rustbangalore/august-2026-rustacean-meetup/"><strong>August 2026 Rustacean Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-22 | Delhi, IN | <a href="https://www.meetup.com/rustdelhi">Rust Delhi</a><ul>
<li><a href="https://www.meetup.com/rustdelhi/events/315185336/"><strong>Rust Delhi X SciPy India Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-22 | Noida, IN | <a href="https://scipy.in/">SciPy India</a><ul>
<li><a href="https://scipy.in/sci-py-rs/"><strong>Scientific Computing in Rust and Python</strong></a></li>
</ul>
</li>
<li>2026-08-29 | Pune, IN | <a href="https://hasgeek.com/rustpune/">Rust Pune</a><ul>
<li><a href="https://hasgeek.com/rustpune/meetup-august-2026/"><strong>Rust Pune Meetup: August 2026</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#europe">Europe</a></h5>
<ul>
<li>2026-08-05 | Köln, DE | <a href="https://www.meetup.com/rust-cologne-bonn/events/">Rust Cologne</a><ul>
<li><a href="https://www.meetup.com/rustcologne/events/315910506/"><strong>Rust in August: Don't panic! …or_else?</strong></a></li>
</ul>
</li>
<li>2026-08-06 | Berlin, DE | <a href="https://www.meetup.com/rust-berlin/events/">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/315966137/"><strong>Rust Berlin on location 🏳️‍🌈 - Edition 016</strong></a></li>
</ul>
</li>
<li>2026-08-06 | Oxford, UK | <a href="https://www.meetup.com/oxford-rust-meetup-group">Oxford ACCU/Rust Meetup.</a><ul>
<li><a href="https://www.meetup.com/oxford-rust-meetup-group/events/315863373/"><strong>ACCU/Rust Summer social</strong></a></li>
</ul>
</li>
<li>2026-08-13 | Switzerland, CH | <a href="https://www.posttenebraslab.ch/wiki/events/start">PostTenebrasLab</a><ul>
<li><a href="https://www.posttenebraslab.ch/wiki/events/monthly_meeting/rust_meetup"><strong>Rust Meetup Geneva</strong></a></li>
</ul>
</li>
<li>2026-08-18 | Aarhus, DK | <a href="https://www.meetup.com/rust-aarhus">Rust Aarhus</a><ul>
<li><a href="https://www.meetup.com/rust-aarhus/events/315683629/"><strong>Hack Night: Trust but verify the LLM</strong></a></li>
</ul>
</li>
<li>2026-08-18 | Leipzig, DE | <a href="https://www.meetup.com/rust-modern-systems-programming-in-leipzig">Rust - Modern Systems Programming in Leipzig</a><ul>
<li><a href="https://www.meetup.com/rust-modern-systems-programming-in-leipzig/events/313816474/"><strong>Topic TBD</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Frankfurt, DE | <a href="https://www.meetup.com/rust-rhein-main">Rust Rhein-Main</a><ul>
<li><a href="https://www.meetup.com/rust-rhein-main/events/315855368/"><strong>Building an acoustic camera with egui and embassy</strong></a></li>
</ul>
</li>
<li>2026-08-27 | Manchester, GB | <a href="https://www.meetup.com/rust-manchester/events/">Rust Manchester</a><ul>
<li><a href="https://www.meetup.com/rust-manchester/events/315891530/"><strong>Rust Manchester August Talks</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#north-america">North America</a></h5>
<ul>
<li>2026-08-06 | Mountain View, CA, US | <a href="https://www.meetup.com/hackerdojo/events/">Hacker Dojo</a><ul>
<li><a href="https://www.meetup.com/hackerdojo/events/315590399/"><strong>RUST MEETUP at HACKER DOJO</strong></a></li>
</ul>
</li>
<li>2026-08-06 | Saint Louis, MO, US | <a href="https://www.meetup.com/stl-rust">STL Rust</a><ul>
<li><a href="https://www.meetup.com/stl-rust/events/314701905/"><strong>Shipping Temporal: How a Global Rust Ecosystem Built Chrome’s Newest Web API</strong></a></li>
</ul>
</li>
<li>2026-08-11 | New York, NY, US | <a href="https://www.meetup.com/rust-nyc/events/">Rust NYC</a><ul>
<li><a href="https://www.meetup.com/rust-nyc/events/315963710/"><strong>Rust NYC: 'An intro to wgpu' and 'Let's Talk Generics!'</strong></a></li>
</ul>
</li>
<li>2026-08-13 | Lehi, UT, US | <a href="https://www.meetup.com/utah-rust">Utah Rust</a><ul>
<li><a href="https://www.meetup.com/utah-rust/events/314696652/"><strong>Utah Rust August Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-13 | San Diego, CA, US | <a href="https://www.meetup.com/san-diego-rust">San Diego Rust</a><ul>
<li><a href="https://www.meetup.com/san-diego-rust/events/315601099/"><strong>San Diego Rust August Meetup - Back in person!</strong></a></li>
</ul>
</li>
<li>2026-08-15 | San Francisco, CA, US | <a href="https://flowercomputer.com/">Flower</a><ul>
<li><a href="https://partiful.com/e/juWAwRs3XMWP7s9wLNWK"><strong>BOG-A-THON 3</strong></a></li>
</ul>
</li>
<li>2026-08-18 | San Francisco, CA, US | <a href="https://www.meetup.com/san-francisco-rust-study-group">San Francisco Rust Study Group</a><ul>
<li><a href="https://www.meetup.com/san-francisco-rust-study-group/events/314997215/"><strong>Rust Hacking in Person</strong></a></li>
</ul>
</li>
<li>2026-08-19 | Hybrid (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust">Vancouver Rust</a><ul>
<li><a href="https://www.meetup.com/vancouver-rust/events/314105333/"><strong>Dealing with Dependencies</strong></a></li>
</ul>
</li>
<li>2026-08-19 | San Francisco, CA, US | <a href="https://luma.com/bayarearust">Bay Area Rust</a><ul>
<li><a href="https://luma.com/00f2s7q9"><strong>Bay Area Rust August Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Hybrid (Seattle, WA, US) | <a href="https://www.meetup.com/join-srug">Seattle Rust User Group</a><ul>
<li><a href="https://www.meetup.com/seattle-rust-user-group/events/314520814/"><strong>August, 2026 SRUG (Seattle Rust User Group) Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-26 | Austin, TX, US | <a href="https://www.meetup.com/rust-atx">Rust ATX</a><ul>
<li><a href="https://www.meetup.com/rust-atx/events/315171660/"><strong>Rust Lunch - Fareground</strong></a></li>
</ul>
</li>
<li>2026-08-26 | Los Angeles, CA, US | <a href="https://www.meetup.com/rust-los-angeles/events/">Rust Los Angeles</a><ul>
<li><a href="https://www.meetup.com/rust-los-angeles/events/315963062/"><strong>Rust LA August! Rust in Quantum Computing</strong></a></li>
</ul>
</li>
<li>2026-08-27 | Atlanta, GA, US | <a href="https://www.meetup.com/rust-atl/events/">Rust Atlanta</a><ul>
<li><a href="https://www.meetup.com/rust-atl/events/313539331/"><strong>Rust-Atl</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#oceania">Oceania</a></h5>
<ul>
<li>2026-08-27 | Melbourne, AU | <a href="https://www.meetup.com/rust-melbourne/events/">Rust Melbourne</a><ul>
<li><a href="https://www.meetup.com/rust-melbourne/events/315039490/"><strong>Rust Melbourne August 2026</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#south-america">South America</a></h5>
<ul>
<li>2026-08-08 | São Paulo, SP | <a href="https://luma.com/calendar/cal-bif2oHITU1aVvsr">Rust-SP</a><ul>
<li><a href="https://luma.com/41oiyhtk"><strong>Rust SP - Aug/2026</strong></a></li>
</ul>
</li>
</ul>
<p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get
it mentioned here. Please remember to add a link to the event too.
Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#jobs">Jobs</a></h4>
<p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/1ttbtf5/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p>
<h3><a class="toclink" href="https://this-week-in-rust.org/atom.xml#quote-of-the-week">Quote of the Week</a></h3>
<blockquote>
<p>… but I gave up on the idea as the macro rules were turning into a turing complete rust syntax parser</p>
</blockquote>
<p>– <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1637">Koosha on rust-users</a></p>
<p>Thanks to <a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328/1787">miro</a> for the suggestion!</p>
<p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p>
<p>This Week in Rust is edited by:</p>
<ul>
<li><a href="https://github.com/nellshamrell">nellshamrell</a></li>
<li><a href="https://github.com/llogiq">llogiq</a></li>
<li><a href="https://github.com/ericseppanen">ericseppanen</a></li>
<li><a href="https://github.com/extrawurst">extrawurst</a></li>
<li><a href="https://github.com/U007D">U007D</a></li>
<li><a href="https://github.com/mariannegoldin">mariannegoldin</a></li>
<li><a href="https://github.com/bdillo">bdillo</a></li>
<li><a href="https://github.com/opeolluwa">opeolluwa</a></li>
<li><a href="https://github.com/bnchi">bnchi</a></li>
<li><a href="https://github.com/KannanPalani57">KannanPalani57</a></li>
<li><a href="https://github.com/tzilist">tzilist</a></li>
</ul>
<p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p>
<p><small><a href="https://www.reddit.com/r/rust/comments/1vgv7sn/this_week_in_rust_663">Discuss on r/rust</a></small></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Addons Blog: How the publicSuffix API was created]]></title>
<description><![CDATA[Firefox 153 ships the new publicSuffix WebExtensions API. This API lets extensions ask the browser for the registrable domain (eTLD+1) of a hostname. It uses the browser’s built-in, always-up-to-date copy of the Public Suffix List, removing the need for extensions to bundle and maintain a copy of...]]></description>
<link>https://tsecurity.de/de/3707815/tools/mozilla-addons-blog-how-the-publicsuffix-api-was-created/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3707815/tools/mozilla-addons-blog-how-the-publicsuffix-api-was-created/</guid>
<pubDate>Thu, 06 Aug 2026 13:08:02 +0200</pubDate>
<content:encoded><![CDATA[<p>Firefox 153 ships the new <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/publicSuffix">publicSuffix</a> WebExtensions API. This API lets extensions ask the browser for the registrable domain (eTLD+1) of a hostname. It uses the browser’s built-in, always-up-to-date copy of the <a href="https://publicsuffix.org/">Public Suffix List</a>, removing the need for extensions to bundle and maintain a copy of the list.</p>
<p>This feature <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1315558#c39">was one of the most-voted bugs in WebExtensions on Bugzilla</a>, and would not have been possible without the contributions by Francis McKenzie (aka mckenfra). So, thank you, Francis!</p>
<h3>What the API does and why it exists</h3>
<p>A “public suffix” is a domain suffix under which people can register their website names, such as .com, .co.uk, and github.io. Knowing where the public suffix ends and the registrable domain begins matters for any task that groups or isolates sites. Or any task involving the need to determine whether a given input is a likely domain, such as the autocompletion feature in the address bar that doubles as a search box.</p>
<p>Before this API, extensions that needed it had to bundle a copy of the Public Suffix List and update the extension whenever the list changed. As these changes happen frequently, the bundled lists were often out of sync with the browser’s interpretation.</p>
<p>The <a href="https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/">Firefox Multi-Account Containers extension</a> has a longstanding request to configure <a href="https://github.com/mozilla/multi-account-containers/issues/473">containers for all subdomains</a>. This feature would let people assign an entire domain, such as *.example.com, to a container instead of adding every subdomain by hand. Francis implemented this feature in a <a href="https://github.com/mozilla/multi-account-containers/pull/2912">patch to the Multi-Account Container extension</a>, building on top of the publicSuffix API in Firefox 153.</p>
<h3>Behind the scenes</h3>
<p>The first Firefox patch for this API went up in June 2022, but it wasn’t the one that shipped. That month, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1315558#c20">the bug was referred to the WebExtensions Community Group</a> for cross-browser design, which would benefit extension developers beyond Firefox. After reaching consensus on the capability request in March 2024, Francis submitted a detailed <a href="https://github.com/w3c/webextensions/pull/676">proposal for the publicSuffix API</a> in accordance with the <a href="https://github.com/w3c/webextensions/blob/main/proposals/proposal_process.md">WECG proposal process</a>.</p>
<p>What followed was nearly a year of review. Francis made a strong case for the API having a synchronous shape, unlike almost every other extension API. Browser vendors and the Public Suffix List maintainers chimed in to leave feedback. The proposal changed shape several times in response. Approval came from Safari and Firefox in May 2025, with Chrome still tentative. Final Chrome sign-off landed in April 2026 after review at a WECG face-to-face meetup in London, and the <a href="https://github.com/w3c/webextensions/blob/main/proposals/public-suffix.md">proposal was merged</a>. Francis then submitted the Firefox implementation patches, which landed in June and shipped in July with Firefox 153 (see <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/153#changes_for_add-on_developers">changes for add-on developers in Firefox 153</a>)!</p>
<h3>On the WECG</h3>
<p>None of this happened in a Mozilla-only queue. The WebExtensions Community Group exists so that an API like this doesn’t end up as three incompatible browser-specific versions. If you’ve ever hit a wall building an extension because some capability isn’t available, filing an issue at <a href="https://github.com/w3c/webextensions/issues">w3c/webextensions</a> and participating in discussions is the way to make it visible to the people who can help make it happen.</p>
<p>As <a href="https://github.com/w3c/webextensions/issues/231">the publicSuffix API’s WECG issue</a> shows, the process is open, with browser engineers, extension developers, and other subject matter experts (such as the Public Suffix List maintainers) discussing the API shape in public. When Firefox’s implementation was nearing completion, another Chromium contributor began an independent Chrome implementation, which <a href="https://github.com/w3c/webextensions/issues/231#issuecomment-4542627098">revealed a possible improvement</a> to the API. This insight resulted in a <a href="https://github.com/w3c/webextensions/pull/1013">minor modification</a>, which was approved within days. This shows the strength of multiple independent implementations collaborating on a common API.</p>
<p>As always, you can file extension-related issues on <a href="https://bugzilla.mozilla.org/">Bugzilla</a> under the WebExtensions product, and cross-browser API proposals are discussed in the <a href="https://github.com/w3c/webextensions">W3C WebExtensions Community Group</a>. For questions, the <a href="https://discourse.mozilla.org/c/add-ons/35">Add-ons Discourse</a> is the best place to start.</p>
<p>The post <a href="https://blog.mozilla.org/addons/2026/08/06/how-the-publicsuffix-api-was-created/">How the publicSuffix API was created</a> appeared first on <a href="https://blog.mozilla.org/addons">Mozilla Add-ons Community Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v8.23.0-beta.1]]></title>
<description><![CDATA[Tweaks, bug fixes, and performance enhancements. Keep on texting, calling, and video chatting as usual.]]></description>
<link>https://tsecurity.de/de/3707036/tools/github-v8230-beta1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3707036/tools/github-v8230-beta1/</guid>
<pubDate>Thu, 06 Aug 2026 01:05:23 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><ul>
<li>Tweaks, bug fixes, and performance enhancements. Keep on texting, calling, and video chatting as usual.</li>
</ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: @signalapp/types@0.2.0]]></title>
<description><![CDATA[Publish Packages]]></description>
<link>https://tsecurity.de/de/3706953/tools/github-signalapptypes020/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3706953/tools/github-signalapptypes020/</guid>
<pubDate>Wed, 05 Aug 2026 23:50:10 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><p>Publish Packages</p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v8.22.0]]></title>
<description><![CDATA[Handful of bug fixes to keep your app running smoothly. More exciting changes on the horizon!]]></description>
<link>https://tsecurity.de/de/3706952/tools/github-v8220/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3706952/tools/github-v8220/</guid>
<pubDate>Wed, 05 Aug 2026 23:50:10 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><ul>
<li>Handful of bug fixes to keep your app running smoothly. More exciting changes on the horizon!</li>
</ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox UX: Let your designs fail for the right reasons]]></title>
<description><![CDATA[How AI-assisted native prototypes changed what usability testing could show me.
 
If you’ve ever simplified an interaction just to make a prototype manageable, you’ve probably felt the tension between what you designed and what the prototype could actually support. The risk is that when a design ...]]></description>
<link>https://tsecurity.de/de/3706846/tools/firefox-ux-let-your-designs-fail-for-the-right-reasons/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3706846/tools/firefox-ux-let-your-designs-fail-for-the-right-reasons/</guid>
<pubDate>Wed, 05 Aug 2026 23:22:26 +0200</pubDate>
<content:encoded><![CDATA[<h4>How AI-assisted native prototypes changed what usability testing could show me.</h4>
<p> </p>
<p>If you’ve ever simplified an interaction just to make a prototype manageable, you’ve probably felt the tension between what you designed and what the prototype could actually support. The risk is that when a design fails in usability testing, you can’t always tell why. Was the experience itself the problem, or was it really the prototype getting in the way: a missing connection, a laggy transition, a path you didn’t build?</p>
<p>I ran into this while working on Report Broken Site for Firefox Android, and it led me to a different way of prototyping: building directly inside the real app with AI (Claude), so the test reflects native fidelity rather than a simulation of it. That’s when I started worrying just about the design failing, and not the prototype.</p>
<div class="wp-caption aligncenter"><img alt="Four-step screenshot sequence of the Report Broken Site feature: choosing an issue type, adding details, previewing the report data, and confirming the report was sent." class=" wp-image-4500" height="558" src="https://blog.mozilla.org/ux/files/2026/08/image1-300x178.png" width="940"><p class="wp-caption-text">Feature: Report Broken Site</p></div>
<p> </p>
<h3>Reaching limits of walled prototypes</h3>
<p>In tools like Figma, prototyping requires anticipating every possible interaction and defining it explicitly. For the user to feel the true experience, each path needs to be connected, each transition set, and each variation accounted for. As complexity grows, it tends to increase the cost of maintaining it: screens multiply, connections become fragile, and animations become tedious to maintain.</p>
<p>At some point, you’re no longer designing the experience. <b>You’re managing the prototype. </b></p>
<div class="wp-caption aligncenter"><img alt='Animated GIF of a Figma prototype canvas with multiple Report Broken Site screens connected by numerous crisscrossing arrows, illustrating how manually wired prototype logic becomes tangled as complexity grows."' class="wp-image-4512 size-full" height="1512" src="https://blog.mozilla.org/ux/files/2026/08/Choosing-animation_1.5x.gif" width="3024"><p class="wp-caption-text">E.g. Changing the animation for one node, requires updating it everywhere manually.</p></div>
<p>To cope, we simplify the prototype. We reduce the number of paths, guide users through predefined flows, and limit what they can do on the prototype. The result is what I’ve started thinking of as a <b>walled prototype</b> — like a walled garden: a bounded space where users can move, but only within the paths we’ve pre-defined.</p>
<p>Some designers might argue that Figma’s recent additions of variables and advanced logic solve this problem. However, even with these tools, the designer is still building and managing the prototype. Figma prototypes simulate a system; it is not the system itself or a part of it. These prototypes have been useful, but they have also shaped the participant testing experience in ways that haven’t always been obvious.</p>
<p> </p>
<div class="wp-caption aligncenter"><img alt="Zoomed-out Figma canvas showing a large grid of connected mobile screens for the Report Broken Site prototype, linked by a dense tangle of blue connector lines." class=" wp-image-4501" height="827" src="https://blog.mozilla.org/ux/files/2026/08/image2-300x239.png" width="1038"><p class="wp-caption-text">When the logic of a feature is handled by manual connections, the canvas quickly turns into spaghetti of fragile dependencies.</p></div>
<h4><b>Prototypes shape participant behavior</b></h4>
<p>This becomes especially noticeable in usability testing. Test participants tend to recognize when they are interacting with a prototype, and that awareness can change how they behave. They may hesitate to explore, follow the perceived intent of the task, or tap around when they get stuck.</p>
<p>For example, to keep a prototype manageable, I might only make a few issue types selectable. But then participants are doing two things at once: deciding what they want to do and guessing what the prototype will allow. Their feedback can become shaped by the prototype’s limits, not just the design —  like a visitor to the walled garden checking which paths are actually open to them.</p>
<p>That constraint can be useful in early concept testing, where a narrower path helps focus the conversation. It becomes more limiting when we are trying to understand how the full experience behaves.</p>
<p>Research and practice have long acknowledged that <a href="https://www.nngroup.com/articles/ux-prototype-hi-lo-fidelity/">prototype fidelity</a> and <a href="https://uxdesign.cc/how-high-fidelity-prototypes-can-enhance-user-testing-30245ad0c4d1">testing setup</a> can influence participant behavior. But in practice, many workflows still rely on constrained, screen-to-screen simulations.</p>
<p>I’ve often wondered:</p>
<blockquote><p><b><i>How a user’s perceived experience might change if they weren’t encountering the feature in the isolation of a walled prototype?</i></b></p></blockquote>
<p> </p>
<h3>From walled to native fidelity prototypes</h3>
<p>Designing and prototyping is often described in terms of fidelity — from low-fidelity sketches to high-fidelity designs ready for dev handoff. That framing focuses on how closely we represent the product, but not necessarily how the experience itself behaves.</p>
<p>As building realistic interactions becomes easier using AI, it may now be possible to move beyond simulating flows in Figma and towards observing how people actually behave. So, alongside designing it in Figma, I built the feature directly into a local version of the Firefox Android app using Claude. It wasn’t straightforward at first, but even the friction of getting it working revealed things I wouldn’t have seen in a Figma prototype.</p>
<p>When I did this, I noticed there were no predefined paths to manage or fragile connections to maintain. The experience felt more continuous, allowing users to move more freely, not just within the feature, but within the app itself. I started thinking of these as prototypes with <b>native fidelity</b> — native to the app, native to the device, and aligned with how users expect interactions to behave.</p>
<h4><b>When prototypes need to handle dynamic behavior</b></h4>
<p>The difference between the two types of prototypes is not just theoretical; it starts to change what the experience can support. In walled prototypes, content is often fixed, and interactions move users between predefined screens. While this works for simple flows, it becomes harder to represent how interfaces behave when content needs to update dynamically based on user interaction.</p>
<p>In the <b>Report Broken Site</b> feature, this was important. A walled prototype struggles with:</p>
<ul>
<li><b>Capturing website data:</b> Depending on the browsing tab, metadata like the URL, screenshot, browser info, and tracking data needs to be captured and reflected back to the user.</li>
<li><b>URL editing:</b> Simulating real text entry, cursor movement, and auto-correct behavior.</li>
<li><b>Branching logic:</b> If a user selects “Site doesn’t load” as issue type, the details are optional, but if they choose “Something else,” details become required.</li>
<li><b>Error handling:</b> For “Something else,” the system must validate input length in the description box and show an error if it’s insufficient.</li>
</ul>
<p><b>Have you ever run into interactions like these and found yourself simplifying them, just to make the prototype manageable?</b></p>
<p>When I built it directly using Claude, the native fidelity prototype was able to handle metadata capture, text input, and branching logic more naturally.</p>
<div class="wp-caption aligncenter"><img alt="Screen recording on a real Android device of the Report Broken Site feature, showing the URL field and list of selectable issue types." class="size-full wp-image-4502" height="1128" src="https://blog.mozilla.org/ux/files/2026/08/image3.gif" width="1280"><p class="wp-caption-text">The native fidelity prototype inherits native behaviors like metadata capture, keyboard interactions, and dynamic state changes.</p></div>
<h4><b>The environment is part of the experience</b></h4>
<p>Another challenge is the environment in which the prototype is experienced. In walled prototypes, layouts are often fixed, and responsiveness is limited. Differences in device size, orientation, or performance can introduce inconsistencies that don’t reflect the intended final experience.</p>
<p>In practice, this can show up as:</p>
<ul>
<li><b>Oversized UI elements</b> on larger devices as the prototype was created for an average phone size.</li>
<li><b>Laggy interactions</b> on slower networks as Figma prototypes fail to be responsive sometimes.</li>
<li><b>Layouts that don’t adapt</b> as expected because of the constraints of the prototyping environment.</li>
</ul>
<p>When the interaction is built directly in the app, the experience inherits the <b>native environment of the device.</b> Layouts respond to screen size, interactions feel more consistent, and the overall experience is closer to what users would encounter in the final product. This could reduce the likelihood of testing interfaces being mistaken for design issues.</p>
<p> </p>
<h3>Tradeoffs and new realities</h3>
<p>This approach introduces its own challenges. First time setup for a designer is complex, and navigating the codebase and working through unfamiliar tools takes effort.</p>
<div class="wp-caption aligncenter"><img alt="Screenshot of Android Studio showing Claude assisting with a build error alongside the Firefox for Android codebase and a live device preview of the Report Broken Site feature." class=" wp-image-4504" height="649" src="https://blog.mozilla.org/ux/files/2026/08/image5-300x195.png" width="998"><p class="wp-caption-text">Using Claude on the Firefox for Android codebase in Android Studio to build the prototype.</p></div>
<p>Adopting this approach requires a shift in the UX designer’s toolkit. It raises the barrier to entry by requiring baseline comfort with the terminal, build environments, and IDEs. But it also allows designers to move beyond “faking the experience” in Figma prototypes and start building directly in the app.</p>
<p><b>Building the prototype this way also changes how the work evolves. </b>Instead of worrying about defining everything upfront, requirements tend to emerge through interaction —i.e. edge cases, missing states, and unclear behaviors as the experience is built. In Figma, many of these details are easy to overlook; when you create a prototype by building directly, they become easier to find.</p>
<p>Of course, this realism has its limits. While the experience feels like a continuous system rather than a sequence of steps, I haven’t yet connected it to a backend, pulled in APIs, or tested cross-device capabilities across mobile, tablet, and desktop. I’m still at the start of this exploration. What I want to understand next is how native fidelity prototypes change the testing environment itself: whether participants explore differently, whether failures are easier to interpret, and what new friction this approach introduces for designers and teams.</p>
<p> </p>
<h3>Start failing for the right reasons</h3>
<p>To put it simply: <b>if prototypes constrain user behavior, they may also shape the insights we get from usability testing.</b></p>
<p>For Report Broken Site, the value of the native prototype was not just that it handled more states. It gave me a more honest way to sit with the experience before putting it in front of participants. I could edit the URL, switch issue types, trigger validation, and move around the app as the feature would exist in context. Because this was a mobile experience, that context mattered: I could test it on a real device, with real navigation patterns, real input behavior, and the surrounding app experience intact. Those details helped me look past whether the prototype was working and focus more directly on whether the experience was working.</p>
<p>That is what I mean by letting the design fail for the right reasons: understanding whether an experience fails because of the design itself, not because of a missing screen-to-screen connection, bad transition, or laggy Figma prototype. The next step is to test whether this translates into different participant behavior and more useful usability insights.</p>
<p> </p>
<p>Originally published on<a class="_ymio1r31 _ypr0glyw _zcxs1o36 _mizu1v1w _1ah3dkaa _ra3xnqa1 _128mdkaa _1cvmnqa1 _4davt94y _4bfu1r31 _1hms8stv _ajmmnqa1 _vchhusvi _kqswh2mm _ect4ttxp _2rkolb4i _syaz13af _1a3b1r31 _4fpr8stv _5goinqa1 _f8pj13af _9oik1r31 _1bnxglyw _jf4cnqa1 _30l313af _1nrm1r31 _c2waglyw _1iohnqa1 _9h8h12zz _10531ra0 _1ien1ra0 _n0fx1ra0 _1vhv17z1" href="https://medium.com/@aarjavpandya/let-your-designs-fail-for-the-right-reasons-4843c2fa453a" title="https://medium.com/firefox-ux/how-do-people-decide-whether-or-not-to-get-a-browser-extension-334c66ab4484"> medium.com</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.9]]></title>
<description><![CDATA[chore: bump version to 17.2.9]]></description>
<link>https://tsecurity.de/de/3704607/tools/github-v1729/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3704607/tools/github-v1729/</guid>
<pubDate>Wed, 05 Aug 2026 03:17:20 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><p>chore: bump version to 17.2.9</p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[David Burns: The Execution Trap: Stop Running Tests That Don't Need Running]]></title>
<description><![CDATA[We’ve all been there. You update a small piece of text or fix a tiny CSS bug. You push the code, and then… you wait. Your CI pipeline decides that this minor tweak means it needs to run your entire end-to-end regression suite.
It’s slow, it’s expensive, and honestly, it’s a sledgehammer to crack ...]]></description>
<link>https://tsecurity.de/de/3703929/tools/david-burns-the-execution-trap-stop-running-tests-that-dont-need-running/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3703929/tools/david-burns-the-execution-trap-stop-running-tests-that-dont-need-running/</guid>
<pubDate>Tue, 04 Aug 2026 19:00:42 +0200</pubDate>
<content:encoded><![CDATA[<p>We’ve all been there. You update a small piece of text or fix a tiny CSS bug. You push the code, and then… you wait. Your CI pipeline decides that this minor tweak means it needs to run your entire end-to-end regression suite.</p>
<p>It’s slow, it’s expensive, and honestly, it’s a sledgehammer to crack a nut.</p>
<p>If you tuned into Selenium Conference this year, you might have caught Simon Stewart’s talk. He hit on a topic that every team struggling with slow deployments needs to hear: we need to stop running things just because they are there.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[David Burns: Testing Shouldn't Be a Chore. Here is How to Make it Automatic.]]></title>
<description><![CDATA[Let’s be honest: nobody wakes up excited to do chores.
For a lot of engineering teams, testing feels exactly like that, a tedious, manual chore tacked onto the end of a long sprint. The developer finishes the feature, throws it over the wall, and prays it doesn’t bounce back with a list of bugs.
...]]></description>
<link>https://tsecurity.de/de/3703928/tools/david-burns-testing-shouldnt-be-a-chore-here-is-how-to-make-it-automatic/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3703928/tools/david-burns-testing-shouldnt-be-a-chore-here-is-how-to-make-it-automatic/</guid>
<pubDate>Tue, 04 Aug 2026 19:00:32 +0200</pubDate>
<content:encoded><![CDATA[<p>Let’s be honest: nobody wakes up excited to do chores.</p>
<p>For a lot of engineering teams, testing feels exactly like that, a tedious, manual chore tacked onto the end of a long sprint. The developer finishes the feature, throws it over the wall, and prays it doesn’t bounce back with a list of bugs.</p>
<p>When testing feels like an extra burden, people skip it, rush through it, or resent it. And that’s exactly when critical issues slip through into production.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Rust Programming Language Blog: Enabling the next iteration of the borrow checker on nightly]]></title>
<description><![CDATA[TL;DR We are enabling the next iteration of the borrow checker (coined Polonius Alpha)
on nightly in preparation for stabilization in the next few months.

Whaaaaaat?
Yes! You heard it right! The next iteration of the Rust borrow checker is coming! Rust's first borrow checker ("AST borrowck") was...]]></description>
<link>https://tsecurity.de/de/3703927/tools/the-rust-programming-language-blog-enabling-the-next-iteration-of-the-borrow-checker-on-nightly/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3703927/tools/the-rust-programming-language-blog-enabling-the-next-iteration-of-the-borrow-checker-on-nightly/</guid>
<pubDate>Tue, 04 Aug 2026 19:00:12 +0200</pubDate>
<content:encoded><![CDATA[<p>TL;DR We are enabling the next iteration of the borrow checker (coined Polonius Alpha)
on nightly in preparation for stabilization in the next few months.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/08/04/enabling-polonius-alpha-on-nighty/#whaaaaaat"></a>
Whaaaaaat?</h3>
<p>Yes! You heard it right! The next iteration of the Rust borrow checker is coming! Rust's first borrow checker ("AST borrowck") was very limited and was phased out <a href="https://blog.rust-lang.org/2019/11/01/nll-hard-errors/" rel="external">in 2019</a> in favor of <a href="https://rust-lang.github.io/rfcs/2094-nll.html" rel="external">NLL</a>, other than a "migrate mode" that was used to provide nice error messages. That migrate mode was finally removed <a href="https://blog.rust-lang.org/2022/08/05/nll-by-default" rel="external">in 2022</a>.</p>
<p>The <a href="https://github.com/rust-lang/polonius" rel="external">Polonius borrow checker</a> spun out of the NLL effort in 2018. The <a href="https://smallcultfollowing.com/babysteps/blog/2018/04/27/an-alias-based-formulation-of-the-borrow-checker/" rel="external">initial formulation</a> passed the NLL test suite and accepted (sound) code that NLL did not. However, performance was a critically-limiting factor; generally borrow check was slower than NLL, but certain programs were considerably slower than NLL to the extent that using that implementation/formulation of Polonius was a non-starter. <a href="https://github.com/nikomatsakis/polonius.next" rel="external">Attempts were made</a> over the years to implement the Polonius formulation in a performant manner, without much luck in addressing the core issues.</p>
<p>In 2023, <a href="https://smallcultfollowing.com/babysteps/series/polonius-revisited/" rel="external">a new formulation</a> of a Polonius-style borrow checker was imagined that required minimal rearchitecture of the existing NLL implementation and could be extended to allow more code to compile. We <a href="https://blog.rust-lang.org/inside-rust/2023/10/06/polonius-update/" rel="external">had hoped</a>, to try to stabilize this new formulation in 2024; but, various things popped up that delayed this.</p>
<p>But! We're nearly there now! At this point, there are no known remaining issues with the subset coined Polonius Alpha that we intend to stabilize. And, performance is generally acceptable for stabilization (will discuss that a bit below).</p>
<p>So, <strong>we are enabling the Polonius Alpha borrow checker on nightly</strong> for testing until we stabilize fully later in the year. We're doing this in order to help find:</p>
<ul>
<li>Any serious performance regressions we're unaware of</li>
<li>Unsoundness in the formulation that we haven't thought about</li>
<li>Any weird diagnostic issues that we need to improve
<ul>
<li>Note: we have not <em>yet</em> seen any diagnostic changes</li>
</ul>
</li>
</ul>
<p>You can report any issues <a href="https://github.com/rust-lang/rust/issues/160456" rel="external">on Github</a> or <a href="https://rust-lang.zulipchat.com/#narrow/channel/186049-t-types.2Fpolonius/topic/Polonius.20Alpha.20enabled.20on.20nightly/near/614373312" rel="external">on Zulip</a>.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/08/04/enabling-polonius-alpha-on-nighty/#okay-what-s-new"></a>
Okay, what's new?</h3>
<p>The key thing that Polonius Alpha enables that NLL does not is <em>flow-sensitive</em> borrow checking of lifetime outlives relationships.</p>
<p>Perhaps the smallest example demonstrating what will pass with Polonius Alpha but not the current NLL is:</p>
<pre class="giallo z-code"><code><span class="giallo-l"><span class="z-keyword">fn</span><span class="z-entity z-name z-function"> reborrow</span><span>(</span><span class="z-variable">a</span><span class="z-keyword z-operator">:</span><span class="z-keyword z-operator"> &amp;</span><span class="z-storage z-storage z-modifier">mut</span><span class="z-entity z-name z-type"> u8</span><span>)</span><span class="z-keyword z-operator"> -&gt;</span><span class="z-keyword z-operator"> &amp;</span><span class="z-storage z-storage z-modifier">mut</span><span class="z-entity z-name z-type"> u8</span><span> {</span></span>
<span class="giallo-l"><span class="z-storage z-type">    let</span><span class="z-variable"> b</span><span class="z-keyword z-operator z-assignment z-keyword z-operator"> =</span><span class="z-keyword z-operator"> &amp;</span><span class="z-storage z-storage z-modifier">mut</span><span class="z-keyword z-operator"> *</span><span class="z-variable">a</span><span>;</span></span>
<span class="giallo-l"><span class="z-keyword z-control">    if</span><span class="z-constant z-language"> true</span><span> {</span><span class="z-variable"> b</span><span> }</span><span class="z-keyword z-control"> else</span><span> {</span><span class="z-variable"> a</span><span> }</span></span>
<span class="giallo-l"><span>}</span></span></code></pre>
<p>However, the example you will see more often is:</p>
<pre class="giallo z-code"><code><span class="giallo-l"><span class="z-keyword">fn</span><span class="z-entity z-name z-function"> get_mut_or_default</span><span>&lt;</span><span>'</span><span class="z-entity z-name z-type">r</span><span>,</span><span class="z-entity z-name z-type"> K</span><span class="z-keyword z-operator">:</span><span class="z-entity z-name z-type"> Hash</span><span class="z-keyword z-operator"> +</span><span class="z-entity z-name z-type"> Eq</span><span class="z-keyword z-operator"> +</span><span class="z-entity z-name z-type"> Copy</span><span>,</span><span class="z-entity z-name z-type"> V</span><span class="z-keyword z-operator">:</span><span class="z-entity z-name z-type"> Default</span><span>&gt;</span><span>(</span></span>
<span class="giallo-l"><span class="z-variable">    map</span><span class="z-keyword z-operator">:</span><span class="z-keyword z-operator"> &amp;</span><span>'</span><span class="z-entity z-name z-type">r</span><span class="z-storage z-storage z-modifier"> mut</span><span class="z-entity z-name z-type"> HashMap</span><span>&lt;</span><span class="z-entity z-name z-type">K</span><span>,</span><span class="z-entity z-name z-type"> V</span><span>&gt;</span><span>,</span></span>
<span class="giallo-l"><span class="z-variable">    key</span><span class="z-keyword z-operator">:</span><span class="z-entity z-name z-type"> K</span><span>,</span></span>
<span class="giallo-l"><span>)</span><span class="z-keyword z-operator"> -&gt;</span><span class="z-keyword z-operator"> &amp;</span><span>'</span><span class="z-entity z-name z-type">r</span><span class="z-storage z-storage z-modifier"> mut</span><span class="z-entity z-name z-type"> V</span><span> {</span></span>
<span class="giallo-l"><span class="z-keyword z-control">    match</span><span class="z-variable"> map</span><span class="z-keyword z-operator">.</span><span class="z-entity z-name z-function">get_mut</span><span>(</span><span class="z-keyword z-operator">&amp;</span><span class="z-variable">key</span><span>)</span><span> {</span></span>
<span class="giallo-l"><span class="z-entity z-name z-type">        Some</span><span>(</span><span class="z-variable">value</span><span>)</span><span class="z-keyword z-operator"> =&gt;</span><span class="z-variable"> value</span><span>,</span></span>
<span class="giallo-l"><span class="z-entity z-name z-type">        None</span><span class="z-keyword z-operator"> =&gt;</span><span> {</span></span>
<span class="giallo-l"><span class="z-variable">            map</span><span class="z-keyword z-operator">.</span><span class="z-entity z-name z-function">insert</span><span>(</span><span class="z-variable">key</span><span>,</span><span class="z-entity z-name z-namespace"> V</span><span class="z-keyword z-operator">::</span><span class="z-entity z-name z-function">default</span><span>(</span><span>)</span><span>)</span><span>;</span></span>
<span class="giallo-l"><span class="z-variable">            map</span><span class="z-keyword z-operator">.</span><span class="z-entity z-name z-function">get_mut</span><span>(</span><span class="z-keyword z-operator">&amp;</span><span class="z-variable">key</span><span>)</span><span class="z-keyword z-operator">.</span><span class="z-entity z-name z-function">unwrap</span><span>(</span><span>)</span></span>
<span class="giallo-l"><span>        }</span></span>
<span class="giallo-l"><span>    }</span></span>
<span class="giallo-l"><span>}</span></span></code></pre>
<p>The issue is that the <code>Some(value) =&gt; value</code> branch causes the borrow checker to think that the borrow returned by <code>map.get_mut(&amp;key)</code> lives for the entire function (because of the <code>&amp;'r mut V</code> return type), even though that borrow isn't live in the <code>None</code> branch. NLL's analysis is <em>flow-insensitive</em>.</p>
<p>Polonius Alpha passes this because its analysis is <em>flow-sensitive</em>, and it knows that the borrow isn't live in the <code>None</code> branch.</p>
<p>Now, Polonius Alpha is not <em>perfect</em>; some programs that would compile under legacy Polonius (the slow original implementation) don't compile with Polonius Alpha. (This is of course why we call it "Polonius Alpha"). For example:</p>
<pre class="giallo z-code"><code><span class="giallo-l"><span class="z-storage z-type">struct</span><span class="z-entity z-name z-type"> X</span><span> {</span><span class="z-variable"> next</span><span class="z-keyword z-operator">:</span><span class="z-entity z-name z-type"> Option</span><span>&lt;</span><span class="z-entity z-name z-type">Box</span><span>&lt;</span><span class="z-entity z-name z-type">X</span><span>&gt;</span><span>&gt;</span><span> }</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span class="z-keyword">fn</span><span class="z-entity z-name z-function"> conditional</span><span>(</span><span>)</span><span> {</span></span>
<span class="giallo-l"><span class="z-storage z-type">    let</span><span class="z-storage z-storage z-modifier"> mut</span><span class="z-variable"> b</span><span class="z-keyword z-operator z-assignment z-keyword z-operator"> =</span><span class="z-entity z-name z-type"> Some</span><span>(</span><span class="z-entity z-name z-type">Box</span><span class="z-keyword z-operator">::</span><span class="z-entity z-name z-function">new</span><span>(</span><span class="z-entity z-name z-type">X</span><span> {</span><span class="z-variable"> next</span><span class="z-keyword z-operator">:</span><span class="z-entity z-name z-type"> None</span><span> }</span><span>)</span><span>)</span><span>;</span></span>
<span class="giallo-l"><span class="z-storage z-type">    let</span><span class="z-storage z-storage z-modifier"> mut</span><span class="z-variable"> p</span><span class="z-keyword z-operator z-assignment z-keyword z-operator"> =</span><span class="z-keyword z-operator"> &amp;</span><span class="z-storage z-storage z-modifier">mut</span><span class="z-variable"> b</span><span>;</span></span>
<span class="giallo-l"><span class="z-keyword z-control">    while</span><span class="z-storage z-type"> let</span><span class="z-entity z-name z-type"> Some</span><span>(</span><span class="z-variable">now</span><span>)</span><span class="z-keyword z-operator z-assignment z-keyword z-operator"> =</span><span class="z-variable"> p</span><span> {</span></span>
<span class="giallo-l"><span class="z-keyword z-control">        if</span><span class="z-constant z-language"> true</span><span> {</span></span>
<span class="giallo-l"><span class="z-variable">            p</span><span class="z-keyword z-operator z-assignment z-keyword z-operator"> =</span><span class="z-keyword z-operator"> &amp;</span><span class="z-storage z-storage z-modifier">mut</span><span class="z-variable"> now</span><span class="z-keyword z-operator">.</span><span>next</span><span>;</span></span>
<span class="giallo-l"><span>        }</span></span>
<span class="giallo-l"><span>    }</span></span>
<span class="giallo-l"><span>}</span></span></code></pre>
<p>(As a slight note: we have also found programs that compile with Polonius Alpha but not legacy Polonius, so it's not really a full subset.)</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/08/04/enabling-polonius-alpha-on-nighty/#so-what-about-performance"></a>
So, what about performance?</h3>
<p>Polonius Alpha currently does strictly equal or more work compared to NLL, so we have been paying particular attention to potential performance regressions.</p>
<p>From the top ten thousand crates by downloads on crates.io, we have seen relatively few "significant" regressions, and even crates that have a "significant" regression are typically <em>relatively</em> minimal:</p>
<p><img alt="top10k_leaf_graph" src="https://blog.rust-lang.org/2026/08/04/enabling-polonius-alpha-on-nighty/polonius_top10k_leaf.png"></p>
<p><em>Each point represents a crate within the 10,000 most-downloaded crates. The black line is an arbitrary threshold of significance, set to a 1% regression and quadratically scaled below 30 seconds. Red points are crates that pass this arbitrary regression threshold. X-axis is compile time (for the leaf crate only without dependencies) under NLL; Y-axis is the ratio of compile time under Polonius Time compared to NLL.</em></p>
<p>If you look at the top five crates, they are:</p>
<p><img alt="top10k_leaf_table" src="https://blog.rust-lang.org/2026/08/04/enabling-polonius-alpha-on-nighty/polonius_top10k_leaf_table.png"></p>
<p>Outside the top ten thousand crates, we have focused mainly on crates with many borrows. The worst case we've seen is a 2-3x regression.</p>
<p>We have done some initial triage of the causes of these regressions and are thinking about the best way to fix them. Though, overall we think these regressions are fairly reasonable even if we <em>can't</em> fix them, given how rare and relatively minimal they are compared to the additional power Polonius Alpha brings over NLL.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/08/04/enabling-polonius-alpha-on-nighty/#i-really-don-t-want-this-how-do-i-opt-out"></a>
I really don't want this. How do I opt-out?</h3>
<p>To reiterate: this is only being enabled on nightly. But if you want to disable Polonius Alpha, and only use the stable NLL, you can pass <code>-Zpolonius=off</code> to <code>rustc</code>, use <code>RUSTFLAGS=-Zpolonius=off</code>, or with a project's <a href="https://doc.rust-lang.org/cargo/reference/config.html" rel="external"><code>.cargo/config.toml</code></a> configuration file:</p>
<pre class="giallo z-code"><code><span class="giallo-l"><span>[</span><span>target</span><span>.</span><span>x86_64-unknown-linux-gnu</span><span>]</span></span>
<span class="giallo-l"><span class="z-variable">rustflags</span><span> =</span><span class="z-punctuation z-definition z-array"> [</span><span class="z-punctuation z-definition z-string z-string">"</span><span class="z-string z-quoted z-string">-Zpolonius=off</span><span class="z-punctuation z-definition z-string z-string">"</span><span class="z-punctuation z-definition z-array">]</span></span></code></pre>
<p>If you have to do this, for some reason, please do tell us why <a href="https://github.com/rust-lang/rust/issues/160456" rel="external">on Github</a> or <a href="https://rust-lang.zulipchat.com/#narrow/channel/186049-t-types.2Fpolonius/topic/Polonius.20Alpha.20enabled.20on.20nightly/near/614373312" rel="external">on Zulip</a>.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/08/04/enabling-polonius-alpha-on-nighty/#what-s-next"></a>
What's next?</h3>
<p>Over the next few months, we will be monitoring Github and Zulip for any reported issues about Polonius Alpha. We will also be working to address known performance regressions. Finally, we will be working on internal documentation about the implementation. All prior to stabilization. Then, we are aiming to stabilize prior to the end of the year!</p>
<p>Although some programs that we <em>want</em> to compile don't work with Polonius Alpha (nor NLL today), we don't currently have any concrete plans to continue active feature work on the Polonius implementation after the stabilization of Polonius Alpha. We expect to continue to optimize the implementation and address any performance regressions for a little while. We will likely come back to Polonius feature-work <em>at some point</em>, but given that Polonius Alpha solves the most-encountered borrow-check issues, we are shifting our time to other high-priority work for the near future.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.8]]></title>
<description><![CDATA[chore: bump version to 17.2.8]]></description>
<link>https://tsecurity.de/de/3702210/tools/github-v1728/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3702210/tools/github-v1728/</guid>
<pubDate>Tue, 04 Aug 2026 06:25:04 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><p>chore: bump version to 17.2.8</p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.7]]></title>
<description><![CDATA[@oh-my-pi/pi-ai
Changed

Replaced arktype with @oh-my-pi/omptype for schema validation, delivering up to 100x faster schema construction and 60-100x faster validation while maintaining full compatibility with existing type/Type exports and the isArkSchema contract.

Fixed

Fixed OpenAI-Codex (Cha...]]></description>
<link>https://tsecurity.de/de/3701937/tools/github-v1727/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3701937/tools/github-v1727/</guid>
<pubDate>Tue, 04 Aug 2026 02:11:50 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-ai</h2>
<h3>Changed</h3>
<ul>
<li>Replaced <code>arktype</code> with <code>@oh-my-pi/omptype</code> for schema validation, delivering up to 100x faster schema construction and 60-100x faster validation while maintaining full compatibility with existing <code>type</code>/<code>Type</code> exports and the <code>isArkSchema</code> contract.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed OpenAI-Codex (ChatGPT OAuth) requests failing with an <code>Unsupported service_tier: auto</code> error on default or legacy sessions by omitting the implicit <code>auto</code> service tier on the wire.</li>
<li>Fixed an issue where Cursor <code>kimi-k3</code> sessions would break permanently when a same-model assistant turn was persisted without thinking blocks, replacing hard errors with graceful warnings.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where setting <code>thinking-level: off</code> failed to disable reasoning on direct DeepSeek V4 requests.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Changed</h3>
<ul>
<li>Replaced arktype with @oh-my-pi/omptype for tool parameter and config schemas, significantly improving startup performance with ~100x faster schema construction. Config schema errors are now reported via OmpErrors using the same path/problem structure.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where custom, extension, or hook tool wrappers stripped schema methods off parameters, causing wire-schema detection failures and status-line token estimator crashes.</li>
<li>Fixed a bug where agent() calls in evaluation cells ignored turn cancellation and continued running indefinitely.</li>
<li>Fixed the built-in tail command to exit silently with code 141 (SIGPIPE) instead of failing with a "Broken pipe" error when a downstream pipeline reader exits early.</li>
<li>Fixed the in-process ps shell builtin to support common procps/BSD format specifiers, including tpgid, pri, flags, real/effective user/group columns, wchan, fault counters, sz, and the STAT + foreground flag.</li>
<li>Fixed install.sh falsely reporting success on musl-based systems (such as Alpine Linux) when the binary fails to start; the installer now smoke-tests the binary, exits non-zero on failure, and provides remediation steps.</li>
<li>Fixed Codex config.toml discovery incorrectly importing MCP servers that are configured with enabled = false.</li>
<li>Fixed bash.patterns allow rules rejecting valid commands when quoted arguments contained shell metacharacters (such as Cargo benchmark regex filters).</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Added</h3>
<ul>
<li>Added missing procps/BSD output format specifiers and aliases to the in-process <code>ps</code> shell builtin, including support for columns like <code>tpgid</code>, <code>pri</code>, <code>flags</code>, <code>wchan</code>, and various user/group/time fields.</li>
<li>Updated <code>ps -j</code> to include the TPGID column, <code>ps -l</code> to display the single-character S column, and the STAT column to support the <code>+</code> foreground process group flag.</li>
</ul>
<h2>@oh-my-pi/omptype</h2>
<h3>Added</h3>
<ul>
<li>Introduced omptype, an ArkType-compatible schema validation library featuring a lazy JIT runtime that compiles specialized validators on the third call for ultra-fast hot-path validation and low construction overhead.</li>
<li>Added support for a rich string definition DSL (primitives, literals, unions, arrays, bounds, inline defaults, and optional keys), object definitions (including index signatures and strict key rejection/deletion), and comprehensive composition methods (.or, .and, .array, .pipe, .narrow, .describe, .default, .allows, .assert).</li>
<li>Added TypeBox-style (@oh-my-pi/omptype/typebox) and Zod-style (@oh-my-pi/omptype/zod) authoring adapters that produce native omptype schemas.</li>
<li>Added support for recursive named scopes, modules, runtime generics, fixed/optional/variadic tuples, Date literals/bounds, disjointness-aware intersections, separate input/output inference, and draft-2020-12 JSON Schema emission.</li>
<li>Shipped transpiled ESM and TypeScript declarations in the npm package to support plain Node.js environments, while preserving TS source resolution for Bun consumers.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Optimized the lazy JIT compiler to support tuples, refinements, morphs, intersections, instances, and recursive aliases, while reducing schema construction overhead.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed a TypeScript compiler error (TS2589: "type instantiation is excessively deep") when using generic fluent composition methods on nested schemas.</li>
<li>Fixed type.raw() results (BaseType) to correctly expose fluent composition methods like .array(), .or(), and .pipe().</li>
<li>Fixed an issue in the TypeBox adapter where keyword-carrying schemas (e.g., uniqueItems arrays) would throw an error during JSON Schema emission.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(ai): stop forwarding auto service tier to codex by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5051440202" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7520" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7520/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7520">#7520</a></li>
<li>fix(setup): verify musl binary starts before reporting install success by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5053233202" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7546" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7546/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7546">#7546</a></li>
<li>fix(cursor): degrade K3 same-model history missing thinking by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5051402591" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7518" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7518/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7518">#7518</a></li>
<li>fix(discovery): honor disabled codex mcp servers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5052096215" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7540" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7540/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7540">#7540</a></li>
<li>fix(coding-agent): allow quoted metacharacters in bash patterns by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5054168974" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7553" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7553/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7553">#7553</a></li>
<li>fix(catalog): honor disabled DeepSeek thinking by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5054528208" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7561" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7561/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7561">#7561</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.6...v17.2.7">v17.2.6...v17.2.7</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.6]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Fixed

Fixed an issue where peer-IRC interrupts (such as subagent messages) incorrectly skipped non-interruptible tool calls queued in the same batch.
Improved interruption messaging to clearly distinguish between parent-agent steering and system-advisory interruptions.

@...]]></description>
<link>https://tsecurity.de/de/3701476/tools/github-v1726/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3701476/tools/github-v1726/</guid>
<pubDate>Mon, 03 Aug 2026 20:21:07 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where peer-IRC interrupts (such as subagent messages) incorrectly skipped non-interruptible tool calls queued in the same batch.</li>
<li>Improved interruption messaging to clearly distinguish between parent-agent steering and system-advisory interruptions.</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>Added profile-aware Bedrock Mantle region selection, authenticated model discovery, bearer-token or SigV4 authentication, and credential refresh handling for OpenAI Responses models.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where Ollama requests without a user-role message would fail to generate output or silently fail with a misleading error.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added the <code>bedrock-mantle</code> provider with authenticated model discovery for OpenAI GPT-5.4, GPT-5.5, and GPT-5.6 models (including Luna and Terra variants with corrected pricing) served through Amazon Bedrock's Responses endpoint.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed dynamic discovery for the <code>deepseek-v4</code> model family (such as <code>deepseek-v4-flash-0731</code>) under <code>alibaba-token-plan</code> missing reasoning configuration and maximum thinking effort.</li>
<li>Fixed GitHub Copilot dynamic discovery retaining stale bundled prices for default-context models instead of using the provider's reported default-tier prices.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added the <code>/reset</code> slash command to reset the conversation context in place: it drops the live messages, queued turns, and pending tool calls (and cancels the turn's async jobs, post-prompt continuations, and checkpoint/plan runtime state) while keeping the session id, title, cwd, model, and on-disk transcript. It records a durable reset boundary so the live transcript stays cleared across rebuilds (theme change, focus attach, <code>/shake</code>, resume) instead of resurrecting the pre-reset messages, while the full pre-reset history stays on disk (<a href="https://github.com/can1357/oh-my-pi/issues/3580" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/3580/hovercard">#3580</a>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed extension slash commands appearing as user prompts after being handled locally.</li>
<li>Preserved explicit session titles when branching from an earlier conversation turn.</li>
<li>Fixed an issue where unhandled JavaScript rejections in the browser guest could crash the main process and active sessions, converting them into tool errors instead.</li>
<li>Fixed a critical issue on Windows where cancelling a timed-out bash tool command could mistakenly terminate the main process due to PID recycling.</li>
<li>Fixed an issue where supervised processes reaching a terminal state failed to notify their launching session, requiring polling; the broker now actively notifies the session upon process completion.</li>
<li>Fixed crashes on macOS when using PCRE2-only grep patterns with Bun by defaulting to the interpreted PCRE2 engine instead of JIT, and introduced the <code>OMP_PCRE2_JIT</code> environment variable to manually control JIT compilation.</li>
<li>Fixed issues with <code>/btw</code> branch promotion where branches could park behind active turns, cut from outdated session leaves, or leave rejected branch keys indistinguishable from composer input.</li>
<li>Fixed database bloat by ensuring archived main and nested session rows are properly cleaned up from <code>stats.db</code> during garbage collection.</li>
<li>Fixed startup hanging during local model discovery when a timed-out transport left its request pending, which blocked the CLI before OAuth login could finish (<a href="https://github.com/can1357/oh-my-pi/issues/7482" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7482/hovercard">#7482</a>).</li>
</ul>
<h2>@oh-my-pi/pi-mnemopi</h2>
<h3>Added</h3>
<ul>
<li>Added opt-in SQLite page-size configuration for file-backed databases, configurable via the <code>MNEMOPI_DB_PAGE_SIZE</code> environment variable or the <code>pageSize</code> option in <code>openDatabase</code>. Existing databases retain their original page size.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Added</h3>
<ul>
<li>Added non-blocking, process-owned <code>FileLock</code> bindings using abstract Unix sockets on Linux, named mutexes on Windows, and persistent <code>flock(2)</code> sidecars on other Unix platforms.</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Added</h3>
<ul>
<li>Added a shared <code>file-lock</code> utility backed by process-owned native OS locks with automatic crash release and bounded asynchronous retry.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(ai): add authenticated Bedrock Mantle routing by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/anatoli-tsinovoy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/anatoli-tsinovoy">@anatoli-tsinovoy</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5019253077" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7080" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7080/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7080">#7080</a></li>
<li>fix(browser): guard cmux guest rejections by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5041708843" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7368" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7368/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7368">#7368</a></li>
<li>fix(pi-shell): spare host process from run-cancellation sweeps by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5046039362" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7453" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7453/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7453">#7453</a></li>
<li>fix(agent): distinguish parent steering from advisories by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fatihaziz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fatihaziz">@fatihaziz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5046747976" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7460" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7460/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7460">#7460</a></li>
<li>fix(ai): guarantee ollama user turn and surface done_reason load by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5047431775" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7466" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7466/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7466">#7466</a></li>
<li>fix(catalog): add reasoning config for deepseek-v4 family in alibaba-token-plan by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/21307369/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/21307369">@21307369</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5047572626" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7468" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7468/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7468">#7468</a></li>
<li>fix(catalog): use live Copilot default-tier prices by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5047925134" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7473" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7473/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7473">#7473</a></li>
<li>fix(session): preserve title when branching by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lemonleks/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lemonleks">@lemonleks</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5048329130" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7477" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7477/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7477">#7477</a></li>
<li>fix(tui): consume extension slash commands locally by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lemonleks/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lemonleks">@lemonleks</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5048614527" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7481" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7481/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7481">#7481</a></li>
<li>fix(agent): keep queued non-interruptible tools alive on peer-IRC interrupt by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5049758511" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7495" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7495/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7495">#7495</a></li>
<li>feat(mnemopi): add opt-in SQLite page-size selection by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bradmccormack/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bradmccormack">@bradmccormack</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5034951178" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7215" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7215/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7215">#7215</a></li>
<li>fix(coding-agent): prune archived session stats by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alphastorm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alphastorm">@alphastorm</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5037971432" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7287" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7287/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7287">#7287</a></li>
<li>fix(hub): wake owners when supervised processes exit by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paralin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paralin">@paralin</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5042093245" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7377" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7377/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7377">#7377</a></li>
<li>fix(grep): disable pcre2 jit on macos by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5047590197" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7469" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7469/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7469">#7469</a></li>
<li>fix(session): prevent stale /btw branch promotion by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5048143670" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7475" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7475/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7475">#7475</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lemonleks/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lemonleks">@lemonleks</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5048329130" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7477" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7477/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7477">#7477</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bradmccormack/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bradmccormack">@bradmccormack</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5034951178" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7215" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7215/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7215">#7215</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.5...v17.2.6">v17.2.5...v17.2.6</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: Firefox Profiler Deployment (August 3, 2026)]]></title>
<description><![CDATA[The latest version of the Firefox Profiler is now live! Check out the full changelog below to see what’s changed:
Highlights:

[Nazım Can Altınova] Add an “apply source map” button to the profile info panel (#6200)
[Nazım Can Altınova] Show markers that are in the committed range only in profiler...]]></description>
<link>https://tsecurity.de/de/3701475/tools/firefox-tooling-announcements-firefox-profiler-deployment-august-3-2026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3701475/tools/firefox-tooling-announcements-firefox-profiler-deployment-august-3-2026/</guid>
<pubDate>Mon, 03 Aug 2026 20:21:06 +0200</pubDate>
<content:encoded><![CDATA[<p>The latest version of the <a href="https://profiler.firefox.com/" rel="noopener nofollow ugc">Firefox Profiler</a> is now live! Check out the full changelog below to see what’s changed:</p>
<p><strong>Highlights:</strong></p>
<ul>
<li>[Nazım Can Altınova] Add an “apply source map” button to the profile info panel (<a href="https://github.com/firefox-devtools/profiler/pull/6200" rel="noopener nofollow ugc">#6200</a>)</li>
<li>[Nazım Can Altınova] Show markers that are in the committed range only in <code>profiler-cli thread markers</code> (<a href="https://github.com/firefox-devtools/profiler/pull/6222" rel="noopener nofollow ugc">#6222</a>)</li>
<li>[Alex Thayer] Allow exporting argument values in profiles (<a href="https://github.com/firefox-devtools/profiler/pull/5914" rel="noopener nofollow ugc">#5914</a>)</li>
</ul>
<p><strong>Other Changes:</strong></p>
<ul>
<li>[nirmaladvani] remove unused collectSourceIndicesFromThreads <a href="https://github.com/firefox-devtools/profiler/issues/6086" rel="noopener nofollow ugc">#6086</a> (<a href="https://github.com/firefox-devtools/profiler/pull/6219" rel="noopener nofollow ugc">#6219</a>)</li>
<li>[fatadel] Create the IPC track from the timeline-ipc schema display location (<a href="https://github.com/firefox-devtools/profiler/pull/6213" rel="noopener nofollow ugc">#6213</a>)</li>
<li>[Markus Stange] Allow specifying the stage reliost symbol server (<a href="https://github.com/firefox-devtools/profiler/pull/6228" rel="noopener nofollow ugc">#6228</a>)</li>
<li>[Nazım Can Altınova] <img alt=":clockwise_vertical_arrows:" class="emoji" height="20" src="https://emoji.discourse-cdn.com/twitter/clockwise_vertical_arrows.png?v=15" title=":clockwise_vertical_arrows:" width="20"> Sync: l10n → main (August 3, 2026) (<a href="https://github.com/firefox-devtools/profiler/pull/6234" rel="noopener nofollow ugc">#6234</a>)</li>
<li>[Nazım Can Altınova] Bump profiler-cli version to 0.7.0 (<a href="https://github.com/firefox-devtools/profiler/pull/6235" rel="noopener nofollow ugc">#6235</a>)</li>
</ul>
<p>Big thanks to our amazing localizers for making this release possible:</p>
<ul>
<li>de: Ger</li>
<li>de: Ralf Duehnfahr</li>
<li>el: Jim Spentzos</li>
<li>en-GB: Ian Neal</li>
<li>fy-NL: Fjoerfoks</li>
<li>ia: Melo46</li>
<li>it: Francesco Lodolo [:flod]</li>
<li>nl: Mark Heijl</li>
<li>ru: Valery Ledovskoy</li>
<li>sv-SE: Andreas Pettersson</li>
<li>sv-SE: Luna Jernberg</li>
<li>zh-TW: Pin-guang Chen</li>
</ul>
<p>Find out more about the Firefox Profiler on <a href="https://profiler.firefox.com/" rel="noopener nofollow ugc">profiler.firefox.com</a>! If you have any questions, join the discussion on our <a href="https://chat.mozilla.org/#/room/%23profiler:mozilla.org" rel="noopener nofollow ugc">Matrix channel</a>!</p>
            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://discourse.mozilla.org/t/firefox-profiler-deployment-august-3-2026/149100">Read full topic</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.5]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Breaking Changes

Tool examples embedded in tool descriptions now always render in Python call syntax, and the exampleDialect option has been removed from AppendOnlyContextManager build options.
Updated normalizeTools to accept a NormalizeToolsOptions configuration object ...]]></description>
<link>https://tsecurity.de/de/3700321/tools/github-v1725/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3700321/tools/github-v1725/</guid>
<pubDate>Mon, 03 Aug 2026 10:23:49 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Tool examples embedded in tool descriptions now always render in Python call syntax, and the <code>exampleDialect</code> option has been removed from <code>AppendOnlyContextManager</code> build options.</li>
<li>Updated <code>normalizeTools</code> to accept a <code>NormalizeToolsOptions</code> configuration object (<code>{ injectIntent, pruneDescriptions }</code>) instead of positional booleans.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where runs would fail with an error if an Anthropic stream was truncated after complete tool calls were streamed; the agent now recovers and executes those tool calls.</li>
<li>Fixed an issue where artifact recovery reads could be incorrectly elided during compaction.</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Changed</h3>
<ul>
<li>Standardized tool-call examples in <code>renderToolExamples</code> and <code>renderToolInventory</code> to use Python keyword-argument syntax (<code>name(key="value")</code>) across all models, removing the model-specific dialect parameter and the <code>DialectRenderOptions.example</code> flag.</li>
<li>Updated <code>renderToolInventory</code> to render the tool catalog as a unified OpenAI-Harmony-style <code>## functions</code> block using TypeScript type declarations and comments, replacing the previous per-tool Markdown sections.</li>
<li>Added a <code>style: "harmony"</code> option to <code>jsonSchemaToTypeScript</code> for generating compact, comma-delimited TypeScript definitions.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed a session-blocking issue where unescaped Harmony control tokens in replayed assistant responses and tool inputs caused subsequent requests to be rejected with <code>invalid_prompt</code> errors.</li>
<li>Fixed an issue where Codex Responses dropped native image-generation results from assistant content and replays due to stale <code>generating</code> statuses.</li>
<li>Fixed Anthropic stream truncation handling where unexpected connection closures were incorrectly treated as clean stops, causing the agent loop to halt silently mid-sentence.</li>
<li>Optimized Anthropic prompt caching to prevent unnecessary cache invalidation of the entire system prefix when volatile project footer details (such as current working directory, date, or workspace tree) change.</li>
</ul>
<h2>@oh-my-pi/browser-relay</h2>
<h3>Added</h3>
<ul>
<li>Initial release of the Chrome MV3 extension, enabling the omp browser tool to attach to and drive existing browser tabs via chrome.debugger.</li>
<li>Added automatic, robust tab management that groups active agent-driven tabs into a dedicated per-window "omp" tab group and ensures clean dissolution upon disconnect.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where newly advertised chat models were dropped during dynamic discovery for the <code>alibaba-token-plan</code> provider.</li>
<li>Fixed a <code>400</code> error when forcing a specific tool with DeepSeek reasoning models on OpenCode Zen/Go gateways by automatically downgrading the tool selection mode to <code>auto</code> while keeping the tool advertised.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Replaced the computer tool's coordinate-batch schema with persistent JavaScript runs, and removed computer.backend and model-specific controller switching.</li>
<li>Changed the edit tool's replace mode from a multi-edit batch schema to a single-edit schema ({ path, old_string, new_string, replace_all? }).</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added a relay browser mode to drive local Chrome tabs via the OMP Browser Relay extension, supporting automatic daemon startup and tab grouping.</li>
<li>Added a scriptable desktop session featuring window-targeted capture and input, native accessibility trees, clipboard access, and streamed screenshots.</li>
<li>Added broker-shared language servers (controlled by the lsp.shared setting) to multiplex LSP servers across multiple instances in a project, reducing cold-start times and resource usage.</li>
<li>Added optional timeoutMs to discovery configuration in provider options to configure custom HTTP probe timeouts for llama.cpp, Ollama, and OpenAI-compatible endpoints.</li>
<li>Added a cross-platform, in-process ps shell builtin with custom columns, sorting, and process metrics.</li>
<li>Added the --service-tier flag to override the OpenAI service tier for a session.</li>
<li>Added a configurable per-request web search timeout via providers.webSearchTimeoutSeconds.</li>
<li>Added turn-aware /tree navigation shortcuts (Alt+Up/Alt+Down, Home/End, PageUp/PageDown) to traverse user and assistant turns.</li>
<li>Added display.hideToolActivity and a Ctrl+Shift+O shortcut to toggle the visibility of model-initiated tool calls and results.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Exposed the script-driven computer schema to all models, including those with provider-native Computer Use support.</li>
<li>Reduced omp --help cold-start latency and memory usage by rendering lightweight command metadata.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed durability of session transcripts to prevent data loss on process crashes.</li>
<li>Fixed a bug on Windows where a timed-out bash command could terminate the main omp process.</li>
<li>Fixed headless runs hanging or leaving background workers alive after completion.</li>
<li>Fixed a crash when opening the Agent Hub after resuming a session.</li>
<li>Fixed /mcp reauth environment variable expansion and token validation.</li>
<li>Fixed fuzzy replace-all edits re-matching replacement text indefinitely, which could freeze the TUI.</li>
<li>Fixed inspect_image ignoring configured thinking effort for vision models.</li>
<li>Fixed compiled binaries dropping certain extensions with complex CommonJS/ESM dependency graphs.</li>
<li>Fixed template argument substitution executing recursive placeholder expansion when positional arguments contain literal $@ or $ARGUMENTS tokens.</li>
<li>Fixed project-scoped session directories using leading-hyphen names and collapsing distinct paths.</li>
<li>Fixed manual /shake leaving the context budget anchored to stale pre-shake token counts.</li>
<li>Fixed Mnemopi scoped recall reporting "No relevant memories found" when individual targets fail internally.</li>
<li>Fixed skill:// resolution ignoring custom directories when a same-named skill exists in a default path.</li>
<li>Fixed image paste failing on Wayland-only Linux sessions.</li>
<li>Fixed prewalk switching to the fast model during read-only investigations.</li>
<li>Fixed self-update misclassifying glibc Linux hosts with an installed musl loader as musl hosts.</li>
<li>Fixed omp setup python to validate the correct interpreter used by the Python eval runtime.</li>
<li>Fixed the terminal-tab title dropping to idle while an unsuppressed async job was still running.</li>
<li>Fixed redirected stdin being ignored when Bun reports a pipe with an undefined isTTY.</li>
<li>Fixed a literal API key configured via /login being hijacked on Windows by case-differing system environment variables.</li>
<li>Fixed Esc during a streaming /loop iteration pausing the loop instead of aborting the current turn.</li>
<li>Fixed heavily branched conversation trees shifting linear continuations into disconnected columns.</li>
<li>Fixed plugin installation validation failures for legacy compatibility shims.</li>
<li>Removed hard-coded references to disabled or absent agents in system and tool prompts.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Replaced DesktopSession.execute(actions, window) and action batches with dedicated per-operation methods for capture, pointer, keyboard, window, and accessibility. Capture capabilities now apply per call, and coordinate input requires a prior frame for the same target.</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added a cross-platform, in-process ps shell builtin supporting BSD/procps selection forms, custom output columns, sorting, process metrics, and header suppression.</li>
<li>Added unified desktop backends for macOS, Win32, X11, and Wayland behind a single session API, featuring capture-free window discovery, isolated capture, explicit background/foreground delivery, native accessibility trees (AX/UIA/AT-SPI) with generational references, and structured errors for unsupported background input.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed accessibility snapshots incorrectly marking a window root as focused based on its app-local AXFocused attribute when another application held global focus; the root annotation now correctly reflects the global window-roster focus flag.</li>
<li>Improved coordinate-frame error messages for pointer input before capture, out-of-frame coordinates, and between-display points to clearly explain the capture-frame contract and remedy instead of throwing a generic bounds check.</li>
<li>Fixed duplicated characters in AppKit targets on macOS caused by background keyboard events being posted through both CoreGraphics and SkyLight; events are now delivered once via the authenticated SkyLight route.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Kitty and Ghostty keyboard shortcuts on non-Latin keyboard layouts by requesting base-layout key reporting from the terminal.</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Added</h3>
<ul>
<li>Added utility functions <code>parseFlag()</code>, <code>getBrowserRelayDir()</code>, and <code>getGlobalDaemonRuntimeDir()</code> to support browser relay mode and global daemon runtime directory resolution.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Updated the lightweight CLI runner to support static command metadata, allowing root help to render without importing full command implementations.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>perf(cli): keep root help off runtime graph by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/eggpeat/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/eggpeat">@eggpeat</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5033529980" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7205" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7205/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7205">#7205</a></li>
<li>fix(coding-agent): let customDirectories skills win over default-path duplicates by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhang17-24/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhang17-24">@zhang17-24</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5036087935" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7246" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7246/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7246">#7246</a></li>
<li>fix(omp): refresh context budget after shake by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oleksoleksoleks/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oleksoleksoleks">@oleksoleksoleks</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5038578336" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7310" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7310/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7310">#7310</a></li>
<li>fix(agent): skip prewalk switch on read-only xd:// device calls by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5038716163" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7314" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7314/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7314">#7314</a></li>
<li>fix(catalog): downgrade forced tool choice for deepseek reasoning models by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5038809588" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7317" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7317/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7317">#7317</a></li>
<li>fix(coding-agent): support Wayland image paste by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5038811015" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7318" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7318/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7318">#7318</a></li>
<li>fix(tui): requested base-layout keys for shortcuts by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5038921715" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7321" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7321/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7321">#7321</a></li>
<li>fix(ai): cache stable system prefix across cwd/date footer changes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5039412534" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7326" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7326/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7326">#7326</a></li>
<li>fix(compaction): stop shake from re-eliding artifact recovery reads by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jwmacd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jwmacd">@jwmacd</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5039542401" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7327" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7327/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7327">#7327</a></li>
<li>fix(tui): preserve loop after cancelling iteration by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5039642305" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7331" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7331/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7331">#7331</a></li>
<li>fix(tui): compact linear branch continuations by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5039729707" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7333" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7333/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7333">#7333</a></li>
<li>test(vibe): fix kill-before-init race with a worker-ready handshake by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5040060152" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7340" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7340/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7340">#7340</a></li>
<li>fix(agent): stop leaking scout into prompts when it is disabled by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5040523227" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7344" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7344/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7344">#7344</a></li>
<li>fix(eval): preserve console for ConPTY Python kernels by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5040804854" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7350" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7350/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7350">#7350</a></li>
<li>fix(mnemopi): bound locked retention during teardown by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5040884075" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7355" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7355/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7355">#7355</a></li>
<li>fix(mnemopi): bound embed worker IPC and reap on timeout by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5040899555" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7356" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7356/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7356">#7356</a></li>
<li>fix(auth): guard config-value resolvers against case-insensitive env hijack by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5041187823" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7362" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7362/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7362">#7362</a></li>
<li>fix(mnemopi): surface scoped recall failures by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5041675465" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7367" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7367/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7367">#7367</a></li>
<li>docs: document role-backed task agents by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fatihaziz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fatihaziz">@fatihaziz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5041900066" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7371" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7371/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7371">#7371</a></li>
<li>fix(cli): restore piped custom session persistence by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5042184275" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7382" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7382/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7382">#7382</a></li>
<li>test(browser): stop gating chromium tests on a top-level-await export by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paralin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paralin">@paralin</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5042245321" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7384" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7384/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7384">#7384</a></li>
<li>fix(coding-agent): keep focused status bar caps bright by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/art-wiedzmin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/art-wiedzmin">@art-wiedzmin</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5042264110" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7385" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7385/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7385">#7385</a></li>
<li>fix(tui): keep working title across non-terminal agent_end by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5042351845" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7387" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7387/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7387">#7387</a></li>
<li>fix(setup): align Python setup probe with eval by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paolofraz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paolofraz">@paolofraz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5042500693" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7390" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7390/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7390">#7390</a></li>
<li>fix(catalog): admit discovered Token Plan chat models by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5043337252" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7392" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7392/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7392">#7392</a></li>
<li>fix(update): detect active Linux libc by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BrianHotopp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BrianHotopp">@BrianHotopp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5043632395" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7394" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7394/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7394">#7394</a></li>
<li>fix(postmortem): resolve native hard-exit per call by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5043678167" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7395" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7395/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7395">#7395</a></li>
<li>fix(session): make project directories safe and unique by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5043797892" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7397" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7397/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7397">#7397</a></li>
<li>feat(omp): navigate conversation turns in tree by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oleksoleksoleks/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oleksoleksoleks">@oleksoleksoleks</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5024466863" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7126" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7126/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7126">#7126</a></li>
<li>feat(coding-agent): configure web search timeout by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/will-bogusz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/will-bogusz">@will-bogusz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5033196673" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7197" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7197/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7197">#7197</a></li>
<li>fix(edit): prevent fuzzy replace-all self-matching by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5045096573" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7437" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7437/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7437">#7437</a></li>
<li>fix(mcp): expand env vars in reauth OAuth credentials and reject empty tokens by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5045227527" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7441" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7441/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7441">#7441</a></li>
<li>fix(coding-agent): keep completed session entries durable across crashes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/olegpulatov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/olegpulatov">@olegpulatov</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5045673688" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7444" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7444/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7444">#7444</a></li>
<li>fix(openai): preserve Codex native image results by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5045798471" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7447" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7447/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7447">#7447</a></li>
<li>feat(tui): add hidden tool activity mode by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dannyboy-ai/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dannyboy-ai">@dannyboy-ai</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5040310027" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7342" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7342/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7342">#7342</a></li>
<li>fix(extensions): resolve compiled dependency graphs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5044682630" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7405" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7405/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7405">#7405</a></li>
<li>fix(coding-agent): restore legacy compaction exports by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5044683022" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7406" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7406/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7406">#7406</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhang17-24/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhang17-24">@zhang17-24</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5036087935" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7246" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7246/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7246">#7246</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jwmacd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jwmacd">@jwmacd</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5039542401" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7327" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7327/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7327">#7327</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fatihaziz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fatihaziz">@fatihaziz</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5041900066" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7371" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7371/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7371">#7371</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paolofraz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paolofraz">@paolofraz</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5042500693" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7390" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7390/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7390">#7390</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BrianHotopp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BrianHotopp">@BrianHotopp</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5043632395" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7394" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7394/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7394">#7394</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dannyboy-ai/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dannyboy-ai">@dannyboy-ai</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5040310027" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7342" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7342/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7342">#7342</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.4...v17.2.5">v17.2.4...v17.2.5</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[What the bliss taught us]]></title>
<description><![CDATA[At this exact moment curl’s summer of bliss 2026 ends. We (the maintainers of curl) took the entire month of July off from vulnerability reporting and in this post I will try to explain how this went. (If you feel like skipping the wordy blab below, the single word answer is: fine) This was possi...]]></description>
<link>https://tsecurity.de/de/3700320/tools/what-the-bliss-taught-us/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3700320/tools/what-the-bliss-taught-us/</guid>
<pubDate>Mon, 03 Aug 2026 10:23:48 +0200</pubDate>
<content:encoded><![CDATA[At this exact moment curl’s summer of bliss 2026 ends. We (the maintainers of curl) took the entire month of July off from vulnerability reporting and in this post I will try to explain how this went. (If you feel like skipping the wordy blab below, the single word answer is: fine) This was possibly … <a href="https://daniel.haxx.se/blog/2026/08/03/what-the-bliss-taught-us/" class="more-link">Continue reading <span class="screen-reader-text">What the bliss taught us</span> <span class="meta-nav">→</span></a>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.1.4]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Changed

Steering is now woken by an event instead of polled on a fixed interval while a tool batch runs. AgentLoopConfig.waitForSteeringMessages resolves when a steer is enqueued, so an interruption is observed as soon as it arrives rather than at the next tick, and idle ...]]></description>
<link>https://tsecurity.de/de/3698421/tools/github-v1714/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698421/tools/github-v1714/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:19 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Changed</h3>
<ul>
<li>Steering is now woken by an event instead of polled on a fixed interval while a tool batch runs. <code>AgentLoopConfig.waitForSteeringMessages</code> resolves when a steer is enqueued, so an interruption is observed as soon as it arrives rather than at the next tick, and idle batches stop burning wakeups. The interval timer remains for the IRC interrupt queue, which has no wake callback, and checks only IRC while the event watcher owns steering. Waits are raced against local abort, so a callback that does not observe its signal cannot hang batch teardown.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed a Cursor tool result being lost when a custom <code>cursorOnToolResult</code> transformer was still pending as the turn closed. The provider dispatches decoded messages without awaiting them, so a <code>message_end</code> from the same chunk could drain the buffer before the transformer resolved, dropping the result and leaving its <code>toolCall</code> block to be stripped as dangling on replay. The entry is now reserved synchronously and patched in place once the transformer resolves, preserving buffer order.</li>
<li>Fixed an async <code>cursorOnToolResult</code> transformer's rewrite being silently discarded when it resolved after the buffer drain. The reservation kept the call from dangling but the late patch mutated a detached entry, so the already-persisted message kept the pre-transform payload. The drain now awaits any transformer still in flight before persisting, matching the awaited exec-channel paths. A rejecting transformer is swallowed and the reserved payload stands in, so a failing hook cannot take the turn down or cost the result.</li>
<li>Fixed Cursor tool results being dropped for hosts that pass neither <code>cursorExecHandlers</code> nor <code>cursorOnToolResult</code>. Both are optional, but the Cursor provider resolves native todo calls server-side and synthesizes exec blocks regardless, marking both as resolved so no placeholder result is emitted for them. The result buffer callback was only installed when one of the options was present, so a bare SDK host discarded the provider's paired result and every rebuilt transcript stripped the interaction. It is now installed unconditionally.</li>
<li>Fixed an async <code>cursorOnToolResult</code> rewrite being lost when the provider errored mid-transform. The normal drain waits for a pending transformer, but the error path snapshotted the buffer without that await, so a transform still in flight patched an entry the catch path had already detached and the pre-transform payload was persisted. A provider error is exactly when a transform is most likely to be mid-flight.</li>
<li>Reduced oversized OpenAI native compaction requests by replacing only trailing tool-output bodies that exceed the model context window, while preserving calls, assistant history, and reasoning.</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>MiniMax Token Plan accounts now report quota in <code>omp usage</code>. <code>GET /v1/token_plan/remains</code> returns one bucket per plan quota, each carrying a rolling interval window and a weekly window, so <code>minimax-code</code> surfaces real remaining percentages instead of an empty report. A model the plan does not include comes back looking like an untouched quota; those buckets are dropped from the report and named in its metadata. The mainland id <code>minimax-code-cn</code> is untouched.</li>
<li>OAuth logins now stamp <code>authorizedAt</code> (epoch ms of the interactive login) on the stored credential, and every refresh-persist path preserves it. Anthropic expires the whole OAuth grant family ~30 days after authorization regardless of refresh-token rotation (observed as <code>invalid_grant: "Refresh token expired"</code> on the latest rotated token, exactly 30 days after login, across four production accounts), so the login anchor is what makes re-login deadlines computable. Exported <code>ANTHROPIC_OAUTH_GRANT_TTL_MS</code> alongside the anthropic OAuth flow.</li>
<li>Added <code>GET /v1/credentials/disabled</code> to the auth broker and <code>AuthBrokerClient.listDisabledCredentials</code>: disabled-credential tombstones (<code>DisabledCredentialSummary</code> — identity, verbatim disable cause, disable timestamp; never token material) so auto-disabled accounts stay visible to clients instead of silently vanishing from the snapshot. <code>AuthStorage.listDisabledCredentials</code> serves the same data locally from SQLite; clients of brokers predating the endpoint get an empty list (404 mapped, no error).</li>
<li>Added <code>AuthStorage.revalidateCredentials()</code> and the optional <code>AuthCredentialStore.refreshSnapshot</code> hook: remote broker stores re-fetch <code>GET /v1/snapshot</code> on demand so callers pairing live per-credential data with stored identities (<code>omp usage</code>) never render against the up-to-an-hour-stale disk-cached snapshot; local SQLite stores are always current and only reload.</li>
<li>Added an optional per-request <code>codexSseMaxAttempts</code> stream option to bound Codex SSE pre-response retries while preserving the six-attempt default when omitted.</li>
<li>Fixed Cursor requests failing with <code>Connect error internal: Unable to parse image: ...</code> whenever the session history contained an image: <code>rootPromptMessagesJson</code> image parts now embed a <code>data:&lt;mime&gt;;base64,</code> URI instead of bare base64, matching the convention used by the OpenAI-completions provider (<a href="https://github.com/can1357/oh-my-pi/pull/6564" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6564/hovercard">#6564</a>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed OpenAI Responses native history replay sending output-only <code>status</code> fields back as input, preventing <code>input[N].status</code> failures in long-running sessions. (<a href="https://github.com/can1357/oh-my-pi/pull/6513" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6513/hovercard">#6513</a> by <a href="https://github.com/Ant39140">@Ant39140</a>)</li>
<li>Cursor no longer discards a local tool result when the transport fails mid-execution. The provider waits for in-flight exec dispatches before pushing <code>done</code>, but the error path skipped that wait, so a handler decoded from the last chunk landed its result after the Agent had already finalized the call from the terminal error and cleared its buffer — losing the real outcome of a tool that may already have run side effects. Both exits now drain the same barrier.</li>
<li>Cursor exec handlers returning the bare-result form no longer record a failed call as successful. When an SDK handler returns only a protocol result (no paired <code>toolResult</code>), the synthesized transcript entry was always <code>"Tool produced no transcript result"</code> with <code>isError: false</code>, even for a <code>rejected</code> or <code>error</code> result — so Cursor saw a failure while the rebuilt transcript showed success. The synthesized entry now derives its state and message from the result's own oneof variant — including MCP, where an application-level tool failure rides inside the <code>success</code> variant as <code>is_error</code> rather than as a separate variant.</li>
<li>Fixed Cursor models silently failing to maintain the todo list. Cursor resolves its native <code>update_todos</code>/<code>read_todos</code> tools server-side, but the bridge looked for them under flattened <code>updateTodosToolCall</code>/<code>readTodosToolCall</code> properties, which a decoded <code>agent.v1.ToolCall</code> never has — the variant only arrives through the <code>tool</code> oneof — so no native todo call was ever recognized. The synthesized <code>todo</code> tool call was also emitted as locally runnable with a <code>{todos}</code> payload the local tool's schema rejects, so any update that did surface ended as a validation error and local todo state never followed Cursor's. Todo calls are now read from the oneof, both native todo blocks are marked as already-resolved, and local state is mirrored from the server's confirmed success snapshot (leaving state untouched on <code>UpdateTodosError</code>). <code>TODO_STATUS_CANCELLED</code> now maps to <code>abandoned</code> instead of reverting the task to <code>pending</code>.</li>
<li>Hardened Cursor todo mirroring against partial <code>read_todos</code> responses: a read narrowed by <code>status_filter</code>/<code>id_filter</code>, or one returning fewer rows than the server's own <code>total_count</code>, is a subset rather than the list, and is no longer treated as authoritative. Previously such a response would have deleted every task it omitted.</li>
<li>Fixed an empty <code>update_todos</code> response whose <code>total_count</code> is nonzero being mirrored as an authoritative clear, deleting every local task at once. The count-mismatch guard skipped empty responses entirely; only a matching zero count is a genuine clear now. An empty <code>read_todos</code> stays refused outright, since proto3 decodes an unset <code>total_count</code> as <code>0</code> and it cannot be told apart from a filtered read that matched nothing.</li>
<li>Fixed a Cursor todo call being left unpaired when the completion frame carried no <code>tool_call</code> at all. <code>ToolCallCompletedUpdate.tool_call</code> is optional, but the block was already marked as server-resolved by the started frame, so nothing emitted a placeholder for it and every transcript rebuild stripped the interaction. It now settles as "nothing to mirror", the same as a refused snapshot.</li>
<li>Fixed local Cursor exec calls (<code>read</code>/<code>write</code>/<code>grep</code>/<code>delete</code>/<code>bash</code>/<code>lsp</code>/MCP) vanishing from rebuilt transcripts when the tool produced no result. The assistant block is synthesized and marked server-resolved before the handler runs, so the three result-less paths — no handler installed, a handler returning nothing, and a thrown handler — left the call unpaired. Each now pairs a result carrying the same text the server receives.</li>
<li>Fixed Cursor MCP tool calls being unrecognized on the wire. <code>ToolCall.tool</code> is a protobuf oneof, so a decoded message exposes the variant as <code>{ case, value }</code> and never as a flat <code>mcpToolCall</code> property — the same trap that made native todo calls invisible while hand-shaped fixtures kept passing. Both the streamed start and the completion arg merge now go through a shared selector.</li>
<li>Fixed a streamed Cursor MCP block being named from <code>name</code> while its paired result used <code>toolName</code>, so the two disagreed whenever the server sent different values. Both now prefer <code>toolName</code>.</li>
<li>Fixed the Cursor stream emitting <code>done</code> while a tool handler decoded from the final chunk was still running. Server messages are dispatched fire-and-forget so the socket keeps draining, but nothing waited for them: when an exec request, <code>turnEnded</code> and the stream close arrived in one chunk, the turn finished before the handler produced its result, and the result missed the buffer drain that pairs it with its call. In-flight dispatches are now awaited after the transport completes.</li>
<li>Fixed a server-resolved Cursor todo call leaving its transcript block stuck pending: the synthetic completion was emitted under a freshly generated id instead of the streamed call id the interactive transcript filed the block under, so the card animated indefinitely. The settled call id is now handed to the sync handler.</li>
<li>Fixed server-resolved Cursor todo blocks disappearing from rebuilt transcripts: nothing produced a <code>toolResult</code> for them, and <code>buildSessionContext</code> strips any <code>toolCall</code> left unpaired, so the interaction vanished on reload, branch switch, or transcript rebuild. The result the host builds is now persisted verbatim — it carries the <code>details.phases</code> the todo renderer rebuilds the list from, which a summary-only result would have replayed as <code>0 tasks</code>.</li>
<li>Fixed a refused or failed Cursor todo call leaving its card animating forever. Only a successful snapshot settled the block, so a <code>read_todos</code> narrowed by a filter and a server <code>UpdateTodosError</code> both went unanswered — no <code>tool_execution_end</code>, and no <code>toolResult</code> to keep the block from being stripped on rebuild. Every completed native todo call now settles. A server error is carried through as a failed result rather than collapsed into the benign "nothing to mirror" case, which would have replayed the failure as a success.</li>
<li>Hardened Cursor todo mirroring against snapshots whose rows collide on content. Cursor's wire model identifies todos by <code>id</code> and can represent two rows sharing the same text; the local list is keyed by content alone and the <code>todo</code> tool rejects a duplicate outright, so importing such a pair would leave every task-targeted <code>done</code>/<code>drop</code>/<code>rm</code> resolving to the first row and the second unreachable. The snapshot is now refused like any other that cannot be represented locally — local state is left untouched and the call still settles as a no-op.</li>
<li>Hardened Cursor todo mirroring against ambiguous empty <code>read_todos</code> responses. <code>total_count</code> is a proto3 scalar, so an unset field decodes as <code>0</code> and is indistinguishable from a genuinely empty list; accepting <code>todos=[]</code> + <code>total_count=0</code> would clear every local task. Empty and mismatched reads are now refused — <code>update_todos</code> remains the authoritative clear path.</li>
<li>Fixed refused Cursor todo results claiming <code>"No todo changes"</code>. A server-accepted <code>update_todos</code> can still be declined locally (content collision, etc.), so the persisted fallback now reads <code>"Todo snapshot not mirrored"</code> instead of implying the remote call changed nothing.</li>
<li>Hardened Cursor todo mirroring against snapshots carrying unresolved <code>TodoItem.dependencies</code>. The wire model blocks a row behind other rows by <code>id</code>; the local list has no ids and no edges, so an imported dependent row files as plain <code>pending</code> and <code>nextActionableTask</code> then offers work the server considers blocked. Snapshots with an edge pointing at a row that is not yet <code>completed</code>/<code>abandoned</code> are now refused like any other that cannot be represented locally. Edges whose blockers already finished constrain nothing and still mirror.</li>
<li>Extended the Cursor todo <code>total_count</code> mismatch guard to <code>update_todos</code>. A partial or size-limited merge response is as incomplete as a filtered read, but the check only applied to reads, so an update returning fewer rows than its own count was mirrored as the full list and deleted every task it omitted. An empty update still syncs — it remains the authoritative clear path, unlike an ambiguous empty read.</li>
<li>Hardened Cursor todo mirroring against rows with empty <code>content</code>. <code>content</code> is a proto3 string, so a missing or default value arrives as <code>""</code>; the local list is keyed by content and rejects a falsy one before lookup, leaving the imported row unreachable to every task-targeted <code>done</code>/<code>drop</code>/<code>rm</code>. Such snapshots are now refused like any other that cannot be represented locally.</li>
<li>Fixed a deterministic circular-import TDZ that crashed <code>packages/catalog</code>'s test process with <code>ReferenceError: Cannot access 'claudeCodeVersion' before initialization</code>: <code>registry/oauth/anthropic.ts</code> imported <code>claudeCodeVersion</code> from <code>providers/anthropic.ts</code>, which transitively pulls the registry back in (<code>providers/anthropic</code> → <code>stream</code> → <code>registry</code> → <code>registry/oauth/anthropic</code>), so the module-level <code>claude-code/${claudeCodeVersion}</code> bootstrap user-agent const read the binding while <code>providers/anthropic.ts</code> was still mid-initialization. <code>claudeCodeVersion</code> now lives in a zero-import leaf module (<code>providers/claude-code-fingerprint.ts</code>) that <code>providers/anthropic.ts</code>, <code>registry/oauth/anthropic.ts</code>, and <code>usage/claude.ts</code> all import from, removing the cycle at the source rather than deferring the read.</li>
<li>Fixed a circular initialization between the Anthropic provider and OAuth registry that could throw before <code>claudeCodeVersion</code> was initialized when package tests or consumers loaded modules in parallel (<a href="https://github.com/can1357/oh-my-pi/pull/6628" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6628/hovercard">#6628</a> by <a href="https://github.com/anatoli-tsinovoy">@anatoli-tsinovoy</a>).</li>
<li>Stopped the account-level Codex <code>rate_limit.limit_reached</code> flag from being applied to individual chat windows. Codex reports one shared flag for the whole account, so a window with real headroom was marked <code>exhausted</code> because a different window (or a separate metered feature) was at its limit, which over-blocked sibling accounts during credential selection. Each window's status now reflects only its own usage</li>
<li>Scoped Codex reactive backoff per meter: a <code>usage_limit_reached</code> from a Spark request no longer persists a block that ordinary chat requests honour, and the reverse. Blocks written before scoping used a shared scope meaning "block everything", so requests still honour it and reconciliation still heals it</li>
<li>Implemented <code>scopeLimits</code> for the Codex ranking strategy so a request gates only on the windows it actually consumes: <code>-spark</code> models spend the Spark meter and every other model spends the 5h/weekly chat windows, instead of OR-ing every window and meter into one provider-wide block</li>
<li>Fixed native Anthropic adaptive-only models (Opus 4.6+, Sonnet 4.6+, Fable/Mythos 5) keeping thinking ON when reasoning was meant to be off. <code>mapOptionsForApi</code> never consulted <code>disableReasoning</code> on the Anthropic branch, so a caller-side disable left adaptive thinking at full effort; and <code>disableThinkingIfToolChoiceForced</code> deleted <code>output_config.effort</code> alongside <code>thinking</code>, which for adaptive-only models silently re-enabled adaptive thinking (a bare omission defaults to adaptive-ON). Both paths now omit <code>thinking</code> and pin the lowest adaptive effort, so <code>disableReasoning</code> and forced <code>tool_choice</code> turns (e.g. the delivery reviewer's <code>report_delivery</code>) actually suppress reasoning instead of returning a thinking block with <code>end_turn</code> (<a href="https://github.com/can1357/oh-my-pi/issues/6589" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6589/hovercard">#6589</a>).</li>
<li>Fixed Bedrock Converse dropping captured Claude thinking signatures when replaying application-inference-profile ARN models, restoring adaptive-thinking multi-turn conversations (<a href="https://github.com/can1357/oh-my-pi/issues/6610" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6610/hovercard">#6610</a>).</li>
<li>Fixed the <code>alibaba-token-plan</code> login only supporting the international Singapore endpoint, which rejected China (Beijing) Token Plan <code>sk-sp-</code> keys with <code>401 invalid_api_key</code>. Login now selects a region (International / China (Beijing) / Custom), validates the key against that region's <code>/models</code> endpoint, and stores the chosen base URL in the credential so inference and discovery both target it (<a href="https://github.com/can1357/oh-my-pi/issues/6682" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6682/hovercard">#6682</a>).</li>
<li>Fixed statusless provider capacity errors such as <code>no_capacity</code> and high-demand responses being treated as terminal instead of retryable. (<a href="https://github.com/can1357/oh-my-pi/issues/6503" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6503/hovercard">#6503</a>)</li>
<li>Fixed QwenCloud Token Plan quota reporting to call the current console usage RPC and document how to capture its optional Cookie during login.</li>
<li>Fixed Cursor exec-channel MCP calls such as <code>web_search</code> omitting <code>toolCall</code> blocks when no interaction block arrives, which rendered their tool cards below the final assistant answer or dropped them on transcript replay. (<a href="https://github.com/can1357/oh-my-pi/issues/6501" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6501/hovercard">#6501</a>)</li>
<li>Fixed Claude scoped weekly limits (e.g. <code>Claude 7 Day (Fable)</code>) with <code>is_active: false</code> being dropped by the <code>/usage</code> parser, rendering as <code>not reported</code> in <code>omp usage</code> despite carrying real utilization. Live payloads mark only the currently binding limit active — an account pinned at a 100% Fable cap reports its 77% shared weekly row as inactive too — so <code>is_active</code> signals severity ranking, not bucket existence, and is now ignored. Exhaustion gating is unchanged: tier rows still hard-block only at confirmed 100% with a future reset.</li>
<li>Fixed a TDZ crash (<code>Cannot access 'claudeCodeVersion' before initialization</code>) when <code>providers/anthropic</code> was the first module loaded: <code>providers/anthropic</code> → <code>stream</code> → <code>registry</code> → <code>registry/oauth/anthropic</code> circled back into the still-initializing provider module. The Claude Code fingerprint constants now live in the leaf module <code>providers/claude-code-fingerprint</code> (star re-exported from <code>providers/anthropic</code>, so import paths are unchanged).</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added Claude Opus 5 model entries for Amazon Bedrock: <code>anthropic.claude-opus-5</code> plus its <code>us.</code>, <code>eu.</code>, <code>au.</code>, and <code>global.</code> regional/geo IDs.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>alibaba-token-plan</code> locking out China (Beijing) 百炼 Token Plan subscribers: the provider hardcoded the international Singapore endpoint, so Beijing-issued <code>sk-sp-</code> keys got <code>401 invalid_api_key</code>. The wire credential now carries an optional region base URL, and model discovery targets the credential's region (<a href="https://github.com/can1357/oh-my-pi/issues/6682" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6682/hovercard">#6682</a>).</li>
<li>Fixed forced <code>tool_choice</code> 400s (<code>tool_choice 'specified' is incompatible with thinking enabled</code>) on Kimi Code's Anthropic-compatible endpoint for the <code>kimi-for-coding</code>, <code>kimi-for-coding-highspeed</code>, and <code>k3</code> aliases: the Anthropic-surface compat matcher only recognised Moonshot's native <code>kimi-k2.7-code*</code> ids, so thinking-locked kimi-code models kept <code>supportsForcedToolChoice: true</code> and the forced selector was sent to a host that always thinks. These models now resolve <code>requiresThinkingEnabled</code>, keeping thinking on and downgrading forced choices to <code>auto</code>.</li>
<li>Retried empty successful provider discovery responses after the short non-authoritative interval instead of caching them for the full catalog TTL (<a href="https://github.com/can1357/oh-my-pi/issues/6620" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6620/hovercard">#6620</a>).</li>
<li>Fixed GitHub Copilot Claude models with no bundled catalog reference (e.g. a freshly served <code>claude-opus-5</code>) discovering with <code>reasoning: false</code>/<code>thinking: null</code> and no effort dial, and disappearing along with their synthesized <code>-1m</code> sibling on offline reads: reference-less Copilot models on the anthropic-messages proxy now derive the adaptive reasoning ladder from the model id, and the cache restores their compile-time <code>COPILOT_API_HEADERS</code> by value instead of dropping them as unrestorable (<a href="https://github.com/can1357/oh-my-pi/issues/6664" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6664/hovercard">#6664</a>).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li><code>omp usage</code> now surfaces auto-disabled credentials as red <code>✗</code> tombstone rows (identity, how long ago, the shortened upstream cause — e.g. <code>Refresh token expired</code> — and a re-login hint), including a provider section when no active credential remains. User-driven tombstones (<code>replaced by newer credential</code>, <code>deleted by user</code>) and API-key rows stay hidden. Requires a broker with <code>GET /v1/credentials/disabled</code>; older brokers degrade to no tombstone rows.</li>
<li><code>omp usage</code> warns about Anthropic's ~30-day OAuth grant lifetime: accounts whose interactive login (<code>authorizedAt</code>) is within a week of the deadline get a yellow <code>⚠ re-login within &lt;time&gt;</code> line, and past-deadline accounts a red one. Grants die server-side exactly ~30 days after login regardless of refresh rotation, so this is the only warning before the broker auto-disables the row.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Enabled Computer Use sessions now state the desktop-routing contract in the compact system prompt, retain their controller across model switches, expose effective native/function routing through <code>/computer status</code>, and emit structured lifecycle diagnostics without logging captured content.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>omp</code> refusing to start on Windows when no <code>bash.exe</code> is discoverable — most visibly with scoop-installed Git, whose manifest shims <code>sh.exe</code>/<code>git.exe</code> but never <code>bash.exe</code>, so PATH lookup missed it. Startup threw <code>No bash shell found</code> while merely building the bash tool description, even though bash tool commands always execute in the embedded brush-core shell and need no host bash. Shell discovery now also checks <code>GIT_INSTALL_ROOT</code>, scoop and per-user Git for Windows install roots, and <code>sh.exe</code> on PATH, then falls back to <code>cmd.exe</code> for the spawn-only paths (interactive PTY, ACP client terminals) instead of failing; the cmd fallback is never used to wrap user-shell commands — brush runs the POSIX line directly.</li>
<li>Fixed dragging an image whose path contains unescaped spaces (e.g. macOS screenshot names like <code>Screenshot 2026-07-24 at 1.55.12 PM.png</code>) into the terminal — the bracketed-paste image extraction route now has the same whole-text-as-path fallback as the clipboard keybind route, so both routes share identical detection and attach the image instead of inserting the raw path as literal text (<a href="https://github.com/can1357/oh-my-pi/issues/6578" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6578/hovercard">#6578</a>). The shared fallback only claims payloads that hold a single path: one carrying a second absolute-path anchor after unescaped whitespace (<code>/tmp/a.png /tmp/b shot.png</code> — dragging two files at once when either name has spaces) now pastes as text on both routes instead of being fused into one unresolvable path, which on the clipboard route previously attached nothing and swallowed the text behind an "Image not found" status.</li>
<li>Fixed transient reasonless request aborts that arrived after a tool call finished streaming ending the turn instead of entering recovery, which left edit calls and task subagents dead until the user manually resumed. The session now continues from the synthetic unexecuted tool result under the normal retry policy without replaying completed side effects (<a href="https://github.com/can1357/oh-my-pi/issues/6668" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6668/hovercard">#6668</a>).</li>
<li>Fixed prewalk silently dropping a same-model hand-off that only lowers the thinking level: the arm/switch guard compared model identity alone and discarded the resolved <code>thinkingLevel</code>, so a legal effort-downgrade target (e.g. <code>prewalk: "@task"</code> resolving to the same model at a cheaper effort) never applied and the session paid the plan/continue nudges for nothing. Prewalk now compares <code>(provider, id, effective thinking level)</code>, applies effort-only hand-offs, and emits a notice on a genuine no-op instead of returning silently (<a href="https://github.com/can1357/oh-my-pi/issues/6659" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6659/hovercard">#6659</a>).</li>
<li>Fixed <code>@czottmann/pi-automode</code> failing legacy extension validation because the pi-ai compatibility shim omitted <code>clampThinkingLevel</code>, then failing every classified tool call because <code>ctx.modelRegistry</code> omitted <code>getApiKeyAndHeaders</code>. (<a href="https://github.com/can1357/oh-my-pi/issues/6648" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6648/hovercard">#6648</a>)</li>
<li>Fixed hide-secrets placeholders conflicting with hashline edit headers by replacing hash-delimited tokens with the unambiguous <code>$$HASH$$</code> format (<a href="https://github.com/can1357/oh-my-pi/issues/6631" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6631/hovercard">#6631</a>).</li>
<li>Fixed the advisor silently swallowing its own quarantined turns: when an advisor called an ungranted tool (e.g. <code>bash</code>) its whole turn was discarded before dispatch, so its advice never reached the primary agent and the failure surfaced only in advisor diagnostics — every other non-recovering failure branch notifies the host UI, but quarantine re-primed silently with no bound. A persistently-quarantining advisor now surfaces a <code>notifyFailure</code> warning in the main UI (deduped, cleared on the next successful turn) and stops the unbounded silent re-prime loop (<a href="https://github.com/can1357/oh-my-pi/issues/6661" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6661/hovercard">#6661</a>).</li>
<li>Fixed the Docker <code>natives-builder</code> stage failing to build releases ≥ 17.1.1: the native audio stack added bindgen (miniaudio needs libclang) and a bundled-opus CMake build (needs cmake + make), none of which were installed in the slim builder image.</li>
<li>Fixed a configured <code>modelRoles.default</code> naming an extension-registered model (listed in <code>enabledModels</code>) silently running on a different in-scope provider's model. The startup model scope is resolved before extensions call <code>registerProvider()</code>, so the default role dropped out of scope and <code>buildSessionOptions</code> pinned <code>options.model</code> to the first scoped model — which marked the model "explicit" and suppressed the post-extension default-role re-resolution. A configured default that can't be found in the startup scope is now deferred so it re-resolves against the fully registered, still <code>enabledModels</code>-scoped catalog once extensions load (<a href="https://github.com/can1357/oh-my-pi/issues/6694" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6694/hovercard">#6694</a>).</li>
<li>Fixed Parakeet speech-to-text failing to load <code>sherpa-onnx-node</code> from Windows source workspaces when Bun installed the wrapper under <code>packages/coding-agent/node_modules</code> but hoisted its native platform package to the repository root (<a href="https://github.com/can1357/oh-my-pi/issues/6690" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6690/hovercard">#6690</a>).</li>
<li>Fixed <code>omp usage</code> duplicating org-less legacy accounts as "no usage data" rows whenever any sibling report carried an organization (mixed pools of pre-org-capture rows and fresh org-scoped logins): an org-less account is now covered by its own org-less report, while org-attributed sibling reports still never count as its coverage.</li>
<li><code>omp usage</code> revalidates the broker credential snapshot before rendering: live usage reports were previously paired with a disk-cached account list up to an hour old, so a just-completed re-login (org-less row upserted to org-scoped) rendered as a phantom duplicate until the cache expired.</li>
<li>Fixed Advisor requests reaching Anthropic-compatible endpoints without a provider-facing session identity: the separately constructed advisor <code>Agent</code> never had a metadata resolver installed, so its outbound requests omitted the <code>metadata.user_id</code> session id that the main and subagent agents carry. Each advisor now emits its own <code>advisorProviderSessionId</code> via <code>metadata.user_id</code>, resolved live so a token refresh surfaces the current <code>account_uuid</code>, giving Main, subagent, and Advisor traffic distinct, stable session ids for proxy routing and attribution (<a href="https://github.com/can1357/oh-my-pi/issues/6625" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6625/hovercard">#6625</a>).</li>
<li>Todo progress now stays in sync when using Cursor models: the Cursor exec bridge mirrors the provider's server-owned todo list into session state, refreshes the interactive todo panel, and persists each snapshot to the session branch so the list survives reloads, rewinds, compaction, and session switches. Existing phase grouping is preserved for tasks the session already knows. Previously the list was in-memory only and the panel stayed stale, because Cursor resolves the todo tool remotely and never emits the local <code>todo</code> tool result that both paths key off.</li>
<li>Cursor todo calls the server refuses or rejects no longer leave the todo card spinning: the bridge settles every completed native todo call, not just the ones carrying a list. Local phases and the session branch are left untouched in that case, and the settling result deliberately carries no <code>details.phases</code> — echoing the current list back would let a call that changed nothing overwrite live panel state.</li>
<li>Fixed the todo renderer emitting mirrored label text verbatim. A Cursor snapshot carries provider-authored task content, phase names, and summary text, and the renderer interpolated all of it straight into terminal output, so a label holding ANSI/C0 sequences rewrote the terminal every time the list rendered or replayed. Every display path now goes through one sanitize-and-flatten-tabs helper — task labels, blocker notes, phase headers, the zero-task fallback, and the streaming call preview — while the raw values stay untouched as the lookup keys they are.</li>
<li>Fixed a server-resolved Cursor todo card animating for the rest of the session when the server packed the call's start and completion into one HTTP/2 chunk. The bridge's <code>tool_execution_end</code> is a synchronous callback fired mid-parse, while the streamed <code>toolcall_start</code> that creates the visible card is queued on the event stream and delivered a microtask later — the interactive controller handled the completion first, found no pending card, and dropped it, leaving the card that appeared moments later with nothing to settle it. An early completion is now held and attached the moment the streamed block creates its card, settling it without repeating the panel refresh or failure warning that already fired on first arrival. Card creation from cumulative <code>message_update</code> frames is also guarded by the turn's timeline map, so a call settled mid-stream can no longer be recreated as a second, permanently pending card by the next update re-listing the same block.</li>
<li>Cursor todo failures no longer render unsanitized provider text into the status line. The bridge forwards the server's error string verbatim, so an ANSI escape or other C0/C1 control reached the terminal intact and could repaint outside the row, tabs punched holes in the single-line warning, and a long message overflowed it. The detail is now stripped of control sequences, collapsed, and truncated at the render boundary; the persisted result keeps the full-fidelity error for the transcript.</li>
<li>Fixed disabling the Advisor from <code>/settings</code> updating the persisted setting without stopping the live Advisor runtime until the session restarted: <code>SelectorController.handleSettingChange</code> had no case for <code>advisor.enabled</code>, unlike other session-managed toggles (<code>autoCompact</code>, <code>steeringMode</code>, ...), so the change never reached <code>session.setAdvisorEnabled</code>.</li>
<li>Fixed <code>bash.patterns</code> <code>deny</code>/<code>prompt</code> rules matching only against the whole command string, so a dangerous command in any non-leading position of a compound line (e.g. <code>cd /tmp &amp;&amp; rm -rf /tmp/x</code>, <code>sleep 1 &amp; rm -rf /tmp/x</code>) silently bypassed a <code>deny</code> rule and, under <code>approvalMode: yolo</code>, executed with no prompt. <code>deny</code>/<code>prompt</code> rules now also match each command segment, split with a shell-aware tokenizer that honors every command boundary (<code>&amp;&amp;</code>, <code>||</code>, <code>;</code>, <code>|</code>, single <code>&amp;</code>, subshells, newlines) and quoting; <code>allow</code> rules still require the whole command to match and never apply to compound lines (<a href="https://github.com/can1357/oh-my-pi/issues/6695" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6695/hovercard">#6695</a>).</li>
<li>Fixed <code>omp config list</code> printing credential settings in plain text. <code>auth.broker.token</code>, <code>searxng.token</code>, <code>searxng.basicPassword</code> and <code>dev.autoqaPush.token</code> were disclosed in both the human and <code>--json</code> output of a command that dumps every value without anyone asking for a specific credential. Credentials are now marked in the schema with a top-level <code>credential</code> flag, which also covers settings that have no settings-panel entry and so cannot use <code>ui.secret</code>. Human output shows dots; JSON omits <code>value</code> and marks the entry <code>redacted</code> rather than substituting a placeholder a consumer could write back. <code>omp config get &lt;path&gt;</code> is unchanged, since that is an explicit request for one value. The settings panel now derives masking from the same flag, so a credential cannot render as plain text on one surface and dots on the other. Only a credential that is actually set is redacted, so a fresh configuration still reports unset credentials as unset rather than implying every one of them is configured.</li>
<li>Fixed <code>/new</code>, <code>/drop</code>, <code>/fork</code>, and <code>/move</code> crashing or doing unnecessary work when invoked during vibe mode; interactive session transitions now show the existing exit-vibe warning and leave the session unchanged, and reset loops disable themselves instead of resubmitting into that unchanged session (<a href="https://github.com/can1357/oh-my-pi/issues/6607" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6607/hovercard">#6607</a>).</li>
<li>Fixed legacy pi extensions failing extension validation when importing <code>estimateTokens</code> from <code>@earendil-works/pi-coding-agent</code> (aliased to the legacy shim). Legacy pi re-exported <code>estimateTokens</code> from its coding-agent package root; in omp it lives in <code>@oh-my-pi/pi-agent-core/compaction</code> and the coding-agent barrel does not forward it, so the shim's <code>export * from "../index"</code> left it off the surface and a named import threw Bun's static "Export named 'estimateTokens' not found" error (e.g. <code>omp plugin install pi-blackhole</code>). The shim now re-exports it (<a href="https://github.com/can1357/oh-my-pi/issues/6583" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6583/hovercard">#6583</a>).</li>
<li>Fixed plan approval presenting a completed plan instead of the newest draft when the submitted title did not match the draft filename (<a href="https://github.com/can1357/oh-my-pi/issues/6569" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6569/hovercard">#6569</a>).</li>
<li>Fixed <code>omp auth-gateway serve</code> advertising only the compiled-in bundled catalog, so every model omp reaches through provider discovery (e.g. ids released after the build date) was invisible on <code>/v1/models</code> and returned <code>Unknown model</code> through <code>/v1/chat/completions</code> even though the same broker credential answered it in the TUI. The gateway now sources its catalog from <code>ModelRegistry</code> — the same component the TUI/CLI use (bundled + cached + discovered) — keeping the credential scoping and qualified/bare-id registration, and rebuilds it periodically so a long-lived <code>serve</code> tracks newly discovered models without a restart (<a href="https://github.com/can1357/oh-my-pi/issues/6615" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6615/hovercard">#6615</a>).</li>
<li>Fixed screenshot-relative pointer actions missing their visible targets when image transports that cannot preserve original detail silently downscaled a large computer screenshot; affected transports now establish the native coordinate frame below the verified image-resize threshold without changing the public capture defaults for other models (<a href="https://github.com/can1357/oh-my-pi/pull/6596" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6596/hovercard">#6596</a> by <a href="https://github.com/wolfiesch">@wolfiesch</a>).</li>
<li>Corrected Windows shell resolution errors to identify the active global, project, overlay, or runtime source for <code>shellPath</code>, including profile and custom configuration directories, instead of directing every user to the retired <code>settings.json</code> file (<a href="https://github.com/can1357/oh-my-pi/issues/6579" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6579/hovercard">#6579</a>).</li>
<li>Fixed <code>debug</code> (js-debug/<code>pwa-node</code>) stateful commands misrouting after launch: a lazily-attached <code>[worker N]</code> child session (or the threadless root launcher) would steal the active-session focus from the stopped script child, so <code>threads</code> listed only the worker thread, post-launch breakpoints read back as pending/unbound, and there was no way to step/continue/evaluate the script's thread. Focus now follows stops rather than registrations, and <code>threads</code> aggregates every live thread across the session tree (<a href="https://github.com/can1357/oh-my-pi/issues/6663" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6663/hovercard">#6663</a>).</li>
<li>Fixed a turn-ending provider error being truncated to 8 lines in the transcript with no way to reveal the rest: <code>AssistantMessageComponent</code> now implements <code>setExpanded</code>, so Ctrl+O (tool-output expansion) reveals the full error body and the collapsed view shows a <code>… +N more lines (Ctrl+O to expand)</code> hint (<a href="https://github.com/can1357/oh-my-pi/issues/6555" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6555/hovercard">#6555</a>).</li>
<li>Fixed direct binary updates trusting an executable that only reported the expected version. The updater now selects one exact asset from the tagged GitHub release, requires its published SHA-256 digest and size, and verifies both while streaming the download before installation. GitHub release metadata requests use <code>GITHUB_TOKEN</code> or <code>GH_TOKEN</code> when available, allowing users behind an exhausted anonymous rate limit to authenticate.</li>
<li>Documented that the non-PTY shell's bundled <code>jq</code> command is backed by jaq, including its null-indexing divergence and portable filter syntax (<a href="https://github.com/can1357/oh-my-pi/issues/6614" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6614/hovercard">#6614</a>).</li>
<li>Fixed <code>omp://tools/task.md</code> and <code>omp://tools/eval.md</code> drifting from the 17.1.3 runtime: <code>task.md</code> claimed subagents force-disable <code>async.enabled</code>/<code>bash.autoBackground.enabled</code> (both are inherited from the parent since 17.1.0) and omitted the <code>task</code> tool's <code>effort</code> parameter, and <code>eval.md</code> omitted the still-working eval <code>agent(model=…)</code> per-call model selector (<a href="https://github.com/can1357/oh-my-pi/issues/6594" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6594/hovercard">#6594</a>).</li>
<li>Fixed advisor retry amplification after transient Codex SSE socket closures by limiting each advisor-level try to one provider transport attempt.</li>
<li>Fixed <code>omp update</code> aborting with <code>npm error EEXIST</code> on standalone binary installs whose directory coincides with the global npm/bun bin dir (for example <code>npm prefix -g</code> set to <code>~/.local</code>, which the installer also targets). The install-target resolver classified the binary as npm/bun-managed from directory containment alone, so <code>npm install -g</code> tried to replace a regular file its symlink step would clobber; it now treats a plain executable (not a symlink) in a package-manager bin dir as the standalone binary and self-updates it in place (<a href="https://github.com/can1357/oh-my-pi/pull/6527" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6527/hovercard">#6527</a> by <a href="https://github.com/am423">@am423</a>).</li>
<li>Fixed Codex subscription and proxy models being sent the unsupported native <code>{ type: "computer" }</code> declaration based only on model ID. They now receive the callable function-tool fallback, including after switching from native OpenAI Responses history, while explicit endpoint metadata can still opt into the GA contract. Explicit native Codex replays preserve <code>computer_call</code>/<code>computer_call_output</code> pairing, normal CLI startup keeps the native desktop worker graph lazy, and packaged workers re-enter the single CLI host without the computer module claiming non-computer selectors.</li>
<li>Fixed isolated JavaScript eval subprocesses letting the global fatal-rejection handler race the cell rejection interceptor. A floated promise rejection is now folded into the owning cell result without killing its reusable worker process.</li>
<li>Fixed <code>/context</code> counting hidden, explicit-only skills (<code>hide: true</code> / <code>disable-model-invocation</code>) in the Skills category and subtracting that inflated estimate from the first system-prompt block, which reported <code>System prompt: 0 tokens</code> and inflated Skills usage. Accounting now counts only the skills actually rendered into the system prompt — mirroring <code>buildSystemPrompt</code>'s filter, so hidden skills and all skills when the <code>read</code> tool is unavailable contribute zero (<a href="https://github.com/can1357/oh-my-pi/issues/6498" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6498/hovercard">#6498</a>).</li>
<li>Fixed <code>pi-sprite</code> failing plugin validation because the legacy Pi compatibility shims omitted <code>createExtensionRuntime</code> and terminal capability/image-deletion helpers used by the extension (<a href="https://github.com/can1357/oh-my-pi/issues/6506" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6506/hovercard">#6506</a>).</li>
<li>Fixed Escape waiting for an in-flight <code>session_stop</code> extension handler to exhaust its timeout; abort now cancels the active stop pass without reporting a false timeout or applying stale continuation context (<a href="https://github.com/can1357/oh-my-pi/issues/6489" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6489/hovercard">#6489</a>).</li>
<li>Fixed the agent not resuming after re-answering a past <code>ask</code> from the session tree. Committing a new answer via <code>/tree</code> branched a fresh sibling <code>toolResult</code> and rebuilt context, but nothing ever continued the agent — unlike a live <code>ask</code>, whose continuation is intrinsic to the streaming run loop — so the model never consumed the new answer and the session sat idle until a manual prompt. <code>navigateTree</code> now reports the commit (<code>askReanswerCommitted</code>) and the interactive <code>/tree</code> handler resumes the agent via <code>resumeAfterAskReanswer()</code> <em>after</em> its transcript rebuild, so the resumed turn never renders against the stale pre-rebuild UI. Plain leaf moves and the read-only <code>reopenAsk</code> probe stay idle (<a href="https://github.com/can1357/oh-my-pi/issues/6483" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6483/hovercard">#6483</a>).</li>
<li>Fixed Ctrl+C and fatal shutdown entering an <code>ExtensionExitError</code> rejection loop while an extension or hook was still loading (<a href="https://github.com/can1357/oh-my-pi/issues/6488" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6488/hovercard">#6488</a>).</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Added</h3>
<ul>
<li>Added the <code>@oh-my-pi/pi-natives/desktop</code> factory entry, which defers native addon loading until a desktop worker initializes its session.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Linux native audio over forwarded PulseAudio servers: capture now handles 125 ms Android fragments without stalling, and playback buffers enough audio to avoid TCP underruns and stuttering (<a href="https://github.com/can1357/oh-my-pi/pull/6628" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6628/hovercard">#6628</a> by <a href="https://github.com/anatoli-tsinovoy">@anatoli-tsinovoy</a>).</li>
<li>Fixed older running OMP versions deleting newer native addon cache directories during cleanup, which could race a new version's first-run extraction and crash with <code>ENOENT</code>.</li>
<li>Fixed macOS computer screenshots occasionally returning the pre-action frame instead of reflecting completed keyboard and pointer input (<a href="https://github.com/can1357/oh-my-pi/pull/6595" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6595/hovercard">#6595</a> by <a href="https://github.com/wolfiesch">@wolfiesch</a>).</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Prevented inline Kitty graphics from covering full-width overlays such as <code>/switch</code>.</li>
<li>Fixed Ctrl+O (expand tools) truncating the session on ConPTY hosts (native Windows and WSL): the full-view replay routed through the ConPTY frame-truncation intended only for bulk transcript-replacement paints (issue <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4614564095" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/2115" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/2115/hovercard" href="https://github.com/can1357/oh-my-pi/issues/2115">#2115</a>), dropping every row above the retained tail behind an "older lines hidden" marker. The bound now keys on paint intent — bulk replacements (initial resume, <code>/resume</code>, handoff, resize geometry rebuilds) stay bounded, while a user-driven <code>resetDisplay()</code> (Ctrl+O expand, thinking/setting toggles, display reset) replays the whole transcript (<a href="https://github.com/can1357/oh-my-pi/issues/4863" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/4863/hovercard">#4863</a>).</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Fixed</h3>
<ul>
<li><code>getShellConfig</code> no longer throws <code>No bash shell found</code> on Windows hosts without a discoverable bash. <code>resolveWindowsShell</code> searches Git for Windows install roots (machine, per-user, <code>GIT_INSTALL_ROOT</code>, scoop app dirs — scoop shims <code>sh.exe</code>/<code>git.exe</code> but never <code>bash.exe</code>), then <code>bash.exe</code>/<code>sh.exe</code> on PATH, and finally falls back to <code>cmd.exe</code> from ComSpec with <code>/c</code> args, so shell resolution always succeeds.</li>
<li>Fixed postmortem signal and fatal shutdown exits being intercepted by temporary <code>process.exit</code> guards during extension startup (<a href="https://github.com/can1357/oh-my-pi/issues/6488" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6488/hovercard">#6488</a>).</li>
<li>Corrected Windows shell resolution errors to identify the active global, project, overlay, or runtime source for <code>shellPath</code> instead of directing every user to the retired <code>settings.json</code> file (<a href="https://github.com/can1357/oh-my-pi/issues/6579" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6579/hovercard">#6579</a>).</li>
<li>Contained timed-out child lifecycle rejections so <code>ptree</code> callers cannot leak an unhandled <code>TimeoutError</code> after settling (<a href="https://github.com/can1357/oh-my-pi/issues/6635" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6635/hovercard">#6635</a>).</li>
<li>Fixed an invalid configured <code>shellPath</code> being silently masked whenever an earlier caller had already resolved a shell in the same process; the guidance error now surfaces regardless of cache state.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(coding-agent): source auth-gateway catalog from ModelRegistry by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975932371" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6618" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6618/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6618">#6618</a></li>
<li>fix(catalog): retry empty model discovery by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4976114491" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6622" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6622/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6622">#6622</a></li>
<li>fix(advisor): propagate advisor provider session id via metadata by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4976869209" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6626" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6626/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6626">#6626</a></li>
<li>fix(natives): stabilize forwarded PulseAudio capture and playback by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/anatoli-tsinovoy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/anatoli-tsinovoy">@anatoli-tsinovoy</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4977218883" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6628" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6628/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6628">#6628</a></li>
<li>fix(utils): contain ptree timeout rejections by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4977523032" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6644" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6644/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6644">#6644</a></li>
<li>fix(secrets): avoid hashline placeholder collisions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4977546832" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6646" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6646/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6646">#6646</a></li>
<li>fix(coding-agent): restore legacy pi automode compatibility by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4977946404" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6649" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6649/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6649">#6649</a></li>
<li>feat(ai): report MiniMax Token Plan quota in usage by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/everton-dgn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/everton-dgn">@everton-dgn</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4978086993" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6650" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6650/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6650">#6650</a></li>
<li>fix(prewalk): apply same-model effort downgrades instead of skipping by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4978737385" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6660" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6660/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6660">#6660</a></li>
<li>fix(advisor): notify the user when a quarantined turn drops advice by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4978882621" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6662" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6662/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6662">#6662</a></li>
<li>fix(coding-agent): route js-debug commands to the stopped script child by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4978962518" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6665" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6665/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6665">#6665</a></li>
<li>fix(catalog): keep reference-less Copilot Claude models reasoning-capable and cache-stable by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4978987351" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6666" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6666/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6666">#6666</a></li>
<li>fix(ai): break anthropic oauth↔providers circular import (claudeCodeVersion TDZ) by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oldschoola/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oldschoola">@oldschoola</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4979053622" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6667" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6667/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6667">#6667</a></li>
<li>fix(session): retry reasonless tool-call aborts by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4979100930" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6669" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6669/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6669">#6669</a></li>
<li>fix(providers): add China (Beijing) region for alibaba-token-plan by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4979539514" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6683" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6683/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6683">#6683</a></li>
<li>fix(stt): resolve Windows workspace sherpa addon by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4980267666" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6691" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6691/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6691">#6691</a></li>
<li>fix(coding-agent): match bash deny/prompt patterns per command segment by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4980327153" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6697" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6697/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6697">#6697</a></li>
<li>fix(cli): defer out-of-scope default role so extension models resolve by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4980340547" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6698" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6698/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6698">#6698</a></li>
<li>fix(coding-agent): stop the live advisor runtime when /settings disables it by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paolomazzitti/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paolomazzitti">@paolomazzitti</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4980624325" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6701" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6701/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6701">#6701</a></li>
<li>fix(tui): keep full-width overlays above inline images by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oleksoleksoleks/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oleksoleksoleks">@oleksoleksoleks</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4965041331" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6471" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6471/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6471">#6471</a></li>
<li>fix(coding-agent): resume agent after /tree ask re-answer by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4965410933" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6484" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6484/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6484">#6484</a></li>
<li>fix(coding-agent): bypass extension guards during shutdown by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4966259727" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6493" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6493/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6493">#6493</a></li>
<li>fix(session): cancel in-flight session_stop handlers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4966282372" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6494" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6494/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6494">#6494</a></li>
<li>fix(coding-agent): count only rendered skills in /context accounting by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4967101857" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6500" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6500/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6500">#6500</a></li>
<li>fix(cursor): synthesize missing exec MCP tool calls by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4967460580" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6502" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6502/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6502">#6502</a></li>
<li>fix(ai): retry statusless provider capacity errors by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4967588944" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6505" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6505/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6505">#6505</a></li>
<li>fix(plugins): restore pi-sprite legacy compatibility by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4967932220" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6507" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6507/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6507">#6507</a></li>
<li>fix(ai):strip output-only statuses from Responses replay by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ant39140/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ant39140">@Ant39140</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4968208575" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6513" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6513/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6513">#6513</a></li>
<li>fix(ai): repair Alibaba Token Plan usage reporting by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/eggpeat/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/eggpeat">@eggpeat</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4969135221" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6521" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6521/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6521">#6521</a></li>
<li>fix(coding-agent): self-update binary install when its dir overlaps npm/bun bin dir by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/am423/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/am423">@am423</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4969963471" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6527" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6527/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6527">#6527</a></li>
<li>fix(computer-use): correct Codex subscription routing by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4970626450" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6533" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6533/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6533">#6533</a></li>
<li>fix(advisor): bound Codex SSE retries by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jeffscottward/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jeffscottward">@jeffscottward</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4971484148" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6537" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6537/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6537">#6537</a></li>
<li>fix(ai): stop one Codex window's limit from blocking the others by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paralin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paralin">@paralin</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4971842369" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6541" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6541/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6541">#6541</a></li>
<li>feat(agent): wake steering on an event instead of polling for it by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paralin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paralin">@paralin</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4971845410" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6544" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6544/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6544">#6544</a></li>
<li>fix(tui): stop Ctrl+O expand truncating the session on ConPTY by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4972928657" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6553" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6553/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6553">#6553</a></li>
<li>fix(omp): fit native compaction after large tool output by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oleksoleksoleks/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oleksoleksoleks">@oleksoleksoleks</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4973202224" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6556" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6556/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6556">#6556</a></li>
<li>fix(update): verify GitHub release asset and digest by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rvagg/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rvagg">@rvagg</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4973213595" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6557" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6557/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6557">#6557</a></li>
<li>fix(tui): make provider error blocks expandable via ctrl+o by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4973246535" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6558" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6558/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6558">#6558</a></li>
<li>fix(cursor): embed data URI for images in root-prompt history by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sethmorton/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sethmorton">@sethmorton</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4973333780" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6564" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6564/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6564">#6564</a></li>
<li>fix(plan-mode): prefer newest draft during review by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4973508999" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6570" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6570/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6570">#6570</a></li>
<li>fix(utils): correct shell path config guidance by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4974353386" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6581" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6581/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6581">#6581</a></li>
<li>fix(tui): attach drag-dropped image paths with unescaped spaces by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rcbran/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rcbran">@rcbran</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4974369092" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6582" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6582/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6582">#6582</a></li>
<li>fix(coding-agent): re-export estimateTokens from legacy pi shim by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4974396595" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6584" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6584/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6584">#6584</a></li>
<li>fix(cli): redact credential settings in config list by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4974770089" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6588" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6588/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6588">#6588</a></li>
<li>fix(ai): disable adaptive-only thinking on disableReasoning and forced tool choice by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4974937698" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6590" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6590/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6590">#6590</a></li>
<li>fix(natives): settle macOS input before capture by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975016791" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6595" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6595/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6595">#6595</a></li>
<li>fix(coding-agent): preserve Claude computer coordinates by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975018943" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6596" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6596/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6596">#6596</a></li>
<li>docs: reconcile omp:// task/eval docs with 17.1.3 runtime by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975043820" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6597" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6597/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6597">#6597</a></li>
<li>feat(catalog): add Claude Opus 5 entries for Amazon Bedrock by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/k1riiiii/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/k1riiiii">@k1riiiii</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975269814" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6599" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6599/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6599">#6599</a></li>
<li>fix(catalog): downgrade forced tool choice for thinking-locked Kimi Code aliases by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/voidfreud/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/voidfreud">@voidfreud</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975382629" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6601" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6601/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6601">#6601</a></li>
<li>fix(natives): preserve newer cache versions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975614633" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6606" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6606/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6606">#6606</a></li>
<li>fix(coding-agent): handle vibe session commands safely by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975663494" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6608" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6608/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6608">#6608</a></li>
<li>fix(ai): preserved Bedrock ARN thinking signatures by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975829419" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6613" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6613/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6613">#6613</a></li>
<li>fix(cursor): sync native todo list from server-resolved tool calls by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/quantmind-br/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/quantmind-br">@quantmind-br</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975908590" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6616" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6616/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6616">#6616</a></li>
<li>docs(bash): document bundled jaq divergence by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975909522" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6617" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6617/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6617">#6617</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/everton-dgn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/everton-dgn">@everton-dgn</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4978086993" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6650" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6650/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6650">#6650</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paolomazzitti/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paolomazzitti">@paolomazzitti</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4980624325" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6701" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6701/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6701">#6701</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ant39140/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ant39140">@Ant39140</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4968208575" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6513" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6513/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6513">#6513</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/am423/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/am423">@am423</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4969963471" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6527" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6527/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6527">#6527</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rvagg/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rvagg">@rvagg</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4973213595" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6557" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6557/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6557">#6557</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sethmorton/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sethmorton">@sethmorton</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4973333780" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6564" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6564/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6564">#6564</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rcbran/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rcbran">@rcbran</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4974369092" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6582" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6582/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6582">#6582</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/k1riiiii/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/k1riiiii">@k1riiiii</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975269814" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6599" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6599/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6599">#6599</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/voidfreud/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/voidfreud">@voidfreud</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975382629" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6601" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6601/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6601">#6601</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/quantmind-br/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/quantmind-br">@quantmind-br</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975908590" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6616" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6616/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6616">#6616</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.1.3...v17.1.4">v17.1.3...v17.1.4</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.1.5]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Fixed

Fixed proxy-stream clients dropping finalized provider-only content blocks, including Anthropic native web-search history, by allowing done and error events to carry terminal assistant content while retaining delta-reconstructed content from older proxy servers that...]]></description>
<link>https://tsecurity.de/de/3698420/tools/github-v1715/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698420/tools/github-v1715/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:19 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed proxy-stream clients dropping finalized provider-only content blocks, including Anthropic native web-search history, by allowing <code>done</code> and <code>error</code> events to carry terminal assistant content while retaining delta-reconstructed content from older proxy servers that omit it (<a href="https://github.com/can1357/oh-my-pi/issues/6703" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6703/hovercard">#6703</a>).</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed OpenAI Responses replay treating a tool output as paired with a matching call that appeared later in the input, or a tool call as paired with an earlier output. Pair repair now respects wire order before preserving or synthesizing each side.</li>
<li>Fixed adaptive-thinking Anthropic models omitting the interleaved-thinking beta on signature-enforcing proxies, which caused persisted interleaved assistant turns to fail on replay (<a href="https://github.com/can1357/oh-my-pi/issues/6717" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6717/hovercard">#6717</a>).</li>
<li>Kimi Code now sends its session-stable prompt cache key on both supported transports: <code>prompt_cache_key</code> for OpenAI-compatible requests and <code>metadata.user_id</code> for Anthropic-compatible requests. Explicit keys survive side-channel session IDs, while <code>cacheRetention: "none"</code> still disables automatic affinity (<a href="https://github.com/can1357/oh-my-pi/issues/6049" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6049/hovercard">#6049</a>).</li>
<li>Fresh encrypted auth-broker snapshot caches are revalidated within a short startup budget, so one-shot clients see newly imported or revoked credentials immediately when the broker is reachable while retaining cache fallback for transport and server failures.</li>
<li>Fixed custom <code>anthropic-messages</code> endpoints dropping native web-search call/result blocks in the leaked-thinking wrapper, preserving signed continuation history in source order without carrying a preceding text signature onto later unsigned blocks (<a href="https://github.com/can1357/oh-my-pi/issues/6703" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6703/hovercard">#6703</a>).</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Kimi Code (<code>kimi-code</code>) reporting <code>maxTokens: 32000</code> for every model — its <code>/coding/v1/models</code> discovery mapper and the bundled catalog applied a blanket constant, truncating <code>k3</code>/<code>k3-256k</code> output at ~4x below their real 131072 ceiling and <code>kimi-for-coding</code>/<code>kimi-for-coding-highspeed</code> below their 32768 ceiling. Output caps are now derived per family, and the model cache is invalidated so upgrades drop the stale <code>maxTokens: 32000</code> rows (including the discovery-only <code>k3-256k</code>) instead of serving them until the next network refresh (<a href="https://github.com/can1357/oh-my-pi/issues/6711" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6711/hovercard">#6711</a>).</li>
<li>Fixed Anthropic model discovery 404ing when the registry derived the provider base URL from a bundled model without the <code>/v1</code> suffix (<code>https://api.anthropic.com/models</code> instead of <code>/v1/models</code>), which let a stale text-only cache row shadow fresh models.dev vision metadata — surfacing as snapcompact refusing to run on <code>claude-opus-5</code>. Discovery now always targets <code>/v1/models</code> while model rows keep the provider base URL (<a href="https://github.com/can1357/oh-my-pi/issues/6563" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6563/hovercard">#6563</a>).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added a configurable per-request timeout for the <code>inspect_image</code> tool (<code>inspect_image.timeoutMs</code>, default 5 minutes; set to 0 to disable) so a stalled vision-model provider fails fast with a clear error instead of blocking until manual abort (<a href="https://github.com/can1357/oh-my-pi/issues/4165" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/4165/hovercard">#4165</a>).</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Reduced default startup resident memory by constructing the default-off ComputerTool ArkType schema only on first parameter access, then reusing it across tool instances without changing validation or tool behavior (<a href="https://github.com/can1357/oh-my-pi/pull/6742" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6742/hovercard">#6742</a> by <a href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a>).</li>
<li>Reduced startup CPU and memory by loading the bundled changelog only when needed, while preserving source, npm bundle, standalone binary, and native absolute-path fallback resolution.</li>
<li>Moved PTY log replay into the shared project launch broker, so normal CLI and Hub startup no longer load the xterm runtime while launch logs return validated rendered terminal rows.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed DeepSeek V4 Flash and Step 3.7 Flash models using hashline edit mode by default despite repeatedly misreading its range grammar; both now use the simpler replace-mode fallback unless explicitly overridden (<a href="https://github.com/can1357/oh-my-pi/issues/6671" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6671/hovercard">#6671</a>).</li>
<li>Fixed an Ask form appearing while the main prompt contains a draft hiding that text and consuming the next in-flight keystroke. The draft now remains visible and keeps receiving input until it is submitted or cleared; only then do form controls activate (<a href="https://github.com/can1357/oh-my-pi/issues/6737" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6737/hovercard">#6737</a>).</li>
<li>Fixed <code>glob</code> rejecting safe <code>memory://root/&lt;directory&gt;/**</code> patterns. Memory globs now resolve their directory prefix inside the project memory root while rejecting traversal and percent-encoded path separators across the complete glob path.</li>
<li>Fixed <code>omp --resume &lt;id&gt;</code> prompting to fork sessions from another existing directory instead of switching the process and cwd-scoped settings into the resumed session's recorded directory (<a href="https://github.com/can1357/oh-my-pi/issues/6752" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6752/hovercard">#6752</a>).</li>
<li>Fixed deferred CLI model roles resolving ambiguous bare model IDs to a preferred but unauthenticated provider instead of the authenticated provider selected by the eager path (<a href="https://github.com/can1357/oh-my-pi/issues/6727" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6727/hovercard">#6727</a>).</li>
<li>Fixed Windows sessions crashing with an unhandled <code>EPIPE: broken pipe, write</code> when an LSP server closed its stdin between filesystem mutations; LSP writes now observe asynchronous <code>FileSink.write()</code> failures and route them through the existing request/notification failure path.</li>
<li>Fixed the bash tool's <code>stat</code> builtin failing on native Windows with <code>stat: unsupported on this platform</code> (exit 1) for every invocation. The vendored <code>uu-stat</code> now ships a Windows-native backend that maps the GNU format directives onto <code>std::fs::Metadata</code>, the <code>windows_by_handle</code> metadata extensions (inode, hard-link count, and device via <code>GetFileInformationByHandle</code>), and the Win32 volume APIs for <code>--file-system</code> mode; Unix behavior is unchanged (<a href="https://github.com/can1357/oh-my-pi/issues/6723" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6723/hovercard">#6723</a>).</li>
<li>Fixed auto-retry wedging the session after an assistant-tail removal miss: when a context rebuild recreated the failed turn's message object, the identity-keyed cleanup logged <code>assistant removal missed</code> but the retry still scheduled <code>continue()</code>, which rejected the terminal assistant error message locally (<code>Cannot continue from message role: assistant</code>) before any provider request — <code>auto_retry_end</code> never fired, the TUI kept showing retry progress, and the in-flight <code>prompt()</code> hung until a manual follow-up. The retry path now strips a still-failed assistant tail positionally after the backoff, and a continuation that still fails locally closes the retry saga with a failed <code>auto_retry_end</code> (<a href="https://github.com/can1357/oh-my-pi/issues/5382" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/5382/hovercard">#5382</a>).</li>
<li>Fixed native Anthropic web-search history being recursively truncated during session persistence or retained under a different user turn, preserving opaque replay bytes across reload and stripping them on reparent (<a href="https://github.com/can1357/oh-my-pi/issues/6703" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6703/hovercard">#6703</a>).</li>
<li>Fixed malformed or temporarily unreadable <code>config.yml</code> files being treated as empty settings and then overwritten by the next setting change, which could permanently erase broker tokens, model roles, and provider configuration. Invalid YAML is now moved to a timestamped <code>.broken-*</code> backup, read failures abort without touching the source, pending changes remain retryable with the last successfully loaded settings, atomic writes preserve symlink targets and handle Windows <code>EPERM</code> replacement, concurrent startup failures are fully observed and quarantine races fail closed, and <code>omp config set/reset</code> waits for persistence before reporting success.</li>
<li>Fixed mounted MCP tools being hard to invoke when server or plugin guidance names their original calls: sessions now include one bounded, exact original-name-to-<code>xd://</code> route map for every live mounted MCP tool—including servers without initialize instructions—and refresh it as catalogs change without disabling schema virtualization.</li>
<li>Fixed <code>inspect_image</code> blocking indefinitely when the vision-model API stalls by combining the caller's abort signal with an <code>AbortSignal.timeout()</code> and surfacing a distinct timeout <code>ToolError</code> (separate from user-triggered abort) (<a href="https://github.com/can1357/oh-my-pi/issues/4165" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/4165/hovercard">#4165</a>).</li>
<li>Fixed MiMo models using hashline edit mode by default despite needing the same replace-mode fallback as Kimi. (<a href="https://github.com/can1357/oh-my-pi/issues/3772" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/3772/hovercard">#3772</a>)</li>
<li>Fixed <code>omp</code> refusing to start on Windows when no <code>bash.exe</code> is discoverable — most visibly with scoop-installed Git, whose manifest shims <code>sh.exe</code>/<code>git.exe</code> but never <code>bash.exe</code>, so PATH lookup missed it. Startup threw <code>No bash shell found</code> while merely building the bash tool description, even though bash tool commands always execute in the embedded brush-core shell and need no host bash. Shell discovery now also checks <code>GIT_INSTALL_ROOT</code>, scoop and per-user Git for Windows install roots, and <code>sh.exe</code> on PATH, then falls back to <code>cmd.exe</code> for the spawn-only paths (interactive PTY, ACP client terminals) instead of failing; the cmd fallback is never used to wrap user-shell commands — brush runs the POSIX line directly.</li>
<li>Added a selectable voice setting for <code>/live</code> realtime sessions (<a href="https://github.com/can1357/oh-my-pi/issues/6566" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6566/hovercard">#6566</a>).</li>
</ul>
<h2>@oh-my-pi/hashline</h2>
<h3>Changed</h3>
<ul>
<li>Improved reversed-range and invalid block-anchor diagnostics with absolute endpoint corrections plus nearby syntactic opener suggestions, without auto-applying the suggested edit (<a href="https://github.com/can1357/oh-my-pi/issues/6671" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6671/hovercard">#6671</a>).</li>
<li>Accepted a single dot between integer range endpoints, such as <code>DEL 235.258</code>, as an unambiguous range separator (<a href="https://github.com/can1357/oh-my-pi/issues/6671" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6671/hovercard">#6671</a>).</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed the native <code>sort</code> builtin panicking with <code>SendError(..)</code> at <code>chunks.rs:248</code> when the chunk-channel receiver disconnected early (e.g. a consumer thread stopping after an error or closed output); the reader now stops gracefully instead of unwrapping the failed send, and a panicking external-sort worker thread is surfaced as an error instead of silently emitting truncated output (<a href="https://github.com/can1357/oh-my-pi/issues/6736" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6736/hovercard">#6736</a>).</li>
</ul>
<h2>@oh-my-pi/snapcompact</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed snapcompact resume guides reporting only the HQ grid width for mixed-width foveated archives (<a href="https://github.com/can1357/oh-my-pi/issues/6712" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6712/hovercard">#6712</a>).</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Fixed</h3>
<ul>
<li><code>getShellConfig</code> no longer throws <code>No bash shell found</code> on Windows hosts without a discoverable bash. <code>resolveWindowsShell</code> searches Git for Windows install roots (machine, per-user, <code>GIT_INSTALL_ROOT</code>, scoop app dirs — scoop shims <code>sh.exe</code>/<code>git.exe</code> but never <code>bash.exe</code>), then <code>bash.exe</code>/<code>sh.exe</code> on PATH, and finally falls back to <code>cmd.exe</code> from ComSpec with <code>/c</code> args, so shell resolution always succeeds.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(ai): avoid OAuth barrel import cycle by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4977540663" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6645" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6645/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6645">#6645</a></li>
<li>fix(mcp): map mounted tools to xd routes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jeffscottward/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jeffscottward">@jeffscottward</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4979107067" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6670" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6670/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6670">#6670</a></li>
<li>fix(ai): preserve custom Anthropic web-search history by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4980784731" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6706" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6706/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6706">#6706</a></li>
<li>fix(catalog): derive kimi-code output caps per family by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4981055538" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6713" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6713/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6713">#6713</a></li>
<li>fix(snapcompact): report all foveated frame widths by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4981067533" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6714" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6714/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6714">#6714</a></li>
<li>fix(ai): send interleaved beta through signing proxies by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4981293176" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6718" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6718/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6718">#6718</a></li>
<li>fix(coding-agent): handle asynchronous LSP pipe failures by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shoucandanghehe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shoucandanghehe">@shoucandanghehe</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4981312361" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6719" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6719/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6719">#6719</a></li>
<li>fix(ai): preserve Kimi Code cache affinity by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4981618046" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6721" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6721/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6721">#6721</a></li>
<li>fix(auth-broker): revalidate fresh snapshot caches by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Git-on-my-level/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Git-on-my-level">@Git-on-my-level</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4981871675" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6722" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6722/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6722">#6722</a></li>
<li>fix(shell): implement native Windows stat builtin by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4982030409" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6725" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6725/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6725">#6725</a></li>
<li>fix(coding-agent): prevented invalid configs from being overwritten by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ant39140/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ant39140">@Ant39140</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4982033779" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6726" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6726/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6726">#6726</a></li>
<li>fix(coding-agent): prefer auth in deferred model resolution by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4982114415" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6728" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6728/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6728">#6728</a></li>
<li>fix(coding-agent): safely glob memory directories by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4982264505" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6733" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6733/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6733">#6733</a></li>
<li>fix(ai): respect Responses replay pair order by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4982265660" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6735" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6735/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6735">#6735</a></li>
<li>fix(tui): preserve prompt input while ask opens by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4983016190" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6738" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6738/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6738">#6738</a></li>
<li>perf(coding-agent): lazily construct computer schema by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4983290349" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6742" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6742/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6742">#6742</a></li>
<li>perf(coding-agent): avoid unused compact tool metadata by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4983294310" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6743" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6743/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6743">#6743</a></li>
<li>perf(ai): lazily construct auth broker wire schemas by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4983298244" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6744" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6744/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6744">#6744</a></li>
<li>perf: lazily construct models config schema by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4983298558" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6745" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6745/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6745">#6745</a></li>
<li>perf(catalog): lazily materialize provider models by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4983305346" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6746" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6746/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6746">#6746</a></li>
<li>perf(coding-agent): replace legacy Babel traversal by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4983306918" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6747" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6747/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6747">#6747</a></li>
<li>perf(launch): isolate PTY replay in broker by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4983312544" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6748" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6748/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6748">#6748</a></li>
<li>perf(coding-agent): load changelog asset on demand by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4983322151" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6749" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6749/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6749">#6749</a></li>
<li>fix(cli): resume cross-directory sessions in place by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4983696212" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6753" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6753/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6753">#6753</a></li>
<li>fix(agent): exclude MiMo and DeepSeek from hashline edits by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4764581214" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/3773" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/3773/hovercard" href="https://github.com/can1357/oh-my-pi/pull/3773">#3773</a></li>
<li>fix(inspect-image): bounded per-request timeout on the vision-model call by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4787825856" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/4168" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/4168/hovercard" href="https://github.com/can1357/oh-my-pi/pull/4168">#4168</a></li>
<li>feat(live): add selectable voice setting by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4982005783" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6724" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6724/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6724">#6724</a></li>
<li>fix(natives): stopped sort panicking on disconnected receiver by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4984016577" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6760" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6760/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6760">#6760</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Git-on-my-level/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Git-on-my-level">@Git-on-my-level</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4981871675" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6722" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6722/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6722">#6722</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.1.4...v17.1.5">v17.1.4...v17.1.5</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.1.6]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Added

Added a pre-model-call gate: AgentLoopConfig.beforeModelCall receives the finalized provider context and run abort signal, and may return { stop: true, reason? } to end the run before the provider is called, so a host can refuse a request it has decided not to pay f...]]></description>
<link>https://tsecurity.de/de/3698419/tools/github-v1716/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698419/tools/github-v1716/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:19 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Added</h3>
<ul>
<li>Added a pre-model-call gate: <code>AgentLoopConfig.beforeModelCall</code> receives the finalized provider context and run abort signal, and may return <code>{ stop: true, reason? }</code> to end the run before the provider is called, so a host can refuse a request it has decided not to pay for (prompt no longer fits, budget boundary crossed, session should hand off). <code>Agent.setBeforeModelCall</code> installs the host callback; <code>Agent.addBeforeModelCall</code> registers an additional one without displacing it and returns a disposer. A gate-stopped run retains pending soft tool reminders/escalations and an unserved hard tool choice for the next admitted request; deferred choices are revalidated against active tools and cleared with queued session state (<a href="https://github.com/can1357/oh-my-pi/pull/6543" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6543/hovercard">#6543</a> by <a href="https://github.com/paralin">@paralin</a>).</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Input message events (prompt, steering, soft reminders) are now emitted once provider-context preparation succeeds, so a pre-model gate can veto the request before any turn opens; gate-stopped and failed runs still commit their accepted inputs (<a href="https://github.com/can1357/oh-my-pi/pull/6543" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6543/hovercard">#6543</a> by <a href="https://github.com/paralin">@paralin</a>).</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>Added <code>getProxyForUrl()</code> for transports that need provider-specific and standard proxy environment resolution with <code>NO_PROXY</code> support (<a href="https://github.com/can1357/oh-my-pi/issues/6770" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6770/hovercard">#6770</a>).</li>
<li>Added SiliconFlow and SiliconFlow (China) to the built-in API-key login provider catalog so <code>omp login siliconflow</code> / <code>omp login siliconflow-cn</code> stores a reusable credential validated against each region's <code>/v1/models</code> endpoint.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added SiliconFlow providers (<code>siliconflow</code>, <code>siliconflow-cn</code>) with dynamic-only OpenAI-compatible model discovery: no bundled catalog — the model list is fetched live from each region's <code>/v1/models</code> endpoint, with non-chat entries (embedding, reranker, image, audio, video) filtered out. Discovery hydrates pricing, context/output limits, and reasoning metadata from the provider's models.dev catalog at runtime (with bundled upstream references as a reasoning-only fallback for ids models.dev has not indexed), so reasoning models keep thinking enabled and sessions compact against real context windows. <code>SILICONFLOW_API_KEY</code> / <code>SILICONFLOW_CN_API_KEY</code> environment variables are wired into <code>getEnvApiKey</code>.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added separate Advisor cost visibility to the status line, rendering primary and Advisor spend as <code>$2.67 (sub) + $0.41 (adv)</code> while keeping already-incurred Advisor cost across runtime disablement and same-session history rewrites.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Made the task tool's per-spawn <code>effort</code> parameter opt-in through <code>task.enableEffort</code>, which defaults to false and omits the field from flat and batch schemas and tool guidance until enabled.</li>
<li>Reduced terminal-title update overhead by deduplicating unchanged titles on every platform and using <code>SetConsoleTitleW</code> through <code>bun:ffi</code> instead of OSC writes on Windows. Windows working titles now keep a static <code>:</code> separator instead of scheduling spinner updates; other platforms retain the animated separator.</li>
<li>Added <code>task.maxEffort</code> to cap the task tool's optional per-spawn effort hint after model-specific resolution, so operators can enable effort hints without allowing them to exceed a configured ceiling; the ceiling now also rides into the spawned session so retry-fallback model swaps re-clamp to it instead of escalating past the cap (<a href="https://github.com/can1357/oh-my-pi/issues/6580" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6580/hovercard">#6580</a>, <a href="https://github.com/can1357/oh-my-pi/pull/6794" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6794/hovercard">#6794</a> by <a href="https://github.com/wolfiesch">@wolfiesch</a>).</li>
<li>Restructured the steering/interjection envelope sent to the model: the injected <code>&lt;user_interjection&gt;...&lt;message&gt;...&lt;/message&gt;...</code> wrapper around user text is now a <code>&lt;system-notice&gt;</code> explaining the interjection followed by the user's raw message unwrapped, matching the existing <code>&lt;system-notice&gt;</code>/<code>&lt;system-directive&gt;</code> convention instead of nesting the literal message inside its own tag pair, which some models found confusing.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed a disabled higher-priority MCP server no longer disabling a same-named lower-priority one: disabled servers are now suppressed after key-level dedupe instead of dropped before it, so a project <code>foo</code> with <code>enabled: false</code> keeps the user-level <code>foo</code> off while still not starving a differently-named equivalent connection.</li>
<li>Fixed the MCP tool-name collision winner flipping when the current owner reconnects: the winner is now chosen by a stable server+tool key instead of tool-array insertion order, which reconnects reorder.</li>
<li>Fixed MCP resources with custom URI schemes being treated as missing filesystem paths. <code>read</code> and <code>omp read</code> now resolve server-advertised native resource URIs such as <code>ags://capabilities/current-host</code>, while preserving the existing <code>mcp://&lt;resource-uri&gt;</code> form.</li>
<li>Fixed three gaps in native MCP resource URI resolution: server-advertised URIs whose path is exactly <code>/</code> (e.g. <code>catalog://root/</code>) are now preserved byte-for-byte instead of losing the trailing slash to reconstruction; opaque resource URIs (<code>urn:example:document</code>, <code>custom:item</code>) are recognized by the <code>read</code> and <code>omp read</code> resolver gates instead of falling through to filesystem handling; and a failing <code>resources/templates/list</code> no longer discards a successful <code>resources/list</code>, which previously produced a false missing-resource error.</li>
<li>Fixed custom LSP servers sending <code>languageId: "plaintext"</code> for extensions outside the built-in language map by honoring an optional per-server <code>languageId</code> in <code>lsp.json</code> for disk and in-memory document opens (<a href="https://github.com/can1357/oh-my-pi/issues/6800" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6800/hovercard">#6800</a>).</li>
<li>Fixed interactive extension confirmations ignoring <code>dialogOptions</code>, and cancelled handler-owned dialogs when the extension watchdog times out so stale approval UI cannot outlive a blocked tool call (<a href="https://github.com/can1357/oh-my-pi/issues/6805" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6805/hovercard">#6805</a>).</li>
<li>Fixed the per-handler extension context snapshotting the live <code>ctx.model</code> getter, so a handler calling <code>pi.setModel()</code> and then reading <code>ctx.model</code> saw the stale model; the scoped context now delegates to the base context instead of spreading it.</li>
<li>Fixed Python cell errors (<code>$</code> commands and the eval tool) leaking runner-internal traceback frames. Cell syntax errors now render as the bare caret display with a <code>&lt;cell&gt;</code> filename instead of a <code>_handle_request_async</code>/<code>ast.parse</code> stack dump, and runtime tracebacks start at user code, matching the Ruby runner's user-frame filtering.</li>
<li>Dropped unavailable forced tool choices through the queue rejection lifecycle and discarded their remaining sequence yields so a skipped force cannot disable tools on the next request (<a href="https://github.com/can1357/oh-my-pi/pull/6543" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6543/hovercard">#6543</a> by <a href="https://github.com/paralin">@paralin</a>).</li>
<li>Fixed identical MCP server connections discovered under direct and marketplace-plugin names spawning twice and duplicating mounted tool routes; distinct tools whose server names sanitize to the same route now keep the first registration and log both origins (<a href="https://github.com/can1357/oh-my-pi/issues/6786" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6786/hovercard">#6786</a>).</li>
<li>Fixed <code>/usage</code> and the other large transcript command panels (<code>/session</code>, <code>/advisor status</code>, <code>/jobs</code>, <code>/changelog</code>, <code>/context</code>, <code>/memory view</code>) duplicating in native scrollback when invoked while an agent turn is streaming. These callsites mounted their finalized panel immediately via <code>present()</code> instead of deferring it until the turn ends via <code>presentCommandOutput()</code> (the path added in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4885119439" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/5427" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/5427/hovercard" href="https://github.com/can1357/oh-my-pi/pull/5427">#5427</a> for <code>/tools</code>/<code>/mcp</code>), so the panel landed above a still-growing live block and was recommitted lower down (<a href="https://github.com/can1357/oh-my-pi/issues/6767" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6767/hovercard">#6767</a>).</li>
<li>Fixed plan-mode task subagents unregistering extension-provided models, credentials, managers, and custom APIs from the shared parent <code>ModelRegistry</code> when restricted sessions intentionally skip extension loading (<a href="https://github.com/can1357/oh-my-pi/issues/6783" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6783/hovercard">#6783</a>).</li>
<li>Fixed <code>/live</code> sideband WebSockets ignoring standard proxy environment variables and <code>NO_PROXY</code>, which left proxied sessions stuck while the rest of the Codex connection succeeded (<a href="https://github.com/can1357/oh-my-pi/issues/6770" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6770/hovercard">#6770</a>).</li>
<li>Fixed the bash tool's <code>kill</code> builtin rejecting numeric signals and multiple process operands, stopping after the first failed target, and defaulting to <code>SIGKILL</code> instead of the standard <code>SIGTERM</code>. Negative PID operands (process groups per <code>kill(2)</code>) and the <code>--</code> end-of-options marker are now handled instead of being misparsed as signals (<a href="https://github.com/can1357/oh-my-pi/issues/6779" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6779/hovercard">#6779</a>).</li>
<li>Fixed <code>learned.md</code> saves growing a blank line on every write (trailing-newline split artifact) and hoisting all headings/prose above all bullets, which re-scoped lessons under the wrong heading in hand-organized files. Saves are now byte-idempotent and preserve mixed Markdown ordering: non-list lines keep their positions, new lessons insert newest-first at the head of the first bullet run, and dedupe/cap operate on bullet lines in place.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Changed</h3>
<ul>
<li>Native addons now build with Bazel (rules_rust + hermetic zig cc toolchains for linux-gnu/musl, host Xcode for darwin, and a hermetic clang-cl + xwin toolchain for windows-msvc) instead of the napi CLI + cargo-zigbuild/cargo-xwin pipeline. <code>bun run build</code> drives <code>scripts/bazel-natives.ts</code>; TypeScript binding regeneration moved to <code>bun run build:bindings</code> (needed only when the Rust API surface changes). CI caches through a content-addressed bazel-remote action cache instead of sccache + target-directory snapshots, cutting warm native rebuilds from ~20 minutes to seconds and cold cache-hit builds to ~2.5 minutes.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>napi binding build failures now surface the exit code and the tail of stdout/stderr instead of a bare "napi build failed" message (<a href="https://github.com/can1357/oh-my-pi/pull/6799" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6799/hovercard">#6799</a>).</li>
<li>Silenced cross-platform Rust build warnings: dead-code on unix-only fields/helpers in <code>pi-uutils-ctx</code>, <code>pi-shell</code> (fd owner filters, coreutils argv), and vendored <code>uu-find</code>/<code>uu-stat</code> when compiling for Windows, and deprecated <code>libc::time_t</code> casts in <code>pi-iso</code> on musl. <code>pi-walker</code> now declares the <code>windows-sys</code> features it uses (<code>Win32_Foundation</code>, <code>Win32_Security</code>, <code>Win32_Storage_FileSystem</code>, <code>Win32_System_IO</code>) instead of relying on workspace-wide feature unification.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed omp dying with an uncaught <code>setRawMode failed with errno: 2</code> instead of exiting 129 when the terminal disconnects. A recycled terminal pane revokes the pty, so the raw-mode restore in <code>stop()</code> hit an fd that is no longer a tty; the throw escaped <code>#markTerminalDisconnected()</code> and preempted its own SIGHUP. Terminal teardown on the disconnect path is now best-effort, matching <code>emergencyTerminalRestore()</code>, so the exit added in <a href="https://github.com/can1357/oh-my-pi/pull/5837" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/5837/hovercard">#5837</a> always runs.</li>
<li>Fixed the multi-line prompt editor bypassing the keybindings registry for word/line delete and yank: <code>ctrl+backspace</code> (a declared default of <code>tui.editor.deleteWordBackward</code>) never fired and <code>keybindings.yml</code> remaps of <code>deleteWordBackward</code>, <code>deleteWordForward</code>, <code>deleteToLineStart</code>, <code>deleteToLineEnd</code>, <code>yank</code>, and <code>yankPop</code> were ignored, because those actions were matched with hardcoded chords instead of <code>keybindings.matches(...)</code> like cursor motion and the single-line <code>Input</code> already do (<a href="https://github.com/can1357/oh-my-pi/issues/6782" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6782/hovercard">#6782</a>).</li>
<li>Restored the Windows Terminal raw <code>0x08</code> → <code>ctrl+backspace</code> disambiguation (<code>WT_SESSION</code> set, <code>SSH_*</code> unset) by routing the exported <code>matchesRawBackspace</code> helper through the <code>matchesKey</code>/<code>parseKey</code> seam. Remote SSH/container sessions where terminal identity is unavailable can opt in with <code>PI_TUI_RAW_BACKSPACE_IS_CTRL=1</code> (<a href="https://github.com/can1357/oh-my-pi/issues/6782" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6782/hovercard">#6782</a>).</li>
<li>Fixed plain Backspace deleting a whole word inside tmux/GNU screen/Zellij panes launched from Windows Terminal: multiplexers inherit <code>WT_SESSION</code> but emit raw <code>0x08</code> for plain Backspace, so the automatic raw-backspace → <code>ctrl+backspace</code> heuristic misfired. The heuristic now skips multiplexer sessions (<code>TMUX</code>/<code>STY</code>/<code>ZELLIJ</code> or <code>TERM</code> starting with <code>tmux</code>/<code>screen</code>); <code>PI_TUI_RAW_BACKSPACE_IS_CTRL=1</code> remains the explicit opt-in everywhere (<a href="https://github.com/can1357/oh-my-pi/pull/6784" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6784/hovercard">#6784</a>).</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>feat(agent): add a pre-model-call gate that can stop the turn by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paralin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paralin">@paralin</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4971844439" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6543" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6543/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6543">#6543</a></li>
<li>feat(catalog,ai): add SiliconFlow providers with dynamic-only model discovery by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iacore/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iacore">@iacore</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4984511485" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6765" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6765/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6765">#6765</a></li>
<li>fix(tui): defer large command panels during streaming to stop scrollback dupes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4984776749" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6768" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6768/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6768">#6768</a></li>
<li>fix(live): honor standard proxies for sideband websocket by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4985021679" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6773" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6773/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6773">#6773</a></li>
<li>fix(memories): preserve non-list learned content by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/isaac-sun/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/isaac-sun">@isaac-sun</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4985037978" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6774" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6774/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6774">#6774</a></li>
<li>test(coding-agent): decouple changelog bundle probe from native addon resolution by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4986063786" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6778" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6778/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6778">#6778</a></li>
<li>fix(shell): correct kill signal handling by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4986334886" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6780" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6780/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6780">#6780</a></li>
<li>fix(tui): route editor word delete through keybindings registry by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4986657774" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6784" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6784/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6784">#6784</a></li>
<li>fix(coding-agent): preserve extension providers for plan subagents by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4986729212" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6785" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6785/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6785">#6785</a></li>
<li>fix(mcp): deduplicate aliased server connections by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4986895562" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6787" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6787/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6787">#6787</a></li>
<li>fix(tui): don't crash on teardown when the pty is already gone by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dergachoff/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dergachoff">@dergachoff</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4987002451" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6788" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6788/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6788">#6788</a></li>
<li>fix(mcp): resolve native resource URIs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/FernandeZ-hjm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/FernandeZ-hjm">@FernandeZ-hjm</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4987037210" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6790" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6790/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6790">#6790</a></li>
<li>feat(task): add per-spawn effort ceiling by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4987187407" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6794" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6794/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6794">#6794</a></li>
<li>fix(natives): surface exit code and stdout in napi build error by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4987493090" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6799" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6799/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6799">#6799</a></li>
<li>fix(lsp): honor custom server language ids by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4987589873" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6802" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6802/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6802">#6802</a></li>
<li>fix(extensions): cancel timed-out handler dialogs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4988433697" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6806" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6806/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6806">#6806</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/isaac-sun/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/isaac-sun">@isaac-sun</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4985037978" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6774" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6774/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6774">#6774</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dergachoff/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dergachoff">@dergachoff</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4987002451" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6788" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6788/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6788">#6788</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/FernandeZ-hjm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/FernandeZ-hjm">@FernandeZ-hjm</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4987037210" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6790" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6790/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6790">#6790</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.1.5...v17.1.6">v17.1.5...v17.1.6</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.1.7]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Changed

beforeToolCall now runs during arg-prep in a pre-dispatch prepare phase — on the streamed path before the assistant message's message_start/message_end are emitted, and always ahead of concurrency resolution, tool_execution_start, telemetry span start, and tool.ex...]]></description>
<link>https://tsecurity.de/de/3698418/tools/github-v1717/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698418/tools/github-v1717/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:19 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Changed</h3>
<ul>
<li><code>beforeToolCall</code> now runs during arg-prep in a pre-dispatch prepare phase — on the streamed path before the assistant message's <code>message_start</code>/<code>message_end</code> are emitted, and always ahead of concurrency resolution, <code>tool_execution_start</code>, telemetry span start, and <code>tool.execute</code> — instead of inside the already-scheduled execution slot. It receives the resolved <code>tool</code> in its context and may return <code>args</code> to replace the call's arguments; a replacement is revalidated against the tool schema, written back to the assistant message's tool-call block, and re-resolves argument-dependent interruptibility, making it the single source of truth for history, persistence, provider replay, scheduling, execution events, and <code>tool.execute</code>. Argument validation moved into the same prepare phase, so functional <code>concurrency</code> resolvers now see validated (and possibly revised) arguments rather than raw pre-validation ones. The hook now receives the run's request abort signal rather than the per-tool signal.</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Changed</h3>
<ul>
<li>Upstream <code>403 Forbidden</code> responses (e.g. Anthropic <code>permission_error</code> plan/model denials, Copilot model-policy rejections) now rotate through sibling credentials like usage limits do, instead of failing the session on the first denied account. The denied credential is soft-blocked for 60s and re-validated — never removed — and the original 403 surfaces only once every sibling has been tried.</li>
<li>Usage report filtering in the auth-broker remote store is memoized per (reports, snapshot) with a precomputed per-provider OAuth credential map, replacing an O(reports × credentials) scan on every credential-selection and status refresh</li>
<li>Cursor and Devin Connect-frame readers no longer copy every stream chunk through <code>Buffer.concat</code> when the pending buffer is empty</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added support for moonshotai/Kimi-K3 and kimi-k3-fast models</li>
<li>Added umans-kimi-k3 prerelease model configuration</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Updated pricing and token limits for selected models</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added the bundled <code>ts-no-local-is-record</code> TTSR rule, which catches local <code>isRecord</code> function and lambda definitions and directs agents to shared guards plus explicit shape validation.</li>
<li>A <code>tool_call</code> handler (extension or hook) can now return <code>input</code> to revise the arguments a tool executes with, not just <code>block</code> it. The returned object is the raw execution input passed to the tool (ignored when <code>block</code> is set, and not applied to <code>computer</code> tool calls), enabling wrappers that normalize or rewrite a built-in's arguments without reimplementing the tool. For model-issued calls the event fires at arg-prep time in the agent loop, so a revision is revalidated against the tool schema and is what concurrency scheduling, <code>tool_execution_start</code>/transcripts, the persisted assistant message, and the approval gate all observe — the user approves exactly what runs, and a revision that changes a tool's functional concurrency (e.g. bash <code>pty</code>) schedules correctly. A revised nested <code>write xd://</code> device dispatch forfeits the outer write gate's approval and faces the full prompt again (<a href="https://github.com/can1357/oh-my-pi/pull/6681" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6681/hovercard">#6681</a> by <a href="https://github.com/psyrendust">@psyrendust</a>).</li>
<li>Added a parser for macOS <code>sample</code>(1) call-tree reports to the read tool: <code>*.sample.txt</code> reads now return a compact bottleneck summary — per-thread hot paths with on-CPU sample counts (blocked syscall time excluded), demangled Rust v0/legacy symbols, flattened direct recursion, merged call-site siblings, idle-thread classification, and a process-wide top-functions-by-self-samples table. <code>:raw</code> still reads the original report, and files that merely carry the extension fall back to plain text.</li>
<li>Added V8 <code>.cpuprofile</code> support to the read tool (Node/Bun <code>--cpu-prof</code>, Chrome DevTools, CDP <code>Profiler.stop</code> output): reads now return a compact bottleneck summary — hot-path call tree with on-CPU milliseconds (<code>(idle)</code> time excluded), collapsed pass-through chains, flattened direct recursion, shortened file URLs, and a top-functions-by-self-time table. <code>:raw</code> still reads the original JSON, and files that merely carry the extension fall back to plain text.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Direct and <code>xd://</code> dispatch now share one canonical tool map: <code>write xd://&lt;tool&gt;</code> executes any enabled top-level or mounted tool, and <code>read xd://&lt;tool&gt;</code> returns its docs, instead of failing when the name was exposed through the other layer. Mounted names are presentation metadata only, so tool replacement and disconnection cannot leave stale device instances; disabled tools remain unreachable, and both <code>xd://</code> and Cursor/top-level fallback execution retain the tool's approval and ACP permission gates.</li>
<li>Session listing now caches parsed headers keyed on file stat identity (mtime + size), so repeated resume-picker opens and startup scans re-read only changed session files</li>
<li>Reduced per-keystroke editor dispatch overhead: keybinding resolution happens once per input chunk and the per-action interception chain is gated behind a single canonical-key set probe</li>
<li><code>xd://</code> device docs now render the parameter schema as a comment-annotated TypeScript type (via <code>jsonSchemaToTypeScript</code>, the same renderer the in-band tool inventory uses) instead of a raw JSON Schema dump, shrinking system-prompt device sections while keeping descriptions inline.</li>
<li>Added a <code>/vision [on|off|auto|status]</code> slash command for session-scoped control of the <code>inspect_image</code> vision-delegation tool, modeled on <code>/computer</code>: <code>on</code>/<code>off</code> force the tool for the current session only, <code>auto</code> returns to the persisted setting, and <code>status</code> reports the effective mode, session override, tool state, and active-model image capability.</li>
<li>Replaced the <code>inspect_image.enabled</code> boolean with the tri-state <code>inspect_image.mode</code> (<code>auto</code>|<code>on</code>|<code>off</code>, default <code>auto</code>). In <code>auto</code> the tool is registered only when the active model lacks native image input, so vision-capable models (e.g. <code>kimi-code/k3</code>) read images inline with their own capabilities instead of delegating to a separate vision model; the tool set is re-evaluated on every model switch with a status notice when it flips. The <code>read</code> tool now follows the effective state dynamically rather than the raw setting, so it returns decoded image blocks again whenever <code>inspect_image</code> is hidden. Existing <code>inspect_image.enabled: true/false</code> configs migrate to <code>inspect_image.mode: on/off</code>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Restoring a prompt with image attachments via esc-esc branch or <code>/tree</code> now re-attaches the images to the composer draft: previously only the text (with its <code>[Image #N]</code> markers) was restored, so resubmitting sent the literal marker with no image.</li>
<li>Fixed large bash/eval/ssh output citing two different artifact ids in one result — the truncation notice said <code>Read artifact://N for full output</code> while the footer said <code>Artifact: N+1</code>. The streaming sink's head and tail windows each had a full budget, so a middle-elided inline body could reach <code>headBytes + spillThreshold</code> and always re-tripped the final-defense inline byte cap, which truncated a second time (two elision markers), saved a duplicate already-truncated artifact, and left the notice's line ranges stale. The head and tail windows now share the spill-threshold budget (head clamped to half), the cap budget derives from the configured threshold plus notice slack, and when the cap does fire on a sink-spilled result it references the existing raw artifact instead of saving a copy.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Added</h3>
<ul>
<li>Added bulk-input fast path and iterative processing for bracketed paste in the editor</li>
<li>Added windowed incremental lexing for large markdown documents</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Eliminated the dominant markdown streaming CPU cost (73% of a profiled interactive session): marked's GFM <code>url</code> tokenizer and <code>lheading</code> rule are now gated by O(1)/O(n) charCode pre-checks, the pathological <code>hr</code>/<code>lheading</code>/<code>table</code>/<code>html</code> block rules use sticky clones that fail at offset 0 instead of rescanning the source, and the inline math/autolink <code>start()</code> scans dropped their regex alternations</li>
<li>Streaming markdown now freezes the stable prefix through provably closed lists instead of re-lexing everything after the last non-list block on every delta</li>
<li>Raised the markdown render cache entry budget (32 KiB → 256 KiB) so large messages — exactly the expensive renders — are cacheable</li>
<li>Deduplicated terminal cursor-visibility writes to skip redundant escape sequences</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>feat(extensions): let tool_call handlers revise tool input by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/psyrendust/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/psyrendust">@psyrendust</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4979482987" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6681" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6681/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6681">#6681</a></li>
<li>feat(coding-agent): capability-aware inspect_image with tri-state mode and /vision toggle by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/epsilver/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/epsilver">@epsilver</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4991778850" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6830" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6830/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6830">#6830</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/psyrendust/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/psyrendust">@psyrendust</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4979482987" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6681" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6681/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6681">#6681</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/epsilver/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/epsilver">@epsilver</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4991778850" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6830" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6830/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6830">#6830</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.1.6...v17.1.7">v17.1.6...v17.1.7</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.1.8]]></title>
<description><![CDATA[@oh-my-pi/pi-ai
Fixed

Fixed an HTTP 400 error when resuming or replaying OpenAI history after an interrupted native Computer Use turn.
Fixed connection 404 errors when using Google Vertex AI in multi-region locations (eu and us) by correctly resolving regional endpoint (REP) hosts.
Fixed a resou...]]></description>
<link>https://tsecurity.de/de/3698417/tools/github-v1718/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698417/tools/github-v1718/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:19 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-ai</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an HTTP 400 error when resuming or replaying OpenAI history after an interrupted native Computer Use turn.</li>
<li>Fixed connection 404 errors when using Google Vertex AI in multi-region locations (eu and us) by correctly resolving regional endpoint (REP) hosts.</li>
<li>Fixed a resource leak in SqliteAuthCredentialStore.close() where unclosed prepared statements kept the SQLite connection alive, preventing database file cleanup (especially on Windows where files remained locked).</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added <code>resolveVertexEndpointHost(location)</code> utility to resolve the correct Vertex AI API endpoint hostnames for global, multi-region, and regional locations.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where <code>calculateCost</code> under-reported Anthropic cache-write costs by honoring the <code>usage.cttl</code> breakdown to correctly price 1-hour retention writes at 2x the base input rate.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Changed tab.screenshot() to no longer accept a per-call save path; it now saves screenshots under browser.screenshotDir (or the OS temp directory if unset) and returns the saved path.</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added omp cleanse, a new command that automatically detects language-ecosystem checkers, parses diagnostics (such as Cargo Clippy JSON), distributes repair workloads across concurrent subagents, and runs verification checks with a live progress bar.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Reworked the /guided-goal command from a modal-based popup flow into a natural, conversational chat interface where the agent asks follow-up questions directly in the session.</li>
<li>Reduced startup memory usage by lazy-loading HTML session export assets only on their first use.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Advisor notes appending stale-review-window warnings when newer primary turns are queued during a review.</li>
<li>Fixed layout padding alignment issues in bordered output blocks and web-search result panels.</li>
<li>Fixed excluded web search providers remaining visible in the Web Search Provider Order settings list.</li>
<li>Fixed internal Hub peer messages being exposed as ordinary tool-call updates in clients like Paseo.</li>
<li>Fixed compatibility issues when installing legacy pi extensions by updating the legacy shim to correctly bridge missing runtime symbols and exports (such as isContextOverflow, isRetryableAssistantError, and JSON parsing utilities).</li>
<li>Fixed an issue where routine daemon operations (like list, logs, stop, or describe) could inadvertently trigger a restart loop for detached daemons in a backoff window.</li>
<li>Fixed marketplace plugin MCP discovery to correctly honor the mcpServers manifest field in plugin configuration files.</li>
<li>Fixed user-initiated shell executions (! and $) being misattributed as agent actions in advisor transcripts.</li>
<li>Fixed unnecessary prompt-cache invalidations by preserving the active auto-thinking effort level when per-turn classification fails.</li>
<li>Fixed the omp process name showing up as bun in Linux process managers (like ps and top).</li>
<li>Fixed agent shell commands inheriting environment variables from the launch directory's .env file, ensuring they only receive the parent environment and explicit tool overrides.</li>
<li>Fixed the /new command retaining completed or failed async jobs from the previous session.</li>
<li>Improved error handling in omp update to display a friendly timeout message if the download times out while streaming the binary.</li>
<li>Fixed the write tool incorrectly treating semicolon-joined read selectors as filesystem paths and creating unintended directory structures.</li>
<li>Fixed omp worktree clear prematurely deleting active task-isolation sandboxes owned by running subagents.</li>
<li>Fixed /vibe mode preventing the director from completing parent tasks after verifying worker results by keeping the built-in todo tool active.</li>
<li>Fixed numeric GitHub issue and pull request autocomplete being suppressed inside skill slash-command arguments.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue on macOS (darwin) where the native addon delivered zero AudioCapture callbacks, which prevented microphone audio from being captured.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed wrapped Markdown list continuations losing their hanging indentation in narrow terminal layouts.</li>
<li>Fixed an issue where emergency exits from fullscreen overlays could leave the Kitty keyboard protocol active, corrupting Arrow Up input in the terminal after exiting.</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Added</h3>
<ul>
<li>Added <code>setProcessName</code> utility to set the OS-visible process name on Linux via <code>bun:ffi</code>, bypassing Bun's <code>process.title</code> limitations.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed child shell environment filtering to drop launch-directory <code>.env</code> values in addition to Bun-autoloaded <code>.env.local</code> values.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(tui): restore GitHub refs in slash arguments by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4975554087" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6605" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6605/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6605">#6605</a></li>
<li>fix(ai): finalize all prepared statements in SqliteAuthCredentialStore.close() by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ajdiyassin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ajdiyassin">@ajdiyassin</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4984058665" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6762" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6762/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6762">#6762</a></li>
<li>fix(cli): preserve live task-isolation sandboxes on worktree clear by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4984095832" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6763" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6763/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6763">#6763</a></li>
<li>fix(tools): refuse write targets shaped as a read-selector list by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4988923212" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6811" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6811/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6811">#6811</a></li>
<li>fix(tui): balance keyboard frames on emergency exit by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4988948228" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6812" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6812/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6812">#6812</a></li>
<li>fix(cli): stop forwarding project dotenv to shells by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4989437623" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6814" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6814/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6814">#6814</a></li>
<li>fix(cli): set kernel process name via prctl on linux by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4989574395" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6818" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6818/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6818">#6818</a></li>
<li>fix(cli): wrap streaming-phase download timeout with friendly message by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4991020352" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6823" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6823/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6823">#6823</a></li>
<li>fix(ai): preserve reasoning IDs for computer replay by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lyc-aon/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lyc-aon">@lyc-aon</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4991133652" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6824" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6824/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6824">#6824</a></li>
<li>fix(cli): purge completed async jobs on /new by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4991661451" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6829" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6829/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6829">#6829</a></li>
<li>fix(session): attribute user bang executions in advisor transcripts by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4993307725" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6838" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6838/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6838">#6838</a></li>
<li>fix(coding-agent): restore isRetryableAssistantError in legacy pi-ai shim by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4994617908" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6848" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6848/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6848">#6848</a></li>
<li>fix(natives): restore macOS CoreAudio capture bindings by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4994638125" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6849" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6849/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6849">#6849</a></li>
<li>fix(launch): treat restarting daemon as settled in broker #settle by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4994776484" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6853" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6853/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6853">#6853</a></li>
<li>fix(settings): hide excluded web search providers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4995227709" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6861" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6861/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6861">#6861</a></li>
<li>fix(coding-agent): bridge isContextOverflow in legacy pi-ai shim by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4995297533" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6862" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6862/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6862">#6862</a></li>
<li>fix(discovery): honor plugin MCP manifest pointers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4995970857" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6873" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6873/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6873">#6873</a></li>
<li>fix(acp): hide internal Hub messages by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4996078343" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6874" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6874/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6874">#6874</a></li>
<li>fix(catalog): price cache writes by ttl breakdown by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4996332975" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6878" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6878/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6878">#6878</a></li>
<li>fix(session): preserve auto-thinking level on classifier failure by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4996391510" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6880" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6880/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6880">#6880</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.1.7...v17.1.8">v17.1.7...v17.1.8</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.0]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Fixed

Provider-native compaction failures now surface their transport error instead of silently switching to generic summarization; streaming V2 still falls back to native V1 when available.

@oh-my-pi/pi-ai
Added

Added first-class parentTurnId support for nested Codex r...]]></description>
<link>https://tsecurity.de/de/3698416/tools/github-v1720/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698416/tools/github-v1720/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:19 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Fixed</h3>
<ul>
<li>Provider-native compaction failures now surface their transport error instead of silently switching to generic summarization; streaming V2 still falls back to native V1 when available.</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>Added first-class parentTurnId support for nested Codex requests, allowing stream options and metadata helpers to accept and safely propagate the initiating turn's ID.</li>
<li>Added preservation of the Codex <code>encrypted_function_args</code> plaintext-collaboration marker on replayed function calls, keeping server-marked plaintext tool arguments from being reinterpreted as encrypted on subsequent turns.</li>
<li>Added interactive Exa API-key login through <code>/login exa</code>, opening the official API-key dashboard and saving pasted keys to the credential store (<a href="https://github.com/can1357/oh-my-pi/issues/1798" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/1798/hovercard">#1798</a>).</li>
<li>Cursor's modern exec wire protocol is now handled end to end. <code>agent.proto</code> models the frames current Cursor CLI builds emit — the seven Pi tools (<code>ExecServerMessage</code> 45-51), hooks, subagents, allowlist prechecks, MCP state, smart-mode classification, canvas diagnostics, conversation search, agent-store conflicts and git diff — and every one of them gets a typed answer. The Pi frames run their local equivalents (<code>read</code>/<code>bash</code>/<code>edit</code>/<code>write</code>/<code>grep</code>/<code>glob</code>); the rest answer with the error, not-found or empty-but-valid variant that is actually true of this client. Frames this build cannot name at all now raise <code>ExecClientControlMessage.throw</code> with <code>unknown_exec_variant</code>, and recognised frames with no truthful answer (<code>git_diff_request</code>, whose <code>GetDiffResponse</code> has no error variant) raise <code>exec_variant_unsupported</code>, instead of a silent ack that leaves the server waiting.</li>
<li><code>lsp</code> is advertised in the MCP tool catalog again. It was filtered out as a Cursor-native tool, but the native <code>diagnostics</code> frame covers one of roughly ten LSP actions, so the other nine were unreachable.</li>
<li>Added <code>pinSessionOAuthAccount</code> support for backdating the sticky's last-use timestamp (<code>options.lastUsedAtMs</code>), so pins restored from persisted sessions keep the provider's warm-window semantics: resumes inside the prompt-cache TTL reuse the account, stale resumes still re-rank.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Codex turn metadata now reserves the codex-rs <code>code_mode_tool_names</code> key, preventing caller-supplied client metadata extras from colliding with the core-owned field.</li>
<li>Codex SSE requests to the official endpoint now use zstd-compressed bodies by default to match the official client, which can be disabled with PI_CODEX_ZSTD=0.</li>
<li>API-key validation now preserves provider HTTP status and retry headers, allowing authentication, rate-limit, and server failures to retain their original error classifications.</li>
<li>The Cursor Pi arg translation (<code>piReadPath</code>, <code>piJoinPath</code>, <code>piLsPath</code>, <code>piEscapeRegexLiteral</code>, <code>piLimit</code>) moved to <code>providers/cursor-pi-args</code>, re-exported from <code>providers/cursor/exec-modern</code> so existing imports are unaffected. The legacy pi shim shares these helpers and is compiled into the bundled virtual module registry, where a nested <code>providers/&lt;dir&gt;/&lt;mod&gt;</code> specifier is unresolvable under bunfs — and importing them from the exec module would drag the whole protobuf graph in for two string functions.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Novita login rejecting valid API keys belonging to Developer and Basic team members by validating against the chat completions endpoint instead of the billing balance endpoint.</li>
<li>Fixed Cursor resource_exhausted errors being incorrectly classified as QUOTA_EXHAUSTED (which caused 30-minute credential blocks), mapping them to MODEL_CAPACITY_EXHAUSTED with a shorter backoff instead.</li>
<li>Fixed a crash in Amazon Bedrock and Devin providers when Context.systemPrompt is passed as a bare string.</li>
<li>Fixed aborted usage-limit recovery incorrectly blocking credentials or waiting on local usage fetches after the session had already changed.</li>
<li>Fixed Codex WebSocket sessions echoing stale or missing turn states by capturing x-codex-turn-state refreshes from response metadata event headers.</li>
<li>Fixed Harmony-dialect models (e.g., gpt-5.x, openai-codex) failing with invalid_prompt or "Request blocked" errors by escaping reserved control tokens in untrusted user and tool-result text.</li>
<li>Fixed named forced tool_choice not being enforced on string-only OpenAI-compatible hosts (such as llama.cpp and LM Studio) by narrowing the advertised tools to the forced tool.</li>
<li>Fixed direct Anthropic Claude Opus requests failing with HTTP 400 when the endpoint rejects strict tool fields.</li>
<li>Fixed usage-based credential ranking for Anthropic accounts where a missing long-window (7-day) metric was incorrectly treated as a short-window metric.</li>
<li>Fixed legacy Codex usage blocks continuing to gate all models after per-meter backoff was introduced, splitting the old shared scope into independent chat and spark blocks while maintaining backward compatibility with older clients and database schemas.</li>
<li>Fixed Anthropic retry loops ignoring <code>maxRetryDelayMs</code> for long server <code>retry-after</code> hints, so over-budget delays surface immediately without losing response details or abort cleanup (<a href="https://github.com/can1357/oh-my-pi/issues/7003" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7003/hovercard">#7003</a>).</li>
<li>Added interactive xAI API-key login with key validation through the xAI models endpoint.</li>
<li>Fixed Google Gemini and Vertex tool declarations carrying numeric, boolean, object-valued, or mixed <code>enum</code> arrays that the Google Schema wire type cannot represent. Unsupported enums are omitted while valid string enums remain constrained.</li>
<li>Umans usage provider: fetches <code>GET /v1/usage</code> and surfaces the rolling 5h request window + concurrency limits in <code>/usage</code>, <code>omp usage</code>, and the TUI status bar.</li>
<li>Fixed ranged legacy Cursor reads reporting the returned window byte length as the full file size.</li>
<li>Updated the Cursor client build advertisement to activate the modern exec-frame protocol handled by this provider.</li>
<li>Fixed a windowed Cursor <code>read</code> reporting the window's line count as the file's. <code>total_lines</code> and <code>file_size</code> were derived from the payload, which is the whole file only for an unranged read — a 20-line page of a 100-line file answered <code>total_lines: 20</code>, which a paginating server reads as the end of the file. The count now comes from the read's own record of the file (<code>details.meta.truncation.totalLines</code>), falling back to counting the payload when the read returned the file whole.</li>
<li>Fixed a <code>pi_grep</code> that hit the native backend's internal match ceiling answering as an unqualified success. <code>GrepTool</code> folds that cap into the flat <code>details.truncated</code> alone, setting neither <code>details.truncation</code> nor <code>perFileLimitReached</code> — the two fields the Pi result was built from — so the one truncation a caller can neither detect nor page around was the one it was never told about. The flat flag is now translated into a <code>PiTruncation</code>, and only when no specific cap already reported itself.</li>
<li>Fixed a <code>pi_grep</code> frame's <code>context</code> and <code>limit</code> vanishing from the transcript. The bridge honors both by building a scoped <code>grep</code>, but neither is expressible in the model-facing schema, so the synthesized block recorded a plain pattern/path search — replaying a context-widened or capped search as an ordinary grep sitting beside output no ordinary grep produces. Both are now recorded on the block.</li>
<li>Fixed a Cursor MCP resource listing shrinking to a count in the transcript. The full URI/name/mime catalog goes out on the wire, but the paired local result recorded <code>Listed N MCP resource(s)</code> — and rebuilt history is serialized from that result, so one reload later the model knew it had seen N resources and could name none of them. The paired result now lists what the answer carried.</li>
<li>Fixed the <code>pi_read</code> range translation padding the slice it asks for. <code>piReadPath</code> composed a plain <code>:N+K</code> selector, which the local <code>read</code> tool expands by one leading and three trailing context line — so a frame naming offset 5/limit 20 received lines 4-27. Ranged Pi reads now compose <code>:raw:N+K</code>; the wire result is an opaque output string, so the line-number gutter <code>raw</code> also drops carries nothing the contract needs.</li>
<li>Fixed four Cursor exec frames answering with a result whose oneof was never set. In proto3 that is not an empty result — the server reads it as "the tool ran and produced nothing", indistinguishable from real success. <code>listMcpResourcesExecResult</code>, <code>readMcpResourceExecResult</code>, <code>recordScreenResult</code> and <code>computerUseResult</code> now send <code>ListMcpResourcesSuccess{resources: []}</code>, <code>ReadMcpResourceNotFound{uri}</code>, <code>RecordScreenFailure</code> and <code>ComputerUseError</code> respectively.</li>
<li>The MCP resource frames now answer from the host instead of a fixed verdict. <code>CursorExecHandlers</code> gained <code>listMcpResources</code>/<code>readMcpResource</code>, so a host holding live MCP connections advertises them; the empty catalog and <code>not_found</code> above remain the answer when no handler is supplied. A handler that throws surfaces as <code>ListMcpResourcesError</code>/<code>ReadMcpResourceError</code> rather than collapsing into "none exist", which the model cannot retry. A read carrying <code>download_path</code> forwards it and answers with <code>ReadMcpResourceSuccess.download_path</code> and no content, which is what that mode means.</li>
<li>Fixed Cursor <code>connect_scm</code> calls losing their repository and settling on a fabricated verdict. The target rides in the <code>ConnectScmArgs.target</code> oneof, so reading a flat <code>github</code> property always saw <code>undefined</code>; and the authoritative <code>success</code>/<code>error</code>/<code>rejected</code> result only arrives on the completion frame, so answering at the announcement persisted a fixed failure for every call — including the ones the server went on to accept. The block now opens on the start frame and settles from the completion's decoded result.</li>
<li>Fixed interleaved Cursor tool calls corrupting each other. The stream decoder tracked a single "current" block and settled it on any <code>toolCallCompleted</code>, ignoring the envelope's <code>call_id</code>: a completion for one call closed whichever block happened to be open and paired it with the wrong result, and <code>start A, start B</code> orphaned A entirely so its own completion settled B while A was never paired — which strips the whole interaction from every rebuilt transcript. Open blocks are now retained per envelope <code>call_id</code>, and end-of-stream closes all of them rather than only the last.</li>
<li>Fixed a Cursor <code>search_conversations</code> call leaving no transcript block. The frame is answered from a fixed verdict, so nothing downstream pairs a result for it, and an unpaired call takes its whole interaction out of every rebuilt transcript.</li>
<li>Fixed a Cursor <code>read_mcp_resource</code> call leaving no transcript block. The frame runs locally — and in download mode writes a workspace file — but synthesized no tool call and paired no result, so the read was invisible in the UI and absent from every rebuilt history; a resource download could mutate the workspace with nothing on record. The frame now synthesizes a <code>read_mcp_resource</code> block (not <code>read</code>: it is a remote MCP operation, and the name drives rendering and prune semantics) and pairs a result on success, not-found and error alike. Frames answered without a handler still synthesize nothing, since nothing ran.</li>
<li>Fixed a Cursor <code>list_mcp_resources</code> call leaving no transcript block. The model consumed the catalog, but the frame synthesized no tool call and paired no result — its streamed <code>ListMcpResourcesToolCall</code> announcement was equally unrecognized — so the listing was invisible in the UI and absent from every rebuilt history. Frames a handler answered now synthesize a <code>list_mcp_resources</code> block and pair a result derived from the same answer that went on the wire; frames answered from the fixed no-handler catalog still synthesize nothing, since nothing ran.</li>
<li>Fixed an unavailable <code>pi_edit</code>/<code>pi_write</code> answering with the error variant. Both results model refusal and failure as separate oneof cases, and a denial reported as <code>error</code> reads as "the tool ran and broke" — inviting a retry of an operation that was never permitted. A frame whose tool is not granted, or whose handler produced nothing, now answers with <code>PiEditExecRejected</code>/<code>PiWriteExecRejected</code>; execution failures keep the error variant.</li>
<li>Fixed a Cursor MCP approval probe actually running the tool. A modern <code>mcpArgs</code> frame carrying <code>smart_mode_approval_only</code> asks only whether a call would be permitted, not for the call itself. The decoder dropped the flag, so the frame ran a side-effecting MCP tool the user had not been asked about, then ran it again when the real call followed. The flag is now carried through and the probe is answered from the host's policy without executing: approved only for a definite allow, refused for a deny, for a mode that demands a prompt the frame cannot raise, and for a tool the session does not have. No transcript block is synthesized either, since nothing ran.</li>
<li>Fixed the Cursor stream's end-of-transport cleanup erasing the arguments of every block still open. Blocks whose args arrive whole (todo, connect-SCM, MCP) never feed the streamed partial-JSON buffer, and reparsing an absent buffer yields <code>{}</code>, so a truncated or disconnected turn rebuilt those calls with no arguments at all. Only blocks that actually streamed their args are reparsed now.</li>
<li>Fixed a Cursor stream dying mid-turn stranding the call it left open. <code>connect_scm</code> and native todo blocks are stamped resolved the moment they open, so the agent loop synthesizes no placeholder and only their completion frame pairs a result — a transport that closed first left the card animating and the call unpaired, which takes the whole interaction out of every rebuilt transcript. The terminal-error path now closes open blocks and pairs those server-owned calls with an interrupted result; the flush ran only on clean completion before, which is not the path a dying stream takes. Exec-settled MCP blocks are left alone, since the dispatch that ran them owns their result.</li>
<li>Fixed the Pi exec frames displaying a different operation than the one they run. The provider synthesized its transcript block from a second, hand-rolled translation of the frame args, so <code>pi_read</code>'s <code>offset</code>/<code>limit</code> were shown as a whole-file read, <code>pi_grep</code>'s <code>literal</code> pattern as an unescaped regex, and <code>pi_find</code>'s path/glob join differed from the executed one. Both sides now share a single translation.</li>
<li>Fixed the streamed <code>pi_*_tool_call</code> announcements that modern builds send alongside each exec frame being unrecognized. The exec channel already synthesizes those blocks when it runs the tool; the duplicate was avoided only because the decoder recognized none of the variants, which would have started double-rendering as soon as any one was added.</li>
<li>Fixed <code>pi_bash</code> results reaching Cursor clipped with no truncation notice. Two truncation records exist locally: <code>read</code>/<code>grep</code> set <code>details.truncation</code>, which carries an explicit <code>truncated</code> flag, while <code>bash</code> sets <code>details.meta.truncation</code>, whose record has no such flag — its presence is the signal. <code>piTruncation</code> read only the first shape and required the flag, so every real Bash truncation was dropped and the server was told the clipped output was complete. Both shapes now translate, and an explicit <code>truncated: false</code> still suppresses the field.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Regenerated the Cursor agent protobufs (<code>discovery/cursor-gen/agent_pb.ts</code>) against the modern <code>agent.proto</code>, adding the message and enum families current Cursor CLI builds emit: Pi tool exec frames, hook queries and responses, subagents, allowlist prechecks, MCP state, smart-mode classification, canvas diagnostics, conversation search, agent-store conflicts and git diff. Purely additive — no existing exported symbol changed shape.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where LM Studio first turns failed with a 400 Invalid tool_choice error when a named tool was forced, by using the supported tool_choice: "required" string selector.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Removed the <code>DEL</code>, <code>DEL.BLK</code>, <code>COPY</code>, and <code>COPY.BLK</code> hashline edit operations. Use <code>CUT</code> / <code>CUT.BLK</code> for deletion; removed content remains available to <code>PASTE</code>.</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added server-name autocomplete for <code>/mcp</code> commands (<code>enable</code>, <code>disable</code>, <code>test</code>, <code>remove</code>, <code>reconnect</code>, <code>reauth</code>, <code>unauth</code>) using configured and runtime-discovered MCP servers.</li>
<li>Added <code>CUT</code> and <code>PASTE</code> ops to the hashline edit tool for moving code without retyping it: <code>CUT N.=M</code> (and <code>.BLK</code> block forms) capture lines into a clipboard register, and <code>PASTE</code> operations insert them. The register flows across sections within a patch (cross-file moves) and persists across edit calls per session.</li>
<li>Added <code>--from-claude</code> and <code>--from-codex</code> session imports (including compaction state for Codex), also available from <code>/resume @claude</code> and <code>/resume @codex</code>.</li>
<li>Added interactive Exa API-key onboarding through <code>/login exa</code>, opening the official key dashboard and saving pasted keys for authenticated web search while preserving <code>EXA_API_KEY</code> and explicit-selection public MCP fallback behavior (<a href="https://github.com/can1357/oh-my-pi/issues/1798" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/1798/hovercard">#1798</a>).</li>
<li>Added <code>ExtensionContext.getAsyncJobSnapshot()</code> so extensions can read the owning session's async-job state without relying on process-global job-manager identity</li>
<li>Added opt-in <code>tui.codexResetFireworks</code> celebrations for unscheduled Codex weekly usage resets and newly banked saved resets, shown in a theme-aware top-third modal until Escape (<a href="https://github.com/can1357/oh-my-pi/pull/6858" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6858/hovercard">#6858</a> by <a href="https://github.com/joshrzemien">@joshrzemien</a>).</li>
<li>The Cursor exec bridge serves the seven modern Pi tool frames, mapping each to its local equivalent: <code>pi_read</code>/<code>pi_ls</code> → <code>read</code>, <code>pi_bash</code> → <code>bash</code>, <code>pi_edit</code> → <code>edit</code>, <code>pi_write</code> → <code>write</code>, <code>pi_grep</code> → <code>grep</code>, and <code>pi_find</code> → <code>glob</code>. The frames are a separate wire family from the legacy args, not aliases, so each mapping is a real translation — <code>pi_grep</code>'s <code>ignore_case</code> is the inverse of the local tool's case-sensitivity flag, <code>pi_find</code> searches filenames rather than contents, and <code>pi_edit</code>'s replacements are renamed to the local snake_case pairs.</li>
<li><code>providers.autoThinkingMaxEffort</code> (<code>xhigh</code> | <code>max</code>, default <code>xhigh</code>) raises the ceiling of the <code>auto</code> thinking classifier. <code>max</code> became a first-class effort tier after the classifier prompt was written, so <code>auto</code> could never reach it on models that expose the tier — only the <code>ultrathink</code> keyword could. Opting in adds <code>max</code> to the classifier's vocabulary, gated on the target model actually supporting it; the default keeps today's prompt byte-for-byte. The ceiling is enforced inside the effort clamp rather than on the classifier's answer, so a sparse ladder cannot snap an excluded request back up, and the Low floor is still resolved against the model's own ladder. The on-device 3-bucket classifier stays capped at <code>xhigh</code> regardless of the setting. The ceiling governs what <code>auto</code> resolves: a ladder with nothing underneath it yields no auto level, and a <code>thinking.requiresEffort</code> model still gets its lowest supported effort from the transport.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Improved grouped read-call layout by nesting each request's usage metrics beneath its final path.</li>
<li>Improved turn recovery to prevent duplicate output streaming during credential rotation or model fallback when visible text has already been streamed.</li>
<li>Optimized tool guidance for bash, grep, and glob to be more concise while clarifying shell boundaries and search timeouts.</li>
<li>Optimized models configuration resource probing to run in a single child process, reducing startup contention.</li>
<li>Startup release notes now default to a compact change-count summary. Use <code>startup.changelogMode</code> (<code>summary</code> | <code>expanded</code> | <code>hidden</code>) to control them; legacy <code>collapseChangelog</code> choices migrate automatically (<a href="https://github.com/can1357/oh-my-pi/issues/6771" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6771/hovercard">#6771</a>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Anthropic prompt-cache cold misses on session resume with multiple OAuth accounts: the account that served a session is now recorded in the session file (as a <code>credential_pin</code> sha-256 of the account + org/project scope, so exports carry no plaintext identity) and re-pinned on resume with the session's effective last-use time, so a fresh process no longer re-ranks accounts by usage headroom — which systematically routed away from the just-used account and cold-missed the entire account-scoped cache prefix. Sticky routing was previously stored only in the auth store's KV cache, which is in-memory when a remote auth broker is configured.</li>
<li>Fixed Anthropic prompt-cache cold misses on session resume with multiple OAuth accounts: the account that served a session is now recorded in the session file (as a PII-free <code>credential_pin</code> hash) and re-pinned on resume, so a fresh process no longer re-ranks accounts by usage headroom — which systematically routed away from the just-used account and cold-missed the entire account-scoped cache prefix. Sticky routing was previously stored only in the auth store's KV cache, which is in-memory when a remote auth broker is configured.</li>
<li>Fixed concurrent <code>createAgentSession</code> calls with the default agent id failing initialization with <code>Agent "Main" was replaced during session initialization</code> — each in-process embedder (e.g. the edit benchmark runner) can now pass a private registry via the newly exported <code>AgentRegistry</code>, keeping every top-level session's "Main" out of the process-global roster race.</li>
<li>Fixed task tool blocks duplicating their per-agent progress rows into terminal scrollback on every update: live task frames now pin the transcript live region so mid-run rows are never recorded as frozen snapshots, and a detached background task freezes its progress the moment any of its rows commit to scrollback instead of mutating committed history.</li>
<li>Fixed Codex reset fireworks comparing different quota tiers or plans, preventing false celebrations when usage reports switch between Spark and base weekly limits.</li>
<li>Fixed Cursor ranged-read results losing the full file byte size after applying the requested window.</li>
<li>Fixed empty Codex final-stop recovery discarding an earlier commentary message when both messages shared response metadata.</li>
<li>Fixed Advisor availability with providers that refuse echoed reasoning by retrying once with primary thinking stripped and surfacing persistent refusals immediately.</li>
<li>Fixed <code>/tan</code> agents being unable to read parent-session <code>local://</code> attachments by correctly resolving local protocol options against the parent session's artifacts.</li>
<li>Fixed Codex web search silently returning plain completions when the hosted web search tool was skipped.</li>
<li>Fixed TUI collaboration guest loader not starting when joining or reconnecting mid-turn.</li>
<li>Fixed multi-second TUI freezes in reftable-format repositories by moving branch resolution off the render path and adding a timeout to synchronous git spawns.</li>
<li>Fixed <code>xd://</code> device summaries containing control characters and exceeding size budgets by stripping control characters and bounding summaries by UTF-8 bytes.</li>
<li>Fixed <code>task.softRequestBudget</code> configuration having no effect on bundled scout and sonic subagents.</li>
<li>Fixed quick LSP server exits being misreported as reader failures and resolved an issue where explicit reloads were blocked by initialization backoff.</li>
<li>Forced Git subprocesses to use the stable <code>C</code> locale to ensure predictable, non-interactive command output.</li>
<li>Fixed compatibility replay issues for pre-upgrade launch brokers evaluating xterm inside the client process.</li>
<li>Fixed Advisor cost tracking in the status line across conversation boundaries, ensuring session transitions, forks, and resumes correctly restore or isolate conversation spend.</li>
<li>Fixed validation failures for legacy extensions importing from the package root, which previously blocked installations.</li>
<li>Fixed ACP clients (such as Zed), TUI status lines, and collaboration guests not updating when model changes occur dynamically within the agent loop.</li>
<li>Fixed assistant-facing resource summaries omitting parameterized MCP resource templates, ensuring failed reads list templates alongside concrete resources.</li>
<li>Fixed redundant <code>xd://</code> mount notices and prompt-cache invalidation when resuming sessions or reconnecting devices.</li>
<li>Fixed the model picker displaying placeholder model lists instead of the actual credential-aware catalog resolved at registration.</li>
<li>Fixed file corruption and snapshot mismatches when writing files through the ACP client bridge by verifying the final on-disk content after client-side post-save formatting.</li>
<li>Fixed <code>omp ttsr test</code> silently evaluating source files as prose when their extensions were missing from the allowlist, and expanded the allowlist to support .NET, Shell, SQL, Zig, Dart, Scala, Elixir, and Protobuf files.</li>
<li>Fixed automatic light/dark theme switching in direct WezTerm sessions on macOS when DEC Mode 2031 is unsupported, and improved theme-change color responsiveness.</li>
<li>Fixed configured <code>retry.maxDelayMs</code> not being forwarded into Anthropic retry handling, so over-budget server retry delays fail fast.</li>
<li>Added tokens-per-second throughput to RPC <code>get_state</code> responses for non-TUI clients.</li>
<li>Added the RPC <code>set_fast_mode</code> command and typed TypeScript/Python client methods for live fast-mode control.</li>
<li>Added <code>fastModeEnabled</code> and <code>fastModeActive</code> to RPC <code>get_state</code> responses.</li>
<li>Fixed RPC fast-mode state reporting after direct Anthropic rejects <code>speed: "fast"</code>, while allowing explicit re-enable requests to retry priority service.</li>
<li>Added opt-in subagent access to <code>checkpoint</code>, <code>rewind</code>, <code>learn</code>, and <code>manage_skill</code> when explicitly listed in an agent definition's <code>tools:</code> frontmatter. Listing one of <code>checkpoint</code>/<code>rewind</code> auto-includes the other. Settings (<code>checkpoint.enabled</code>, <code>autolearn.enabled</code>) remain master toggles.</li>
<li>Added a <code>browser.cdpUrl</code> setting that points browser automation at an already-running CDP endpoint by default, so <code>app.cdp_url</code> no longer has to be repeated on every call. Explicit <code>app</code> options still take precedence.</li>
<li>Native compaction preserves provider-native success and non-authentication failure semantics while retaining authenticated cross-provider fallback when the native provider rejects credentials.</li>
<li>Fixed the Cursor Pi exec bridge silently dropping frame arguments. <code>pi_read</code>'s <code>offset</code>/<code>limit</code> were ignored, so a ranged read returned the whole file; <code>pi_grep</code>'s <code>literal</code> was ignored, so a fixed-string search ran as a regex and matched the wrong lines; and the path/glob join produced a <code>./</code>-prefixed spec. Ranges are now composed onto <code>read</code>'s <code>:N+K</code> inline selector, literal patterns are escaped, and the join uses <code>node:path</code>. These are <code>optional int32</code> fields, so a present <code>0</code> is honored rather than folded into a default: <code>pi_read</code> with <code>limit: 0</code> answers with empty output instead of the entire file, and <code>pi_find</code> with <code>limit: 0</code> clamps to 1 the way the reference client does.</li>
<li><code>pi_grep</code>'s <code>context</code> and <code>limit</code> are honored. Neither is expressible in the model-facing <code>grep</code> schema — context width comes from <code>grep.contextBefore</code>/<code>grep.contextAfter</code> fixed at tool construction — so the bridge builds a per-call <code>grep</code> for frames that supply them. <code>GrepTool</code> accepts these as constructor options; the model-facing schema is unchanged, and a frame that supplies neither keeps the shared instance and the session's defaults.</li>
<li><code>pi_ls</code>'s <code>limit</code> is still not mapped, now deliberately: it caps directory <em>entries</em>, while the local <code>read</code> tool renders a depth-2 tree with per-directory caps and elision rows and applies a selector as a <em>rendered line</em> slice. Mapping it to <code>:1+K</code> would cap a different unit while appearing honored.</li>
<li>The legacy pi shim's regex-literal escaper and path/glob join were verbatim copies of the modern bridge's. Both paths now call the shared helpers, so the two Pi translations cannot drift.</li>
<li>Fixed every Cursor <code>pi_edit</code> frame failing instead of editing. Two independent causes: the session drops <code>edit</code> from the tool registry for Cursor so the model uses full-file <code>write</code>, but that registry is also the exec bridge's tool source, so the native frame — which the server sends regardless of the advertised catalog — found no tool; and the retained instance followed the session's configured edit mode, while <code>PiEditExecArgs</code> carries <code>old_text</code>/<code>new_text</code> pairs that only <code>replace</code> accepts (the default <code>hashline</code> takes a single <code>input</code> string). The bridge now resolves a <code>replace</code>-mode instance through its fallback resolver, still wrapped for approval.</li>
<li>Fixed a <code>pi_grep</code> frame carrying <code>context</code> or <code>limit</code> escaping the approval gate. Honoring those fields needs a per-call <code>grep</code>, and the per-call instance was built raw while every registry tool is wrapped, so such calls bypassed <code>tools.approval.grep</code> and the exec-tier check for SSH-targeted paths. Both bridge callsites now build it through one shared factory that applies the same wrapper.</li>
<li>Fixed Cursor advisors ignoring <code>pi_grep</code>'s <code>context</code> and <code>limit</code>. Only the primary session supplied the per-call <code>grep</code> factory, so advisor frames silently fell back to session defaults. Advisors now receive the same factory, gated on the advisor actually having been granted <code>grep</code>.</li>
<li>Fixed Cursor advisors failing every <code>pi_edit</code>. The advisor roster handed the bridge the <code>edit</code> instance built for the advisor's own loop, which follows the configured <code>edit.mode</code> (<code>hashline</code> by default) and rejects the frame's <code>old_text</code>/<code>new_text</code> pairs — the same mode mismatch the primary bridge already fixed, on the path it missed. The exec map now substitutes a <code>replace</code>-mode instance, gated on the advisor actually having been granted <code>edit</code>, while the advisor's own loop keeps the tool it was given.</li>
<li>Fixed <code>pi_bash</code> killing commands that explicitly asked for no deadline. <code>timeout</code> is <code>optional int32</code> and <code>bash</code> documents <code>0</code> as "disables the command deadline", but a truthiness check folded a supplied <code>0</code> into unset, applying the 300s default instead. A present <code>0</code> now passes through; negatives, which have no local meaning and would otherwise clamp to the 1s floor, still fall back to the default.</li>
<li>Fixed the Cursor exec bridge granting <code>edit</code> and <code>grep</code> to sessions that withheld them. Both bridge-only tools are constructed rather than looked up, and <code>executeTool</code> prefers a constructed override over the registry, so a restricted tool set (<code>toolNames</code> without them, or <code>restrictToolNames</code>) still got a working <code>pi_edit</code>/<code>pi_grep</code> — native frames arrive regardless of the advertised catalog. Both are now gated on the session having actually granted the tool, matching the <code>delete</code> frame's existing check (issue <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4900597280" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/5680" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/5680/hovercard" href="https://github.com/can1357/oh-my-pi/issues/5680">#5680</a>).</li>
<li>Fixed Cursor advisor bridge tools bypassing approval settings. The advisor's <code>pi_edit</code>/<code>pi_grep</code> instances are approval-wrapped, but the wrapper reads <code>tools.approvalMode</code>, per-tool <code>tools.approval.&lt;tool&gt;</code> policies and <code>autoApprove</code> only from the execute-time tool context — which the advisor bridge never supplied, so every native advisor frame resolved as <code>yolo</code> with empty policies and ran past a configured <code>ask</code> or <code>deny</code>. Advisors now receive the same context store as the primary bridge.</li>
<li>Fixed Cursor's <code>list_mcp_resources</code>/<code>read_mcp_resource</code> frames answering as though the client hosted no MCP servers. The bridge hardcoded an empty catalog and <code>not_found</code>, so resources from servers the session held live connections to were invisible to the model even while the same session read them through <code>mcp://</code>. Both frames now answer from the session's <code>MCPManager</code> — awaiting a server's background resource discovery rather than reading the not-yet-populated cache and reporting "advertises nothing" — and a lookup failure surfaces as an error rather than an empty catalog, which would read as "asked, none exist". A read carrying <code>download_path</code> writes the resource to that path and answers with the path alone, per the wire contract, instead of putting the payload back in the model's context. That path arrives from the server while the general-purpose resolver deliberately honors absolute paths and <code>..</code>, so downloads are confined to the workspace: the resolved target and its deepest existing ancestor must stay inside it, and a target that is itself a symlink is refused. The write then opens <code>O_NOFOLLOW</code> and refuses a non-regular or hard-linked file before truncating, so the final component cannot be swapped for a link or an inode shared outside after the check. A parent directory replaced by a symlink mid-write is still followed; closing that needs <code>openat</code>/dirfd walking, which this does not attempt.</li>
<li>Fixed the Cursor native <code>delete</code> frame bypassing approval settings. Unlike every other frame it removes the file directly instead of running a registry tool, so no approval wrapper sat in front of it — the bridge's <code>allowDirectFileMutation</code> grant answers whether a mutating tool was granted, which is a different question from whether the user's policy allows the call. A configured <code>tools.approval.delete: deny</code>, or an <code>always-ask</code> session that this channel cannot prompt in, now refuses the frame and keeps the file.</li>
<li>Fixed Cursor download-mode resource reads bypassing the session's mutation restrictions. A <code>read_mcp_resource</code> frame carrying <code>download_path</code> creates and overwrites workspace files without running a registry tool — the same hole the native <code>delete</code> frame had — so a session that withheld <code>write</code>/<code>edit</code>, or one whose <code>write</code> tier is <code>deny</code>/<code>always-ask</code>, still had files written. Both frames now share one grant (<code>allowDirectFileMutation</code>, renamed from <code>allowNativeDelete</code> now that it gates more than deletion) and one <code>write</code>-tier policy check, and the download refuses before the read so a blocked call does not fetch the resource either. The primary session derives that grant before it rewrites its registry: Cursor moves <code>edit</code> out of the tool map and <code>write</code> may be auto-registered later, so reading the map at bridge-construction time would have misjudged both.</li>
<li>Fixed <code>pi_ls</code> never reporting that a listing was clipped. The bridge read the entry cap from a flat <code>details.resultLimitReached</code>, which <code>glob</code> sets but <code>read</code> — the tool serving <code>pi_ls</code> — does not: it records the cap through <code>OutputMeta</code> at <code>details.meta.limits.resultLimit.reached</code>. Every capped listing therefore reached Cursor with <code>entry_limit_reached</code> unset, reading as complete. Both shapes are now checked, the same way the truncation translation already handles its two producers.</li>
<li>Fixed a mixed-content MCP resource read reaching Cursor mislabelled. The mime type was taken from the first content item while the payload came from whichever item supplied it, so an image blob followed by a text note sent the text as <code>image/png</code>. Each branch now reports the type of the part it actually sends.</li>
<li>Fixed <code>pi_read</code>'s <code>offset</code>/<code>limit</code> returning more lines than the frame asked for. The range is composed onto the local <code>read</code> tool's inline selector, and a plain <code>:N+K</code> deliberately pads with one leading and three trailing context lines — helpful when a human reads a snippet, wrong for a caller that named an exact range: offset 5/limit 20 handed Cursor lines 4-27. Ranged Pi reads now compose <code>:raw:N+K</code>, which slices exactly the requested lines.</li>
<li>Fixed <code>pi_grep</code> returning fewer matches than it asked for when they spread across many files. The local <code>grep</code> windows results to the first 20 files and tells the caller to paginate with <code>skip</code>, but <code>PiGrepExecArgs</code> has no <code>skip</code> field — so a frame asking for 100 matches over 25 one-match files got 20, <code>match_limit_reached</code> unset, and advice it could not act on: output silently short and labelled complete. A search carrying a total match cap now reads enough files to satisfy it (cap+1, so a result landing exactly on the cap is distinguishable from a clipped one) and reports the cap when it actually bites.</li>
<li>Fixed every native <code>pi_edit</code> failing after a session switched onto Cursor. The replace-mode <code>edit</code> instance the frame needs was built only for sessions <em>created</em> on Cursor, and the tool roster is not rebuilt on a model switch — so a session that started elsewhere kept its configured-mode <code>edit</code> in the registry, which the bridge resolves before its fallback, and the frame's <code>old_text</code>/<code>new_text</code> pairs failed validation against a <code>hashline</code> schema. The instance is now built from the <code>edit</code> grant regardless of the session's initial provider (lazily, so a session that never reaches Cursor never constructs one) and <code>pi_edit</code> asks for it explicitly through a dedicated accessor. A session that was never granted <code>edit</code> is still refused.</li>
<li>Fixed the Cursor bridge's tool resolver being able to execute an unadvertised <code>edit</code>. That resolver doubles as the agent loop's fallback for any call outside the advertised set, so serving <code>edit</code> from it meant a hallucinated call — or one naming a tool the session deselected after startup — could run a replace-mode edit the model was never offered. It is device-only again; <code>pi_edit</code> uses its own accessor.</li>
<li>Fixed the legacy Cursor <code>read</code> frame ignoring the <code>offset</code>/<code>limit</code> modern builds paginate with. Only the Pi variant composed a range, so every page of a legacy read returned the whole file (or its own truncation) and a model walking a large file never advanced past the first window. Both frames now translate a range through the same helper, and the answer sets <code>range_applied</code> to describe whether a window was actually composed.</li>
<li>Fixed the legacy Cursor <code>grep</code> frame ignoring its pagination <code>offset</code>. The local <code>grep</code> paginates by file through <code>skip</code> and advertises exactly that in its own "use skip=N" advice, so an unforwarded offset re-ran the identical search and answered page one for every page. The answer now reports the offset it applied in <code>offset_applied</code>.</li>
<li>Fixed a paginated Cursor <code>read</code> or <code>grep</code> frame being recorded as an unpaginated one. The executed call and the transcript block are built separately, so forwarding the frame's range and page fixed only the execution: the block still showed a bare path and an unskipped search, which is what a reloaded session replays and what the next turn reasons from — a slice of a file presented as the whole thing, and results from a later window presented as page one. Both are now synthesized from the same translation that runs them, including a <code>limit: 0</code> read, which is recorded as the zero lines it returns rather than a whole-file read.</li>
<li>Fixed Cursor advisors answering every MCP resource frame as though the client hosted no servers. Only the primary bridge received the <code>MCPManager</code>-backed resource adapter, so an advisor's <code>list_mcp_resources</code> reported an empty catalog and its <code>read_mcp_resource</code> a <code>not_found</code> even though the advisor shares the session's live connections. Advisors now receive the same adapter; it is not gated on a tool grant, since reading what a server advertises is a different permission from calling one of its tools.</li>
<li>Fixed advisor tools bypassing the approval gate. They are built straight from the builtin table, outside the loop that wraps every registry tool, and both the advisor's own agent loop and its Cursor exec bridge (<code>pi_write</code>, <code>pi_bash</code>) run those instances directly — so an advisor granted <code>write</code> or <code>bash</code> executed them regardless of a configured <code>ask</code> or <code>deny</code>. They now carry the same <code>ExtensionToolWrapper</code> as every other tool.</li>
<li>Added <code>mcp_notification</code> extension event and multi-listener <code>MCPManager.addNotificationListener</code> API. The runtime already received MCP server-initiated JSON-RPC notifications at the transport layer but had no path to forward them to extensions; every notification (including server-custom methods) is now delivered as <code>{ server, method, params }</code> after the manager's own list/update handling. For known list-change methods (<code>notifications/tools/list_changed</code>, <code>notifications/resources/list_changed</code>, <code>notifications/prompts/list_changed</code>) the internal refresh promise is awaited before fanout, so a listener acting on <code>tools/list_changed</code> sees fresh <code>getTools()</code>. Notifications received before any listener attaches are buffered (bounded FIFO, cap 100, drop-oldest — matches <code>IrcBus</code>'s <code>MAILBOX_CAP</code>) and drained into the first subscriber, so startup-time frames aren't lost even if the extension binds after MCP discovery. Extensions can use this to bridge push-capable MCP servers (e.g. peer messaging) into session behavior by injecting a mid-turn steer via <code>pi.sendMessage</code> / <code>pi.sendUserMessage</code>.</li>
</ul>
<h3>Removed</h3>
<ul>
<li>Removed the dangling <code>MCPManager.setOnNotification</code> single-slot setter, which had no callers in the runtime. Replaced by <code>MCPManager.addNotificationListener</code> — multi-listener, per-listener error isolation, returns an unsubscribe function.</li>
</ul>
<h2>@oh-my-pi/collab-web</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where the agent would stop silently without a message by ensuring terminal auto-retry failures are properly surfaced as error notices.</li>
</ul>
<h2>@oh-my-pi/hashline</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Removed <code>DEL</code>, <code>DEL.BLK</code>, <code>COPY</code>, and <code>COPY.BLK</code> from the patch language. Use <code>CUT</code> / <code>CUT.BLK</code> for deletion; a cut does not require a following <code>PASTE</code> and leaves the removed content available to later pastes.</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added clipboard ops: <code>CUT N.=M</code> captures lines into a register (and deletes them), <code>CUT.BLK N</code> captures tree-sitter blocks, and <code>PASTE.PRE|POST N</code> / <code>PASTE.HEAD|TAIL</code> / <code>PASTE.BLK.POST N</code> insert the captured lines without retyping. The register flows top-to-bottom across sections, so content moves between files in one patch; <code>PASTE</code> does not consume it and the last capture wins.</li>
<li>Added <code>PatcherOptions.clipboard</code> for a host-owned register that persists across <code>Patcher.apply</code> batches. Batches work on a fork (<code>forkClipboard</code>) published per landed section (<code>commitClipboard</code>), so failed batches never poison the register and a mid-batch write failure still preserves content already cut from disk.</li>
<li>Added clipboard safety guards: a <code>PASTE</code> with an empty register, a capture overwriting un-pasted <code>CUT</code> content, and clipboard ops in same-path sections interleaved across another file's section are all rejected with targeted diagnostics. <code>CUT</code> ranges participate in overlap validation, the seen-lines guard, and drift recovery (every captured line must remap).</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Simplified <code>grammar.lark</code> around shared target and position shapes, collapsing the concrete and block <code>CUT</code> forms plus the <code>INS</code> / <code>PASTE</code> position variants into their common grammar rules.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Prevented CPU and memory exhaustion in streaming previews by rejecting line anchors above Number.MAX_SAFE_INTEGER and ranges spanning more than 100,000 lines.</li>
<li>Fixed an issue where recorded snapshot tags desynced from disk when the filesystem transformed content on write (e.g., auto-formatting on save), which previously caused subsequent edits to incorrectly reformat unrelated parts of the file. <code>Patcher.commit</code> now correctly keys the returned file hash and snapshot on the actual content written to disk and issues a warning when a drift is detected.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Changed</h3>
<ul>
<li>Split the native voice engine (miniaudio capture/playback, WebRTC peer, Opus media) out of the <code>pi-natives</code> addon crate into a napi-free <code>pi-voice</code> rlib. The addon keeps thin <code>#[napi]</code> adapters, so the JS API is unchanged; the webrtc/opus/miniaudio dependency graph now compiles once into the library and no longer rebuilds with the addon leaf (which recompiles every release via its version-sentinel edit).</li>
<li>Release binaries now build in parallel with the test fan-out; npm leaf publishing moved to a dedicated post-validation job (<code>release_native_leaves</code>), and darwin release bazel caches are pre-warmed on native-affecting main pushes — cutting release wall time from the previous serialized tests → cold darwin build pipeline.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Added</h3>
<ul>
<li>Added response-level OSC 11 appearance subscriptions to help terminal consumers distinguish confirmed unchanged background classifications from missing replies.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed native Windows terminal panes freezing their host during forced closure by skipping the stdout-drain wait after ConPTY disconnects.</li>
<li>Fixed high CPU usage in the Loader spinner during idle waits by optimizing text wrapping and caching during frame updates.</li>
<li>Fixed hash-prefixed UUIDs in prose being misclassified as 8-digit CSS colors and receiving spurious swatches.</li>
<li>Fixed unbounded memory growth and potential host freezes when a PTY consumer stalls by capping the pending stdout backlog and treating undrained consumers as a disconnect.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>feat(coding-agent): autocomplete MCP server names in /mcp subcommands by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mathews-Tom/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mathews-Tom">@Mathews-Tom</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4964038235" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6454" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6454/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6454">#6454</a></li>
<li>fix(tui): bound stdout backlog when the pty consumer stalls by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4994881362" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6856" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6856/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6856">#6856</a></li>
<li>fix(coding-agent): scope Advisor cost to the active session by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paolomazzitti/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paolomazzitti">@paolomazzitti</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4996798160" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6883" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6883/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6883">#6883</a></li>
<li>docs: clarify ttsr edit/write matcherDigest is introduced lines by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4997533930" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6886" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6886/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6886">#6886</a></li>
<li>fix(ttsr): flag text-source inference for unlisted file extensions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4997597220" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6888" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6888/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6888">#6888</a></li>
<li>fix: forward parseArgs and CONFIG_DIR_NAME from the legacy pi shim by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Gy-Hu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Gy-Hu">@Gy-Hu</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4999557428" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6907" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6907/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6907">#6907</a></li>
<li>feat(mcp): expose server-initiated notifications to extensions via mcp_notification event by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/asteriskSF/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/asteriskSF">@asteriskSF</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4970878648" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6535" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6535/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6535">#6535</a></li>
<li>feat(ai): add xAI API key login by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paralin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paralin">@paralin</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4977761531" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6647" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6647/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6647">#6647</a></li>
<li>feat(coding-agent): add opt-in max ceiling for auto thinking by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/everton-dgn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/everton-dgn">@everton-dgn</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4979453514" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6680" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6680/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6680">#6680</a></li>
<li>feat: add opt-in Codex reset fireworks by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshrzemien/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshrzemien">@joshrzemien</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4994940233" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6858" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6858/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6858">#6858</a></li>
<li>feat(coding-agent): allow checkpoint/rewind/learn/manage_skill in subagents when explicitly requested by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5003316625" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6938" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6938/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6938">#6938</a></li>
<li>feat(extensions): expose session async job snapshots by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/usr-bin-roygbiv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/usr-bin-roygbiv">@usr-bin-roygbiv</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5003718821" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6939" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6939/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6939">#6939</a></li>
<li>feat(tools): add a browser.cdpUrl setting for the default automation target by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/terrxo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/terrxo">@terrxo</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5008085193" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7007" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7007/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7007">#7007</a></li>
<li>fix(ai): bound Anthropic retry-after waits by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/metaphorics/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/metaphorics">@metaphorics</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5010843656" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7028" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7028/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7028">#7028</a></li>
<li>feat(rpc): expose live fast-mode control and token throughput by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fredluz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fredluz">@fredluz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5012492284" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7036" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7036/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7036">#7036</a></li>
<li>Umans usage provider by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hpost/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hpost">@hpost</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4806862967" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/4484" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/4484/hovercard" href="https://github.com/can1357/oh-my-pi/pull/4484">#4484</a></li>
<li>feat(ai): add Exa API key login by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/will-bogusz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/will-bogusz">@will-bogusz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4978125728" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6652" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6652/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6652">#6652</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Gy-Hu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Gy-Hu">@Gy-Hu</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4999557428" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6907" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6907/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6907">#6907</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/asteriskSF/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/asteriskSF">@asteriskSF</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4970878648" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6535" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6535/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6535">#6535</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshrzemien/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshrzemien">@joshrzemien</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4994940233" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6858" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6858/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6858">#6858</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/szavadsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/szavadsky">@szavadsky</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5003316625" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6938" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6938/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6938">#6938</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/terrxo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/terrxo">@terrxo</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5008085193" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7007" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7007/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7007">#7007</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fredluz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fredluz">@fredluz</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5012492284" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7036" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7036/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7036">#7036</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hpost/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hpost">@hpost</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4806862967" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/4484" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/4484/hovercard" href="https://github.com/can1357/oh-my-pi/pull/4484">#4484</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.1.8...v17.2.0">v17.1.8...v17.2.0</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.1]]></title>
<description><![CDATA[@oh-my-pi/pi-ai
Added

Added exact OAuth credential-row resolution by durable credential id. The targeted path refreshes only that row and never ranks, rotates, or falls back to sibling accounts.

Changed

Anthropic OAuth requests now reproduce Cowork's current claude-desktop request profile, inc...]]></description>
<link>https://tsecurity.de/de/3698415/tools/github-v1721/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698415/tools/github-v1721/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:19 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>Added exact OAuth credential-row resolution by durable credential id. The targeted path refreshes only that row and never ranks, rotates, or falls back to sibling accounts.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Anthropic OAuth requests now reproduce Cowork's current <code>claude-desktop</code> request profile, including client/runtime metadata, beta selection, system and billing attestation, the 64K output cap, and stable HTTP/1.1 header ordering.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Ollama model-manager caches being reused after the configured base URL changed by scoping cache namespaces to the normalized native discovery endpoint, including reverse-proxy path prefixes (<a href="https://github.com/can1357/oh-my-pi/issues/7087" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7087/hovercard">#7087</a>).</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added <code>--from-claude</code> and <code>--from-codex</code> session imports, also available from <code>/resume @claude</code> and <code>/resume @codex</code>.</li>
<li>Added an opt-in OMP-native software-security workflow (<code>security.enabled</code>, default off) with immutable scan plans, exact-account Codex subscription affinity, native task-worker review, canonical findings/coverage/SARIF publication, project-scoped history, explicit dispositions, producer-differential comparison, and the read-only <code>security://</code> resource namespace. Generic SARIF and official Codex Security bundles normalize into the same OMP-owned store.</li>
<li>Added explicit Codex Security cloud operations to the opt-in security workflow: list and start account-pinned cloud scans, inspect their progress, and import current findings into OMP's canonical store and <code>security://</code> namespace without changing the native scan engine or spoofing official runtime attribution.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Reserved <code>security://</code> from RPC host URI shadowing so vendor adapters cannot replace OMP's canonical security-analysis namespace.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed remote or LAN local-engine endpoints being ignored during model discovery: the llama.cpp and Ollama probes used timeouts tuned for loopback, so a host reached over the network could exceed them and return no models, while changing <code>OLLAMA_BASE_URL</code>/<code>OLLAMA_HOST</code> could keep reusing a fresh cache from the previous endpoint. Non-loopback hosts now get a generous discovery timeout, and Ollama cache rows are scoped to the normalized endpoint (<a href="https://github.com/can1357/oh-my-pi/issues/7087" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7087/hovercard">#7087</a>).</li>
<li>Fixed <code>omp install</code> failing extension validation for pi extensions that import <code>createEditTool</code> or <code>createWriteTool</code> (e.g. gentle-pi) — the legacy <code>@oh-my-pi/pi-coding-agent</code> shim exported the read/bash/grep/find/ls tool factories but omitted the edit and write ones, so a named import threw Bun's static "Export named X not found" error. Added <code>createEditTool</code>/<code>createEditToolDefinition</code> and <code>createWriteTool</code>/<code>createWriteToolDefinition</code> to match the upstream pi surface (<a href="https://github.com/can1357/oh-my-pi/issues/7094" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7094/hovercard">#7094</a>).</li>
<li>Fixed Python eval's loopback tool bridge being routed through macOS system HTTP proxies, which caused <code>parallel()</code> tool reads to fail with <code>ConnectionRefusedError</code> after a local proxy stopped.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed the <code>computer</code> tool advertising Wayland support that never worked: on the default rootless XWayland (GNOME/KDE/sway) the X11 root window has no readable pixmap, so root <code>GetImage</code> failed on every screenshot with a raw <code>BadMatch</code> protocol dump. <code>Monitor::all</code> now probes root drawability at initialization and fails fast with an actionable <code>DESKTOP_BACKEND_UNAVAILABLE</code> message naming the rootless-XWayland constraint, and <code>docs/computer-use.md</code> now lists rootless XWayland as unsupported (<a href="https://github.com/can1357/oh-my-pi/issues/7085" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7085/hovercard">#7085</a>).</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Added</h3>
<ul>
<li>Added a <code>postmortem.quit</code> configuration option to safely handle shutdown paths when the terminal output has already disconnected.</li>
<li>Added project-keyed OMP security-state directory helpers under the user state root.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>feat(security): add OMP-native security scan subsystem by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kmccleary3301/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kmccleary3301">@kmccleary3301</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5015204528" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7048" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7048/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7048">#7048</a></li>
<li>fix(natives): fail fast on uncapturable rootless XWayland root by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5019786140" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7086" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7086/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7086">#7086</a></li>
<li>fix(coding-agent): honor remote llama.cpp/ollama discovery base urls by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5020155418" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7090" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7090/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7090">#7090</a></li>
<li>fix(coding-agent): add createEditTool/createWriteTool to legacy pi shim by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5020865601" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7095" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7095/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7095">#7095</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kmccleary3301/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kmccleary3301">@kmccleary3301</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5015204528" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7048" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7048/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7048">#7048</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.0...v17.2.1">v17.2.0...v17.2.1</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.2]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Fixed

Fixed an issue where response-only usage records were incorrectly treated as authoritative context anchors, while ensuring prompt and total-only provider telemetry remains preserved.
Fixed context compaction summaries growing excessively with large context windows b...]]></description>
<link>https://tsecurity.de/de/3698414/tools/github-v1722/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698414/tools/github-v1722/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:19 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where response-only usage records were incorrectly treated as authoritative context anchors, while ensuring prompt and total-only provider telemetry remains preserved.</li>
<li>Fixed context compaction summaries growing excessively with large context windows by capping the summary output budget to 16,384 tokens, ensuring conversations are properly compressed rather than duplicated.</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>Added support for the <code>gmi-cloud</code> provider registry, including API-key paste login validation and integration with <code>@oh-my-pi/pi-catalog</code>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Updated <code>AuthStorage.redeemResetCredit</code> to prioritize spending the soonest-expiring available saved reset credit, and improved error handling to distinguish between transport failures (<code>credit_list_failed</code>) and a genuine lack of credits.</li>
<li>Exported <code>SENSITIVE_TOKEN_RE</code> from <code>providers/transform-messages</code> to allow hosts to route credential shapes through reversible obfuscation instead of irreversible redaction.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where Cursor conversation checkpoints were incorrectly recorded as billable output tokens, ensuring accurate usage totals.</li>
<li>Fixed an issue in <code>AuthStorage.refreshStoredOAuthCredential</code> where expired OAuth credentials were returned without being refreshed when a credential mismatch occurred, which previously resulted in misleading "No API key found" errors.</li>
<li>Fixed Cursor history replay issues by preserving structured message order for assistant tool calls/results, retaining Kimi K3 thinking blocks, and preventing unsafe mid-session switches to K3.</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added support for the GMI Cloud provider (<code>gmi-cloud</code>), an OpenAI-compatible inference gateway with dynamic model discovery and API-key authentication via the <code>GMI_API_KEY</code> environment variable.</li>
<li>Added optional authoritative context occupancy to usage records for providers with separate checkpoint telemetry and billable token buckets.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed classification of dynamically discovered Cursor Kimi K3 effort variants as non-reasoning models when <code>thinkingDetails</code> is omitted.</li>
<li>Fixed Google AI Studio OpenAI-compatible requests failing with HTTP 400 by omitting the unsupported <code>store</code> field.</li>
<li>Fixed Synthetic models losing capabilities (such as reasoning/thinking selectors, vision input, output limits, and pricing) by correcting how the discovery mapper parses Synthetic's advertised features, effort vocabularies, and pricing structures.</li>
<li>Fixed Cursor model discovery to correctly expose the 1M-token context window for supported models (including Claude, GPT, Kimi K3, and GLM 5.2+ families) instead of defaulting to 200k.</li>
<li>Fixed GitHub Copilot routing for <code>grok-4.5</code> to use the correct Responses endpoint instead of the unsupported Chat Completions endpoint.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added an app.live.toggle keybinding (default Ctrl+L) to start or stop live voice mode.</li>
<li>Added ctx.invokeTool(params, options?) to extension contexts, allowing wrappers to run native tools while inheriting context, abort signals, and progress updates.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Moved the display-reset default keybinding (app.display.reset) from Ctrl+L to Alt+L to accommodate the new live-mode toggle.</li>
<li>Updated the hashline edit tool, streaming preview, and plan-mode guidance to support the unified PUT/CUT grammar, .= ranges, and named registers.</li>
<li>Improved startup performance by moving subagent model-registry refresh and session-file opening off the launch critical path.</li>
<li>Optimized session file writing performance by batching same-turn file-session appends.</li>
<li>Rewrote the Codex saved-reset auto-redeem algorithm to be pool-wide, window-exact, and expiry-aware, ensuring banked resets are automatically and reliably redeemed across multi-account setups before they expire.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed a crash in Kitty terminals when rendering non-PNG tool-result images if PNG conversion fails.</li>
<li>Fixed subagent evaluation resets (reset: true) wiping the shared kernel inherited from the parent session; resets from non-exclusive owners now fork into a private per-owner kernel.</li>
<li>Fixed the copy selector and ask dialog rendering raw key IDs instead of human-readable keybinding labels.</li>
<li>Fixed CLI positional initial messages bypassing automatic session-title generation.</li>
<li>Fixed the environment-variable reference omitting Kitty Unicode placeholder controls and tmux placement caveats.</li>
<li>Fixed extension validation failures during omp plugin install for extensions importing compact from @earendil-works/pi-coding-agent by adding the missing re-export.</li>
<li>Fixed Bash interceptor rules to inspect unquoted/unescaped compound command fragments (e.g., &amp;&amp;, ||, ;, |, &amp;, and newlines) instead of only matching the complete command input.</li>
<li>Fixed ExtensionContext.cwd staying pinned to the initial session directory; it now dynamically tracks the active session's current working directory.</li>
<li>Fixed the web-search provider picker description for xAI/Grok to clarify that it supports SuperGrok/X Premium+ OAuth sign-ins.</li>
<li>Fixed /reload-plugins failing to reconnect MCP servers or refresh MCP tool and prompt-command registries.</li>
<li>Enforced the centralized artifact spill threshold on oversized read results, persisting them as recoverable session artifacts.</li>
<li>Fixed DuckDuckGo web search under-returning results above the first-page limit by automatically submitting continuation forms.</li>
<li>Fixed DuckDuckGo web search ignoring after: and before: date bounds by correctly parsing and filtering result timestamps.</li>
<li>Fixed env-driven OTLP trace export ignoring OTEL_RESOURCE_ATTRIBUTES.</li>
<li>Fixed a fresh session with deferred MCP discovery injecting the newly mounted xd:// tool catalog twice into the first model request.</li>
<li>Fixed the bash tool failing with EACCES permission errors on multi-user machines by scoping the snapshot directory per user ID.</li>
<li>Fixed LSP write batching replaying stale whole-file snapshots over newer external changes made before the batch flushed.</li>
<li>Fixed ctx.ui.editor() in ACP mode always resolving to undefined by routing it through the elicitation bridge.</li>
<li>Fixed omp commit failing to resolve extension-provided models in both agentic and legacy pipelines.</li>
<li>Fixed RPC hosts receiving no subagent lifecycle or progress frames when an IRC message revives an idle or parked keep-alive subagent.</li>
<li>Fixed copied fenced-code body rows in assistant messages retaining component and container margins.</li>
<li>Fixed mid-turn auto-compaction repeating dead-end rescue work and warnings at every tool boundary within a single oversized turn.</li>
<li>Fixed automatic terminal appearance changes clearing native scrollback and snapping readers away from their current scroll position.</li>
<li>Fixed exact-match edits failing on files containing credential-shaped tokens when secrets.enabled is active by using reversible placeholders instead of irreversible redactions.</li>
<li>Fixed context usage collapsing to the latest response size for Cursor models that omit prompt-token usage.</li>
<li>Fixed the browser tool crashing with EBUSY errors on Windows when a headless Chromium profile is locked during cleanup.</li>
<li>Fixed the Python RPC client dropping context, compaction, OAuth URL, and terminal-settlement fields.</li>
<li>Fixed the browser tool ignoring the url parameter when opening a new tab on an attached browser.</li>
<li>Fixed browser automation disrupting attached browsers by adopting the active foreground tab and avoiding raising new tabs during screenshots.</li>
</ul>
<h2>@oh-my-pi/collab-web</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed an issue where the guest UI could incorrectly appear idle (such as the loading spinner disappearing) while the host agent was still running after a reconnection, and ensured tool cards are properly cleared if a connection drop occurs.</li>
</ul>
<h2>@oh-my-pi/hashline</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Replaced legacy SWAP, INS, and PASTE syntax with unified PUT and CUT hunks</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added named register support (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/reg/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reg">@reg</a>) and span paste capabilities to clipboard operations</li>
<li>Added conservative recovery for uniformly omitted replacement indents near brace openers, preserving intentional indentation-only edits</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Made .= the canonical inclusive range separator while retaining legacy separator variants as lenient input</li>
<li>Unified replacement, insertion, register paste, block, head/tail, move, and removal headers under a composable PUT, CUT, MV, and REM grammar</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Improved resilience against common model output formatting errors, including numbered read rows, summarized ranges, diff-style old/new rows, empty PUT deletes, harmless CUT colons, and single-line span shorthand</li>
</ul>
<h2>@oh-my-pi/pi-mnemopi</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed a resource leak where SQLite prepared statements were not properly released, keeping the database connection alive after calling close(). This resolves file locking issues on Windows (which prevented deleting, moving, or rotating database files) and silent file handle leaks on POSIX systems.</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Changed</h3>
<ul>
<li>Updated native HTML-to-Markdown rendering to html-to-markdown-rs 3.9.2 defaults, which may result in formatting differences (such as fenced code blocks and cycling nested-list bullets) compared to version 2.30.0.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed a heap corruption crash when opening PulseAudio on Linux ARM64 by shipping target-specific miniaudio Rust layouts for GNU and musl native addons.</li>
<li>Fixed local Bazel addon builds on NixOS by exposing system CMake tools to sandboxed build scripts and correctly bundling Opus.</li>
<li>Fixed workspace native addon loading to correctly prefer the workspace build over an installed leaf package.</li>
<li>Fixed process crashes caused by pathological HTML inputs; conversions that exceed the native-stack DOM depth limit now reject instead of returning silently truncated Markdown.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Added</h3>
<ul>
<li>Added request tokens to explicit OSC 11 appearance refreshes to allow consumers to correlate responses across queued and coalesced terminal probes.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed the event-loop watchdog incorrectly reporting system sleep or suspension as a synchronous ui.loop-blocked stall.</li>
<li>Fixed terminal copies of fenced-code blocks retaining margins from components, lists, or blockquotes in assistant messages (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5015940609" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7055" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7055/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7055">#7055</a> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/GratefulDave/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/GratefulDave">@GratefulDave</a>).</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>Add GMI Cloud as a first-class provider by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/definitelynotguru/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/definitelynotguru">@definitelynotguru</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4913358366" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/5884" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/5884/hovercard" href="https://github.com/can1357/oh-my-pi/pull/5884">#5884</a></li>
<li>fix(natives): correct miniaudio layouts on Linux ARM64 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/olegpulatov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/olegpulatov">@olegpulatov</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5025170154" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7138" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7138/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7138">#7138</a></li>
<li>fix(ai): refresh expired oauth credential on observed mismatch by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5030313237" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7180" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7180/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7180">#7180</a></li>
<li>fix(coding-agent): reload MCP servers on /reload-plugins by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5031526968" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7192" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7192/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7192">#7192</a></li>
<li>feat(extensions): add ctx.invokeTool for native built-in delegation by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/psyrendust/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/psyrendust">@psyrendust</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4993489533" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6840" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6840/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6840">#6840</a></li>
<li>fix(collab-web): make host state authoritative for guest liveness by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/metaphorics/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/metaphorics">@metaphorics</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5007789528" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6990" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6990/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6990">#6990</a></li>
<li>fix(tools): stop browser automation from stealing focus in an attached browser by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/terrxo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/terrxo">@terrxo</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5008084235" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7006" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7006/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7006">#7006</a></li>
<li>fix(compaction): cap the generated summary output budget by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/terrxo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/terrxo">@terrxo</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5008086538" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7008" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7008/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7008">#7008</a></li>
<li>fix(tui): preserve literal code block rows by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/GratefulDave/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/GratefulDave">@GratefulDave</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5015940609" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7055" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7055/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7055">#7055</a></li>
<li>fix(browser): own headless Chromium profile dir to survive Windows EBUSY cleanup by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5016431226" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7060" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7060/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7060">#7060</a></li>
<li>test(coding-agent): avoid MCP startup race by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/GratefulDave/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/GratefulDave">@GratefulDave</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5016846296" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7063" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7063/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7063">#7063</a></li>
<li>fix(secrets): exact-match edits failing on files with credential-shaped tokens by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iacore/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iacore">@iacore</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5017238714" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7067" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7067/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7067">#7067</a></li>
<li>fix(coding-agent): prevent stale LSP batch writes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ant39140/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ant39140">@Ant39140</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5017731549" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7069" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7069/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7069">#7069</a></li>
<li>feat(cursor): expose 1M context windows in model discovery by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mmmeff/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mmmeff">@mmmeff</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5018017340" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7072" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7072/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7072">#7072</a></li>
<li>acp: wire ctx.ui.editor through elicitFromAcpClient by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/marton78/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/marton78">@marton78</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5018694586" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7079" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7079/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7079">#7079</a></li>
<li>fix(mnemopi): release one-shot prepared statements by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Cyrus580529/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Cyrus580529">@Cyrus580529</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5019607139" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7084" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7084/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7084">#7084</a></li>
<li>fix(rpc): harden Python protocol compatibility by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5020091332" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7088" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7088/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7088">#7088</a></li>
<li>fix(catalog): route Copilot Grok 4.5 to Responses by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5021330309" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7097" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7097/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7097">#7097</a></li>
<li>fix(commit): load extension-provided models by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5021575012" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7100" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7100/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7100">#7100</a></li>
<li>fix(test): gave CLI-spawning tests explicit timeouts by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/psyrendust/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/psyrendust">@psyrendust</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5022930850" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7103" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7103/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7103">#7103</a></li>
<li>fix(rpc): restore frames for IRC-revived subagents by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5023409371" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7108" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7108/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7108">#7108</a></li>
<li>fix(web-search): honor lang: directive in DuckDuckGo kl param by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5024250906" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7111" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7111/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7111">#7111</a></li>
<li>fix(tui): ignore system sleep in loop watchdog by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5024266158" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7113" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7113/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7113">#7113</a></li>
<li>fix(coding-agent): spill oversized read results to artifacts by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5024361700" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7117" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7117/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7117">#7117</a></li>
<li>fix(search): paginate DuckDuckGo HTML results by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5024398163" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7121" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7121/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7121">#7121</a></li>
<li>fix(web-search): extract duckduckgo result timestamps for date bounds by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5024398714" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7122" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7122/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7122">#7122</a></li>
<li>perf(task): defer subagent launch setup by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5024435847" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7124" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7124/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7124">#7124</a></li>
<li>perf(tui): batch persistence work off the render path by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5024552622" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7129" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7129/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7129">#7129</a></li>
<li>fix(telemetry): merge OTEL_RESOURCE_ATTRIBUTES into export resource by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5024912719" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7135" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7135/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7135">#7135</a></li>
<li>fix(agent): suppress redundant xd:// mount notice after catalog rebuild by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5025803124" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7140" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7140/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7140">#7140</a></li>
<li>fix(bash): scope shell snapshots per uid so shared-/tmp accounts don't EACCES by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dangreco/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dangreco">@dangreco</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5025951420" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7141" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7141/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7141">#7141</a></li>
<li>fix(natives): prevent deep HTML crashes and silent truncation by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/br411/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/br411">@br411</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5026672904" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7143" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7143/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7143">#7143</a></li>
<li>docs: Add link to LSP config docs in README by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jorisw/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jorisw">@jorisw</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5027801494" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7152" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7152/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7152">#7152</a></li>
<li>fix(session): stop repeated mid-turn compaction dead ends by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5027867655" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7153" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7153/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7153">#7153</a></li>
<li>test(ai): stop bedrock payload suites from needing ambient AWS auth by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5027979605" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7155" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7155/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7155">#7155</a></li>
<li>fix(catalog): read Synthetic's advertised model capabilities by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Gareth-Rouse/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Gareth-Rouse">@Gareth-Rouse</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5028147772" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7159" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7159/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7159">#7159</a></li>
<li>fix(tui): contain synchronous image conversion failures by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5028440545" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7161" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7161/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7161">#7161</a></li>
<li>fix(session): reconstruct context without prompt usage by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/harshav167/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/harshav167">@harshav167</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5028449306" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7163" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7163/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7163">#7163</a></li>
<li>fix(tui): format selector keybinding hints by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5028603544" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7165" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7165/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7165">#7165</a></li>
<li>fix(cli): generate titles for positional initial messages by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5028755076" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7167" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7167/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7167">#7167</a></li>
<li>docs: document Kitty placeholder environment controls by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5029276319" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7173" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7173/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7173">#7173</a></li>
<li>fix(coding-agent): re-export compact from legacy pi shim by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5029417358" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7175" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7175/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7175">#7175</a></li>
<li>fix(coding-agent): inspect compound Bash commands in interceptor by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Vincent-Huang-2000/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Vincent-Huang-2000">@Vincent-Huang-2000</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5029770146" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7176" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7176/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7176">#7176</a></li>
<li>fix(coding-agent): keep ExtensionContext.cwd live across /move by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/KennethHoff/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/KennethHoff">@KennethHoff</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5029817240" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7177" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7177/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7177">#7177</a></li>
<li>fix(web-search): surface xai-oauth support in Grok search provider label by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/smoldrago/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/smoldrago">@smoldrago</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5030012629" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7178" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7178/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7178">#7178</a></li>
<li>fix(cursor): preserve structured K3 history replay by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5030982963" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7186" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7186/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7186">#7186</a></li>
<li>fix(coding-agent): preserve scrollback on appearance changes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Sairen777/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Sairen777">@Sairen777</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5031249321" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7188" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7188/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7188">#7188</a></li>
<li>fix(catalog): disable store field for Google AI Studio openai-compat host by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yevman/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/yevman">@yevman</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5031500383" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7191" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7191/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7191">#7191</a></li>
<li>fix(tools): navigate to the requested url when opening an attached browser tab by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/terrxo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/terrxo">@terrxo</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5008083174" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7005" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7005/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7005">#7005</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/definitelynotguru/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/definitelynotguru">@definitelynotguru</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4913358366" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/5884" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/5884/hovercard" href="https://github.com/can1357/oh-my-pi/pull/5884">#5884</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/olegpulatov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/olegpulatov">@olegpulatov</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5025170154" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7138" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7138/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7138">#7138</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mmmeff/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mmmeff">@mmmeff</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5018017340" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7072" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7072/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7072">#7072</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/marton78/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/marton78">@marton78</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5018694586" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7079" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7079/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7079">#7079</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Cyrus580529/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Cyrus580529">@Cyrus580529</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5019607139" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7084" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7084/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7084">#7084</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dangreco/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dangreco">@dangreco</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5025951420" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7141" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7141/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7141">#7141</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/br411/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/br411">@br411</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5026672904" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7143" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7143/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7143">#7143</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jorisw/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jorisw">@jorisw</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5027801494" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7152" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7152/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7152">#7152</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/harshav167/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/harshav167">@harshav167</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5028449306" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7163" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7163/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7163">#7163</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Vincent-Huang-2000/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Vincent-Huang-2000">@Vincent-Huang-2000</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5029770146" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7176" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7176/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7176">#7176</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/KennethHoff/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/KennethHoff">@KennethHoff</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5029817240" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7177" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7177/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7177">#7177</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/smoldrago/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/smoldrago">@smoldrago</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5030012629" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7178" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7178/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7178">#7178</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Sairen777/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Sairen777">@Sairen777</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5031249321" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7188" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7188/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7188">#7188</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yevman/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/yevman">@yevman</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5031500383" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7191" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7191/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7191">#7191</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.1...v17.2.2">v17.2.1...v17.2.2</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.3]]></title>
<description><![CDATA[@oh-my-pi/pi-ai
Added

Added the ai& (aiand) provider registry entry with API-key paste login validated against https://api.aiand.com/v1/models.

Fixed

Fixed Anthropic OAuth (Claude Pro/Max subscription) requests hard-429ing (Usage credits are required for long context requests) on every beta-ga...]]></description>
<link>https://tsecurity.de/de/3698413/tools/github-v1723/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698413/tools/github-v1723/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:19 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>Added the ai&amp; (<code>aiand</code>) provider registry entry with API-key paste login validated against <code>https://api.aiand.com/v1/models</code>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Anthropic OAuth (Claude Pro/Max subscription) requests hard-429ing (<code>Usage credits are required for long context requests</code>) on every beta-gated 1M model — e.g. <code>claude-sonnet-4-6</code>, which the default <code>task</code>/<code>smol</code>/<code>scout</code> subagent roles resolve to — regardless of prompt size, breaking all subagents. The 17.2.1 cowork request profile reintroduced the <code>context-1m-2025-08-07</code> beta for any model with a 1M catalog window, but subscription credentials have no long-context credit balance so Anthropic rejects the request outright. The beta is no longer advertised on OAuth requests; subscription accounts transparently get the standard 200k window. (<a href="https://github.com/can1357/oh-my-pi/issues/7238" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7238/hovercard">#7238</a>)</li>
<li>Fixed OpenAI Codex Responses ignoring disabled cache retention when deriving <code>prompt_cache_key</code>, while preserving transport session identity (<a href="https://github.com/can1357/oh-my-pi/issues/7219" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7219/hovercard">#7219</a>).</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added support for the ai&amp; provider (<code>aiand</code>), an OpenAI-compatible inference API with dynamic model discovery (context windows, capabilities, reasoning efforts, and USD pricing from <code>/v1/models</code>) and API-key authentication via the <code>AIAND_API_KEY</code> environment variable.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Changed</h3>
<ul>
<li>Tightened the system prompt notation: the legend now defines <code>⟺</code>, <code>≠</code>, <code>∉</code>/<code>∌</code>, and operator binding order; replaced undefined symbols (<code>⊭</code>, <code>≢</code>) in prompt bodies; removed delegation guidance duplicated between the eager-tasks preamble and the delegation gates.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed headless browser launch storms and orphaned Chromium process trees: omp processes now attach to one project-shared Chromium owned by the daemon broker (tabs per session; Chrome dies with the last omp client in the project), concurrent browser opens in one process share a single launch, and concurrent daemon <code>start</code> requests for one name can no longer spawn duplicate untracked processes.</li>
<li>Fixed Bash auto-background leaving a live <code>Bun.sleep</code> threshold timer scheduled after a command completes (or abort/steering wins) first, which could keep the event loop alive and delay SDK/headless shutdown until the threshold expired (<a href="https://github.com/can1357/oh-my-pi/issues/7235" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7235/hovercard">#7235</a>).</li>
<li>Fixed ephemeral side turns and native compaction bypassing an explicit or fork-inherited prompt cache key (<a href="https://github.com/can1357/oh-my-pi/issues/7218" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7218/hovercard">#7218</a>).</li>
<li>Fixed the live Ask dialog crashing the whole session with a <code>replaceTabs</code> TypeError when a question reached <code>AskDialogComponent</code> without a string <code>question</code> field; questions are now normalized at dialog entry, mirroring the transcript renderer (<a href="https://github.com/can1357/oh-my-pi/issues/7211" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7211/hovercard">#7211</a>).</li>
<li>Fixed Codex web search collapsing backend errors to <code>Codex error (): Unknown error</code>; the SSE error parser now preserves the backend code and message from top-level, nested <code>error</code>, and <code>response.error</code> envelopes (<a href="https://github.com/can1357/oh-my-pi/issues/7200" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7200/hovercard">#7200</a>).</li>
</ul>
<h2>@oh-my-pi/pi-mnemopi</h2>
<h3>Fixed</h3>
<ul>
<li>Stripped <code>&lt;think&gt;…&lt;/think&gt;</code> reasoning blocks from remote LLM output in <code>cleanOutput</code>, so reasoning-model responses no longer leak into consolidated memories or corrupt fact extraction (the reasoning wrapper previously survived parsing and every stored fact became reasoning prose). (<a href="https://github.com/can1357/oh-my-pi/issues/7231" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7231/hovercard">#7231</a>)</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(coding-agent): preserve Codex web search backend error diagnostics by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5033328488" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7201" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7201/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7201">#7201</a></li>
<li>fix(coding-agent): normalize ask dialog questions to prevent render crash by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5034281141" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7212" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7212/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7212">#7212</a></li>
<li>fix(coding-agent): reuse effective prompt cache key by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5035115404" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7220" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7220/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7220">#7220</a></li>
<li>fix(ai): honor disabled cache retention in Codex Responses by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5035116119" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7221" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7221/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7221">#7221</a></li>
<li>fix(mnemopi): strip reasoning blocks from summaries by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5035391908" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7234" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7234/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7234">#7234</a></li>
<li>fix(coding-agent): clear bash auto-background threshold timer by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5035432702" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7236" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7236/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7236">#7236</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.2...v17.2.3">v17.2.2...v17.2.3</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v17.2.4]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Fixed

Fixed Codex V2 remote compaction bypassing the provider's live WebSocket transport before trying SSE (#7198).
Tool calls skipped mid-batch to service queued steering/peer input now distinguish calls that never entered tool.execute (SyntheticToolResultDetails, execut...]]></description>
<link>https://tsecurity.de/de/3698412/tools/github-v1724/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698412/tools/github-v1724/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:19 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><h2>@oh-my-pi/pi-agent-core</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Codex V2 remote compaction bypassing the provider's live WebSocket transport before trying SSE (<a href="https://github.com/can1357/oh-my-pi/issues/7198" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7198/hovercard">#7198</a>).</li>
<li>Tool calls skipped mid-batch to service queued steering/peer input now distinguish calls that never entered <code>tool.execute</code> (<code>SyntheticToolResultDetails</code>, <code>executed: false</code>) from in-flight calls that may have performed partial work (<code>execution: "started"</code>), allowing UI/telemetry consumers to render normal steering control flow without misreporting execution state (<a href="https://github.com/can1357/oh-my-pi/issues/7199" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7199/hovercard">#7199</a>).</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Codex WebSocket tool-result turns replaying full history when the preceding tool-call ID required Responses API normalization (<a href="https://github.com/can1357/oh-my-pi/issues/7279" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7279/hovercard">#7279</a>).</li>
<li>Fixed direct Anthropic provider streams ignoring <code>model.compat.streamIdleTimeoutMs</code>. Requests dispatched through <code>streamAnthropic</code> can now widen the inter-event idle watchdog or set it to <code>0</code> to disable that watchdog; caller options and environment overrides retain precedence. Setting the compat value to <code>0</code> disables only the inter-event watchdog and leaves the first-event watchdog enabled; wider idle values continue to floor the first-event budget under the existing timeout contract.</li>
<li>Fixed OpenRouter DeepSeek models failing structured subagents when the upstream returns an opaque HTTP 400 for a strict yield schema, retrying once without strict tools and remembering the fallback for the provider session (<a href="https://github.com/can1357/oh-my-pi/issues/7264" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7264/hovercard">#7264</a>).</li>
<li>Fixed provider-native Codex compaction streams bypassing WebSocket-first transport selection and SSE transport fallback (<a href="https://github.com/can1357/oh-my-pi/issues/7198" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7198/hovercard">#7198</a>).</li>
<li>Fixed <code>SqliteAuthCredentialStore.open()</code> running the <code>auth_credential_refresh_leases</code> DDL (<code>CREATE TABLE</code>/<code>CREATE INDEX</code>) with Bun's default <code>busy_timeout=0</code>, before the constructor's <code>#initializeSchema()</code> installed the busy handler. Under a concurrent write lock (e.g. WAL recovery on parallel omp startups) the lock-taking DDL failed immediately and, since the error wasn't BUSY-classified, bypassed <code>open()</code>'s bounded retry loop. The busy handler is now installed on the connection immediately after it opens, before any lock-taking statement, honoring the issue-<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4652200490" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/2421" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/2421/hovercard" href="https://github.com/can1357/oh-my-pi/issues/2421">#2421</a> invariant on every entry path. (<a href="https://github.com/can1357/oh-my-pi/issues/7298" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7298/hovercard">#7298</a>)</li>
<li>Fixed a corrupt credential store (<code>agent.db</code>) silently disabling every persisted rate-limit block. <code>AuthStorage</code> caught unrecoverable SQLite errors (<code>SQLITE_CORRUPT</code> family / <code>SQLITE_NOTADB</code>) from the persisted block read/write paths at <code>debug</code> level with no latch, so the broken store was re-queried on every credential evaluation while blocks quietly stopped applying. The first unrecoverable error is now reported once at <code>error</code> level with the store location and repair guidance, and every later persisted-block read/write short-circuits for the process lifetime; in-memory backoff still preserves availability (<a href="https://github.com/can1357/oh-my-pi/issues/7296" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7296/hovercard">#7296</a>).</li>
</ul>
<h2>@oh-my-pi/pi-catalog</h2>
<h3>Added</h3>
<ul>
<li>Added <code>AnthropicCompat.streamIdleTimeoutMs</code> and propagated it through <code>buildAnthropicCompat</code> so direct Anthropic provider streams can configure their inter-event idle watchdog.</li>
<li>Fixed Ollama Cloud DeepSeek V4 Pro/Flash models (including dated tag variants such as <code>deepseek-v4-flash:0731</code>) reporting an incorrect max-output-tokens figure by pinning it to the deployment's enforced 65536-token output ceiling (<a href="https://github.com/can1357/oh-my-pi/issues/7266" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7266/hovercard">#7266</a>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>gen:models</code> Codex discovery to union models across every stored OAuth account and fail closed on partial resolution, matching runtime discovery (<a href="https://github.com/can1357/oh-my-pi/issues/6265" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6265/hovercard">#6265</a>); restored the bundled <code>gpt-5.4</code>, <code>gpt-5.6-sol</code>, and <code>gpt-5.3-codex-spark</code> entries a single-account regen had dropped.</li>
<li>Fixed <code>google-antigravity</code> models always reporting $0 cost: Antigravity discovery carries no pricing, so the generator now back-fills each model with its Google list price (Gemini ids from the <code>google</code> provider, including <code>-preview</code> id aliases; Claude ids from <code>google-vertex</code>, falling back to <code>anthropic</code>).</li>
<li>Fixed OpenRouter <code>deepseek/deepseek-v4-flash-0731</code> exposing only <code>high</code> thinking effort by consuming the live <code>reasoning.supported_efforts</code> and <code>default_effort</code> metadata and bundling its <code>low</code>/<code>high</code>/<code>max</code> ladder. (<a href="https://github.com/can1357/oh-my-pi/issues/7307" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7307/hovercard">#7307</a>)</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added <code>requestIdFormat</code> (<code>"string"</code> | <code>"number"</code>, default <code>"number"</code>) to MCP server config, honored by the stdio, HTTP, and SSE transports. JSON-RPC 2.0 permits both id shapes, but Apple's <code>xcrun mcpbridge</code> decodes <code>id</code> as an integer only and silently drops string ids (<code>mcpbridge.DecodeError Code=1</code>), hanging every request until it times out. The option is OMP-specific, so set it in an OMP-owned config (<code>.omp/mcp.json</code>, <code>~/.omp/agent/mcp.json</code>, a project <code>mcp.json</code>/<code>.mcp.json</code>, or an OMP plugin); servers imported from another tool's config ignore it (<a href="https://github.com/can1357/oh-my-pi/issues/7053" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7053/hovercard">#7053</a>).</li>
<li>Fixed Anthropic web search sending unsupported temperature parameters to sampling-restricted Claude models (<a href="https://github.com/can1357/oh-my-pi/pull/7195" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7195/hovercard">#7195</a> by <a href="https://github.com/will-bogusz">@will-bogusz</a>).</li>
<li>Fixed mid-turn steering/peer-interrupt tool skips rendering as errors (red ✘, red border/text) in the TUI; pending and in-flight interrupt placeholders now render as neutral info cards while preserving whether <code>tool.execute</code> started (<a href="https://github.com/can1357/oh-my-pi/issues/7199" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7199/hovercard">#7199</a>).</li>
<li>Added <code>Shift+Up</code> as a second default for the message dequeue, so the shortcut is reachable in macOS Terminal.app where Option is consumed for character composition.</li>
<li>Added in-process <code>pgrep</code>, <code>pkill</code>, <code>pidwait</code>, and <code>top</code> shell builtins with cross-platform process discovery, BSD/procps-style filters, pidfile handling, signal selection, waiting, and snapshots.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Headless hosts (print/RPC/ACP/eval/SDK) now use a 1s SQLite <code>busy_timeout</code> for the session-critical databases (agent.db, history.db, stats.db), so lock contention no longer freezes the protocol loop for the full interactive 5s timeout; interactive hosts keep the 5s timeout. The interactive-host flag is now declared before settings load so the first database opens see the correct timeout.</li>
<li>The model picker (<code>/switch</code>, alt+p) no longer blocks models whose context window is smaller than the live session: over-context rows stay grayed but selectable, and picking one compacts with the current model first, then switches. A cancelled or failed compaction keeps the current model.</li>
<li>MCP JSON-RPC request ids now default to per-connection sequential integers instead of snowflake strings, matching the wider MCP ecosystem and making integer-only decoders like Apple's <code>xcrun mcpbridge</code> work without configuration; set <code>requestIdFormat: "string"</code> per server to restore collision-resistant string ids (<a href="https://github.com/can1357/oh-my-pi/issues/7053" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7053/hovercard">#7053</a>).</li>
<li><code>secret-placeholder.key</code> now resolves under XDG state (<code>$XDG_STATE_HOME/omp/secret-placeholder.key</code>) instead of the agent config directory, so it follows the same XDG layout as other state files.</li>
<li>Daemon runtime directories (<code>run/daemons/&lt;hash&gt;</code>) and provider in-flight tracking (<code>run/provider-inflight</code>) now resolve under XDG state (<code>$XDG_STATE_HOME/omp/run/</code>) instead of the config root, keeping ephemeral runtime state out of <code>~/.config</code>.</li>
<li><code>marketplaces.json</code> now resolves under XDG data (<code>$XDG_DATA_HOME/omp/marketplaces.json</code>) instead of the config root, aligning with the XDG data category for user-scoped registry files.</li>
<li>Existing XDG installs keep their placeholder key and marketplace registry: the legacy <code>~/.omp/agent/secret-placeholder.key</code> and <code>~/.omp/marketplaces.json</code> are copied to their XDG locations on first resolution.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed sessions without a granted <code>write</code> tool hiding discoverable and MCP tools behind the unusable <code>xd://</code> transport; those sessions now disable device mounting and expose the tools directly without gaining write access.</li>
<li>Fixed collab guest prompts being sent to models as unframed developer context, so guest messages now retain their transcript attribution while reaching the model as prioritized user interjections (<a href="https://github.com/can1357/oh-my-pi/issues/7288" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7288/hovercard">#7288</a>).</li>
<li>Fixed <code>/memory stats</code> and <code>/memory diagnose</code> showing "Memory stats is not available for the off backend" when memory is off, in both the TUI and ACP/RPC slash-command handlers; the off backend now says memory is off directly instead of naming itself as an unsupported backend (<a href="https://github.com/can1357/oh-my-pi/pull/7251" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7251/hovercard">#7251</a> by <a href="https://github.com/KennethHoff">@KennethHoff</a>).</li>
<li>Fixed <code>/reload-plugins</code> retaining stale context-file contents and activation state in the current system prompt (<a href="https://github.com/can1357/oh-my-pi/issues/7258" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7258/hovercard">#7258</a>).</li>
<li>Fixed compiled binaries failing to import nested wildcard export subpaths such as <code>@oh-my-pi/pi-coding-agent/slash-commands/helpers/active-oauth-account</code>. Node matches <code>*</code> in an <code>exports</code> pattern across <code>/</code>, but the bundled registry enumerated only the top level and skipped any key containing a slash, so such an import resolved from source and died under bunfs — reproducible on the published 17.2.1 binary.</li>
<li>Fixed concurrent session appends during <code>/move</code> recreating an orphaned <code>.jsonl</code> fragment in the old session directory (<a href="https://github.com/can1357/oh-my-pi/issues/7270" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7270/hovercard">#7270</a>).</li>
<li>Fixed interactive launches hanging silently when a host project or its <code>.env</code> sets <code>NODE_ENV=test</code> or <code>BUN_ENV=test</code> (<a href="https://github.com/can1357/oh-my-pi/issues/7261" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7261/hovercard">#7261</a>).</li>
<li>Fixed a subagent killed from the Agent Hub (<code>x</code>) reappearing as a <code>parked</code> row after closing and reopening the hub in a local session; the kill now leaves the ref registered as terminal <code>aborted</code> instead of unregistering it, so the persisted-subagent rescan no longer re-adopts the surviving transcript (<a href="https://github.com/can1357/oh-my-pi/issues/7250" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7250/hovercard">#7250</a>).</li>
<li>Fixed manual and automatic Codex compaction dropping the configured OpenAI WebSocket preference (<a href="https://github.com/can1357/oh-my-pi/issues/7198" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7198/hovercard">#7198</a>).</li>
<li>Fixed two remaining tool-card double renders: a superseded assistant turn no longer leaves its never-run cards above the re-run's fresh cards (a TTSR rewind retracts them immediately; an auto-retry removes the synthetic-settled failure cards when it supersedes the turn — while a genuinely terminal failure keeps its card visible), and a successful read whose persisted result wins a transcript-rebuild race no longer creates a fallback read group when its delayed live completion arrives (<a href="https://github.com/can1357/oh-my-pi/issues/6879" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6879/hovercard">#6879</a>).</li>
<li>Fixed a tool card rendering twice when the provider rewrites a streamed tool call's id mid-stream — GitHub Copilot's <code>call_id|id</code> transport, or any stream that delivers the tool name/arguments before the id — so the block appears first with an empty or partial id and is populated in a later delta. The transcript keyed the live card by that mutable id, so the changed id spawned a second card: the old-id card orphaned as a blue pending preview while the new-id card took the result. Streamed tool cards are now re-keyed in place when their id changes, using the block's position in the streaming message as a stable identity (<a href="https://github.com/can1357/oh-my-pi/issues/6879" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/6879/hovercard">#6879</a>).</li>
<li>Withheld advisor nits and concerns while the primary turn is explicitly marked in progress, while still allowing blockers for unrecoverable active side effects.</li>
<li>Preserved explicit <code>-e</code>/<code>--extension</code> and <code>--hook</code> packages under<br>
<code>--no-extensions</code> while excluding ambient extension factories and sibling<br>
capabilities from settings or installed OMP packages.</li>
<li>Fixed explicit <code>thinking</code> metadata in <code>models.yml</code> custom definitions and <code>modelOverrides</code> being replaced by canonical catalog policy during model rebuilding. (<a href="https://github.com/can1357/oh-my-pi/issues/7307" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7307/hovercard">#7307</a>)</li>
<li>Fixed the auto-titler installing a model's whole answer as the session title when the tiny title model ignored the titling task and answered the first user message instead. <code>normalizeGeneratedTitle</code> now rejects overlong output (&gt;80 chars or &gt;12 words) so the caller defers titling to the next user turn rather than accepting a full sentence (<a href="https://github.com/can1357/oh-my-pi/issues/7303" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7303/hovercard">#7303</a>).</li>
<li>Fixed the in-process <code>kill</code> builtin to validate signals, preserve negative PID operands, signal every process in pipeline jobs, continue after bad targets, and refuse non-probe signals aimed at the host process or process group.</li>
</ul>
<h2>@oh-my-pi/omp-stats</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed provider usage window stats silently showing no data during SQLite contention by installing a five-second busy timeout on read-only agent database connections (<a href="https://github.com/can1357/oh-my-pi/issues/7300" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7300/hovercard">#7300</a>).</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed animated Loader paints saturating a CPU core on slow WSL/ConPTY terminals by applying cost-aware cadence backpressure while preserving 30fps on cheap frames (<a href="https://github.com/can1357/oh-my-pi/issues/7290" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7290/hovercard">#7290</a>).</li>
<li>Fixed interactive terminals suppressing all output and input when the host project sets <code>NODE_ENV=test</code> or <code>BUN_ENV=test</code> (<a href="https://github.com/can1357/oh-my-pi/issues/7261" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7261/hovercard">#7261</a>).</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Added</h3>
<ul>
<li>Added <code>getSecretPlaceholderKeyPath()</code>, <code>getDaemonRuntimeDir()</code>, <code>getProviderInFlightRoot()</code>, and <code>getMarketplacesRegistryPath()</code> to resolve secret key, daemon runtime, provider in-flight, and marketplace registry paths under their respective XDG categories (state, data) instead of the config root.</li>
<li>Existing installs enabling XDG keep their data: a legacy <code>~/.omp/agent/secret-placeholder.key</code> or <code>~/.omp/marketplaces.json</code> is copied to its XDG location on first resolution, so persisted transcripts still deobfuscate and added marketplaces survive the move.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Headless hosts (print/RPC/ACP/eval/SDK) now use a 1s SQLite <code>busy_timeout</code> for the session-critical databases (agent.db, history.db, stats.db) via <code>getDbBusyTimeoutMs()</code>, so lock contention no longer freezes the protocol loop for the full interactive 5s timeout; interactive hosts keep the 5s timeout.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed Bun test-runtime detection treating application-owned <code>NODE_ENV=test</code> and <code>BUN_ENV=test</code> values as test-runner signals (<a href="https://github.com/can1357/oh-my-pi/issues/7261" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/7261/hovercard">#7261</a>).</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(coding-agent): retract superseded turn's tool cards to stop double render by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4996558218" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6881" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6881/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6881">#6881</a></li>
<li>feat(mcp): let a server opt into integer JSON-RPC request ids by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kodlian/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kodlian">@kodlian</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5023403978" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7107" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7107/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7107">#7107</a></li>
<li>feat(keybindings): accept shift+up for the steering dequeue by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/metaphorics/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/metaphorics">@metaphorics</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5027635996" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7149" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7149/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7149">#7149</a></li>
<li>fix(coding-agent): omit unsupported Anthropic search temperature by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/will-bogusz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/will-bogusz">@will-bogusz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5032970616" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7195" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7195/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7195">#7195</a></li>
<li>fix(agent): route codex v2 compaction through websockets by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5033342939" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7202" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7202/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7202">#7202</a></li>
<li>fix(tui): render mid-turn steering skips as info, not errors by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5033383916" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7203" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7203/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7203">#7203</a></li>
<li>fix(ai): honor model.compat.streamIdleTimeoutMs in the Anthropic idle watchdog by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/excniesNIED/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/excniesNIED">@excniesNIED</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5035361709" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7230" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7230/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7230">#7230</a></li>
<li>fix(coding-agent): refresh context files on plugin reload by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5036789580" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7262" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7262/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7262">#7262</a></li>
<li>fix(tui): prevent test env from suppressing interactive launch by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5036829163" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7263" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7263/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7263">#7263</a></li>
<li>fix(ai): retry opaque OpenRouter strict-tool errors by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5036885959" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7265" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7265/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7265">#7265</a></li>
<li>fix(catalog): inherit base model limits for ollama tag variants by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5037153124" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7267" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7267/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7267">#7267</a></li>
<li>fix(session): fence appends during session moves by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5037256838" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7271" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7271/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7271">#7271</a></li>
<li>fix(extensions): bundle nested wildcard export subpaths for compiled binaries by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/harshav167/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/harshav167">@harshav167</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5037620274" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7277" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7277/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7277">#7277</a></li>
<li>fix(ai): preserve Codex WebSocket chaining for normalized IDs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5037825661" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7281" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7281/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7281">#7281</a></li>
<li>fix(coding-agent): preserve explicit extensions in isolation by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alphastorm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alphastorm">@alphastorm</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5037949413" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7285" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7285/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7285">#7285</a></li>
<li>fix(collab): treat guest prompts as user interjections by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5038084833" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7289" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7289/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7289">#7289</a></li>
<li>fix(tui): backpressure slow loader paints by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5038160992" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7291" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7291/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7291">#7291</a></li>
<li>fix(ai): install auth-db busy handler before open()-path leases DDL by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5038496884" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7304" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7304/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7304">#7304</a></li>
<li>fix(ai): latch and surface a corrupt credential-block store by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5038498629" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7305" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7305/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7305">#7305</a></li>
<li>fix(title): reject overlong auto-generated session titles by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5038508517" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7306" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7306/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7306">#7306</a></li>
<li>fix(stats): wait for contended usage snapshot reads by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5038515169" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7308" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7308/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7308">#7308</a></li>
<li>fix(catalog): honor openrouter deepseek effort metadata by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5038584616" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7311" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7311/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7311">#7311</a></li>
<li>fix(coding-agent): suppress WIP advisor non-blockers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wolfiesch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wolfiesch">@wolfiesch</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4983964235" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/6756" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/6756/hovercard" href="https://github.com/can1357/oh-my-pi/pull/6756">#6756</a></li>
<li>fix(xdg): fix files and folder for xdg-maintained by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Parsifa1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Parsifa1">@Parsifa1</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5017017032" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7065" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7065/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7065">#7065</a></li>
<li>Bound synchronous SQLite busy-waits in headless hosts by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pi3123/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pi3123">@pi3123</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5035633241" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7240" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7240/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7240">#7240</a></li>
<li>fix(memory): clarify /memory stats and /memory diagnose message when memory is off by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/KennethHoff/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/KennethHoff">@KennethHoff</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5036360257" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7251" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7251/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7251">#7251</a></li>
<li>fix(coding-agent): keep hub-killed subagent from resurrecting as parked by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5036373794" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7252" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7252/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7252">#7252</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kodlian/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kodlian">@kodlian</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5023403978" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7107" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7107/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7107">#7107</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/excniesNIED/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/excniesNIED">@excniesNIED</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5035361709" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7230" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7230/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7230">#7230</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alphastorm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alphastorm">@alphastorm</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5037949413" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7285" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7285/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7285">#7285</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pi3123/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pi3123">@pi3123</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="5035633241" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/7240" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/7240/hovercard" href="https://github.com/can1357/oh-my-pi/pull/7240">#7240</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.2.3...v17.2.4">v17.2.3...v17.2.4</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: rclone v1.75.0]]></title>
<description><![CDATA[This is the v1.75.0 release of rclone.
Full details of the changes can be found in the changelog.]]></description>
<link>https://tsecurity.de/de/3698411/tools/github-rclone-v1750/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698411/tools/github-rclone-v1750/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:18 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><p>This is the v1.75.0 release of rclone.</p>
<p>Full details of the changes can be found in <a href="https://rclone.org/changelog/#v1-75-0-2026-07-31" rel="nofollow">the changelog</a>.</p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[HTTP Message Signatures with curl]]></title>
<description><![CDATA[The recently published RFC 9421 describes how to do HTTP Message Signatures, and starting just now, curl experimentally supports them. Message Signatures The specification describes this as a mechanism for creating, encoding, and verifying digital signatures or message authentication codes over c...]]></description>
<link>https://tsecurity.de/de/3698410/tools/http-message-signatures-with-curl/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698410/tools/http-message-signatures-with-curl/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:18 +0200</pubDate>
<content:encoded><![CDATA[The recently published RFC 9421 describes how to do HTTP Message Signatures, and starting just now, curl experimentally supports them. Message Signatures The specification describes this as a mechanism for creating, encoding, and verifying digital signatures or message authentication codes over components of an HTTP message. It is a way to verify that selected parts … <a href="https://daniel.haxx.se/blog/2026/07/27/http-message-signatures-with-curl/" class="more-link">Continue reading <span class="screen-reader-text">HTTP Message Signatures with curl</span> <span class="meta-nav">→</span></a>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v8.21.0]]></title>
<description><![CDATA[Additional small tweaks, bug fixes, and performance enhancements. Thanks for using Signal!]]></description>
<link>https://tsecurity.de/de/3698409/tools/github-v8210/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698409/tools/github-v8210/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:18 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><ul>
<li>Additional small tweaks, bug fixes, and performance enhancements. Thanks for using Signal!</li>
</ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub: v8.22.0-beta.1]]></title>
<description><![CDATA[Handful of bug fixes to keep your app running smoothly. More exciting changes on the horizon!]]></description>
<link>https://tsecurity.de/de/3698408/tools/github-v8220-beta1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698408/tools/github-v8220-beta1/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:18 +0200</pubDate>
<content:encoded><![CDATA[<div class="github-feed-entry"><ul>
<li>Handful of bug fixes to keep your app running smoothly. More exciting changes on the horizon!</li>
</ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Nightly: Try the New Firefox Design in Nightly]]></title>
<description><![CDATA[This past May, we shared our vision for the future of Firefox. Starting today, you can try out the next design evolution of Firefox in Nightly.
It’s still Firefox, now with a more cohesive look and feel across tabs, menus, panels, and other browser surfaces. You’ll notice softer tab shapes, a war...]]></description>
<link>https://tsecurity.de/de/3698407/tools/firefox-nightly-try-the-new-firefox-design-in-nightly/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698407/tools/firefox-nightly-try-the-new-firefox-design-in-nightly/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:18 +0200</pubDate>
<content:encoded><![CDATA[<p>This past May, we <a href="https://blog.mozilla.org/en/firefox/new-firefox-design/">shared</a> our vision for the future of Firefox. Starting today, you can try out the next design evolution of Firefox in Nightly.</p>
<p>It’s still Firefox, now with a more cohesive look and feel across tabs, menus, panels, and other browser surfaces. You’ll notice softer tab shapes, a warmer color palette, updated icons, and – after hearing from many of you – the return of Compact Mode and new theme options to make Firefox your own.</p>
<p>Many of you have already spotted pieces of the new design in Nightly over the past few months. Now they’re coming together into one complete  experience.</p>
<p>You’ll continue to see updates over the coming weeks as we polish the new Firefox design before it reaches Firefox users more broadly later this year. As you browse, we’re especially interested in any visual or functional issues you encounter.</p>
<p>Keep an eye out for things like:</p>
<ul>
<li>Icons, spacing, and alignment</li>
<li>Themes and personalization</li>
<li>Different window sizes and display scaling</li>
<li>Keyboard navigation</li>
<li>Screen readers and other accessibility features</li>
<li>Different languages and layouts</li>
</ul>
<h3><b>Found a bug?</b></h3>
<p>If something doesn’t look or behave as expected, please <a href="https://bugzilla.mozilla.org/enter_bug.cgi?format=__default__&amp;blocked=2052231&amp;product=Firefox&amp;component=General">file a bug</a> in Bugzilla.</p>
<p>When possible, include:</p>
<ul>
<li>Steps to reproduce the issue</li>
<li>Screenshots or screen recordings</li>
<li>Your operating system and Nightly version</li>
</ul>
<p>If you have broader thoughts or questions about your experience, join the discussion on <a href="https://connect.mozilla.org/t5/internal-ideas-board/take-project-nova-for-a-spin-in-nightly/idi-p/131273">Mozilla Connect</a>.</p>
<p>Thanks for using Nightly and helping us improve Firefox. Every bug report helps us identify issues and continue refining the new Firefox design before it reaches Firefox users more broadly later this year.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: MozPhab 2.15.4 Released]]></title>
<description><![CDATA[Bugs resolved in Moz-Phab 2.15.4:

bug 2058150 moz-phab patch crashes with KeyError when a stack relative is not visible to the user

Discuss these changes in #engineering-workflow on Slack or #Conduit Matrix.
            1 post - 1 participant
            Read full topic]]></description>
<link>https://tsecurity.de/de/3698406/tools/firefox-tooling-announcements-mozphab-2154-released/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698406/tools/firefox-tooling-announcements-mozphab-2154-released/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:18 +0200</pubDate>
<content:encoded><![CDATA[<p>Bugs resolved in Moz-Phab 2.15.4:</p>
<ul>
<li><a href="https://bugzilla.mozilla.org/2058150">bug 2058150</a> <code>moz-phab patch</code> crashes with <code>KeyError</code> when a stack relative is not visible to the user</li>
</ul>
<p>Discuss these changes in <span class="hashtag-raw">#engineering-workflow</span> on Slack or <span class="hashtag-raw">#Conduit</span> Matrix.</p>
            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://discourse.mozilla.org/t/mozphab-2-15-4-released/149050">Read full topic</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[This Week In Rust: This Week in Rust 662]]></title>
<description><![CDATA[Hello and welcome to another issue of This Week in Rust!
Rust is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
@thisweekinrust.bsky.social on Bluesky or
@ThisWeekinRu...]]></description>
<link>https://tsecurity.de/de/3698405/tools/this-week-in-rust-this-week-in-rust-662/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698405/tools/this-week-in-rust-this-week-in-rust-662/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:18 +0200</pubDate>
<content:encoded><![CDATA[<p>Hello and welcome to another issue of <em>This Week in Rust</em>!
<a href="https://www.rust-lang.org/">Rust</a> is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
<a href="https://bsky.app/profile/thisweekinrust.bsky.social">@thisweekinrust.bsky.social</a> on Bluesky or
<a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or
<a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>.
Want to get involved? <a href="https://github.com/rust-lang/rust/blob/main/CONTRIBUTING.md">We love contributions</a>.</p>
<p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a> and archives can be viewed at <a href="https://this-week-in-rust.org/">this-week-in-rust.org</a>.
If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p>
<p>Want TWIR in your inbox? <a href="https://this-week-in-rust.us11.list-manage.com/subscribe?u=fd84c1c757e02889a9b08d289&amp;id=0ed8b72485">Subscribe here</a>.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#updates-from-rust-community">Updates from Rust Community</a></h4>


<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#newsletters">Newsletters</a></h5>
<ul>
<li><a href="https://scientificcomputing.rs/monthly/2026-07">Scientific Computing in Rust #20 (July 2026)</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#projecttooling-updates">Project/Tooling Updates</a></h5>
<ul>
<li><a href="https://github.com/fodydev/afrim/releases/tag/v0.7.0">afrim 0.7.0: a generic input method framework</a></li>
<li><a href="https://github.com/TamedTornado/cargo-reapi/blob/main/docs/introducing-cargo-reapi.md">Sharing Rust build work across Cargo worktrees with cargo-reapi</a></li>
<li><a href="https://github.com/Le-Syl21/exiftool-rs/releases/tag/v0.7.0">exiftool-rs 0.7.0: localizing ExifTool's PrintConv values, not just its labels</a></li>
<li><a href="https://www.sea-ql.org/blog/2026-07-27-sea-orm-2.0/">Announcing SeaORM 2.0</a></li>
<li><a href="https://github.com/kunobi-ninja/kobe/releases/tag/v0.37.0">kobe 0.37.0: easier to deploy and install</a></li>
<li><a href="https://github.com/kunobi-ninja/kache/releases/tag/v0.12.0">kache 0.12.0: pluggable remotes, smarter GC, sharper diagnostics</a></li>
<li><a href="https://lwn.net/SubscriberLink/1083202/f1ba926cd57ac5c5/">Progress toward compiling Linux with gccrs</a></li>
<li><a href="https://flodl.dev/blog/then-i-looked-at-it">flodl 0.7.0: one dashboard view, repeated at every level</a></li>
<li><a href="https://github.com/singhpratech/samkhya/releases/tag/v1.2.1">samkhya 1.2.1 — the join-cardinality ceiling becomes provable</a></li>
<li><a href="https://brewfs.ai/en/blog/introducing-brewfs">BrewFS: a Rust and JuiceFS-like distributed filesystem</a> </li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#observationsthoughts">Observations/Thoughts</a></h5>
<ul>
<li><a href="https://shnatsel.github.io/improving-std-simd-swizzle-dyn/">Improving std::simd::swizzle_dyn</a></li>
<li><a href="https://ferrous-systems.com/blog/query-cycles-a-compiler-murder-mystery/">Query cycles: A compiler murder mystery</a></li>
<li><a href="https://notnite.com/blog/gdpatch">GDPatch: a versatile Godot mod loader</a></li>
<li><a href="https://itsallaboutthebit.com/memory-safety-absolutists/">Memory Safety Absolutists</a></li>
<li><a href="https://blog.jetbrains.com/rust/2026/07/27/cpp-to-rust-migration/">C++ to Rust Migration</a></li>
<li><a href="https://developerlife.com/2026/07/14/build-high-performance-flat-2d-arrays-in-rust/">High-Performance Flat 2D Arrays in Rust with SIMD, L1 Cache</a></li>
<li><a href="https://teaql.io/blog/java-rust-microservice-integration-with-teaql/">Building Java–Rust Microservices with TeaQL: Models, Events, and Audit Intent</a></li>
<li><a href="https://www.99francs.agency/blog/python-to-rust-trading-bot-migration">How We Cut a Trading Bot's Reaction Time from ~2 Seconds to Milliseconds — by Moving Only the Hot Path to Rust</a></li>
<li><a href="https://c410-f3r.github.io/thoughts/esp32-server-distributing-http2-streams-over-tls">ESP32 Server: Distributing HTTP/2 streams over TLS</a></li>
<li>[video] <a href="https://www.youtube.com/watch?v=ut5EHZ2FK0c">Rust Berlin Talks · 23/07/2026</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-walkthroughs">Rust Walkthroughs</a></h5>
<ul>
<li><a href="https://ai-router.hashnode.dev/rust-llm-stream-retry-safety">No Tokens Yet Does Not Mean a Rust LLM Stream Is Safe to Retry</a></li>
<li>[series] <a href="https://plabayo.tech/blog/rama-101-2-core-concepts">Rama 101.2: Core Concepts</a></li>
<li>[video] [series] <a href="https://www.youtube.com/watch?v=rBzPw6WurN0">What's Inside Axum?</a></li>
</ul>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#crate-of-the-week">Crate of the Week</a></h4>
<p>This week's crate is <a href="https://codeberg.org/filmroellchen/cargo-efmt">cargo-efmt</a>, a drop-in replacement for cargo fmt to support <code>.editorconfig</code>.</p>
<p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1632">kleines Filmröllchen</a> for the self-suggestion!</p>
<p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#calls-for-testing">Calls for Testing</a></h4>
<p>An important step for RFC implementation is for people to experiment with the
implementation and give feedback, especially before stabilization.</p>
<p>If you are a feature implementer and would like your RFC to appear in this list, add a
<code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or
guidance on which aspect(s) of the feature need testing.</p>
<p><em>No calls for testing were issued this week by
<a href="https://github.com/rust-lang/rust/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Rust</a>,
<a href="https://github.com/rust-lang/cargo/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Cargo</a>,
<a href="https://github.com/rust-lang/rustup/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Rustup</a> or
<a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing%20state%3Aopen">Rust language RFCs</a>.</em></p>
<p><a href="https://github.com/rust-lang/this-week-in-rust/issues">Let us know</a> if you would like your feature to be tracked as a part of this list.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers">Call for Participation; projects and speakers</a></h4>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cfp-projects">CFP - Projects</a></h5>
<p>Always wanted to contribute to open-source projects but did not know where to start?
Every week we highlight some tasks from the Rust community for you to pick and get started!</p>
<p>Some of these tasks may also have mentors available, visit the task page for more information.</p>



<ul>
<li><em>No Calls for participation were submitted this week.</em></li>
</ul>
<p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://github.com/rust-lang/this-week-in-rust?tab=readme-ov-file#call-for-participation-guidelines">here</a> or through a <a href="https://github.com/rust-lang/this-week-in-rust">PR to TWiR</a> or by reaching out on <a href="https://bsky.app/profile/thisweekinrust.bsky.social">Bluesky</a> or <a href="https://mastodon.social/@thisweekinrust">Mastodon</a>!</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cfp-events">CFP - Events</a></h5>
<p>Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.</p>


<ul>
<li><em>No Calls for papers or presentations were submitted this week.</em></li>
</ul>
<p>If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a <a href="https://github.com/rust-lang/this-week-in-rust">PR to TWiR</a> or by reaching out on <a href="https://bsky.app/profile/thisweekinrust.bsky.social">Bluesky</a> or <a href="https://mastodon.social/@thisweekinrust">Mastodon</a>!</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#updates-from-the-rust-project">Updates from the Rust Project</a></h4>
<p>570 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2026-07-21..2026-07-28">merged in the last week</a></p>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#compiler">Compiler</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/143208">apply RemoveNoopLandingPads post-monomorphization</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158901">closures inherit <code>#[optimize]</code> from the enclosing function by default</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159317">fix <code>bool</code> calling convention for aarch64, etc</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159609">optimize <code>escape_string_symbol()</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159695"><code>proc_macro</code>: Fix <code>cfg_attr</code> inner attrs in file modules</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159440">resolve: more preperation work for parallelizing the import resolution loop</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/155697">stabilize c-variadic function definitions</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#library">Library</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/155795">constify <code>vec![1, 2, 3]</code> macro</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159435">core: implement <code>Rng</code> for references</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159656">define a <code>Simd</code> type in <code>minicore</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159738">implement <code>CovariantUnsafeCell</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159846">implement <code>str::copy_from_str</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159518">iter: extend <code>step_by</code> specialization to cover <code>StepBy&lt;RangeIter&lt;{integer}&gt;&gt;</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158547">move <code>std::io::buffered</code> to <code>alloc::io</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/156225">num: improve error messages for <code>TryFromIntError</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159271">str: add ASCII fast path to <code>word_to_titlecase</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159733">switch implementations of <code>thread_local!</code> for WASI</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cargo">Cargo</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/cargo/pull/17248">add haiku's dylib path</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17251"><code>diag</code>: bound transitive unused dependency traversal</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17243"><code>git</code>: Hide git fetch output without progress</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17252"><code>git</code>: Suggest libgit2 if git-cli fails</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17256"><code>test</code>: gate trim-paths tests on split debuginfo support</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17051"><code>toml</code>: warn on hyphenated lint names and duplicates</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17266">allow setting <code>-Zembed-metadata</code> value from the config</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17258">enable build-dir layout v2 on nightly by default</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17247">zsh completion: Add <code>-p</code> and <code>--package</code> flags for <code>cargo add</code></a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rustfmt">Rustfmt</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/159737">allow file not found errors for external mods annotated with <code>#[my_macro]</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158372">discover modules via <code>cfg_select!</code></a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rustdoc">Rustdoc</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/156474">add paths for linked associated items</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159722">Retrieve <code>cfg_attr</code> information for derived impls for <code>doc_cfg</code> feature</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159623">only build extern trait impls if needed</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159721">only inline impls for local primitives</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#clippy">Clippy</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17441">add <code>EULER_GAMMA</code> and <code>GOLDEN_RATIO</code> to <code>approx_constant</code></a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17149">add <code>assert_is_empty</code> lint</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17044">apply safety comment to compound assignment statement</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17420"><code>blocks_in_conditions</code>: Don't lint if the block creates temporarie…</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17294">call <code>in_external_macro</code> after running other checks in various places</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17105">do not trigger <code>clippy::exit</code> when expression comes from an external macro</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17002"><code>duration_suboptimal_units</code>: print the complete method name in the suggestion</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17313">extend <code>branches_sharing_code</code> to match arms with a shared tail</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/16741"><code>min_ident_chars</code> lint short idents even if follows trait naming</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17461"><code>multiple_unsafe_ops_per_block</code>: false positive in with taking an reference to a static, but not reading/writing it</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17448">fix <code>four_forward_slashes</code> false positive on inner doc comments</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17434"><code>lint-page</code>: add accessible labels to filters</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17336">new lint: <code>nonnull_unchecked_on_box_ptr</code></a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17227">perf: avoid per-call type and path work in <code>unnecessary_mut_passed</code></a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17410">perf: find tab groups in doc comments without allocating</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17363">rewrite <code>EndianBytes</code> lint pass</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-analyzer">Rust-Analyzer</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22851">add diagnostic for <code>struct</code> patterns which don't specify sub-patterns for its fields</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22898">add parentheses for invert general expression</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22905">attach db on worker threads in parallel analysis-stats inference</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22876">change unsupported toolchain version to match reality</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22903">discover protocol should only parse stdout</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22881">do not detect <code>#[rust_analyzer]</code> as <code>#[rust_analyzer::rust_fixture]</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22919">don't offer <code>replace_qualified_name_with_use</code> on an unqualified path</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22930">don't panic on a qualified path whose trait is not a trait</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22932">don't pick a discriminant type larger than typeck's</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22908">fix stale lock file</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22924">fix <code>.zip(None)</code> call</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22923">give <code>impl_trait_with_diagnostics</code> a cycle result</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22909">make analysis-stats progress bar Unicode-safe</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22892"><code>merge_imports</code> panic on invalid paths</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22843">panic on macro-defined structs with unknown fields</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22918">prefer <code>alloc</code> over <code>std</code> paths when <code>preferNoStd</code> is set</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22854">record obligation chain for unimplemented trait diagnostics and show it</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22916">replace detach with delete for <code>ast::IdentPat</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22743">resolve path on all namespace on <code>resolve_path</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22660">respect <code>references.exclude[Tests/Imports]</code> in references lens</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22587">scoped lazy priming</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22306">support inactive-code diagnostic in macros</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22896">uses bool instead pat ty in guard</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h5>
<p>Several large improvements landed in the past week:</p>
<ul>
<li>rustdoc is on average roughly 16% faster across all of our doc benchmarks:</li>
<li><a href="https://github.com/rust-lang/rust/pull/159721">rustdoc: Only inline impls for local primitives</a>, 7% faster doc builds</li>
<li><a href="https://github.com/rust-lang/rust/pull/159779">rustdoc: Only synthesize auto/blanket impls for documented items</a>, another 7% faster doc builds</li>
<li><a href="https://github.com/rust-lang/rust/pull/159623">rustdoc: Only build extern trait impls if needed</a>, another 10% faster doc builds</li>
<li><a href="https://github.com/rust-lang/rust/pull/143208">Early removal of no-op panic handling in debug builds</a>. This speeds up Cargo by ~4% in cycle count.</li>
<li><a href="https://github.com/rust-lang/rust/pull/159609">Optimize escape_string_symbol()</a> sped
  up large <code>include_bytes!</code>/<code>include_str!</code> through changes to string escaping, avoiding a regression in upcoming LLVM 23 upgrade.</li>
</ul>
<p>Great to see so many improvements!</p>
<p>Triage done by <strong>@simulacrum</strong>.
Revision range: <a href="https://perf.rust-lang.org/?start=d527bc9bfa297ca7fd7f5ae93781eeec42073170&amp;end=ad0c9dce27a22416b65946bc0010edaf22ac6c83&amp;absolute=false&amp;stat=instructions%3Au">d527bc9b..ad0c9dce</a></p>
<p><a href="https://github.com/rust-lang/rustc-perf/blob/main/triage/2026/2026-07-27.md">Full report here</a></p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#approved-rfcs"></a><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></h5>
<p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These
are the RFCs that were approved for implementation this week:</p>
<ul>
<li><em>No RFCs were approved this week.</em></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#final-comment-period">Final Comment Period</a></h5>
<p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs
which are reaching a decision. Express your opinions now.</p>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#tracking-issues-prs">Tracking Issues &amp; PRs</a></h6>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust"></a><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Rust</a>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/158447">Shallow resolve ty and const vars to their root vars, attempt 2</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157841">Ensure inferred let pattern types are well-formed</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159746">stabilize <code>c_variadic_naked_functions</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157036">lint against repeated repr attributes</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159525">Stabilize passing 128-bit integers via vector registers with <code>asm!</code> on x86</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159583">Add new <code>invalid_markdown_table</code> rustdoc lint</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159503">allocations: document that they can be read-only</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159729">allocations are allowed to grow (but not shrink)</a></li>
<li><a href="https://github.com/rust-lang/rust/issues/159298">Tracking Issue for <code>bool::toggle</code></a></li>
<li><a href="https://github.com/rust-lang/rust/issues/71835">Tracking Issue for const_btree_len</a></li>
<li>
<p><a href="https://github.com/rust-lang/rust/pull/138230">Add <code>raw_borrows_via_references</code> lint</a></p>
</li>
<li>
<p><a href="https://github.com/rust-lang/rust/issues/152761">Never break between empty parens</a></p>
</li>
</ul>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#compiler-team-mcps-only"></a><a href="https://github.com/rust-lang/compiler-team/issues?q=label%3Amajor-change%20label%3Afinal-comment-period%20state%3Aopen">Compiler Team</a> <a href="https://forge.rust-lang.org/compiler/mcp.html">(MCPs only)</a>
<ul>
<li><a href="https://github.com/rust-lang/compiler-team/issues/1017">Wasm proc macro support</a></li>
<li>
<p><a href="https://github.com/rust-lang/compiler-team/issues/980">group target modifier options under -T</a></p>
</li>
<li>
<p><a href="https://github.com/rust-lang/compiler-team/issues/922">Optimize repr(Rust) enums by omitting tags in more cases involving uninhabited variants.</a></p>
</li>
<li><a href="https://github.com/rust-lang/compiler-team/issues/841">Proposal for Adapt Stack Protector for Rust</a></li>
</ul>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-rfcs"></a><a href="https://github.com/rust-lang/rfcs/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen">Rust RFCs</a>
<ul>
<li><a href="https://github.com/rust-lang/rfcs/pull/3984">RFC: Refactor the libs team</a></li>
<li><a href="https://github.com/rust-lang/rfcs/pull/3924">Cargo: <code>hints.min-opt-level</code></a></li>
</ul>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#cargo_1"></a><a href="https://github.com/rust-lang/cargo/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Cargo</a>
<ul>
<li><a href="https://github.com/rust-lang/cargo/pull/17214">feat(profile): Add built-in profile debug</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17126">feat(toml): allow overriding inherited default-features in 2024</a></li>
</ul>
<p><em>No Items entered Final Comment Period this week for
<a href="https://github.com/rust-lang/reference/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Language Reference</a>,
<a href="https://github.com/rust-lang/lang-team/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Language Team</a>,
<a href="https://github.com/rust-lang/leadership-council/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen">Leadership Council</a> or
<a href="https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Unsafe Code Guidelines</a>.</em>
Let us know if you would like your PRs, Tracking Issues or RFCs to be tracked as a part of this list.</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#new-and-updated-rfcs"></a><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></h5>
<ul>
<li><a href="https://github.com/rust-lang/rfcs/pull/3987">RFC: Externref lang item for Wasm targets</a></li>
</ul>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#upcoming-events">Upcoming Events</a></h4>
<p>Rusty Events between 2026-07-29 - 2026-08-26 🦀</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#virtual">Virtual</a></h5>
<ul>
<li>2026-07-30 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/rust-berlin">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/312045928/"><strong>Rust Hack and Learn</strong></a></li>
</ul>
</li>
<li>2026-07-31 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/uo5ek1f4"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-01 | Virtual (Kampala, UG) | <a href="https://www.eventbrite.com/e/rust-circle-meetup-tickets-628763176587">Rust Circle Meetup</a><ul>
<li><a href="https://www.eventbrite.com/e/rust-circle-meetup-tickets-628763176587"><strong>Rust Circle Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-02 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/314095294/"><strong>Rust Deep Learning: First Sunday</strong></a></li>
</ul>
</li>
<li>2026-08-03 | Virtual (Global) | <a href="https://luma.com/rust-maven">Rust Maven</a><ul>
<li><a href="https://luma.com/nwfmsdtf"><strong>Workshop: Add tests to an open source Rust project</strong></a></li>
</ul>
</li>
<li>2026-08-04 | Virtual (London, UK) | <a href="https://www.meetup.com/women-in-rust">Women in Rust</a><ul>
<li><a href="https://www.meetup.com/women-in-rust/events/315213885/"><strong>👋 Community Catch Up</strong></a></li>
</ul>
</li>
<li>2026-08-04 | Virtual (Tel Aviv-yafo, IL) | <a href="https://www.meetup.com/rust-tlv">Rust 🦀 TLV</a><ul>
<li><a href="https://www.meetup.com/rust-tlv/events/315800760/"><strong>שיחה חופשית ווירטואלית על ראסט</strong></a></li>
</ul>
</li>
<li>2026-08-05 | Virtual (Cardiff, UK) | <a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff">Rust and C++ Cardiff</a><ul>
<li><a href="https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/315880365/"><strong>Operating Systems Book Club: Execution and Scheduling</strong></a></li>
</ul>
</li>
<li>2026-08-05 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs">Indy Rust</a><ul>
<li><a href="https://www.meetup.com/indyrs/events/315210367/"><strong>Indy.rs - with Social Distancing</strong></a></li>
</ul>
</li>
<li>2026-08-07 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/ii2jrwva"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-11 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/310254776/"><strong>Second Tuesday</strong></a></li>
</ul>
</li>
<li>2026-08-13 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/rust-berlin">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/313345333/"><strong>Rust Hack and Learn</strong></a></li>
</ul>
</li>
<li>2026-08-13 | Virtual (Nürnberg, DE) | <a href="https://www.meetup.com/rust-noris">Rust Nuremberg</a><ul>
<li><a href="https://www.meetup.com/rust-noris/events/315619609/"><strong>Rust Nürnberg online</strong></a></li>
</ul>
</li>
<li>2026-08-14 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/f2hnzrug"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-18 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc">Rust DC</a><ul>
<li><a href="https://www.meetup.com/rustdc/events/315604176/"><strong>Mid-month Rustful</strong></a></li>
</ul>
</li>
<li>2026-08-19 | Hybrid (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust">Vancouver Rust</a><ul>
<li><a href="https://www.meetup.com/vancouver-rust/events/314105333/"><strong>Dealing with Dependencies</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Hybrid (Seattle, WA, US) | <a href="https://www.meetup.com/join-srug">Seattle Rust User Group</a><ul>
<li><a href="https://www.meetup.com/seattle-rust-user-group/events/314520814/"><strong>August, 2026 SRUG (Seattle Rust User Group) Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Virtual (Charlottesville, VA, US) | <a href="https://www.meetup.com/charlottesville-rust-meetup">Charlottesville Rust Meetup</a><ul>
<li><a href="https://www.meetup.com/charlottesville-rust-meetup/events/315733791/"><strong>Tock OS Part #5 — Wireless Communication with the IEEE 802.15.4 protocol</strong></a></li>
</ul>
</li>
<li>2026-08-21 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/1bm27cah"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-25 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/310254775/"><strong>Fourth Tuesday</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#africa">Africa</a></h5>
<ul>
<li>2026-08-11 | Johannesburg, ZA | <a href="https://www.meetup.com/johannesburg-rust-meetup">Johannesburg Rust Meetup</a><ul>
<li><a href="https://www.meetup.com/johannesburg-rust-meetup/events/315750593/"><strong>Rust's extended standard library</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#asia">Asia</a></h5>
<ul>
<li>2026-08-22 | Bangalore, IN | <a href="https://hasgeek.com/rustbangalore">Rust Bangalore</a><ul>
<li><a href="https://hasgeek.com/rustbangalore/august-2026-rustacean-meetup/"><strong>August 2026 Rustacean Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-22 | Delhi, IN | <a href="https://www.meetup.com/rustdelhi">Rust Delhi</a><ul>
<li><a href="https://www.meetup.com/rustdelhi/events/315185336/"><strong>Rust Delhi X SciPy India Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-22 | Noida, IN | <a href="https://scipy.in/">SciPy India</a><ul>
<li><a href="https://scipy.in/sci-py-rs/"><strong>Scientific Computing in Rust and Python</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#europe">Europe</a></h5>
<ul>
<li>2026-07-29 | Poland, PL | <a href="https://www.meetup.com/rust-poland-meetup">Rust Poland</a><ul>
<li><a href="https://www.meetup.com/rust-poland-meetup/events/315582674/"><strong>Rust Poland x Kraków #10</strong></a></li>
</ul>
</li>
<li>2026-07-30 | Copenhagen, DK | <a href="https://www.meetup.com/copenhagen-rust-community">Copenhagen Rust Community</a><ul>
<li><a href="https://www.meetup.com/copenhagen-rust-community/events/315767999/"><strong>Rust meetup #70</strong></a></li>
</ul>
</li>
<li>2026-07-30 | Manchester, UK | <a href="https://www.meetup.com/rust-manchester">Rust Manchester</a><ul>
<li><a href="https://www.meetup.com/rust-manchester/events/315037685/"><strong>Rust Manchester July Code Night</strong></a></li>
</ul>
</li>
<li>2026-08-06 | Oxford, UK | <a href="https://www.meetup.com/oxford-rust-meetup-group">Oxford ACCU/Rust Meetup.</a><ul>
<li><a href="https://www.meetup.com/oxford-rust-meetup-group/events/315863373/"><strong>ACCU/Rust Summer social</strong></a></li>
</ul>
</li>
<li>2026-08-18 | Aarhus, DK | <a href="https://www.meetup.com/rust-aarhus">Rust Aarhus</a><ul>
<li><a href="https://www.meetup.com/rust-aarhus/events/315683629/"><strong>Hack Night: Trust but verify the LLM</strong></a></li>
</ul>
</li>
<li>2026-08-18 | Leipzig, DE | <a href="https://www.meetup.com/rust-modern-systems-programming-in-leipzig">Rust - Modern Systems Programming in Leipzig</a><ul>
<li><a href="https://www.meetup.com/rust-modern-systems-programming-in-leipzig/events/313816474/"><strong>Topic TBD</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Frankfurt, DE | <a href="https://www.meetup.com/rust-rhein-main">Rust Rhein-Main</a><ul>
<li><a href="https://www.meetup.com/rust-rhein-main/events/315855368/"><strong>Building an acoustic camera with egui and embassy</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#north-america">North America</a></h5>
<ul>
<li>2026-07-30 | Atlanta, GA, US | <a href="https://www.meetup.com/rust-atl">Rust Atlanta</a><ul>
<li><a href="https://www.meetup.com/rust-atl/events/313539329/"><strong>Rust-Atl</strong></a></li>
</ul>
</li>
<li>2026-08-01 | Boston, MA, US | <a href="https://www.meetup.com/bostonrust">Boston Rust Meetup</a><ul>
<li><a href="https://www.meetup.com/bostonrust/events/315582653/"><strong>Chinatown Rust Lunch, Aug 1</strong></a></li>
</ul>
</li>
<li>2026-08-04 | Boston, MA, US | <a href="https://www.meetup.com/bostonrust">Boston Rust Meetup</a><ul>
<li><a href="https://www.meetup.com/bostonrust/events/314660176/"><strong>Evening Boston Rust Meetup at Red Hat, Aug 4</strong></a></li>
</ul>
</li>
<li>2026-08-06 | Mountain View, CA, US | <a href="https://www.meetup.com/hackerdojo/events/">Hacker Dojo</a><ul>
<li><a href="https://www.meetup.com/hackerdojo/events/315590399/"><strong>RUST MEETUP at HACKER DOJO</strong></a></li>
</ul>
</li>
<li>2026-08-06 | Saint Louis, MO, US | <a href="https://www.meetup.com/stl-rust">STL Rust</a><ul>
<li><a href="https://www.meetup.com/stl-rust/events/314701905/"><strong>Shipping Temporal: How a Global Rust Ecosystem Built Chrome’s Newest Web API</strong></a></li>
</ul>
</li>
<li>2026-08-13 | Lehi, UT, US | <a href="https://www.meetup.com/utah-rust">Utah Rust</a><ul>
<li><a href="https://www.meetup.com/utah-rust/events/314696652/"><strong>Utah Rust August Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-13 | San Diego, CA, US | <a href="https://www.meetup.com/san-diego-rust">San Diego Rust</a><ul>
<li><a href="https://www.meetup.com/san-diego-rust/events/315601099/"><strong>San Diego Rust August Meetup - Back in person!</strong></a></li>
</ul>
</li>
<li>2026-08-15 | San Francisco, CA, US | <a href="https://flowercomputer.com/">Flower</a><ul>
<li><a href="https://partiful.com/e/juWAwRs3XMWP7s9wLNWK"><strong>BOG-A-THON 3</strong></a></li>
</ul>
</li>
<li>2026-08-18 | San Francisco, CA, US | <a href="https://www.meetup.com/san-francisco-rust-study-group">San Francisco Rust Study Group</a><ul>
<li><a href="https://www.meetup.com/san-francisco-rust-study-group/events/314997215/"><strong>Rust Hacking in Person</strong></a></li>
</ul>
</li>
<li>2026-08-19 | Hybrid (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust">Vancouver Rust</a><ul>
<li><a href="https://www.meetup.com/vancouver-rust/events/314105333/"><strong>Dealing with Dependencies</strong></a></li>
</ul>
</li>
<li>2026-08-19 | San Francisco, CA, US | <a href="https://luma.com/bayarearust">Rust Bay Area</a><ul>
<li><a href="https://luma.com/00f2s7q9"><strong>Rust Bay Area August Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-20 | Hybrid (Seattle, WA, US) | <a href="https://www.meetup.com/join-srug">Seattle Rust User Group</a><ul>
<li><a href="https://www.meetup.com/seattle-rust-user-group/events/314520814/"><strong>August, 2026 SRUG (Seattle Rust User Group) Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-26 | Austin, TX, US | <a href="https://www.meetup.com/rust-atx">Rust ATX</a><ul>
<li><a href="https://www.meetup.com/rust-atx/events/315171660/"><strong>Rust Lunch - Fareground</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#oceania">Oceania</a></h5>
<ul>
<li>2026-07-30 | Melbourne, AU | <a href="https://www.meetup.com/rust-melbourne">Rust Melbourne</a><ul>
<li><a href="https://www.meetup.com/rust-melbourne/events/315039480/"><strong>Rust Melbourne July 2026</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#south-america">South America</a></h5>
<ul>
<li>2026-08-08 | São Paulo, SP | <a href="https://luma.com/calendar/cal-bif2oHITU1aVvsr">Rust-SP</a><ul>
<li><a href="https://luma.com/41oiyhtk"><strong>Rust SP - Aug/2026</strong></a></li>
</ul>
</li>
</ul>
<p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get
it mentioned here. Please remember to add a link to the event too.
Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#jobs">Jobs</a></h4>
<p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/1ttbtf5/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p>
<h3><a class="toclink" href="https://this-week-in-rust.org/atom.xml#quote-of-the-week">Quote of the Week</a></h3>
<blockquote>
<p>So let's talk about what the process has looked like for Netstack3. For 11 months, the team has been ramping up a dogfooding program. At peak, that program has seen about 60 devices running nearly 24/7 in developers' homes.</p>
<p>Again, if this were any other netstack, we would have expected to uncover a giant mountain of bugs in that time. So, over the past year, how many bugs did the team uncover in the field?</p>
<p>Three.</p>
</blockquote>
<p>– <a href="https://joshlf.com/posts/safety-unsafe-world/">Josh Liebow-Feeser on his blog</a></p>
<p>llogiq again has no one to thank for a suggestion, so he is thankful to himself for finding this quote instead.</p>
<p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p>
<p>This Week in Rust is edited by:</p>
<ul>
<li><a href="https://github.com/nellshamrell">nellshamrell</a></li>
<li><a href="https://github.com/llogiq">llogiq</a></li>
<li><a href="https://github.com/ericseppanen">ericseppanen</a></li>
<li><a href="https://github.com/extrawurst">extrawurst</a></li>
<li><a href="https://github.com/U007D">U007D</a></li>
<li><a href="https://github.com/mariannegoldin">mariannegoldin</a></li>
<li><a href="https://github.com/bdillo">bdillo</a></li>
<li><a href="https://github.com/opeolluwa">opeolluwa</a></li>
<li><a href="https://github.com/bnchi">bnchi</a></li>
<li><a href="https://github.com/KannanPalani57">KannanPalani57</a></li>
<li><a href="https://github.com/tzilist">tzilist</a></li>
</ul>
<p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p>
<p><small><a href="https://www.reddit.com/r/rust/comments/1vaibge/this_week_in_rust_662/">Discuss on r/rust</a></small></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[About:Community: Community Roundup: Project Nova, Tab Groups & more]]></title>
<description><![CDATA[Firefox keeps evolving, and the community continues to play a big part in shaping what’s next.
In this edition, you can get an early look at Project Nova through our latest foxfooding opportunity, explore Tab Groups on Android, join the conversation on Mozilla’s latest browser choice research, an...]]></description>
<link>https://tsecurity.de/de/3698404/tools/aboutcommunity-community-roundup-project-nova-tab-groups-more/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698404/tools/aboutcommunity-community-roundup-project-nova-tab-groups-more/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:18 +0200</pubDate>
<content:encoded><![CDATA[<p>Firefox keeps evolving, and the community continues to play a big part in shaping what’s next.</p>
<p>In this edition, you can get an early look at Project Nova through our latest foxfooding opportunity, explore Tab Groups on Android, join the conversation on Mozilla’s latest browser choice research, and meet an Outreachy contributor whose journey reminds us why open source thrives through collaboration.</p>
<p>Get ready to dive in!</p>
<p><b> Hot from the oven: Join Project Nova foxfooding</b></p>
<p>We teased it in the last edition, and now it’s here. <b>Project Nova </b>has finally arrived on Firefox Nightly, and you’re invited to be an early tester! Get a look at Firefox’s refreshed design as we put the finishing touches on the experience ahead of its broader release later this year. If you’re curious about what’s coming next, this is your chance to try it out, share your feedback, and help shape the final product.</p>
<p><a href="https://connect.mozilla.org/t5/discussions/take-project-nova-for-a-spin-in-nightly/td-p/131273">Learn more</a></p>
<p><b> Monthly Community Call today! </b></p>
<p><a href="https://blog.mozilla.org/community/files/2026/07/July-2026.png"><img alt="Mozilla Monthly Community Call banner promo" class="alignnone size-full wp-image-2547" height="720" src="https://blog.mozilla.org/community/files/2026/07/July-2026.png" width="1280"></a></p>
<p>Want to ask questions directly to the people working on Firefox? Join us for today’s Monthly Community Call, where we’ll discuss <b>Project Nova</b> and <b>Firefox performance feature</b> with members of the teams working on these projects. Join the call today, <b>July 29, 2026, at 5:00 PM UTC</b>, and bring your questions!</p>
<p><a href="https://youtube.com/live/eaf6zekj7IA?feature=share">Watch our livestream</a></p>
<p><b> Tab groups arrives on Android</b></p>
<p>You’ve been calling out for tab group functionality on Firefox mobile and now Tab Groups have officially arrived on Firefox for Android! Tab Groups make it easier to organize related tabs into color-coded groups for work, travel, shopping, research, or whatever you’re browsing. Give it a try, and if you have ideas for how it could be even better, let us know on Mozilla Connect.</p>
<p><a href="https://blog.mozilla.org/firefox/tab-groups-android/">Read more</a></p>
<p><b> From the Reddit Community</b></p>
<p>Mozilla recently shared new independent research examining how browser choice is shaped by the design of operating systems. The report explores the obstacles users can encounter when downloading, setting, or continuing to use their preferred browser, and argues that people should be able to choose their browser without unnecessary friction. Read the report, join the discussion, and share your perspective!</p>
<p>And of course, thanks to you for <b><i>choosing</i></b> Firefox!</p>
<p><a href="https://www.reddit.com/r/firefox/comments/1uw88cq/mozilla_published_independent_research_on_browser/">Access the report</a></p>
<p><b> Community spotlight</b></p>
<p>Every contributor starts somewhere. In a recent blog post, <b>Ananya Shree Sharma</b> reflects on her journey through the Outreachy internship with Firefox. From navigating a large open source codebase for the first time to collaborating with mentors, learning new skills, and shipping meaningful improvements. Her story is a reminder that open source is as much about learning, mentorship, and community as it is about writing code. If you’ve ever wondered what it feels like to contribute to Firefox, Ananya’s reflections offer an inspiring look at the experience and the people who make it possible.</p>
<p><a href="https://ananyashreesharma.github.io/outreachyXfirefox/">Read more</a></p>
<hr>
<p>P.S.</p>
<p>Enjoyed these updates? Subscribe to the <a href="https://community.mozilla.org/newsletter">Mozilla Community Newsletter</a> and get the latest updates delivered straight to your inbox.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Servo Blog: June in Servo: real world compat, media queries, SharedWorker, and more!]]></title>
<description><![CDATA[Servo 0.4.0 contains all of the changes we landed in June, which came out to yet another record 558 commits (April: 534, May: 391).
For security fixes, see § Security.

    

We’ve shipped several new web platform features:

‘attr()’, in experimental mode (@Loirooriol, #45041)
‘image()’, ‘closest...]]></description>
<link>https://tsecurity.de/de/3698403/tools/the-servo-blog-june-in-servo-real-world-compat-media-queries-sharedworker-and-more/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698403/tools/the-servo-blog-june-in-servo-real-world-compat-media-queries-sharedworker-and-more/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:18 +0200</pubDate>
<content:encoded><![CDATA[<p><a href="https://github.com/servo/servo/releases/tag/v0.4.0"><strong>Servo 0.4.0</strong></a> contains all of the changes we landed in June, which came out to yet another record <strong>558 commits</strong> (April: 534, May: 391).
For security fixes, see <a href="https://servo.org/blog/2026/07/31/june-in-servo/#security"><strong>§ Security</strong></a>.</p>
<figure>
    <a href="https://servo.org/img/blog/2026-07-diffie.png"><img alt="servoshell 0.4.0 showing several new features: the ‘width’, ‘height’, ‘device-width’, ‘device-height’, and ‘aspect-ratio’ media query features, plus the upgraded ‘attr()’ function, with a box whose ‘background-color’ and ‘width’ are controlled by data attributes that are in turn set by range inputs" src="https://servo.org/img/blog/2026-07-diffie.png"></a>
</figure>
<p>We’ve shipped several new web platform features:</p>
<ul>
<li><strong>‘attr()’</strong>, in <a href="https://book.servo.org/design-documentation/experimental-features.html#experimental-web-platform-features">experimental mode</a> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/45041">#45041</a>)</li>
<li><strong>‘image(&lt;color&gt;)’</strong>, <strong>‘closest-corner’</strong>, and <strong>‘farthest-corner’</strong> in <strong>‘ellipse()’</strong> and <strong>‘circle()’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/45421">#45421</a>)</li>
<li><strong>‘calc()’</strong> and other <a href="https://drafts.csswg.org/css-values/#math">mathematical expressions</a> can now be resolved later than parse time, e.g. <code>sign(1em - 32px)</code> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/45421">#45421</a>)</li>
<li><strong>‘font-feature-settings’</strong> in <strong>‘@font-face’</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/45393">#45393</a>)</li>
<li><strong>‘@media (device-width)’</strong>, <strong>‘@media (device-height)’</strong>, <strong>‘@media (height)’</strong>, <strong>‘@media (aspect-ratio)’</strong>, and their <strong>min-</strong> and <strong>max-</strong> variants (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/nicoburns">@nicoburns</a>, <a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/44978">#44978</a>, <a href="https://github.com/servo/servo/pull/45707">#45707</a>, <a href="https://github.com/servo/servo/pull/45490">#45490</a>)</li>
<li><strong>‘@media (orientation)’</strong> (<a href="https://github.com/nicoburns">@nicoburns</a>, <a href="https://github.com/servo/servo/pull/45707">#45707</a>)</li>
<li><strong>‘@media (pointer)’</strong> and <strong>‘@media (any-pointer)’</strong> (<a href="https://github.com/nicoburns">@nicoburns</a>, <a href="https://github.com/servo/servo/pull/45681">#45681</a>)</li>
<li><strong>‘@media (hover)’</strong> and <strong>‘@media (any-hover)’</strong> (<a href="https://github.com/nicoburns">@nicoburns</a>, <a href="https://github.com/servo/servo/pull/45681">#45681</a>)</li>
</ul>
<p>Plus a bunch of new DOM APIs:</p>
<ul>
<li><strong>Shared­Worker</strong> (<a href="https://github.com/Taym95">@Taym95</a>, <a href="https://github.com/servo/servo/pull/45786">#45786</a>)</li>
<li><strong>console­.dir()</strong> (<a href="https://github.com/Taym95">@Taym95</a>, <a href="https://github.com/servo/servo/pull/45109">#45109</a>)</li>
<li><strong>custom­Element­Registry</strong> on <strong>Document</strong> and <strong>Shadow­Root</strong> (<a href="https://github.com/shubhamg13">@shubhamg13</a>, <a href="https://github.com/servo/servo/pull/45872">#45872</a>)</li>
<li><strong>initialize()</strong> on <strong>Custom­Element­Registry</strong> (<a href="https://github.com/shubhamg13">@shubhamg13</a>, <a href="https://github.com/yezhizhen">@yezhizhen</a>, <a href="https://github.com/servo/servo/pull/45903">#45903</a>)</li>
<li><strong>new Custom­Element­Registry()</strong> (<a href="https://github.com/shubhamg13">@shubhamg13</a>, <a href="https://github.com/servo/servo/pull/45791">#45791</a>, <a href="https://github.com/servo/servo/pull/45550">#45550</a>)</li>
<li><strong>text­Stream()</strong> on <strong>Request</strong>, <strong>Response</strong>, and <strong>Blob</strong> (<a href="https://github.com/yezhizhen">@yezhizhen</a>, <a href="https://github.com/servo/servo/pull/45864">#45864</a>, <a href="https://github.com/servo/servo/pull/45861">#45861</a>)</li>
<li><strong>set­Pointer­Capture()</strong>, <strong>release­Pointer­Capture()</strong>, <strong>has­Pointer­Capture()</strong> on <strong>Element</strong> (<a href="https://github.com/webbeef">@webbeef</a>, <a href="https://github.com/servo/servo/pull/45048">#45048</a>)</li>
<li><strong>on­touch­start</strong>, <strong>on­touch­end</strong>, <strong>on­touch­move</strong>, <strong>on­touch­cancel</strong> on <strong>Element</strong> (<a href="https://github.com/stevennovaryo">@stevennovaryo</a>, <a href="https://github.com/servo/servo/pull/45049">#45049</a>)</li>
<li><strong>crypto­.subtle­.digest()</strong> for <strong>KT128</strong> and <strong>KT256</strong> (<a href="https://github.com/kkoyung">@kkoyung</a>, <a href="https://github.com/servo/servo/pull/45699">#45699</a>)</li>
<li><strong>crypto­.subtle­.get­Public­Key()</strong> for <strong>ML-KEM</strong> and <strong>ML-DSA</strong> (<a href="https://github.com/kkoyung">@kkoyung</a>, <a href="https://github.com/servo/servo/pull/45252">#45252</a>)</li>
</ul>
<p>This is another big update, so here’s an outline:</p>
<ul>
<li>
<p><a href="https://servo.org/blog/2026/07/31/june-in-servo/#you-can-help"><strong>You can help!</strong></a></p>
</li>
<li>
<p><a href="https://servo.org/blog/2026/07/31/june-in-servo/#security"><strong>Security</strong></a></p>
</li>
<li>
<p><a href="https://servo.org/blog/2026/07/31/june-in-servo/#real-world-compat"><strong>Real world compat</strong></a></p>
</li>
<li>
<p><a href="https://servo.org/blog/2026/07/31/june-in-servo/#work-in-progress"><strong>Work in progress</strong></a></p>
</li>
<li>
<p><a href="https://servo.org/blog/2026/07/31/june-in-servo/#embedding-api"><strong>Embedding API</strong></a></p>
</li>
<li>
<p><a href="https://servo.org/blog/2026/07/31/june-in-servo/#for-users-and-developers"><strong>For users and developers</strong></a></p>
</li>
<li>
<p><a href="https://servo.org/blog/2026/07/31/june-in-servo/#more-on-the-web-platform"><strong>More on the web platform</strong></a></p>
</li>
<li>
<p><a href="https://servo.org/blog/2026/07/31/june-in-servo/#garbage-collection-safety"><strong>Garbage collection safety</strong></a></p>
</li>
<li>
<p><a href="https://servo.org/blog/2026/07/31/june-in-servo/#performance-and-stability"><strong>Performance and stability</strong></a></p>
</li>
<li>
<p><a href="https://servo.org/blog/2026/07/31/june-in-servo/#new-contributors"><strong>New contributors</strong></a></p>
</li>
</ul>
<h3>You can help! <a class="header-anchor" href="https://servo.org/blog/2026/07/31/june-in-servo/#you-can-help!">
        <span class="icon hashlink"><i class="fas fa-link"></i></span>
      </a></h3>
<p>Servo is steadily becoming a bigger and busier project every month, and by June 2026, we’ve been reading through <strong>over four times</strong> the commits as we did when we started in September 2023.</p>
<figure>
    <a href="https://servo.org/img/blog/2026-07-commits.png"><img alt="line chart showing how many commits landed in Servo’s main repo each month from September 2023 to June 2026 inclusive. there’s a clear linear trend, from 130 commits up to 551 commits" src="https://servo.org/img/blog/2026-07-commits.png"></a>
</figure>
<p>This is hard work, particularly since there are things we need to know that are often difficult to answer just by reading the changes:</p>
<ul>
<li>
<p><strong>Who does the change affect</strong>, if anyone? Does it affect users, Servo developers, embedders, or some other group?</p>
</li>
<li>
<p><strong>What observable difference does the change make</strong>, if any?</p>
</li>
<li>
<p><strong>Does the feature require any preferences to be enabled</strong>, or is it enabled for everyone by default?</p>
</li>
<li>
<p><strong>Are any real-world websites affected by the change?</strong></p>
</li>
<li>
<p><strong>What issue or broader project is the change related to?</strong> This question is answered by <code>Fixes: #xxxxx</code> or <code>Part of: #xxxxx</code> in the PR description.</p>
</li>
</ul>
<p>Thanks to an initiative by <a href="https://github.com/jdm">@jdm</a>, it’s now easier than ever for you to <strong>help us answer those questions</strong>, using the Servo Highfive bot!
If you’re working on a pull request that you think might be interesting for the next monthly update, even if you’re not 100% sure, tell us about it by following the steps below:</p>
<ol>
<li>
<p>You add the <span><span>monthly update</span></span> label to your pull request, or comment <code><a href="https://github.com/servo-highfive">@servo-highfive</a> monthly update</code></p>
</li>
<li>
<p>Highfive posts a comment asking you some questions</p>
</li>
<li>
<p>You answer those questions in a comment containing <code><a href="https://github.com/servo-highfive">@servo-highfive</a> monthly update answer</code></p>
</li>
</ol>
<h3>Security <a class="header-anchor" href="https://servo.org/blog/2026/07/31/june-in-servo/#security">
        <span class="icon hashlink"><i class="fas fa-link"></i></span>
      </a></h3>
<p>Servo’s JS runtime, <strong>SpiderMonkey 140.10.1</strong>, had several <strong>security bugs</strong> that have been fixed in Servo 0.4.0 with the update to SpiderMonkey 140.11.0 (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/45584">#45584</a>).
For more details, see <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-8388">CVE-2026-8388</a>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-8391">CVE-2026-8391</a>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-8974">CVE-2026-8974</a>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-8975">CVE-2026-8975</a>, and <a href="https://www.mozilla.org/en-US/security/advisories/mfsa2026-48/">MFSA 2026-48</a>.</p>
<p>Several more <strong>security bugs</strong> in Servo’s JS runtime have been fixed in Servo 0.4.0 with the update to SpiderMonkey 140.12.0 (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/45766">#45766</a>).
The exact CVEs that apply to us are not yet known, but for more details, see <a href="https://www.mozilla.org/en-US/security/advisories/mfsa2026-58/">MFSA 2026-58</a>.</p>
<p><strong>RSA</strong> operations in <strong>Subtle­Crypto</strong> now do modular exponentiation in constant time (<a href="https://github.com/kkoyung">@kkoyung</a>, <a href="https://github.com/servo/servo/pull/45631">#45631</a>).
Please note that our RSA implementation is currently vulnerable to the <a href="https://people.redhat.com/~hkario/marvin/">Marvin Attack</a> – for more details, see <a href="https://rustsec.org/advisories/RUSTSEC-2023-0071.html">RUSTSEC-2023-0071</a>.</p>
<p><strong>ML-DSA</strong> operations in <strong>Subtle­Crypto</strong> now do the Decompose step in constant time, fixing <a href="https://rustsec.org/advisories/RUSTSEC-2025-0144.html">RUSTSEC-2025-0144</a> (<a href="https://github.com/kkoyung">@kkoyung</a>, <a href="https://github.com/servo/servo/pull/45294">#45294</a>).</p>
<p>We’ve fixed an HTML injection bug (XSS) in <strong>file:/// directory listings</strong>, which affected file names containing <code>&lt;/script&gt;</code> (<a href="https://github.com/sahvx655-wq">@sahvx655-wq</a>, <a href="https://github.com/servo/servo/pull/45510">#45510</a>).</p>
<h3>Real world compat <a class="header-anchor" href="https://servo.org/blog/2026/07/31/june-in-servo/#real-world-compat">
        <span class="icon hashlink"><i class="fas fa-link"></i></span>
      </a></h3>
<p>Layout correctness has significantly improved on <strong><a href="https://lichess.org/">lichess.org</a></strong>, and many websites have become a lot more readable thanks to our improved handling of <strong>variable fonts</strong> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/45768">#45768</a>), including <strong>Zulip (<a href="https://servo.zulipchat.com/">servo.zulipchat.com</a>)</strong> and <strong>Speedtest (<a href="https://speedtest.net/">speedtest.net</a>)</strong>.</p>
<figure class="_spaced">
    <div class="_peel">
        <div class="_line">
            <div class="_left"><div>v0.3.0</div></div>
            <div class="_right"><div>v0.4.0</div></div>
        </div>
        <img src="https://servo.org/img/blog/2026-07-161705.png">
        <img src="https://servo.org/img/blog/2026-07-161708.png">
    </div>
    <figcaption><a href="https://lichess.org/">lichess.org</a></figcaption>
</figure>
<figure class="_spaced">
    <div class="_peel">
        <div class="_line">
            <div class="_left"><div>v0.3.0</div></div>
            <div class="_right"><div>v0.4.0</div></div>
        </div>
        <img src="https://servo.org/img/blog/2026-07-161115.png">
        <img src="https://servo.org/img/blog/2026-07-161201.png">
    </div>
    <figcaption>Zulip (<a href="https://servo.zulipchat.com/">servo.zulipchat.com</a>)</figcaption>
</figure>
<figure class="_spaced">
    <div class="_peel">
        <div class="_line">
            <div class="_left"><div>v0.3.0</div></div>
            <div class="_right"><div>v0.4.0</div></div>
        </div>
        <img src="https://servo.org/img/blog/2026-07-174050.png">
        <img src="https://servo.org/img/blog/2026-07-174052.png">
    </div>
    <figcaption>Speedtest (<a href="https://speedtest.net/">speedtest.net</a>)</figcaption>
</figure>
<p>Many websites worked in Servo even before version 0.4.0, including <strong>Google Photos (<a href="https://photos.google.com/">photos.google.com</a>)</strong> and Cash Converters (<a href="https://cashconverters.com.au/">cashconverters.com.au</a>), and continue to work in version 0.4.0.
Other websites, like Google Maps (<a href="https://maps.google.com/">maps.google.com</a>) and OpenStreetMap (<a href="https://www.openstreetmap.org/">www.openstreetmap.org</a>), render well but have some issues with interactivity.</p>
<figure class="_spaced _halves">
    <figure class="_spaced">
        <a href="https://servo.org/img/blog/2026-07-175215.png"><img src="https://servo.org/img/blog/2026-07-175215.png"></a>
        <figcaption>Google Photos (<a href="https://photos.google.com/">photos.google.com</a>)</figcaption>
    </figure>
    <figure class="_spaced">
        <a href="https://servo.org/img/blog/2026-07-162341.png"><img src="https://servo.org/img/blog/2026-07-162341.png"></a>
        <figcaption>Cash Converters (<a href="https://cashconverters.com.au/">cashconverters.com.au</a>)</figcaption>
    </figure>
    <figure class="_spaced">
        <a href="https://servo.org/img/blog/2026-07-202258.png"><img src="https://servo.org/img/blog/2026-07-202258.png"></a>
        <figcaption>Google Maps (<a href="https://maps.google.com/">maps.google.com</a>)</figcaption>
    </figure>
    <figure class="_spaced">
        <a href="https://servo.org/img/blog/2026-07-203458.png"><img src="https://servo.org/img/blog/2026-07-203458.png"></a>
        <figcaption>OpenStreetMap (<a href="https://www.openstreetmap.org/">www.openstreetmap.org</a>)</figcaption>
    </figure>
</figure>


<p>We’re interested to hear how well your favourite websites run in Servo!
Report successes in <a href="https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Servo.20web.20compat.20success.20stories/with/612898341">this Zulip thread</a>, and failures <a href="https://github.com/servo/servo/issues">in our GitHub issues</a>.</p>
<h3>Work in progress <a class="header-anchor" href="https://servo.org/blog/2026/07/31/june-in-servo/#work-in-progress">
        <span class="icon hashlink"><i class="fas fa-link"></i></span>
      </a></h3>
<p>We’re implementing the more powerful version of <strong>‘attr()’</strong> that can be used anywhere, not just in ‘content’, under <code>--pref layout­_css­_attr­_enabled</code> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/45041">#45041</a>, <a href="https://github.com/servo/servo/pull/45421">#45421</a>, <a href="https://github.com/servo/servo/pull/45495">#45495</a>, <a href="https://github.com/servo/servo/pull/45752">#45752</a>).</p>
<p><strong>WebGPU</strong> support has improved, under <code>--pref dom­_webgpu­_enabled</code>:</p>
<ul>
<li>implemented <strong>copy­External­Image­To­Texture()</strong> on <strong>GPU­Queue</strong> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/45646">#45646</a>)</li>
<li>implemented <strong>create­Query­Set()</strong> on <strong>GPU­Device</strong> and <strong>resolve­Query­Set()</strong> on <strong>GPU­Command­Encoder</strong> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/45644">#45644</a>)</li>
<li>implemented <strong>push­Debug­Group()</strong>, <strong>pop­Debug­Group()</strong>, and <strong>insert­Debug­Marker()</strong> on <strong>GPU­Command­Encoder</strong>, <strong>GPU­Compute­Pass­Encoder</strong>, and <strong>GPU­Render­Pass­Encoder</strong> (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/45489">#45489</a>)</li>
<li>more conformant <strong>GPU­Texture</strong> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/45300">#45300</a>)</li>
<li>more conformant <strong>request­Adapter()</strong> on <strong>GPU</strong> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/45424">#45424</a>)</li>
<li>more conformant <strong>secure context</strong> enforcement (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/45279">#45279</a>)</li>
</ul>
<p>All of the features above are enabled in servoshell’s <a href="https://book.servo.org/design-documentation/experimental-features.html#experimental-web-platform-features">experimental mode</a>.</p>
<p>We’ve made more progress towards <strong>accessibility</strong> support, under <code>--pref accessibility_enabled</code> (<a href="https://github.com/alice">@alice</a>, <a href="https://github.com/delan">@delan</a>, <a href="https://github.com/servo/servo/pull/45555">#45555</a>, <a href="https://github.com/servo/servo/pull/45554">#45554</a>, <a href="https://github.com/servo/servo/pull/44949">#44949</a>).</p>
<p>We’ve started implementing visible and interactive <strong>text selection</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/SimonSapin">@SimonSapin</a>, <a href="https://github.com/servo/servo/pull/46107">#46107</a>), one of the most long-awaited features of any web browser.
Stay tuned!</p>
<p>We’ve also started working on <strong>Web Animations</strong>, under <code>--pref dom­_web­_animations­_enabled</code> (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/45522">#45522</a>, <a href="https://github.com/servo/servo/pull/45983">#45983</a>), as well as <strong>webkit­Relative­Path</strong> on <strong>File</strong>, under <code>--pref dom­_entries­_api­_enabled</code> (<a href="https://github.com/yezhizhen">@yezhizhen</a>, <a href="https://github.com/servo/servo/pull/45666">#45666</a>).</p>
<p>Rust doesn’t have a stable <a href="https://en.wikipedia.org/wiki/Application_binary_interface">ABI</a>, so it has generally not been possible to embed Servo in another application without building Servo from source.
To make it possible, we’ve started designing a <strong>wrapper C API</strong> that will let you consume Servo as a prebuilt shared library using the stable and ubiquitous C ABI (<a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/44984">#44984</a>).
Eventually the idea is that we’ll create a wrapper Rust API around <em>that</em> wrapper C API, so you can have both the ergonomics of Rust <em>and</em> the build simplicity of C.</p>
<h3>Embedding API <a class="header-anchor" href="https://servo.org/blog/2026/07/31/june-in-servo/#embedding-api">
        <span class="icon hashlink"><i class="fas fa-link"></i></span>
      </a></h3>
<p>New in the <a href="https://doc.servo.org/servo/"><strong>Servo API</strong></a>:</p>
<ul>
<li><a href="https://doc.servo.org/servo/struct.WebView.html"><code>Web­View</code></a>::<a href="https://doc.servo.org/servo/struct.WebView.html#method.rendering_context"><code>rendering­_context</code></a> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/46047">#46047</a>)</li>
</ul>
<p>Breaking changes:</p>
<ul>
<li><a href="https://doc.servo.org/servo/struct.WebView.html"><code>Web­View</code></a>::<code>send­_error</code> has been removed (<a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/45502">#45502</a>) – this method was always meant to be internal, and has become unused after we introduced the new Web­View- and Web­View­Delegate-based API</li>
</ul>
<p>We’ve improved the docs for Web­View, Web­View­Delegate, JS­Value, Alert­Dialog, Allow­Or­Deny­Request, Authentication­Response, Bluetooth­Device­Description, Confirm­Dialog, Console­Log­Level, Create­New­Web­View­Request, Embedder­Control, Embedder­Control­Response, File­Picker, Image, Java­Script­Error­Info, Navigation­Request, Permission­Request, Pixel­Format, Prompt­Dialog, Protocol­Handler­Registration, Protocol­Handler­Update­Registration, Scroll, Select­Element, Select­Element­Request, and Web­View­Vector (<a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/45282">#45282</a>, <a href="https://github.com/servo/servo/pull/45467">#45467</a>).</p>
<h3>For users and developers <a class="header-anchor" href="https://servo.org/blog/2026/07/31/june-in-servo/#for-users-and-developers">
        <span class="icon hashlink"><i class="fas fa-link"></i></span>
      </a></h3>
<p>In servoshell:</p>
<ul>
<li>
<p>the <strong>Android</strong> version now requires <strong>Android 13+</strong> (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/46104">#46104</a>)</p>
</li>
<li>
<p>the <strong>desktop</strong> version now lets you <strong>drag and drop files</strong> to open them (<a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/45454">#45454</a>)</p>
</li>
<li>
<p>the <strong>desktop</strong> version now lets the <strong>tab bar scroll horizontally</strong> if you have too many tabs open, but from one tab hoarder to another, maybe you should reconsider having so many tabs open (<a href="https://github.com/Nylme">@Nylme</a>, <a href="https://github.com/servo/servo/pull/44884">#44884</a>)</p>
</li>
<li>
<p>the <strong>desktop</strong> version enters fullscreen on the monitor containing the window, even if you’ve moved it to a different monitor (<a href="https://github.com/rhit-kapilaar">@rhit-kapilaar</a>, <a href="https://github.com/servo/servo/pull/45556">#45556</a>)</p>
</li>
<li>
<p>the <strong>desktop</strong> UI is more performant, resizes more smoothly, and no longer gets stuck in hovered states (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/45289">#45289</a>, <a href="https://github.com/servo/servo/pull/45456">#45456</a>, <a href="https://github.com/servo/servo/pull/45290">#45290</a>)</p>
</li>
<li>
<p><strong>&lt;select multiple&gt;</strong> should now be interactable on <strong>all desktop platforms</strong> (<a href="https://github.com/alexcat3">@alexcat3</a>, <a href="https://github.com/servo/servo/pull/45419">#45419</a>)</p>
</li>
<li>
<p><code>localhost:&lt;port&gt;</code> now implies <code>http://</code> <strong>in the location bar</strong> and <strong>on the command line</strong>, rather than treating <code>localhost:</code> as an unsupported URL scheme (<a href="https://github.com/SteveSharonSam">@SteveSharonSam</a>, <a href="https://github.com/servo/servo/pull/45729">#45729</a>, <a href="https://github.com/servo/servo/pull/45832">#45832</a>)</p>
</li>
</ul>
<p>When using the Firefox <strong>DevTools</strong>:</p>
<ul>
<li>
<p>in the <strong>Console</strong> tab, <strong>uncaught exceptions</strong> are reported correctly (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/45549">#45549</a>)</p>
</li>
<li>
<p>in the <strong>Console</strong> and <strong>Debugger</strong> tabs, you can now inspect the elements of <strong>nested arrays</strong> and the entries of <strong>Map objects</strong> (<a href="https://github.com/atbrakhi">@atbrakhi</a>, <a href="https://github.com/servo/servo/pull/45435">#45435</a>, <a href="https://github.com/servo/servo/pull/45514">#45514</a>, <a href="https://github.com/servo/servo/pull/45767">#45767</a>)</p>
</li>
<li>
<p>in the <strong>Debugger</strong> tab, the <strong>Scopes</strong> panel now shows any <strong>‘(uninitialized)’</strong> variables, the value of <code>this</code>, and the <strong>global scope</strong> (<a href="https://github.com/atbrakhi">@atbrakhi</a>, <a href="https://github.com/eerii">@eerii</a>, <a href="https://github.com/servo/servo/pull/45824">#45824</a>, <a href="https://github.com/servo/servo/pull/45517">#45517</a>)</p>
</li>
</ul>
<p>We’ve fixed some build issues on <strong>riscv32</strong>, <strong>riscv64</strong>, and <strong>arm64</strong> (<a href="https://github.com/fxzjshm">@fxzjshm</a>, <a href="https://github.com/saschanaz">@saschanaz</a>, <a href="https://github.com/servo/servo/pull/45285">#45285</a>, <a href="https://github.com/servo/servo/pull/45731">#45731</a>), and modernised servoshell for <strong>Android</strong> to use Compose UI and Kotlin (<a href="https://github.com/veyndan">@veyndan</a>, <a href="https://github.com/servo/servo/pull/45923">#45923</a>, <a href="https://github.com/servo/servo/pull/45932">#45932</a>, <a href="https://github.com/servo/servo/pull/45941">#45941</a>, <a href="https://github.com/servo/servo/pull/45982">#45982</a>, <a href="https://github.com/servo/servo/pull/45985">#45985</a>, <a href="https://github.com/servo/servo/pull/46015">#46015</a>, <a href="https://github.com/servo/servo/pull/46035">#46035</a>, <a href="https://github.com/servo/servo/pull/46037">#46037</a>, <a href="https://github.com/servo/servo/pull/46046">#46046</a>, <a href="https://github.com/servo/servo/pull/46053">#46053</a>, <a href="https://github.com/servo/servo/pull/46061">#46061</a>, <a href="https://github.com/servo/servo/pull/46071">#46071</a>, <a href="https://github.com/servo/servo/pull/45641">#45641</a>, <a href="https://github.com/servo/servo/pull/45643">#45643</a>, <a href="https://github.com/servo/servo/pull/45650">#45650</a>, <a href="https://github.com/servo/servo/pull/45665">#45665</a>, <a href="https://github.com/servo/servo/pull/45671">#45671</a>, <a href="https://github.com/servo/servo/pull/45676">#45676</a>, <a href="https://github.com/servo/servo/pull/45679">#45679</a>, <a href="https://github.com/servo/servo/pull/45683">#45683</a>, <a href="https://github.com/servo/servo/pull/45712">#45712</a>, <a href="https://github.com/servo/servo/pull/45713">#45713</a>, <a href="https://github.com/servo/servo/pull/45734">#45734</a>, <a href="https://github.com/servo/servo/pull/45738">#45738</a>).</p>
<p>For developers of Servo itself:</p>
<ul>
<li>
<p><code>mach try --help</code> now lists all of the kinds of <strong>try jobs</strong> you can run (<a href="https://github.com/shubhamg13">@shubhamg13</a>, <a href="https://github.com/servo/servo/pull/45607">#45607</a>)</p>
</li>
<li>
<p><code>mach test-wpt --update-expectations</code> lets you run <strong>Web Platform Tests</strong> and <a href="https://book.servo.org/contributing/testing.html#updating-web-platform-test-expectations"><strong>update expectations</strong></a> in a single command (<a href="https://github.com/TimvdLippe">@TimvdLippe</a>, <a href="https://github.com/servo/servo/pull/45521">#45521</a>), rather than having to run <code>mach test-wpt --log-raw &lt;path&gt;</code> followed by <code>mach update-wpt &lt;path&gt;</code></p>
</li>
</ul>
<h3>More on the web platform <a class="header-anchor" href="https://servo.org/blog/2026/07/31/june-in-servo/#more-on-the-web-platform">
        <span class="icon hashlink"><i class="fas fa-link"></i></span>
      </a></h3>
<p>To allow for more performant scrolling, <strong>‘wheel’ events</strong> are no longer <code>.cancelable</code> unless there are one or more non-<a href="https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#passive"><code>passive</code></a> event listeners (<a href="https://github.com/kunalmohan">@kunalmohan</a>, <a href="https://github.com/servo/servo/pull/45667">#45667</a>).
Note that like in Firefox, ‘wheel’ events are <code>passive</code> by default.</p>
<p><strong>‘dotted’</strong>, <strong>‘dashed’</strong>, and <strong>‘wavy’ text decorations</strong> are now continuous across element boundaries (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/45726">#45726</a>).</p>
<p>We’ve improved the conformance of <strong>&lt;dialog&gt;</strong> (<a href="https://github.com/skyz1">@skyz1</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/45825">#45825</a>, <a href="https://github.com/servo/servo/pull/45761">#45761</a>), <strong>&lt;iframe sandbox&gt;</strong> (<a href="https://github.com/cychronex-labs">@cychronex-labs</a>, <a href="https://github.com/servo/servo/pull/45880">#45880</a>), <strong>&lt;input minlength&gt;</strong> and <strong>&lt;input maxlength&gt;</strong> (<a href="https://github.com/skyz1">@skyz1</a>, <a href="https://github.com/servo/servo/pull/45705">#45705</a>), <strong>CSS gradients</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/43945">#43945</a>), <strong>‘font-style’</strong> and <strong>‘unicode-range’</strong> in <strong>‘<a href="https://github.com/font-face">@font-face</a>’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/45821">#45821</a>), <strong>FontFaceSet</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/45390">#45390</a>, <a href="https://github.com/servo/servo/pull/45382">#45382</a>), <strong>HTML­Input­Element</strong> (<a href="https://github.com/steigeo">@steigeo</a>, <a href="https://github.com/servo/servo/pull/45416">#45416</a>), <strong>Intersection­Observer</strong> (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/45655">#45655</a>, <a href="https://github.com/servo/servo/pull/45659">#45659</a>, <a href="https://github.com/servo/servo/pull/45680">#45680</a>), <strong>new Response()</strong> (<a href="https://github.com/yezhizhen">@yezhizhen</a>, <a href="https://github.com/servo/servo/pull/45953">#45953</a>), <strong>URL.create­Object­URL()</strong> and <strong>URL.revoke­Object­URL()</strong> (<a href="https://github.com/yezhizhen">@yezhizhen</a>, <a href="https://github.com/servo/servo/pull/45182">#45182</a>, <a href="https://github.com/servo/servo/pull/45417">#45417</a>), and <strong>ECDSA</strong> and <strong>Ed25519</strong> in <strong>Subtle­Crypto</strong> (<a href="https://github.com/kkoyung">@kkoyung</a>, <a href="https://github.com/servo/servo/pull/45833">#45833</a>, <a href="https://github.com/servo/servo/pull/46017">#46017</a>).</p>
<p>We’ve fixed bugs related to <strong>&lt;input hidden&gt;</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/45750">#45750</a>), <strong>‘animation-delay’</strong> (<a href="https://github.com/yezhizhen">@yezhizhen</a>, <a href="https://github.com/servo/servo/pull/45013">#45013</a>), <strong>‘clip-path’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/45468">#45468</a>, <a href="https://github.com/servo/servo/pull/45373">#45373</a>), <strong>‘tab-size’</strong> (<a href="https://github.com/SimonSapin">@SimonSapin</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/45309">#45309</a>), <strong>‘width’</strong> and <strong>‘height’</strong> (<a href="https://github.com/RichardTjokroutomo">@RichardTjokroutomo</a>, <a href="https://github.com/servo/servo/pull/44627">#44627</a>), <strong>‘box-shadow: inset’</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/45620">#45620</a>), <strong>‘animation­iteration’ events</strong> (<a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/45990">#45990</a>), <strong>‘click’ events</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/45751">#45751</a>), <strong>‘load’ events</strong> (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/45883">#45883</a>), <strong>‘error’ events</strong> in Worker global scopes (<a href="https://github.com/Gae24">@Gae24</a>, <a href="https://github.com/servo/servo/pull/45829">#45829</a>), and <strong>document­.get­Element­By­Id()</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/servo/servo/pull/45433">#45433</a>).</p>
<h3>Garbage collection safety <a class="header-anchor" href="https://servo.org/blog/2026/07/31/june-in-servo/#garbage-collection-safety">
        <span class="icon hashlink"><i class="fas fa-link"></i></span>
      </a></h3>
<p>We use a <a href="https://doc.servo.org/script_bindings/cell/struct.DomRefCell.html"><strong>RefCell</strong>-based mechanism</a> to store many of our DOM types in other DOM types, enforcing Rust’s “aliasing xor mutability” rule at runtime by panicking if the rule is violated.
But when garbage collection happens, we need to <a href="https://doc.servo.org/script_bindings/cell/struct.DomRefCell.html#method.borrow">borrow()</a> each DomRefCell to trace the references, and this is the source of many panic bugs.
To fix that whole class of bugs, we initially created <strong>CanGc</strong>, a marker type that would annotate the code paths where GC can occur, in conjunction with custom static analysis (<a href="https://github.com/jdm">@jdm</a>, <a href="https://github.com/servo/servo/pull/33140">#33140</a>).</p>
<p>With the Rust type system we can do even better, if we flip that around and require any <a href="https://doc.servo.org/script_bindings/cell/struct.DomRefCell.html#method.borrow_mut">borrow_mut()</a> call to prove that GC can <em>not</em> occur by passing a <strong>NoGC</strong> marker value.
We can then require that a <code>&amp;NoGC</code> must be borrowed from a <code>&amp;JSContext</code> (which blocks GC) and not a <code>&amp;mut JSContext</code> (which allows GC), taking advantage of how Rust references work without needing any custom static analysis.</p>
<p>We have a large codebase that needs to be migrated in parts, so for now we’ve created the new method <a href="https://doc.servo.org/script_bindings/cell/struct.DomRefCell.html#method.safe_borrow_mut">safe­_borrow­_mut()</a> (<a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/servo/servo/pull/46050">#46050</a>).
We also need to update all of our script-related code to borrow our <a href="https://doc.servo.org/script_bindings/import/base/struct.JSContext.html">safe JSContext wrapper</a>, rather than creating an owned JSContext on the spot.</p>
<p>This continues our long-running effort to <strong>use the Rust type system</strong> to make Servo’s integration with SpiderMonkey safer and more reliable (<a href="https://github.com/Gae24">@Gae24</a>, <a href="https://github.com/Keerti707">@Keerti707</a>, <a href="https://github.com/Narfinger">@Narfinger</a>, <a href="https://github.com/TimvdLippe">@TimvdLippe</a>, <a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/guptapiyush16">@guptapiyush16</a>, <a href="https://github.com/ivomurrell">@ivomurrell</a>, <a href="https://github.com/kunalmohan">@kunalmohan</a>, <a href="https://github.com/skyz1">@skyz1</a>, <a href="https://github.com/servo/servo/pull/45230">#45230</a>, <a href="https://github.com/servo/servo/pull/45436">#45436</a>, <a href="https://github.com/servo/servo/pull/45503">#45503</a>, <a href="https://github.com/servo/servo/pull/45617">#45617</a>, <a href="https://github.com/servo/servo/pull/45711">#45711</a>, <a href="https://github.com/servo/servo/pull/45797">#45797</a>, <a href="https://github.com/servo/servo/pull/45800">#45800</a>, <a href="https://github.com/servo/servo/pull/45858">#45858</a>, <a href="https://github.com/servo/servo/pull/45884">#45884</a>, <a href="https://github.com/servo/servo/pull/45937">#45937</a>, <a href="https://github.com/servo/servo/pull/45902">#45902</a>, <a href="https://github.com/servo/servo/pull/45968">#45968</a>, <a href="https://github.com/servo/servo/pull/45977">#45977</a>, <a href="https://github.com/servo/servo/pull/45991">#45991</a>, <a href="https://github.com/servo/servo/pull/46003">#46003</a>, <a href="https://github.com/servo/servo/pull/46005">#46005</a>, <a href="https://github.com/servo/servo/pull/46084">#46084</a>, <a href="https://github.com/servo/servo/pull/45548">#45548</a>, <a href="https://github.com/servo/servo/pull/45552">#45552</a>, <a href="https://github.com/servo/servo/pull/45590">#45590</a>, <a href="https://github.com/servo/servo/pull/45909">#45909</a>, <a href="https://github.com/servo/servo/pull/45912">#45912</a>, <a href="https://github.com/servo/servo/pull/45943">#45943</a>, <a href="https://github.com/servo/servo/pull/46089">#46089</a>, <a href="https://github.com/servo/servo/pull/46117">#46117</a>, <a href="https://github.com/servo/servo/pull/46114">#46114</a>, <a href="https://github.com/servo/servo/pull/45320">#45320</a>, <a href="https://github.com/servo/servo/pull/45324">#45324</a>, <a href="https://github.com/servo/servo/pull/45328">#45328</a>, <a href="https://github.com/servo/servo/pull/45340">#45340</a>, <a href="https://github.com/servo/servo/pull/45381">#45381</a>, <a href="https://github.com/servo/servo/pull/45385">#45385</a>, <a href="https://github.com/servo/servo/pull/45410">#45410</a>, <a href="https://github.com/servo/servo/pull/45392">#45392</a>, <a href="https://github.com/servo/servo/pull/45409">#45409</a>, <a href="https://github.com/servo/servo/pull/45604">#45604</a>, <a href="https://github.com/servo/servo/pull/45616">#45616</a>, <a href="https://github.com/servo/servo/pull/45618">#45618</a>, <a href="https://github.com/servo/servo/pull/45627">#45627</a>, <a href="https://github.com/servo/servo/pull/45636">#45636</a>, <a href="https://github.com/servo/servo/pull/45662">#45662</a>, <a href="https://github.com/servo/servo/pull/45663">#45663</a>, <a href="https://github.com/servo/servo/pull/45675">#45675</a>, <a href="https://github.com/servo/servo/pull/45674">#45674</a>, <a href="https://github.com/servo/servo/pull/45677">#45677</a>, <a href="https://github.com/servo/servo/pull/45684">#45684</a>, <a href="https://github.com/servo/servo/pull/45735">#45735</a>, <a href="https://github.com/servo/servo/pull/45807">#45807</a>, <a href="https://github.com/servo/servo/pull/45810">#45810</a>, <a href="https://github.com/servo/servo/pull/45816">#45816</a>, <a href="https://github.com/servo/servo/pull/45818">#45818</a>, <a href="https://github.com/servo/servo/pull/45828">#45828</a>, <a href="https://github.com/servo/servo/pull/45838">#45838</a>, <a href="https://github.com/servo/servo/pull/45836">#45836</a>, <a href="https://github.com/servo/servo/pull/45837">#45837</a>, <a href="https://github.com/servo/servo/pull/45840">#45840</a>, <a href="https://github.com/servo/servo/pull/45841">#45841</a>, <a href="https://github.com/servo/servo/pull/45857">#45857</a>, <a href="https://github.com/servo/servo/pull/45859">#45859</a>, <a href="https://github.com/servo/servo/pull/45862">#45862</a>, <a href="https://github.com/servo/servo/pull/45875">#45875</a>, <a href="https://github.com/servo/servo/pull/45887">#45887</a>, <a href="https://github.com/servo/servo/pull/45931">#45931</a>, <a href="https://github.com/servo/servo/pull/45964">#45964</a>, <a href="https://github.com/servo/servo/pull/45935">#45935</a>, <a href="https://github.com/servo/servo/pull/45987">#45987</a>, <a href="https://github.com/servo/servo/pull/45988">#45988</a>, <a href="https://github.com/servo/servo/pull/46001">#46001</a>, <a href="https://github.com/servo/servo/pull/46040">#46040</a>, <a href="https://github.com/servo/servo/pull/46051">#46051</a>, <a href="https://github.com/servo/servo/pull/46057">#46057</a>, <a href="https://github.com/servo/servo/pull/46106">#46106</a>, <a href="https://github.com/servo/servo/pull/46125">#46125</a>, <a href="https://github.com/servo/servo/pull/45678">#45678</a>, <a href="https://github.com/servo/servo/pull/46002">#46002</a>, <a href="https://github.com/servo/servo/pull/45845">#45845</a>, <a href="https://github.com/servo/servo/pull/45645">#45645</a>, <a href="https://github.com/servo/servo/pull/45673">#45673</a>, <a href="https://github.com/servo/servo/pull/45259">#45259</a>, <a href="https://github.com/servo/servo/pull/45817">#45817</a>, <a href="https://github.com/servo/servo/pull/45822">#45822</a>, <a href="https://github.com/servo/servo/pull/45876">#45876</a>, <a href="https://github.com/servo/servo/pull/45877">#45877</a>, <a href="https://github.com/servo/servo/pull/45891">#45891</a>).</p>
<h3>Performance and stability <a class="header-anchor" href="https://servo.org/blog/2026/07/31/june-in-servo/#performance-and-stability">
        <span class="icon hashlink"><i class="fas fa-link"></i></span>
      </a></h3>
<p><strong>NoGC</strong> was designed to prevent dynamic borrow failures, but it also enables some performance optimisations!
If we can prove that garbage collection is impossible in some part of Servo, we can often <strong>avoid rooting JavaScript objects</strong> when interacting with them within that region of code.
This has allowed us to reduce overheads by over 1% in the <strong>layout</strong> process and in <strong>HTML­Collection</strong> (<a href="https://github.com/Narfinger">@Narfinger</a>, <a href="https://github.com/servo/servo/pull/46092">#46092</a>, <a href="https://github.com/servo/servo/pull/45582">#45582</a>).</p>
<p>Our <strong>memory usage</strong> has improved, with <strong>BoxFragment</strong> now <strong>17% smaller</strong> (288 → 240 bytes on amd64) and <strong>ShapeCacheEntry</strong> now smaller too (<a href="https://github.com/SimonSapin">@SimonSapin</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/simonwuelker">@simonwuelker</a>, <a href="https://github.com/servo/servo/pull/45183">#45183</a>, <a href="https://github.com/servo/servo/pull/45496">#45496</a>).</p>
<p>We’ve fixed some nasty <strong>memory leaks</strong> when <strong>reloading</strong> and in <strong>2D canvases</strong> (<a href="https://github.com/Taym95">@Taym95</a>, <a href="https://github.com/sagudev">@sagudev</a>, <a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/45455">#45455</a>, <a href="https://github.com/servo/servo/pull/45261">#45261</a>, <a href="https://github.com/servo/servo/pull/45414">#45414</a>).</p>
<p>Speaking of which, <strong>2D canvases</strong> now use up to <strong>23% less power</strong> (<a href="https://github.com/yezhizhen">@yezhizhen</a>, <a href="https://github.com/servo/servo/pull/45301">#45301</a>), and we now avoid rasterising the same SVG more than once (<a href="https://github.com/Narfinger">@Narfinger</a>, <a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/44805">#44805</a>).</p>
<p>Servo now <strong>decodes all images asynchronously</strong> and <strong>fills image caches asynchronously</strong>, leaving script threads (web content processes) more time for other work (<a href="https://github.com/Narfinger">@Narfinger</a>, <a href="https://github.com/servo/servo/pull/45542">#45542</a>, <a href="https://github.com/servo/servo/pull/44483">#44483</a>).
On top of that, we’ve improved <strong>incremental layout</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/45411">#45411</a>) and reduced reflows in <strong>IntersectionObserver</strong> (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/servo/servo/pull/45986">#45986</a>).</p>
<p>We’ve started working on <strong>incremental updates</strong> for the <strong>stacking context tree</strong>, and as a side effect, we’ve made some layout-bound microbenchmarks up to 10% faster (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/45208">#45208</a>).</p>
<p>We’ve also reduced allocations, copies, GC rooting steps, and other operations in many parts of Servo (<a href="https://github.com/Narfinger">@Narfinger</a>, <a href="https://github.com/SimonSapin">@SimonSapin</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/servo/servo/pull/45506">#45506</a>, <a href="https://github.com/servo/servo/pull/45969">#45969</a>, <a href="https://github.com/servo/servo/pull/45940">#45940</a>, <a href="https://github.com/servo/servo/pull/45760">#45760</a>, <a href="https://github.com/servo/servo/pull/46090">#46090</a>, <a href="https://github.com/servo/servo/pull/45335">#45335</a>, <a href="https://github.com/servo/servo/pull/45413">#45413</a>, <a href="https://github.com/servo/servo/pull/45511">#45511</a>).</p>
<p>For several months, Frédéric (<a href="https://github.com/fred-wang">@fred-wang</a>) has been <a href="https://en.wikipedia.org/wiki/Fuzzing"><strong>fuzzing</strong></a> for Servo bugs, and thanks to his work we’ve fixed sixteen (16) <strong>crash bugs</strong> in June, affecting <strong>&lt;iframe&gt;</strong>, <strong>&lt;slot&gt;</strong>, <strong>&lt;link onerror&gt;</strong>, <strong>‘animation’</strong>, <strong>‘clip-path’</strong>, <strong>‘content’</strong>, <strong>‘rotate’</strong>, <strong>‘transition’</strong>, <strong>‘transform-style’</strong>, <strong>‘display: contents’</strong>, <strong>‘overflow: clip’</strong>, <strong>CSS­Keyframes­Rule</strong>, <strong>Font­Face</strong>, <strong>stop() on Window</strong>, <strong>document­.element­From­Point()</strong>, and the <strong>DOM tree</strong> (<a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/Loirooriol">@Loirooriol</a>, <a href="https://github.com/fred-wang">@fred-wang</a>, <a href="https://github.com/servo/servo/pull/46031">#46031</a>, <a href="https://github.com/servo/servo/pull/46027">#46027</a>, <a href="https://github.com/servo/servo/pull/46054">#46054</a>, <a href="https://github.com/servo/servo/pull/46058">#46058</a>, <a href="https://github.com/servo/servo/pull/46016">#46016</a>, <a href="https://github.com/servo/servo/pull/46028">#46028</a>, <a href="https://github.com/servo/servo/pull/46033">#46033</a>, <a href="https://github.com/servo/servo/pull/45287">#45287</a>, <a href="https://github.com/servo/servo/pull/45951">#45951</a>, <a href="https://github.com/servo/servo/pull/45634">#45634</a>, <a href="https://github.com/servo/servo/pull/45629">#45629</a>, <a href="https://github.com/servo/servo/pull/46110">#46110</a>, <a href="https://github.com/servo/servo/pull/46094">#46094</a>, <a href="https://github.com/servo/servo/pull/45799">#45799</a>, <a href="https://github.com/servo/servo/pull/45611">#45611</a>, <a href="https://github.com/servo/servo/pull/45682">#45682</a>, <a href="https://github.com/servo/servo/pull/45788">#45788</a>, <a href="https://github.com/servo/servo/pull/45612">#45612</a>, <a href="https://github.com/servo/servo/pull/45834">#45834</a>).</p>
<p>We’ve also fixed crash bugs related to <strong>IPC</strong> failures, <strong>HTML­Input­Element</strong>, <strong>Range</strong>, the <strong>DevTools</strong> Debugger tab, and when servoshell is built with <code>--features native-bluetooth</code> (<a href="https://github.com/jschwe">@jschwe</a>, <a href="https://github.com/Taym95">@Taym95</a>, <a href="https://github.com/mrobinson">@mrobinson</a>, <a href="https://github.com/atbrakhi">@atbrakhi</a>, <a href="https://github.com/mukilan">@mukilan</a>, <a href="https://github.com/servo/servo/pull/45311">#45311</a>, <a href="https://github.com/servo/servo/pull/45619">#45619</a>, <a href="https://github.com/servo/servo/pull/45765">#45765</a>, <a href="https://github.com/servo/servo/pull/45513">#45513</a>, <a href="https://github.com/servo/servo/pull/45702">#45702</a>).</p>
<h3>New contributors <a class="header-anchor" href="https://servo.org/blog/2026/07/31/june-in-servo/#new-contributors">
        <span class="icon hashlink"><i class="fas fa-link"></i></span>
      </a></h3>
<p>A special thanks to the following people for landing their first patch in Servo:</p>
<ul>
<li>Deepam Goyal (<a href="https://github.com/Deepam02">@Deepam02</a>, <a href="https://github.com/servo/servo/pull/44836">#44836</a>)</li>
<li>Mark (<a href="https://github.com/Mark-Boger">@Mark-Boger</a>, <a href="https://github.com/servo/servo/pull/45486">#45486</a>)</li>
<li>Mr SheerLuck (<a href="https://github.com/MrSheerluck">@MrSheerluck</a>, <a href="https://github.com/servo/servo/pull/45557">#45557</a>)</li>
<li>Psychpsyo (Cameron) (<a href="https://github.com/Psychpsyo">@Psychpsyo</a>, <a href="https://github.com/servo/servo/pull/45494">#45494</a>)</li>
<li>TusharSariya (<a href="https://github.com/TusharSariya">@TusharSariya</a>, <a href="https://github.com/servo/servo/pull/43663">#43663</a>)</li>
<li>Adam Sharif (<a href="https://github.com/adamsharifc">@adamsharifc</a>, <a href="https://github.com/servo/servo/pull/45551">#45551</a>)</li>
<li>Akash Ravikumar (<a href="https://github.com/ak4shravikumar">@ak4shravikumar</a>, <a href="https://github.com/servo/servo/pull/45736">#45736</a>)</li>
<li>Sean Cunneen (<a href="https://github.com/alexcat3">@alexcat3</a>, <a href="https://github.com/servo/servo/pull/45419">#45419</a>)</li>
<li>Abdul Wahab Melethil Shibu (<a href="https://github.com/cychronex-labs">@cychronex-labs</a>, <a href="https://github.com/servo/servo/pull/45880">#45880</a>)</li>
<li>darkdragon-001 (<a href="https://github.com/darkdragon-001">@darkdragon-001</a>, <a href="https://github.com/servo/servo/pull/45267">#45267</a>)</li>
<li>Frédéric Wang Nélar (<a href="https://github.com/fred-wang">@fred-wang</a>, <a href="https://github.com/servo/servo/pull/45834">#45834</a>)</li>
<li>fxzjshm (<a href="https://github.com/fxzjshm">@fxzjshm</a>, <a href="https://github.com/servo/servo/pull/45285">#45285</a>)</li>
<li>Piyush Gupta (<a href="https://github.com/guptapiyush16">@guptapiyush16</a>, <a href="https://github.com/servo/servo/pull/45845">#45845</a>)</li>
<li>Ivo Murrell (<a href="https://github.com/ivomurrell">@ivomurrell</a>, <a href="https://github.com/servo/servo/pull/45645">#45645</a>)</li>
<li>rhit-kapilaar (<a href="https://github.com/rhit-kapilaar">@rhit-kapilaar</a>, <a href="https://github.com/servo/servo/pull/45556">#45556</a>)</li>
<li>sahvx655-wq (<a href="https://github.com/sahvx655-wq">@sahvx655-wq</a>, <a href="https://github.com/servo/servo/pull/45510">#45510</a>)</li>
<li>Kagami Sascha Rosylight (<a href="https://github.com/saschanaz">@saschanaz</a>, <a href="https://github.com/servo/servo/pull/45731">#45731</a>)</li>
<li>shangguanmachine-dot (<a href="https://github.com/shangguanmachine-dot">@shangguanmachine-dot</a>, <a href="https://github.com/servo/servo/pull/45310">#45310</a>)</li>
<li>Glenn Skrzypczak (<a href="https://github.com/skyz1">@skyz1</a>, <a href="https://github.com/servo/servo/pull/45471">#45471</a>)</li>
<li>Oskar Steiger (<a href="https://github.com/steigeo">@steigeo</a>, <a href="https://github.com/servo/servo/pull/45416">#45416</a>)</li>
<li>Veyndan Stuart (<a href="https://github.com/veyndan">@veyndan</a>, <a href="https://github.com/servo/servo/pull/45326">#45326</a>)</li>
</ul>
<p>Interested in helping build a web browser?
Take a look at our <a href="https://starters.servo.org/">curated list</a> of issues that are good for new contributors!</p>
<h3>Donations <a class="header-anchor" href="https://servo.org/blog/2026/07/31/june-in-servo/#donations">
        <span class="icon hashlink"><i class="fas fa-link"></i></span>
      </a></h3>
<p>Thanks again for your generous support!
We are now receiving <strong>7681 USD/month</strong> (+0.2% from May) in recurring donations.
This helps us cover the cost of our <strong><a href="https://ci0.servo.org/">speedy</a> <a href="https://ci1.servo.org/">CI</a> <a href="https://ci2.servo.org/">and</a> <a href="https://ci3.servo.org/">benchmarking</a> <a href="https://ci4.servo.org/">servers</a></strong>, one of our latest <strong><a href="https://www.outreachy.org/alums/2026-05/#:~:text=Servo">Outreachy interns</a></strong>, and funding <strong><a href="https://servo.org/blog/2025/09/17/your-donations-at-work-funding-jdm/">maintainer work</a></strong> that helps more people contribute to Servo.</p>
<p>Servo is also on <a href="https://thanks.dev/">thanks.dev</a>, and already <strong>35 GitHub users</strong> (same as May) that depend on Servo are sponsoring us there.
If you use Servo libraries like <a href="https://crates.io/crates/url/reverse_dependencies">url</a>, <a href="https://crates.io/crates/html5ever/reverse_dependencies">html5ever</a>, <a href="https://crates.io/crates/selectors/reverse_dependencies">selectors</a>, or <a href="https://crates.io/crates/cssparser/reverse_dependencies">cssparser</a>, signing up for <a href="https://thanks.dev/">thanks.dev</a> could be a good way for you (or your employer) to give back to the community.</p>
<p>We now have <a href="https://servo.org/blog/2025/11/21/sponsorship-tiers/"><strong>sponsorship tiers</strong></a> that allow you or your organisation to donate to the Servo project with public acknowlegement of your support.
If you’re interested in this kind of sponsorship, please contact us at <a href="mailto:join@servo.org">join@servo.org</a>.</p>
<figure class="_fig"><div class="_flex">
    <div>
        <div><strong>7681</strong> USD/month</div>
        <div></div>
        <div></div>
        <div><strong>10000</strong></div>
    </div>
    <progress max="10000" value="7681"></progress>
</div></figure>
<p>Use of donations is decided transparently via the Technical Steering Committee’s public <strong><a href="https://github.com/servo/project/blob/main/FUNDING_REQUEST.md">funding request process</a></strong>, and active proposals are tracked in <a href="https://github.com/servo/project/issues/187">servo/project#187</a>.
For more details, head to our <a href="https://servo.org/sponsorship/">Sponsorship page</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mobile Progress Report: July 2026]]></title>
<description><![CDATA[Thunderbird Mobile is moving forward with large steps on both platforms we support. On iOS, we’re working on the very foundation of a new app—our first built from scratch—and continuing to make progress in bringing the Thunderbird for iOS app to the App Store. For Android, it’s a matter of updati...]]></description>
<link>https://tsecurity.de/de/3698402/tools/mobile-progress-report-july-2026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3698402/tools/mobile-progress-report-july-2026/</guid>
<pubDate>Mon, 03 Aug 2026 00:10:17 +0200</pubDate>
<content:encoded><![CDATA[<p>Thunderbird Mobile is moving forward with large steps on both platforms we support. On iOS, we’re working on the very foundation of a new app—our first built from scratch—and continuing to make progress in bringing the Thunderbird for iOS app to the App Store. For Android, it’s a matter of updating what we have in […]</p>
<p>The post <a href="https://blog.thunderbird.net/2026/07/mobile-progress-report-july-2026/">Mobile Progress Report: July 2026</a> appeared first on <a href="https://blog.thunderbird.net/">The Thunderbird Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[1,500 curl authors]]></title>
<description><![CDATA[It takes a village to make curl. A rather big village. I have not been a solo maintainer of curl for a long time and I don’t even do half of the commits anymore Since today, the curl git repository holds the accumulated efforts from 1,500 separate and named individuals. Only 4.5 years since we … ...]]></description>
<link>https://tsecurity.de/de/3694038/tools/1500-curl-authors/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3694038/tools/1500-curl-authors/</guid>
<pubDate>Sat, 25 Jul 2026 16:32:52 +0200</pubDate>
<content:encoded><![CDATA[It takes a village to make curl. A rather big village. I have not been a solo maintainer of curl for a long time and I don’t even do half of the commits anymore Since today, the curl git repository holds the accumulated efforts from 1,500 separate and named individuals. Only 4.5 years since we … <a href="https://daniel.haxx.se/blog/2026/07/25/1500-curl-authors/" class="more-link">Continue reading <span class="screen-reader-text">1,500 curl authors</span> <span class="meta-nav">→</span></a>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Rust Programming Language Blog: Announcing Rust 1.96.0]]></title>
<description><![CDATA[The Rust team is happy to announce a new version of Rust, 1.96.0. Rust is a programming language empowering everyone to build reliable and efficient software.
If you have a previous version of Rust installed via rustup, you can get 1.96.0 with:
$ rustup update stable
If you don't have it already,...]]></description>
<link>https://tsecurity.de/de/3693296/tools/the-rust-programming-language-blog-announcing-rust-1960/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693296/tools/the-rust-programming-language-blog-announcing-rust-1960/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:36 +0200</pubDate>
<content:encoded><![CDATA[<p>The Rust team is happy to announce a new version of Rust, 1.96.0. Rust is a programming language empowering everyone to build reliable and efficient software.</p>
<p>If you have a previous version of Rust installed via <code>rustup</code>, you can get 1.96.0 with:</p>
<pre class="giallo z-code"><code><span class="giallo-l"><span>$</span><span> rustup update stable</span></span></code></pre>
<p>If you don't have it already, you can <a href="https://www.rust-lang.org/install.html" rel="external">get <code>rustup</code></a> from the appropriate page on our website, and check out the <a href="https://doc.rust-lang.org/stable/releases.html#version-1960-2026-05-28" rel="external">detailed release notes for 1.96.0</a>.</p>
<p>If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel (<code>rustup default beta</code>) or the nightly channel (<code>rustup default nightly</code>). Please <a href="https://github.com/rust-lang/rust/issues/new/choose" rel="external">report</a> any bugs you might come across!</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/#what-s-in-1-96-0-stable"></a>
What's in 1.96.0 stable</h3>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/#new-range-types"></a>
New <code>Range*</code> types</h4>
<p>Many users expect <code>Range</code> and related <code>core::ops</code> types to be <code>Copy</code>, but this is not the case: they implement <code>Iterator</code> directly, and <a href="https://rust-lang.github.io/rust-clippy/rust-1.95.0/index.html#copy_iterator" rel="external">it is a footgun to implement both <code>Iterator</code> and <code>Copy</code> on the same type</a> so this has been avoided. <a href="https://rust-lang.github.io/rfcs/3550-new-range.html" rel="external">RFC3550</a> proposed a set of replacement range types that implement <code>IntoIterator</code> rather than <code>Iterator</code>, meaning they can also be <code>Copy</code>. The standard library portion of that RFC is now stable, introducing:</p>
<ul>
<li><code>core::range::Range</code></li>
<li><code>core::range::RangeFrom</code></li>
<li><code>core::range::RangeInclusive</code></li>
<li>Associated iterators</li>
</ul>
<p>A Rust version in the near future will also add <code>core::range::RangeFull</code> and <code>core::range::RangeTo</code> as re-exports from <code>core::ops</code> (these do not implement <code>Iterator</code> and already implement <code>Copy</code>), and <code>core::range::legacy::*</code> as the new home for the current ranges. Range syntax like <code>0..1</code> still produces the legacy types for now, but will be updated to <code>core::range</code> types in a future edition.</p>
<p>With these stabilizations, it is now possible to store slice accessors in <code>Copy</code> types without splitting <code>start</code> and <code>end</code>:</p>
<pre class="giallo z-code"><code><span class="giallo-l"><span class="z-keyword">use</span><span class="z-entity z-name z-namespace"> core</span><span class="z-keyword z-operator">::</span><span class="z-entity z-name z-namespace">range</span><span class="z-keyword z-operator">::</span><span class="z-entity z-name z-type">Range</span><span>;</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span>#</span><span>[</span><span>derive</span><span>(</span><span class="z-entity z-name z-type">Clone</span><span>,</span><span class="z-entity z-name z-type"> Copy</span><span>)</span><span>]</span></span>
<span class="giallo-l"><span class="z-keyword">pub</span><span class="z-storage z-type"> struct</span><span class="z-entity z-name z-type"> Span</span><span>(</span><span class="z-entity z-name z-type">Range</span><span>&lt;</span><span class="z-entity z-name z-type">usize</span><span>&gt;</span><span>)</span><span>;</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span class="z-keyword">impl</span><span class="z-entity z-name z-type"> Span</span><span> {</span></span>
<span class="giallo-l"><span class="z-keyword">    pub</span><span class="z-keyword"> fn</span><span class="z-entity z-name z-function"> of</span><span>(</span><span class="z-variable z-language">self</span><span>,</span><span class="z-variable"> s</span><span class="z-keyword z-operator">:</span><span class="z-keyword z-operator"> &amp;</span><span class="z-entity z-name z-type">str</span><span>)</span><span class="z-keyword z-operator"> -&gt;</span><span class="z-keyword z-operator"> &amp;</span><span class="z-entity z-name z-type">str</span><span> {</span></span>
<span class="giallo-l"><span class="z-keyword z-operator">        &amp;</span><span class="z-variable">s</span><span>[</span><span class="z-variable z-language">self</span><span class="z-keyword z-operator">.</span><span class="z-constant z-numeric">0</span><span>]</span></span>
<span class="giallo-l"><span>    }</span></span>
<span class="giallo-l"><span>}</span></span></code></pre>
<p>The new <code>RangeInclusive</code> also makes its fields public, unlike the legacy version which avoided exposing the exhausted iterator state. This isn't a concern with the new type since it must be converted to begin iteration.</p>
<p>Library authors should consider making use of <code>impl RangeBounds</code> in public API, which accepts both legacy and new range types. If a concrete type is needed, prefer using new ranges as this will eventually become the default.</p>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/#assert-matching-patterns"></a>
Assert matching patterns</h4>
<p>The new macros <code>assert_matches!</code> and <code>debug_assert_matches!</code> check that a value matches a given pattern, panicking with a <code>Debug</code> representation of the value otherwise. These are essentially the same as <code>assert!(matches!(..))</code> and <code>debug_assert!(matches!(..))</code>, but the printed value improves the possibility of diagnosing the failure.</p>
<p>These new macros have not been added to the standard prelude, because they would collide with popular third-party crates that provide macros with the same name. Instead, they should be manually imported from <code>core</code> or <code>std</code> before use.</p>
<pre class="giallo z-code"><code><span class="giallo-l"><span class="z-keyword">use</span><span class="z-entity z-name z-namespace"> core</span><span class="z-keyword z-operator">::</span><span>assert_matches</span><span>;</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span class="z-punctuation z-definition z-comment z-comment">///</span><span class="z-comment"> [Random Number](https://xkcd.com/221/)</span></span>
<span class="giallo-l"><span class="z-keyword">fn</span><span class="z-entity z-name z-function"> get_random_number</span><span>(</span><span>)</span><span class="z-keyword z-operator"> -&gt;</span><span class="z-entity z-name z-type"> u32</span><span> {</span></span>
<span class="giallo-l"><span class="z-punctuation z-definition z-comment z-comment">    //</span><span class="z-comment z-line z-double-slash z-comment"> chosen by a fair dice roll.</span></span>
<span class="giallo-l"><span class="z-punctuation z-definition z-comment z-comment">    //</span><span class="z-comment z-line z-double-slash z-comment"> guaranteed to be random.</span></span>
<span class="giallo-l"><span class="z-constant z-numeric">    4</span></span>
<span class="giallo-l"><span>}</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span class="z-keyword">fn</span><span class="z-entity z-name z-function"> main</span><span>(</span><span>)</span><span> {</span></span>
<span class="giallo-l"><span class="z-entity z-name z-function">    assert_matches!</span><span>(</span><span class="z-entity z-name z-function">get_random_number</span><span>(</span><span>)</span><span>,</span><span class="z-constant z-numeric"> 1</span><span class="z-keyword z-operator">..=</span><span class="z-constant z-numeric">6</span><span>)</span><span>;</span></span>
<span class="giallo-l"><span>}</span></span></code></pre><h4><a class="anchor" href="https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/#changes-to-webassembly-targets"></a>
Changes to WebAssembly targets</h4>
<p>WebAssembly targets no longer pass <code>--allow-undefined</code> to the linker which means that undefined symbols when linking are now a linker error instead of being converted to WebAssembly imports from the <code>"env"</code> module. This change prevents modules from linking unless all linking-related symbols are defined to catch bugs earlier and prevent accidental issues with symbol naming or similar.</p>
<p>Undefined linking-related symbols are often indicative of build-time related bugs or misconfiguration. If, however, the old behavior is intended then it can be re-enabled with <code>RUSTFLAGS=-Clink-arg=--allow-undefined</code> or by editing the source code and using <code>#[link(wasm_import_module = "env")]</code> on the block defining the symbol.</p>
<p>This change was <a href="https://blog.rust-lang.org/2026/04/04/changes-to-webassembly-targets-and-handling-undefined-symbols/" rel="external">previously announced</a> on this blog, and now takes effect in Rust 1.96.</p>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/#stabilized-apis"></a>
Stabilized APIs</h4>
<ul>
<li><a href="https://doc.rust-lang.org/stable/std/macro.assert_matches.html" rel="external"><code>assert_matches!</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/macro.debug_assert_matches.html" rel="external"><code>debug_assert_matches!</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/panic/struct.AssertUnwindSafe.html#impl-From%3CT%3E-for-AssertUnwindSafe%3CT%3E" rel="external"><code>From&lt;T&gt; for AssertUnwindSafe&lt;T&gt;</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/cell/struct.LazyCell.html#impl-From%3CT%3E-for-LazyCell%3CT,+F%3E" rel="external"><code>From&lt;T&gt; for LazyCell&lt;T, F&gt;</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/sync/struct.LazyLock.html#impl-From%3CT%3E-for-LazyLock%3CT,+F%3E" rel="external"><code>From&lt;T&gt; for LazyLock&lt;T, F&gt;</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/core/range/struct.RangeToInclusive.html" rel="external"><code>core::range::RangeToInclusive</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/core/range/struct.RangeFrom.html" rel="external"><code>core::range::RangeFrom</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/core/range/struct.RangeFromIter.html" rel="external"><code>core::range::RangeFromIter</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/core/range/struct.Range.html" rel="external"><code>core::range::Range</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/core/range/struct.RangeIter.html" rel="external"><code>core::range::RangeIter</code></a></li>
</ul>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/#two-cargo-advisories"></a>
Two Cargo advisories</h4>
<p>Rust 1.96 contains fixes for two vulnerabilities for users of third-party registries.</p>
<ul>
<li>
<p><a href="https://blog.rust-lang.org/2026/05/25/cve-2026-5223/" rel="external">CVE-2026-5223</a> is a <strong>medium</strong> severity vulnerability regarding extraction of crate tarballs with symlinks.</p>
</li>
<li>
<p><a href="https://blog.rust-lang.org/2026/05/25/cve-2026-5222/" rel="external">CVE-2026-5222</a> is a <strong>low</strong> severity vulnerability regarding authentication with normalized URLs.</p>
</li>
</ul>
<p>Users of crates.io are <strong>not affected</strong> by either vulnerability.</p>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/#other-changes"></a>
Other changes</h4>
<p>Check out everything that changed in <a href="https://github.com/rust-lang/rust/releases/tag/1.96.0" rel="external">Rust</a>, <a href="https://doc.rust-lang.org/nightly/cargo/CHANGELOG.html#cargo-196-2026-05-28" rel="external">Cargo</a>, and <a href="https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-196" rel="external">Clippy</a>.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/05/28/Rust-1.96.0/#contributors-to-1-96-0"></a>
Contributors to 1.96.0</h3>
<p>Many people came together to create Rust 1.96.0. We couldn't have done it without all of you. <a href="https://thanks.rust-lang.org/rust/1.96.0/" rel="external">Thanks!</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Nightly: Backup for a Rainy Day – These Weeks in Firefox: Issue 202]]></title>
<description><![CDATA[Highlights

The profile backup mechanism has been enabled by default for all desktop platforms in Nightly, as well as Beta! The current plan is to have this ride out to Firefox 151 for Windows, macOS and Linux on May 18th!

This feature, when enabled, will create a copy of your profile data in th...]]></description>
<link>https://tsecurity.de/de/3693295/tools/firefox-nightly-backup-for-a-rainy-day-these-weeks-in-firefox-issue-202/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693295/tools/firefox-nightly-backup-for-a-rainy-day-these-weeks-in-firefox-issue-202/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:35 +0200</pubDate>
<content:encoded><![CDATA[<h3>Highlights</h3>
<ul>
<li>The profile backup mechanism has been enabled by default for all desktop platforms in Nightly, as well as Beta! The current plan is to have this ride out to Firefox 151 for Windows, macOS and Linux on May 18th!
<ul>
<li>This feature, when enabled, will create a copy of your profile data in the background and store it in a single file on your file system that you can restore from.</li>
<li>You will be able to manage this feature in Settings under Sync (for now)
<ul>
<li><a href="https://blog.nightly.mozilla.org/files/2026/06/image6.png"><img alt="Firefox settings page showing the Backup feature in dark mode. Backup is enabled, with details of the most recent backup and a “Backup now” button. The page displays the backup file name and a backup location folder path, along with “Choose…” and “Show in folder” buttons. A “Sensitive data” section includes an option to back up passwords and payment methods with encryption, and a disabled “Change password” button." class="aligncenter size-full wp-image-2074" height="517" src="https://blog.nightly.mozilla.org/files/2026/06/image6.png" width="657"></a></li>
</ul>
</li>
<li><a href="https://support.mozilla.org/kb/firefox-backup">You can read more about the feature here</a></li>
</ul>
</li>
<li>As followups to the recent addition to the WebExtension tabs API to <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Working_with_the_Tabs_API#working_with_tab_split_views">support the new SplitView tabs feature</a>, tabs.group() and tabs.ungroup() have been fixed to work correctly with split view tabs, and fixed split views being prepended instead of appended to tab groups when adopted into a new window –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2029099"> Bug 2029099</a> /<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2029534"> Bug 2029534</a></li>
<li>Adaptive autofill has been enabled on Nightly.
<ul>
<li>Previously, autofill only completed domains (e.g. typing red autofilled<a href="http://reddit.com/"> reddit.com</a>). Now it can also complete full URLs for pages you visit often (e.g. red →<a href="http://reddit.com/r/firefox"> reddit.com/r/firefox</a>), learning from what you actually click in the address bar. If a suggestion isn’t helpful, you can now dismiss it so autofill learns what not to show you too.
<ul>
<li>If you run into issues or have feedback, <a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Firefox&amp;component=Address+Bar">you can file a bug here</a>!</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=293943">Markus Stange [:mstange]</a> implemented dynamic toolbar on top in RDM (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1978145">#1978145</a>), but also implemented some static skeleton UI so it’s closer to what we actually have in Firefox for Android
<ul>
<li>dynamic toolbar is behind a pref: devtools.responsive.dynamicToolbar.enabled</li>
<li>it can be put on top by setting devtools.responsive.dynamicToolbar.onTop, otherwise it’s at the bottom</li>
<li><a href="https://blog.nightly.mozilla.org/files/2026/06/image1.png"><img alt="Firefox Responsive Design Mode on Desktop displaying the Mozilla homepage in a mobile viewport. The toolbar at the top shows a simulated Android device (including the dynamic toolbar) with a viewport size of 376 × 464 pixels and a device pixel ratio of 3. The page content is shown in French, featuring the Mozilla logo, a “Menu” link, a “Pause animation” button, and the headline “Bienvenue chez Mozilla” with accompanying text about trusted technology and digital rights." class="aligncenter size-full wp-image-2069" height="1113" src="https://blog.nightly.mozilla.org/files/2026/06/image1.png" width="882"></a></li>
</ul>
</li>
</ul>
<h3>Friends of the Firefox team</h3>
<h3><a href="https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20(excluding%20employees)&amp;quicksearch=958957%2C1876109%2C1997388%2C2000797%2C1950995%2C1986020%2C2018272%2C2018276%2C2021681%2C2027969%2C2022115%2C1999012%2C2016058%2C2026585%2C2023913%2C2028167%2C2028293%2C2028927%2C1998002%2C2011343%2C1997925%2C2026574%2C2029398%2C2029684%2C1948019%2C2008756%2C2022601%2C2026032%2C2030428%2C1968244%2C1975391%2C944228%2C1962904%2C1977741%2C1997346%2C2027867%2C2030631%2C1807516%2C2030998%2C2030999%2C2015491%2C2028153%2C2028628%2C1978290%2C2008128%2C2024033%2C1883497%2C1984679%2C2030069%2C2031162%2C2031598%2C2012399%2C2031116%2C2031128%2C2031931%2C2031961%2C2033173%2C2032997%2C1919387%2C1947679%2C2027915%2C2032196%2C2019561%2C2024187%2C1392125%2C1993844%2C2027060%2C1983408%2C2034178%2C1873954%2C1875083%2C2008119%2C2008197%2C1628669%2C2031599%2C2033820">Resolved bugs (excluding employees)</a></h3>
<p><a href="https://github.com/niklasbaumgardner/NewContributorScraper">Script to find new contributors from bug list</a></p>
<h4>Volunteers that fixed more than one bug</h4>
<ul>
<li>Amin Amir</li>
<li>aoia7rz7l</li>
<li>Chukwuka Rosemary</li>
<li>DrSeed</li>
<li>Frédéric Wang Nélar</li>
<li>japandi</li>
<li>John Iweh</li>
<li>jonathancabera</li>
<li>Josh Aas</li>
<li>Keji Bakare</li>
<li>kofoworola shonuyi</li>
<li>konyhéa</li>
<li>liz</li>
<li>Mathew Hodson</li>
<li>Okhuomon Ajayi</li>
<li>Oluwatobi</li>
<li>ROSHAAN</li>
<li>Sam Johnson</li>
</ul>
<h4>New contributors (🌟 = first patch)</h4>
<ul>
<li> Anthony Mclamb:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2027915"> Disable the legacy Edge migrator</a></li>
<li> Amin Amir
<ul>
<li>🌟<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031599">Fix browsingContext.sys.mjs to assign to #contextCreatedHandled instead of contextCreatedHandled</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2033820">Fix missing WITHOUT ROWID SQLite performance optimization in SERPCategorization.sys.mjs</a></li>
<li>🌟 Amine Zroual:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1392125"> Omitted maxResults property not handled correctly in getRecentlyClosed</a></li>
</ul>
</li>
<li>any1here:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031162"> install_sig_alt_stack incorrectly checks mmap’s return value</a></li>
<li>🌟 Armin Ulrich:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031598"> Fix MessageHandlerRegistry.sys.mjs calling getExistingMessageHandler with an unused second argument</a></li>
<li>japandi
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1628669">Cannot remove amazon.com from top sites list</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1977741">The height of the pinned tabs area should be responsive to the number of pins</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1986020">Use cenum for nsIHelperAppLauncherDialog reason constants to enable better typescript annotations</a></li>
</ul>
</li>
<li>Nathan Johnson [:narjoDev]:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1950995"> Remove browser.display.use_system_colors pref</a></li>
<li>DrSeed
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1962904">Firefox shows vertical tabs in new windows despite “Hide tabs and sidebar” setting</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1968244">The “Expand sidebar on hover” option is not kept after the vertical tabs are disabled and enabled again</a></li>
</ul>
</li>
<li>Keji Bakare:
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2008756">Split view’s focus-outline is clipped on the right side of left tab</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031116">White space on the right side of left panel in split view</a></li>
</ul>
</li>
<li>🌟 gotyaoi:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1807516"> Reload toolbar button is active on about:newtab</a></li>
<li>Itoro James:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2015491"> [A11y][Keyboard Navigation]Cancelling a note via Keyboard Navigation still saves it</a></li>
<li>John Iweh:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1997925"> The notification dot is not displayed if the tab is in a Split View</a></li>
<li>🌟 John Iweh:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2027867"> sidebar-shown attribute remains when sidebar.revamp is false</a></li>
<li>🌟 jonathancabera:
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2012399">The Move tab to Split View option is also displayed for the tabs that are within the Split View</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2016058">A Note with long text (1003 characters) is saved by pressing ENTER even if the “Save” button is disabled</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2026032">Tab group guide line becomes disconnected under certain conditions related to split views in vertical tab mode</a></li>
</ul>
</li>
<li>Aloys:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2000797"> Remove logic that forces distribution language packs to be reinstalled when upgrading from Firefoxes older than 67</a></li>
<li>liz:
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1875083">Create test to ensure maxRenderCountEstimate is never being set to Infinity in virtual-list component in Fx View</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2008119">Button accessible name does not convey its function: missing topic context (Settings dialog &gt; Topics dialog &gt; buttons Following/Unfollow/Blocked/Unblock)</a></li>
</ul>
</li>
<li>Mary cathline:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2022115"> Tab Group Label does not respect touch density in vertical tab bar</a></li>
<li>🌟 Brandon Lucier:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2030631"> Popups opened with window.open give window type normal instead of popup</a></li>
<li>karan68:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1997388"> [dialog] New Shortcut dialog needs a label/accessible name</a></li>
<li>🌟 Vector:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2008128"> Button does not programmatically indicate that it opens a dialog (Recent activity section &gt; story card &gt; ••• disclosure &gt; Delete from History button)</a></li>
<li>🌟 Osoble:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1876109"> Update font size and weight for synced tabs device name headers in Firefox View</a></li>
<li>konyhéa:
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1873954">Add test for sync admin disabled to browser_syncedtabs_errors_firefoxview.js</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1883497">Check all second paramaters for TestUtils.waitForCondition in Fx View test files</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2030069">Recently Closed Tabs, Tabs from Other Devices, and History pages should have Cmd / Ctrl + Click on a link open the link in the new background tab.</a></li>
</ul>
</li>
<li>Noble Chinonso: <a href="http://sidebartreeview.js/">#shouldHandleEvent in SidebarTreeView.js compares event.keyCode to string values, causing Home/End keys to never be handled</a></li>
<li>Pranjali Srivastava:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=944228"> Add a test to verify that the space above tabs is consistent across PB, LWT and sizemode (where appropriate)</a></li>
<li>Okhuomon Ajayi:
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2018272">More spacing is needed between the tab note icon and the close icon on the tab</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2019561">The tabs in vertical mode collapsed state are positioned differently in Split View</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2027060">Keep vertical split view tabs stacked vertically even when the sidebar is expanded when expand on hover is enabled</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2029684">Vertical split view tabs can be too big or small when tabs are overflowing</a></li>
</ul>
</li>
<li>🌟 Rishan:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2030428"> Fix duplicated arrow function in browser_history_sidebar.js</a></li>
<li>Chukwuka Rosemary:
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1948019">“Forget About This Site” context menu option missing from Firefox View history</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2026574">Long strings are not displayed properly on the about:opentabs page search filed</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2028153">Add test for Forget This Site option in Fxview history context menu.</a></li>
</ul>
</li>
<li>ROSHAAN:
<ul>
<li>🌟<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2018276">Tab note background colour is incorrect for default light theme</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1997346"> [win/linux] The splitter between content areas does not match Figma spec</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2028927">Fix typo in OpenInTabsUtils.confirmOpenInTabs()</a></li>
</ul>
</li>
<li>Sameeksha:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2008197"> Disclosure button expanded/collapsed state not programmatically defined (Customize button)</a></li>
<li>kofoworola shonuyi:
<ul>
<li>🌟<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1999012">Actually hide or remove sidebar-shown attribute when in fullscreen.</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2028293">Add a test for checking sidebar-shown attribute in fullscreen mode</a></li>
</ul>
</li>
<li>🌟 Sayd Mateen:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2021681"> Page URL is displayed as tab name when page’s contains about:reader?&lt;/a&gt;&lt;/p&gt; &lt;p&gt;</a></li>
</ul>
<ul>
<li>Oluwatobi:
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1975391">Unable to delete selected history entries from sidebar</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1993844">Incorrect Sidebar button state/tooltip hover text</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2023913">The city name heading level doesn’t follow the correct heading level order</a></li>
</ul>
</li>
<li>Nishchay [:nish]:<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031961"> Unable to add tabs to old closed tab groups (tabGroupState.splitViews is undefined)</a></li>
</ul>
<p> </p>
<h3>Project Updates</h3>
<h4>Add-ons / Web Extensions</h4>
<h5>Addon Manager &amp; about:addons</h5>
<ul>
<li>In preparation for the Project Nova restyling of the about:addons page, we have refactored about:addons into separate per-component ES modules, splitting the monolithic aboutaddons.js and aboutaddons.html into 16 dedicated component files under components/ (with no behavior or UI changes) –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2032014"> Bug 2032014</a>
<ul>
<li>NOTE: if you have working on patches with changes to about:addons internals it is very likely you’ll need to rebase and solve merge conflicts hit on top of this refactoring, the internals are still largely the same as before but don’t hesitate to reach out to the Addons team if you have doubts / questions or need help to figure out how to adapt your patch of top of these changes</li>
</ul>
</li>
</ul>
<h5>WebExtensions Framework</h5>
<ul>
<li>Fixed exportFunction to preserve the constructibility of the wrapped function instead of unconditionally making all exported functions implicitly as constructors –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2033173"> Bug 2033173</a>
<ul>
<li>Thanks to Gregory Pappas for contributing this improvement to the Content Scripts’ Xray Wrappers helpers!</li>
</ul>
</li>
<li>Fixed a Firefox 151 regression where extension content scripts accessing location.ancestorOrigins caused subsequent page script reads of the same property to fail with “Permission denied”, breaking sites like Gmail –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2034329"> Bug 2034329</a>
<ul>
<li>Thanks to Simon Farre for promptly investigating and fixing this recent regression!</li>
</ul>
</li>
</ul>
<h5>WebExtension APIs</h5>
<ul>
<li>Updated sessions.getRecentlyClosed() to remove the hardcoded cap when maxResults is omitted –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1392125"> Bug 1392125</a>
<ul>
<li>Shoutout to Amine Zroual for contributing this enhancement to the sessions WebExtensions API!</li>
</ul>
</li>
</ul>
<h4>DevTools</h4>
<ul>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=750915">Artem Manushenkov</a> fixed an issue where autosuggestion popup was removing overridden indicators from properties in the Inspector (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1983408">#1983408</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=446257">Andrea Marchesini [:baku]</a> fix DevTools cookie header serialization for long cookies, which could lead to cookies not being visible in Netmonitor (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031299">#2031299</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=559949">Julian Descottes [:jdescottes]</a> fixed a toolbox crash that was happening we couldn’t find a localization file (e.g. when using a language pack on Nightly) (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2028930">#2028930</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=557153">Nicolas Chevobbe [:nchevobbe]</a> improved @container tooltip so it show the value of variables used in style()(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2030239">#2030239</a>), has enough contrast in dark mode (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2033782">#2033782</a>) and contains a link to select the container (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031688">#2031688</a>)
<ul>
<li><a href="https://blog.nightly.mozilla.org/files/2026/06/image3.png"><img alt='Firefox Developer Tools showing a CSS @container style() rule in the Rules panel. A popover for a element displays container properties including "container-name: hello section-container", "container-type: inline-size", and the custom property "--w: 100px", while indicating that --secondary and --plouf are not set. Below, the container query uses nested var() fallbacks, and a CSS declaration previews the resolved value for background-color.' class="aligncenter size-full wp-image-2071" height="532" src="https://blog.nightly.mozilla.org/files/2026/06/image3.png" width="1038"></a></li>
</ul>
</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=656417">Hubert Boma Manilla (:bomsy)</a> is making good progress on migrating the Console to CodeMirror 6 (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2032758">#2032758</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2026569">#2026569</a>)</li>
</ul>
<h4>Fluent</h4>
<ul>
<li>We’re now at over 72% of our strings being Fluent! Got a component still using .properties? Convert when you can!</li>
<li><a href="https://blog.nightly.mozilla.org/files/2026/06/image5.png"><img alt="Stacked area chart titled “Are We Fluent Yet?” showing the number and type of localization strings available in Firefox from 2018 to 2026. The chart tracks Fluent strings (green), Properties strings (blue), DTD strings (pink), and a small number of INI strings. Over time, Fluent strings steadily increase while DTD and Properties strings decline. A tooltip at April 26, 2026 shows 10,372 Fluent strings, 3,997 Properties strings, and no remaining DTD or INC strings, illustrating Firefox’s ongoing migration to the Fluent localization system." class="aligncenter size-full wp-image-2073" height="924" src="https://blog.nightly.mozilla.org/files/2026/06/image5.png" width="1509"></a></li>
</ul>
<h4>Migration Improvements</h4>
<ul>
<li>Thanks to dao for <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2035009">fixing a recent alignment issue in the migration wizard dropdown</a></li>
<li>Thanks to volunteer contributor Anthony Mclamb for his patch that <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2027915">disables the legacy EdgeHTML Edge migrator</a>! Once that finishes rolling out, presuming no surprises, we’ll go ahead and remove the migrator entirely.</li>
</ul>
<h4>New Tab Page</h4>
<ul>
<li>Nova for New Tab has ridden the trains to Beta! It will be enabled by default, globally, when Firefox 151 goes out to release on May 19th
<ul>
<li>It’s possible that we’ll do a train-hop coupled with an experiment to enable HNT Nova for a few clients a bit earlier.</li>
</ul>
</li>
<li>Maxx Crawford<a href="https://bugzil.la/2032213"> enabled Nova designs for New Tab</a>, rolling out the updated layout, widgets, and customization panel behind HNT Nova flags.</li>
<li>Maxx Crawford<a href="https://bugzil.la/2033165"> fixed the Nova content feed to render the intended four‑column layout</a> by correcting CSS grid breakpoints.</li>
<li>Maxx Crawford<a href="https://bugzil.la/2033264"> resolved a first‑load failure in the Weather widget</a> by fixing init order and fetch timing, eliminating the “Oops” error.</li>
<li>Maxx Crawford<a href="https://bugzil.la/2031707"> synchronized the Weather toggle between about:preferences#home and the panel</a> via the shared showWeather pref to prevent desync.</li>
<li>Maxx Crawford<a href="https://bugzil.la/2021460"> updated Nova grid focus order</a> to align tab flow with visual order for keyboard users.</li>
<li>Maxx Crawford<a href="https://bugzil.la/2034620"> fixed critical UI issues in Lists and Timer widgets</a> covering overflow, controls, and layout stability.</li>
<li>Maxx Crawford<a href="https://bugzil.la/2032462"> guarded document.dir access in Nova render paths</a> to avoid startup cache worker errors and improve startup stability.</li>
<li>Rolf<a href="https://bugzil.la/2031568"> added a new normalization method for the inferred interest vector</a> to stabilize topic relevance across sessions.</li>
<li>Rolf<a href="https://bugzil.la/2031569"> prevented unnecessary content refreshes during Pocket New Tab experiments</a>, reducing jank and bandwidth.</li>
<li>Sameeksha<a href="https://bugzil.la/2008197"> defined the Customize button’s expanded/collapsed state programmatically</a> using aria-expanded for better a11y.</li>
<li>liz<a href="https://bugzil.la/2008119"> clarified follow/unfollow/blocked button names with topic context</a> so screen readers announce clear actions.</li>
<li>Vector<a href="https://bugzil.la/2008128"> marked the Delete from History control as opening a dialog</a> via aria-haspopup=dialog for assistive tech.</li>
<li>Scott Downe<a href="https://bugzil.la/2034145"> fixed a regression that flipped the Wallpapers pref off</a>, restoring user selections.</li>
<li>Irene Ni<a href="https://bugzil.la/2033927"> corrected privacy link color and focus styles</a> for contrast and keyboard visibility.</li>
<li>Reem Hamoui<a href="https://bugzil.la/2030873"> added a wallpaper toggle reset in the Nova customization panel</a> so users can quickly restore default wallpapers without extra steps.</li>
<li>Reem Hamoui<a href="https://bugzil.la/2031669"> fixed the Customize pencil button to match the Nova spec</a>, aligning placement and iconography for visual consistency.</li>
<li>Dre<a href="https://bugzil.la/2032607"> updated the ‘Fresh new’ wallpapers copy</a> to a clearer, localized message for better comprehension.</li>
<li>Irene Ni<a href="https://bugzil.la/2033927"> fixed Nova privacy link color and focus styles</a> to meet contrast and focus ring guidelines, improving accessibility on New Tab.</li>
<li>Irene Ni<a href="https://bugzil.la/2034098"> adjusted Sponsored tile character limits</a> to prevent truncation/overflow, yielding cleaner titles across grid and wide tiles.</li>
<li>Scott Downe<a href="https://bugzil.la/2034145"> fixed a regression that flipped the Wallpapers user pref to false</a>, restoring wallpapers for affected users and preventing unintended disablement.</li>
<li>Reem Hamoui<a href="https://bugzil.la/2034688"> hooked the wallpaper check into the new toggle logic</a> so the Customization Panel accurately reflects wallpaper availability and state.</li>
<li>Irene Ni<a href="https://bugzil.la/2034912"> landed Nova UI updates for the Daily Briefing 3-pack card</a>, improving spacing, type scale, and tap targets.</li>
<li>Reem Hamoui<a href="https://bugzil.la/2030873"> added a wallpaper toggle reset in the Nova customization panel</a> so users can quickly restore default wallpapers without extra steps.</li>
<li>Reem Hamoui<a href="https://bugzil.la/2031669"> fixed the Customize pencil button to match the Nova spec</a>, aligning placement and iconography for visual consistency.</li>
<li>Dre<a href="https://bugzil.la/2032607"> updated the ‘Fresh new’ wallpapers copy</a> to a clearer, localized message for better comprehension.</li>
<li>Irene Ni<a href="https://bugzil.la/2033927"> fixed Nova privacy link color and focus styles</a> to meet contrast and focus ring guidelines, improving accessibility on New Tab.</li>
<li>Irene Ni<a href="https://bugzil.la/2034098"> adjusted Sponsored tile character limits</a> to prevent truncation/overflow, yielding cleaner titles across grid and wide tiles.</li>
<li>Scott Downe<a href="https://bugzil.la/2034145"> fixed a regression that flipped the Wallpapers user pref to false</a>, restoring wallpapers for affected users and preventing unintended disablement.</li>
<li>Reem Hamoui<a href="https://bugzil.la/2034688"> hooked the wallpaper check into the new toggle logic</a> so the Customization Panel accurately reflects wallpaper availability and state.</li>
<li>Irene Ni<a href="https://bugzil.la/2034912"> landed Nova UI updates for the Daily Briefing 3-pack card</a>, improving spacing, type scale, and tap targets.</li>
</ul>
<h4>Search and Urlbar</h4>
<ul>
<li>Marco has fixed a<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2034743"> couple</a> of<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1989632"> issues</a> with the places databases to try and improve stability. This should help with avoiding users losing bookmarks or favicons.</li>
<li>Work continues on the new separate search bar to improve the functionality, e.g.<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2033231"> allowing middle click</a> to perform a search in a new tab,<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2032991"> avoiding performing a</a> search when adding a search engine.</li>
<li>Work also continues on the new Nova layouts.</li>
</ul>
<h4>Smart Window</h4>
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2032122">uplifted 10 bugs</a> to 150.0.1 dot release addressing initial user feedback from diary study and <a href="https://connect.mozilla.org/">Connect</a>
<ul>
<li>jump to bottom of conversation <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2028692">2028692</a></li>
<li>stop streaming button <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2029204">2029204</a></li>
<li>back/forward navigation from assistant <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2029229">2029229</a></li>
<li>dark mode for various chips <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2024499">2024499</a></li>
</ul>
</li>
<li>search engine switching from smart bar <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2021973">2021973</a></li>
<li>Nova styling within smart window <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2026794">2026794</a></li>
</ul>
<h4>Storybook/Reusable Components/Acorn Design System</h4>
<ul>
<li>Dustin converted moz-breadcrumb-group variables into JSON design tokens <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2029181">Bug 2029181 – Convert moz-breadcrumb-group variables into JSON design tokens</a></li>
<li>Dustin converted moz-box-* variables into JSON design tokens <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2029180">Bug 2029180 – Convert moz-box-* variables into JSON design tokens</a></li>
<li>Dustin converted moz-promo variables to JSON design tokens <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2029190">Bug 2029190 – Convert moz-promo variables into JSON design tokens</a></li>
<li>Dustin converted moz-reorderable-list variables to JSON design tokens <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2029191">Bug 2029191 – Convert moz-reorderable-list variables into JSON design tokens</a></li>
<li>Dustin converted moz-visual-picker variables to JSON design tokens <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2029193">Bug 2029193 – Convert moz-visual-picker-item variables into JSON design tokens</a></li>
<li>Dustin updated browser-shared.css so it passes use-design-tokens <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2022985">Bug 2022985 – Update browser-shared.css so it passes use-design-tokens</a></li>
<li>Dustin updated popup.css so it passes use-design-tokens <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2022979">Bug 2022979 – Update popup.css so it passes use-design-tokens</a></li>
<li>Jon added opacity tokens and added opacity to use-design-tokens stylelint rule  <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1955325">Bug 1955325 – Create opacity tokens</a></li>
<li>Jon converted toolbar design tokens to JSON <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2017970">Bug 2017970 – Convert toolbar design tokens to json</a></li>
<li>Anna fixed moz-select with panel-list drop-down size inconsistency <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2032365">Bug 2032365 – Applications Action drop-down menus sometimes have a different size when opened</a></li>
<li>Anna fixed issue with the disabled state of moz-radio component <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2027123">Bug 2027123 – moz-radio disabled state cannot be changed while the moz-radio-group is disabled</a></li>
<li>Anna updated moz-button and moz-box-button components to prevent label corruption when accesskeys are present and the label changes.   <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2022326">Bug 2022326 – moz-button with accesskey label becomes corrupted when l10nId updates dynamically</a></li>
</ul>
<h4>UX Fundamentals</h4>
<ul>
<li>The error pages shown when a server sends back an invalid response header or an unsupported content encoding now display accurate, context-specific messages. The invalid response header page also gained a helpful list of next steps. – <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2027209">2027209</a></li>
<li>In progress: The error page illustrations are being replaced with new artwork, and the system now supports per-illustration size configuration, giving each image the ability to define its own appropriate dimensions. – <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031837">2031837</a></li>
</ul>
<h4>Settings Redesign</h4>
<ul>
<li>Tim converted settings related to Accessibility page to config-based pane <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1968116">Bug 1968116 – Convert settings related to Accessibility page to config-based settings</a></li>
<li>Benjamin converted Privacy &amp; Security page to the config-based pane <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1968112">Bug 1968112 – Convert settings related to Privacy &amp; Security page to config-based settings</a></li>
<li>Finn integrated Firefox Labs page into setting-pane config <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2021047">Bug 2021047 – Integrate Firefox Labs page into setting-pane config</a></li>
<li>Anna converted Firefox Updates section to config-based prefs <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1990961">Bug 1990961 – Convert Firefox Updates section to config-based prefs</a></li>
<li>Mark Kennedy added moz-promo, that is welcoming users to the redesigned settings <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2015093">Bug 2015093 – Add a moz-promo to welcome users to the redesign</a>
<ul>
<li><a href="https://blog.nightly.mozilla.org/files/2026/06/image4.png"><img alt="The Firefox settings page in dark mode showing a notification banner that reads, “Same settings, new look!” The message further explains that the page has been reorganized to make settings easier to scan and explore, while keeping all existing settings unchanged. A “Got it” button appears below the message. The “AI Controls” section is visible underneath the banner." class="aligncenter size-full wp-image-2072" height="559" src="https://blog.nightly.mozilla.org/files/2026/06/image4.png" width="1431"></a></li>
</ul>
</li>
<li>Anna added possibility to search for actions in the redesigned “Applications” section <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2020370">Bug 2020370 – It’s no longer possible to search for actions in the new “Applications” section</a></li>
<li>Anna fixed the Settings navbar layout breakage</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Nightly: More Kit, More Control – These Weeks in Firefox: Issue 203]]></title>
<description><![CDATA[Highlights

James enabled adaptive autofill in Nightly for testing, which we believe should provide better results in the URL bar when doing autocomplete!
Jack updated the illustrations shown on some of our error pages to match the latest approved designs, giving users more polished artwork when ...]]></description>
<link>https://tsecurity.de/de/3693294/tools/firefox-nightly-more-kit-more-control-these-weeks-in-firefox-issue-203/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693294/tools/firefox-nightly-more-kit-more-control-these-weeks-in-firefox-issue-203/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:32 +0200</pubDate>
<content:encoded><![CDATA[<h3>Highlights</h3>
<ul>
<li>James <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2032547">enabled adaptive autofill in Nightly</a> for testing, which we believe should provide better results in the URL bar when doing autocomplete!</li>
<li>Jack <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031837">updated the illustrations shown on some of our error pages</a> to match the latest approved designs, giving users more polished artwork when the browser encounters connection or security errors!</li>
</ul>
<p><img alt="Internet connection error page with an adorable Kit illustration" class="aligncenter wp-image-2080 size-full" height="652" src="https://blog.nightly.mozilla.org/files/2026/06/image2-1.png" width="1584"></p>
<ul>
<li>Controls for the Memories feature <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2032998">can now be set during Smart Window onboarding</a></li>
</ul>
<p><img alt='Two radio button controls for the Smart Window Memories feature, including "Chats in Smart Window" and "Browsing across Firefox"' class="aligncenter wp-image-2078 size-full" height="546" src="https://blog.nightly.mozilla.org/files/2026/06/image4-1-e1780509799577.png" width="500"></p>
<p> </p>
<ul>
<li>We’ve disabled the CSS filter implicitly applied to WebExtension pageAction SVG icons across all release channels starting in Firefox 152, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2016509">completing the deprecation</a>
<ul>
<li><b>NOTE:</b> The blog post published at<a href="https://blog.mozilla.org/addons/2026/04/23/webextensions-api-changes-firefox-149-152/"> WebExtensions API changes in Firefox 149-152</a> provides to extensions developers more details about this deprecation and links to the related MDN docs.</li>
</ul>
</li>
</ul>
<h3>Friends of the Firefox team</h3>
<h4><a href="https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20(excluding%20employees)&amp;quicksearch=2031599%2C2033820%2C2034178%2C1930213%2C2035355%2C1611643%2C2020302%2C2026007%2C2031015%2C2035252%2C2036528%2C411384%2C2033780%2C2036199%2C1812100%2C1898257%2C2030070%2C2030072">Resolved bugs (excluding employees)</a></h4>
<p><a href="https://github.com/niklasbaumgardner/NewContributorScraper">Script to find new contributors from bug list</a></p>
<h4>Volunteers that fixed more than one bug</h4>
<ul>
<li>Amin Amir</li>
<li>Pranjali Srivastava</li>
<li>Sam Johnson</li>
</ul>
<h4>New contributors (🌟 = first patch)</h4>
<ul>
<li> 🌟:23rd: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1812100">Regression: The new swipe-to-navigation indicator stucks for a moment, when deciding not to navigate the other page</a></li>
<li>🌟Akeem Omosanya: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2035252">Remove commented-out code in SearchService.sys.mjs</a></li>
<li>Amin Amir:
<ul>
<li>🌟<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031599">Fix browsingContext.sys.mjs to assign to #contextCreatedHandled instead of contextCreatedHandled</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2033820">Fix missing WITHOUT ROWID SQLite performance optimization in SERPCategorization.sys.mjs</a></li>
</ul>
</li>
<li>🌟Sahaj: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031015">Suggest the default target language for translation after changing the detected source language</a></li>
<li>🌟JIANG Zhirui: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2036199">Breakpad build failed on Windows using VS2026 due to removal of stdext</a></li>
<li> John Iweh: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2030072">Add “Open in New Tab” and “Open in New Container Tab” options to the context menu for Tabs from Other Devices</a></li>
<li>Jak: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2030070">Bookmarks and History – should respect the “When you open a link, image or media in a new tab, switch to it immediately” setting</a></li>
<li>🌟Andy [:rgbcmy]: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1611643">Autoplayed next video should also be PIP</a></li>
<li> konyhéa: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1930213">“Escape” key should collapse the expanded on hover sidebar launcher even if hover is still active.</a></li>
<li> Pranjali Srivastava:
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1898257">Remove icon property from sidebar extensions</a></li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2026007">Show language-agnostic SelectTranslations context menu item when the source and target languages are the same</a></li>
</ul>
</li>
</ul>
<h3>Project Updates</h3>
<h4>Add-ons / Web Extensions</h4>
<h5>Addon Manager &amp; about:addons</h5>
<ul>
<li>Fixed long-standing regression on the autocomplete and datalist popups for extension inline options pages on about:addons (introduced in Firefox 68 by<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1532724"> Bug 1532724</a>, fix shipping in Firefox 152) –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1595158"> Bug 1595158</a></li>
</ul>
<h5>WebExtensions Framework</h5>
<ul>
<li>Fixed access to web-accessible resources declared with &lt;all_urls&gt; from sandboxed documents (null-principal URLs), restoring extension redirects from the context-menu search flow, starting in Firefox 152 –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2033905"> Bug 2033905</a></li>
</ul>
<h5>WebExtension APIs</h5>
<ul>
<li>Added exhaustive test coverage for tabs.move() against additional edge cases related to split-view tabs –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2029092"> Bug 2029092</a></li>
</ul>
<h4>DevTools</h4>
<ul>
<li>Andreas Farre improved the Session History tab in the Application panel (still behind devtools.application.sessionHistory.enabled)
<ul>
<li>added support for remote debugging (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2014064">#2014064</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2016121">#2016121</a>)</li>
<li>made sure that calls to History.replaceState are reflected in the UI (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2037359">#2037359</a>)</li>
</ul>
</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=559949">Julian Descottes [:jdescottes]</a> fixed the most frequent DevTools crash we were observing in Telemetry, adding a guard against IDBTransaction errors when retrieving breakpoints in the Debugger (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2030260">#2030260</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=557153">Nicolas Chevobbe [:nchevobbe]</a> fixed the image preview tooltip for relative URLs images in constructed stylesheet (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2035503">#2035503</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=559949">Julian Descottes [:jdescottes]</a> reduced the overhead we had because of network requests monitoring by only decoding response content when the user actually want to see the response (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2026228">#2026228</a>)</li>
</ul>
<h4>WebDriver</h4>
<ul>
<li>Amin Amir cleaned up an <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031599">incorrect variable assignment</a> in our browsingContext module.</li>
<li>Logan Rosen <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2036603">updated stale references and broken links</a> in our documentation about Marionette.</li>
<li>Sameem improved the Marionette and WebDriver BiDi <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2020302">screenshot commands to enforce maximum allowed dimensions</a>.</li>
<li>Leo McArdle fixed <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2030964">the regression in the “log.entryAdded” event, which lacked an error message in the “text” field for the messages of type “error”</a>.</li>
<li>Henrik Skupin fixed an issue in Marionette where <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2033769">WebDriver:Navigate and WebDriver:Refresh did not handle errors</a> when the underlying navigation failed.</li>
<li>Henrik Skupin <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1839953">improved geckodriver to detect an early Firefox exit during startup on Android</a>, avoiding up to 60 seconds of unnecessary connection attempts.</li>
<li>Henrik Skupin updated the <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2028933">geckodriver CI build job to produce a universal macOS binary</a> supporting both x64 and aarch64.</li>
</ul>
<h4>Lint, Docs and Workflow</h4>
<ul>
<li>Sylvestre <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2023411">ported some linters</a> (e.g. file-whitespace, test-manifest-toml, license, file-perm, rejected-words &amp; more) to Rust to help improve the runtime of the code review bot.</li>
<li>Dale has been working on migration to moz-src for <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2034040">customkeys</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2035086">dom/quota</a> and <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2035295">odom/geolocation</a>
<ul>
<li><a href="https://arewemozsrcyet.com/">https://arewemozsrcyet.com/</a></li>
</ul>
</li>
</ul>
<h4>New Tab Page</h4>
<ul>
<li>We did our first region-specific trainhop on May 11th (just 15% of the US), and turned on HNT Nova (and sometimes Widgets) for those clients to get some advance-data of its behaviour in the wild! A note that HNT Nova gets turned on for everybody when Firefox 151 ships on May 19th.
<ul>
<li>We’ll be launching a similar experiment in the DE, probably on May 12th, also at 15% population.</li>
</ul>
</li>
<li>Most of the team is heads down building out a sports-tracking widget, attempting to get that ready in time to be generally available for the upcoming World Cup event.</li>
<li>Dre landed a new world clock widget, which is currently off by default, but pretty snazzy!</li>
</ul>
<p><img alt="World clock widget in New Tab featuring different time zones for YTO, BER, SYD, and LAX." class="aligncenter wp-image-2079 size-full" height="162" src="https://blog.nightly.mozilla.org/files/2026/06/image3-1.png" width="346"></p>
<h4>Search and Urlbar</h4>
<ul>
<li>Nova (URL Bar Design Refresh)
<ul>
<li>Drew and Daisuke continued their work on <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2015612">Nova styling for the Address bar</a> (input and view).</li>
</ul>
</li>
<li>Search and Suggest
<ul>
<li>Drew finalized two bugs for World Cup and sports suggestions, which were landed and uplifted: one to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2035322">update the localization string for scheduled games</a> and another to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2034350">show both teams’ icons in suggestions</a>. Drew also landed and uplifted a fix for <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2035353">rich search suggestion icons being forced into a square aspect ratio</a>.</li>
<li>Standard8 updated Ecosia favicons to the latest branding, including QA testing and publishing.</li>
</ul>
</li>
<li>Settings Redesign (SRD)
<ul>
<li>Stephanie landed a test to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2021512">ensure search suggestion settings are hidden when quicksuggest is disabled</a>, as well as a patch to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031341">resolve TypeScript issues</a> in search.mjs, and is adding test coverage to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2007397">confirm removed search engines are not displayed in the default engines dropdown</a>.</li>
</ul>
</li>
<li>General URL Bar and Component Updates
<ul>
<li>Daisuke landed implementation of the <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1893083">context menu on URL bar results</a>, and a fix to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2020177">show the loading URL in the URL bar when starting up with a homepage</a>.
<ul>
<li>Marco is working on several tasks, including a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1756564">PDF download / focus stealing issue</a> and <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1924124">allowing arrays to be bound in Sqlite.sys.mjs</a>. Marco also worked on fixes related to Places, such as <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2034743">avoiding replacing the favicons database if it is not corrupt</a>.</li>
</ul>
</li>
<li>Standard8 finalized the <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2028423">URL bar test manifest split</a>. Standard8 also <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2016401">upgraded us to TypeScript 6</a>.</li>
<li>Moritz landed a fix for URL bar abandonment telemetry being recorded when clicking an engine in the unified search button popup (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2032973">Bug 2032973</a>), which was also uplifted. Moritz also <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2034507">simplified search mode switcher item activation in tests</a>, and made it so that <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2036030">the unified search button popup closes when installing an open search engine</a>.</li>
</ul>
</li>
</ul>
<h4>Smart Window</h4>
<ul>
<li>natural language starting with tab close/undo <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2035343">2035343</a> with expandable action log <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031508">2031508</a></li>
</ul>
<p><img alt="Tab close and undo actions in Smart Window accompanied by an expandable log of actions taken" class="aligncenter wp-image-2077 size-full" height="256" src="https://blog.nightly.mozilla.org/files/2026/06/image1-1.png" width="220"></p>
<ul>
<li>assistant rendering feedback up/down <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2032994">2032994</a> and markdown table <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2027029">2027029</a></li>
<li>nova styling blur <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2027877">2027877</a> and suggestions <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2026823">2026823</a></li>
<li>accessibility screen reader <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2028676">2028676</a> and keyboard focus <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2037565">2037565</a></li>
<li>optimize conversation starters extra requests <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2030005">2030005</a> and caching <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2033430">2033430</a></li>
</ul>
<h4>Storybook/Reusable Components/Acorn Design System</h4>
<ul>
<li>Nova token updates occasionally, focused on SRD</li>
</ul>
<h4>UX Fundamentals</h4>
<ul>
<li>Added support for the “SEC_ERROR_CA_CERT_INVALID” certificate error to the Felt Privacy error pages. – <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2035942">2035942</a></li>
</ul>
<h4>Settings Redesign</h4>
<ul>
<li>Settings redesign is being tested and will hopefully go out in Firefox 152!</li>
</ul>
<ul>
<li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Nightly: Giving You More Control – These Weeks in Firefox: Issue 204]]></title>
<description><![CDATA[Highlights

Maxx Crawford added a pref to hide the New Tab logo so users can opt out of branding without altering page layout or resorting to CSS overrides.
Harshit enabled video overlay detection in Nightly 153, allowing you to use the context menu to control videos on more pages! We plan on let...]]></description>
<link>https://tsecurity.de/de/3693293/tools/firefox-nightly-giving-you-more-control-these-weeks-in-firefox-issue-204/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693293/tools/firefox-nightly-giving-you-more-control-these-weeks-in-firefox-issue-204/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:31 +0200</pubDate>
<content:encoded><![CDATA[<h3>Highlights</h3>
<ul>
<li>Maxx Crawford <a href="https://bugzil.la/2041708">added a pref to hide the New Tab logo </a>so users can opt out of branding without altering page layout or resorting to CSS overrides.</li>
<li>Harshit <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2041819">enabled video overlay detection</a> in Nightly 153, allowing you to use the context menu to control videos on more pages! We plan on letting this ride out in Firefox 153.
<ul>
<li><a href="https://www.instagram.com/p/DXH8Rd6EcWo/">You can try it out on this Instagram reel</a> in Nightly</li>
</ul>
</li>
</ul>
<p><img alt="Firefox context menu video controls like Pause, Unmute, Speed and Loop." class="aligncenter size-full wp-image-2081" height="431" src="https://blog.nightly.mozilla.org/files/2026/06/image2-2.png" width="480"></p>
<ul>
<li>A note to WebExtension authors – as part of a <a href="https://blog.mozilla.org/addons/2026/04/23/webextensions-api-changes-firefox-149-152/">planned deprecation announced last month</a>, executeScript and insertCSS are now restricted from moz-extension pages starting in Firefox 152 –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2015559"> Bug 2015559</a></li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=557153">Nicolas Chevobbe [:nchevobbe]</a> added support and debugging for modern attr()(which is <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2038939">enabled on Nightly</a>) (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2014751">#2014751</a>)</li>
</ul>
<p><img alt="Tooltip in Firefox DevTools for mismatched syntax with attr()" class="aligncenter size-full wp-image-2082" height="164" src="https://blog.nightly.mozilla.org/files/2026/06/image1-2.png" width="872"></p>
<h3>Friends of the Firefox team</h3>
<h4><a href="https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20(excluding%20employees)&amp;quicksearch=1717176%2C2031328%2C2038948%2C2011485%2C1455294%2C2035084%2C2039455%2C2036767%2C2039878%2C2013176%2C2022414%2C2036237%2C2036578%2C2041612%2C1262773&amp;list_id=17986996">Resolved bugs (excluding employees)</a></h4>
<p><a href="https://github.com/niklasbaumgardner/NewContributorScraper">Script to find new contributors from bug list</a></p>
<h4>Volunteers that fixed more than one bug</h4>
<ul>
<li>Sam Johnson</li>
<li>Sebastian Zartner [:sebo]</li>
</ul>
<h4>New contributors (🌟 = first patch)</h4>
<ul>
<li>Immaculate Atim: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2022414">Switch to using an array instead of an object string for browser.backup.enabled_on.profiles</a></li>
<li>liz: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2011485">Screenshots overlay visible on both splitview browsers</a></li>
<li>🌟 Rahman Mahmutović [:r_m]: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1717176">Can’t change content in box model in inspector for box-sizing:border-box elements</a></li>
<li>Takeru Mitsumori: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2038948">Fix typo in ID name about-translations-swap-langauges-icon in about-translations.html</a></li>
<li>🌟 Freya Arbjerg [:freyacodes]: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2036767">Blackboxed columns are ignored</a></li>
<li> tom.passarelli: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031328">tab-preview-panel emits unpaired popupshown/popuphidden events, breaking sidebar autohide</a></li>
</ul>
<h3>Project Updates</h3>
<h4>Add-ons / Web Extensions</h4>
<h5>Addon Manager &amp; about:addons</h5>
<ul>
<li>As part of the work for the Project Nova about:addons page restyling, the about:addons sidebar has been migrated to the moz-page-nav and moz-page-nav-button reusable components, improving accessibility and visual consistency with the Firefox Desktop about:settings page –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1881767"> Bug 1881767</a></li>
</ul>
<h5>WebExtensions Framework</h5>
<ul>
<li>Implemented WebExtensions negative permissions infrastructure, providing the foundations for enterprise policy “blocked host permissions” features –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1745823"> Bug 1745823</a></li>
<li>Restricted host permission changes for MV3 extensions force-installed via enterprise policy (matching similar behaviors provided by Chrome enterprise policy behaviors) –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1904054"> Bug 1904054</a>
<ul>
<li>Thanks to Mike Kaply for the implementation of this enterprise policy enforcement feature.</li>
</ul>
</li>
</ul>
<h5>WebExtension APIs</h5>
<ul>
<li>Fixed handling of &lt;all_urls&gt; as an API permission in Manifest V3, ensuring the permission is correctly initialized on extension install –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1758306"> Bug 1758306</a></li>
</ul>
<h4>DevTools</h4>
<ul>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=789324">Rahman Mahmutović [:r_m]</a> made it possible to edit width/height in the box model section of the Layout panel (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1717176">#1717176</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=446518">Sebastian Zartner [:sebo]</a> improved toggling tools driving in-page highlighters (e.g. the Measuring) (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1262773">#1262773</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=446518">Sebastian Zartner [:sebo]</a> added a setting to control visibility of HTML comments in the markup view (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1455294">#1455294</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=789044">Freya Arbjerg [:freyacodes]</a> fixed an issue in script blackboxing (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2036767">#2036767</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=283262">Alexandre Poirot [:ochameau]</a> replaced custom preference to log RDP messages with MOZ_LOG (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1622857">#1622857</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=283262">Alexandre Poirot [:ochameau]</a> fixed retrieval of garbage collected script text content (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1758454">#1758454</a>)</li>
</ul>
<h4>WebDriver</h4>
<ul>
<li>Sameem updated the “Take Element Screenshot” command from WebDriver Classic to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2013176">crop screenshots of elements which exceed the viewport</a>. This aligns with the specification and avoids errors when attempting to capture huge elements.</li>
<li>Alexandra Borovova updated the events for new top-level browsing contexts: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1930594">we will not send anymore “browsingContext.domContentLoaded” and “browsingContext.load” events for them, instead the “browsingContext.contextCreated” event will be sent when a tab is ready to be used</a>. This is required to align with the expected per-spec behavior.</li>
<li>Henrik Skupin landed a patch <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1430064">allowing geckodriver to gracefully shut down Firefox</a> when geckodriver itself is terminated.</li>
<li>Hiroyuki Ikezoe <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2040252">disabled Firefox’s “scroll axis lock” feature</a> so WebDriver actions for wheel input devices can scroll in arbitrary directions when using pan gestures.</li>
</ul>
<h4>Lint, Docs and Workflow</h4>
<ul>
<li>Added a rule to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1790711">prevent new uses of Preferences.sys.mjs</a>.</li>
<li>The browser environment globals within ESLint have <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1793814">now been updated</a>. These include Sanitizer, VideoFrame and a few other new ones.</li>
<li>Temporal, and some other definitions have been <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1999036">added to TypeScript</a>.</li>
</ul>
<h4>New Tab Page</h4>
<ul>
<li>Much has happened in the last 2 weeks! <a href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=RESOLVED%2CVERIFIED%2CCLOSED&amp;resolution=FIXED&amp;chfieldfrom=2026-05-12T14%3A40%3A16.019Z&amp;chfieldto=Now&amp;bug_id=2015530%2C2024720%2C2028377%2C2028534%2C2033592%2C2035176%2C2036902%2C2037143%2C2037301%2C2037541%2C2037646%2C2037947%2C2038048%2C2038392%2C2038790%2C2038823%2C2038881%2C2038981%2C2038984%2C2039103%2C2039107%2C2039333%2C2039346%2C2039358%2C2039477%2C2039587%2C2039752%2C2039765%2C2039770%2C2039775%2C2039956%2C2039963%2C2040027%2C2040033%2C2040254%2C2040269%2C2040370%2C2040376%2C2040480%2C2040481%2C2040503%2C2040552%2C2040645%2C2040674%2C2040677%2C2041033%2C2041163%2C2041196%2C2041204%2C2041205%2C2041207%2C2041244%2C2041532%2C2041651%2C2041682%2C2041708%2C2041711%2C2041730%2C2041757%2C2041765%2C2041814%2C2042054&amp;product=Firefox&amp;component=New+Tab+Page">Here’s a full bug list</a>, and here are some highlights.</li>
<li>Dre fixed the List widget that was creating a new list too eagerly on the New Tab Page (<a href="https://bugzil.la/2033592">2033592</a>) — prevents accidental list creation and improves the Lists UI reliability.</li>
<li>Maxx Crawford<a href="https://bugzil.la/2035176"> fixed Weather widget small card layout issues with opt-in location options and an error message displayed</a>, resolving card overflow and removing the spurious opt-in error so users see a compact Weather card and correct location prompts on New Tab.</li>
<li>Reem Hamoui<a href="https://bugzil.la/2037301"> added key dates state to the Sports widget</a>, enabling the Sports card to surface event deadlines/key-date highlights on New Tab so sports users see timely date info.</li>
<li>Scott Downe<a href="https://bugzil.la/2037541"> added a manage widgets option to the New Tab nova widgets context menu</a>, giving users a direct context-menu entry to open the widget management flow from any widget with Nova enabled.</li>
<li>Scott Downe added a reusable Newtab widget base component to centralize lifecycle, focus/keyboard handling, DOM templates, and telemetry hooks, reducing duplication and making widget behavior more consistent; see<a href="https://bugzil.la/2037947"> Newtab widget base component</a>.</li>
<li>Dre converted per-widget expansion handling to a shared widget expansion handler to unify expand/collapse state management and prevent widgets from incorrectly retaining or losing expanded state; see<a href="https://bugzil.la/2038048"> Convert widget expansion handling to shared widget expansion</a>.</li>
<li>Nina Pypchenko [:nina-py]<a href="https://bugzil.la/2038881"> updated the Sports widget to populate the “follow teams” state from the /teams endpoint</a>, so follow/unfollow toggles now reflect server-side subscriptions and reduce incorrect follow states.</li>
<li>Scott Downe<a href="https://bugzil.la/2038981"> moved widget menu items</a> within New Tab widgets to standardize menu ordering and action grouping, so users find Add/Remove/Configure entries in expected positions across platforms.</li>
<li>Dre<a href="https://bugzil.la/2039346"> fixed a World Clock city search bug </a>for the word clocks widget, restoring expected search filtering/matching so city lookups return correct results.</li>
<li>Scott Downe fixed an issue where the New Tab small weather widget size change didn’t always apply by correcting the widget size update path (JS/CSS layout interactions), improving consistent rendering for small-tile weather across responsive breakpoints and platforms; see<a href="https://bugzil.la/2040033"> Newtab small weather widget size change doesn’t always work</a>.</li>
<li>Nina Pypchenko [:nina-py]<a href="https://bugzil.la/2040269"> added a group stage section to match highlights</a> in the sports widget on New Tab so users now see stage-aware grouping and stage labels on match highlight cards, making tournament context (group vs knockout) visible while browsing highlights.</li>
<li>Dre<a href="https://bugzil.la/2040376"> fixed the small world clock widget not expanding to large while editing clocks</a> so users can enter edit mode and expand the widget as expected; the change wires the edit-mode resize handler to update widget size/class during edits.</li>
<li>Maxx Crawford<a href="https://bugzil.la/2040480"> added WCW OMC message strings</a> so World Cup widget messaging flows on New Tab now display the correct copy (localized where available) instead of falling back to missing-text behavior.</li>
<li>Reem Hamoui<a href="https://bugzil.la/2040552"> added a “View all” button and a list view for the results tab at medium widget size</a> so Sports widget users on medium New Tab tiles can expand results and scroll full lists without resizing the widget.</li>
<li>Maxx Crawford<a href="https://bugzil.la/2040674"> added WCW “Watch Live” stream strings to the Sports widget strings bundle</a> so the widget can surface a localized “Watch Live” CTA for applicable events.</li>
<li>Dre<a href="https://bugzil.la/2040677"> restored VoiceOver reachability for Edit/Remove in World Clock on macOS</a> so macOS VoiceOver users can now focus and activate clock Edit/Remove controls thanks to accessibility role/label and focus-order fixes.</li>
<li>Maxx Crawford removed the persistent browser logo when all new-tab features (Top Sites, widgets, content feed) are disabled by adding a conditional render guard in the New Tab component, preventing an orphaned logo (<a href="https://bugzil.la/2041033">2041033</a>).</li>
<li>Mike Conley added New Tab jest tests to the node tests Tier 1 CI job<a href="https://bugzil.la/2041757"> Run newtab jest tests as part of node tests Tier 1 job</a> to catch regressions earlier in CI</li>
<li>Irene Ni shipped multiple visual fixes for the Sports widget<a href="https://bugzil.la/2041765"> Sports widget – various visual fixes</a> (spacing, truncation, icon alignment, clipping) to improve readability and layout on constrained viewports.</li>
</ul>
<h4>Picture-in-Picture</h4>
<ul>
<li>kpatenio <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2041113">adjusted our YouTube site specific wrapper so that the URL bar toggle appears more reliably</a>, especially when selecting videos from the YouTube search page.</li>
<li>Thanks to Sylvestre for patching <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2037420">some</a> <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2042141">bugs</a> to prevent some spurious console errors!</li>
<li>Niklas <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2013735">fixed captions on autopip videos failing to sync with the origin videos</a>.</li>
</ul>
<h4>Performance Tools (aka <a href="https://profiler.firefox.com/">Firefox Profiler</a>)</h4>
<ul>
<li>Firefox Profiler now has a CLI! We also added a profiler-analysis skill to the Firefox codebase. Once you capture a performance profile, you can ask Claude or an AI to analyze it by providing a link or local path. You can use it to analyze a performance regression or debug an issue if you have a profile at hand.
<ul>
<li><a href="https://www.npmjs.com/package/@firefox-devtools/profiler-cli">https://www.npmjs.com/package/@firefox-devtools/profiler-cli</a></li>
<li>You can install it with npm install -g @firefox-devtools/profiler-cli@latest</li>
</ul>
</li>
</ul>
<h4>Search and Urlbar</h4>
<h6>Nova UI refresh</h6>
<ul>
<li>Drew and Daisuke continued working on reorganizing styles and updating the urlbar for Nova.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2019154">2019154</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2019152">2019152</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2041501">2041501</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2040532">2040532</a></li>
</ul>
<h6>Suggest</h6>
<ul>
<li>Drew landed several Suggest improvements: realtime suggestions colors, sports suggestions received World Cup tweaks, and online Suggest via OHTTP was enabled for eligible users in Firefox 153.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2040561">2040561</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2039753">2039753</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2035614">2035614</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2038843">2038843</a></li>
</ul>
<h6>Adaptive autofill</h6>
<ul>
<li>James fixed soft-block counting to track autofill dismisses, rather than consecutive backspaces on the same autofill, and added telemetry to measure URLs reintegration after blocking.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2040819">2040819</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2037177">2037177</a></li>
</ul>
<h6>Quick actions</h6>
<ul>
<li>Dharma created a new Firefox Labs quick action, fixed the Update action button, and re-enabled ScotchBonnet in some tests that were not updated yet.</li>
<li>Caleb added Calculator support for certain unicode operators.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2023169">2023169</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1928635">1928635</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1923383">1923383</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2033861">2033861</a></li>
</ul>
<h6>Multi Context Address Bar</h6>
<ul>
<li>Moritz continued refactoring the urlbar code: converted some of the js modules to not be system modules, fixed dynamic results templates, incorrect reuse of result rows, and keyboard shortcuts on the unified search button panel.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2039297">2039297</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2036095">2036095</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2039844">2039844</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2037933">2037933</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2030050">2030050</a></li>
</ul>
<h6><i>Other</i></h6>
<ul>
<li>Marco, Drew and Daisuke fixed several intermittent test failures.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2038510">2038510</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2023908">2023908</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2011584">2011584</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1938142">1938142</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1971091">1971091</a></li>
</ul>
<h5>Search</h5>
<ul>
<li>Mark removed old WebExtension-based search engines from the source tree, removed loading of search add-ons from <i>resource://search-extensions/</i>.</li>
<li>Caleb fixed multiple documentation issues and added a test covering searches from a private window.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1904613">1904613</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2035878">2035878</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2037942">2037942</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2033545">2033545</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2005724">2005724</a></li>
</ul>
<h5>Places</h5>
<ul>
<li>Marco removed some unnecessary database transactions, fixed the bookmarks panel folder dropdown on Windows, and resolved several intermittent test failures.</li>
<li>Thanks to Sam Johnson who fixed the bookmark edit panel showing “mobile” instead of “Mobile Bookmarks”.</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2039534">2039534</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1505800">1505800</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2008829">2008829</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2029541">2029541</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2035084">2035084</a></li>
</ul>
<ul>
<li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Nightly: Eyedropper Quick Action, geckodriver 0.37, and Tighter File Permissions – These Weeks in Firefox: Issue 205]]></title>
<description><![CDATA[Highlights

Dao added a new Eyedropper quick action! Check it out by typing “color” or “eyedropper” in the URL bar (Bug 1803575) on Nightly.



Henrik Skupin released geckodriver 0.37.0, which includes support for several new APIs and various bug fixes. See the release page for details.
Starting ...]]></description>
<link>https://tsecurity.de/de/3693292/tools/firefox-nightly-eyedropper-quick-action-geckodriver-037-and-tighter-file-permissions-these-weeks-in-firefox-issue-205/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693292/tools/firefox-nightly-eyedropper-quick-action-geckodriver-037-and-tighter-file-permissions-these-weeks-in-firefox-issue-205/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:28 +0200</pubDate>
<content:encoded><![CDATA[<h3>Highlights</h3>
<ul>
<li>Dao added a new Eyedropper quick action! Check it out by typing “color” or “eyedropper” in the URL bar (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1803575">Bug 1803575</a>) on Nightly.</li>
</ul>
<p><img alt='Firefox URL bar dropdown with "col" typed in, showing an eyedropper button labeled "Pick a color" below search suggestions.' class="aligncenter size-full wp-image-2084" height="358" src="https://blog.nightly.mozilla.org/files/2026/06/image1-3.png" width="724"></p>
<ul>
<li>Henrik Skupin <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1938333">released geckodriver 0.37.0</a>, which includes support for several new APIs and various bug fixes. See the <a href="https://github.com/mozilla/geckodriver/releases/tag/v0.37.0">release page for details</a>.</li>
<li>Starting from Firefox 153, access to local file: URLs is being restricted by default.
<ul>
<li>Extensions now require an explicit “Access local files on your computer” permission, separate from broad host permissions, that users must grant.</li>
<li>Extensions can call the extension.isAllowedFileSchemeAccess() API to determine whether they have been granted access to file: URLs (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2034168">Bug 2034168</a>).</li>
</ul>
</li>
</ul>
<h3>Friends of the Firefox team</h3>
<h4><a href="https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20(excluding%20employees)&amp;quicksearch=1941404%2C2039281%2C2024187%2C1674047%2C1986161%2C2043187%2C2019260%2C2027580%2C2027582%2C2041640%2C2039294%2C2042309%2C1830551%2C2031735%2C2043952%2C1972065%2C2043958%2C2042419%2C2042820%2C2022661%2C1994826%2C2041802%2C1315558%2C1930776%2C2042921%2C2043938">Resolved bugs (excluding employees)</a></h4>
<p><a href="https://github.com/niklasbaumgardner/NewContributorScraper">Script to find new contributors from bug list</a></p>
<h4>Volunteers that fixed more than one bug</h4>
<ul>
<li>:Vincent</li>
<li>Chris Vander Linden</li>
<li>DrSeed</li>
<li>Khalid AlHaddad</li>
<li>Sam Johnson</li>
</ul>
<h4>New contributors (🌟 = first patch)</h4>
<ul>
<li>Francis :mckenfra: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1315558">tld service for webextensions</a></li>
<li>any1here: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2042309">about:preferences#privacy is broken with MOZ_DATA_REPORTING false</a></li>
<li>pullmana8: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031735">Fix protocol/Actor.js to throw an Error instead of an Actor</a></li>
<li>RAN1: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1830551">Firefox Crashes on Quit When Running Two Browsers With Separate Profiles</a></li>
</ul>
<h3>Project Updates</h3>
<h4>Accessibility</h4>
<ul>
<li>Morgan added a new accessibility-specific, front-end review skill to mozilla central! 🎉 You can read about it, and learn how to use it <a href="https://firefox-source-docs.mozilla.org/bug-mgmt/processes/accessibility-review.html#automated-accessibility-review-skill">in the accessibility review source docs</a>.</li>
</ul>
<h4>Add-ons / Web Extensions</h4>
<h5>Addon Manager &amp; about:addons</h5>
<ul>
<li>Migrated addon-page-header and addon-card action buttons to the reusable moz-button web component as part of the ongoing Nova restyling of about:addons –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2042200"> Bug 2042200</a> /<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2042204"> Bug 2042204</a></li>
<li>Extended moz-page-nav-button with a forwarded title property to fix an accessibility issue where the component lacked a label in collapsed state; Landed in Firefox 153, and uplifted to Firefox 152 for about:settings which was already riding the 152 release train –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2040971"> Bug 2040971</a></li>
<li>Fixed a shutdown-timing bug where a pending GMP update-check timer could fire after XPCOMShutdownThreads started, causing a pref write assertion; Fixed in Firefox 153 –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2043803"> Bug 2043803</a></li>
</ul>
<h5>WebExtensions Framework</h5>
<ul>
<li>Fixed MV2 content scripts incorrectly injecting into guarded hosts because MozDocumentMatcher::MatchesURI was not consulting CheckGuarded when mCheckPermissions was false; Fixed in Firefox 153 –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2041393"> Bug 2041393</a></li>
<li>Added support for accessing ObservableArray attributes (such as adoptedStyleSheets) from XrayWrappers and extension content scripts, unblocking extensions that rely on this Web API; Fixed in Firefox 153 –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1751346"> Bug 1751346</a></li>
<li>Wired runtime_blocked_hosts and runtime_allowed_hosts enterprise policy settings through ExtensionSettings to allow administrators to restrict extension host permissions on managed devices, starting in Firefox 153 –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1805205"> Bug 1805205</a>
<ul>
<li>Thanks to Mike Kaply for implementing this enterprise policy enhancement.</li>
</ul>
</li>
</ul>
<h5>WebExtension APIs</h5>
<ul>
<li>Fixed promiseTabWhenReady blocking indefinitely on discarded tabs, preventing cleanup of associated resources and potentially causing memory leaks; Fixed in Firefox 153 –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1653876"> Bug 1653876</a></li>
<li>Fixed webNavigation.onCommitted being dispatched twice for cross-origin iframes loaded under Fission, caused by a redundant OnStateChange trigger firing in addition to OnLocationChange; Fixed in Firefox 153 –<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1750196"> Bug 1750196</a></li>
</ul>
<h4>DevTools</h4>
<ul>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=766005">Chris Vander Linden</a> made the Search input component shared as we plan to use it in the Netmonitor as well (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2019260">#2019260</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2027580">#2027580</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2027582">#2027582</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=631103">pullmana8</a> improved error management in the DevTools protocol (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2031735">#2031735</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=553004">Chris H-C :chutten</a> removed Legacy Telemetry devtools instrumentation (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2039650">#2039650</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=13647">:glob ✱</a> fixed an issue in the Inspector where the swatch color for variable in @starting-style rule could have the wrong color (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2016778">#2016778</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=557153">Nicolas Chevobbe [:nchevobbe]</a> exposed heading level more clearly in the accessibility tree (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1588784">#1588784</a>) and in the accessibility highlighter (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2044904">#2044904</a>)</li>
</ul>
<p><img alt='Accessibility panel in Firefox DevTools showing a selected "heading (level 3)" node named "Backwards compatibility."' class="aligncenter size-full wp-image-2083" height="375" src="https://blog.nightly.mozilla.org/files/2026/06/image2-3.png" width="727"></p>
<ul>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=559949">Julian Descottes [:jdescottes]</a> migrated the markup view to HTML (from XHTML) to fix an issue when editing the markup (CodeMirror 6 does not support XHTML) (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2028058">#2028058</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=557153">Nicolas Chevobbe [:nchevobbe]</a> fixed an issue in Netmonitor search where it could appear the the search stalled (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2042405">#2042405</a>)</li>
<li><a href="https://bugzilla.mozilla.org/user_profile?user_id=656417">Hubert Boma Manilla (:bomsy)</a> added more connection information (ECH, Delegated Credentials, OCSP, Private DNS, …) in Netmonitor Security tab (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2036404">#2036404</a>)</li>
</ul>
<h4>WebDriver</h4>
<ul>
<li>Khalid AlHaddad improved the window manipulation commands in Marionette and WebDriver BiDi to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1941404">allow individual window geometry properties, such as x, y, width, and height, to be adjusted independently</a>.</li>
<li>Khalid AlHaddad updated our codebase to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1972065">use constants instead of hardcoded strings</a> for all our session data types.</li>
<li>Alexandra Borovova updated <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2015655">the “emulation.setLocaleOverride” command to also apply a locale emulation in dedicated and shared workers</a>.</li>
<li>Alexandra Borovova fixed <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2042385">a regression when there would be no “script.realmCreated” events after the cross-origin navigation</a>.</li>
</ul>
<h4>Search and Urlbar</h4>
<ul>
<li>Dharma updated context search actions to trigger search instead of entering search mode @ <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1945080">1945080</a></li>
<li>Daisuke and Drew worked on a lot of Nova updates, including ensuring Nova is tested @ <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2041255">2041255</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2030183">2030183</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2019168">2019168</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2044849">2044849</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2033583">2033583</a></li>
<li>Moritz has worked on several refactorings to allow the urlbar to be used in content @ <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2039828">2039828</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2039298">2039298</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2041280">2041280</a></li>
<li>Middle click paste replaces content was fixed by Moritz @ <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2042893">2042893</a></li>
<li>Michel added feature to show registrable domain on desktop after its implementation on mobile @ <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1986161">1986161</a></li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hacks.Mozilla.Org: PACT: Anonymous Credentials for the Web]]></title>
<description><![CDATA[This is the technical companion to our update on Distilled, “Keeping the web open and private in the bot era.” Here we take a deeper look at the problem space, the design we’re proposing, and the problems still left to solve. 
Bots (and privacy-preserving browsers) not welcome 
Browse a news site...]]></description>
<link>https://tsecurity.de/de/3693291/tools/hacksmozillaorg-pact-anonymous-credentials-for-the-web/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693291/tools/hacksmozillaorg-pact-anonymous-credentials-for-the-web/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:27 +0200</pubDate>
<content:encoded><![CDATA[<p class="c43"><em><span class="c11 c1">This is the technical companion to our update on Distilled, </span><span class="c11 c1 c17"><a class="c5" href="https://blog.mozilla.org/en/privacy-security/keeping-the-web-open-and-private-in-the-bot-era/">“Keeping the web open and private in the bot era.”</a></span><span class="c11 c1"> Here we take a deeper look at the problem space, the design we’re proposing, and the problems still left to </span><span class="c1 c11">solve</span></em><span class="c13 c11 c1"><em>.</em> </span></p>
<h3 class="c24"><span class="c2 c1">Bots (and privacy-preserving browsers) not welcome </span></h3>
<p class="c40"><span class="c0">Browse a news site in a private window. Shop at a major retailer with a VPN. Visit a video streaming platform with anti-fingerprinting defenses tuned up. You’ll see the same responses: registration walls, block pages, and endless CAPTCHAs. The message is clear: </span><span class="c13 c11 c1">if we think you might be a bot, you’re not welcome</span><span class="c0">. </span></p>
<p class="c53"><span class="c0">Websites have valid reasons for wanting to block bots. Bots enable volumetric abuse</span><span class="c1">, abuse that wouldn’t otherwise be feasible if they had to be carried out by humans</span><span class="c0">. </span><span class="c0"> For example</span><span class="c1">: SEO comment spam, credential stuffing and DDoSing</span><span class="c0">.</span><span class="c0"> Consequently many sites employ dedicated anti-abuse tooling which aims to keep the bots out whilst minimizing friction for human visitors. </span></p>
<p class="c21"><span class="c0">Unfortunately, that tooling is increasingly failing at both tasks. Browser privacy protections are </span><span class="c3 c1"><a class="c5" href="https://blog.mozilla.org/en/firefox/fingerprinting-protections/">dismantling</a></span><span class="c0"> the passive signals that anti-abuse systems depended on to identify and distinguish </span><span class="c0">visitors</span><span class="c0">. Meanwhile advances in generative AI have rendered CAPTCHAs ineffective: bots now solve them </span><span class="c3 c1"><a class="c5" href="https://www.usenix.org/system/files/usenixsecurity23-searles.pdf">faster and more reliably</a></span><span class="c0"> than </span><span class="c0">humans</span><span class="c0">. </span></p>
<p class="c33"><span class="c0">Many sites are switching to more invasive mechanisms and now ask visitors to disclose </span><span class="c1">identifying information</span><span class="c0">,</span><span class="c0"> e.g. an email address, a federated login or </span><span class="c1">disabling their VPN</span><span class="c0">. This means greater friction for users, since providing these details on a first visit takes time. It also compromises their privacy, since these details enable the same kinds of cross-site tracking that browser privacy protections were intended to mitigate. </span></p>
<p class="c38"><span class="c0">This </span><span class="c1">leaves</span><span class="c0"> users </span><span class="c1">with a</span><span class="c0"> dilemma. The more effectively they protect their privacy, the harder it is for websites to distinguish them from bots and the worse the treatment they receive. Website operators are also suffering. The additional friction they inflict upon well-behaved visitors harms their site, but many are willing to pay the costs if it mitigates volumetric abuse. </span></p>
<p class="c44"><span class="c1">Browser-based AI agents make this tension more acute. Sites may want to allow agents which are acting on behalf of individual users while blocking agents engaged in volumetric abuse. However, with no effective mechanisms to distinguish the two, websites are opting to block </span><span class="c17 c1"><a class="c5" href="https://dl.acm.org/doi/epdf/10.1145/3730567.3732913">both</a></span><span class="c0">. That hurts users, who should be free to choose the user agent they use to access the web; it hurts new browsers and agents, which struggle to interoperate; and it hurts sites, which lose legitimate visitors.</span></p>
<p class="c30"><span class="c0">The consequence is that the web gets worse for everyone. Users get more friction or less privacy or both. Website operators see more volumetric abuse and the friction they add drives away users </span><span class="c1">who</span><span class="c0"> would otherwise want to consume their content or services. New user</span><span class="c1"> </span><span class="c0">agents struggle to access the same content as conventional browsers. </span></p>
<h3 class="c12"><span class="c20 c1">The</span><span class="c20 c1"> Costs of </span><span class="c2 c1">Convenient</span><span class="c2 c1"> Solutions</span></h3>
<p class="c9"><span class="c0">Some large ecosystem players have put forward solutions that leverage their control of the dominant operating systems and their deep integration with consumer hardware. These rely on device attestation: identifiers and privileged code baked into devices at the hardware level, which let manufacturers prove what software is running on a user’s device. Exposing this functionality to the web means attesting to sites that the user is running approved software with trusted hardware and therefore isn’t a bot. There have been two substantive proposals.</span></p>
<p class="c9"><span class="c0">Google’s Web Environment Integrity, <a href="https://www.theregister.com/software/2023/11/02/google-abandons-web-environment-integrity-api-proposal/335969">abandoned in 2023</a>, was the blunt version. It attested to the user agent itself, as well as the operating system and device in use. Users would have lost control in two ways: once to the attester, which would decide which operating systems and devices could be blessed, and again to the website, which would decide which software to accept. If sites had adopted allow-lists of approved user agents, building a new browser would have become virtually impossible, and sites could have withdrawn access from any user agent they chose.</span></p>
<p class="c9"><span class="c0">Apple’s Private Access Tokens, <a href="https://developer.apple.com/news/?id=huqjyh7k">deployed</a> across their ecosystem in 2022, have more subtle issues. Built on the Privacy Pass protocol standardized at the IETF, they get a lot right: a user receives a renewed, limited batch of one-time tokens that can be presented to websites without linking their visits together. This provides privacy for users and has shown rate limits to be an effective tool for sites – both points we’ll return to later in this post.</span></p>
<p class="c9"><span class="c1">However, Private Access Tokens rely on device attestation, requiring that the hardware manufacturer be in overall control of the user’s device. Presenting a PAT tells a website you are locked into Apple’s rules for what counts as acceptable software. </span><span class="c1">Due to PAT’s technical design</span><sup class="c1"><a href="https://hacks.mozilla.org/?p=48374#:~:text=PAT%20requires">[1]</a></sup><span class="c1">, there’s no way to open the system to other sources of scarcity without compromising the system’s privacy properties, meaning that if more widely deployed, access to the web would</span><span class="c1"> become tied to having bought expensive hardware from a small, hard to change set of vendors</span><span class="c1">. </span></p>
<p class="c9"><span class="c1">Both approaches are ultimately hostile to users and to the openness of the web. Both are premised on parts of a user’s device that sit within the manufacturer’s control and beyond the user’s own. Were they widely deployed, the web would become just another walled garden with centralized gatekeepers controlling acceptable hardware, operating systems and software. As convenient as these solutions are for the players who already dominate the ecosystem, we think there’s a better path.</span></p>
<h3 class="c24"><span class="c2 c1">A Better Path Forward </span></h3>
<p class="c24"><span class="c1">Bots’ harms arise from their ability to operate beyond human scale. For sites to prevent volumetric abuse they</span><span class="c0"> don’t actually need to know </span><span class="c1">the user’s</span><span class="c0"> identity or </span><span class="c1">receive cryptographic</span><span class="c0"> proof that they’re running approved softwar</span><span class="c1">e. If sites knew their visitors were restricted to a rate </span><span class="c1">limit</span><span class="c1"> set by a site, that would be enough.  </span></p>
<p class="c34"><span class="c1">Rate limits</span><span class="c0"> only make sense if </span><span class="c1">they’re</span><span class="c0"> </span><span class="c1">tied to</span><span class="c0"> something scarce; something an attacker can’t cheaply replicate to evade the limit. </span><span class="c0">Without anchoring to a scarce resource, like the trusted hardware used in Private Access Tokens, attackers can generate as many fresh identities as they need to bypass the rate limit. </span></p>
<p class="c56"><span class="c1">However, </span><span class="c0">hardware is just one option for </span><span class="c1">scarcity</span><span class="c0">. Anything a user already has that an attacker can’t trivially spin up at scale will work</span><span class="c1">: e</span><span class="c0">mail addresses and phone numbers are naturally scarce</span><span class="c1">. A paid subscription costs an attacker the same as a real user.  </span><span class="c0">Even maintaining an account on a free service requires </span><span class="c1">some</span><span class="c0"> non-trivial work. </span></p>
<p class="c39"><span class="c0">What if we could use these scarce signals across the web? We</span><span class="c1"> could build </span><span class="c0">an open ecosystem with many parties offering scarcity signals, each site choosing which to accept. By </span><span class="c0">opening up who can provide a signal, and letting sites choose which to accept, we can avoid transferring control to device manufacturers and the resulting harms. </span></p>
<p class="c39"><span class="c1">As a concrete example of who might be well positioned to provide such a signal, we can consider VPN providers acting as a subscription service. Sites routinely block VPN users indiscriminately, whether through a deliberate policy choice or through an indirect consequence of rate limiting visitors per IP address. But a VPN subscription is a perfect source of scarcity. If the VPN provider could vouch for its users so that sites could rate limit each user individually – then users would be able to browse the web with less friction and without giving up their VPN usage. </span></p>
<p class="c35"><span class="c0">The catch is that building </span><span class="c1">a system that can enable this</span><span class="c0"> on the open web whilst </span><span class="c1">maintaining user’s privacy</span><span class="c0"> is genuinely difficult. </span><span class="c1">It requires that we take information from one site — that this user holds some scarce thing — and expose it to other sites so that they can use that as the basis for their rate limiting. </span><span class="c0">Letting one site verify a signal from another is </span><span class="c1">the sort of </span><span class="c0">information flow</span><span class="c1"> </span><span class="c0">that privacy-pr</span><span class="c1">eserving </span><span class="c0">browsers have spent the last decade locking down to </span><span class="c1">prevent cross-site tracking</span><span class="c0">. </span></p>
<p class="c35"><span class="c1">Our goal would be that no more than the minimum information gets through: a single bit communicating whether the user is below the rate limit set by the site. Leaking anything more – like the source of the scarcity that the rate limit is anchored to – would be unacceptable. Enabling a new cross-site information flow might feel like compromising privacy to gain better access, but reality is more nuanced. If a new system moves sites away from demanding that visitors be identifiable (whether through fingerprinting or login forms), </span><span class="c1">it can be a win for both privacy and access.</span></p>
<h3 class="c24"><span class="c2 c1">The Foundations </span></h3>
<p class="c50"><span class="c0">The good news is that the cryptographic foundations for a privacy preserving approach already exist. The </span><span class="c1 c3"><a class="c5" href="https://privacypass.github.io/">Privacy Pass protocol</a></span><span class="c3 c1"><a class="c5" href="https://www.google.com/url?q=https://privacypass.github.io/&amp;sa=D&amp;source=editors&amp;ust=1782228494401139&amp;usg=AOvVaw3uoXdqARBZKjQF5H8uwYKY">,</a></span><span class="c0"> </span><span class="c3 c1"><a class="c5" href="https://www.petsymposium.org/2018/files/papers/issue3/popets-2018-0026.pdf">originally developed in 2018</a></span><span class="c0"> to reduce the friction of Cloudflare CAPTCHAs for Tor users, introduced the core primitive: a token that is </span><span class="c13 c11 c1">unlinkable </span><span class="c0">between issuance and redemption. You prove something to an issuer (e.g. by </span><span class="c1">solving a CAPTCHA</span><span class="c0">), receive some tokens, and later present a token to a website. The website can verify the token is legitimate, but can’t link it to the user it was issued to. </span></p>
<p><img alt="A diagram showing the protocol flow for Privacy Pass." class="aligncenter size-full wp-image-48375" height="1639" src="https://hacks.mozilla.org/wp-content/uploads/2026/06/pact-drawings-1.excalidraw1-scaled.png" width="2560"></p>
<p class="c27"><img alt="" title=""><span class="c20 c1 c57"><strong>Figure 1</strong>: </span><span class="c0"><em>In Privacy Pass, a CAPTCHA provider can issue tokens to a client which can then be used to bypass challenges for future site visits. Even if the CAPTCHA provider and sites collude, they can’t use the tokens to identify the user or their browsing history.</em> </span></p>
<p class="c52"><span class="c0">Privacy Pass has gone on to be successfully deployed in systems where the issuer and verifier have a prior trust relationship: </span><span class="c0">Apple</span><span class="c0"> uses it to authenticate users of </span><span class="c3 c1"><a class="c5" href="https://hacks.mozilla.org/feed/">Private Cloud Compute</a></span><span class="c0"> </span><span class="c1">and</span><span class="c0"> </span><span class="c3 c1"><a class="c5" href="https://www.apple.com/privacy/docs/iCloud_Private_Relay_Overview_Dec2021.PDF">Private Rel</a></span><span class="c17 c1"><a class="c5" href="https://www.google.com/url?q=https://www.apple.com/privacy/docs/iCloud_Private_Relay_Overview_Dec2021.PDF&amp;sa=D&amp;source=editors&amp;ust=1782228494402463&amp;usg=AOvVaw0KGoiSPg-8NLvNvIiSSbPt">ay</a></span><span class="c1"> </span><span class="c0">without linking their activity to their identity, </span><span class="c0">Chrome</span><span class="c0"> uses it for </span><span class="c3 c1"><a class="c5" href="https://github.com/GoogleChrome/ip-protection">two-hop IP protection</a></span><span class="c0">, and </span><span class="c0">Kagi</span><span class="c0"> uses it to provide </span><span class="c17 c1"><a class="c5" href="https://help.kagi.com/kagi/privacy/privacy-pass.html">private search</a></span><span class="c0">. </span><span class="c0">These deployments work in part because a small number of parties have agreed in advance on who issues tokens and who accepts them. </span></p>
<p class="c18"><span class="c0">Applying this approach to an open system where any site can act as</span><span class="c0"> an issuer</span><span class="c0"> </span><span class="c3 c1"><a class="c5" href="https://docs.google.com/document/d/1k3QJG2D_Sq4zJiJRn9DfY80hEHuz9UWrJdTt8LbRsMM/edit?tab=t.0#heading=h.r8jxzjcoeumo">brings real challenges</a></span><span class="c0">.</span><span class="c0"> Firstly, even though tokens are unlinkable, knowing a user has access to a specific issuer is a privacy leak on its own, because you can infer that the user meets the relevant issuance criteria. </span><span class="c1">If one site can learn that you have a token from another site, that reveals that you have been to that site, which can be a major privacy problem. </span><span class="c0">This compounds if </span><span class="c1">sites </span><span class="c0">can learn the set of issuers </span><span class="c1">you have visited</span><span class="c0">, since it becomes a fingerprint which can be used to identify </span><span class="c1">you</span><span class="c0">. </span></p>
<p class="c8"><span class="c3 c1"><a class="c5" href="https://blog.cryptographyengineering.com/2014/11/27/zero-knowledge-proofs-illustrated-primer/">Generic techniques</a></span><span class="c0"> exist for proving a statement in zero knowledge: we can prove that </span><span class="c1">a client</span><span class="c0"> ha</span><span class="c1">s</span><span class="c0"> a token from a set of acceptable issuers without revealing which specific issuer it is. We’ll call this issuer blinding. </span><span class="c0">The generic approach is often slow, but </span><span class="c3 c1"><a class="c5" href="https://www.ietf.org/archive/id/draft-orru-zkproof-sigma-protocols-01.html">bespoke approaches</a></span><span class="c0"> tailored to the underlying cryptography can improve this considerably. </span></p>
<p class="c54"><span class="c0">Another challenge is how sites using rate limits decide who to trust to issue tokens. If an issuer misbehaves then the site’s rate limits become ineffective, enabling volumetric abuse. However, if we need to prevent the site from learning which issuers a user has access to, the site is only going to know that one of its trusted issuers was used, not which one. This makes mistakes or misbehaviour by an issuer difficult to detect, and makes it hard for sites to evaluate new issuers. Solving this challenge is essential for openness. Without adequate information, </span><span class="c0">sites are likely to lean towards conservative issuer selection. </span><span class="c1">That could lead to less choice between Anchors, which in turn could lead to a new form of gatekeeper being created.</span><span class="c0"> </span></p>
<p class="c32"><span class="c0">To solve this, sites at least need a way to calculate an aggregate score for each issuer they use. This should roughly correspond to how much of the traffic it considers abusive to have come from users using that particular issuer. Mozilla has long invested in systems like </span><span class="c3 c1"><a class="c5" href="https://blog.mozilla.org/en/firefox/partnership-ohttp-prio/">Prio</a></span><span class="c0"> which use multiparty computation (MPC) to protect user privacy whilst enabling aggregate measurements of system behaviour. </span></p>
<p class="c59"><span class="c0">Privacy Pass also struggles to handle dynamic adjustments to rate limits. Once tokens have been issued, they’re difficult to invalidate without either revoking all active tokens or risking attacks which can compromise the privacy of users. It’s also beneficial if sites can adjust rate limits on a per </span><span class="c1">client</span><span class="c0"> basis, for example by increasing rate limits where they become more confident the </span><span class="c1">client</span><span class="c0"> is benign and withdrawing access </span><span class="c1">when abuse is detected</span><span class="c0">. </span></p>
<p class="c47"><span class="c3 c1"><a class="c5" href="https://www.ietf.org/archive/id/draft-schlesinger-cfrg-act-00.html">Anonymous Credit Tokens</a></span><span class="c0"> </span><span class="c0">offer a useful building block to solve this problem. Conventional Privacy Pass schemes rely on issuing a bucket of tokens but ACT works differently by enabling the use of a credential with state. For example, an ACT credential can hold an internal counter. When the credential is presented, the site can check the counter is over some threshold and mutate it, increasing or decreasing </span><span class="c1">the counter whenever</span><span class="c0"> the site’s perception of the holder has improved or worsened. Critically, the exact value is never leaked to the site, preventing the site from tracking the holder and ensuring successive presentations of the same credential can’t be linked. </span></p>
<h3 class="c24"><span class="c2 c1">Putting it together </span></h3>
<p class="c19"><span class="c1">So how can we combine these techniques to build a system which can enable privacy-preserving rate limiting on the open web? In May 2026, we participated in a </span><a href="https://pactworkshop.com/"><span class="c17 c1">W3C CG Meeting</span></a><span class="c0"> in collaboration with Cloudflare, Chrome and other web stakeholders in which we started sketching out a design we’re calling PACT – Private Access Control Tokens. </span></p>
<p class="c19"><span class="c0">Rate limits need a starting point, a source of scarcity to anchor on. We’ll call an entity that provides such a source an </span><span class="c2 c1">Anchor</span><span class="c0">. To a user who meets the Anchor’s criteria, like having a subscription,</span><span class="c0"> an account in good standing</span><span class="c0">, or a verified phone number, an Anchor issues a batch of </span><span class="c2 c1">Endorsement </span><span class="c0">tokens, following the Privacy Pass model. In practice, Anchors could be any website which has access to this kind of signal. An Endorsement conveys</span><span class="c1"> </span><span class="c0">scarcity to other sites. </span></p>
<p class="c51"><span class="c0">That’s enough for a simple system where access is </span><span class="c1">either granted or denied</span><span class="c0">. But as we discussed earlier, we also want the ability to increase access where a visitor behaves benignly and decrease it where they don’t. </span><span class="c1">The state needed to enforce a rate limit</span><span class="c0"> can’t live in the Endorsement, because Endorsements cross trust boundaries between unrelated sites. We need a second object that can hold that state, scoped to the party that maintains it. </span></p>
<p class="c48"><span class="c0">We’ll call that the party that handles rate limiting for a site a </span><span class="c2 c1">Moderator </span><span class="c0">and the stateful object a </span><span class="c2 c1">Credential</span><span class="c0">. </span><span class="c1">A Credential is specific to a Moderator and, unlike endorsements, we limit each site to nominating a single Moderator. In the common case the site itself plays the Moderator role, so there’s no new entity or trust boundary. </span><span class="c1">A Moderator can also be a third-party service shared across many sites, allowing those sites to cooperatively share a rate limit.</span><span class="c0"> </span></p>
<p class="c48"><span class="c0">In the terminology of the previous section, the Anchor is the issuer of Endorsements, and the Moderator both verifies Endorsements and issues Credentials. A Moderator manages rate-limit policy: it decides which Anchors it trusts, accepts their Endorsements, and issues a Credential in return.</span></p>
<p class="c14"><img alt="" title=""><img alt="A diagram showing an overview of the PACT system" class="aligncenter size-full wp-image-48381" height="1655" src="https://hacks.mozilla.org/wp-content/uploads/2026/06/pact-drawings-5.excalidraw21-scaled.png" width="2560"></p>
<p class="c14"><strong><span class="c1 c20">Figure 2: </span></strong><span class="c1"><em>(1) Clients acquire Endorsements from Anchors in the course of normal browsing to sites they have relationships with. (2) Clients can exchange Endorsements for a stateful Credential from a Moderator. (3) Credentials can be used to access sites which use that Moderator. Credentials can be updated over time.</em> </span></p>
<p class="c41"><span class="c0">Directly revealing which Anchor backed an Endorsement would leak a lot of information about the user. The issuer blinding techniques from the previous section solve this: when an Endorsement is redeemed, the Moderator only learns that it came from one of </span><span class="c1">the </span><span class="c0">Anchors it trusts, but not which one. </span></p>
<p class="c28"><span class="c0">When a Moderator covers more than one site, we let Credentials be presented across all of them but partition cookies and storage as</span><span class="c1"> we would for any other third party site</span><span class="c0">. The unlinkability of </span><span class="c1">Credential</span><span class="c0"> presentations keeps this from creating a new cross-site identifier. The benefit is that good behaviour on one site improves access on every site the Moderator covers, and bad behaviour cuts it everywhere. Websites can already build the same capability with a shared account system, so this doesn’t create a new way to lock users out, but it </span><span class="c1">does provide a</span><span class="c0"> new way to grant access without requiring users to give up their privacy. </span></p>
<p class="c28"><span class="c0">Enabling Moderators that cover many sites carries a centralisation risk, simila</span><span class="c1">r </span><span class="c0">to the concentration we see today in anti-abuse providers. The mitigation is that the choice of Moderator stays with each site, and the choice of trusted Anchors stays with each Moderator. Th</span><span class="c1">is</span><span class="c0"> </span><span class="c1">can’t</span><span class="c0"> reverse the centralisation pressure the web already faces, but it </span><span class="c1">ensures this system won’t lead to additional lock-in</span><span class="c0">: a new Anchor or a new Moderator can be adopted without coordinating with a dominant vendor. </span></p>
<p class="c46"><span class="c0">The </span><span class="c1">system then has three flows</span><span class="c0">.</span><span class="c0"> First, the user </span><span class="c1">receives</span><span class="c0"> Endorsements from an Anchor in the course of normal interaction</span><span class="c1">, based on the Anchor’s positive view of the user</span><span class="c0">. This is </span><span class="c0">a relatively rare operation for any given user and Anchor. After all, as our source of scarcity, Endorsements should not be too easy to accumulate.</span></p>
<p class="c10"><img alt="" title=""><img alt="A diagram showing the PACT Anchor Flow" class="aligncenter size-full wp-image-48377" height="1789" src="https://hacks.mozilla.org/wp-content/uploads/2026/06/pact-drawings-3.excalidraw1-scaled.png" width="2560"></p>
<p class="c10"><strong><span class="c20 c1">Figure 3</span></strong><span class="c1">: <em>In the course of normal browsing, clients browse to websites they have a relationship with. These sites can act as Anchors by issuing Endorsements to clients.</em></span></p>
<p class="c26"><span class="c0">Second, when the user arrives at a site that works with a Moderator, the browser spends an Endorsement from an Anchor the Moderator trusts and receives a Credential in return. The presentation hides </span><span class="c13 c11 c1">which </span><span class="c0">Anchor was used, and </span><span class="c1">neither the Anchor nor the Moderator can trace the Endorsement back to where it was issued</span><span class="c0">. The Moderator decides what initial balance the Credential starts with. If the user has no Endorsements from suitable Anchors at all, existing mechanisms (CAPTCHAs, account creation, federated login) </span><span class="c1">could be used to</span><span class="c0"> bootstrap a Credential the same way, so the system degrades to today’s experience rather than locking the user out.</span></p>
<p class="c7"><img alt="" title=""><img alt="A diagram showing the protocol flow between Anchors and Moderators" class="aligncenter size-full wp-image-48378" height="1789" src="https://hacks.mozilla.org/wp-content/uploads/2026/06/pact-drawings-4.excalidraw1-scaled.png" width="2560"></p>
<p class="c7"><span class="c20 c1"><strong>Figure 4</strong></span><span class="c1"><strong>:</strong><em> When the client browses to a site, it can prompt the client for a Credential from the Moderator it uses. If the Client doesn’t have a suitable Credential, but does have a suitable Endorsement, it can exchange it for a Credential with the Moderator. In practice, the Moderator and the Site might be the same server. </em></span><em><span class="c0"> </span></em></p>
<p class="c25"><span class="c0">Third, as the user browses, the browser presents the Credential and the Moderator updates </span><span class="c1">the internal state of the Credential</span><span class="c0">. The </span><span class="c1">Moderator can reward </span><span class="c0">behaviour that looks benign and </span><span class="c1">penalize suspicious activity</span><span class="c0">, </span><span class="c1">but can’t track the use of the Credential or identify it if it’s used on other sites the Moderator covers</span><span class="c0">. </span><span class="c0">Revocation falls out of the same mechanism: a Moderator </span><span class="c1">can refuse to return an updated Credential</span><span class="c0">.</span><span class="c0"> </span></p>
<p class="c7"><img alt="" title=""><img alt="A diagram showing the PACT Moderator Flow" class="aligncenter size-full wp-image-48379" height="1618" src="https://hacks.mozilla.org/wp-content/uploads/2026/06/pact-drawings-5.excalidraw1-scaled.png" width="2560"></p>
<p class="c7"><strong><span class="c20 c1">Figure 5</span></strong><span class="c0"><strong>:</strong> <em>The Client can present the Credential on sites which use the matching Moderator. Sites can check if the Credential is in good standing. The sites can then adjust the access the Credential has in response to behaviour. E.g. increasing it when they gain confidence in the client or reducing it in response to malicious behaviour.</em></span></p>
<p class="c23"><span class="c0">In practice, all of this would happen transparently to the user through a WebAPI that sites acting as Anchors or Moderators would call from JavaScript. In an ideal ecosystem, users would accumulate Endorsements through normal browsing, just by virtue of the sites they already visit, and the rest of the flow would happen in the background as they move around the web, leaving </span><span class="c1">users</span><span class="c0"> with meaningfully less friction. </span></p>
<p class="c16"><span class="c0">AI agents acting on behalf of a user slot into the same flow. An agent can carry its user’s Credentials, in which case the user remains accountable for how the agent </span><span class="c1">behaves.</span><span class="c0"> </span><span class="c1">S</span><span class="c0">ites would not need to grant any more access than they would to the user themselves. Alternatively, the operator of an agent can run its own Anchor and vouch for its agents the way other Anchors vouch for human users. </span><span class="c0">Sites retain control over which Anchors they accept, so they can choose how to treat agent traffic without needing a separate detection mechanism. </span></p>
<p class="c6"><span class="c0">Several mechanisms combine to keep the information about a user that flows out close to a single bit. Cryptographic unlinkability ensures successive Credential presentations cannot be tied to each other or to the original issuance, so a user’s visits cannot be </span><span class="c1">joined</span><span class="c0"> into a history. Each site is bound to a single Moderator, so the set of Moderators a user has Credentials with never becomes a cross-site fingerprint. The Anchor-to-Credential exchange happens in an isolated browsing context, so during ordinary browsing the only thing the site or its Moderator ever observes is a Credential presentation: </span><span class="c1">the site only learns if </span><span class="c0">the user has a valid Credential below the rate limit, or </span><span class="c1">nothing</span><span class="c0">. </span><span class="c1">W</span><span class="c0">hen the Moderator updates a </span><span class="c1">Credential</span><span class="c0">, it</span><span class="c0"> adjusts the credentials state without learning what it is.</span></p>
<p class="c6"><span class="c1">The additional privacy given to users from </span><span class="c0">Issuer blinding</span><span class="c1"> makes participating in the system more challenging for Moderators</span><span class="c0">. Because the Moderator can’t see which Anchor backed a Credential at issuance, it can’t give a Credential from a strong Anchor </span><span class="c1">more access</span><span class="c0"> than one from a weak Anchor: doing so would itself leak which Anchor was used. The initial </span><span class="c1">access</span><span class="c0"> has to be uniform across the Moderator’s whole pool of Anchors, which in practice means setting it at the strength of the weakest. </span><span class="c1">However, this is only relevant for that initial access, the Moderator can update credentials according to the holder’s behavior, enabling Credential’s to accrue access over time.</span></p>
<p class="c42"><span class="c0">Building an open ecosystem also requires that sites can make effective decisions about the Anchors they choose to trust</span><span class="c1">. M</span><span class="c0">ultiparty computation systems like </span><span class="c0">Prio</span><span class="c0"> enable aggregate scoring without compromising pr</span><span class="c1">ivacy</span><span class="c0">. When users present Credentials, they can provide an encrypted share which identifies the anchor they use</span><span class="c1">d and can be privately aggregated to compute the quality of an issuer.</span></p>
<h3 class="c24"><span class="c2 c1">Next Steps </span></h3>
<p class="c49"><span class="c1">We think the</span><span class="c0"> architecture we</span><span class="c1">’ve </span><span class="c0">sketched </span><span class="c1">for PACT </span><span class="c0">has the right shape, but many of the details still need to be worked out</span><span class="c1"> and the entire system needs rigorous privacy and security analysis.</span></p>
<p class="c45"><span class="c0">We want to do that work in the open. The IETF is the natural venue for the cryptographic protocols underneath, and the W3C for the WebAPI surface that sits on top. </span><span class="c0">We’ll be </span><span class="c1">bringing</span><span class="c0"> </span><span class="c3 c1"><a class="c5" href="https://github.com/Moderation-of-unLinkable-Endorsements">draft specifications</a></span><span class="c1"> to these bodies as soon as they’re ready</span><span class="c0">, and we welcome collaborators from across the ecosystem: browser vendors, site operators, anti-abuse providers, and the cryptography community. </span></p>
<p class="c29"><span class="c0">If successful, we think we can provide a system which will keep the web open and </span><span class="c1">private</span><span class="c0">, while still giving sites the rate-limiting signal they need. </span></p>
<h3 class="c29"><span class="c2 c1">Acknowledgements</span></h3>
<p class="c4"><em><span class="c11 c1">The ideas described here are the result of collaboration and conversations with many people, including: Watson Ladd, Thibault Meunier, Michele Orrù, Trevor Perrin, Eric Rescorla, Samuel Schlesinger, Martin Thomson, Eric Trouton, Benjamin Vandersloot &amp; Cathie Yun.</span></em><span class="c11 c1"><em> </em> </span></p>
<hr class="c58">
<div>
<p class="c31"><a href="https://hacks.mozilla.org/?p=48374#:~:text=%5B1%5D">[1]</a><span class="c0"> PAT requires that the source of scarcity and an independent issuer be trusted not to collude. If they do, they can track users as they interact with the system. This is not suitable in the context of an open system where any party could play those two roles.</span></p>
</div>
<p>The post <a href="https://hacks.mozilla.org/2026/06/pact-anonymous-credentials-for-the-web/">PACT: Anonymous Credentials for the Web</a> appeared first on <a href="https://hacks.mozilla.org/">Mozilla Hacks - the Web developer blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[v8.16.0]]></title>
<description><![CDATA[We fixed a bug in the sticker creator that displayed the interface in the wrong language. Even though stickers are pictures (and therefore worth a thousand words) it's still important to get the words right too.]]></description>
<link>https://tsecurity.de/de/3693290/tools/v8160/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693290/tools/v8160/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:25 +0200</pubDate>
<content:encoded><![CDATA[<ul>
<li>We fixed a bug in the sticker creator that displayed the interface in the wrong language. Even though stickers are pictures (and therefore worth a thousand words) it's still important to get the words right too.</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Rust Programming Language Blog: The many journeys of learning Rust]]></title>
<description><![CDATA[This is another post in our series covering what we learned through the Vision Doc process. We previously described the overall approach and what we learned about doing user research, we explored what people love about Rust, dug into what it takes to ship safety-crticial Rust, and described some ...]]></description>
<link>https://tsecurity.de/de/3693289/tools/the-rust-programming-language-blog-the-many-journeys-of-learning-rust/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693289/tools/the-rust-programming-language-blog-the-many-journeys-of-learning-rust/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:24 +0200</pubDate>
<content:encoded><![CDATA[<p><em>This is another post in our series covering what we learned through the Vision Doc process. We previously <a href="https://blog.rust-lang.org/2025/12/03/lessons-learned-from-the-rust-vision-doc-process/" rel="external">described the overall approach and what we learned about doing user research</a>, we <a href="https://blog.rust-lang.org/2025/12/19/what-do-people-love-about-rust/" rel="external">explored what people love about Rust</a>, <a href="https://blog.rust-lang.org/2026/01/14/what-does-it-take-to-ship-rust-in-safety-critical/" rel="external">dug into what it takes to ship safety-crticial Rust</a>, and <a href="https://blog.rust-lang.org/2026/03/20/rust-challenges/" rel="external">described some of the major challenges that people face when using Rust</a>.</em></p>
<p>In this post we walk through what folks have found on their journey to learn the Rust programming language with ups and downs covered.</p>
<p>As a disclaimer, LLMs (Large Language Models) come up in this post because our interviewees brought them up. We're scoping discussion to their use as a learning tool, covering research and example generation, not broader questions about AI (Artificial Intelligence) in software development.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#many-paths-to-needing-rust"></a>
Many paths to needing Rust</h3>
<p>The interviews surfaced several different paths into Rust: curiosity, embedded work, job-market pressure, organizational adoption, and reassignment after a team or company chose Rust. That last path matters because many learners are not evaluating Rust from a blank slate; they are trying to become productive after Rust has already arrived in their work.</p>
<blockquote>
<p>"Funny enough, I've advocated for more niche languages than Rust in the past. Rust has pretty much stopped being as much of a niche language as it was, but it's not Java." -- Fractional CTO</p>
</blockquote>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#rust-learning-resources"></a>
Rust learning resources</h3>
<p>Likely as expected, the folks that we talked to reach for a range of resources to learn Rust. Some reach for official documentation, such as <a href="https://doc.rust-lang.org/book/" rel="external">The Rust Programming Language Book</a> and find that sufficient to build on what the compiler was already showing them.</p>
<blockquote>
<p>"I started with the official Rust documentation because there are a lot of great examples of how features like the borrow checker work." -- Software engineer at an Automotive supplier</p>
</blockquote>
<p>Others needed more passes and more formats, sometimes reaching for resources the community maintains, such as <a href="https://rustlings.rust-lang.org/" rel="external">Rustlings</a>, <a href="https://danielkeep.github.io/tlborm/book/index.html" rel="external">The Little Book of Rust Macros</a>, and <a href="https://rust-unofficial.github.io/too-many-lists/" rel="external">Learn Rust With Entirely Too Many Linked Lists</a>.</p>
<blockquote>
<p>"The first time I went through the chapter in [The Rust Programming Language] on borrow checking, I was like, what is this? I read it again, then I watched a YouTube video of someone explaining the chapter." -- Rust freelance consultant</p>
</blockquote>
<blockquote>
<p>"Rust book, Rustlings, Zero to Production in Rust, Jon Gjengset tutorials. A bunch of books. It's not a one-pass reading. Can't say how many times I've gone through it." -- Software engineer working on video streaming and storage</p>
</blockquote>
<p>These resources have brought up an entire generation of Rust programmers. But, to some, there is a perception that these resources have trouble keeping pace with the language.</p>
<blockquote>
<p>"We'd like to use [The Rust Programming Language/'the book'], but we've found that it's out of date, unfortunately. We've looked at the GitHub repo and found it's got a lot of unresolved issues and unmerged PRs" -- Principal Software Engineering work on Rust adoption in a regulated industry</p>
</blockquote>
<p>Whether or not this is factually true, Rust's growth has nonetheless put more scrutiny on these materials. Companies evaluating adoption and engineers getting reassigned to Rust teams are looking at them with fresh eyes and finding the gaps that affect their own evaluation.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#beginner-stumblings-and-unlearning-habits"></a>
Beginner stumblings and unlearning habits</h3>
<p>It's pretty typical for Rust to be the 2nd, 3rd or Nth programming language that someone picks up. They'd end up writing their most familiar language in Rust, whether C++ patterns, Java patterns, or whatever they knew, for months or even years. Eventually they got comfortable enough to start writing idiomatic Rust.</p>
<blockquote>
<p>"There's a bit of a drop in productivity compared to C if you're already familiar with it just because you're learning new rules, new syntax."  -- Principal Firmware Engineer (mobile robotics)</p>
</blockquote>
<blockquote>
<p>"In the beginning it was more poking around the code and adding and removing some ampersands and asterisks to try to make sense of <code>mut</code> and not <code>mut</code> and whatever." -- Senior engineer with 20 years of Java experience in cloud and IoT</p>
</blockquote>
<p>We also spoke with someone who found that not having much of a programming background seemed to benefit people picking up Rust. Not having worn-in grooves from other languages may play a role here, and it's worth investigating further.</p>
<blockquote>
<p>"I had someone who had never programmed much before start working on the internals of [our Rust project]. She was just fine with getting into Rust. It's more of the senior people that struggle as they need to unlearn practices which may work in other languages, but it's not the 'Rust' way." -- Researcher, Automotive OEM R&amp;D Lab</p>
</blockquote>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#learning-to-work-with-the-borrow-checker"></a>
Learning to work with the borrow checker</h3>
<p>We heard a lot about learning to work with the borrow checker instead of against it. People get there through different paths, but a few patterns came up repeatedly.</p>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#the-compiler-as-teacher"></a>
The compiler as teacher</h4>
<p>Rust's diagnostics did the teaching on their own, especially around lifetimes.</p>
<blockquote>
<p>"If you mess up the lifetimes in a piece of code that you've written by hand, I usually find that Rust's diagnostics are very helpful" -- Researcher working on static analysis of Rust programs</p>
</blockquote>
<blockquote>
<p>"Whatever's missing, the compiler usually fills in: it tells me 'you need to declare the lifetime of this reference', so I know and can figure it out. That all generally works pretty well." -- Senior Software Engineer</p>
</blockquote>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#learning-by-doing"></a>
Learning by doing</h4>
<p>Others felt like they only really internalized the borrow checker after writing a lot of Rust. It took projects, coding challenges, prototyping and so on until at some point it clicked.</p>
<blockquote>
<p>"I actually did not understand the borrow checker until I spent a lot of time writing Rust" -- Founder of a startup built on Rust</p>
</blockquote>
<blockquote>
<p>"Besides the prototyping work, I also did coding-challenge-type stuff to get familiar with Rust for Advent of Code. [..] It eventually clicked to the point where I wasn't fighting with Rust, it was working for me. I had that experience other people describe: when I managed to get my program to fit with Rust, it worked. I didn't spend time debugging." -- Principal Software Engineer, large SaaS provider</p>
</blockquote>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#letting-go-of-clone-guilt"></a>
Letting go of "clone guilt"</h4>
<p>Some learners arrive with the assumption that good Rust means zero clones, zero copies, lifetimes threaded through everything. They set the bar at optimal before they've learned how to write idiomatic Rust, and it makes the borrow checker feel harder than it needs to be at the outset.</p>
<blockquote>
<p>"On one of my first projects, I was like, 'I don't ever want to copy or clone anything,' so I carefully wove through all the lifetimes and got myself into a bit of a bind. Then I saw someone else just cloning the struct I was working with, and it was super cheap. Sometimes you can just clone and it's going to be okay." -- Researcher at a university</p>
</blockquote>
<p>The experienced Rust developers we spoke with consistently said the same thing: clone freely while you're learning, then optimize when you understand the problem. Rust's reputation for performance and correctness feeds this. Newcomers assume anything less than optimal is wrong before they've written a first working program, and clone guilt is how that shows up.</p>
<p>We think it could be an interesting area of future study to check into the patterns Rust programmers employ at different levels of experience and under which circumstances. One member of the Rust Vision doc team that's very experienced with Rust noted that there's kind of an "expected shape" they understand as passing the compiler. This knowledge influences how they approach writing code which wouldn't take that shape and they naturally find themselves understanding when to use so-called workarounds, such as passing around indices into arrays or <code>Vec</code>s.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#multi-paradigm-but-not-the-oop-some-are-used-to"></a>
Multi-paradigm, but not the OOP some are used to</h3>
<p>The Rust programming language is multi-paradigm, and how that lands depends on what you're coming from. We heard some that came from a functional background were delighted with digging into learning how much Rust inherits from that lineage. Some others noted that they and others on their teams struggled to unlearn the object-oriented style they'd come to use heavily in other languages like C++ and Java.</p>
<blockquote>
<p>"Developers coming from C++ tend to think object-oriented. I think that's a difference between C++ and Rust." -- Architect at Automotive OEM</p>
</blockquote>
<blockquote>
<p>"I had exactly that thing, where I would apply all my years of Java and JS thinking, where I could just create some object, not care about it, return it, have it sloshing around between various functions. Found myself reaching for these patterns and then being told 'no, you cannot do that'." -- Principal Engineer at a SaaS company</p>
</blockquote>
<p>Developers coming from functional programming had less to unlearn: strong typing, pattern matching, and an expression-oriented style were already familiar.</p>
<blockquote>
<p>"My background has been more functional programming, strong typing. That originated for me as a Lisper: once a Lisper, always a Lisper." -- Principal Software Engineer working on Rust tooling for safety-regulated industries</p>
</blockquote>
<blockquote>
<p>"The languages I primarily used before Rust were things like OCaml. Way back, I came from C and C++, the classic languages, and then I spent quite a long time doing primarily pure functional stuff. These days I've ended up back in what I like to think of as a pragmatic center ground [with Rust]." -- Fractional CTO</p>
</blockquote>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#teaching-rust-in-academia"></a>
Teaching Rust in academia</h3>
<p>We spoke with a university professor that's been teaching Rust generally. In the academic environment, they were able to use proxies for some things such as "traits are like interfaces in Java" because the students had already gone through a set of courses in their first and second years that taught them Java. They introduced concepts slowly throughout the course, choosing to deal with some more complex topics like generics later. The outcome generally was that students had no problem picking up Rust in this setting.</p>
<blockquote>
<p>"I couldn't see any big difference on the embedded side. We also teach an embedded class, and we did an experiment. Half of the students' feedback was worse on the Rust class, mostly because they needed to build the project themselves. The C students just got one from [an LLM], absolutely no problem." -- University Professor, on teaching Rust</p>
</blockquote>
<p>The C cohort leaned on LLMs for the project in ways the Rust cohort couldn't. We don't yet have a clear answer for why.</p>
<p>What did come through clearly was the Rust cohort's experience with the community. Some students needed to figure out which drivers to use for the embedded project and how to use them. Their professor encouraged them to open issues and ask questions directly on GitHub, and the maintainers responded. Students who had never contributed to open source before were getting answers from the people who wrote the code.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#learning-using-llms"></a>
Learning using LLMs</h3>
<p>Some experienced folks shared that they saw LLMs as a tool that can help someone come up to speed quickly, either as a research tool or for generating example Rust code to understand concepts.</p>
<blockquote>
<p>"I'm optimistic that there's a way to work [LLMs] in that will cut down that learning curve. One of the big things these tools bring is reducing the learning curve in general; these are very good tools to help you navigate a space that you don't know yet." -- Maintainer of large open source Rust crate</p>
</blockquote>
<blockquote>
<p>"I try [LLMs] out once a month, usually for generating an example or something like this. Just like with Stack Overflow: when you read an example, you should read it carefully and try to understand it. Not copy and paste it, but type it in your own words in code and then check it, because that's where the teeny tiny little mistakes are." -- Founder of startup built on Rust</p>
</blockquote>
<p>For some learners, an LLM is just another way to find answers, no different than a search engine.</p>
<blockquote>
<p>"So for the most part, picking up Rust - how do I learn? I'll [use web search for] things, I'll ask [an LLM], I'll just poke around and read the code." -- Senior Software Engineer working in a regulated space</p>
</blockquote>
<p>One founder went further and claimed that LLMs change who can become a Rust developer. One consulting company founder described hiring high school graduates with no systems programming background and training them as Rust developers, with LLMs filling in the learning gaps that would previously have required years of experience.</p>
<blockquote>
<p>"At the beginning, I was worried, but now that we have [LLMs] supporting development, the difficulty of the language doesn't matter. I'm seeing a huge opportunity behind strong runtime languages like Rust. [..] In [Developing Country] we hire 20-25 high school graduates, train them to be Rust programmers, then they enhance our workforce worldwide." -- Founder of a consulting company</p>
</blockquote>
<p>We heard this from one organization. This is a claim that the combination of Rust's compiler and LLM tooling can dramatically shorten the path from beginner to working developer. Whether it generalizes depends on questions we can't answer from a single interview: how long these developers stay, what kind of code they can maintain independently, and whether this training/learning model works outside this company's particular structure. If it holds up, the pool of people who can become Rust developers is much larger than the usual hiring profile suggests.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#organizational-considerations-for-rust-learners"></a>
Organizational considerations for Rust learners</h3>
<p>We spoke with a number of folks on teams that are using Rust in larger organizations. Teams wanted to know that everyone would end up at roughly the same level of competence, which led a good number to invest in training courses to get there. Some leaders found that staff was able to ramp well enough by reading The Rust Programming Language, going through Rustlings, and then picking up lower risk and priority tickets to work on. Having a sense of community was also important within companies; it helps people know they are not alone when they are asked to work on Rust after, say, a reorganization happens.</p>
<blockquote>
<p>"[..] the idea with the class as opposed to 'just read the Rust book on your own' was that this gives everyone kind of the same baseline going in."  -- Principal Firmware Engineer (mobile robotics)</p>
</blockquote>
<blockquote>
<p>"So typically we're going to have people work through Rustlings, work through The Rust Programming Language. We have them then start to pick up lower risk tickets to work on." -- Principal Engineer at a large SaaS provider</p>
</blockquote>
<blockquote>
<p>"We've got an internal Slack channel for Rust learning where people can drop questions and others will come in and answer them. That helps build up understanding and community." -- Software Engineer at a large corporation</p>
</blockquote>
<p>Some organizations found that while the person they'd hire would need to learn Rust, it was still preferable to the alternative of hiring someone for a critical piece of software written in another language.</p>
<blockquote>
<p>"They needed to grow and maintain this C++ codebase. They had a C++ wizard, and they tried for about two years to find someone with the same level of expertise. They ended up hiring people that didn't know Rust and ramping them up, creating FFI bindings from the C++ side so they could work in Rust. And you can feel it: the borrow checker is teaching these people the right way to handle their systems." -- Principal Engineer at an Automotive OEM</p>
</blockquote>
<p>The community and helping each other aspect seems to grow bonds as organizations mature.</p>
<blockquote>
<p>"Our team is [all about] mentorship. I've mentored people coming up to speed on Rust, and people help each other hugely." -- Principal Software Engineer at a large SaaS company</p>
</blockquote>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#silent-attrition"></a>
Silent attrition</h3>
<p>We identified some cases where people have approached Rust and bounced off of it, for one reason or another. In the below case, someone with a background in a language with fewer guardrails found themselves frustrated enough with Rust to walk away.</p>
<blockquote>
<p>"All of that means that that embedded ecosystem is very frustrating to somebody who comes from C and is like, why can't I just get a pointer to this peripheral and then write into the registers. What are you doing to me? [..] My friend never got over that. He looked at it and said, I'm not going to deal with this and walked away." -– A second University Professor</p>
</blockquote>
<p>There may be language features that for a particular domain are not seen as comfortable or usable yet, such as async Rust usage in a safety domain. We'd like to map which language features feel off-limits in which domains; async in safety-critical work probably isn't the only case.</p>
<blockquote>
<p>"We're not fully sure how async [Rust] will work out in the long run in our domain. [..] People don't feel comfortable yet since C++14 doesn't provide such concepts. [..] It's the chicken-and-egg problem again: we probably need to gain some experience to see whether we can actually benefit from these new concepts in the automotive and safety domains." -- Team Lead at Automotive Supplier (ASIL D target)</p>
</blockquote>
<p>We heard in at least one case, that while the language was challenging and there was a near bounce, the tooling helped keep them coming back and trying.</p>
<blockquote>
<p>"Well, I think my early impressions of Rust - one is I find C++ so intimidating, and I think a big part of why I was able to succeed at [..] learning Rust is the tooling. I mean, all this makes sense [..] but it's like, for me, getting started with Rust, the language was challenging, but the tooling was incredibly easy." -- Founder of another startup built on Rust</p>
</blockquote>
<p>While it might be considered more of a community concern, if there are interactions online and in spaces that point to learners having
so-called "skill issues" this feeds into the narrative that Rust must be hard to learn. We may be unintentionally turning away Rust Project contributors and maintainers due to the vibes being put out when new learners show up in certain spaces.</p>
<blockquote>
<p>"People are very helpful, but generally the attitude is: if your program is very complicated, it's mostly a skill issue. There's not that much empathy when people get stuck learning, and a lot of people are just pushed away by it. There's probably a huge number of people who silently stop wanting to write Rust, because at some point it gets complicated and the feedback they get is 'you just need to be a better programmer, obviously'." -- Software Engineer at a SaaS Provider</p>
</blockquote>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#feedback-on-near-bounces-from-survey"></a>
Feedback on near-bounces from survey</h4>
<p>We found a few interesting perspectives collected in the Rust Vision doc survey which we administered with examples of bouncing and coming back:</p>
<blockquote>
<p>"I started before 1.0, got stuck very soon when trying to translate patterns from C++ to Rust (due to borrow checking). I tried again after 1.0 and it stuck. [..]" -- Survey Respondent A</p>
</blockquote>
<p>Survey Respondent A went on to share in a more detailed response about a perceived weakness in Rust learning materials related to lifetimes and the borrow checker are explained. There was an observation that it's fairly easy to run into more complex situations with lifetimes and the borrow checker. They felt that the current state of this sort of material and tutorials is fairly superficial and can leave learners stuck when they run into those more complex situations.</p>
<p>One respondent that bounced once and came back shared challenges around usage of async. In concert with Rust's memory-safety and the borrow checker, they found some of the nitty-gritty details of async were difficult to learn. While we're aware of the Rust Project's continuous efforts to improve Rust's async story, this is another data point of a user that faced challenges.</p>
<p>Another survey respondent shared how they had multiple times bounced in trying to learn Rust. They returned after a year or so and found Rustlings to be highly motivating. We note that having multiple pathways for folks to learn Rust opens up more possibilities for those that nearly bounced, just like this person.</p>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#need-more-focused-work-on-silent-attritrion"></a>
Need more focused work on silent attritrion</h4>
<p>The thing that stood out most to us was the lack of real, first-hand knowledge of having bounced when learning Rust. While this is an obvious effect of soliciting answers to our survey and opportunities to interview through Rust channels and our networks, this cohort is good future candidate where interviews could start.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#conclusions"></a>
Conclusions</h3>
<p>Across these conversations, the experience of learning Rust depended heavily on context. Why someone was learning and what support they had mattered as much as the borrow checker. The same kinds of examples kept coming up: a training course that got a team to a shared baseline, a maintainer answering a student's first GitHub issue, and a colleague whose code showed that cloning was okay.</p>
<p>That context is largely something the community has a hand in. With that in mind, here is what we take away from what we heard, and what we still don't know.</p>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#what-seems-worth-trying"></a>
What seems worth trying</h4>
<p><strong>Learning materials aimed at unlearning.</strong> Syntax barely came up when people described their struggles. People struggled with unlearning habits from previous languages, whether OOP structuring from C++ and Java or the instinct to grab a raw pointer to a peripheral. Most of our learning materials teach Rust from first principles, and that works. What we didn't come across is much written for, say, the engineer with ten years of Java who lands on a Rust team after a reorg: material that names the patterns they'll reach for that won't transfer, and shows what to do instead. The professor we spoke with did a version of this in the classroom, leaning on "traits are like interfaces in Java" and saving generics for later in the course, and the students did fine. Something similar could work outside the classroom too.</p>
<p><strong>Put the "clone freely while you're learning" advice somewhere official.</strong> Every experienced developer we spoke with gave the same advice, but learners seem to mostly pick it up by accident, like the researcher who happened to see someone else cloning the struct they had been carefully threading lifetimes through. Saying it early in official materials would take some of the steepness out of the curve. The broader version belongs there too: idiomatic Rust doesn't have to mean optimal Rust, especially on a first project.</p>
<p><strong>Diagnostics are already a primary learning resource: several people told us the compiler taught them lifetimes before any documentation did.</strong> Diagnostics reach learners right at the moment they're stuck. When writing new ones, it seems worth keeping the confused newcomer in mind alongside the expert, because for a lot of people this is where the learning happens.</p>
<p><strong>Is "the book" actually out of date?</strong> Whether or not The Rust Programming Language or other materials are actually behind, a team evaluating Rust looked at its repository, saw unresolved issues and unmerged PRs, and moved on. As more companies evaluate adoption, more people will look at these materials with the same fresh eyes. Visible issue triage and some communication about what's current and what's planned would address the perception, separately from whatever content work may or may not be needed.</p>
<p><strong>How stuck learners get treated is shaping who stays.</strong> We heard about students getting answers on GitHub from the maintainers who wrote the code, and we heard about learners being told their struggles were a skill issue. The first group came away with a lasting good impression of Rust. Some of the second group walked away entirely, and because they leave quietly, it's easy to underestimate how many of them there are. The welcoming side of the community came up unprompted as a reason people stayed, so we know it makes a difference when we get this right.</p>
<p><strong>Every organization we spoke with described essentially the same ramp-up for bringing a team to Rust.</strong> Teams that brought groups of developers to Rust described roughly the same approach: get everyone to a shared baseline with a training course or with The Rust Programming Language and Rustlings, start people on lower-risk tickets, and give them somewhere internal to ask questions. Several organizations also found that hiring developers without Rust experience and ramping them up worked out better than continuing to search for rare expertise in another language. None of this is complicated, and teams weighing adoption don't need to invent a training program from scratch.</p>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/06/25/vision-doc-journeys-to-learning-rust/#what-we-still-don-t-know"></a>
What we still don't know</h4>
<p>The biggest gap is the people we didn't reach. Nearly everyone we spoke with stuck with Rust long enough to be reachable through Rust channels, so the stories of bouncing off came to us second-hand: a friend who walked away from embedded Rust, colleagues who quietly stopped after the responses they got. As we wrote in <a href="https://blog.rust-lang.org/2025/12/03/lessons-learned-from-the-rust-vision-doc-process/" rel="external">our first post</a>, finding people who decided against Rust takes targeted outreach. If the proposed User Research team comes together, talking with learners who bounced would make a good early project, and learning is probably the area where that research would teach us the most.</p>
<p>We also don't know what to make of LLMs as a learning tool yet. They came up as a search engine, as an example generator, and in one organization's case as something that makes training high school graduates into working Rust developers possible. We saw a classroom where the C cohort leaned on LLMs in ways the Rust cohort couldn't, and we don't have an explanation for it. All of this comes from a handful of conversations, so we treat it as a set of leads to follow up on. Given how quickly the tools are changing, it seems better to study this deliberately than to wait and see what folklore develops.</p>
<p>The folks we spoke with showed that people do get there: with enough passes through the materials and enough code written, it eventually clicks. The opportunities above are mostly about making it work for the people who didn't pick Rust on purpose, and for the ones who would have stuck around if their early experience had gone a little differently.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Security Blog: Improving Transparency and Assurance in the Web PKI: Mozilla Root Store Policy v3.1]]></title>
<description><![CDATA[Mozilla remains committed to maintaining a secure, trustworthy, and transparent Web PKI. Today we are announcing the publication of Mozilla Root Store Policy (MRSP) version 3.1, effective July 1, 2026.
While previous policy updates focused heavily on certificate revocation, automation, and operat...]]></description>
<link>https://tsecurity.de/de/3693288/tools/mozilla-security-blog-improving-transparency-and-assurance-in-the-web-pki-mozilla-root-store-policy-v31/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693288/tools/mozilla-security-blog-improving-transparency-and-assurance-in-the-web-pki-mozilla-root-store-policy-v31/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:23 +0200</pubDate>
<content:encoded><![CDATA[<p>Mozilla remains committed to maintaining a secure, trustworthy, and transparent Web PKI. Today we are announcing the publication of <a href="https://www.mozilla.org/en-US/about/governance/policies/security-group/certs/policy/">Mozilla Root Store Policy</a> (MRSP) version 3.1, effective July 1, 2026.</p>
<p>While previous policy updates focused heavily on certificate revocation, automation, and operational resilience, MRSP v3.1 focuses on a different challenge: ensuring that Certification Authority (CA) operations are sufficiently transparent, understandable, and auditable.</p>
<p>Trust in the Web PKI depends not only on technical requirements, but also on the ability of Mozilla, auditors, and the broader community to understand how CA systems are designed, operated, and assessed. MRSP v3.1 introduces new requirements intended to improve the quality of CA documentation and strengthen independent assurance of the design and effectiveness of controls that protect CA systems.</p>
<h3><b>Improving CP/CPS Documentation</b></h3>
<p>Certification Practice Statements (CPSes) and combined Certificate Policy / Certification Practice Statement documents (CP/CPSes) are among the most important public documents published by a CA. They describe how a CA conducts its operations and meets industry requirements.</p>
<p>Over the years, we have seen significant variation in the quality, structure, and level of detail provided in CP/CPS documentation. Some documents provide extensive implementation detail, while others rely heavily on incorporation by reference or provide only high-level descriptions of CA practices.</p>
<p>The revised policy will continue to require conformance with RFC 3647, as modified by applicable CA/Browser Forum requirements. Improvements to section 3.3 in the MRSP will establish clearer expectations regarding the content and quality of CP/CPS documentation. The new requirements emphasize that documentation must be explicit, bounded, auditable, and sufficiently detailed to describe the CA operator’s certificate issuance and management activities, while also establishing requirements for version control, accessibility, and ongoing maintenance. The objective is to ensure that a technically competent reviewer will be better-able to determine what commitments the CA has made, how those commitments are implemented, and whether the documented practices support technical, operational, and performance oversight.</p>
<p>Mozilla believes that these new CP/CPS requirements will improve transparency, reduce misunderstandings, support more effective audits, and help reduce the risk of certificate misissuance by ensuring that operational practices are documented accurately, consistently, and in sufficient detail to permit meaningful review.</p>
<h3><b>Introducing Detailed Controls Reports</b></h3>
<p>A second major enhancement in MRSP v3.1 is the introduction of Detailed Controls Reports (DCRs). Traditional WebTrust and ETSI audit reports provide valuable independent assurance regarding compliance with established criteria. However, they generally provide only limited visibility into the specific controls, testing procedures, and operational environments that support those conclusions.</p>
<p>Beginning with audit periods starting on or after July 1, 2027, CA operators with root certificates enabled for TLS website authentication will be required to obtain a DCR. The purpose of the DCR is to provide CA management, auditors, and Mozilla with greater visibility into the controls, testing, and operating effectiveness of CA systems that support compliance with the CA/Browser Forum’s TLS Baseline Requirements and Network and Certificate System Security Requirements. Mozilla generally expects to review DCRs only on an as-needed basis, such as during compliance reviews, incident investigations, root inclusion evaluations, or other oversight activities.</p>
<p>A DCR must include:</p>
<ul>
<li>The scope and boundaries of the audited CA systems;</li>
<li>Applicable audit criteria;</li>
<li>Controls implemented by the CA;</li>
<li>The auditor’s testing procedures;</li>
<li>Results of control testing; and</li>
<li>Information regarding control exceptions or deficiencies.</li>
</ul>
<p>Mozilla expects that DCRs will complement existing audit reports and strengthen transparency and assurance by providing additional detail regarding system boundaries, control implementation, testing procedures, and control effectiveness that is not typically available in traditional audit reports. Effective compliance requires more than documented policies and successful audits; it also requires management understanding, oversight, and engagement. By providing greater visibility into CA systems, controls, testing activities, and operational risks, DCRs can help reinforce a strong tone at the top regarding compliance expectations, support informed decision-making and resource allocation, enable earlier identification of weaknesses, and promote a culture of continuous improvement. The intent is not to replace existing audit reports, but to provide additional information that supports effective governance, oversight, and informed trust decisions.</p>
<h3><b>Additional Clarifications and Improvements</b></h3>
<p>MRSP v3.1 also includes several targeted clarifications and refinements:</p>
<ul>
<li>aligns Mozilla’s mass revocation planning requirements with the corresponding CA/Browser Forum Baseline Requirements, helping ensure consistency across compliance frameworks;</li>
<li>clarifies audit expectations for root inclusion requests, including requirements relating to audit continuity and root key generation ceremonies;</li>
<li>requires root CA key pairs submitted for inclusion to have been generated within the previous five years, helping ensure that newly included roots are based on contemporary cryptographic practices and controls; and</li>
<li>clarifies expectations when ownership or operational control of a CA changes, helping ensure that Mozilla receives timely notice and can evaluate the impact of acquisitions or organizational changes on continued compliance.</li>
</ul>
<h3><b>Looking Forward</b></h3>
<p>Mozilla recognizes that these changes will require preparation by CA operators, auditors, and other ecosystem participants. To support implementation, Mozilla is publishing accompanying wiki guidance regarding both <a href="https://wiki.mozilla.org/CA/CP-CPS_Guidance">CP/CPS Documentation</a> and <a href="https://wiki.mozilla.org/CA/DCRs">Detailed Controls Reports</a>.</p>
<p>As with previous policy updates, these changes were informed by discussions with CA operators, auditors, and members of the Web PKI community. We appreciate the feedback received during the review process and look forward to continued collaboration as the ecosystem evolves.</p>
<p>Mozilla has a longstanding focus on building confidence in the Web PKI through transparency, accountability, and continuous improvement. By requiring higher-quality CP/CPS documentation and strengthening independent assurance, MRSP v3.1 advances Mozilla’s commitment to protecting its users and maintaining their trust in the systems that help secure the web.</p>
<p>The post <a href="https://blog.mozilla.org/security/2026/06/29/improving-transparency-and-assurance-in-the-web-pki-mozilla-root-store-policy-v3-1/">Improving Transparency and Assurance in the Web PKI: Mozilla Root Store Policy v3.1</a> appeared first on <a href="https://blog.mozilla.org/security">Mozilla Security Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Rust Programming Language Blog: Announcing Rust 1.96.1]]></title>
<description><![CDATA[The Rust team has published a new point release of Rust, 1.96.1. Rust is a programming language that is empowering everyone to build reliable and efficient software.
If you have a previous version of Rust installed via rustup, getting Rust 1.96.1 is as easy as:
rustup update stable
If you don't h...]]></description>
<link>https://tsecurity.de/de/3693287/tools/the-rust-programming-language-blog-announcing-rust-1961/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693287/tools/the-rust-programming-language-blog-announcing-rust-1961/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:22 +0200</pubDate>
<content:encoded><![CDATA[<p>The Rust team has published a new point release of Rust, 1.96.1. Rust is a programming language that is empowering everyone to build reliable and efficient software.</p>
<p>If you have a previous version of Rust installed via rustup, getting Rust 1.96.1 is as easy as:</p>
<pre class="giallo z-code"><code><span class="giallo-l"><span>rustup update stable</span></span></code></pre>
<p>If you don't have it already, you can <a href="https://www.rust-lang.org/install.html" rel="external">get <code>rustup</code></a> from the appropriate page on our website.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/06/30/Rust-1.96.1/#what-s-in-1-96-1"></a>
What's in 1.96.1</h3>
<p>Rust 1.96.1 fixes:</p>
<ul>
<li><a href="https://github.com/rust-lang/cargo/pull/17131" rel="external">Missing retries / timeouts in Cargo's HTTP client</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158214" rel="external">Miscompilation in a MIR optimization</a></li>
</ul>
<p>It also <a href="https://github.com/rust-lang/cargo/pull/17140" rel="external">fixes</a> three CVEs
affecting libssh2 (which is compiled into Cargo):</p>
<ul>
<li><a href="https://www.cve.org/CVERecord?id=CVE-2025-15661" rel="external">CVE-2025-15661</a></li>
<li><a href="https://www.cve.org/CVERecord?id=CVE-2026-55199" rel="external">CVE-2026-55199</a></li>
<li><a href="https://www.cve.org/CVERecord?id=CVE-2026-55200" rel="external">CVE-2026-55200</a></li>
</ul>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/06/30/Rust-1.96.1/#contributors-to-1-96-1"></a>
Contributors to 1.96.1</h4>
<p>Many people came together to create Rust 1.96.1. We couldn't have done it without all of you. <a href="https://thanks.rust-lang.org/rust/1.96.1/" rel="external">Thanks!</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Rust Programming Language Blog: Announcing Rust 1.97.0]]></title>
<description><![CDATA[The Rust team is happy to announce a new version of Rust, 1.97.0. Rust is a programming language empowering everyone to build reliable and efficient software.
If you have a previous version of Rust installed via rustup, you can get 1.97.0 with:
$ rustup update stable
If you don't have it already,...]]></description>
<link>https://tsecurity.de/de/3693286/tools/the-rust-programming-language-blog-announcing-rust-1970/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693286/tools/the-rust-programming-language-blog-announcing-rust-1970/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:20 +0200</pubDate>
<content:encoded><![CDATA[<p>The Rust team is happy to announce a new version of Rust, 1.97.0. Rust is a programming language empowering everyone to build reliable and efficient software.</p>
<p>If you have a previous version of Rust installed via <code>rustup</code>, you can get 1.97.0 with:</p>
<pre class="giallo z-code"><code><span class="giallo-l"><span>$</span><span> rustup update stable</span></span></code></pre>
<p>If you don't have it already, you can get <a href="https://www.rust-lang.org/install.html" rel="external"><code>rustup</code></a> from the appropriate page on our website, and check out the <a href="https://doc.rust-lang.org/stable/releases.html#version-1970-2026-07-09" rel="external">detailed release notes for 1.97.0</a>.</p>
<p>If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel (<code>rustup default beta</code>) or the nightly channel (<code>rustup default nightly</code>). Please <a href="https://github.com/rust-lang/rust/issues/new/choose" rel="external">report</a> any bugs you might come across!</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/07/09/Rust-1.97.0/#what-s-in-1-97-0-stable"></a>
What's in 1.97.0 stable</h3>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/07/09/Rust-1.97.0/#symbol-mangling-v0-enabled-by-default"></a>
Symbol mangling v0 enabled by default</h4>
<p>When Rust is compiled into object files and binaries, each item (functions,
statics, etc) must have a globally unique "symbol" identifying it. To avoid
conflicts when linking together different Rust programs, Rust mangles the
original name of items to include additional context such as the module path,
defining crate, generics, and more. Historically, this mangling was based on
the <a href="https://refspecs.linuxbase.org/cxxabi-1.86.html#mangling" rel="external">Itanium ABI</a>,
also (sometimes) used by C++.</p>
<p>The new mangling scheme resolves a number of drawbacks from the previous one:</p>
<ul>
<li>Generic parameter instantiations preserve their values, rather than being tracked solely behind a hash</li>
<li>Inconsistencies: not all parts used the Itanium ABI, meaning that custom demangling was still necessary</li>
</ul>
<p>Since Rust 1.59, the compiler has supported opting into a Rust-specific
mangling scheme via <code>-Csymbol-mangling-version=v0</code>. Since November 2025, this
scheme has been enabled by default on nightly, and 1.97 is now enabling it on
stable Rust. The legacy mangling scheme can only be enabled on nightly, and the
current plan is to fully remove it.</p>
<p>See the previous <a href="https://blog.rust-lang.org/2025/11/20/switching-to-v0-mangling-on-nightly/" rel="external">blog post</a> for more details.</p>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/07/09/Rust-1.97.0/#cargo-support-for-denying-warnings"></a>
Cargo support for denying warnings</h4>
<p>It's common practice to deny warnings in CI. Historically, doing so is
typically done through <code>RUSTFLAGS=-Dwarnings</code>. With Rust 1.97, Cargo controls
how warnings interact with build success: either silencing them (via <code>allow</code>
level), rendering without failing (default, <code>warn</code>), or denying them (via <code>deny</code>).</p>
<p>As a  result of Cargo configuration determining the behavior, using this
feature doesn't invalidate the underlying build cache, meaning that it's easy
to temporarily opt-in. For example, if warnings are adding unwanted noise while
working through fixing errors after a refactor, you can run
<code>CARGO_BUILD_WARNINGS=allow cargo check</code>, temporarily silencing them.</p>
<p>In CI, jobs can instead set <code>CARGO_BUILD_WARNINGS=deny</code> to deny warnings. This
can be combined with <code>--keep-going</code> to collect all errors and warnings rather
than stopping on the first failing package.</p>
<p>See the <a href="https://doc.rust-lang.org/cargo/reference/config.html#buildwarnings" rel="external">documentation</a> for more details.</p>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/07/09/Rust-1.97.0/#linker-output-no-longer-hidden-by-default"></a>
Linker output no longer hidden by default</h4>
<p>rustc invokes a linker on behalf of users. Historically, rustc has silenced
linker output by default if the link completes successfully. This can mask real
problems, though, so in Rust 1.97 we are enabling linker messages by default.
These are emitted as a warning lint, for example:</p>
<pre class="giallo z-code"><code><span class="giallo-l"><span>warning: linker stderr: ignoring deprecated linker optimization setting '1'</span></span>
<span class="giallo-l"><span>  |</span></span>
<span class="giallo-l"><span>  = note: `#[warn(linker_messages)]` on by default</span></span></code></pre>
<p>Common linker messages that have been diagnosed as false positives or intentional behavior
are filtered out by rustc. Several defects have already been fixed as a result
of no longer hiding this output on nightly.</p>
<p>Note that currently, <code>linker_messages</code> is a special lint that is <em>not</em> affected
by the <code>warnings</code> lint group. This is intentional as rustc generally doesn't
control linker output as precisely, and it's not uncommon for output to only
appear on some platforms. If you are seeing what you think is a false positive
output from the linker, please <a href="https://github.com/rust-lang/rust/issues/new/choose" rel="external">file an issue</a>.</p>
<p>To silence the warning in the mean time, you can configure the lint level to
allow. This can be done through <code>Cargo.toml</code> by adding a <a href="https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-lints-section" rel="external">lints section</a> like this:</p>
<pre class="giallo z-code"><code><span class="giallo-l"><span>[</span><span>lints</span><span>.</span><span>rust</span><span>]</span></span>
<span class="giallo-l"><span class="z-variable">linker_messages</span><span> =</span><span class="z-punctuation z-definition z-string z-string"> "</span><span class="z-string z-quoted z-string">allow</span><span class="z-punctuation z-definition z-string z-string">"</span></span></code></pre><h4><a class="anchor" href="https://blog.rust-lang.org/2026/07/09/Rust-1.97.0/#stabilized-apis"></a>
Stabilized APIs</h4>
<ul>
<li><a href="https://doc.rust-lang.org/stable/std/iter/struct.RepeatN.html#impl-Default-for-RepeatN%3CA%3E" rel="external"><code>Default for RepeatN</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/ffi/struct.FromBytesUntilNulError.html#impl-Copy-for-FromBytesUntilNulError" rel="external"><code>Copy for ffi::FromBytesUntilNulError</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/154003" rel="external"><code>Send for std::fs::File</code> on UEFI</a></li>
<li><a href="https://doc.rust-lang.org/stable/std/primitive.u32.html#method.isolate_highest_one" rel="external"><code>&lt;{integer}&gt;::isolate_highest_one</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/primitive.u32.html#method.isolate_lowest_one" rel="external"><code>&lt;{integer}&gt;::isolate_lowest_one</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/primitive.u32.html#method.highest_one" rel="external"><code>&lt;{integer}&gt;::highest_one</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/primitive.u32.html#method.lowest_one" rel="external"><code>&lt;{integer}&gt;::lowest_one</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/primitive.u32.html#method.bit_width" rel="external"><code>&lt;{uN}&gt;::bit_width</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.isolate_highest_one" rel="external"><code>NonZero&lt;{integer}&gt;::isolate_highest_one</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.isolate_lowest_one" rel="external"><code>NonZero&lt;{integer}&gt;::isolate_lowest_one</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.highest_one" rel="external"><code>NonZero&lt;{integer}&gt;::highest_one</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.lowest_one" rel="external"><code>NonZero&lt;{integer}&gt;::lowest_one</code></a></li>
<li><a href="https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.bit_width" rel="external"><code>NonZero&lt;{uN}&gt;::bit_width</code></a></li>
</ul>
<p>These previously stable APIs are now stable in const contexts:</p>
<ul>
<li><a href="https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_control" rel="external"><code>char::is_control</code></a></li>
</ul>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/07/09/Rust-1.97.0/#other-changes"></a>
Other changes</h4>
<p>Check out everything that changed in <a href="https://github.com/rust-lang/rust/releases/tag/1.97.0" rel="external">Rust</a>, <a href="https://doc.rust-lang.org/nightly/cargo/CHANGELOG.html#cargo-197-2026-07-09" rel="external">Cargo</a>, and <a href="https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-197" rel="external">Clippy</a>.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/07/09/Rust-1.97.0/#contributors-to-1-97-0"></a>
Contributors to 1.97.0</h3>
<p>Many people came together to create Rust 1.97.0. We couldn't have done it without all of you. <a href="https://thanks.rust-lang.org/rust/1.97.0/" rel="external">Thanks!</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Rust Programming Language Blog: crates.io: development update]]></title>
<description><![CDATA[Another six months have passed since our last development update, and the crates.io team has been busy. Here's a summary of the most notable changes and improvements made to crates.io since then.

Source Code Viewer
Crate pages now have a "Code" tab that lets you browse the contents of published ...]]></description>
<link>https://tsecurity.de/de/3693285/tools/the-rust-programming-language-blog-cratesio-development-update/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693285/tools/the-rust-programming-language-blog-cratesio-development-update/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:18 +0200</pubDate>
<content:encoded><![CDATA[<p>Another six months have passed since our <a href="https://blog.rust-lang.org/2026/01/21/crates-io-development-update/" rel="external">last development update</a>, and the crates.io team has been busy. Here's a summary of the most notable changes and improvements made to <a href="https://crates.io/" rel="external">crates.io</a> since then.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/07/13/crates-io-development-update/#source-code-viewer"></a>
Source Code Viewer</h3>
<p>Crate pages now have a "Code" tab that lets you browse the contents of published crate versions directly on crates.io. This shows you the exact files that <code>cargo</code> downloads when you add a crate as a dependency, which might differ from the linked repository. This makes it much easier to audit your dependencies, including files that never appear in the repository, like the normalized <code>Cargo.toml</code> files that <code>cargo</code> generates.</p>
<p><img alt='Source code viewer showing the "Code" tab of the serde crate' src="https://blog.rust-lang.org/2026/07/13/crates-io-development-update/code-tab.png"></p>
<p>The viewer comes with a file tree sidebar with search functionality, syntax highlighting, and GitHub-style line selection, where clicking or dragging line numbers produces shareable <code>#L10-L20</code> URLs.</p>
<p>Under the hood, the server now builds a zip file for every published version. Since the <code>.crate</code> files that <code>cargo</code> consumes are gzipped tarballs without random access support, a background job re-packs each of them into a seekable zip archive plus a JSON manifest describing the contained files. Both are served from our static CDN. The frontend then fetches only the manifest and loads each file on demand with an HTTP range request. Because of this architecture, browsing crate sources essentially adds no load on the crates.io API servers. Existing crate versions have been backfilled, so this works for old releases too.</p>
<p>The rendering library behind the code viewer is a diff renderer at heart, and that's no accident: a version-to-version diff viewer built on the same infrastructure is currently in the works. This will allow you to review exactly what changed between two published versions, right on crates.io. Stay tuned!</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/07/13/crates-io-development-update/#untangling-crates-io-accounts-from-github"></a>
Untangling crates.io Accounts from GitHub</h3>
<p>At the end of May, the crates.io team accepted <a href="https://github.com/rust-lang/rfcs/pull/3946" rel="external">RFC #3946</a>. Crates.io accounts always have been tightly coupled to GitHub: signing in means "Log in with GitHub", and your crates.io identity is your GitHub username. The RFC changes that. It introduces usernames that are native to crates.io and independent of linked GitHub accounts, as a prerequisite for eventually supporting login via other identity providers.</p>
<p>The implementation of crates.io usernames has started, but there is still a lot left to do, most visibly the ability to change your crates.io username. After that is complete, there will be future RFCs and implementation for signing in with identity providers other than GitHub. Since all of this touches authentication and account security, we are deliberately taking it slow and rolling these changes out in small, carefully reviewed steps.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/07/13/crates-io-development-update/#advisories-and-suggestions"></a>
Advisories and Suggestions</h3>
<p>In our <a href="https://blog.rust-lang.org/2026/01/21/crates-io-development-update/" rel="external">January update</a> we introduced the "Security" tab, which shows security advisories from the <a href="https://rustsec.org/" rel="external">RustSec</a> database. We have since taken this integration one step further: crates that RustSec has flagged as unmaintained now show a warning banner directly on their crate pages, linking to the corresponding advisory for details and possible alternatives. Thanks to <a href="https://github.com/djc" rel="external">Dirkjan Ochtman</a> for implementing this feature!</p>
<p><img alt="Unmaintained warning banner on the ansi_term crate page" src="https://blog.rust-lang.org/2026/07/13/crates-io-development-update/unmaintained-banner.png"></p>
<p>Related to this, some popular crates have been largely absorbed into the Rust standard library over the years, like <code>lazy_static</code>, which has been superseded by <code>std::sync::LazyLock</code> since Rust 1.80. Crate pages of such crates now show a friendly "You might not need this dependency" banner describing the standard library replacement, and superseded crates in dependency lists get a small light bulb icon with a similar hint.</p>
<p><img alt='"You might not need this dependency" banner on the lazy_static crate page' src="https://blog.rust-lang.org/2026/07/13/crates-io-development-update/std-replacement-banner.png"></p>
<p>The dataset behind this feature lives in the new <a href="https://github.com/rust-lang/std-replacement-data" rel="external">rust-lang/std-replacement-data</a> repository, together with a documented inclusion policy: standard library replacements only, every entry must cite the stable <code>std</code>, <code>core</code>, or <code>alloc</code> API and Rust version, and crate maintainers get a notice-and-comment window before an entry is added. New entries can be proposed upstream and can benefit other tools too.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/07/13/crates-io-development-update/#ferris"></a>
Ferris</h3>
<p>The most delightful change of this cycle: the Ferris on our error pages now follows your mouse cursor with its eyes:</p>
<p><img alt="Ferris' eyes following the mouse cursor on the error page" src="https://blog.rust-lang.org/2026/07/13/crates-io-development-update/ferris.gif"></p>
<p>Getting a 404 error on crates.io is now slightly less sad.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/07/13/crates-io-development-update/#svelte-frontend-migration-completed"></a>
Svelte Frontend Migration Completed</h3>
<p>In our <a href="https://blog.rust-lang.org/2026/01/21/crates-io-development-update/" rel="external">January update</a>, we announced that we were experimenting with porting the crates.io frontend from Ember.js to <a href="https://svelte.dev/" rel="external">Svelte</a>. This experiment has concluded successfully: the new frontend reached feature parity, went through a <a href="https://blog.rust-lang.org/inside-rust/2026/04/17/crates-io-svelte-public-testing/" rel="external">public testing phase</a> in April, became the default at the beginning of May, and the Ember.js app has been removed from our repository.</p>
<p>We designed this change to be invisible for our users, since the new frontend is a 1:1 port of the previous design and functionality. For the team and our contributors, however, it is a big deal: the frontend is now built on a more modern framework, which should make it easier for new contributors to get started. It also allows us to iterate faster, as the source code viewer above demonstrates.</p>
<p>We want to thank the <a href="https://emberjs.com/teams/" rel="external">Ember.js team</a> for a framework that served crates.io well for many years, and the Svelte team for making the transition so enjoyable.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/07/13/crates-io-development-update/#miscellaneous"></a>
Miscellaneous</h3>
<p>These were some of the more visible changes to crates.io over the past six months, but a lot has happened "under the hood" as well:</p>
<ul>
<li>
<p><strong>Search performance</strong>: Relevance-sorted search queries previously ranked every crate matching the query, which could take 1-2 seconds for short or common search terms. Ranking is now bounded to the 1,000 matching crates with the highest recent download counts.</p>
</li>
<li>
<p><strong>Reverse dependencies performance</strong>: The reverse dependencies endpoint no longer recomputes the full dependent set on every request. It is now served from a precomputed table kept in sync by database triggers, turning an expensive join into a bounded index scan and greatly reducing the chance of getting a timeout error.</p>
</li>
<li>
<p><strong>New ARCHITECTURE.md</strong>: If you've ever wondered how crates.io actually works, our <a href="https://github.com/rust-lang/crates.io/blob/main/docs/ARCHITECTURE.md" rel="external"><code>ARCHITECTURE.md</code></a> document got a complete rewrite. It is now organized around the high-level systems that make up crates.io and how they fit together, and includes walkthroughs of what happens when you run <code>cargo publish</code>, why a typical crate download never touches our API servers, and how download counts are derived from CDN access logs.</p>
</li>
<li>
<p><strong>Definition lists</strong>: READMEs now render Markdown <a href="https://github.com/rust-lang/crates.io/pull/13950" rel="external">definition lists</a>, a widely used Markdown extension. Our markdown renderer <a href="https://crates.io/crates/comrak" rel="external">comrak</a> already supported them, the extension just wasn't enabled yet. Thanks to <a href="https://github.com/mistaste" rel="external">@mistaste</a> for this contribution!</p>
</li>
<li>
<p><strong>CDN cache tags</strong>: Files uploaded to our static CDN now carry cache-tag metadata, allowing us to invalidate all cached files of a crate or a specific release in a single operation, instead of issuing one invalidation per file URL.</p>
</li>
<li>
<p><strong>Caching improvements</strong>: We removed a global <code>Vary: Cookie</code> response header that was preventing our CDNs from caching public API responses and frontend assets effectively. Per-user responses now use <code>Cache-Control: no-store</code> instead, resulting in better cache hit rates at the CDN edge.</p>
</li>
<li>
<p><strong>Accessibility</strong>: We have made crates.io friendlier to screen readers: decorative icons are now hidden from the accessibility tree, heading hierarchies have been fixed, and lists are marked up as proper lists. ARIA snapshot tests now ensure that regressions can't slip in unnoticed. We plan to continue to improve crates.io accessibility over the coming months.</p>
</li>
<li>
<p><strong>Git index performance</strong>: The background worker's local clone of the git index is now a bare and shallow repository, eliminating roughly 250,000 checked-out files and the full commit history from its disk, improving its performance as we see increased rates of crate publication. The periodic index squashing now goes through the GitHub API instead of generating large git packs locally, which had previously caused out-of-memory failures on the production worker.</p>
</li>
</ul>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/07/13/crates-io-development-update/#feedback"></a>
Feedback</h3>
<p>We hope you enjoyed this update on the development of crates.io. If you have any feedback or questions, please let us know on <a href="https://rust-lang.zulipchat.com/#narrow/stream/318791-t-crates-io" rel="external">Zulip</a> or <a href="https://github.com/rust-lang/crates.io/discussions" rel="external">GitHub</a>. We are always happy to hear from you and are looking forward to your feedback!</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Rust Programming Language Blog: Announcing Rust 1.97.1]]></title>
<description><![CDATA[The Rust team has published a new point release of Rust, 1.97.1. Rust is a programming language that is empowering everyone to build reliable and efficient software.
If you have a previous version of Rust installed via rustup, getting Rust 1.97.1 is as easy as:
rustup update stable
If you don't h...]]></description>
<link>https://tsecurity.de/de/3693284/tools/the-rust-programming-language-blog-announcing-rust-1971/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693284/tools/the-rust-programming-language-blog-announcing-rust-1971/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:17 +0200</pubDate>
<content:encoded><![CDATA[<p>The Rust team has published a new point release of Rust, 1.97.1. Rust is a programming language that is empowering everyone to build reliable and efficient software.</p>
<p>If you have a previous version of Rust installed via rustup, getting Rust 1.97.1 is as easy as:</p>
<pre class="giallo z-code"><code><span class="giallo-l"><span>rustup update stable</span></span></code></pre>
<p>If you don't have it already, you can <a href="https://www.rust-lang.org/install.html" rel="external">get <code>rustup</code></a> from the appropriate page on our website.</p>
<h3><a class="anchor" href="https://blog.rust-lang.org/2026/07/16/Rust-1.97.1/#what-s-in-1-97-1"></a>
What's in 1.97.1</h3>
<p>Rust 1.97.1 fixes a <a href="https://github.com/rust-lang/rust/issues/159035" rel="external">miscompilation in an LLVM optimization</a>.</p>
<p>We have backported both an LLVM fix and a disable of the underlying change in Rust 1.97.0 of
Rust's generated IR that increased the likelihood of this happening. However,
note that the underlying miscompilation has been present since at least Rust
1.87.</p>
<p>If you'd like to help us out by testing future releases, you might consider
running your code's CI or locally using the beta channel (<code>rustup default beta</code>) or the nightly
channel (<code>rustup default nightly</code>). Please
<a href="https://github.com/rust-lang/rust/issues/new/choose" rel="external">report</a> any bugs you
might come across!</p>
<h4><a class="anchor" href="https://blog.rust-lang.org/2026/07/16/Rust-1.97.1/#contributors-to-1-97-1"></a>
Contributors to 1.97.1</h4>
<p>Many people came together to create Rust 1.97.1. We couldn't have done it without all of you. <a href="https://thanks.rust-lang.org/rust/1.97.1/" rel="external">Thanks!</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[v8.20.0-beta.1]]></title>
<description><![CDATA[Introducing disappearing call events: Missed, outgoing, and received calls that occur after you install this update will now automatically disappear in any chat where disappearing messages are enabled.
Now you can reorder installed sticker packs so your new favorites don’t get stuck in the back o...]]></description>
<link>https://tsecurity.de/de/3693283/tools/v8200-beta1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693283/tools/v8200-beta1/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:16 +0200</pubDate>
<content:encoded><![CDATA[<ul>
<li>Introducing disappearing call events: Missed, outgoing, and received calls that occur after you install this update will now automatically disappear in any chat where disappearing messages are enabled.</li>
<li>Now you can reorder installed sticker packs so your new favorites don’t get stuck in the back of the line.</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[v8.20.0]]></title>
<description><![CDATA[Introducing disappearing call events: Missed, outgoing, and received calls that occur after you install this update will now automatically disappear in any chat where disappearing messages are enabled.
Now you can reorder installed sticker packs so your new favorites don’t get stuck in the back o...]]></description>
<link>https://tsecurity.de/de/3693282/tools/v8200/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693282/tools/v8200/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:15 +0200</pubDate>
<content:encoded><![CDATA[<ul>
<li>Introducing disappearing call events: Missed, outgoing, and received calls that occur after you install this update will now automatically disappear in any chat where disappearing messages are enabled.</li>
<li>Now you can reorder installed sticker packs so your new favorites don’t get stuck in the back of the line.</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[v17.1.3]]></title>
<description><![CDATA[chore: bump version to 17.1.3]]></description>
<link>https://tsecurity.de/de/3692746/tools/v1713/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3692746/tools/v1713/</guid>
<pubDate>Sat, 25 Jul 2026 01:38:42 +0200</pubDate>
<content:encoded><![CDATA[<p>chore: bump version to 17.1.3</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[v17.1.2: chore: bump version to 17.1.2]]></title>
<description><![CDATA[fixed rustfmt drift and clippy errors in pi-shell moreutils builtins (combine, errno, ifne, isutf8, sponge, ts) that blocked the release check gate]]></description>
<link>https://tsecurity.de/de/3691845/tools/v1712-chore-bump-version-to-1712/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3691845/tools/v1712-chore-bump-version-to-1712/</guid>
<pubDate>Fri, 24 Jul 2026 16:55:04 +0200</pubDate>
<content:encoded><![CDATA[<ul>
<li>fixed rustfmt drift and clippy errors in pi-shell moreutils builtins (combine, errno, ifne, isutf8, sponge, ts) that blocked the release check gate</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[v17.1.1: fix(ci): repaired native builds broken by native audio stack deps]]></title>
<description><![CDATA[Added ensure-cmake action installing pinned cmake/ninja on omp-kata pods; audiopus_sys builds bundled libopus via CMake (Ninja for MSVC cross).
Set CMAKE_POLICY_VERSION_MINIMUM=3.5 globally and in build-native.ts: the bundled opus tree declares cmake_minimum_required below 3.5, which CMake 4.x re...]]></description>
<link>https://tsecurity.de/de/3690929/tools/v1711-fixci-repaired-native-builds-broken-by-native-audio-stack-deps/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3690929/tools/v1711-fixci-repaired-native-builds-broken-by-native-audio-stack-deps/</guid>
<pubDate>Fri, 24 Jul 2026 09:40:00 +0200</pubDate>
<content:encoded><![CDATA[<ul>
<li>Added ensure-cmake action installing pinned cmake/ninja on omp-kata pods; audiopus_sys builds bundled libopus via CMake (Ninja for MSVC cross).</li>
<li>Set CMAKE_POLICY_VERSION_MINIMUM=3.5 globally and in build-native.ts: the bundled opus tree declares cmake_minimum_required below 3.5, which CMake 4.x refuses.</li>
<li>Dropped the -C target-cpu=native fallback for non-x64 native builds: it baked build-host CPU features into shipped darwin arm64 addons and trips ring 0.17's aarch64-apple const assertion.</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[v17.1.0]]></title>
<description><![CDATA[test(coding-agent): aligned transcript compaction test with supersede…]]></description>
<link>https://tsecurity.de/de/3690511/tools/v1710/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3690511/tools/v1710/</guid>
<pubDate>Fri, 24 Jul 2026 03:09:44 +0200</pubDate>
<content:encoded><![CDATA[<p>test(coding-agent): aligned transcript compaction test with supersede…</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: Happy BMO Push Day! (20260723.{1,2})]]></title>
<description><![CDATA[The following changes have been pushed to bugzilla.mozilla.org:
Github Link

Bug 2055236 - The column headers in Github PR are barely visible in dark mode
Bug 2054574 - Do not auto-assigning Hackbot when submitting a Phabricator revision

Github Link
The following changes have been pushed to bugz...]]></description>
<link>https://tsecurity.de/de/3690418/tools/firefox-tooling-announcements-happy-bmo-push-day-2026072312/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3690418/tools/firefox-tooling-announcements-happy-bmo-push-day-2026072312/</guid>
<pubDate>Fri, 24 Jul 2026 01:03:20 +0200</pubDate>
<content:encoded><![CDATA[<p>The following changes have been pushed to <a href="https://bugzilla.mozilla.org/">bugzilla.mozilla.org</a>:</p>
<p><a href="https://github.com/mozilla-bteam/bmo/tree/release-20260723.1" rel="noopener nofollow ugc">Github Link</a></p>
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2055236">Bug 2055236</a> - The column headers in Github PR are barely visible in dark mode</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2054574">Bug 2054574</a> - Do not auto-assigning Hackbot when submitting a Phabricator revision</li>
</ul>
<p><a href="https://github.com/mozilla-bteam/bmo/tree/release-20260723.2" rel="noopener nofollow ugc">Github Link</a></p>
<p>The following changes have been pushed to <a href="https://bugzilla.mozilla.org/">bugzilla.mozilla.org</a>:</p>
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2055285">Bug 2055285</a> - Remove the “Show closed/merged PR” checkbox in the GH PR view</li>
</ul>
<p>Discuss these changes in the <a href="https://matrix.to/#/%23bmo:mozilla.org" rel="noopener nofollow ugc">BMO Matrix Room</a></p>
            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://discourse.mozilla.org/t/happy-bmo-push-day-20260723-1-2/149025">Read full topic</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mozilla Addons Blog: Firefox 153 WebExtensions API updates]]></title>
<description><![CDATA[We had a bumper release of WebExtensions API updates in Firefox 153. To start, there is a permissions change that affects how your extensions access local files. We then have two contributions from the community members: userScripts.execute() and the new publicSuffix API. We’re covering those con...]]></description>
<link>https://tsecurity.de/de/3689274/tools/mozilla-addons-blog-firefox-153-webextensions-api-updates/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3689274/tools/mozilla-addons-blog-firefox-153-webextensions-api-updates/</guid>
<pubDate>Thu, 23 Jul 2026 16:06:24 +0200</pubDate>
<content:encoded><![CDATA[<p>We had a bumper release of <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/153#changes_for_add-on_developers">WebExtensions API updates in Firefox 153</a>. To start, there is a permissions change that affects how your extensions access local files. We then have two contributions from the community members: <span>userScripts.execute()</span> and the new <span>publicSuffix</span> API. We’re covering those contributions in more depth, including the people behind them, in a separate post. And there is more, read on…</p>
<h3><b>File access now requires a dedicated permission</b></h3>
<p>Extensions that need to read <span>file://</span> URLs used to get that access as part of the “Access your data for all websites” host permission. Starting in Firefox 153, file access is a separate, explicit permission, “Access local files on your computer”, shown in the extension’s permissions settings. It’s off by default for every extension, including ones already installed.</p>
<p>This change has a few concrete effects on code:</p>
<ul>
<li><b>Before:</b> an extension with <span>&lt;all_urls&gt;</span> or a matching host permission could read <span>file://</span> pages without any additional grant, and <span>extension.isAllowedFileSchemeAccess()</span> always returned <span>false</span> regardless of the permission setting.</li>
<li><b>After:</b> the extension must have the new file-access permission granted, and <span>extension.isAllowedFileSchemeAccess()</span> correctly reflects whether the user has granted it.</li>
</ul>
<pre>async function checkFileSchemeAccess() {
  const isAllowed = await browser.extension.isAllowedFileSchemeAccess();

  if (!isAllowed) {
    await browser.notifications.create("file-scheme-access-needed", {
      type: "basic",
      iconUrl: browser.runtime.getURL("icons/icon-48.png"),
      title: "Local file access required",
      message:
        'This extension needs "Allow access to file URLs" enabled to work ' +
        "with local files. Go to about:addons → select this extension → " +
        "turn on that setting, then reload the page.",
    });
    return false;
  }

  return true;
}</pre>
<p><span>devtools.inspectedWindow.eval()</span> calls targeting <span>file://</span> URLs are affected the same way; they now require this permission to succeed.</p>
<p>If your extension depends on <span>file://</span> access, expect existing users to see that access stops after upgrading (until they enable the permission), and consider adding a prompt or fallback path, for example by specifying an embedded options page (<span>options_ui</span>) and calling <span>browser.runtime.openOptionsPage()</span> to open <span>about:addons</span> and including instructions to toggle the setting in the “Permissions and data” tab.</p>
<h3><b>userScripts.execute() and publicSuffix: covered in our next post</b></h3>
<p>Firefox 153 adds two community-contributed APIs:</p>
<ul>
<li><span>userScripts.execute()</span>, which provides for one-off injection of one or more user script sources into a tab or frame, in a defined order, as a complement to the persistent, URL-pattern-based <span>userScripts.register()</span>.</li>
<li><span>publicSuffix</span>, which enables synchronous lookups against the browser’s built-in <a href="https://publicsuffix.org/">Public Suffix List</a> using <span>publicSuffix.isKnownSuffix()</span>, <span>publicSuffix.getKnownSuffix()</span>, and <span>publicSuffix.getDomain()</span>. This API means that extensions no longer need to bundle or maintain a suffix list to determine a hostname’s registrable domain (eTLD+1).</li>
</ul>
<p>Both APIs were built by contributors motivated by real needs in their extensions. We take an in-depth look at these contributions, their developers, impact, and history in a forthcoming post.</p>
<h3><b>documentId support across more APIs</b></h3>
<p>Firefox 153 introduces <span>documentId</span>, a stable identifier for a document instance, including a new <span>runtime.getDocumentId()</span> method, several <span>webNavigation</span> events and methods, <span>webRequest</span> events, scripting injection targets, and the extension messaging APIs.</p>
<p>Many WebExtension APIs use <span>tabId</span> and <span>frameId</span> to identify where to perform an operation. However, because <span>frameId</span> identifies the frame rather than its content, the loaded document can change and the extension’s subsequent operation ends up targeting the new (intended) document. <span>documentId</span> addresses this problem by providing a unique ID for the document. Now, if an extension uses the ID and the frame’s document has changed, the operation fails rather than silently targeting the wrong document.</p>
<p>See <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Work_with_documentId">Work with documentId</a> for the full list of supported events and methods, along with guidance on using it.</p>
<h3><b>Content scripts can read and modify adopted stylesheets</b></h3>
<p>Content scripts can now access <span>document.adoptedStyleSheets</span> and <span>ShadowRoot.adoptedStyleSheets</span> directly.</p>
<pre>const sheet = new CSSStyleSheet();
sheet.replaceSync("* { background: pink; }");
document.adoptedStyleSheets = [sheet];</pre>
<p>This enables extensions to inspect or modify constructed stylesheets from a content script, without using <span>.wrappedJSObject</span>, a workaround that risks interference from the web page.</p>
<h3><b>Theme manifest key: gradients in additional backgrounds</b></h3>
<p>The <span>theme</span> manifest key’s <span>images.additional_backgrounds</span> property now accepts CSS gradients alongside image URLs. A new <span>properties.additional_backgrounds_size</span> property controls the size of each additional background item.</p>
<h3><b>Contextual identities (containers)</b></h3>
<p>If your extension supports contextual identities, you now have access to two new methods: <span>contextualIdentities.getSupportedColors()</span> and <span>contextualIdentities.getSupportedIcons()</span>. These methods return the supported colors and icons, so your extension doesn’t need to hardcode either list.</p>
<p>Also, the colors have been updated to align with the new UI theme: <span>“turquoise”</span> is now <span>“cyan”</span>, <span>“toolbar”</span> is now <span>“gray”</span>, and <span>“violet”</span> has been added. The old names still work for backward compatibility, but your extension should switch to using <span>getSupportedColors()</span> rather than hardcoding either the old or new names.</p>
<h3><b>Add a build-for-amo script</b></h3>
<p>While this isn’t about new APIs, I wanted to mention a change that’s part of our work to make source code review faster and more reliable. When you submit an extension version, AMO now attempts to build your extensions from the submitted source code and compares the result to the package you uploaded. When the two match, reviewers don’t have to verify the build manually. This means submission can move through its review faster.</p>
<p>For now, this applies only if you submit source code that includes a <span>package.json</span> file to build your extension. If your extension has no build step, or you use a different build system, nothing changes. The AMO builder keeps its zero-config approach.</p>
<p>So, if your extension’s source code uses a <span>package.json</span> file, add an <a href="https://docs.npmjs.com/cli/v11/using-npm/scripts">npm script</a> named <span>build-for-amo</span> that runs the commands needed to build your extension for Firefox:</p>
<pre>{
  "scripts": {
    "fx-build": "some commands to build your add-on for Firefox",
    "build-for-amo": "npm run fx-build"
  }
}</pre>
<p>If you’ve a Firefox-specific build command, just point <span>build-for-amo</span> at it. When present, the builder invokes this script instead of guessing how to build your extension. And while you are at it, make sure all your dev dependencies are listed in the <span>package.json</span> file.</p>
<hr>
<p>For more information, including documentation and Bugzilla links, see the <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/153#changes_for_add-on_developers">Changes for add-on developers</a> section of the Firefox 153 for developers release notes on MDN.</p>
<p>As always, file extension-related issues on <a href="https://bugzilla.mozilla.org/">Bugzilla</a> under the WebExtensions product, cross-browser API proposals are discussed in the <a href="https://github.com/w3c/webextensions">W3C WebExtensions Community Group</a>, and questions are welcome on the <a href="https://discourse.mozilla.org/c/add-ons/35">Add-ons Discourse</a>.</p>
<p> </p>
<p>The post <a href="https://blog.mozilla.org/addons/2026/07/23/firefox-153-webextensions-api-updates/">Firefox 153 WebExtensions API updates</a> appeared first on <a href="https://blog.mozilla.org/addons">Mozilla Add-ons Community Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[v17.0.9]]></title>
<description><![CDATA[chore: bump version to 17.0.9]]></description>
<link>https://tsecurity.de/de/3689076/tools/v1709/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3689076/tools/v1709/</guid>
<pubDate>Thu, 23 Jul 2026 14:43:42 +0200</pubDate>
<content:encoded><![CDATA[<p>chore: bump version to 17.0.9</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[This Week In Rust: This Week in Rust 661]]></title>
<description><![CDATA[Hello and welcome to another issue of This Week in Rust!
Rust is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
@thisweekinrust.bsky.social on Bluesky or
@ThisWeekinRu...]]></description>
<link>https://tsecurity.de/de/3688059/tools/this-week-in-rust-this-week-in-rust-661/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3688059/tools/this-week-in-rust-this-week-in-rust-661/</guid>
<pubDate>Thu, 23 Jul 2026 07:18:12 +0200</pubDate>
<content:encoded><![CDATA[<p>Hello and welcome to another issue of <em>This Week in Rust</em>!
<a href="https://www.rust-lang.org/">Rust</a> is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at
<a href="https://bsky.app/profile/thisweekinrust.bsky.social">@thisweekinrust.bsky.social</a> on Bluesky or
<a href="https://mastodon.social/@thisweekinrust">@ThisWeekinRust</a> on mastodon.social, or
<a href="https://github.com/rust-lang/this-week-in-rust">send us a pull request</a>.
Want to get involved? <a href="https://github.com/rust-lang/rust/blob/main/CONTRIBUTING.md">We love contributions</a>.</p>
<p><em>This Week in Rust</em> is openly developed <a href="https://github.com/rust-lang/this-week-in-rust">on GitHub</a> and archives can be viewed at <a href="https://this-week-in-rust.org/">this-week-in-rust.org</a>.
If you find any errors in this week's issue, <a href="https://github.com/rust-lang/this-week-in-rust/pulls">please submit a PR</a>.</p>
<p>Want TWIR in your inbox? <a href="https://this-week-in-rust.us11.list-manage.com/subscribe?u=fd84c1c757e02889a9b08d289&amp;id=0ed8b72485">Subscribe here</a>.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#updates-from-rust-community">Updates from Rust Community</a></h4>


<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#official">Official</a></h5>
<ul>
<li><a href="https://blog.rust-lang.org/2026/07/16/Rust-1.97.1/">Announcing Rust 1.97.1</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#newsletters">Newsletters</a></h5>
<ul>
<li><a href="https://www.theembeddedrustacean.com/p/the-embedded-rustacean-issue-76">The Embedded Rustacean Issue #76</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#projecttooling-updates">Project/Tooling Updates</a></h5>
<ul>
<li><a href="https://tokio.rs/blog/2026-07-22-announcing-topcoat">Announcing Topcoat: a framework for building full-stack reactive web apps with Rust</a></li>
<li><a href="https://github.com/dtolnay/syn/releases/tag/3.0.0">Syn 3.0.0</a></li>
<li><a href="https://blog.jetbrains.com/rust/2026/07/22/whats-new-in-rustrover-2026-2/">What’s New in RustRover 2026.2</a></li>
<li><a href="https://github.com/kunobi-ninja/kobe/releases/tag/v0.35.0">kobe 0.35.0: readiness gates and cert recycling</a></li>
<li><a href="https://github.com/Eoin-McMahon/comhad/releases/tag/v0.1.0">Comhad v0.1.0: a ranger-style tui cyberduck replacement for browsing S3</a></li>
<li><a href="https://github.com/bigduu/Nova/releases/tag/v0.2.1">Nova v0.2.1: computer-use MCP server</a></li>
<li><a href="https://github.com/rust-windowing/winit/pull/4571">winit now has comprehensive cross-platform drag-and-drop support, exposing most of the power of the underlying OS APIs</a></li>
<li><a href="https://github.com/singhpratech/crimson-crab/releases/tag/v0.1.0">crimson-crab v0.1.0 - a production-grade Rust SDK for the Claude API (streaming, tool use, prompt caching, batches)</a></li>
<li><a href="https://singhpratech.github.io/ferrovec/">ferrovec: dependency-light HNSW vector search in Rust, compiled to WebAssembly for private in-browser semantic search</a></li>
<li><a href="https://github.com/ordokr/ordofp/releases/tag/v0.1.0">OrdoFP 0.1.0 released — a functional-programming toolbelt for Rust (HList, GAT type classes, optics, effects, monad transformers)</a></li>
<li><a href="https://freyaui.dev/posts/0.4">Freya 0.4</a></li>
<li><a href="https://dev.to/nabsei/buildline-merging-cargo-and-ninjas-build-profiling-into-one-timeline-2373">buildline: merging cargo and ninja's build profiling into one timeline</a></li>
<li><a href="https://richer-richard.github.io/cochlea/determinism.html#030-additions-2026-07-22">cochlea 0.3.0: melody read-back, MFCC timbre, a master limiter, and MIDI import for the deterministic agent-audio engine</a></li>
<li><a href="https://flodl.dev/blog/then-the-cpu-died">flodl 0.6.0: multi-host heterogeneous DDP - mismatched GPUs across hosts beat the fastest card alone</a></li>
<li><a href="https://hongnoul.github.io/hwatu/">hwatu: a daemon-based WebKitGTK browser for tiling WMs with ~13ms window spawn</a></li>
<li><a href="https://github.com/kunobi-ninja/kache/releases/tag/v0.11.0">kache 0.11.0: broader compiler coverage and libc-aware keys</a></li>
<li><a href="https://mladedav.github.io/blog/blog/tracing-reload/"><code>tracing-reload</code> - reload layer without panics</a></li>
<li><a href="https://www.opentypeless.com/en/blog/introducing-talkmore">Introducing OpenTypeless: Voice Input That Actually Works</a></li>
<li><a href="https://dev.to/booyaka101/reading-a-rust-crates-capabilities-out-of-its-compiled-symbols-58pb">Reading a Rust crate's capabilities out of its compiled symbols</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#observationsthoughts">Observations/Thoughts</a></h5>
<ul>
<li><a href="https://smallcultfollowing.com/babysteps/blog/2026/07/15/battery-packs/">Battery packs: Let's talk about crates, baby</a></li>
<li><a href="https://blog.yoshuawuyts.com/capture-clauses-as-effects">Capture Clauses as Effects</a></li>
<li><a href="https://corrode.dev/blog/hardening-rust/">Hardening Rust Code For Production</a></li>
<li><a href="https://pranitha.dev/posts/tokio-gives-progress-not-ordering/">Tokio Gives Progress, Not Ordering: Scheduling 1M Tasks</a></li>
<li><a href="https://kerkour.com/rust-service-hardening-and-production-checklist">Rust service hardening and production checklist</a></li>
<li>[audio] <a href="https://corrode.dev/podcast/s06e08-rust-foundation/">The Rust Foundation with Rebecca Rumbul, Lori Lorusso, and David Wood, Rust Foundation leadership and board</a></li>
<li>[video] <a href="https://www.youtube.com/watch?v=bAINppA0BSU">Jon Gjengset: Open Source Maintenance 2026-07-18</a></li>
<li>[video] <a href="https://www.youtube.com/watch?v=lUoQ3uGSQA0">Rust Release Changelog - 1.97.0</a></li>
<li>[video] <a href="https://www.youtube.com/live/Doqwh1b4QyA">Livestream: Rust in Ubuntu</a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-walkthroughs">Rust Walkthroughs</a></h5>
<ul>
<li><a href="https://kriyanative.com/blog/13-chain-breaks/">I hash-chained my agent's audit log. Then I found 13 breaks in it — all mine, all benign.</a></li>
<li><a href="https://dev.to/scripthpp/two-bugs-i-only-found-by-running-my-rust-sync-daemon-against-real-infrastructure-4278">Two tricky bugs in a Rust daemon</a></li>
<li>[video] <a href="https://www.youtube.com/watch?v=u91eX3J6lPU">Backend Concepts in Rust: Securely Managing App Secrets</a></li>
<li>[video] <a href="https://www.youtube.com/watch?v=tIrSvJFRxAg">Build with Naz - Ep 21: High Performance Flat 2D Arrays in Rust (SIMD, L1 cache)</a></li>
</ul>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#crate-of-the-week">Crate of the Week</a></h4>
<p>This week's crate is <a href="https://github.com/medialab/xan">xan</a>, a TUI toolkit to work with CSV files.</p>
<p>Thanks to <a href="https://users.rust-lang.org/t/crate-of-the-week/2704/1630">Simeon H.K. Fitch</a> for the suggestion!</p>
<p><a href="https://users.rust-lang.org/t/crate-of-the-week/2704">Please submit your suggestions and votes for next week</a>!</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#calls-for-testing">Calls for Testing</a></h4>
<p>An important step for RFC implementation is for people to experiment with the
implementation and give feedback, especially before stabilization.</p>
<p>If you are a feature implementer and would like your RFC to appear in this list, add a
<code>call-for-testing</code> label to your RFC along with a comment providing testing instructions and/or
guidance on which aspect(s) of the feature need testing.</p>
<p><em>No calls for testing were issued this week by
<a href="https://github.com/rust-lang/rust/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Rust</a>,
<a href="https://github.com/rust-lang/cargo/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Cargo</a>,
<a href="https://github.com/rust-lang/rustup/issues?q=state%3Aopen%20label%3Acall-for-testing%20state%3Aopen">Rustup</a> or
<a href="https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing%20state%3Aopen">Rust language RFCs</a>.</em></p>
<p><a href="https://github.com/rust-lang/this-week-in-rust/issues">Let us know</a> if you would like your feature to be tracked as a part of this list.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers">Call for Participation; projects and speakers</a></h4>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cfp-projects">CFP - Projects</a></h5>
<p>Always wanted to contribute to open-source projects but did not know where to start?
Every week we highlight some tasks from the Rust community for you to pick and get started!</p>
<p>Some of these tasks may also have mentors available, visit the task page for more information.</p>



<ul>
<li><em>No Calls for participation were submitted this week.</em></li>
</ul>
<p>If you are a Rust project owner and are looking for contributors, please submit tasks <a href="https://github.com/rust-lang/this-week-in-rust?tab=readme-ov-file#call-for-participation-guidelines">here</a> or through a <a href="https://github.com/rust-lang/this-week-in-rust">PR to TWiR</a> or by reaching out on <a href="https://bsky.app/profile/thisweekinrust.bsky.social">Bluesky</a> or <a href="https://mastodon.social/@thisweekinrust">Mastodon</a>!</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cfp-events">CFP - Events</a></h5>
<p>Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.</p>


<ul>
<li><em>No Calls for papers or presentations were submitted this week.</em></li>
</ul>
<p>If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a <a href="https://github.com/rust-lang/this-week-in-rust">PR to TWiR</a> or by reaching out on <a href="https://bsky.app/profile/thisweekinrust.bsky.social">Bluesky</a> or <a href="https://mastodon.social/@thisweekinrust">Mastodon</a>!</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#updates-from-the-rust-project">Updates from the Rust Project</a></h4>
<p>576 pull requests were <a href="https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2026-07-14..2026-07-21">merged in the last week</a></p>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#compiler">Compiler</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/159256">account for async closures when pointing at lifetime in return type</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157824">comptime inherent impls</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159115"><code>dep_graph</code>: deduplicate task reads with an epoch-filtered index recorder</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158976">eagerly check for ambiguity in macro parsing</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158608">implement <code>#[diagnostic::opaque]</code> attribute to hide backtraces of macros</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158720">shrink <code>ast::Expr64</code></a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#library">Library</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/159467">add explicit <code>Iterator::count</code> impl for <code>str::EncodeUtf16</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159296">implement <code>bool::toggle</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159528">implement <code>const_binary_search</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159302">implement <code>Debug</code> helpers via <code>Cell</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/156220">implement <code>VecDeque::truncate_to_range</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158061">make <code>pin!()</code> more foolproof</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158546">move <code>std::io::BufRead</code> to <code>alloc::io</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158544">move <code>std::io::Read</code> to <code>alloc::io</code></a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158545">move <code>std::io::read_to_string</code> to <code>alloc::io</code></a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#cargo">Cargo</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/159149">use PGO for Cargo</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17238"><code>timings</code>: only report units the job queue actually ran</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17236">do not include proc-macro deps in rustc search path args</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17216">include SBOM outputs in fingerprints</a></li>
<li><a href="https://github.com/rust-lang/cargo/pull/17226">lazily initialize git2 fetch transports</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rustdoc">Rustdoc</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust/pull/159194">fix auto trait normalization env</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/159091">use PGO for rustdoc</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#clippy">Clippy</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/16855">add <code>block_scrutinee</code> lint</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17415">avoid invalid <code>ref_as_ptr</code> suggestions in const/static initializers</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/16800">detect <code>== 0</code> on unsigned types as a <code>manual_clamp</code> lower bound</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17405">fix <code>if_not_else</code> linting on macro expanded conditions</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17383">fix <code>needless_collect</code> suggests a suggestion that cannot be typed</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17385"><code>non_zero_suggestions</code>: don't lint signed integer div/rem as NonZero</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17377"><code>manual_filter</code>: don't eat comments in the <code>and_then</code> suggestion</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17369">require the use of <code>as _</code> for indirectly used traits in clippy sources</a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/17362">rewrite <code>min_ident_chars</code></a></li>
<li><a href="https://github.com/rust-lang/rust-clippy/pull/16633">use <code>#[must_use]</code> determination from the compiler</a></li>
</ul>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-analyzer">Rust-Analyzer</a></h6>
<ul>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22634">avoid index panic when flycheck list is empty</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22811">add capture hints to coroutines</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22813">add handler for E0572</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22483">do not assume array destructuring assignments with rest pattern are constant-sized</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22852">eagerly normalize <code>.await</code>'s <code>IntoFuture::Output</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22791">enable auto trait inference</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22792">extract variable preserving whitespace from macro input</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22832">fix coroutines not recording binding owners correctly</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22759">fix crashes in assists due to <code>.unwrap()</code> calls in SyntaxFactory</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22810">fix <code>hir</code> crate leaking bound variables from skipped binders</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22855">fix <code>InferenceContext:identity_args</code> using the wrong DefId</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22849">fix syntax bridge panic when spilting float</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22857">handle <code>enum</code> variants in next-solver <code>generics</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22818">implement lowering of HRTB</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22789">invalid <code>pattern_matching_variant</code> lowering due to recovery</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22867">merge <code>WherePredicate::ForLifetimes</code> into <code>WherePredicate::TypeBound</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22804">only write anon const ty in parent's inference result if it doesn't have its own inference</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22822">panic with a function item and a proc macro item having a duplicate name</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22827">parser to error on macro type bound</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22865">spawn proc-macro servers on requests clearing the client cache</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22782">use quote! inside <code>ast::make::expr_call()</code></a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22793">use <code>Result</code> for the lsp-server <code>Response</code> payload type</a></li>
<li><a href="https://github.com/rust-lang/rust-analyzer/pull/22861">record expressions in types in <code>ExprScope</code></a></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage">Rust Compiler Performance Triage</a></h5>
<p>The two most notable changes this week were <a href="https://github.com/rust-lang/rust/pull/159115">#159115</a>,
which resulted in pretty nice instruction count wins for full incremental builds on several benchmarks,
and <a href="https://github.com/rust-lang/rust/pull/159091">#159091</a>, which enabled PGO for rustdoc, which
makes it ~3-4% faster across the board.</p>
<p>There were two large rollups with tiny performance regressions, which made it difficult to find
the offending PRs.</p>
<p>Triage done by <strong>@Kobzol</strong>.
Revision range: <a href="https://perf.rust-lang.org/?start=5503df87342a73d0c29126a7e08dc9c1255c46ad&amp;end=d527bc9bfa297ca7fd7f5ae93781eeec42073170&amp;absolute=false&amp;stat=instructions%3Au">5503df87..d527bc9b</a></p>
<p><strong>Summary</strong>:</p>
<table>
<thead>
<tr>
<th>(instructions:u)</th>
<th>mean</th>
<th>range</th>
<th>count</th>
</tr>
</thead>
<tbody>
<tr>
<td>Regressions ❌ <br> (primary)</td>
<td>0.4%</td>
<td>[0.2%, 1.0%]</td>
<td>40</td>
</tr>
<tr>
<td>Regressions ❌ <br> (secondary)</td>
<td>0.7%</td>
<td>[0.2%, 4.6%]</td>
<td>69</td>
</tr>
<tr>
<td>Improvements ✅ <br> (primary)</td>
<td>-2.0%</td>
<td>[-6.2%, -0.2%]</td>
<td>136</td>
</tr>
<tr>
<td>Improvements ✅ <br> (secondary)</td>
<td>-2.6%</td>
<td>[-8.4%, -0.2%]</td>
<td>119</td>
</tr>
<tr>
<td>All ❌✅ (primary)</td>
<td>-1.4%</td>
<td>[-6.2%, 1.0%]</td>
<td>176</td>
</tr>
</tbody>
</table>
<p>2 Regressions, 3 Improvements, 6 Mixed; 4 of them in rollups
34 artifact comparisons made in total</p>
<p><a href="https://github.com/rust-lang/rustc-perf/blob/189822607d8d09acd85c234b2c245e817591ca67/triage/2026/2026-07-21.md">Full report here</a>.</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#approved-rfcs"></a><a href="https://github.com/rust-lang/rfcs/commits/master">Approved RFCs</a></h5>
<p>Changes to Rust follow the Rust <a href="https://github.com/rust-lang/rfcs#rust-rfcs">RFC (request for comments) process</a>. These
are the RFCs that were approved for implementation this week:</p>
<ul>
<li><em>No RFCs were approved this week.</em></li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#final-comment-period">Final Comment Period</a></h5>
<p>Every week, <a href="https://www.rust-lang.org/team.html">the team</a> announces the 'final comment period' for RFCs and key PRs
which are reaching a decision. Express your opinions now.</p>
<h6><a class="toclink" href="https://this-week-in-rust.org/atom.xml#tracking-issues-prs">Tracking Issues &amp; PRs</a></h6>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#rust"></a><a href="https://github.com/rust-lang/rust/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Rust</a>
<ul>
<li><a href="https://github.com/rust-lang/rust/issues/159298">Tracking Issue for <code>bool::toggle</code></a></li>
<li><a href="https://github.com/rust-lang/rust/issues/146954">Tracking Issue for vec_try_remove</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157562">Avoid computing layout of enums with non-int discriminants</a></li>
<li><a href="https://github.com/rust-lang/rust/issues/71835">Tracking Issue for const_btree_len</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/138230">Add <code>raw_borrows_via_references</code> lint</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/157572">stabilize size_of_val_raw, align_of_val_raw, Layout::for_value_raw</a></li>
<li><a href="https://github.com/rust-lang/rust/pull/158835">rustc_passes: lint unused <code>#[path]</code> attributes on inline modules</a></li>
</ul>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#compiler-team-mcps-only"></a><a href="https://github.com/rust-lang/compiler-team/issues?q=label%3Amajor-change%20label%3Afinal-comment-period%20state%3Aopen">Compiler Team</a> <a href="https://forge.rust-lang.org/compiler/mcp.html">(MCPs only)</a>
<ul>
<li><a href="https://github.com/rust-lang/compiler-team/issues/1019">Emit <code>note</code> when calling <code>rustc</code> without specifying an edition</a></li>
<li><a href="https://github.com/rust-lang/compiler-team/issues/1011">Let the OS handle stack growth</a></li>
<li><a href="https://github.com/rust-lang/compiler-team/issues/1010">Add <code>target_feature_available_at_call_site</code></a></li>
</ul>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#leadership-council"></a><a href="https://github.com/rust-lang/leadership-council/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen">Leadership Council</a>
<ul>
<li><a href="https://github.com/rust-lang/leadership-council/pull/314">Deallocate post-2026 funds from PM and compiler-ops</a></li>
</ul>
<a class="toclink" href="https://this-week-in-rust.org/atom.xml#unsafe-code-guidelines"></a><a href="https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Unsafe Code Guidelines</a>
<ul>
<li><a href="https://github.com/rust-lang/unsafe-code-guidelines/issues/558">Do the bytes of a pointer have to stay in the same order?</a></li>
</ul>
<p><em>No Items entered Final Comment Period this week for
  <a href="https://github.com/rust-lang/cargo/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Cargo</a>,
  <a href="https://github.com/rust-lang/reference/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Language Reference</a>,
  <a href="https://github.com/rust-lang/lang-team/issues?q=is%3Aopen%20label%3Afinal-comment-period%20sort%3Aupdated-desc%20state%3Aopen">Language Team</a> or
  <a href="https://github.com/rust-lang/rfcs/issues?q=state%3Aopen%20label%3Afinal-comment-period%20state%3Aopen">Rust RFCs</a>.</em></p>
<p>Let us know if you would like your PRs, Tracking Issues or RFCs to be tracked as a part of this list.</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#new-and-updated-rfcs"></a><a href="https://github.com/rust-lang/rfcs/pulls">New and Updated RFCs</a></h5>
<ul>
<li><a href="https://github.com/rust-lang/rfcs/pull/3984">RFC: Refactor the libs team</a></li>
</ul>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#upcoming-events">Upcoming Events</a></h4>
<p>Rusty Events between 2026-07-22 - 2026-08-19 🦀</p>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#virtual">Virtual</a></h5>
<ul>
<li>2026-07-24 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/hd8mlw56"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-07-28 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/310254777/"><strong>Fourth Tuesday</strong></a></li>
</ul>
</li>
<li>2026-07-28 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc">Rust DC</a><ul>
<li><a href="https://www.meetup.com/rustdc/events/315279653/"><strong>Mid-month Rustful</strong></a></li>
</ul>
</li>
<li>2026-07-30 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/rust-berlin">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/312045928/"><strong>Rust Hack and Learn</strong></a></li>
</ul>
</li>
<li>2026-07-31 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/uo5ek1f4"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-01 | Virtual (Kampala, UG) | <a href="https://www.eventbrite.com/e/rust-circle-meetup-tickets-628763176587">Rust Circle Meetup</a><ul>
<li><a href="https://www.eventbrite.com/e/rust-circle-meetup-tickets-628763176587"><strong>Rust Circle Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-02 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/314095294/"><strong>Rust Deep Learning: First Sunday</strong></a></li>
</ul>
</li>
<li>2026-08-04 | Virtual (London, UK) | <a href="https://www.meetup.com/women-in-rust">Women in Rust</a><ul>
<li><a href="https://www.meetup.com/women-in-rust/events/315213885/"><strong>👋 Community Catch Up</strong></a></li>
</ul>
</li>
<li>2026-08-05 | Virtual (Indianapolis, IN, US) | <a href="https://www.meetup.com/indyrs">Indy Rust</a><ul>
<li><a href="https://www.meetup.com/indyrs/events/315210367/"><strong>Indy.rs - with Social Distancing</strong></a></li>
</ul>
</li>
<li>2026-08-07 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/ii2jrwva"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-11 | Virtual (Dallas, TX, US) | <a href="https://www.meetup.com/dallasrust">Dallas Rust User Meetup</a><ul>
<li><a href="https://www.meetup.com/dallasrust/events/310254776/"><strong>Second Tuesday</strong></a></li>
</ul>
</li>
<li>2026-08-13 | Virtual (Berlin, DE) | <a href="https://www.meetup.com/rust-berlin">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/313345333/"><strong>Rust Hack and Learn</strong></a></li>
</ul>
</li>
<li>2026-08-13 | Virtual (Nürnberg, DE) | <a href="https://www.meetup.com/rust-noris">Rust Nuremberg</a><ul>
<li><a href="https://www.meetup.com/rust-noris/events/315619609/"><strong>Rust Nürnberg online</strong></a></li>
</ul>
</li>
<li>2026-08-14 | Virtual (Girona, ES) | <a href="https://luma.com/rust-girona">Rust Girona</a><ul>
<li><a href="https://luma.com/f2hnzrug"><strong>Sessió setmanal de codificació / Weekly coding session</strong></a></li>
</ul>
</li>
<li>2026-08-18 | Virtual (Washington, DC, US) | <a href="https://www.meetup.com/rustdc">Rust DC</a><ul>
<li><a href="https://www.meetup.com/rustdc/events/315604176/"><strong>Mid-month Rustful</strong></a></li>
</ul>
</li>
<li>2026-08-19 | Hybrid (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust">Vancouver Rust</a><ul>
<li><a href="https://www.meetup.com/vancouver-rust/events/314105333/"><strong>Dealing with Dependencies</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#africa">Africa</a></h5>
<ul>
<li>2026-08-11 | Johannesburg, ZA | <a href="https://www.meetup.com/johannesburg-rust-meetup">Johannesburg Rust Meetup</a><ul>
<li><a href="https://www.meetup.com/johannesburg-rust-meetup/events/315750593/"><strong>Rust's extended standard library</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#asia">Asia</a></h5>
<ul>
<li>2026-07-25 | Mumbai, IN | <a href="https://luma.com/mumbai">Rust Mumbai</a><ul>
<li><a href="https://luma.com/7ksabwbm/"><strong>​Rust Mumbai — July Meetup 🦀</strong></a></li>
</ul>
</li>
<li>2026-07-26 | Pune, IN | <a href="https://www.meetup.com/rust-pune">Rust Pune</a><ul>
<li><a href="https://www.meetup.com/rust-pune/events/315651505/"><strong>Rust Pune: July 2026</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#europe">Europe</a></h5>
<ul>
<li>2026-07-23 | Berlin, DE | <a href="https://www.meetup.com/rust-berlin">Rust Berlin</a><ul>
<li><a href="https://www.meetup.com/rust-berlin/events/315484101/"><strong>Rust Berlin Talks: The next generation</strong></a></li>
</ul>
</li>
<li>2026-07-23 | London, UK | <a href="https://www.meetup.com/rust-london-user-group">Rust London User Group</a><ul>
<li><a href="https://www.meetup.com/rust-london-user-group/events/315612916/"><strong>LDN Talks: July 2026 Antithesis Takeover</strong></a></li>
</ul>
</li>
<li>2026-07-23 | London, UK | <a href="https://www.meetup.com/london-rust-project-group">London Rust Project Group</a><ul>
<li><a href="https://www.meetup.com/london-rust-project-group/events/315366453/"><strong>Rama modular service framework for Rust</strong></a></li>
</ul>
</li>
<li>2026-07-23 | Paris, FR | <a href="https://www.meetup.com/rust-paris">Rust Paris</a><ul>
<li><a href="https://www.meetup.com/rust-paris/events/315309633/"><strong>Rust meetup #87</strong></a></li>
</ul>
</li>
<li>2026-07-25 | Stockholm, SE | <a href="https://www.meetup.com/stockholm-rust">Stockholm Rust</a><ul>
<li><a href="https://www.meetup.com/stockholm-rust/events/315749994/"><strong>Ferris' Fika Forum #28</strong></a></li>
</ul>
</li>
<li>2026-07-27 | Augsburg, DE | <a href="https://rust-augsburg.github.io/meetup">Rust Meetup Augsburg</a><ul>
<li><a href="https://rust-augsburg.github.io/meetup/Meetup_20.html"><strong>Rust Meetup #20: Julian Dickert - Supply chain security in Rust: Evaluating crates for production</strong></a></li>
</ul>
</li>
<li>2026-07-29 | Poland, PL | <a href="https://www.meetup.com/rust-poland-meetup">Rust Poland</a><ul>
<li><a href="https://www.meetup.com/rust-poland-meetup/events/315582674/"><strong>Rust Poland x Kraków #10</strong></a></li>
</ul>
</li>
<li>2026-07-30 | Copenhagen, DK | <a href="https://www.meetup.com/copenhagen-rust-community">Copenhagen Rust Community</a><ul>
<li><a href="https://www.meetup.com/copenhagen-rust-community/events/315767999/"><strong>Rust meetup #70</strong></a></li>
</ul>
</li>
<li>2026-07-30 | Manchester, UK | <a href="https://www.meetup.com/rust-manchester">Rust Manchester</a><ul>
<li><a href="https://www.meetup.com/rust-manchester/events/315037685/"><strong>Rust Manchester July Code Night</strong></a></li>
</ul>
</li>
<li>2026-08-18 | Aarhus, DK | <a href="https://www.meetup.com/rust-aarhus">Rust Aarhus</a><ul>
<li><a href="https://www.meetup.com/rust-aarhus/events/315683629/"><strong>Hack Night: Trust but verify the LLM</strong></a></li>
</ul>
</li>
<li>2026-08-18 | Leipzig, DE | <a href="https://www.meetup.com/rust-modern-systems-programming-in-leipzig">Rust - Modern Systems Programming in Leipzig</a><ul>
<li><a href="https://www.meetup.com/rust-modern-systems-programming-in-leipzig/events/313816474/"><strong>Topic TBD</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#north-america">North America</a></h5>
<ul>
<li>2026-07-22 | Austin, TX, US | <a href="https://www.meetup.com/rust-atx">Rust ATX</a><ul>
<li><a href="https://www.meetup.com/rust-atx/events/xvkdgtyjckbdc/"><strong>Rust Lunch - Fareground</strong></a></li>
</ul>
</li>
<li>2026-07-22 | Los Angeles, CA, US | <a href="https://www.meetup.com/rust-los-angeles">Rust Los Angeles</a><ul>
<li><a href="https://www.meetup.com/rust-los-angeles/events/315376271/"><strong>Rust LA: Rust in Distributed Systems with Flight Science!</strong></a></li>
</ul>
</li>
<li>2026-07-22 | New York, NY, US | <a href="https://www.meetup.com/rust-nyc/events/">Rust NYC</a><ul>
<li><a href="https://www.meetup.com/rust-nyc/events/315636854/"><strong>Rust NYC: Write A Custom Coding Agent and wasm_zero</strong></a></li>
</ul>
</li>
<li>2026-07-23 | Mountain View, CA, US | <a href="https://www.meetup.com/hackerdojo/events/">Hacker Dojo</a><ul>
<li><a href="https://www.meetup.com/hackerdojo/events/315418155/"><strong>RUST MEETUP at HACKER DOJO</strong></a></li>
</ul>
</li>
<li>2026-07-25 | Boston, MA, US | <a href="https://www.meetup.com/bostonrust">Boston Rust Meetup</a><ul>
<li><a href="https://www.meetup.com/bostonrust/events/315582650/"><strong>Porter Square Rust Lunch, July 25</strong></a></li>
</ul>
</li>
<li>2026-07-25 | Brooklyn, NY, US | <a href="https://flowercomputer.com/">Flower</a><ul>
<li><a href="https://partiful.com/e/Vq9fyDNCMSO7ia4ulK5b"><strong>BOG-A-THON 2</strong></a></li>
</ul>
</li>
<li>2026-07-30 | Atlanta, GA, US | <a href="https://www.meetup.com/rust-atl">Rust Atlanta</a><ul>
<li><a href="https://www.meetup.com/rust-atl/events/313539329/"><strong>Rust-Atl</strong></a></li>
</ul>
</li>
<li>2026-08-01 | Boston, MA, US | <a href="https://www.meetup.com/bostonrust">Boston Rust Meetup</a><ul>
<li><a href="https://www.meetup.com/bostonrust/events/315582653/"><strong>Chinatown Rust Lunch, Aug 1</strong></a></li>
</ul>
</li>
<li>2026-08-04 | Boston, MA, US | <a href="https://www.meetup.com/bostonrust">Boston Rust Meetup</a><ul>
<li><a href="https://www.meetup.com/bostonrust/events/314660176/"><strong>Evening Boston Rust Meetup at Red Hat, Aug 4</strong></a></li>
</ul>
</li>
<li>2026-08-06 | Saint Louis, MO, US | <a href="https://www.meetup.com/stl-rust">STL Rust</a><ul>
<li><a href="https://www.meetup.com/stl-rust/events/314701905/"><strong>Shipping Temporal: How a Global Rust Ecosystem Built Chrome’s Newest Web API</strong></a></li>
</ul>
</li>
<li>2026-08-13 | Lehi, UT, US | <a href="https://www.meetup.com/utah-rust">Utah Rust</a><ul>
<li><a href="https://www.meetup.com/utah-rust/events/314696652/"><strong>Utah Rust August Meetup</strong></a></li>
</ul>
</li>
<li>2026-08-13 | San Diego, CA, US | <a href="https://www.meetup.com/san-diego-rust">San Diego Rust</a><ul>
<li><a href="https://www.meetup.com/san-diego-rust/events/315601099/"><strong>San Diego Rust August Meetup - Back in person!</strong></a></li>
</ul>
</li>
<li>2026-08-15 | San Francisco, CA, US | <a href="https://flowercomputer.com/">Flower</a><ul>
<li><a href="https://partiful.com/e/juWAwRs3XMWP7s9wLNWK"><strong>BOG-A-THON 3</strong></a></li>
</ul>
</li>
<li>2026-08-18 | San Francisco, CA, US | <a href="https://www.meetup.com/san-francisco-rust-study-group">San Francisco Rust Study Group</a><ul>
<li><a href="https://www.meetup.com/san-francisco-rust-study-group/events/314997215/"><strong>Rust Hacking in Person</strong></a></li>
</ul>
</li>
<li>2026-08-19 | Hybrid (Vancouver, BC, CA) | <a href="https://www.meetup.com/vancouver-rust">Vancouver Rust</a><ul>
<li><a href="https://www.meetup.com/vancouver-rust/events/314105333/"><strong>Dealing with Dependencies</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#oceania">Oceania</a></h5>
<ul>
<li>2026-07-23 | Perth, AU | <a href="https://www.meetup.com/perth-rust-meetup-group">Rust Perth Meetup Group</a><ul>
<li><a href="https://www.meetup.com/perth-rust-meetup-group/events/315451138/"><strong>Rust Perth: July Meetup!</strong></a></li>
</ul>
</li>
<li>2026-07-30 | Melbourne, AU | <a href="https://www.meetup.com/rust-melbourne">Rust Melbourne</a><ul>
<li><a href="https://www.meetup.com/rust-melbourne/events/315039480/"><strong>Rust Melbourne July 2026</strong></a></li>
</ul>
</li>
</ul>
<h5><a class="toclink" href="https://this-week-in-rust.org/atom.xml#south-america">South America</a></h5>
<ul>
<li>2026-08-08 | São Paulo, SP | <a href="https://luma.com/calendar/cal-bif2oHITU1aVvsr">Rust-SP</a><ul>
<li><a href="https://luma.com/41oiyhtk"><strong>Rust SP - Aug/2026</strong></a></li>
</ul>
</li>
</ul>
<p>If you are running a Rust event please add it to the <a href="https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com">calendar</a> to get
it mentioned here. Please remember to add a link to the event too.
Email the <a href="mailto:community-team@rust-lang.org">Rust Community Team</a> for access.</p>
<h4><a class="toclink" href="https://this-week-in-rust.org/atom.xml#jobs">Jobs</a></h4>
<p>Please see the latest <a href="https://www.reddit.com/r/rust/comments/1ttbtf5/official_rrust_whos_hiring_thread_for_jobseekers/">Who's Hiring thread on r/rust</a></p>
<h3><a class="toclink" href="https://this-week-in-rust.org/atom.xml#quote-of-the-week">Quote of the Week</a></h3>
<blockquote>
<p>We were planning on publishing a blog post announcing this at the same time as making the repo public, but ran out of private repo CI usage 😭.</p>
</blockquote>
<p>– <a href="https://www.reddit.com/r/rust/comments/1uzknzl/tokiorstopcoat_a_batteriesincluded_framework_for/oy8k2nn/">Carl Lerche on r/rust</a> about the launch of topcoat</p>
<p>Despite a lamentable lack of suggestions, llogiq is glad to have found this quote.</p>
<p><a href="https://users.rust-lang.org/t/twir-quote-of-the-week/328">Please submit quotes and vote for next week!</a></p>
<p>This Week in Rust is edited by:</p>
<ul>
<li><a href="https://github.com/nellshamrell">nellshamrell</a></li>
<li><a href="https://github.com/llogiq">llogiq</a></li>
<li><a href="https://github.com/ericseppanen">ericseppanen</a></li>
<li><a href="https://github.com/extrawurst">extrawurst</a></li>
<li><a href="https://github.com/U007D">U007D</a></li>
<li><a href="https://github.com/mariannegoldin">mariannegoldin</a></li>
<li><a href="https://github.com/bdillo">bdillo</a></li>
<li><a href="https://github.com/opeolluwa">opeolluwa</a></li>
<li><a href="https://github.com/bnchi">bnchi</a></li>
<li><a href="https://github.com/KannanPalani57">KannanPalani57</a></li>
<li><a href="https://github.com/tzilist">tzilist</a></li>
</ul>
<p><em>Email list hosting is sponsored by <a href="https://foundation.rust-lang.org/">The Rust Foundation</a></em></p>
<p><small><a href="https://www.reddit.com/r/rust/comments/1v41dgv/this_week_in_rust_661/">Discuss on r/rust</a></small></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[v8.21.0-beta.1]]></title>
<description><![CDATA[Additional small tweaks, bug fixes, and performance enhancements. Thanks for using Signal!]]></description>
<link>https://tsecurity.de/de/3687731/tools/v8210-beta1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3687731/tools/v8210-beta1/</guid>
<pubDate>Thu, 23 Jul 2026 00:55:44 +0200</pubDate>
<content:encoded><![CDATA[<ul>
<li>Additional small tweaks, bug fixes, and performance enhancements. Thanks for using Signal!</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[v17.0.8: fix(iso): used libc::Ioctl for FICLONE request type on musl targets]]></title>
<description><![CDATA[musl defines ioctl's request parameter as c_int while glibc uses
c_ulong; the hardcoded libc::c_ulong constant broke linux musl
x64/arm64 native builds.]]></description>
<link>https://tsecurity.de/de/3687730/tools/v1708-fixiso-used-libcioctl-for-ficlone-request-type-on-musl-targets/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3687730/tools/v1708-fixiso-used-libcioctl-for-ficlone-request-type-on-musl-targets/</guid>
<pubDate>Thu, 23 Jul 2026 00:55:43 +0200</pubDate>
<content:encoded><![CDATA[<ul>
<li>musl defines ioctl's request parameter as c_int while glibc uses<br>
c_ulong; the hardcoded libc::c_ulong constant broke linux musl<br>
x64/arm64 native builds.</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[Thunderbird 153 “Meadow” is out now!]]></title>
<description><![CDATA[As we head into the summer months, a new Extended Support Release (ESR) is in full bloom. Thunderbird 153 “Meadow” is out now, and from all of us at MZLA, the Thunderbird Council, and our global community of contributors, we can’t wait for you to try it out. “Meadow” builds on Thunderbird 140 “Ec...]]></description>
<link>https://tsecurity.de/de/3687681/tools/thunderbird-153-meadow-is-out-now/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3687681/tools/thunderbird-153-meadow-is-out-now/</guid>
<pubDate>Wed, 22 Jul 2026 23:59:58 +0200</pubDate>
<content:encoded><![CDATA[<p>As we head into the summer months, a new Extended Support Release (ESR) is in full bloom. Thunderbird 153 “Meadow” is out now, and from all of us at MZLA, the Thunderbird Council, and our global community of contributors, we can’t wait for you to try it out. “Meadow” builds on Thunderbird 140 “Eclipse,” along […]</p>
<p>The post <a href="https://blog.thunderbird.net/2026/07/thunderbird-153-meadow-is-out-now/">Thunderbird 153 “Meadow” is out now!</a> appeared first on <a href="https://blog.thunderbird.net/">The Thunderbird Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: July 22nd Deploy]]></title>
<description><![CDATA[The latest version of PerfCompare is now live!
Check out the change-log below to see the updates:
[kala-moz]


Add KdeModesPanel to expanded view (#1052)


Dark Mode Bugs Fix (#1063)


Bug 2037556: simplify wording of tooltip text for CD and CLES; fix dark mode links in tooltips (#1067)


[moijes...]]></description>
<link>https://tsecurity.de/de/3687479/tools/firefox-tooling-announcements-july-22nd-deploy/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3687479/tools/firefox-tooling-announcements-july-22nd-deploy/</guid>
<pubDate>Wed, 22 Jul 2026 21:57:25 +0200</pubDate>
<content:encoded><![CDATA[<p>The latest version of<a href="https://perf.compare/" rel="noopener nofollow ugc"> PerfCompare</a> is now live!</p>
<p>Check out the change-log below to see the updates:</p>
<p>[kala-moz]</p>
<ul>
<li>
<h4><a class="anchor" href="https://discourse.mozilla.org/#p-295837-add-kdemodespanel-to-expanded-view-httpsgithubcommozillaperfcomparecommit76d5aa423322c62c7345270307c026cc65e03e081052httpsgithubcommozillaperfcomparepull1052httpsgithubcommozillaperfcomparecommit76d5aa423322c62c7345270307c026cc65e03e08-1" name="p-295837-add-kdemodespanel-to-expanded-view-httpsgithubcommozillaperfcomparecommit76d5aa423322c62c7345270307c026cc65e03e081052httpsgithubcommozillaperfcomparepull1052httpsgithubcommozillaperfcomparecommit76d5aa423322c62c7345270307c026cc65e03e08-1"></a><strong><a href="https://github.com/mozilla/perfcompare/commit/76d5aa423322c62c7345270307c026cc65e03e08" rel="noopener nofollow ugc">Add KdeModesPanel to expanded view (</a><a href="https://github.com/mozilla/perfcompare/pull/1052" rel="noopener nofollow ugc">#1052</a><a href="https://github.com/mozilla/perfcompare/commit/76d5aa423322c62c7345270307c026cc65e03e08" rel="noopener nofollow ugc">)</a></strong></h4>
</li>
<li>
<h4><a class="anchor" href="https://discourse.mozilla.org/#p-295837-dark-mode-bugs-fix-httpsgithubcommozillaperfcomparecommite06a7a17685f3803b7889ad4307ecdf187655d801063httpsgithubcommozillaperfcomparepull1063httpsgithubcommozillaperfcomparecommite06a7a17685f3803b7889ad4307ecdf187655d80-2" name="p-295837-dark-mode-bugs-fix-httpsgithubcommozillaperfcomparecommite06a7a17685f3803b7889ad4307ecdf187655d801063httpsgithubcommozillaperfcomparepull1063httpsgithubcommozillaperfcomparecommite06a7a17685f3803b7889ad4307ecdf187655d80-2"></a><strong><a href="https://github.com/mozilla/perfcompare/commit/e06a7a17685f3803b7889ad4307ecdf187655d80" rel="noopener nofollow ugc">Dark Mode Bugs Fix (</a><a href="https://github.com/mozilla/perfcompare/pull/1063" rel="noopener nofollow ugc">#1063</a><a href="https://github.com/mozilla/perfcompare/commit/e06a7a17685f3803b7889ad4307ecdf187655d80" rel="noopener nofollow ugc">)</a></strong></h4>
</li>
<li>
<h4><a class="anchor" href="https://discourse.mozilla.org/#p-295837-bug-2037556-simplify-wording-of-tooltip-text-for-cd-and-cles-fix-dark-mode-links-in-tooltips-httpsgithubcommozillaperfcomparecommit1aaa46f08e2c620abd3e79c58e83bbc65c08234e1067httpsgithubcommozillaperfcomparepull1067httpsgithubcommozillaperfcomparecommit1aaa46f08e2c620abd3e79c58e83bbc65c08234e-3" name="p-295837-bug-2037556-simplify-wording-of-tooltip-text-for-cd-and-cles-fix-dark-mode-links-in-tooltips-httpsgithubcommozillaperfcomparecommit1aaa46f08e2c620abd3e79c58e83bbc65c08234e1067httpsgithubcommozillaperfcomparepull1067httpsgithubcommozillaperfcomparecommit1aaa46f08e2c620abd3e79c58e83bbc65c08234e-3"></a><strong><a href="https://github.com/mozilla/perfcompare/commit/1aaa46f08e2c620abd3e79c58e83bbc65c08234e" rel="noopener nofollow ugc">Bug 2037556: simplify wording of tooltip text for CD and CLES; fix dark mode links in tooltips (</a><a href="https://github.com/mozilla/perfcompare/pull/1067" rel="noopener nofollow ugc">#1067</a><a href="https://github.com/mozilla/perfcompare/commit/1aaa46f08e2c620abd3e79c58e83bbc65c08234e" rel="noopener nofollow ugc">)</a></strong></h4>
</li>
</ul>
<p>[moijes]</p>
<ul>
<li>
<h4><a class="anchor" href="https://discourse.mozilla.org/#p-295837-bug-1986319-auto-select-for-partial-or-full-hash-matches-httpsgithubcommozillaperfcomparecommit89f09ac283790f351014f6d7dd9053305792aac11066httpsgithubcommozillaperfcomparepull1066httpsgithubcommozillaperfcomparecommit89f09ac283790f351014f6d7dd9053305792aac1-4" name="p-295837-bug-1986319-auto-select-for-partial-or-full-hash-matches-httpsgithubcommozillaperfcomparecommit89f09ac283790f351014f6d7dd9053305792aac11066httpsgithubcommozillaperfcomparepull1066httpsgithubcommozillaperfcomparecommit89f09ac283790f351014f6d7dd9053305792aac1-4"></a><strong><a href="https://github.com/mozilla/perfcompare/commit/89f09ac283790f351014f6d7dd9053305792aac1" rel="noopener nofollow ugc">Bug 1986319: Auto-select for partial or full hash matches (</a><a href="https://github.com/mozilla/perfcompare/pull/1066" rel="noopener nofollow ugc">#1066</a><a href="https://github.com/mozilla/perfcompare/commit/89f09ac283790f351014f6d7dd9053305792aac1" rel="noopener nofollow ugc">)</a></strong></h4>
</li>
</ul>
<p>[sumairq]</p>
<ul>
<li>
<h4><a class="anchor" href="https://discourse.mozilla.org/#p-295837-bug-1855186httpsbugzillamozillaorgshow_bugcgiid1855186-show-whether-lower-or-higher-is-better-for-each-metric-httpsgithubcommozillaperfcomparecommita6b5a71be28f10f74dde860675d747054c4041121051httpsgithubcommozillaperfcomparepull1051httpsgithubcommozillaperfcomparecommita6b5a71be28f10f74dde860675d747054c404112-5" name="p-295837-bug-1855186httpsbugzillamozillaorgshow_bugcgiid1855186-show-whether-lower-or-higher-is-better-for-each-metric-httpsgithubcommozillaperfcomparecommita6b5a71be28f10f74dde860675d747054c4041121051httpsgithubcommozillaperfcomparepull1051httpsgithubcommozillaperfcomparecommita6b5a71be28f10f74dde860675d747054c404112-5"></a><strong><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1855186">Bug-1855186</a><a href="https://github.com/mozilla/perfcompare/commit/a6b5a71be28f10f74dde860675d747054c404112" rel="noopener nofollow ugc">: Show whether lower or higher is “better” for each metric (</a><a href="https://github.com/mozilla/perfcompare/pull/1051" rel="noopener nofollow ugc">#1051</a><a href="https://github.com/mozilla/perfcompare/commit/a6b5a71be28f10f74dde860675d747054c404112" rel="noopener nofollow ugc">)</a></strong></h4>
</li>
</ul>
<p>Thank you for the contributions!</p>
<p>Bugs or feature requests can be<a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Testing&amp;component=PerfCompare&amp;status_whiteboard=%5Bpcf%5D"> filed on Bugzilla</a>. The team can also be found on<a href="https://matrix.to/#/%23perfcompare:mozilla.org" rel="noopener nofollow ugc"> the #perfcompare channel on Element</a>. Come and chat!</p>
            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://discourse.mozilla.org/t/july-22nd-deploy/149012">Read full topic</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Developer Experience: Firefox WebDriver Newsletter 153]]></title>
<description><![CDATA[WebDriver is a remote control interface that enables introspection and control of user agents. As such, it can help developers to verify that their websites are working and performing well with all major browsers. The protocol is standardized by the W3C and consists of two separate specifications...]]></description>
<link>https://tsecurity.de/de/3684978/tools/firefox-developer-experience-firefox-webdriver-newsletter-153/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3684978/tools/firefox-developer-experience-firefox-webdriver-newsletter-153/</guid>
<pubDate>Wed, 22 Jul 2026 01:04:45 +0200</pubDate>
<content:encoded><![CDATA[<p><em>WebDriver is a remote control interface that enables introspection and control of user agents. As such, it can help developers to verify that their websites are working and performing well with all major browsers. The protocol is standardized by the<a href="https://www.w3.org/"> W3C</a> and consists of two separate specifications:<a href="https://w3c.github.io/webdriver/"> WebDriver classic</a> (HTTP) and the new<a href="https://w3c.github.io/webdriver-bidi/"> WebDriver BiDi</a> (Bi-Directional).</em></p>



<p><em>This newsletter gives an overview of the work we’ve done as part of the Firefox 153 release cycle</em>.</p>



<h3>Contributions</h3>



<p>Firefox is an open source project, and we are always happy to receive external code contributions to our WebDriver implementation. We want to give special thanks to everyone who filed issues, bugs and submitted patches.</p>



<p> Firefox 153, multiple WebDriver bugs were fixed by contributors:</p>



<ul>
<li>Khalid AlHaddad updated our codebase to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1972065">use constants instead of hard-coded strings</a> for all our session data types.</li>



<li>Khalid AlHaddad improved the window manipulation commands in Marionette and WebDriver BiDi to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1941404">allow individual window geometry properties, such as x, y, width, and height, to be adjusted independently</a>.</li>



<li>Sameem updated the “Take Element Screenshot” command from WebDriver Classic to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2013176">crop screenshots of elements which exceed the viewport</a>. This aligns with the specification and avoids errors when attempting to capture huge elements.</li>
</ul>



<p>WebDriver code is written in JavaScript, Python, and Rust so any web developer can contribute! Read<a href="https://firefox-source-docs.mozilla.org/setup/index.html"> how to setup the work environment</a> and check<a href="https://codetribute.mozilla.org/projects/automation"> the list of mentored issues</a> for Marionette, or the<a href="https://codetribute.mozilla.org/languages/javascript?project%3DWebDriver%2520BiDi"> list of mentored JavaScript bugs for WebDriver BiDi</a>. Join<a href="https://chat.mozilla.org/#/room/%23webdriver:mozilla.org"> our chatroom</a> if you need any help to get started!</p>



<h3>All Changes</h3>



<p>A complete list of developer-facing changes included in this Firefox release is available in the <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/153#webdriver_conformance_webdriver_bidi_marionette">MDN Firefox 153 Release Notes</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Martin Thompson: Why in Building Protocols, Like Code, Starting Over Is Dumb]]></title>
<description><![CDATA[Today, the IETF held the CURRENT BoF,
where the goal was to develop a new protocol.
That protocol would be substantially like TLS,
reusing its record layer and basic structure,
but it would drop in MLS for key exchange.
This is somewhere between a pretty bad idea
and a horrible idea.
The wholesal...]]></description>
<link>https://tsecurity.de/de/3684807/tools/martin-thompson-why-in-building-protocols-like-code-starting-over-is-dumb/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3684807/tools/martin-thompson-why-in-building-protocols-like-code-starting-over-is-dumb/</guid>
<pubDate>Tue, 21 Jul 2026 22:58:58 +0200</pubDate>
<content:encoded><![CDATA[<p>Today, the IETF held the CURRENT BoF,
where the goal was to develop a new protocol.
That protocol would be substantially like TLS,
reusing its record layer and basic structure,
but it would drop in MLS for key exchange.</p>
<p>This is somewhere between a pretty bad idea
and a horrible idea.</p>
<p>The wholesale replacement of a huge chunk of protocol architectures
is a hallmark of a lot of the AI-generated protocol proposals
that have flooded the IETF.
A small blemish is identified,
then the fix is a whole new protocol,
or a major piece of surgery.
No regard for the wisdom of Chesterton’s Fence
or the accumulated knowledge and usefulness embodied in what exists.</p>
<p>Experienced engineers know that rewriting a code module
is not something you do lightly.
There’s lots of literature out there about why this is a bad idea generally,
and some emerging discussion about how AI might just change that.</p>
<p>The reasons not to rewrite a software component still largely apply
to a protocol component.
The reasons that AI might make it easier to do that safely, less so.
Protocols are different.</p>
<h3>Wholesale Change Will Miss Use Cases</h3>
<p>Just like with a code change,
a protocol component that changes will miss use cases
that people really care about.</p>
<p>The usual concerns with code apply:</p>
<ul>
<li>The existing features you know about and can test for
can be handled.</li>
<li>The existing problems you know and care about can be fixed.</li>
<li>You inevitably introduce brand-new problems.</li>
<li>The existing features you don’t know about
get lost.</li>
</ul>
<p>Unlike code changes, you probably don’t have a test case
for existing features that you didn’t know about.
We found that with HTTP/2,
where a number of use cases got lost in the process
of “upgrading” HTTP.</p>
<p>In HTTP/1.1,
performing client authentication
in the middle of request was possible.
Losing that capability in HTTP/2
affected few enough people
that it was not badly damaging for the ecosystem.
It still sucked.</p>
<p>A lot of work was done to try to find these issues,
but we did not learn about these problems until fairly late in the process.</p>
<p>Proposing a protocol change means asking a whole lot of other people,
many of whom are not invested in your goals,
to do that work.</p>
<p>Changing a protocol by replacing a chunk of it,
no matter how much care is taken,
either asks the entire ecosystem to change with you.</p>
<p>That means asking everyone to move with you.
If they don’t, you are not changing the protocol,
you are forking it.</p>
<h3>Forking A Protocol Destroys Interoperability</h3>
<p>The real value of having a protocol like TLS
is that a great many things can all talk to each other.</p>
<p>Forking a protocol –
and sometimes profiling a protocol, a subject for another post –
destroys that.
You now have two ways to achieve the same goal,
and a choice to join one of two clubs.
You can join both, but that means constantly translating back and forth,
something that can only get harder over time
as protocol semantics diverge.</p>
<p>And yes, in case you were asking,
this applies to the entirety of the IETF IoT sphere,
which has parallel HTTP, TLS, and other analogues.
Ostensibly, these address the needs of highly constrained hardware,
but the cost is an ecosystem cut off from the mainstream.</p>
<h3>But Fixing Protocols Is Hard</h3>
<p>Yes, existing protocols come with baggage
or technical debt.
Maybe they aren’t perfectly optimized for your use.</p>
<p>The value that an existing protocol carries
is that you are sharing the burden of its maintenance
with a great many more people.
Fixing it, maybe by adding extensions to support your needs,
comes with opportunities to improve the protocol
even beyond that immediate need.
Every change is a chance to work off some of the accumulated cruft.</p>
<p>Major refreshes, like the TLS 1.3 reworking,
cleared out a ton of cruft in the process.
You get to benefit from the work that others do to improve that protocol too.</p>
<h3>Do the Work</h3>
<p>It is hard to be a responsible steward for the fabric of the Internet.
We do it because it is worthwhile.
Ignoring the lessons of the past is not helpful.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[v17.0.7]]></title>
<description><![CDATA[@oh-my-pi/pi-coding-agent
Fixed

Fixed Portkey/gateway custom models whose ids start with @ (e.g. @modal/GLM-5-2-FP8) being rewritten to unrelated bundled wire ids (e.g. glm-5-2), which caused 400 responses requiring x-portkey-config or x-portkey-provider.

Full Changelog: v17.0.6...v17.0.7]]></description>
<link>https://tsecurity.de/de/3684806/tools/v1707/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3684806/tools/v1707/</guid>
<pubDate>Tue, 21 Jul 2026 22:58:53 +0200</pubDate>
<content:encoded><![CDATA[<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed Portkey/gateway custom models whose ids start with <code>@</code> (e.g. <code>@modal/GLM-5-2-FP8</code>) being rewritten to unrelated bundled wire ids (e.g. <code>glm-5-2</code>), which caused <code>400</code> responses requiring <code>x-portkey-config</code> or <code>x-portkey-provider</code>.</li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v17.0.6...v17.0.7"><tt>v17.0.6...v17.0.7</tt></a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Quick Answers: For the questions in between]]></title>
<description><![CDATA[You’re planning a trip. Reading an article. Following a recipe. Then a question pops into your head. Sometimes it leads down a rabbit hole – with more searches, more tabs and plenty to explore. Other times, you just need a little context so you can get back to what you were doing. That’s why we’r...]]></description>
<link>https://tsecurity.de/de/3684319/tools/quick-answers-for-the-questions-in-between/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3684319/tools/quick-answers-for-the-questions-in-between/</guid>
<pubDate>Tue, 21 Jul 2026 18:12:11 +0200</pubDate>
<content:encoded><![CDATA[<p>You’re planning a trip. Reading an article. Following a recipe. Then a question pops into your head. Sometimes it leads down a rabbit hole – with more searches, more tabs and plenty to explore. Other times, you just need a little context so you can get back to what you were doing. That’s why we’re […]</p>
<p>The post <a href="https://blog.mozilla.org/en/firefox/firefox-features/quick-answers-ios/">Quick Answers: For the questions in between</a> appeared first on <a href="https://blog.mozilla.org/en/">The Mozilla Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Your Android tabs just got a lot more organized with Firefox]]></title>
<description><![CDATA[Tabs pile up fast on mobile. Imagine you’re planning a summer barbecue, and you start by searching for the best rib recipe. Twenty minutes later, you’re 17 tabs deep: comparing marinades, debating side dishes, checking the weather, making a grocery list and adding songs to a playlist. None of tho...]]></description>
<link>https://tsecurity.de/de/3684318/tools/your-android-tabs-just-got-a-lot-more-organized-with-firefox/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3684318/tools/your-android-tabs-just-got-a-lot-more-organized-with-firefox/</guid>
<pubDate>Tue, 21 Jul 2026 18:12:07 +0200</pubDate>
<content:encoded><![CDATA[<p>Tabs pile up fast on mobile. Imagine you’re planning a summer barbecue, and you start by searching for the best rib recipe. Twenty minutes later, you’re 17 tabs deep: comparing marinades, debating side dishes, checking the weather, making a grocery list and adding songs to a playlist. None of those tabs are organized. They’re mixed […]</p>
<p>The post <a href="https://blog.mozilla.org/en/firefox/tab-groups-android/">Your Android tabs just got a lot more organized with Firefox</a> appeared first on <a href="https://blog.mozilla.org/en/">The Mozilla Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Experience Better Browsing: Introducing Native Containers in Firefox 153]]></title>
<description><![CDATA[Today, we’re excited to announce the Preview of Containers in Firefox version 153, which lets you keep separate parts of your online life (work, shopping, personal, banking) logged into different accounts in the same browser window, but keeps your cookies and ad tracking isolated inside each cont...]]></description>
<link>https://tsecurity.de/de/3684317/tools/experience-better-browsing-introducing-native-containers-in-firefox-153/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3684317/tools/experience-better-browsing-introducing-native-containers-in-firefox-153/</guid>
<pubDate>Tue, 21 Jul 2026 18:12:00 +0200</pubDate>
<content:encoded><![CDATA[<p>Today, we’re excited to announce the Preview of Containers in Firefox version 153, which lets you keep separate parts of your online life (work, shopping, personal, banking) logged into different accounts in the same browser window, but keeps your cookies and ad tracking isolated inside each container. This means that stuff you do in one […]</p>
<p>The post <a href="https://blog.mozilla.org/en/firefox/firefox-containers-preview/">Experience Better Browsing: Introducing Native Containers in Firefox 153</a> appeared first on <a href="https://blog.mozilla.org/en/">The Mozilla Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox Tooling Announcements: Firefox Profiler Deployment (July 21, 2026)]]></title>
<description><![CDATA[The latest version of the Firefox Profiler is now live! Check out the full changelog below to see what’s changed:
Highlights:

[fatadel] Show counter values over time in profiler-cli (#6136)
[Markus Stange] More typed arrays: sample + counter times, some frametable columns (#6139)
[Nazım Can Altı...]]></description>
<link>https://tsecurity.de/de/3683972/tools/firefox-tooling-announcements-firefox-profiler-deployment-july-21-2026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3683972/tools/firefox-tooling-announcements-firefox-profiler-deployment-july-21-2026/</guid>
<pubDate>Tue, 21 Jul 2026 16:11:42 +0200</pubDate>
<content:encoded><![CDATA[<p>The latest version of the <a href="https://profiler.firefox.com/" rel="noopener nofollow ugc">Firefox Profiler</a> is now live! Check out the full changelog below to see what’s changed:</p>
<p><strong>Highlights:</strong></p>
<ul>
<li>[fatadel] Show counter values over time in profiler-cli (<a href="https://github.com/firefox-devtools/profiler/pull/6136" rel="noopener nofollow ugc">#6136</a>)</li>
<li>[Markus Stange] More typed arrays: sample + counter times, some frametable columns (<a href="https://github.com/firefox-devtools/profiler/pull/6139" rel="noopener nofollow ugc">#6139</a>)</li>
<li>[Nazım Can Altınova] Add marker handles to <code>profiler-cli thread network</code> (<a href="https://github.com/firefox-devtools/profiler/pull/6172" rel="noopener nofollow ugc">#6172</a>)</li>
<li>[Nazım Can Altınova] Surface network activity across profiler-cli (<a href="https://github.com/firefox-devtools/profiler/pull/6175" rel="noopener nofollow ugc">#6175</a>)</li>
<li>[Nazım Can Altınova] Add <code>profile meta</code> command to profiler-cli (<a href="https://github.com/firefox-devtools/profiler/pull/6177" rel="noopener nofollow ugc">#6177</a>)</li>
<li>[Markus Stange] Allow raw marker table’s <code>startTime</code> and <code>endTime</code> columns to be Float64Array (<a href="https://github.com/firefox-devtools/profiler/pull/6169" rel="noopener nofollow ugc">#6169</a>)</li>
</ul>
<p><strong>Other Changes:</strong></p>
<ul>
<li>[Sky Ning] Skip preview links for non-main PRs (<a href="https://github.com/firefox-devtools/profiler/pull/6161" rel="noopener nofollow ugc">#6161</a>)</li>
<li>[spokodev] fix(gecko-upgrade): don’t crash on a counter with empty sample_groups (<a href="https://github.com/firefox-devtools/profiler/pull/6160" rel="noopener nofollow ugc">#6160</a>)</li>
<li>[Markus Stange] Make profile-conversion snapshots more compact and meaningful (<a href="https://github.com/firefox-devtools/profiler/pull/6152" rel="noopener nofollow ugc">#6152</a>)</li>
<li>[Nazım Can Altınova] Only render a marker url field as a link when the whole value is a URL (<a href="https://github.com/firefox-devtools/profiler/pull/6163" rel="noopener nofollow ugc">#6163</a>)</li>
<li>[fatadel] Show each counter’s owning process in profiler-cli (<a href="https://github.com/firefox-devtools/profiler/pull/6164" rel="noopener nofollow ugc">#6164</a>)</li>
<li>[Nazım Can Altınova] Document the pre-existing thread info and network JSON schemas in the cli (<a href="https://github.com/firefox-devtools/profiler/pull/6171" rel="noopener nofollow ugc">#6171</a>)</li>
<li>[Markus Stange] Copy column contents in getRawSamplesTableBuilderFromExisting for consistency (<a href="https://github.com/firefox-devtools/profiler/pull/6168" rel="noopener nofollow ugc">#6168</a>)</li>
<li>[Markus Stange] Convert eligible columns to typed arrays when outputting from profiler-edit (<a href="https://github.com/firefox-devtools/profiler/pull/6167" rel="noopener nofollow ugc">#6167</a>)</li>
<li>[Markus Stange] Remove unused samples.thread column (<a href="https://github.com/firefox-devtools/profiler/pull/6151" rel="noopener nofollow ugc">#6151</a>)</li>
<li>[Markus Stange] Fixed botched merge which broke ‘yarn ts’ (<a href="https://github.com/firefox-devtools/profiler/pull/6174" rel="noopener nofollow ugc">#6174</a>)</li>
<li>[Markus Stange] Update json-slabs 0.3.0 → 0.4.0 (major) (<a href="https://github.com/firefox-devtools/profiler/pull/6176" rel="noopener nofollow ugc">#6176</a>)</li>
<li>[nightcityblade] Fix light theme text selection colors (<a href="https://github.com/firefox-devtools/profiler/pull/6186" rel="noopener nofollow ugc">#6186</a>)</li>
<li>[Nazım Can Altınova] Import source map URLs from Chrome DevTools traces (<a href="https://github.com/firefox-devtools/profiler/pull/6190" rel="noopener nofollow ugc">#6190</a>)</li>
<li>[Nazım Can Altınova] Rename yarn <code>build-profiler-cli</code> script to <code>build-cli</code> (<a href="https://github.com/firefox-devtools/profiler/pull/6191" rel="noopener nofollow ugc">#6191</a>)</li>
<li>[Nazım Can Altınova] Migrate husky to version 9 (<a href="https://github.com/firefox-devtools/profiler/pull/6201" rel="noopener nofollow ugc">#6201</a>)</li>
<li>[Nazım Can Altınova] Fix horizontal overflow when the transform navigator is long (<a href="https://github.com/firefox-devtools/profiler/pull/6199" rel="noopener nofollow ugc">#6199</a>)</li>
<li>[fatadel] Add a ‘hexadecimal’ marker schema field format (<a href="https://github.com/firefox-devtools/profiler/pull/6197" rel="noopener nofollow ugc">#6197</a>)</li>
<li>[Nazım Can Altınova] Bump source-map to 0.8.0 and remove the old type workaround (<a href="https://github.com/firefox-devtools/profiler/pull/6202" rel="noopener nofollow ugc">#6202</a>)</li>
<li>[Nazım Can Altınova] <img alt=":clockwise_vertical_arrows:" class="emoji" height="20" src="https://emoji.discourse-cdn.com/twitter/clockwise_vertical_arrows.png?v=15" title=":clockwise_vertical_arrows:" width="20"> Sync: l10n → main (July 21, 2026) (<a href="https://github.com/firefox-devtools/profiler/pull/6209" rel="noopener nofollow ugc">#6209</a>)</li>
</ul>
<p>Big thanks to our amazing localizers for making this release possible:</p>
<ul>
<li>fr: parmegiani.thomas</li>
<li>fr: Théo Chevalier</li>
<li>sr: Марко Костић (Marko Kostić)</li>
<li>sv-SE: Luna Jernberg</li>
<li>tr: Grk</li>
<li>zh-CN: Ariel</li>
<li>zh-CN: Olvcpr423</li>
</ul>
<p>Find out more about the Firefox Profiler on <a href="https://profiler.firefox.com/" rel="noopener nofollow ugc">profiler.firefox.com</a>! If you have any questions, join the discussion on our <a href="https://chat.mozilla.org/#/room/%23profiler:mozilla.org" rel="noopener nofollow ugc">Matrix channel</a>!</p>
            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://discourse.mozilla.org/t/firefox-profiler-deployment-july-21-2026/149006">Read full topic</a></p>]]></content:encoded>
</item>
</channel>
</rss>
<!-- Generated in 1,02ms -->