<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ashish Agarwal</title>
    <description>The latest articles on DEV Community by Ashish Agarwal (@donrulezz).</description>
    <link>https://dev.to/donrulezz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4214697%2F38f1c08a-71c7-4592-ac30-b25d02d5e5c9.gif</url>
      <title>DEV Community: Ashish Agarwal</title>
      <link>https://dev.to/donrulezz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/donrulezz"/>
    <language>en</language>
    <item>
      <title>KB5127648 broke 802.1X Wi-Fi and VPN sign-in: find every affected PC in a minute, then fix it for good</title>
      <dc:creator>Ashish Agarwal</dc:creator>
      <pubDate>Thu, 29 Oct 2026 11:47:54 +0000</pubDate>
      <link>https://dev.to/donrulezz/kb5127648-broke-8021x-wi-fi-and-vpn-sign-in-find-every-affected-pc-in-a-minute-then-fix-it-for-17h3</link>
      <guid>https://dev.to/donrulezz/kb5127648-broke-8021x-wi-fi-and-vpn-sign-in-find-every-affected-pc-in-a-minute-then-fix-it-for-17h3</guid>
      <description>&lt;p&gt;Since the 13 October 2026 cumulative update (KB5127648 on Windows 11, KB5126646 on Windows Server 2025), a lot of office PCs stopped joining WPA2/WPA3-Enterprise Wi-Fi, wired 802.1X and VPN automatically. Typing the password by hand still works. One Microsoft Q&amp;amp;A thread has 400+ people clicking "same question".&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;Microsoft is hardening NTLMv1 (message center post MC1508562). From the October update, if this registry value is not set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0  BlockNtlmv1SSO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Windows treats it as &lt;strong&gt;Enforce (1)&lt;/strong&gt; instead of Audit (0) and blocks NTLMv1-derived single sign-on credentials. PEAP with EAP-MSCHAPv2, signing in with the Windows logon, is exactly that, so those profiles fail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not affected:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;devices with Credential Guard running;&lt;/li&gt;
&lt;li&gt;certificate-based profiles (EAP-TLS, PEAP-TLS);&lt;/li&gt;
&lt;li&gt;PSK networks;&lt;/li&gt;
&lt;li&gt;users who type their credentials.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's why only some PCs and some networks break.&lt;/p&gt;

&lt;h2&gt;
  
  
  Find the affected PCs
&lt;/h2&gt;

&lt;p&gt;Look for event &lt;strong&gt;4025&lt;/strong&gt; in Applications and Services Logs → Microsoft → Windows → NTLM → Operational. To check many machines at once, I wrote a small read-only PowerShell script. It reads:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether the update is installed;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;BlockNtlmv1SSO&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;whether Credential Guard is running;&lt;/li&gt;
&lt;li&gt;each Wi-Fi and wired profile's EAP method and whether it uses the Windows logon;&lt;/li&gt;
&lt;li&gt;event 4025.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It prints a verdict per profile and can write a CSV per PC:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\Test-NtlmV1WifiImpact.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\Test-NtlmV1WifiImpact.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Csv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;\\server\share\ntlmv1-&lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;COMPUTERNAME&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;csv&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Kind  Profile   Method              UsesWindowsLogon Verdict
Wi-Fi CorpWiFi  PEAP + EAP-MSCHAPv2             True AFFECTED: PEAP-MSCHAPv2 with Windows logon credentials, Enforce mode
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Script (MIT, changes nothing): &lt;a href="https://github.com/Donrulezz/Test-NtlmV1WifiImpact" rel="noopener noreferrer"&gt;https://github.com/Donrulezz/Test-NtlmV1WifiImpact&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Get people back online today
&lt;/h2&gt;

&lt;p&gt;Set the DWORD &lt;code&gt;BlockNtlmv1SSO = 0&lt;/code&gt; under the key above. For many PCs, use Group Policy Preferences (Computer Configuration → Preferences → Windows Settings → Registry) or an Intune script. Reconnect, or restart if it doesn't take effect.&lt;/p&gt;

&lt;p&gt;This turns the weaker NTLMv1-derived sign-in back on. Treat it as a bridge and put a date on it. Uninstalling KB5127648 only lasts until the next cumulative update, which carries the same change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix it for good
&lt;/h2&gt;

&lt;p&gt;Move the affected networks to certificate-based sign-in:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Issue device or user certificates (AD CS auto-enrolment, or Intune SCEP/PKCS).&lt;/li&gt;
&lt;li&gt;Add EAP-TLS (or PEAP with certificates) to the NPS network policy.&lt;/li&gt;
&lt;li&gt;Push the new Wi-Fi, wired or VPN profile to a pilot group.&lt;/li&gt;
&lt;li&gt;Roll it out, then remove PEAP-MSCHAPv2.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or turn on Credential Guard where the hardware supports it. When you're done, remove the stop-gap value so NTLMv1 sign-in stays off.&lt;/p&gt;

</description>
      <category>windows</category>
      <category>sysadmin</category>
      <category>networking</category>
      <category>powershell</category>
    </item>
    <item>
      <title>gpt-4o, gpt-4.1 and whisper-1 are shutting down: how to find every call in your code and n8n workflows</title>
      <dc:creator>Ashish Agarwal</dc:creator>
      <pubDate>Thu, 29 Oct 2026 08:15:00 +0000</pubDate>
      <link>https://dev.to/donrulezz/gpt-4o-gpt-41-and-whisper-1-are-shutting-down-how-to-find-every-call-in-your-code-and-n8n-5314</link>
      <guid>https://dev.to/donrulezz/gpt-4o-gpt-41-and-whisper-1-are-shutting-down-how-to-find-every-call-in-your-code-and-n8n-5314</guid>
      <description>&lt;p&gt;OpenAI shuts down &lt;code&gt;gpt-4o&lt;/code&gt;, &lt;code&gt;gpt-4o-mini&lt;/code&gt; and &lt;code&gt;gpt-4.1&lt;/code&gt; (and their dated snapshots) on &lt;strong&gt;14 January 2027&lt;/strong&gt;. &lt;code&gt;tts-1&lt;/code&gt; and &lt;code&gt;gpt-4o-mini-tts&lt;/code&gt; go on 6 January, the old realtime models on 20 January, and &lt;code&gt;whisper-1&lt;/code&gt; and &lt;code&gt;gpt-4o-transcribe&lt;/code&gt; on 26 February. Anthropic retires &lt;code&gt;claude-sonnet-4-5-20250929&lt;/code&gt; on 30 November 2026. After the date, calls to a retired model fail.&lt;/p&gt;

&lt;p&gt;Searching for "gpt-4o" finds the obvious calls. These are the ones it misses:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Gateway and cloud spellings:&lt;/strong&gt; &lt;code&gt;openai/gpt-4o&lt;/code&gt; (OpenRouter), &lt;code&gt;us.anthropic.claude-sonnet-4-5-20250929-v1:0&lt;/code&gt; (Bedrock), &lt;code&gt;claude-sonnet-4-5@20250929&lt;/code&gt; (Vertex), and fine-tunes like &lt;code&gt;ft:gpt-4o-mini-2024-07-18:org::abc123&lt;/code&gt;, which die with their base model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dated snapshots:&lt;/strong&gt; grep for the exact quoted string &lt;code&gt;"gpt-4o"&lt;/code&gt; and you miss &lt;code&gt;"gpt-4o-2024-08-06"&lt;/code&gt;; grep without quotes and you also hit every &lt;code&gt;gpt-4o-mini&lt;/code&gt; and unrelated mention, with no dates attached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n8n defaults that never appear in the export:&lt;/strong&gt; n8n writes a node parameter only when it differs from the default. An OpenAI chat-model node left on its default shows no model at all in the workflow JSON. The OpenAI node's audio transcribe operation hardcodes &lt;code&gt;whisper-1&lt;/code&gt; in n8n's own code, so you can't see it or change it in the node at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Config and prompts:&lt;/strong&gt; &lt;code&gt;.env&lt;/code&gt; files, YAML, notebooks, and model names inside prompt templates.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  A scanner that handles those cases
&lt;/h3&gt;

&lt;p&gt;I put the matching rules and a dated registry (OpenAI, Anthropic, Google, with a source link for every entry) into a small dependency-free Node script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Donrulezz/ai-model-retirement-scanner
node ai-model-retirement-scanner/cli.js path/to/project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;where                                                         model        shutdown                  move to
example/summarize.py (line 8)                                 gpt-4o-mini  2027-01-14 (in 78 days)   gpt-6-luna
example/support-workflow.json (Support replies &amp;gt; Reply model)  gpt-4.1      2027-01-14 (in 78 days)   gpt-6-luna
example/support-workflow.json (Support replies &amp;gt; Transcribe call)  whisper-1    2027-02-26 (in 121 days)  gpt-transcribe or gpt-live-transcribe

3 finding(s) in 2 files, 2 due within 90 days (registry updated 2026-10-28).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For n8n, export everything first (&lt;code&gt;n8n export:workflow --all --output=workflows.json&lt;/code&gt;) and scan the file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Block it in CI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;git clone --depth 1 https://github.com/Donrulezz/ai-model-retirement-scanner /tmp/amrs&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node /tmp/amrs/cli.js . --fail-within &lt;/span&gt;&lt;span class="m"&gt;60&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The job fails when anything in the repo shuts down within 60 days, or has already shut down.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before you switch
&lt;/h3&gt;

&lt;p&gt;The replacements behave differently. For example, &lt;code&gt;gpt-6-luna&lt;/code&gt; is a reasoning model: on Chat Completions, tool calls work only with &lt;code&gt;reasoning_effort: none&lt;/code&gt;, and &lt;code&gt;temperature&lt;/code&gt; / &lt;code&gt;top_p&lt;/code&gt; must be removed unless the effort is none. Test your own prompts on the new model before the date, not on it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scanner (MIT):&lt;/strong&gt; &lt;a href="https://github.com/Donrulezz/ai-model-retirement-scanner" rel="noopener noreferrer"&gt;https://github.com/Donrulezz/ai-model-retirement-scanner&lt;/a&gt;. Issues welcome if a date moves or a model is missing.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>n8n</category>
      <category>devops</category>
      <category>openai</category>
    </item>
  </channel>
</rss>
