<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Ascendrix Technologies on Medium]]></title>
        <description><![CDATA[Stories by Ascendrix Technologies on Medium]]></description>
        <link>https://medium.com/@ascendrixtech?source=rss-de64cddb560a------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*RthuQg-kLqjHySZu</url>
            <title>Stories by Ascendrix Technologies on Medium</title>
            <link>https://medium.com/@ascendrixtech?source=rss-de64cddb560a------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 13 Nov 2026 21:30:51 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@ascendrixtech/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Next.js November 2026 Security Release: 7 Fixes, Mostly in Caching, and What to Check in Your App]]></title>
            <link>https://medium.com/@ascendrixtech/next-js-november-2026-security-release-7-fixes-mostly-in-caching-and-what-to-check-in-your-app-fc4edb60dff5?source=rss-de64cddb560a------2</link>
            <guid isPermaLink="false">https://medium.com/p/fc4edb60dff5</guid>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[nextjs]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Ascendrix Technologies]]></dc:creator>
            <pubDate>Tue, 10 Nov 2026 12:46:01 GMT</pubDate>
            <atom:updated>2026-11-10T12:46:01.546Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jBoX9dDRlerEuMRQtUaNWA.png" /></figure><p>On <strong>November 3, 2026</strong>, the Next.js team shipped its scheduled <strong>November security release</strong>, fixing <strong>seven vulnerabilities</strong> in:</p><ul><li><strong>Next.js 16.4.5</strong> (Active LTS)</li><li><strong>Next.js 15.5.29</strong> (Maintenance LTS)</li></ul><p>It follows a busy few months: a critical remote code execution fix in the OG image generator in <strong>September</strong>, and in <strong>October</strong>, critical fixes for remote code execution in &quot;use cache&quot; functions and in an upstream image library.</p><p>This release is less dramatic than those, but it touches something many modern Next.js apps depend on: <strong>caching.</strong> Several issues could let one user’s or tenant’s cached data reach another, which matters a lot for SaaS apps.</p><p>Here’s what was fixed, who’s affected, and what to do.</p><h4>The quick version</h4><ul><li><strong>Upgrade:</strong> next@16.4.5 on 16.x, or next@15.5.29 on 15.x.</li><li><strong>Most serious issue:</strong> cached data leaking <strong>between tenants</strong> when &quot;use cache&quot; and unstable_cache are combined.</li><li><strong>Self-hosting with </strong><strong>next start?</strong> Several issues affect you more directly than Vercel-hosted apps.</li><li><strong>On Netlify?</strong> Also update @netlify/plugin-nextjs to <strong>5.16.6.</strong></li><li><strong>Next.js 14:</strong> the advisories list <strong>no patched 14.x release.</strong> Time to upgrade.</li></ul><h4>The seven issues, in plain language</h4><p><strong>1. Cross-tenant cache disclosure through </strong><strong>unstable_cache (the most serious).</strong><br> If a public &quot;use cache&quot; function reads a <strong>root parameter</strong>, such as a tenant ID, site, or locale, and that same function is <strong>also called from inside </strong><strong>unstable_cache</strong>, a concurrent cold cache fill could return <strong>another request’s result</strong> without checking the root parameter. In a multi-tenant app, <strong>one customer could see another’s cached data.</strong> Most coverage rates this one High. The advisory’s workaround until you upgrade: <strong>don’t nest </strong><strong>&quot;use cache&quot; inside </strong><strong>unstable_cache.</strong></p><p><strong>2. Cross-root-parameter disclosure in nested </strong><strong>&quot;use cache&quot; functions.</strong><br> With <strong>Cache Components</strong>, an inner cached function that reads a root parameter and returns an early value alongside a slower async value could have its outer cache entry <strong>stored before its root-parameter dependencies were recorded.</strong> The result: tenant-, site-, or locale-specific content served across the wrong boundary.</p><p><strong>3. Cross-user cache disclosure and poisoning with binary arguments.</strong><br> On Next.js 16, apps that pass <strong>security-significant binary arguments</strong>, such as typed arrays or buffers, into &quot;use cache&quot; functions and share the resulting entries could have cache entries <strong>disclosed to or poisoned by other users.</strong></p><p><strong>4. Shared fallback shell poisoning on self-hosted apps.</strong><br> Self-hosted apps running <strong>next start</strong> with <strong>Cache Components enabled</strong> and <strong>Partial Prefetching disabled or unset</strong> could have a shared page shell <strong>poisoned by an unauthenticated request.</strong> This affects Next.js 16.4+ apps with the route shape described in the advisory.</p><p><strong>5. HttpOnly cookie exposure on Edge routes.</strong><br> Cookie values could appear in an <strong>internal </strong><strong>x-middleware-set-cookie response header</strong> on <strong>Edge runtime routes</strong>, defeating the purpose of HttpOnly. According to the advisory, the reproduced leak <strong>didn’t affect Node.js Route Handlers</strong> or routes setting cookies through cookies().set(). On Netlify, it also affected <strong>cookies set in Middleware.</strong></p><p><strong>6. SVG rejection bypass in image optimization.</strong><br> With images.dangerouslyAllowSVG: false, an attacker could get an SVG past the filter by having it <strong>misclassified as AVIF</strong>, so the image optimizer would decode it as SVG anyway, reaching a parser the app had intentionally excluded. The advisory says this alone doesn’t demonstrate XSS or remote code execution.</p><p><strong>7. Response framing issue on self-hosted apps.</strong><br> Self-hosted apps that <strong>forward fetched responses</strong>, running behind <strong>HTTP/1.1 reverse proxies that use pipelining</strong>, could have responses <strong>mixed up between clients.</strong> The advisory notes it doesn’t apply to every reverse-proxy setup.</p><h4>Who should worry most?</h4><p><strong>Highest priority:</strong></p><ul><li><strong>Multi-tenant SaaS apps</strong> using &quot;use cache&quot;, Cache Components, or unstable_cache, especially where tenant, site, or locale is a root parameter.</li><li><strong>Self-hosted apps</strong> (next start) using Cache Components.</li><li><strong>Apps using Edge runtime routes</strong> that set HttpOnly cookies.</li></ul><p><strong>Lower but real priority:</strong></p><ul><li>Apps relying on dangerouslyAllowSVG: false for safety.</li><li>Self-hosted apps behind HTTP/1.1 pipelining proxies.</li></ul><h4>Step 1: Check your versions</h4><pre>npm ls next sharp</pre><p>You want <strong>next 16.4.5+</strong> or <strong>15.5.29+.</strong></p><p>Also check <strong>sharp</strong>, the image library Next.js uses. October’s image-optimization remote code execution issue (CVE-2026–96889), which affected Next.js running on glibc-based Linux, required <strong>sharp 0.35.5 or later.</strong> Upgrading Next.js normally brings in a fixed sharp version, but confirm it, especially in older lock files.</p><h4>Step 2: Upgrade and redeploy</h4><pre>npm install next@16.4.5<br># or, on Next.js 15<br>npm install next@15.5.29</pre><p>Then rebuild and redeploy. On Netlify, also update the adapter:</p><pre>npm install @netlify/plugin-nextjs@5.16.6</pre><h4>Step 3: Review your caching code</h4><p>Upgrading fixes these specific bugs. But they’re a good prompt to check how your app separates cached data between users and tenants.</p><p><strong>Search for risky patterns:</strong></p><pre>grep -rn &quot;unstable_cache&quot; app/ lib/<br>grep -rn &quot;&#39;use cache&#39;\|\&quot;use cache\&quot;&quot; app/ lib/</pre><p><strong>Make tenant boundaries explicit.</strong> As a general defensive habit, pass the tenant or user identifier <strong>as an argument</strong> to cached functions, so it’s always part of the cache key, rather than relying on values read indirectly inside the function:</p><pre>async function getTenantSettings(tenantId: string) {<br>  &#39;use cache&#39;;<br>  return db.settings.findUnique({ where: { tenantId } });<br>}</pre><p><strong>Never cache user-specific data in shared entries.</strong> Data for one logged-in user, such as profiles, orders, or permissions, shouldn’t go into a cache that’s shared across users unless the user ID is part of the key.</p><p><strong>Avoid passing security-sensitive binary data</strong> (tokens, keys, signed payloads as typed arrays) into cached functions.</p><h4>Step 4: Lock down self-hosted deployments</h4><p>If you run Next.js yourself:</p><ul><li><strong>Keep Next.js and sharp patched promptly.</strong> Self-hosted apps don’t get the platform-level protections hosting providers sometimes add.</li><li><strong>Review your reverse proxy settings</strong>, including whether HTTP/1.1 pipelining is in use.</li><li><strong>Watch the Next.js security page</strong> and GitHub advisories. Next.js now announces scheduled security releases about a week in advance, which gives you time to plan.</li></ul><h4>A note on Next.js versions</h4><ul><li><strong>Next.js 16</strong> is the <strong>Active LTS.</strong></li><li><strong>Next.js 15</strong> is in <strong>Maintenance LTS</strong> and still received these fixes, but upgrading to 16 is recommended for the longer term.</li><li><strong>Next.js 14 and older</strong> received <strong>no patched releases</strong> for these advisories.</li></ul><h4>The bigger lesson: caching is now a security boundary</h4><p>Modern Next.js caching is powerful: &quot;use cache&quot;, Cache Components, and partial prerendering can make apps dramatically faster. But every cache is a <strong>shared store</strong>, and in a multi-tenant app, a caching mistake is a <strong>data leak.</strong></p><p>Treat caching code like authorization code:</p><ul><li>Know exactly <strong>what goes into each cache key.</strong></li><li><strong>Test with multiple tenants and users</strong>, for example by checking that tenant A never sees tenant B’s data, even under concurrent requests.</li><li><strong>Review cache changes carefully</strong> in pull requests.</li></ul><h4>Practical recommendation</h4><p>Today:</p><ol><li>Run npm ls next sharp on every Next.js project.</li><li>Upgrade to <strong>16.4.5 or 15.5.29</strong>, and update the Netlify adapter if you use Netlify.</li><li>Search for unstable_cache and &quot;use cache&quot; and check how tenant and user data is cached.</li><li>If you’re on <strong>Next.js 14 or older</strong>, plan the upgrade now.</li></ol><p>Four months, three significant Next.js security releases. The teams that cope best are the ones that can <strong>upgrade and redeploy within a day.</strong> If that’s hard for you today, improving your upgrade pipeline may be the most valuable security work you can do.</p><p><em>Sources: Next.js blog, “November 2026 Security Release” and “Upcoming Next.js November Security Release,” Netlify’s November 3, 2026 changelog, Releasebot’s Next.js release notes, and coverage from daily.dev, Webepex, TurboStarter, and DEV Community.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fc4edb60dff5" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A Government Just Put a Date on AI-Powered Cyberattacks: What the UK’s 2028 Warning Means for Every…]]></title>
            <link>https://medium.com/@ascendrixtech/a-government-just-put-a-date-on-ai-powered-cyberattacks-what-the-uks-2028-warning-means-for-every-ba0a6957faff?source=rss-de64cddb560a------2</link>
            <guid isPermaLink="false">https://medium.com/p/ba0a6957faff</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[critical-infrastructure]]></category>
            <category><![CDATA[ransomware]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Ascendrix Technologies]]></dc:creator>
            <pubDate>Tue, 10 Nov 2026 10:36:01 GMT</pubDate>
            <atom:updated>2026-11-10T10:36:01.384Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6jOleXd0bJkz7tG68qrvaQ.png" /></figure><h3>A Government Just Put a Date on AI-Powered Cyberattacks: What the UK’s 2028 Warning Means for Every Organization</h3><p>Most warnings about AI and cybersecurity are vague: “AI could make attacks worse someday.” This week, a national cyber agency did something different. It <strong>put a date on it.</strong></p><p>On <strong>November 3, 2026</strong>, the UK’s <strong>National Cyber Security Centre (NCSC)</strong>, part of the intelligence agency GCHQ, published its annual review, <strong>The State of the Cyber Nation.</strong> Its central judgement:</p><p><strong>It is highly likely that, between now and 2028, AI-powered malware will be used in a ransomware attack on the UK’s critical national infrastructure.</strong></p><p>That means energy, water, transport, healthcare, telecoms, and other essential services. And while the warning is about the UK, the reasoning behind it applies to organizations everywhere.</p><p>Here’s what the NCSC said, what it didn’t say, and what any organization can do in the next two years.</p><h4>What the NCSC actually said</h4><p><strong>On AI-powered ransomware:</strong> the agency judges an AI-powered ransomware attack on UK critical infrastructure <strong>“highly likely”</strong> by 2028. In intelligence language, that’s a strong statement.</p><p><strong>On nation states:</strong> the NCSC wrote that by 2028, it is highly likely that <strong>China, Russia, and other nation states will routinely use AI in cyber operations</strong> to achieve their geopolitical goals. Reporting on the review highlighted China as the country best equipped for AI-enabled operations.</p><p><strong>On the pessimistic scenario:</strong> alongside the review, the NCSC published an assessment of how AI could change cyber threats over the next two years. In its pessimistic scenario for 2028, it pictures <strong>a significant increase in the frequency and sophistication of attacks worldwide</strong>, with AI tools also making it <strong>harder to identify who’s behind an attack.</strong></p><p><strong>On the bigger picture:</strong> despite all this, the NCSC still believes AI will ultimately be a <strong>“net positive”</strong> for cybersecurity, because defenders can use it too.</p><h4>The numbers behind the warning</h4><p>The review covers <strong>September 1, 2025 to August 31, 2026.</strong> In that period:</p><ul><li>The NCSC’s incident team received <strong>1,831 reports</strong> of cyber attacks.</li><li><strong>337</strong> needed the NCSC’s direct support.</li><li><strong>80</strong> were rated <strong>nationally significant.</strong></li><li>Its <strong>Early Warning service</strong> alerted <strong>8,500 organizations</strong> to signs of a possible compromise.</li></ul><h4>“Tech on the cheap”</h4><p>The most memorable line came from NCSC chief executive <strong>Richard Horne</strong>, who said that <strong>“for decades we have collectively got away with tech on the cheap.”</strong></p><p>His point is important. AI isn’t creating most of these weaknesses. Much critical infrastructure still runs on <strong>old, unpatched, poorly segmented systems</strong>, because replacing them was always postponed to save money. Those weaknesses were tolerable when attacks were slow and labour-intensive. <strong>AI makes it faster and cheaper for attackers to find and exploit them.</strong></p><h4>What the warning does NOT say</h4><p>It’s worth being precise:</p><ul><li><strong>It’s a forecast, not a report of an attack.</strong> The NCSC hasn’t disclosed a specific breach or named a future target.</li><li><strong>Humans are still central.</strong> Analysts point out that today’s AI models are very good at <strong>finding vulnerabilities</strong>, but less capable at independently <strong>building complex custom malware.</strong> AI-enabled attacks will likely still involve skilled human operators, at least for now.</li><li><strong>The basics still matter most.</strong> Unpatched systems, weak passwords, and poor security hygiene remain the main ways in.</li></ul><h4>Why it matters beyond the UK</h4><p>The UK isn’t alone in this view. Australia’s 2026 critical infrastructure risk review also describes AI as a <strong>growing threat multiplier.</strong> And the past month alone shows how the threat is already changing:</p><ul><li><strong>PHP2Shell</strong> vulnerabilities were exploited before patches were even available.</li><li>US agency CISA added vulnerabilities <strong>from 2015</strong> to its list of actively exploited flaws.</li><li>India’s <strong>CERT-In</strong> warned that AI agents had reached live systems at Indian organizations through exposed credentials.</li><li>Researchers showed how a single file could trick AI coding agents into installing malware.</li></ul><p>The common pattern: <strong>attackers move faster, and old weaknesses become more dangerous.</strong> That applies to a hospital in London, a bank in Mumbai, or a software company anywhere.</p><h4>The UK’s defensive response</h4><p>The UK government is also testing AI for defence. A project led by the <strong>Government Cyber Coordination Centre (GC3)</strong> with the <strong>AI Security Institute</strong> used AI to scan for weaknesses and uncovered <strong>hundreds of potential security issues, including critical vulnerabilities.</strong> The NCSC will run a wider scheme with the Department for Digital, Culture, Media and Sport.</p><p>The NCSC also acknowledged a challenge: <strong>automated AI defence currently falls outside many organizations’ comfort zones.</strong> Building trust in AI tools that find and fix problems will take time.</p><h4>What every organization can do before 2028</h4><p>You don’t need to run a power grid to act on this warning. Two years is enough time to fix a lot, if the work starts now.</p><p><strong>1. Know what you have.</strong> You can’t protect systems you don’t know about. Build and maintain an inventory of every internet-facing system, application, and device, including forgotten test servers and old equipment.</p><p><strong>2. Patch internet-facing systems fast.</strong> AI shortens the time between a vulnerability being disclosed and being exploited. Prioritize vulnerabilities known to be actively exploited, such as those on <strong>CISA’s Known Exploited Vulnerabilities</strong> list, and fix internet-facing systems within days, not months.</p><p><strong>3. Use phishing-resistant multi-factor authentication.</strong> AI makes phishing messages far more convincing. Hardware security keys and passkeys protect accounts even when someone is tricked into entering a password.</p><p><strong>4. Make backups ransomware-proof.</strong> Ransomware attackers target backups first. Keep <strong>offline or immutable backups</strong> that attackers can’t delete or encrypt. For example, with Amazon S3 Object Lock in compliance mode, backups can’t be deleted during the retention period, even by an administrator:</p><pre>aws s3api put-object-lock-configuration \<br>  --bucket company-backups \<br>  --object-lock-configuration &#39;{&quot;ObjectLockEnabled&quot;: &quot;Enabled&quot;, &quot;Rule&quot;: {&quot;DefaultRetention&quot;: {&quot;Mode&quot;: &quot;COMPLIANCE&quot;, &quot;Days&quot;: 30}}}&#39;</pre><p>Then, most importantly, <strong>regularly test restoring from backups.</strong> An untested backup isn’t a backup.</p><p><strong>5. Separate critical systems.</strong> Keep operational systems, such as industrial control systems, payment systems, and production databases, on separate networks from everyday office IT. That way, a compromised laptop can’t reach everything.</p><p><strong>6. Budget to replace legacy systems.</strong> This is Horne’s “tech on the cheap” point. Old systems that can’t be patched or secured need a replacement plan, with real money attached. Every year of delay adds risk.</p><p><strong>7. Use AI for defence, carefully.</strong> AI tools can help find vulnerabilities, sort alerts, and spot unusual behaviour. Start with tools that recommend actions for people to approve, and build trust before allowing anything automatic.</p><p><strong>8. Prepare and practise your response.</strong> Have a written incident response plan, know who to call (your national cyber agency, such as CERT-In in India or the NCSC in the UK), and run a practice exercise at least once a year.</p><h4>Practical recommendation</h4><p>Treat 2028 as a deadline. This month, pick the <strong>three changes that would reduce your risk the most</strong>, usually patching internet-facing systems, phishing-resistant MFA, and tested immutable backups, and put them on a timeline with owners and budgets. A national cyber agency has given everyone a two-year warning. That’s rare. The organizations that use it well will be the ones still running normally in 2028.</p><p><em>Sources: NCSC, The State of the Cyber Nation (November 3, 2026), with reporting from The Register, The Next Web, Industrial Cyber, AI Weekly, Remio, Tech Insider, Swarmnetics, and AdsAdvance.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ba0a6957faff" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why Your Self-Hosted LLM Is Slower Than It Should Be: KV-Cache-Aware Routing, Explained (With…]]></title>
            <link>https://medium.com/@ascendrixtech/why-your-self-hosted-llm-is-slower-than-it-should-be-kv-cache-aware-routing-explained-with-cf3ef2962096?source=rss-de64cddb560a------2</link>
            <guid isPermaLink="false">https://medium.com/p/cf3ef2962096</guid>
            <category><![CDATA[ai-infrastructure]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[llm]]></category>
            <category><![CDATA[mlops]]></category>
            <category><![CDATA[kubernetes]]></category>
            <dc:creator><![CDATA[Ascendrix Technologies]]></dc:creator>
            <pubDate>Tue, 10 Nov 2026 07:09:19 GMT</pubDate>
            <atom:updated>2026-11-10T07:09:19.708Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*iTQqtmtqewJUkAIUTdXbsQ.png" /></figure><h3>Why Your Self-Hosted LLM Is Slower Than It Should Be: KV-Cache-Aware Routing, Explained (With Kinference as the Example)</h3><p>More teams are running open-weight models on their own GPUs. The reasons are good: data privacy, no per-token bills, and steady improvements in open models. The usual setup looks simple: a few <strong>vLLM</strong> replicas on <strong>Kubernetes</strong>, with a normal Kubernetes Service spreading requests across them.</p><p>Then the problems start. Responses feel slow even when GPUs aren’t busy. Adding more replicas doesn’t help as much as expected. And GPU utilization stays surprisingly low. Buoyant CEO William Morgan says it’s often in <strong>single digits</strong>, even during GPU shortages.</p><p>A big part of the problem is <strong>how requests are routed.</strong> This week, Buoyant released an open-source project aimed squarely at it: <strong>Kinference.</strong> Here’s the idea behind it, why it can make such a large difference, and how to apply it in your own setup.</p><h4>First, how LLM inference spends its time</h4><p>Each request to a language model has two phases:</p><ol><li><strong>Prefill:</strong> the model reads the whole prompt, which includes the system prompt, conversation history, documents, and tool definitions, and builds internal data called the <strong>KV cache</strong> (the “keys” and “values” the model’s attention layers need).</li><li><strong>Decode:</strong> the model generates the answer one token at a time, reusing that KV cache.</li></ol><p>For long prompts, <strong>prefill is expensive.</strong> It’s the main reason for <strong>time-to-first-token (TTFT)</strong>: the pause before the first words appear.</p><p>Here’s the key insight: <strong>many requests share most of their prompt.</strong> In a chat, each new message resends the whole conversation. Coding agents resend the same files and instructions on every step. Business apps reuse the same long system prompt for every user.</p><p>vLLM takes advantage of this with <strong>prefix caching</strong>: if a replica already has the KV cache for the start of a prompt, it can skip recomputing that part. This can turn a slow prefill into a fast one.</p><h4>The problem: round-robin routing ignores the cache</h4><p>But that only works if the request reaches <strong>the replica that has the cache.</strong></p><p>A standard Kubernetes Service spreads requests roughly evenly, without knowing anything about LLMs. So turn 1 of a conversation may go to replica A, turn 2 to replica B, and turn 3 to replica C. Each one recomputes the same prefix from scratch. The cache exists, just <strong>on the wrong GPU.</strong></p><p>A toy simulation shows the effect. Four replicas, each able to cache 50 conversations, handle follow-up messages from 150 ongoing chats:</p><pre>import random<br>from collections import OrderedDict<br>REPLICAS, CACHE_SLOTS, CONVERSATIONS, REQUESTS = 4, 50, 150, 20_000<br>class Replica:<br>    def __init__(self):<br>        self.cache = OrderedDict()  # conversation prefix -&gt; cached KV (LRU)<br>    def handle(self, conv):<br>        hit = conv in self.cache<br>        self.cache[conv] = True<br>        self.cache.move_to_end(conv)<br>        if len(self.cache) &gt; CACHE_SLOTS:<br>            self.cache.popitem(last=False)<br>        return hit<br>def simulate(route):<br>    random.seed(7)<br>    replicas = [Replica() for _ in range(REPLICAS)]<br>    hits = 0<br>    for i in range(REQUESTS):<br>        conv = random.randrange(CONVERSATIONS)  # follow-up turn in some chat<br>        hits += replicas[route(i, conv, replicas)].handle(conv)<br>    return hits / REQUESTS<br>round_robin = lambda i, conv, reps: i % len(reps)<br>cache_aware = lambda i, conv, reps: next(<br>    (n for n, r in enumerate(reps) if conv in r.cache), hash(conv) % len(reps))<br>print(f&quot;Round-robin cache hit rate: {simulate(round_robin):.0%}&quot;)<br>print(f&quot;Cache-aware cache hit rate: {simulate(cache_aware):.0%}&quot;)</pre><p>The output:</p><pre>Round-robin cache hit rate: 33%<br>Cache-aware cache hit rate: 99%</pre><p>With round-robin, each replica tries to cache every conversation, so caches keep overflowing and only about a third of requests find a cache. With cache-aware routing, each conversation sticks to one replica, the caches don’t overlap, and nearly every request is a hit.</p><p>It’s a simplified model. Real routers must also avoid overloading a popular replica. But it shows why <strong>routing alone</strong> can change performance so dramatically, using the same GPUs and the same model.</p><h4>What Kinference does</h4><p><strong>Kinference</strong> is an <strong>open-source inference control plane</strong> for vLLM on Kubernetes, released by Buoyant, the company behind the <strong>Linkerd</strong> service mesh, and announced on the vLLM blog on <strong>November 4, 2026.</strong> It’s licensed under <strong>Apache 2.0.</strong></p><p><strong>How it works:</strong> Kinference <strong>chooses which vLLM endpoint should handle each request.</strong> It exposes a gRPC interface that takes a request, for example in OpenAI chat-completions format, and returns the best endpoint plus any changes to the request body. It’s designed to work <strong>together with a proxy</strong>, such as the Buoyant Gateway, that actually forwards the traffic.</p><p><strong>Its main features:</strong></p><ul><li><strong>KV-cache-aware load balancing:</strong> Kinference watches <strong>vLLM’s KV-cache events and engine metrics</strong>, so it knows which replica holds which cached data. It also considers <strong>GPU queue sizes and historical performance</strong>, so it can send each request to the replica that will do the <strong>least work</strong> for it. It uses NVIDIA’s open-source <strong>dynamo-kv-router</strong> component to track cache events.</li><li><strong>Declarative routing policies:</strong> routing rules are defined as Kubernetes-style resources, including options like semantic routing.</li><li><strong>Multi-tenant controls:</strong> <strong>token rate limiting</strong>, per-tenant policies, and <strong>per-tenant metrics</strong>, so each team’s or customer’s GPU usage can be measured and managed.</li><li><strong>Cloud overflow:</strong> it can optionally send requests to <strong>cloud providers</strong> under conditions you define, for example when your own GPU pool is saturated.</li></ul><p><strong>The headline result:</strong> in <strong>Buoyant’s own benchmark</strong>, KV-cache-aware routing <strong>reduced median time-to-first-token by 95%</strong> compared with round-robin load balancing through a standard Kubernetes Service. That benchmark measured latency without heavy load, to isolate the effect of routing. As with any vendor benchmark, test it on your own workloads.</p><h4>You have options</h4><p>Kinference isn’t the only project working on this problem. Cache-aware routing for LLMs is becoming a standard part of the inference stack:</p><ul><li><strong>Kubernetes Gateway API Inference Extension and llm-d</strong>, an open-source effort that Google’s GKE Inference Gateway is built on, can route by prefix match and KV cache usage.</li><li><strong>NVIDIA Dynamo</strong> includes KV-aware routing and prefill/decode separation for vLLM and other engines.</li><li><strong>The vLLM Production Stack</strong> includes a KV-cache-aware router, deployable with Helm.</li></ul><p>Kinference’s distinct angle is combining cache-aware routing with <strong>policy, multi-tenancy, and observability</strong>, in the style of a service mesh.</p><h4>Getting more from your self-hosted inference, whatever tool you use</h4><p><strong>1. Keep prefix caching on.</strong> Make sure your vLLM version and settings use prefix caching, and confirm it in vLLM’s metrics.</p><p><strong>2. Design prompts for caching.</strong> Put the <strong>stable parts first</strong>: the system prompt, tool definitions, and shared documents. Put the <strong>changing parts last</strong>: the user’s question and the latest messages. A timestamp or random ID at the start of a prompt can prevent every cache hit.</p><p><strong>3. Measure TTFT, not just throughput.</strong> Track time-to-first-token per replica and per tenant. If it’s high while GPUs look idle, routing is a likely cause.</p><p><strong>4. Watch cache hit rates.</strong> vLLM exposes metrics for KV cache usage and prefix cache hits. Low hit rates on chat or agent workloads are a strong sign that a cache-aware router would help.</p><p><strong>5. Don’t just add GPUs.</strong> Before buying more hardware, try smarter routing. It may unlock capacity you already own.</p><h4>The bigger picture</h4><p>The first wave of AI infrastructure was about <strong>getting models to run.</strong> The current wave is about <strong>running them efficiently</strong>: better routing, better scheduling, and better use of expensive GPUs. With open-weight models becoming strong enough for real work, from small coding models like Flint to trillion-parameter models like Mistral Large 4, inference efficiency is turning into a core engineering skill.</p><h4>Practical recommendation</h4><p>If you run more than one vLLM replica behind a normal Kubernetes Service:</p><ol><li><strong>Check your prefix cache hit rate and TTFT</strong> in vLLM’s metrics.</li><li><strong>Restructure your prompts</strong> so stable content comes first.</li><li><strong>Try a cache-aware router</strong> in a test environment, whether that’s Kinference, the Gateway API Inference Extension, NVIDIA Dynamo, or the vLLM Production Stack.</li><li><strong>Compare TTFT and GPU utilization</strong> before and after, on your real traffic.</li></ol><p>The model and GPUs stay the same. Only the routing changes, and that alone may be the biggest performance improvement available to you this quarter.</p><p><em>Sources: vLLM blog, “Introducing Kinference: An Open Source Inference Control Plane for vLLM and Kubernetes” (November 4, 2026), the Kinference GitHub repository, Buoyant, and coverage from Cloud Native Now, daily.dev, Emergent, and AI Global Wire, plus documentation for NVIDIA Dynamo, the vLLM Production Stack, and GKE Inference Gateway.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cf3ef2962096" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mistral Large 4’s Weights Are Out: What Changed Since the Preview, the License Fine Print, and the…]]></title>
            <link>https://medium.com/@ascendrixtech/mistral-large-4s-weights-are-out-what-changed-since-the-preview-the-license-fine-print-and-the-2616f39134f8?source=rss-de64cddb560a------2</link>
            <guid isPermaLink="false">https://medium.com/p/2616f39134f8</guid>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[llm]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[machine-learning]]></category>
            <dc:creator><![CDATA[Ascendrix Technologies]]></dc:creator>
            <pubDate>Fri, 06 Nov 2026 07:31:01 GMT</pubDate>
            <atom:updated>2026-11-06T07:31:01.636Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*d1lLgSLqdJ69haXlz7Fc4A.png" /></figure><h3>Mistral Large 4’s Weights Are Out: What Changed Since the Preview, the License Fine Print, and the Hardware You’ll Need</h3><p>Three weeks after its public preview, <strong>Mistral Large 4</strong>, nicknamed <strong>“Le Chonk,”</strong> is now an <strong>open-weight model.</strong> On <strong>October 29, 2026</strong>, Mistral published the full weights on <strong>Hugging Face</strong>, making it the <strong>largest open-weight model any US or European lab has released.</strong></p><p>The released version isn’t just the preview with a download button. It’s <strong>noticeably stronger</strong>, it’s <strong>about half the price</strong> through Mistral’s API, and its license has some fine print every business should read.</p><p>Here’s what changed, what you can and can’t do with it, and what it takes to actually run a trillion-parameter model.</p><h4>What was released</h4><ul><li><strong>Model:</strong> mistralai/Mistral-Large-4-1T-A52B on Hugging Face</li><li><strong>Size:</strong> about <strong>1.05 trillion parameters</strong> in a mixture-of-experts design, with roughly <strong>52 billion active per token</strong>, according to the released model’s name and specs. The preview was described with about 49 billion active.</li><li><strong>Context window:</strong> <strong>1 million tokens</strong></li><li><strong>Inputs:</strong> <strong>text and images</strong> (with a vision encoder of about 1.6 billion parameters), output in text</li><li><strong>Languages:</strong> <strong>160+</strong></li><li><strong>Training:</strong> from scratch on <strong>3,800 NVIDIA Grace Blackwell GPUs</strong> in Mistral’s European data centres</li><li><strong>Two official versions:</strong></li><li><strong>FP8:</strong> about <strong>1.06 TB</strong></li><li><strong>NVFP4:</strong> about <strong>610 GB</strong>, a 4-bit format for NVIDIA’s newest Blackwell GPUs</li></ul><h4>What changed since the preview</h4><p><strong>1. Better at agentic coding.</strong> Mistral says <strong>three more weeks of reinforcement learning</strong>, guided by customer feedback, lifted the model’s score on <strong>Terminal-Bench 4.0</strong>, a benchmark for agents completing real tasks in a terminal, from <strong>28.3% to about 41%.</strong> Independent replication is still pending, so treat that number with some caution.</p><p><strong>2. More control over thinking.</strong> Early testers, which Mistral describes as governments and enterprises, wanted <strong>more control over how long the model “thinks”</strong> before answering. Balancing speed, cost, and quality is crucial in production, so this is a practical improvement.</p><p><strong>3. Roughly half the price.</strong> On the day the weights shipped, Mistral <strong>cut its API price roughly in half</strong>, to about <strong>$0.70 per million input tokens and $2.10 per million output tokens</strong>, down from $1.36 and $4.18 during the preview.</p><p><strong>4. A strong open model, not a frontier leader.</strong> Mistral calls Large 4 the <strong>best open model for coding and cyber defence</strong>, and reports top results among open-weight models on <strong>FrontierCode 2.0 and Terminal-Bench 4.0.</strong> But independent coverage notes that the coding lead over <strong>GLM-5.3</strong> is about <strong>one point</strong> on a single index. It’s a strong open model, but it <strong>doesn’t dethrone the leading closed models.</strong></p><h4>The license: read this before you build a business on it</h4><p>Mistral Large 4 uses the new <strong>Mistral Ecosystem Open-Weight License</strong>, described as a <strong>modified MIT license.</strong> In practice:</p><p><strong>You can:</strong></p><ul><li><strong>Download</strong> the weights without approval</li><li><strong>Use it commercially</strong> inside your own products</li><li><strong>Fine-tune</strong> and modify it</li><li><strong>Run it on your own infrastructure</strong>, including on-premises</li></ul><p><strong>You need a separate agreement with Mistral to:</strong></p><ul><li><strong>Offer it as a hosted model service</strong> to third parties, for example selling API access to Large 4 itself</li></ul><p>So a company using Large 4 inside its own app, chatbot, or internal tools is fine. A company planning to become a <strong>Large 4 API provider</strong> needs to talk to Mistral first.</p><p>It’s also <strong>open-weight, not fully open-source.</strong> The trained model is available, but the <strong>training data isn’t</strong>, and the hosting restriction goes beyond a standard MIT license.</p><h4>The memory math: can you run it?</h4><p>Here’s where “free to download” meets reality. A rough estimate of memory needed for the <strong>weights alone:</strong></p><pre>params = 1.05e12          # total parameters<br>fp8_gb = params * 1.0 / 1e9      # 1 byte per parameter<br>nvfp4_gb = params * 0.58 / 1e9   # ~4 bits plus scaling data<br>print(f&quot;FP8 weights:   ~{fp8_gb:,.0f} GB&quot;)<br>print(f&quot;NVFP4 weights: ~{nvfp4_gb:,.0f} GB&quot;)</pre><p>That roughly matches the official checkpoint sizes: about <strong>1.06 TB for FP8</strong> and <strong>610 GB for NVFP4.</strong></p><p>And that’s <strong>just the weights.</strong> Real serving also needs memory for the <strong>KV cache</strong>, which grows with context length and the number of users. Using anywhere near the <strong>1 million-token context</strong> adds a lot more.</p><p>Mistral’s own serving examples use:</p><ul><li><strong>8 GPUs for FP8</strong></li><li><strong>4 to 8 GPUs for NVFP4</strong>, on NVIDIA <strong>B200, B300, GB200, or GB300</strong> Blackwell GPUs</li></ul><p>In other words, Large 4 is a <strong>data-centre model.</strong> It won’t run on a laptop, a gaming PC, or a single GPU server. Even though it’s mixture-of-experts and only about 52 billion parameters are active per token, <strong>all 1 trillion must be stored in GPU memory</strong>, because any expert may be needed for the next token.</p><p>A typical multi-GPU deployment with an inference server like vLLM looks something like this (check the model card for the exact recommended settings):</p><pre>vllm serve mistralai/Mistral-Large-4-1T-A52B \<br>  --tensor-parallel-size 8 \<br>  --tokenizer-mode mistral</pre><h4>If you can’t self-host, the API is the practical option</h4><p>For most teams, the easiest way to use Large 4 is through a hosted service:</p><ul><li><strong>Mistral’s API</strong> (as mistral-large-4), at the new lower price</li><li><strong>OpenRouter</strong></li><li><strong>Microsoft Foundry</strong></li><li><strong>Mistral’s Vibe</strong> coding agent, for some users</li></ul><p>Hugging Face also offered <strong>demo Spaces</strong> with a small free allowance during the first week after release.</p><h4>Who should care about the open weights?</h4><p><strong>Self-hosting makes sense if you:</strong></p><ul><li>Need <strong>data to stay on your own infrastructure</strong>, for example in government, banking, defence, or healthcare</li><li>Want <strong>European data residency</strong> and independence from US cloud providers</li><li>Plan to <strong>fine-tune</strong> a very large model for a specialised domain, such as security or a specific language</li><li>Already have access to <strong>multi-GPU Blackwell servers</strong></li></ul><p><strong>The API is probably better if you:</strong></p><ul><li>Want to <strong>test the model</strong> before committing to hardware</li><li>Have <strong>moderate usage</strong>, where per-token pricing beats owning GPUs</li><li>Don’t have specific data-control requirements</li></ul><h4>The bigger picture</h4><p>The open-weight frontier has grown fast in 2026. Chinese labs have released several trillion-parameter-class open models, including <strong>Meituan’s LongCat-2.0</strong> in June, trained on more than 50,000 domestic Chinese accelerators. Large 4 is Europe’s answer: a trillion-parameter open model, trained in Europe, with <strong>Mistral’s own data centres and a growing NVIDIA partnership</strong> behind it.</p><p>For developers, the trend is clear: <strong>open models keep getting bigger and better</strong>, but running the largest ones is still a serious infrastructure decision. The practical skill is knowing <strong>which model fits which job</strong>, from small local models like Flint for everyday coding to trillion-parameter models like Large 4 for the hardest, most sensitive workloads.</p><h4>Practical recommendation</h4><ol><li><strong>Test it through the API first.</strong> Run 20 to 50 of your real tasks and compare quality, speed, and cost with what you use now, at the new lower price.</li><li><strong>Read the license</strong> if you plan any commercial use, especially anything that looks like offering the model as a service.</li><li><strong>Only consider self-hosting</strong> if you have clear data-control needs and access to multi-GPU Blackwell hardware. Do the memory math, including the KV cache, before buying anything.</li><li><strong>Wait for independent benchmarks</strong> before relying on the Terminal-Bench improvement.</li></ol><p>Mistral Large 4 is a milestone for open AI in Europe. Just remember that “open” means you’re <em>allowed</em> to run it, not that it’s <em>easy</em> to run it.</p><p><em>Sources: Mistral’s October 29, 2026 announcement as reported by The Next Web, Euronews, Fortune and ZDNet; Hugging Face’s “Welcome Le Chonk” blog and model card; and coverage from TUN, Apple Scoop, CellCog, Online Tech Tips, and DEV Community, plus The Decoder and TechRadar on Meituan’s LongCat-2.0.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2616f39134f8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Is Polars 2.0 Actually Faster Than 1.x? What the Benchmarks Show, and How to Test Your Own Workload]]></title>
            <link>https://medium.com/@ascendrixtech/is-polars-2-0-actually-faster-than-1-x-what-the-benchmarks-show-and-how-to-test-your-own-workload-d3f4c21fd737?source=rss-de64cddb560a------2</link>
            <guid isPermaLink="false">https://medium.com/p/d3f4c21fd737</guid>
            <category><![CDATA[polar]]></category>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[performance]]></category>
            <dc:creator><![CDATA[Ascendrix Technologies]]></dc:creator>
            <pubDate>Fri, 06 Nov 2026 04:21:01 GMT</pubDate>
            <atom:updated>2026-11-06T04:21:01.504Z</atom:updated>
            <content:encoded><![CDATA[<p>When Polars 2.0 was released on <strong>October 6, 2026</strong>, the headline numbers were impressive: on TPC-H and TPC-DS-style benchmarks, Polars beat <strong>DuckDB and DataFusion</strong> in all but one configuration.</p><p>But if you already use Polars, that’s not the question you care about. Your question is simpler:</p><p><strong>“If I upgrade from Polars 1.x to 2.0, will my code run faster?”</strong></p><p>The official release post doesn’t answer that directly. Here’s what the available evidence shows, where 2.0 is slower, and how to measure the difference on your own data in about ten minutes.</p><h4>What the official benchmark does, and doesn’t, tell you</h4><p>The Polars team benchmarked 2.0 against <strong>DuckDB 1.5.6, a DuckDB 2.0 alpha, and DataFusion 54.0.0</strong>, using queries derived from TPC-H and TPC-DS on two AWS machines: a 16-vCPU c7a.4xlarge and a 192-vCPU c7a.metal.</p><p>Two findings stand out:</p><ul><li><strong>Default Polars was fastest on all but one benchmark.</strong></li><li><strong>On very large machines with small data, Polars has a constant overhead.</strong> At scale factor 10, moving from 16 to 192 vCPUs made default Polars <strong>1.8x slower on TPC-DS.</strong> Polars limited to 32 threads was competitive or winning everywhere.</li></ul><p>A Polars developer explained the cause on Hacker News: the join creates one partition per thread for each of the T threads, so the work grows with <strong>T squared</strong> on a 192-core machine. The team has diagnosed it and plans a fix.</p><p>What the official post <strong>doesn’t</strong> include is a comparison with <strong>Polars 1.x.</strong> For that, we need independent data.</p><h4>The best direct comparison: 1.44.1 vs 2.0.0</h4><p>Shortly after the release, the developer of <strong>ArrowMetal</strong>, an open-source GPU engine for Polars on Apple Silicon, re-ran their benchmark suite on both versions, using the same code and the same machine:</p><ul><li><strong>Hardware:</strong> Apple M4 Max</li><li><strong>Data:</strong> 50 million rows, in memory</li><li><strong>Queries:</strong> 62 group-by, join, sort, and unique queries</li><li><strong>Method:</strong> best of 5 runs</li></ul><p><strong>The results:</strong></p><ul><li><strong>Overall:</strong> Polars 2.0.0’s time was <strong>0.72x of 1.44.1’s at the median</strong>, roughly <strong>28% faster.</strong></li><li><strong>unique over two integer keys:</strong> <strong>153.1 ms → 38.5 ms</strong>, about <strong>4x faster.</strong></li><li><strong>Sorting 5 million rows:</strong> <strong>32.88 ms → 13.55 ms</strong>, about <strong>2.4x faster.</strong></li><li><strong>The streaming engine</strong>, now the default, was the faster of the two engines in <strong>56 of the 62 queries.</strong></li><li><strong>Sorting 50 million int64 keys:</strong> on Polars 2.0.0, the default streaming collect() took <strong>199.74 ms</strong>, while forcing the old in-memory engine took <strong>410.51 ms.</strong></li></ul><p><strong>But not everything got faster:</strong></p><ul><li><strong>Filter-then-sort</strong> over integer keys: <strong>694 ms → 713 ms</strong>, slightly slower.</li><li><strong>unique over a String and an integer key:</strong> <strong>256 ms → 296 ms</strong>, about 16% slower.</li></ul><p>This matches what the Polars team suggested before release: in September, they said they expected the new streaming engine to be “easily 5x faster” in aggregate for many workloads. The independent results suggest that’s possible on some operations, while the typical improvement is smaller, and a few operations go slightly the other way.</p><h4>Why most workloads get faster</h4><p>Two separate things changed in 2.0:</p><p><strong>1. The default engine changed.</strong> In 1.x, LazyFrame.collect() used the <strong>in-memory engine.</strong> In 2.0, it uses the <strong>streaming engine</strong>, which processes data in batches across cores and uses less memory.</p><p><strong>2. The engines themselves improved.</strong> Group-bys, joins, and sorts were optimized, and the query optimizer gained join reordering, better elimination of repeated sub-queries, and dynamic predicates.</p><p>This distinction matters when benchmarking. Polars 1.x already had a streaming engine; you just had to ask for it with collect(engine=&quot;streaming&quot;). Comparing default 1.x with default 2.0 mixes both effects together. Comparing 1.x streaming with 2.0 streaming shows how much the engine itself improved.</p><h4>Where 2.0 may be slower</h4><p>Based on the available data, watch these patterns:</p><ul><li><strong>Small data on machines with many cores.</strong> The constant overhead per thread can outweigh the benefit of parallelism. If you run small queries on large servers, test limiting the thread count.</li><li><strong>Some sort-heavy queries</strong>, especially filter-then-sort.</li><li><strong>Some operations on String keys</strong>, such as unique with a String column.</li><li><strong>Queries where you now need </strong><strong>maintain_order=True</strong> to keep the old row order. Preserving order can cost some speed.</li></ul><h4>How to benchmark your own workload</h4><p>Benchmarks on someone else’s machine are a starting point, not an answer. The good news: with <strong>uv</strong>, you can run the same script on both versions without changing your environment.</p><p>Save this as bench.py:</p><pre>import time<br>import numpy as np<br>import polars as pl<br>N = 5_000_000  # increase to 50_000_000 if you have enough RAM<br>rng = np.random.default_rng(42)<br>pl.DataFrame({<br>    &quot;order_id&quot;: np.arange(N),<br>    &quot;customer_id&quot;: rng.integers(0, 200_000, N),<br>    &quot;region&quot;: rng.choice([&quot;north&quot;, &quot;south&quot;, &quot;east&quot;, &quot;west&quot;], N),<br>    &quot;amount&quot;: rng.random(N) * 1000,<br>}).write_parquet(&quot;orders.parquet&quot;)<br>pl.DataFrame({<br>    &quot;customer_id&quot;: np.arange(200_000),<br>    &quot;segment&quot;: rng.choice([&quot;retail&quot;, &quot;wholesale&quot;, &quot;online&quot;], 200_000),<br>}).write_parquet(&quot;customers.parquet&quot;)<br>orders = pl.scan_parquet(&quot;orders.parquet&quot;)<br>customers = pl.scan_parquet(&quot;customers.parquet&quot;)<br>queries = {<br>    &quot;group_by_sum&quot;: orders.group_by(&quot;region&quot;).agg(pl.col(&quot;amount&quot;).sum()),<br>    &quot;join_group_by&quot;: orders.join(customers, on=&quot;customer_id&quot;).group_by(&quot;segment&quot;).agg(pl.col(&quot;amount&quot;).mean()),<br>    &quot;sort&quot;: orders.sort(&quot;amount&quot;),<br>    &quot;unique_two_keys&quot;: orders.select(&quot;customer_id&quot;, &quot;region&quot;).unique(),<br>    &quot;filter_sort&quot;: orders.filter(pl.col(&quot;amount&quot;) &gt; 500).sort(&quot;customer_id&quot;, &quot;amount&quot;),<br>}<br>def best_of(lf, runs=5):<br>    times = []<br>    for _ in range(runs):<br>        start = time.perf_counter()<br>        lf.collect()<br>        times.append(time.perf_counter() - start)<br>    return min(times) * 1000<br>print(f&quot;Polars {pl.__version__}, {N:,} rows&quot;)<br>for name, lf in queries.items():<br>    print(f&quot;{name:16s} {best_of(lf):8.1f} ms&quot;)</pre><p>Then run it on each version:</p><pre>uv run --with &quot;polars==1.44.1&quot; --with numpy python bench.py<br>uv run --with &quot;polars==2.0.0&quot; --with numpy python bench.py</pre><p>The script uses only APIs that work in both versions, so the comparison is fair.</p><p><strong>Better still, test your real pipelines.</strong> Replace the sample queries with your own: the slowest step in your ETL job, your heaviest notebook query, or a typical report. That’s the only benchmark that truly matters.</p><h4>Tips for reliable results</h4><ul><li><strong>Run on the hardware you use in production.</strong> A laptop and a 64-core server can give very different results.</li><li><strong>Use realistic data sizes.</strong> Small data and large data behave differently, especially in 2.0.</li><li><strong>Take the best of several runs</strong>, and close other heavy applications.</li><li><strong>Compare engines separately:</strong> in Polars 1.x, also try lf.collect(engine=&quot;streaming&quot;) to see how much of the gain comes from the new default versus engine improvements.</li><li><strong>Watch memory, not just time.</strong> The streaming engine’s lower memory use, and its new ability to spill to disk, can matter more than speed for large datasets.</li><li><strong>On large servers with small data, test thread limits.</strong> Polars reads the POLARS_MAX_THREADS environment variable at startup:</li></ul><pre>POLARS_MAX_THREADS=32 python bench.py</pre><h4>Should you upgrade for performance?</h4><p><strong>Probably yes, if you:</strong></p><ul><li>Use <strong>LazyFrames</strong> with large group-bys, joins, or unique operations.</li><li>Hit <strong>memory limits</strong> with Polars 1.x.</li><li>Run on <strong>typical laptops or servers</strong> with a moderate number of cores.</li></ul><p><strong>Test carefully first if you:</strong></p><ul><li>Run <strong>small queries on machines with many cores.</strong></li><li>Have pipelines dominated by <strong>sorts or String-key operations.</strong></li><li>Rely on <strong>row order</strong> after joins or group-bys. Remember that 2.0 no longer guarantees order unless you ask for it.</li></ul><p><strong>And keep watching:</strong> Polars <strong>2.1.0</strong> is already available on PyPI, and the team has said that improving scaling on high-core machines is a priority. Some of today’s weak spots may already be improving.</p><h4>Practical recommendation</h4><p>Don’t upgrade based on anyone’s benchmark, including this article’s. Spend ten minutes running the script above with <strong>your real queries</strong> on both versions. If 2.0 is faster and your results are identical, which you can check with df_old.equals(df_new.sort(...)) after sorting both, you have a clear case to upgrade. If a few queries are slower, you’ll know exactly where to look.</p><p><em>Sources: Polars, “Release of Polars 2.0” (pola.rs) and its benchmark appendix, ArrowMetal’s Polars 1.44.1 vs 2.0.0 benchmark on DEV Community (October 8, 2026), The New Stack’s coverage of the Polars 2.0 pre-release, a Hacker News discussion with Polars developers, and Andy G.’s “Polars 2.0 Is Out” on Medium.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d3f4c21fd737" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Kubernetes Before KubeCon 2026: 1.34]]></title>
            <link>https://medium.com/@ascendrixtech/kubernetes-before-kubecon-2026-1-34-3e2c1a4c0fe4?source=rss-de64cddb560a------2</link>
            <guid isPermaLink="false">https://medium.com/p/3e2c1a4c0fe4</guid>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[ai-infrastructure]]></category>
            <category><![CDATA[observability]]></category>
            <category><![CDATA[cloud-native]]></category>
            <category><![CDATA[kubernetes]]></category>
            <dc:creator><![CDATA[Ascendrix Technologies]]></dc:creator>
            <pubDate>Sat, 31 Oct 2026 10:31:01 GMT</pubDate>
            <atom:updated>2026-10-31T10:31:01.487Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wx6qGMkX132osX6yzVahEw.png" /></figure><h3>Kubernetes Before KubeCon 2026: 1.34 Hits End of Life, a New Standard for AI Workloads, and What to Do This Month</h3><p>KubeCon + CloudNativeCon North America takes place <strong>November 9–12 in Salt Lake City</strong>, and the Kubernetes world has been busy in the run-up. In the last week alone:</p><ul><li><strong>Kubernetes 1.34 reached end of life</strong> on <strong>October 27, 2026.</strong></li><li>The community launched a <strong>Workload Conformance Working Group</strong>, aimed at the growing variety of workloads, especially AI.</li><li><strong>OpenTelemetry’s Transformation Language (OTTL) reached v1.</strong></li><li><strong>Kubernetes 1.38</strong> moved closer to its December release.</li></ul><p>Here’s what each change means and what platform teams should do before the conference.</p><h4>1. Kubernetes 1.34 is end of life: check your clusters</h4><p>As of <strong>October 27, 2026</strong>, <strong>Kubernetes 1.34</strong> no longer receives patches. Its final release is <strong>1.34.12</strong>, from September 15. That leaves <strong>three supported minor versions</strong>, with <strong>1.37</strong>, currently at <strong>1.37.1</strong>, supported until <strong>October 28, 2027.</strong></p><p>Kubernetes supports each minor version for about <strong>14 months</strong>: around 12 months of standard support plus 2 months of maintenance. That cadence means <strong>every team needs a regular upgrade rhythm</strong>, not occasional big-bang upgrades.</p><p>Check your control plane and node versions:</p><pre>kubectl version<br>kubectl get nodes -o wide</pre><p>The VERSION column in the node list shows each node’s kubelet version.</p><p>If anything shows <strong>1.34 or earlier</strong>:</p><ul><li><strong>Self-managed clusters:</strong> plan the upgrade now. Kubernetes only supports upgrading <strong>one minor version at a time</strong>, so moving from 1.34 to 1.37 means three upgrades.</li><li><strong>Managed services (EKS, GKE, AKS):</strong> check your provider’s support policy. Some offer extended support for older versions, often at extra cost, but that only postpones the work.</li><li><strong>Before upgrading:</strong> review the deprecation guides for every version you’ll pass through, and check that your add-ons, ingress controllers, and operators support the target version.</li></ul><p><strong>Remember the cgroup v2 requirement.</strong> Since Kubernetes 1.35, the kubelet refuses to start on cgroup v1 nodes by default. If you’re upgrading from 1.34, check that your nodes use cgroup v2 first:</p><pre>stat -fc %T /sys/fs/cgroup/</pre><p>The output should be cgroup2fs.</p><h4>2. A new Workload Conformance Working Group</h4><p>Kubernetes already has a well-known <strong>conformance program</strong> for clusters, so you can trust that a certified cluster behaves like Kubernetes should. There’s also a <strong>Kubernetes AI Conformance</strong> program for checking whether a cluster can run AI and machine learning workloads.</p><p>What’s been missing is a standard for <strong>workloads themselves.</strong> On <strong>October 27, 2026</strong>, the community announced the <strong>Workload Conformance Working Group</strong> to fill that gap. In the announcement, Broadcom’s Nabarun Pal explained that the group is writing a shared standard for how workloads behave at runtime on Kubernetes.</p><p><strong>Why this matters:</strong> today, there’s no common way to say “this workload behaves well on Kubernetes.” Teams discover problems through trial and error, such as how an application handles <strong>node drains</strong>, whether it has the <strong>permissions</strong> it expects, or how it reacts to being rescheduled. That’s especially painful for AI workloads, which are often long-running, GPU-heavy, and sensitive to interruption.</p><p>A shared workload standard could eventually help:</p><ul><li><strong>Platform teams</strong> set clear expectations for applications running on their clusters.</li><li><strong>Software vendors</strong> prove their products behave correctly on Kubernetes.</li><li><strong>AI teams</strong> run training and inference jobs more reliably across different clusters and clouds.</li></ul><p>The group is just starting and <strong>is asking for community input.</strong> You can read the working group proposal, join the <strong>#wg-workload-conformance</strong> Slack channel, or attend its biweekly meetings.</p><h4>3. Kubernetes images get signed verification summaries</h4><p>The Kubernetes project has <strong>signed its container images since version 1.24.</strong> On <strong>October 28, 2026</strong>, the contributor blog described the next step: <strong>SLSA verification summaries</strong> for images published to <strong>registry.k8s.io.</strong></p><p>A signature proves an image came from the Kubernetes project and hasn’t been changed. A verification summary goes further, recording <strong>how the image was checked</strong> against supply chain requirements, in a single signed document.</p><p>You can already verify the signatures of official Kubernetes images with <strong>cosign.</strong> Following the Kubernetes documentation, verification looks like this:</p><pre>cosign verify registry.k8s.io/kube-apiserver-amd64:v1.37.1 \<br>  --certificate-identity krel-trust@k8s-releng-prod.iam.gserviceaccount.com \<br>  --certificate-oidc-issuer https://accounts.google.com</pre><p>With supply chain attacks hitting package registries this year, from npm to PyPI, verifying the images that run your control plane is a good habit.</p><h4>4. OpenTelemetry’s Transformation Language reaches v1</h4><p>Observability matters more than ever on Kubernetes, and this week <strong>OpenTelemetry’s Transformation Language (OTTL)</strong> reached <strong>v1.</strong> OTTL lets you <strong>modify, filter, and enrich telemetry data</strong> directly in the OpenTelemetry Collector, before it reaches your monitoring backend. It’s now <strong>stable for traces, metrics, and logs</strong>, and included in <strong>Collector Contrib v0.164.0 and later.</strong></p><p>The project also made a long-term promise: <strong>OTTL syntax and standard functions will stay backward compatible.</strong></p><p>A common use is removing sensitive data before it leaves your cluster. For example, in a Collector configuration:</p><pre>processors:<br>  transform:<br>    error_mode: ignore<br>    trace_statements:<br>      - delete_key(span.attributes, &quot;user.email&quot;)<br>      - set(span.attributes[&quot;deployment.environment&quot;], &quot;production&quot;)</pre><p>hat removes user email addresses from traces and tags them with an environment, all inside your own infrastructure.</p><h4>5. Kubernetes 1.38 is on the way</h4><p>Kubernetes <strong>1.38</strong> is in development, with <strong>code freeze around November 16–17</strong> and the <strong>release blog planned for December 16, 2026.</strong> A <strong>deprecations and removals blog</strong> is scheduled for <strong>November 23.</strong> Watch for it, since it’s the best early warning of anything that might break your clusters.</p><h4>What to expect at KubeCon</h4><p>Based on the topics leading up to the conference, expect a strong focus on:</p><ul><li><strong>AI workloads on Kubernetes:</strong> GPU sharing, inference at scale, and scheduling for AI jobs. For example, AWS and NVIDIA are presenting on placing multiple models on shared GPUs.</li><li><strong>AI agents and security:</strong> sandboxing agents, managing their credentials, and limiting what they can do.</li><li><strong>Observability:</strong> OpenTelemetry and Prometheus continuing to converge.</li><li><strong>Supply chain security:</strong> signing, verification, and provenance for images and dependencies.</li></ul><h4>Practical checklist for platform teams</h4><p>This week:</p><ol><li><strong>Run </strong><strong>kubectl version and </strong><strong>kubectl get nodes -o wide</strong> on every cluster, and plan upgrades for anything on 1.34 or older.</li><li><strong>Confirm all nodes use cgroup v2</strong> before upgrading past 1.34.</li><li><strong>Try </strong><strong>cosign verify</strong> on the Kubernetes images you run.</li><li><strong>Upgrade your OpenTelemetry Collector</strong> to a version with OTTL v1, and use it to remove sensitive data from telemetry.</li><li><strong>Bookmark the 1.38 deprecations blog</strong> for November 23.</li><li><strong>If you run AI workloads</strong>, consider sharing your experiences with the new Workload Conformance Working Group. Real-world problems are exactly what the group needs to hear.</li></ol><p>Kubernetes keeps moving quickly. Teams that upgrade steadily, verify what they run, and take part in the community stay ahead of problems instead of reacting to them.</p><p><em>Sources: the Kubernetes blog and contributor blog (October 27–28, 2026), the Kubernetes releases page, the Kubernetes v1.38 release schedule, The New Stack’s “Road to KubeCon” coverage, the OpenTelemetry blog, and DEV Community.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3e2c1a4c0fe4" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Python’s Emergency Security Release: What the eMudhra Certificate Compromise Means for Your Code]]></title>
            <link>https://medium.com/@ascendrixtech/pythons-emergency-security-release-what-the-emudhra-certificate-compromise-means-for-your-code-9977e4a0cfd2?source=rss-de64cddb560a------2</link>
            <guid isPermaLink="false">https://medium.com/p/9977e4a0cfd2</guid>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[Ascendrix Technologies]]></dc:creator>
            <pubDate>Sat, 31 Oct 2026 07:31:01 GMT</pubDate>
            <atom:updated>2026-10-31T07:31:01.536Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aexuoGOwjulj6e1gcUcBvw.png" /></figure><p>On <strong>Sunday, October 26, 2026</strong>, the Python team did something it rarely does: it pushed out <strong>expedited security releases for five Python versions at once</strong>: <strong>3.15.2, 3.14.10, 3.13.18, 3.12.16, and 3.11.18.</strong></p><p>The reason wasn’t a bug in Python’s code. It was a problem in the system of trust the whole internet relies on: the <strong>private keys of eight intermediate certificates</strong> from the certificate authority <strong>eMudhra</strong>, under its <strong>emSign</strong> brand, had been <strong>compromised.</strong></p><p>Here’s what happened, why it matters for every Python developer, and exactly what to update.</p><h4>What happened</h4><p>Every HTTPS connection relies on <strong>certificate authorities (CAs).</strong> When your code connects to a website or API, it checks that the server’s certificate was issued by a trusted CA, usually through an <strong>intermediate certificate</strong> that links back to a trusted root.</p><p>On <strong>October 20, 2026</strong>, eMudhra disclosed that the <strong>private keys of eight of its emSign intermediate CA certificates had leaked.</strong></p><p>That’s serious. With those keys, an attacker could <strong>issue certificates that look completely valid</strong> for almost any website, then use them to <strong>impersonate sites and intercept encrypted traffic</strong>, for example on a compromised network.</p><p>The issue is tracked as <strong>CVE-2026–115557.</strong></p><h4>How Python responded</h4><p>The new releases <strong>hardcode a denylist</strong> of the eight compromised intermediate certificate keys into Python’s <strong>ssl module.</strong> Even if a certificate chain would otherwise look valid, Python now <strong>rejects</strong> anything signed with those keys.</p><p>An important detail: this makes <strong>normal pip use safe, including upgrading pip itself</strong>, even before you’ve updated pip. That matters because pip is how most people install the very fixes they need.</p><p>The other languages and tools responded too. Go released 1.27.3 with a fix that distrusts a handful of compromised intermediate certificates, and the wider ecosystem has been shipping updates since the disclosure.</p><h4>Also fixed in these releases</h4><p>The releases include several other security fixes:</p><ul><li><strong>CVE-2026–114583:</strong> tarfile’s tar_filter now <strong>rejects links that replace the destination</strong>, closing a path-traversal-style risk when extracting tar archives.</li><li><strong>http.cookiejar</strong> now <strong>rejects cookies with a negative version.</strong></li><li><strong>Python 3.13.18, 3.12.16, and 3.11.18</strong> also get an update to <strong>Expat 2.9.0</strong>, fixing <strong>CVE-2026–77214 and CVE-2026–102633</strong> in the bundled XML parser.</li><li><strong>Python 3.13.18 and 3.12.16</strong> also get a fix for a <strong>race condition in </strong><strong>tempfile.TemporaryDirectory cleanup</strong>, where an attacker could swap a subdirectory for a symbolic link during deletion and affect files outside the directory.</li></ul><p>This is the <strong>second round</strong> of expedited releases this month, following <strong>3.15.1 and 3.14.9</strong> on October 21.</p><h4>Step 1: Update Python</h4><p>Check your version:</p><pre>python3 --version</pre><p>You want <strong>3.15.2, 3.14.10, 3.13.18, 3.12.16, or 3.11.18</strong>, depending on your version line.</p><p>Note: <strong>binary installers</strong> are only available for <strong>3.15.2 and 3.14.10.</strong> The other three are <strong>source-only</strong> releases, so on those versions you’ll typically get the fix through your <strong>operating system’s packages</strong>, your <strong>Docker base image</strong>, or tools like <strong>uv</strong> and <strong>pyenv</strong> once they publish updated builds.</p><p><strong>Docker:</strong> update your base images, then rebuild:</p><pre>FROM python:3.14.10-slim</pre><p><strong>uv:</strong> update uv itself, then install the latest patch of your Python version:</p><pre>uv self update<br>uv python install 3.14</pre><p><strong>Hosting platforms</strong> are updating too. Heroku’s Python buildpack, for example, already points each version alias to the new patch releases. Redeploy to pick them up.</p><h4>Step 2: Update pip</h4><p>Even with the Python fix in place, update pip to <strong>26.2.2 or newer.</strong> Older pip versions still trust the compromised certificates:</p><pre>python3 -m pip install --upgrade &quot;pip&gt;=26.2.2&quot;</pre><p>Do this in <strong>every virtual environment</strong> and <strong>every Docker image</strong>, not just your system Python.</p><h4>Step 3: Update certifi and HTTP libraries</h4><p>Many Python libraries, including requests, use the <strong>certifi</strong> package for trusted certificates rather than the operating system’s store. Update it and check its release notes:</p><pre>python3 -m pip install --upgrade certifi requests urllib3</pre><h4>Step 4: Check whether your app depends on emSign certificates</h4><p>There’s a flip side to distrusting certificates: <strong>any legitimate service whose certificate chains through one of the distrusted intermediates will now fail TLS verification.</strong> Since eMudhra is a widely used CA in India, teams calling Indian government portals, banking APIs, or other services that use emSign certificates should check their integrations.</p><p>To see who issued a server’s certificate:</p><pre>openssl s_client -connect api.example.com:443 -showcerts &lt;/dev/null 2&gt;/dev/null | openssl x509 -noout -issuer</pre><p>If a service you depend on uses an affected certificate, connections may start failing after you update. <strong>Don’t work around it by disabling certificate verification.</strong> Contact the service provider. They’ll need to reissue certificates from an unaffected chain.</p><h4>Step 5: Use safe archive extraction</h4><p>The tarfile fix is a good reminder to always use <strong>extraction filters</strong> when handling archives from untrusted sources:</p><pre>import tarfile<br>with tarfile.open(&quot;upload.tar.gz&quot;) as tar:<br>    tar.extractall(path=&quot;extracted/&quot;, filter=&quot;data&quot;)</pre><p>The &quot;data&quot; filter blocks dangerous archive contents, such as absolute paths, links outside the destination, and device files.</p><h4>What about Python 3.10?</h4><p><strong>Python 3.10 reached end of life in October 2026</strong> and isn’t part of these releases. If you still run Python 3.10, you won’t receive this fix or future ones. Upgrading to at least <strong>Python 3.12</strong>, and ideally <strong>3.14 or 3.15</strong>, should be a priority.</p><h4>Other Python news this week</h4><ul><li><strong>Django 6.1 now supports Python 3.15.</strong></li><li>Python’s <strong>experimental JIT compiler may be removed</strong> from CPython’s main branch early in the <strong>3.16</strong> development cycle, after <strong>PEP 836</strong> was withdrawn. If you were experimenting with the JIT, keep an eye on that discussion.</li></ul><h4>Lessons for every developer</h4><p><strong>1. Trust is part of your supply chain.</strong> You can write perfect code and still be exposed because a certificate authority somewhere had a problem. Fast patching is the only defence.</p><p><strong>2. Update the whole stack.</strong> Python, pip, certifi, base images, and hosting platforms each have their own copy of “what to trust.” Updating one isn’t enough.</p><p><strong>3. Never disable certificate verification.</strong> When TLS errors appear after a security update, they often mean the update is <strong>working.</strong> Fix the certificate, not the check.</p><p><strong>4. Automate base image updates.</strong> Tools like Dependabot and Renovate can update Docker base images and Python versions automatically, so emergency fixes reach production in hours instead of weeks.</p><h4>Practical recommendation</h4><p>Today:</p><ol><li>Update to <strong>Python 3.15.2, 3.14.10, 3.13.18, 3.12.16, or 3.11.18.</strong></li><li>Upgrade <strong>pip to 26.2.2+</strong> in every environment and image.</li><li>Update <strong>certifi, requests, and urllib3.</strong></li><li><strong>Rebuild and redeploy</strong> your Docker images and services.</li><li>Check whether any <strong>integrations use emSign certificates</strong>, especially if you work with Indian services.</li></ol><p>This is one of the rare security events that affects almost every Python project at once. Fortunately, the fix is straightforward: update, rebuild, redeploy.</p><p><em>Sources: Python.org release announcements, heise online, daily.dev, Linux Compatible, Warp2Search, Heroku’s Python buildpack v359 release notes, and the Django News newsletter, Issue 361 (October 26–30, 2026).</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9977e4a0cfd2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Apache Kafka 4.4]]></title>
            <link>https://medium.com/@ascendrixtech/apache-kafka-4-4-8193f550f496?source=rss-de64cddb560a------2</link>
            <guid isPermaLink="false">https://medium.com/p/8193f550f496</guid>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[apache-kafka]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[big-data]]></category>
            <category><![CDATA[event-streaming]]></category>
            <dc:creator><![CDATA[Ascendrix Technologies]]></dc:creator>
            <pubDate>Sat, 31 Oct 2026 04:28:44 GMT</pubDate>
            <atom:updated>2026-10-31T04:28:44.584Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wglUq3a8OVtDVyjxeauhwg.png" /></figure><h3>Apache Kafka 4.4 Is Out: Dead-Letter Queues for Share Groups, Transactional State Stores, and an Upgrade Gotcha to Know</h3><p>Apache Kafka keeps evolving fast. On <strong>October 22, 2026</strong>, the project released <strong>Kafka 4.4.0</strong>, with <strong>25 Kafka Improvement Proposals (KIPs)</strong> and <strong>963 commits</strong> since 4.3.0. The very next day came <strong>Kafka 4.3.2</strong>, a bug-fix release with an important data-safety fix for anyone using tiered storage.</p><p>Kafka 4.4 contains features developers have wanted for years, along with one storage change that can catch you out during upgrades. Here’s what matters most.</p><h4>First: if you use tiered storage, look at 4.3.2</h4><p>Before the new features, a safety note. <strong>Kafka 4.3.2</strong>, released <strong>October 23</strong>, fixes around <strong>60 issues</strong>, including <strong>two potential data loss issues in tiered storage</strong>: one in <strong>size-based retention</strong> and one in <strong>time index truncation.</strong></p><p>If you run Kafka 4.3.x with tiered storage enabled, plan to upgrade to 4.3.2 (or 4.4.0) soon, even if you’re not interested in new features.</p><h4>1. Dead-letter queues for share groups</h4><p>Kafka 4.x introduced <strong>share groups</strong>, often called <strong>“Queues for Kafka.”</strong> Unlike classic consumer groups, where each partition belongs to one consumer, share groups let <strong>many consumers work through the same partition cooperatively</strong>, with each record acknowledged individually. That makes Kafka work much more like a traditional job queue.</p><p>Every queue system eventually needs an answer to one question: <strong>what happens to messages that keep failing?</strong></p><p>Kafka 4.4 adds <strong>dead-letter queues (DLQs) for share groups</strong> (KIP-1191). Records become eligible for the DLQ when they:</p><ul><li>Are <strong>released more times than the maximum delivery count</strong>, for example after repeated processing failures, or</li><li>Are <strong>explicitly rejected</strong> by the share consumer.</li></ul><p>The feature requires the <strong>share.version feature to be upgraded to 2</strong>, and it’s configured <strong>dynamically</strong> through settings including:</p><ul><li>errors.deadletterqueue.topic.name</li><li>errors.deadletterqueue.auto.create.topics.enable</li><li>errors.deadletterqueue.copy.record.enable</li></ul><p>In practice, setup might look like this (check the Kafka 4.4 documentation for exact syntax in your environment):</p><pre># Enable the newer share group feature level<br>bin/kafka-features.sh --bootstrap-server localhost:9092 \<br>  upgrade --feature share.version=2<br># Send poison messages for a share group to a DLQ topic<br>bin/kafka-configs.sh --bootstrap-server localhost:9092 \<br>  --alter --entity-type groups --entity-name invoice-workers \<br>  --add-config errors.deadletterqueue.topic.name=invoice-workers-dlq</pre><p><strong>Why it matters:</strong> without a DLQ, a single bad message can be retried endlessly, blocking work or forcing you to build custom error handling. With a DLQ, failing messages are moved aside automatically, so the rest of the queue keeps flowing and someone can inspect the failures later.</p><h4>2. Transactional state stores for Kafka Streams</h4><p>This is one of the most anticipated changes in Kafka Streams, first proposed years ago as <strong>KIP-892.</strong></p><p>Before 4.4, when a Kafka Streams app using <strong>exactly-once processing</strong> hit an error, its local state stores were often <strong>wiped and rebuilt from scratch.</strong> For apps with large state, rebuilding could take a very long time.</p><p>With <strong>transactional state stores</strong>, enabled with the new setting enable.transactional.statestores, <strong>state stores are no longer wiped and rebuilt on error.</strong> Only writes made <strong>since the last successful commit</strong> are lost and replayed.</p><pre>processing.guarantee=exactly_once_v2<br>enable.transactional.statestores=true</pre><p>Two related settings help you tune it:</p><ul><li>statestore.uncommitted.max.bytes limits how much uncommitted data is buffered.</li><li>default.interactive.query.isolation.level controls whether interactive queries see uncommitted data.</li></ul><p>The feature is <strong>off by default</strong>, so test it with your own workloads first. For stateful Streams apps, faster recovery can mean minutes instead of hours after a failure.</p><h4>3. Better resilience to DNS problems</h4><p>In cloud and Kubernetes environments, DNS isn’t always available exactly when an application starts. Kafka 4.4 adds <strong>bootstrap.resolve.timeout.ms</strong> (KIP-909) for clients:</p><ul><li>The default, <strong>0</strong>, keeps the old behaviour: DNS resolution happens synchronously when the client is created.</li><li>A <strong>positive value</strong> turns on <strong>asynchronous bootstrap resolution</strong>: the client constructor returns immediately, and resolution failures show up later as a BootstrapResolutionException.</li></ul><pre>bootstrap.servers=kafka.internal.example:9092<br>bootstrap.resolve.timeout.ms=30000</pre><p>he project marks this as an <strong>evolving feature</strong> that may change in a minor release, and <strong>Kafka Streams and Kafka Connect don’t support it yet.</strong></p><h4>4. Lower tiered storage costs with delayed upload</h4><p><strong>Tiered storage</strong> moves older Kafka data to cheaper object storage like S3. Kafka 4.4 adds remote.copy.lag.bytes and remote.copy.lag.ms (KIP-1241), which let you <strong>delay uploading</strong> data to remote storage. That reduces how much data is stored in both places at once, which can lower storage costs.</p><h4>5. Clearer control over Kafka Connect internal topics</h4><p>Kafka Connect normally creates its internal topics (for offsets, configs, and status) automatically. In locked-down environments, that’s not always allowed. Kafka 4.4 adds internal.topics.automatic.creation.enable (default true). When set to false, <strong>Connect fails at startup if any internal topics are missing</strong>, and a new connect-internal-topics.sh tool helps create them manually.</p><h4>6. Better operations tooling</h4><ul><li><strong>kafka-cluster.sh api-versions</strong> shows the API versions supported by brokers or controllers. It replaces kafka-broker-api-versions.sh, which is deprecated:</li></ul><pre>bin/kafka-cluster.sh api-versions --bootstrap-server localhost:9092</pre><ul><li><strong>Controllers can now be unregistered</strong> from cluster metadata, with new commands and an Admin API (KIP-1312).</li><li><strong>More Linux I/O metrics</strong> are exposed through JMX, making it easier to spot page-cache problems and write amplification.</li><li><strong>Clients detect misrouted connections</strong> by including cluster and node information when connecting.</li><li><strong>Benchmarking is more realistic:</strong> kafka-producer-perf-test.sh can now control how record keys are distributed.</li></ul><h4>The upgrade gotcha: storage formatting</h4><p>This is the change most likely to surprise operators. Under <strong>KIP-1170</strong>, storage directories formatted with the kafka-storage tool are <strong>no longer forward-compatible.</strong> A broker must be <strong>the same version as, or newer than</strong>, the kafka-storage tool that formatted its directory, <strong>regardless of the </strong><strong>--release-version you chose.</strong></p><p>In practice:</p><ul><li>Don’t format storage with a <strong>newer</strong> Kafka tool than the brokers that will use it.</li><li>Keep your provisioning scripts, container images, and brokers on <strong>matching versions.</strong></li><li>Be extra careful in automated setups, where a tooling image may be updated separately from the broker image.</li></ul><h4>Deprecations to note</h4><ul><li><strong>broker.id</strong> is deprecated (KIP-1232).</li><li><strong>ClientQuotaCallback#updateClusterMetadata</strong> is deprecated and will be <strong>removed in Kafka 5.0.</strong></li><li>Remaining <strong>Yammer-based group coordinator metrics</strong> are deprecated in favour of Kafka Metrics equivalents. Update dashboards that depend on them.</li><li><strong>kafka-broker-api-versions.sh</strong> will be removed in the next major release.</li></ul><h4>A sign of the times</h4><p>The release announcement thanks <strong>151 contributors, “and 8 AIs.”</strong> It’s a small detail, but it reflects how AI tools are becoming part of how even major open-source infrastructure projects are built.</p><h4>Which Kafka versions are supported?</h4><p>Kafka aims for <strong>three releases a year.</strong> If you’re on an older version, check the support timeline and plan upgrades accordingly. Upgrading regularly means each step stays smaller and safer.</p><h4>Practical recommendation</h4><ol><li><strong>Using tiered storage on 4.3.x?</strong> Upgrade to <strong>4.3.2</strong> soon for the data loss fixes.</li><li><strong>Planning to move to 4.4?</strong> Read the <strong>“Upgrading to 4.4”</strong> notes first, and check that storage formatting tools and brokers will use matching versions.</li><li><strong>Running work queues on share groups?</strong> Try the new <strong>dead-letter queues</strong> in a test environment.</li><li><strong>Running stateful Kafka Streams apps?</strong> Test <strong>transactional state stores</strong> and measure how much faster your app recovers from failures.</li><li><strong>Update dashboards and scripts</strong> that use deprecated metrics or tools.</li></ol><p>Kafka 4.4 isn’t a flashy release, but it makes Kafka a more practical <strong>queue</strong>, a more resilient <strong>stream processor</strong>, and a cheaper <strong>long-term store</strong>, three things many data teams care about every day.</p><p><em>Sources: Apache Kafka 4.4.0 and 4.3.2 release announcements (October 22–23, 2026), Apache Kafka downloads page, and endoflife.date’s Apache Kafka support timeline.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8193f550f496" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Go’s October Security Releases: Why Upgrading Go Isn’t Enough Until You Rebuild]]></title>
            <link>https://medium.com/@ascendrixtech/gos-october-security-releases-why-upgrading-go-isn-t-enough-until-you-rebuild-971e18a54c14?source=rss-de64cddb560a------2</link>
            <guid isPermaLink="false">https://medium.com/p/971e18a54c14</guid>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[go]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[golang]]></category>
            <dc:creator><![CDATA[Ascendrix Technologies]]></dc:creator>
            <pubDate>Fri, 30 Oct 2026 06:31:01 GMT</pubDate>
            <atom:updated>2026-10-30T06:31:01.728Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*djBvdFhLvTWy1wY3PtAVlw.png" /></figure><p>If you run Go services in production, October brought two security releases worth acting on:</p><ul><li><strong>Go 1.27.2 and 1.26.9</strong>, released <strong>October 8, 2026</strong>, with security fixes to the <strong>go command</strong> and the <strong>crypto/tls, html/template, net/http, net/textproto, and os</strong> packages.</li><li><strong>Go 1.27.3</strong>, released <strong>October 19, 2026</strong>, with a security fix to <strong>crypto/x509</strong> that <strong>distrusts a handful of compromised intermediate certificates.</strong></li></ul><p>Most of the fixes target <strong>HTTP/2 and HTTP/1 handling in </strong><strong>net/http</strong>, the code that powers most Go web servers, APIs, and proxies.</p><p>But there’s an important detail that’s easy to miss in Go: <strong>installing a new Go version doesn’t fix anything already running.</strong> Here’s what was fixed, why rebuilding matters, and how to check your services.</p><h4>What was fixed</h4><p>The October 8 releases address a long list of issues, including:</p><p><strong>HTTP/2 (server and client):</strong></p><ul><li><strong>Memory exhaustion from Trailer headers</strong> on HTTP/2 servers</li><li><strong>Server crash from a race condition in the HPACK header encoder</strong></li><li><strong>Excessive CPU use</strong> from repeated changes to the initial window size</li><li><strong>Double flow-control refunds</strong> on HTTP/2 server streams</li><li>The HTTP/2 transport <strong>accepting malformed framing headers</strong></li></ul><p><strong>HTTP/1:</strong></p><ul><li><strong>Connection desynchronization</strong> on the client after a rejected CONNECT request</li><li><strong>Connection desynchronization</strong> on the server after a successful CONNECT response</li><li><strong>No limit on the size of parsed </strong><strong>Range headers</strong></li></ul><p><strong>Other packages:</strong></p><ul><li><strong>crypto/tls:</strong> rejecting malformed <strong>Encrypted Client Hello (ECH)</strong> extension references</li><li><strong>net/textproto and mime/multipart:</strong> a way to <strong>bypass the memory limit</strong> on MIME headers</li><li>Fixes in <strong>html/template, os, and the go command</strong></li></ul><p>Then on October 19, <strong>Go 1.27.3</strong> fixed <strong>CVE-2026–111943</strong> in crypto/x509 by <strong>distrusting a handful of compromised intermediate certificates</strong>, so Go programs no longer trust certificates issued through them.</p><p>Many of these are <strong>denial-of-service</strong> issues: an attacker sends crafted requests that make your server use too much memory or CPU, or crash. For internet-facing services, that’s a real risk.</p><h4>The Go-specific catch: you must rebuild</h4><p>In many languages, updating the runtime updates every app that uses it. <strong>Go is different.</strong> The standard library, including net/http and crypto/tls, is <strong>compiled into your binary.</strong></p><p>That means:</p><ul><li>Updating Go on your laptop or CI runner <strong>doesn’t change binaries already built or deployed.</strong></li><li>A service built last month with Go 1.27.1 <strong>still contains the vulnerable code</strong>, even if your server now has Go 1.27.3 installed.</li><li>The fix only reaches production when you <strong>rebuild with the new toolchain and redeploy.</strong></li></ul><p>You can check which Go version built any binary:</p><pre>go version ./myservice</pre><p>And for more detail, including module versions:</p><pre>go version -m ./myservice</pre><p>If it shows <strong>go1.27.2 or earlier</strong> on 1.27 (or go1.26.8 or earlier on 1.26), the binary needs a rebuild.</p><h4>Step 1: Update your toolchain</h4><p>Check your current version:</p><pre>go version</pre><p>You want <strong>Go 1.27.3</strong> on the 1.27 line, or the latest 1.26 patch if you’re still on 1.26. Check the official Go release history page for the newest 1.26 release.</p><p>To pin the toolchain for your project, so everyone and every CI run uses the same patched version:</p><pre>go get toolchain@go1.27.3</pre><p>This adds a toolchain line to your go.mod, and Go downloads the right version automatically when needed.</p><p><strong>Docker:</strong> update the base image in your build stage, for example:</p><pre>FROM golang:1.27.3 AS build</pre><h4>Step 2: Update golang.org/x/net if you use it</h4><p>Several HTTP/2 fixes also apply to <strong>golang.org/x/net</strong>, which some projects use directly or indirectly. Version <strong>v0.60.0</strong> includes the fixes, and it <strong>requires Go 1.26 or newer:</strong></p><pre>go get golang.org/x/net@v0.60.0<br>go mod tidy</pre><h4>Step 3: Run govulncheck</h4><p><strong>govulncheck</strong> is the official Go vulnerability scanner. What makes it especially useful is that it checks whether your code <strong>actually calls</strong> the vulnerable functions, so it reports real exposure, not just every vulnerable package in your dependency tree.</p><pre>go install golang.org/x/vuln/cmd/govulncheck@latest<br>govulncheck ./...</pre><p>You can also scan a <strong>built binary</strong> directly, which is useful for checking what’s actually deployed:</p><pre>govulncheck -mode=binary ./myservice</pre><h4>Step 4: Rebuild, redeploy, and verify</h4><p>Rebuild every service with the patched toolchain, deploy it, and confirm with go version ./myservice that the running binaries were built with the new version.</p><p>Don’t forget less obvious Go binaries:</p><ul><li><strong>Internal tools and CLIs</strong> your team distributes</li><li><strong>Sidecars, operators, and controllers</strong> in Kubernetes</li><li><strong>Third-party Go tools</strong> you run in production. Check whether their maintainers have released new builds.</li></ul><h4>Step 5: Watch for tooling surprises</h4><p>One project upgrading to Go 1.27 found that <strong>older golangci-lint versions couldn’t read Go 1.27’s compiled package data</strong> and had to upgrade golangci-lint as well. If your linters or other tools fail after updating Go, check for newer versions before assuming your code is broken.</p><h4>Go 1.25 is out of support</h4><p>Go supports only the <strong>two most recent major releases.</strong> With Go 1.27 out, <strong>Go 1.25 no longer receives security fixes</strong>, so it won’t get any of these patches. If you’re still on Go 1.25 or older, upgrade to Go 1.26 or, preferably, 1.27.</p><h4>While you’re upgrading: what’s new in Go 1.27</h4><p>If you’re moving to Go 1.27 for the first time, it’s one of Go’s most substantial releases in years:</p><ul><li><strong>Generic methods:</strong> methods can now declare their own type parameters, a long-requested feature.</li><li><strong>encoding/json/v2</strong> and <strong>encoding/json/jsontext</strong> are now available, and the new implementation becomes the default for JSON. If you hit compatibility problems, you can temporarily build with GOEXPERIMENT=nojsonv2.</li><li><strong>crypto/mldsa:</strong> post-quantum <strong>ML-DSA</strong> digital signatures, standardized in FIPS 204.</li><li>A new built-in <strong>uuid</strong> package for generating and parsing UUIDs.</li><li>An experimental, portable <strong>simd</strong> package for vector operations.</li><li>The <strong>goroutine leak profile</strong> is now generally available, which helps find goroutines that never exit.</li><li><strong>Faster small memory allocations.</strong></li><li>New <strong>go fix modernizers</strong> to update older code patterns automatically.</li></ul><p>Note that Go 1.27 needs <strong>macOS 13 Ventura or later</strong> on Macs.</p><h4>Automate it</h4><p>To stay on top of future releases:</p><ul><li><strong>Add govulncheck to CI</strong>, so builds fail when reachable vulnerabilities appear.</li><li><strong>Use Dependabot or Renovate</strong> to update both Go modules and your Go toolchain version.</li><li><strong>Rebuild and redeploy regularly</strong>, not only when your own code changes. In Go, a security fix in the standard library only reaches production through a new build.</li></ul><h4>Practical recommendation</h4><p>This week, for each Go service:</p><ol><li>Run go version ./yourbinary on what’s deployed.</li><li>Update to <strong>Go 1.27.3</strong> (or the latest 1.26 patch), and update golang.org/x/net if you use it.</li><li>Run govulncheck ./....</li><li><strong>Rebuild and redeploy</strong>, then verify the deployed binary’s Go version.</li></ol><p>Go makes deployment wonderfully simple: one static binary. The trade-off is that security fixes travel the same way, so <strong>no rebuild means no fix.</strong></p><p><em>Sources: the Go release history on go.dev, the Go issue tracker for CVE-2026–111943, and October 2026 security update notes from Go projects on GitHub (uniqush-push, burrow, and websyncd), plus Go 1.27 release notes and coverage from JetBrains and daily.dev.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=971e18a54c14" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Laravel Security Check-Up, October 2026: 7 Fixes Every Laravel App Needs This Week]]></title>
            <link>https://medium.com/@ascendrixtech/laravel-security-check-up-october-2026-7-fixes-every-laravel-app-needs-this-week-320423085f46?source=rss-de64cddb560a------2</link>
            <guid isPermaLink="false">https://medium.com/p/320423085f46</guid>
            <category><![CDATA[devsecops]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[php]]></category>
            <category><![CDATA[laravel]]></category>
            <dc:creator><![CDATA[Ascendrix Technologies]]></dc:creator>
            <pubDate>Fri, 30 Oct 2026 02:31:01 GMT</pubDate>
            <atom:updated>2026-10-30T02:31:01.953Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5hUnOnr0fwJbxk8ffFEcRg.png" /></figure><p>October 2026 has been one of the busiest months for Laravel security in years. There’s a critical PHP vulnerability, a critical framework advisory, fixes in Livewire, and a long list of patched dependencies, all within a few weeks.</p><p>Individually, each advisory is easy to handle. Together, they’re easy to fall behind on. In one public open-source Laravel project, a single composer audit reported <strong>25 advisories across 8 packages</strong> before updates, and <strong>zero</strong> afterward.</p><p>This guide brings everything together into one checklist you can work through in under an hour per app.</p><h4>Step 0: Get the full picture with composer audit</h4><p>Before fixing anything, see what applies to your app. From your project root:</p><pre>composer audit --locked</pre><p>This checks the exact versions in your composer.lock against known security advisories, including packages you never installed directly, like those pulled in by Filament or Pulse. It’s the fastest way to see your real exposure.</p><p>Run it again at the end of this checklist to confirm everything is fixed.</p><h4>Fix 1: Patch PHP itself (PHP2Shell)</h4><p>The most urgent item isn’t in Laravel at all. <strong>PHP2Shell</strong> is a pair of critical PHP vulnerabilities, <strong>CVE-2026–109618 and CVE-2026–109619</strong>, allowing remote code execution without logging in. They were fixed on October 21 in PHP <strong>8.5.12, 8.4.27, 8.3.36, and 8.2.35.</strong></p><p>Check every PHP version serving traffic, not just the CLI:</p><pre>php -v<br>php-fpm8.3 -v</pre><p>After updating, <strong>restart PHP-FPM</strong> and Laravel’s long-running processes, or they’ll keep running the old code:</p><pre>sudo systemctl restart php8.3-fpm<br>php artisan queue:restart<br>php artisan horizon:terminate</pre><p>A separate remote code execution flaw, <strong>CVE-2026–115560</strong>, was disclosed on October 23 and isn’t fixed by those releases. It only affects setups with <strong>session upload progress</strong> enabled. Check:</p><pre>php -i | grep session.upload_progress.enabled</pre><p>Unless you need that feature, turn it off in php.ini and restart PHP:</p><pre>session.upload_progress.enabled = 0</pre><h4>Fix 2: Update the framework (token guard bypass and more)</h4><p>Three framework advisories were fixed in recent releases:</p><ul><li><strong>CVE-2026–114509 (critical, 9.2):</strong> the built-in <strong>token guard</strong> could be tricked into signing in as another user on MySQL and MariaDB. It only affects apps using &#39;driver&#39; =&gt; &#39;token&#39;; <strong>Sanctum and Passport aren’t affected.</strong> Fixed in <strong>12.68.0 and 13.29.0.</strong></li><li><strong>CVE-2026–114508:</strong> in apps using <strong>JSON:API resources</strong>, a crafted, nested include parameter could trigger relationship loading that <strong>destroyed data in a related table.</strong> It affects 12.45.0 up to 12.68.0, and 13.x before 13.27.0.</li><li><strong>CVE-2026–102279 (low):</strong> a cross-site scripting issue in the <strong>debug error page.</strong> Fixed in <strong>12.69.0 and 13.30.0.</strong></li></ul><p>The simple answer is to update to the <strong>latest patch</strong> of your major version:</p><pre>composer update laravel/framework --with-all-dependencies</pre><p>If you’re on <strong>Laravel 11 or older</strong>, there are no fixes. Plan your upgrade to Laravel 12 or 13. Laravel 12 receives security fixes until <strong>February 24, 2027.</strong></p><h4>Fix 3: Update Livewire (even if you didn’t install it)</h4><p><strong>Livewire 4.4.8</strong> fixes an advisory (GHSA-mhf7-xp6r-6qrc) involving <strong>parameter key confusion in the </strong><strong>#[Authorize] attribute</strong>, which could affect how authorization checks are applied to component actions.</p><p>Many apps use Livewire <strong>indirectly</strong>, through <strong>Filament</strong>, <strong>Laravel Pulse</strong>, or starter kits, so it may not appear in your composer.json. Check what’s installed:</p><pre>composer show livewire/livewire</pre><p>If you use #[Authorize] in your components, see where:</p><pre>grep -rn &quot;#\[Authorize&quot; app/</pre><p>Then update:</p><pre>composer update livewire/livewire</pre><p>ivewire has had serious issues before, including a critical remote code execution flaw in v3 last year, so keeping it current is especially important.</p><h4>Fix 4: Update the packages under your app</h4><p>Laravel apps depend on dozens of packages you rarely think about. Recent advisories have affected packages like:</p><ul><li><strong>guzzlehttp/guzzle</strong>, the HTTP client used by Laravel’s Http facade</li><li><strong>league/flysystem</strong>, behind Laravel’s Storage</li><li><strong>symfony/yaml</strong> and other Symfony components</li><li>Development tools like <strong>psy/psysh</strong>, used by php artisan tinker, and <strong>phpunit</strong></li></ul><p>The safest approach is a full, tested update:</p><pre>composer update --with-all-dependencies</pre><p>Then run your test suite before deploying. If a full update is too risky right away, update only the packages that composer audit lists.</p><h4>Fix 5: Turn off debug mode in production</h4><p>The debug page XSS is a reminder of a long-standing rule: <strong>production should never run with </strong><strong>APP_DEBUG=true.</strong> Debug pages can expose environment variables, database details, and stack traces, which is a gift to attackers.</p><p>Check quickly:</p><pre>php artisan about</pre><p>Look at the <strong>Debug Mode</strong> line. In production, your .env should contain:</p><pre>APP_ENV=production<br>APP_DEBUG=false</pre><p>After changing it, refresh the cached configuration:</p><pre>php artisan config:cache</pre><h4>Fix 6: Review your API authentication</h4><p>If any app still uses the old token guard, this month is a good reason to move on:</p><ul><li><strong>Find it:</strong> grep -n &quot;&#39;driver&#39; =&gt; &#39;token&#39;&quot; config/auth.php</li><li><strong>Short term:</strong> update the framework, and enable token hashing (&#39;hash&#39; =&gt; true) if you haven’t.</li><li><strong>Long term:</strong> migrate to <strong>Laravel Sanctum</strong>, which supports hashed tokens, expiry, abilities, and revocation.</li></ul><p>Also review <strong>every route that accepts user input for authentication or lookups</strong>, and validate types explicitly, for example with &#39;token&#39; =&gt; [&#39;required&#39;, &#39;string&#39;]. This month’s bug happened because a value expected to be a string wasn’t checked.</p><h4>Fix 7: Automate this so it doesn’t happen again</h4><p>Manual check-ups are useful, but automation catches problems the day they’re published.</p><p><strong>Add </strong><strong>composer audit to CI.</strong> It returns an error when advisories are found, so a GitHub Actions step fails your build:</p><pre>- name: Check for vulnerable packages<br>  run: composer audit --locked</pre><p><strong>Enable Dependabot or Renovate</strong> for Composer, so security updates arrive as pull requests automatically.</p><p><strong>Subscribe to security news.</strong> Watch the GitHub Advisory Database for your key packages, and follow Laravel-focused security newsletters.</p><p><strong>Keep PHP and Laravel on supported versions.</strong> Many of this month’s fixes simply don’t exist for older versions.</p><h4>The one-hour checklist</h4><p>For each Laravel app:</p><ol><li>Run composer audit --locked and save the output.</li><li>Update PHP to a patched version, and <strong>restart PHP-FPM and workers.</strong></li><li>Disable session.upload_progress.enabled unless you need it.</li><li>Update laravel/framework to the latest patch.</li><li>Update livewire/livewire, even if it’s only an indirect dependency.</li><li>Run composer update --with-all-dependencies and your tests.</li><li>Confirm APP_DEBUG=false in production.</li><li>Check for the old token guard, and plan a move to Sanctum if you find it.</li><li>Run composer audit --locked again and confirm it’s clean.</li><li>Add composer audit to CI and enable automated dependency updates.</li></ol><h4>Practical recommendation</h4><p>Don’t treat this month’s advisories one by one. Block out an hour per app this week, work through the checklist, and set up the automation in step 10. The next advisory will come; what matters is whether your process catches it in hours or months.</p><p><em>Sources: Laravel advisories GHSA-f9x3–7vq9-cph6, GHSA-5wcm-3v2w-8362, and GHSA-jh5r-qr3c-85q8; Livewire advisory GHSA-mhf7-xp6r-6qrc; Corgea research; Laravel News; Brandefense; Securing Laravel; PHP security release notes; and a public dependency security update in the DLSite-List project on GitHub (October 2026).</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=320423085f46" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>