<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged vibe-coding</title>
<link>https://coderlegion.com/tag/vibe-coding</link>
<description>Powered by Question2Answer</description>
<item>
<title>Hacking a website is now easier than pouring a cup of coffee — here's how to stay safe</title>
<link>https://coderlegion.com/29370/hacking-a-website-is-now-easier-than-pouring-a-cup-of-coffee-heres-how-to-stay-safe</link>
<description>&lt;blockquote&gt;&lt;p&gt;Nowadays, hacking a website is easier than pouring a cup of coffee ☕️&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While striving to deliver value to users as quickly as possible, it is crucial not to cause harm. I’d like to introduce you to Magery Forge, a security auditing service. It transforms scanner &quot;noise&quot; into clearly defined risks, complete with remediation recommendations. The service is also available via MCP, allowing your AI agent (Cursor, Copilot, Claude, OpenClaw) to run scans and read reports autonomously, while leaving the final decision on how to address discovered vulnerabilities up to you.&lt;/p&gt;
&lt;p&gt;Here’s a key point: you don’t need to grant access to your codebase. Doing so could introduce additional risks and create new attack vectors. AI agents are already good at writing code, but attackers aren't stupid—they always look for the path of least resistance. Right now, that path often lies in how components are configured into the final product. The work is split between the agent and you, and you don't always fully grasp the specific configurations or commands being executed. That’s why the service operates on a &quot;black box&quot; principle: it simulates a real-world hack.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://forge.magery.ai&quot;&gt;https://forge.magery.ai&lt;/a&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/29370/hacking-a-website-is-now-easier-than-pouring-a-cup-of-coffee-heres-how-to-stay-safe</guid>
<pubDate>Thu, 01 Oct 2026 09:39:11 +0000</pubDate>
</item>
<item>
<title>Your AI Coding Agent Is Paying to Read Code It Doesn't Need</title>
<link>https://coderlegion.com/28136/your-ai-coding-agent-is-paying-to-read-code-it-doesnt-need</link>
<description>&lt;h2 id=&quot;your-ai-coding-agent-is-paying-to-read-code-it-doesn-t-need&quot;&gt;Your AI Coding Agent Is Paying to Read Code It Doesn't Need&lt;/h2&gt;
&lt;p&gt;AI coding agents have become surprisingly good at changing code.&lt;/p&gt;
&lt;p&gt;But we are still giving them files as if they were human developers sitting in front of an editor.&lt;/p&gt;
&lt;p&gt;And that is expensive.&lt;/p&gt;
&lt;p&gt;Imagine your agent needs to rename one identifier inside a 2,000-line file.&lt;/p&gt;
&lt;p&gt;The actual change might be:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;oldName → newName
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A few tokens of useful information.&lt;/p&gt;
&lt;p&gt;Yet the typical agent workflow looks something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;read 2,000 lines
↓
reason about one relevant line
↓
edit the file
↓
read the file or diff again
↓
continue carrying much of that context
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The agent may consume tens of thousands of tokens to perform an operation whose semantic payload is only a handful of tokens.&lt;/p&gt;
&lt;p&gt;That feels backwards.&lt;/p&gt;
&lt;p&gt;Read more: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/francescobianco/rap/&quot;&gt;https://github.com/francescobianco/rap/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;what-if-the-agent-never-opened-the-file-&quot;&gt;What if the agent never opened the file?&lt;/h3&gt;
&lt;p&gt;This is the idea behind RAP — Runtime Apply Patch.&lt;/p&gt;
&lt;p&gt;Instead of asking an agent to read a file, locate something, rewrite it, and verify the result, RAP lets the agent address the code directly by its content.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;rap s app.go 'oldName' 'newName'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;RAP answers:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;updated app.go (lines 1697 -&amp;gt; 1699, bytes +133, replacements 1)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That's it.&lt;/p&gt;
&lt;p&gt;The agent did not need to load 2,000 lines into its context.&lt;/p&gt;
&lt;p&gt;It already knew what it wanted to change.&lt;/p&gt;
&lt;p&gt;RAP simply found it and performed the operation.&lt;/p&gt;
&lt;p&gt;The principle can be summarized in three words:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lines, not files.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;files-are-a-human-abstraction&quot;&gt;Files are a human abstraction&lt;/h3&gt;
&lt;p&gt;Files are extremely useful for humans.&lt;/p&gt;
&lt;p&gt;We open &lt;code&gt;app.go&lt;/code&gt;, scroll around, understand the surrounding code, make a change, save it, and inspect the result.&lt;/p&gt;
&lt;p&gt;But an AI agent does not necessarily need to reproduce that workflow.&lt;/p&gt;
&lt;p&gt;If an agent already knows:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;OLD = &quot;oldName&quot;
NEW = &quot;newName&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;why should it pay the context cost of reading another 1,999 lines?&lt;/p&gt;
&lt;p&gt;The information required to describe the mutation and the information required to store the program are two very different things.&lt;/p&gt;
&lt;p&gt;RAP tries to keep them separate.&lt;/p&gt;
&lt;p&gt;The filesystem stores the program.&lt;/p&gt;
&lt;p&gt;The model describes the mutation.&lt;/p&gt;
&lt;p&gt;RAP connects the two.&lt;/p&gt;
&lt;h3 id=&quot;content-becomes-the-address&quot;&gt;Content becomes the address&lt;/h3&gt;
&lt;p&gt;Traditional editing often addresses code through coordinates:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;file → line → column
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But coordinates are fragile.&lt;/p&gt;
&lt;p&gt;Insert ten lines above the target and the address changes.&lt;/p&gt;
&lt;p&gt;RAP instead addresses code by content:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;file → known text → replacement
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The interesting consequence is that the agent often already possesses the address.&lt;/p&gt;
&lt;p&gt;Maybe the target came from a previous grep.&lt;/p&gt;
&lt;p&gt;Maybe it appeared in an error message.&lt;/p&gt;
&lt;p&gt;Maybe the user provided it.&lt;/p&gt;
&lt;p&gt;Maybe the agent wrote that code itself thirty seconds ago.&lt;/p&gt;
&lt;p&gt;There is no reason to reload the entire file merely to rediscover information already present in the agent's context.&lt;/p&gt;
&lt;h3 id=&quot;what-if-the-target-is-ambiguous-&quot;&gt;What if the target is ambiguous?&lt;/h3&gt;
&lt;p&gt;Then RAP stops.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ rap s app.go 'count' 'total'
rap: OLD matched 3 times; use -all or a more specific OLD
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nothing gets written.&lt;/p&gt;
&lt;p&gt;This property matters more than it might initially appear.&lt;/p&gt;
&lt;p&gt;Shell tools can be extremely efficient for agents, but commands such as &lt;code&gt;sed&lt;/code&gt; can also silently perform a perfectly valid operation on the wrong piece of text.&lt;/p&gt;
&lt;p&gt;For an autonomous agent, failure is often cheaper than confidence.&lt;/p&gt;
&lt;p&gt;A failed command may cost a dozen tokens.&lt;/p&gt;
&lt;p&gt;A wrong edit can contaminate several subsequent reasoning steps before the mistake is discovered.&lt;/p&gt;
&lt;p&gt;RAP therefore prefers an explicit refusal over an ambiguous mutation.&lt;/p&gt;
&lt;h3 id=&quot;but-sometimes-the-agent-really-does-need-context&quot;&gt;But sometimes the agent really does need context&lt;/h3&gt;
&lt;p&gt;Of course.&lt;/p&gt;
&lt;p&gt;The argument is not that agents should never read source code.&lt;/p&gt;
&lt;p&gt;The argument is that &lt;strong&gt;reading an entire file should not be the default unit of interaction&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;RAP provides smaller operations for the questions agents actually ask.&lt;/p&gt;
&lt;p&gt;Want to know whether a target is unique?&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;rap m FILE 'text'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;matches: 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Want to inspect only the affected area?&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;rap preview -n FILE 40 60 -- s OLD NEW
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The agent receives a small window instead of the whole building.&lt;/p&gt;
&lt;p&gt;Need to pass ugly text containing quotes, JSON, shell characters, or newlines?&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;rap q -token @file
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;RAP turns it into a safe token representation.&lt;/p&gt;
&lt;p&gt;And after an edit, the command itself returns a receipt describing what happened.&lt;/p&gt;
&lt;p&gt;No automatic full-file reread is necessary just to ask:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Did it work?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;the-token-economics-are-surprisingly-large&quot;&gt;The token economics are surprisingly large&lt;/h3&gt;
&lt;p&gt;Consider a 2,000-line source file representing roughly 25,000 tokens.&lt;/p&gt;
&lt;p&gt;A conventional agent might:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;read file        ~25,000 tokens
modify
inspect result   ~25,000 tokens
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Potentially around 50,000 tokens of context traffic around an edit that may involve only one line.&lt;/p&gt;
&lt;p&gt;With RAP, the interaction can look more like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;rap s FILE OLD NEW
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Perhaps ~40 input tokens and ~20 output tokens.&lt;/p&gt;
&lt;p&gt;Obviously, real workloads vary. Agents sometimes genuinely need broader context, and not every edit can be expressed as a simple substitution.&lt;/p&gt;
&lt;p&gt;But that is precisely the point.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pay for context when reasoning requires context.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Do not pay for it merely because the code happens to live inside a large file.&lt;/p&gt;
&lt;h3 id=&quot;this-becomes-more-important-as-agents-become-more-autonomous&quot;&gt;This becomes more important as agents become more autonomous&lt;/h3&gt;
&lt;p&gt;Token efficiency is usually discussed as a model problem:&lt;/p&gt;
&lt;p&gt;smaller prompts, better compression, larger context windows, cheaper inference.&lt;/p&gt;
&lt;p&gt;But part of the problem may actually live outside the model.&lt;/p&gt;
&lt;p&gt;Our tools still assume that an intelligent actor interacts with software primarily by opening documents.&lt;/p&gt;
&lt;p&gt;Coding agents give us an opportunity to reconsider that assumption.&lt;/p&gt;
&lt;p&gt;An agent does not necessarily need an editor.&lt;/p&gt;
&lt;p&gt;It needs precise operations over a codebase, small observations about their consequences, and predictable failure modes.&lt;/p&gt;
&lt;p&gt;That suggests a different interface between models and source code:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;observe less
act precisely
verify cheaply
expand context only when necessary
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;RAP is a small experiment in that direction.&lt;/p&gt;
&lt;p&gt;It does not try to make the model smarter.&lt;/p&gt;
&lt;p&gt;It tries to make the model &lt;strong&gt;need fewer tokens to do the work it already knows how to do&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;lines-not-files&quot;&gt;Lines, not files&lt;/h3&gt;
&lt;p&gt;The core idea behind RAP is intentionally simple:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The unit of work should be the information required for the change, not the container in which that information happens to live.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sometimes that means a file.&lt;/p&gt;
&lt;p&gt;Sometimes it means fifty lines.&lt;/p&gt;
&lt;p&gt;Sometimes it means five.&lt;/p&gt;
&lt;p&gt;And sometimes it means:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;oldName → newName
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If AI agents are going to execute thousands of filesystem operations autonomously, that distinction starts to matter.&lt;/p&gt;
&lt;p&gt;A lot.&lt;/p&gt;
&lt;p&gt;RAP is open source and available on GitHub.&lt;/p&gt;
&lt;p&gt;Try giving your coding agent RAP and watch how often it can edit code without ever asking to see the whole file.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28136/your-ai-coding-agent-is-paying-to-read-code-it-doesnt-need</guid>
<pubDate>Tue, 22 Sep 2026 09:32:52 +0000</pubDate>
</item>
<item>
<title>Everyone Can Build Software Now. Who’s Stopping the Agents?</title>
<link>https://coderlegion.com/27198/everyone-can-build-software-now-whos-stopping-the-agents</link>
<description>&lt;p&gt;Maybe the best software developers in the world built a piece of software.&lt;/p&gt;
&lt;p&gt;Then that software started building software.&lt;/p&gt;
&lt;p&gt;They marketed it and said:&lt;/p&gt;
&lt;p&gt;“You can build software even if you don't know how to code.”&lt;/p&gt;
&lt;p&gt;And people actually started building software.&lt;/p&gt;
&lt;p&gt;But a problem emerged.&lt;/p&gt;
&lt;p&gt;People who didn't know how to code started building buggy software.&lt;/p&gt;
&lt;p&gt;Then professional developers who knew how to code started using the same tools.&lt;/p&gt;
&lt;p&gt;And they built buggy software too.&lt;/p&gt;
&lt;p&gt;But there was something ironic about this:&lt;/p&gt;
&lt;p&gt;Vibe coders weren't the only ones building buggy software.&lt;/p&gt;
&lt;p&gt;Professional developers using the same tools were making mistakes too.&lt;/p&gt;
&lt;p&gt;Then the people who knew how to code started laughing at the people who didn't.&lt;/p&gt;
&lt;p&gt;They called them “vibe coders.”&lt;/p&gt;
&lt;p&gt;Hello, I'm Ali Ulu.&lt;/p&gt;
&lt;p&gt;I'm a vibe coder.&lt;/p&gt;
&lt;p&gt;LinkedIn and similar platforms are full of complaints from developers who know how to code and are looking for jobs.&lt;/p&gt;
&lt;p&gt;Instead of joining them, I chose a different path.&lt;/p&gt;
&lt;p&gt;Rather than focusing on learning how to write code, I focused on understanding the soul of software and orchestrating agents.&lt;/p&gt;
&lt;p&gt;And the project I'm working on right now is built exactly around this problem.&lt;/p&gt;
&lt;p&gt;While trying to build software without knowing how to code, I became focused on one thing:&lt;/p&gt;
&lt;p&gt;Watching what agents are doing before they make a mistake — and stopping them before that mistake happens.&lt;/p&gt;
&lt;p&gt;This project is called HUQAN.&lt;/p&gt;
&lt;p&gt;Welcome to my story.&lt;/p&gt;
&lt;p&gt;To conduct the orchestra, sometimes you have to turn your back on the crowd.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27198/everyone-can-build-software-now-whos-stopping-the-agents</guid>
<pubDate>Mon, 14 Sep 2026 23:28:33 +0000</pubDate>
</item>
<item>
<title>Vibe Coding Was Supposed to Kill Software Engineering. Instead, It Exposed What Engineering Actual</title>
<link>https://coderlegion.com/27135/vibe-coding-supposed-kill-software-engineering-instead-exposed-what-engineering-actual</link>
<description>&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;The strange thing about AI coding isn't that machines can write software now.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It's that we're finally discovering how much of software engineering had very little to do with typing code in the first place.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In early 2025, “vibe coding” sounded like a meme.&lt;/p&gt;
&lt;p&gt;Andrej Karpathy described it as essentially giving in to the model, accepting generated code, and worrying less about the code itself. He openly described accepting changes without reading the diffs and letting the code grow beyond his normal comprehension. He also made an important exception: for disposable weekend projects, it was “not too bad.”&lt;/p&gt;
&lt;p&gt;That distinction should have ended the argument.&lt;/p&gt;
&lt;p&gt;It didn't.&lt;/p&gt;
&lt;p&gt;Instead, the internet split into two camps.&lt;/p&gt;
&lt;p&gt;One side said:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“This isn't engineering.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The other said:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“You just don't understand what engineering is becoming.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A year later, I'm less interested in which side wins.&lt;/p&gt;
&lt;p&gt;I'm interested in something more uncomfortable.&lt;/p&gt;
&lt;h4 id=&quot;what-if-both-sides-were-looking-at-different-parts-of-the-same-transition-&quot;&gt;What if both sides were looking at different parts of the same transition?&lt;/h4&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-original-sin-of-vibe-coding&quot;&gt;The Original Sin of Vibe Coding&lt;/h2&gt;
&lt;p&gt;The biggest misconception about vibe coding is that it means:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;“Using AI to write code.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It doesn't.&lt;/p&gt;
&lt;p&gt;Simon Willison made that distinction very clearly in 2025. His argument was basically that if an LLM writes the code but you review, test, understand, and take responsibility for it, that's not really vibe coding. That's simply using an LLM as a programming tool.&lt;/p&gt;
&lt;p&gt;The more interesting definition is much messier:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;You have an idea.

You describe it.

The model writes something.

You run it.

Something breaks.

You describe the break.

The model changes the code.

You run it again.

It works.

You ship it.

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That workflow feels almost magical.&lt;/p&gt;
&lt;p&gt;And sometimes it is.&lt;/p&gt;
&lt;p&gt;But there's an interesting word hiding inside that loop:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;works.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;What does “works” actually mean?&lt;/p&gt;
&lt;p&gt;Does it pass the demo?&lt;/p&gt;
&lt;p&gt;Does it pass the tests?&lt;/p&gt;
&lt;p&gt;Does it survive production?&lt;/p&gt;
&lt;p&gt;Can another developer understand it?&lt;/p&gt;
&lt;p&gt;Can you debug it six months later?&lt;/p&gt;
&lt;p&gt;Does it preserve the right security boundaries?&lt;/p&gt;
&lt;p&gt;Does it make the next feature easier or harder?&lt;/p&gt;
&lt;p&gt;Or does “works” simply mean:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;“I don't see an error anymore.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Those are very different definitions of success.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;i-found-myself-doing-it-too&quot;&gt;I Found Myself Doing It Too&lt;/h2&gt;
&lt;p&gt;This is where the debate gets personal for me.&lt;/p&gt;
&lt;p&gt;I've built projects where AI was involved in much more than autocomplete.&lt;/p&gt;
&lt;p&gt;Take &lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MahanKenway/Arcane-Dice&quot;&gt;Arcane Dice&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It's a 3D physics dice roller with Three.js, Ammo.js and an AI dungeon-master layer.&lt;/p&gt;
&lt;p&gt;I could describe a feature, let the model implement it, run the project, find something broken, paste the error back, and keep going.&lt;/p&gt;
&lt;p&gt;And that's incredibly productive.&lt;/p&gt;
&lt;p&gt;You can get from:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“I have an idea.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;to:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“There's a working prototype in the browser.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;much faster than you could before.&lt;/p&gt;
&lt;p&gt;That's the part of AI coding that critics sometimes underestimate.&lt;/p&gt;
&lt;p&gt;The leverage is real.&lt;/p&gt;
&lt;p&gt;But then something funny happens.&lt;/p&gt;
&lt;p&gt;The project gets bigger.&lt;/p&gt;
&lt;p&gt;The components multiply.&lt;/p&gt;
&lt;p&gt;State starts crossing boundaries.&lt;/p&gt;
&lt;p&gt;One feature touches three other systems.&lt;/p&gt;
&lt;p&gt;A “small” change suddenly has consequences somewhere else.&lt;/p&gt;
&lt;p&gt;And the questions change.&lt;/p&gt;
&lt;p&gt;You stop asking:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Can the AI write this?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and start asking:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Why did it write it this way?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's a completely different question.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-code-gets-cheaper-the-context-doesn-t-&quot;&gt;The Code Gets Cheaper. The Context Doesn't.&lt;/h2&gt;
&lt;p&gt;This might be the most important economic change AI has introduced into programming.&lt;/p&gt;
&lt;p&gt;The cost of generating code has collapsed.&lt;/p&gt;
&lt;p&gt;The cost of &lt;strong&gt;understanding a system&lt;/strong&gt; hasn't.&lt;/p&gt;
&lt;p&gt;Imagine an agent generating 2,000 lines in ten minutes.&lt;/p&gt;
&lt;p&gt;Amazing.&lt;/p&gt;
&lt;p&gt;Now imagine another engineer has to spend two hours understanding the change.&lt;/p&gt;
&lt;p&gt;The generation got cheaper.&lt;/p&gt;
&lt;p&gt;The reasoning didn't.&lt;/p&gt;
&lt;p&gt;And if AI makes developers produce five times as many changes, the amount of software requiring review can increase faster than human review capacity.&lt;/p&gt;
&lt;p&gt;That's exactly why code review is becoming such a strange bottleneck in the agentic era.&lt;/p&gt;
&lt;p&gt;Recent industry analysis has reported large increases in code churn and review time among teams with heavy AI adoption, alongside concerns about more unreviewed changes reaching production.&lt;/p&gt;
&lt;p&gt;There's a beautiful paradox here:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI removes the bottleneck that was visible.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Then creates a bottleneck that is harder to measure.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;-but-my-tests-are-green-&quot;&gt;“But My Tests Are Green”&lt;/h2&gt;
&lt;p&gt;This is probably the most dangerous sentence in AI-assisted development.&lt;/p&gt;
&lt;p&gt;A test suite can tell you that certain behavior works.&lt;/p&gt;
&lt;p&gt;It cannot tell you that the architecture makes sense.&lt;/p&gt;
&lt;p&gt;It cannot tell you that the abstraction belongs there.&lt;/p&gt;
&lt;p&gt;It cannot tell you that the next engineer will understand the code.&lt;/p&gt;
&lt;p&gt;And it certainly can't guarantee that you solved the right problem.&lt;/p&gt;
&lt;p&gt;METR ran an experiment around exactly this gap.&lt;/p&gt;
&lt;p&gt;They looked at software-engineering patches that passed automated SWE-bench evaluation and then asked maintainers whether they would actually merge them.&lt;/p&gt;
&lt;p&gt;A substantial share of those patches were not considered acceptable for the real project.&lt;/p&gt;
&lt;p&gt;That doesn't mean the benchmark is useless. It means the benchmark is measuring something different.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Passing a test is not the same as passing an engineer.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That's an important distinction because AI systems are becoming exceptionally good at optimizing for things we can measure.&lt;/p&gt;
&lt;p&gt;The things we cannot measure as easily are often the things engineers spend their lives worrying about.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;then-the-productivity-research-got-weird&quot;&gt;Then the Productivity Research Got Weird&lt;/h2&gt;
&lt;p&gt;There is another reason I don't think the “AI makes programmers worse” argument holds up.&lt;/p&gt;
&lt;p&gt;Some research says AI makes developers significantly more productive.&lt;/p&gt;
&lt;p&gt;A large field experiment involving 4,867 developers across Microsoft, Accenture, and a Fortune 100 company reported that developers with access to AI coding assistance completed about 26% more tasks.&lt;/p&gt;
&lt;p&gt;That is not a rounding error.&lt;/p&gt;
&lt;p&gt;But another randomized METR study of experienced open-source developers working in mature repositories found something almost comically opposite: developers using AI took about 19% longer on the tasks studied.&lt;/p&gt;
&lt;p&gt;Even stranger, the developers expected AI to make them faster.&lt;/p&gt;
&lt;p&gt;They were slower.&lt;/p&gt;
&lt;p&gt;And still believed they were faster.&lt;/p&gt;
&lt;p&gt;That's not just a story about AI.&lt;/p&gt;
&lt;p&gt;It's a story about humans.&lt;/p&gt;
&lt;p&gt;We are very bad at estimating the total cost of automation when the automation feels good.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-best-ai-feature-might-be-false-confidence&quot;&gt;The Best AI Feature Might Be False Confidence&lt;/h2&gt;
&lt;p&gt;This is the part that genuinely bothers me.&lt;/p&gt;
&lt;p&gt;When an AI generates broken code, that's annoying.&lt;/p&gt;
&lt;p&gt;When it generates code that &lt;strong&gt;looks correct&lt;/strong&gt;, it's much more dangerous.&lt;/p&gt;
&lt;p&gt;Good naming.&lt;/p&gt;
&lt;p&gt;Clean formatting.&lt;/p&gt;
&lt;p&gt;Reasonable comments.&lt;/p&gt;
&lt;p&gt;A green test suite.&lt;/p&gt;
&lt;p&gt;A polished UI.&lt;/p&gt;
&lt;p&gt;No obvious errors.&lt;/p&gt;
&lt;p&gt;Suddenly you have something that feels trustworthy.&lt;/p&gt;
&lt;p&gt;And our brains are very willing to reward things that look finished.&lt;/p&gt;
&lt;p&gt;One 2026 study examining whether human developers could detect deliberately hidden malicious behavior in AI-assisted coding tasks found that most participants failed to detect the sabotage. Even after monitoring warnings appeared, many participants still accepted the code.&lt;/p&gt;
&lt;p&gt;That's not evidence that AI is evil.&lt;/p&gt;
&lt;p&gt;It's evidence that &lt;strong&gt;human review is not automatically human understanding&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;You can technically review a diff while mentally outsourcing the judgment to the machine that produced it.&lt;/p&gt;
&lt;p&gt;That's a very different kind of failure.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;and-security-doesn-t-care-about-your-vibes&quot;&gt;And Security Doesn't Care About Your Vibes&lt;/h2&gt;
&lt;p&gt;Here is where the “it's just a prototype” defense becomes complicated.&lt;/p&gt;
&lt;p&gt;Because prototypes have a nasty habit of becoming products.&lt;/p&gt;
&lt;p&gt;A developer builds something for fun.&lt;/p&gt;
&lt;p&gt;Then someone says:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“This is actually pretty useful.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Can we add accounts?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Can it store user data?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Can we monetize it?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Can it handle payments?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Congratulations.&lt;/p&gt;
&lt;p&gt;Your weekend experiment now has a security model.&lt;/p&gt;
&lt;p&gt;A 2025 benchmark of real-world coding tasks found a disturbing gap between functional correctness and security. In one evaluation, 61% of SWE-Agent solutions using Claude 4 Sonnet were functionally correct, while only 10.5% were considered secure.&lt;/p&gt;
&lt;p&gt;That number should make every “the tests pass” argument feel slightly less comfortable.&lt;/p&gt;
&lt;p&gt;Because software doesn't get attacked according to your benchmark.&lt;/p&gt;
&lt;p&gt;It gets attacked according to reality.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;my-own-projects-made-this-more-obvious&quot;&gt;My Own Projects Made This More Obvious&lt;/h2&gt;
&lt;p&gt;Another project I've worked on is &lt;strong&gt;Ikol&lt;/strong&gt;, a Telegram AI bot.&lt;/p&gt;
&lt;p&gt;The interesting part isn't simply getting an AI bot to answer messages.&lt;/p&gt;
&lt;p&gt;That's easy now.&lt;/p&gt;
&lt;p&gt;The interesting part is everything that happens around the model.&lt;/p&gt;
&lt;p&gt;State.&lt;/p&gt;
&lt;p&gt;Retries.&lt;/p&gt;
&lt;p&gt;Tool selection.&lt;/p&gt;
&lt;p&gt;Rate limits.&lt;/p&gt;
&lt;p&gt;External APIs.&lt;/p&gt;
&lt;p&gt;Bad responses.&lt;/p&gt;
&lt;p&gt;Wrong music results.&lt;/p&gt;
&lt;p&gt;A tool that works perfectly today and starts behaving differently tomorrow.&lt;/p&gt;
&lt;p&gt;A previous answer leaking into an unrelated conversation.&lt;/p&gt;
&lt;p&gt;Suddenly you're not really asking:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Can GPT answer this?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You're asking:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“What guarantees does the system have when everything around GPT is imperfect?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's engineering.&lt;/p&gt;
&lt;p&gt;And AI doesn't remove that layer.&lt;/p&gt;
&lt;p&gt;It makes the layer more visible.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;here-s-where-i-think-the-vibe-coding-debate-goes-wrong&quot;&gt;Here's Where I Think the Vibe Coding Debate Goes Wrong&lt;/h2&gt;
&lt;p&gt;We keep asking:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;“Is vibe coding engineering?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think that's the wrong question.&lt;/p&gt;
&lt;p&gt;A better question is:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;“Where does the engineering move when the typing moves to the model?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;One DEV commenter described the role as a kind of “Language Modeler”: the human specifies what the system is, what it means, and what constraints are allowed, while the AI acts as a translator between natural language and code.&lt;/p&gt;
&lt;p&gt;Another developer argued that the new engineering skill is orchestration: decomposing problems, directing agents, validating outputs, and knowing whether the generated system actually solves the problem.&lt;/p&gt;
&lt;p&gt;Those aren't silly arguments.&lt;/p&gt;
&lt;p&gt;They're actually the strongest argument &lt;strong&gt;for&lt;/strong&gt; AI-native engineering.&lt;/p&gt;
&lt;p&gt;And that's where the discussion gets interesting.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-new-engineer-might-write-less-code-and-understand-more&quot;&gt;The New Engineer Might Write Less Code and Understand More&lt;/h2&gt;
&lt;p&gt;Imagine two developers.&lt;/p&gt;
&lt;p&gt;Developer A writes 2,000 lines manually.&lt;/p&gt;
&lt;p&gt;Developer B generates 10,000 lines with AI.&lt;/p&gt;
&lt;p&gt;Developer B might appear more productive.&lt;/p&gt;
&lt;p&gt;But now imagine Developer A understands every abstraction in those 2,000 lines.&lt;/p&gt;
&lt;p&gt;Developer B understands only the behavior of the system at the surface.&lt;/p&gt;
&lt;p&gt;Which one is the better engineer?&lt;/p&gt;
&lt;p&gt;We don't actually know.&lt;/p&gt;
&lt;p&gt;Because the answer depends on what happens next.&lt;/p&gt;
&lt;p&gt;If nothing breaks, Developer B wins.&lt;/p&gt;
&lt;p&gt;If the product has to evolve for five years, the equation might completely reverse.&lt;/p&gt;
&lt;p&gt;And if the system is safety-critical?&lt;/p&gt;
&lt;p&gt;The cost of not understanding can become enormous.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-comment-sections-are-actually-getting-more-interesting&quot;&gt;The Comment Sections Are Actually Getting More Interesting&lt;/h2&gt;
&lt;p&gt;What's changed recently isn't that everyone agrees.&lt;/p&gt;
&lt;p&gt;It's that the arguments are getting better.&lt;/p&gt;
&lt;p&gt;One DEV commenter recently described vibe coding as:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“borrowing time from the future at a predatory interest rate.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's a brutal metaphor.&lt;/p&gt;
&lt;p&gt;But it's useful.&lt;/p&gt;
&lt;p&gt;Maybe AI doesn't remove technical debt.&lt;/p&gt;
&lt;p&gt;Maybe it makes technical debt easier to create.&lt;/p&gt;
&lt;p&gt;Another commenter pushed back on the old definition of vibe coding and argued that the real skill is &lt;strong&gt;orchestration&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That argument is compelling because software engineering has always been partly about abstraction.&lt;/p&gt;
&lt;p&gt;We stopped writing machine instructions by hand.&lt;/p&gt;
&lt;p&gt;We stopped reimplementing everything from scratch.&lt;/p&gt;
&lt;p&gt;We created frameworks.&lt;/p&gt;
&lt;p&gt;We created libraries.&lt;/p&gt;
&lt;p&gt;We created compilers.&lt;/p&gt;
&lt;p&gt;Nobody concluded that software engineering had disappeared.&lt;/p&gt;
&lt;p&gt;So why should the ability to describe software to a model be fundamentally different?&lt;/p&gt;
&lt;p&gt;Maybe it isn't.&lt;/p&gt;
&lt;p&gt;Maybe we're just adding another abstraction layer.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;but-there-s-a-trap&quot;&gt;But There's a Trap&lt;/h2&gt;
&lt;p&gt;Abstraction is powerful.&lt;/p&gt;
&lt;p&gt;Abstraction also hides things.&lt;/p&gt;
&lt;p&gt;That's the entire point.&lt;/p&gt;
&lt;p&gt;You don't need to understand how malloc works every time you create an array.&lt;/p&gt;
&lt;p&gt;You don't need to understand a CPU pipeline to write a React component.&lt;/p&gt;
&lt;p&gt;But when the abstraction breaks, someone needs to know what's underneath it.&lt;/p&gt;
&lt;p&gt;That's why I think the future developer profile becomes strangely asymmetric.&lt;/p&gt;
&lt;p&gt;You might write 20% of the code yourself.&lt;/p&gt;
&lt;p&gt;But you may need to understand 80% of what the system is doing.&lt;/p&gt;
&lt;p&gt;That sounds backwards.&lt;/p&gt;
&lt;p&gt;It isn't.&lt;/p&gt;
&lt;p&gt;It's what abstraction has always done.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-most-valuable-programmer-might-become-the-person-who-deletes-the-most-ai-code&quot;&gt;The Most Valuable Programmer Might Become the Person Who Deletes the Most AI Code&lt;/h2&gt;
&lt;p&gt;This is the part nobody likes talking about.&lt;/p&gt;
&lt;p&gt;Generation is seductive.&lt;/p&gt;
&lt;p&gt;Deletion is not.&lt;/p&gt;
&lt;p&gt;AI makes it incredibly easy to say:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Let's add one more thing.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;One more feature.&lt;/p&gt;
&lt;p&gt;One more helper.&lt;/p&gt;
&lt;p&gt;One more abstraction.&lt;/p&gt;
&lt;p&gt;One more dependency.&lt;/p&gt;
&lt;p&gt;One more component.&lt;/p&gt;
&lt;p&gt;One more agent.&lt;/p&gt;
&lt;p&gt;Until the project becomes a pile of things that individually made sense and collectively don't.&lt;/p&gt;
&lt;p&gt;The ability to say:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;“No. We don't need this.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;might become more valuable than the ability to generate it.&lt;/p&gt;
&lt;p&gt;The best engineer in an AI-heavy team may not be the person who produces the most code.&lt;/p&gt;
&lt;p&gt;It may be the person who knows which 40% should never have existed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;so-was-vibe-coding-right-&quot;&gt;So Was Vibe Coding Right?&lt;/h2&gt;
&lt;p&gt;Yes.&lt;/p&gt;
&lt;p&gt;And no.&lt;/p&gt;
&lt;p&gt;Vibe coding was right about one enormous thing:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A surprisingly small amount of traditional programming work actually requires humans to manually type every line.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;But its critics were right about another:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Removing typing does not remove responsibility.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AI can collapse the distance between an idea and a prototype.&lt;/p&gt;
&lt;p&gt;That's incredible.&lt;/p&gt;
&lt;p&gt;It can also collapse the distance between an idea and a production incident.&lt;/p&gt;
&lt;p&gt;That's considerably less incredible.&lt;/p&gt;
&lt;p&gt;The technology isn't the contradiction.&lt;/p&gt;
&lt;p&gt;Our definition of “done” is.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;maybe-this-is-what-software-engineering-has-been-becoming-all-along&quot;&gt;Maybe This Is What Software Engineering Has Been Becoming All Along&lt;/h2&gt;
&lt;p&gt;This is the historical part that I keep coming back to.&lt;/p&gt;
&lt;p&gt;Programming has spent decades moving upward:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Machine code
      ↓
Assembly
      ↓
C
      ↓
C++
      ↓
Python / Java / JavaScript
      ↓
Frameworks
      ↓
Libraries
      ↓
Declarative systems
      ↓
Natural language
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Every step removes some amount of direct control.&lt;/p&gt;
&lt;p&gt;And every step creates a new question:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;How much do you need to understand about the layer below you?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maybe AI isn't the death of programming.&lt;/p&gt;
&lt;p&gt;Maybe it's simply the point where that question becomes impossible to avoid.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-weird-future&quot;&gt;The Weird Future&lt;/h2&gt;
&lt;p&gt;I don't think the future belongs to people who refuse AI.&lt;/p&gt;
&lt;p&gt;I also don't think it belongs to people who blindly trust it.&lt;/p&gt;
&lt;p&gt;It probably belongs to the people who can move between both worlds.&lt;/p&gt;
&lt;p&gt;They can think in systems.&lt;/p&gt;
&lt;p&gt;They can specify precisely.&lt;/p&gt;
&lt;p&gt;They can delegate.&lt;/p&gt;
&lt;p&gt;They can inspect.&lt;/p&gt;
&lt;p&gt;They can debug.&lt;/p&gt;
&lt;p&gt;They can recognize when the model is confidently wrong.&lt;/p&gt;
&lt;p&gt;They can throw away generated work without feeling emotionally attached to it.&lt;/p&gt;
&lt;p&gt;And when necessary, they can still open the code and understand what is actually happening.&lt;/p&gt;
&lt;p&gt;That's a very different skill from memorizing syntax.&lt;/p&gt;
&lt;p&gt;But it's still engineering.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;one-last-thought&quot;&gt;One Last Thought&lt;/h2&gt;
&lt;p&gt;Maybe we're asking the wrong question because we're still obsessed with the old definition of a programmer.&lt;/p&gt;
&lt;p&gt;We keep looking at the screen and asking:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;“Who wrote this code?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maybe the more important question is:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;“Who understands this system well enough to be responsible for it?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Because one day, AI may genuinely write 95% of the implementation.&lt;/p&gt;
&lt;p&gt;That part is plausible.&lt;/p&gt;
&lt;p&gt;What is much harder to automate is judgment.&lt;/p&gt;
&lt;p&gt;Knowing what should exist.&lt;/p&gt;
&lt;p&gt;Knowing what shouldn't.&lt;/p&gt;
&lt;p&gt;Knowing which assumptions are dangerous.&lt;/p&gt;
&lt;p&gt;Knowing when the tests are lying by omission.&lt;/p&gt;
&lt;p&gt;Knowing when the architecture is drifting.&lt;/p&gt;
&lt;p&gt;Knowing when the fastest solution today is the slowest solution next year.&lt;/p&gt;
&lt;p&gt;And knowing when to tell the machine:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“No. Delete it. We don't need this.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That's the part I don't think vibe coding has replaced.&lt;/p&gt;
&lt;p&gt;Maybe it was never supposed to.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;sources-amp-further-reading&quot;&gt;Sources &amp;amp; Further Reading&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Andrej Karpathy — “vibe coding”&lt;/strong&gt;&lt;br&gt;
Karpathy's original February 2025 description of the practice and its deliberately hands-off workflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Simon Willison — “Will the future of software development run on vibes?”&lt;/strong&gt;&lt;br&gt;
A useful distinction between true vibe coding and AI-assisted software development where the developer still reviews and understands the result.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;METR — AI and experienced open-source developer productivity&lt;/strong&gt;&lt;br&gt;
A randomized study that found experienced developers in the studied repositories took longer with AI assistance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Management Science — Generative AI and software developers&lt;/strong&gt;&lt;br&gt;
Large-scale field experiments involving 4,867 developers found meaningful productivity gains from AI coding assistance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;METR — SWE-bench and human merge decisions&lt;/strong&gt;&lt;br&gt;
Evidence that passing automated software-engineering benchmarks is not equivalent to a maintainer deciding that a patch belongs in a real codebase.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SU S VI B E S benchmark&lt;/strong&gt;&lt;br&gt;
Research showing a major gap between functional correctness and security in agent-generated software.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DEV Community — “Vibe Coding Isn't the Problem. Calling It Engineering Is”&lt;/strong&gt;&lt;br&gt;
The article that triggered the discussion behind this piece, including the distinction between vibe coding, AI-assisted programming, and engineering accountability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My own projects:&lt;/strong&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MahanKenway/Arcane-Dice&quot;&gt;Arcane Dice&lt;/a&gt; — 3D physics dice roller with an AI dungeon-master layer.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/MahanKenway&quot;&gt;More of my work&lt;/a&gt; — experiments spanning AI, web development, games, automation, and tooling.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27135/vibe-coding-supposed-kill-software-engineering-instead-exposed-what-engineering-actual</guid>
<pubDate>Mon, 14 Sep 2026 08:57:07 +0000</pubDate>
</item>
<item>
<title>Why we only build 60-point products</title>
<link>https://coderlegion.com/27054/why-we-only-build-60-point-products</link>
<description>&lt;p&gt;There's a popular saying: either don't do it, or do it to a 100-point standard.&lt;/p&gt;
&lt;p&gt;But after building AI products for a while, I'm increasingly sure of the opposite: obsessing over the 100-point product is often the first thing that makes a founder lose money. This week's three lessons — being stingy with costs, running the flow backwards, and keeping businesses isolated — come down to one sentence: build a 60-point product that doesn't lose money, doesn't overcomplicate, and doesn't strain you.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;lesson-1-the-first-lesson-of-ai-products-is-being-stingy&quot;&gt;Lesson 1: The first lesson of AI products is being stingy&lt;/h3&gt;
&lt;p&gt;We've always said we don't build 100-point products. The same goes for features.&lt;/p&gt;
&lt;p&gt;Take resume screening. What would the ideal state look like? Every resume is analyzed by the model individually, with a separate result. That's a textbook 100-point feature. But to reach that 100 points: an HR person screening 300 resumes needs about 310 requests. One full screening consumes 2,500 credits — roughly 2.5 yuan in revenue. That loses money to grandma's house.&lt;/p&gt;
&lt;p&gt;To actually break even, we'd have to charge about 50 yuan. So ask yourself: what sucker pays 50 yuan for a one-time 300-resume screening?&lt;/p&gt;
&lt;p&gt;So when building products, you have to be a bit stingy. Stingy isn't cheap — it's cost-driven: when I save money on my side, the customer can afford it on theirs. This is how we save money together with the customer.&lt;/p&gt;
&lt;p&gt;Another example, still resume screening. In theory, we can parse any PDF format. But scanned documents require OCR, which dramatically increases overall cost. Text-based PDFs already cover 80% of resumes — consider that an unintentional lesson borrowed from DeepSeek. As for the remaining 20%: I've proven my capability, now it's the HR folks' turn to prove their budget.&lt;/p&gt;
&lt;p&gt;And here's what you may not have noticed: once you start parsing scans, it looks like broader capability, but it actually drags the whole platform toward &quot;document processing&quot; — narrower and narrower, hurting the extensibility of the entire site. Customers whose needs are refined to that degree shouldn't be on a general platform anyway; they should be on custom solutions.&lt;/p&gt;
&lt;p&gt;That's where our other business plugs in: on-premise deployment. The same capability, deployed at the customer's site, has a much better revenue-to-effort ratio than online. Online scales the volume; custom work scales the margin.&lt;/p&gt;
&lt;p&gt;Not building the 100-point product isn't a lack of ambition. It's knowing how to do the math.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;lesson-2-laziness-is-the-first-productive-force&quot;&gt;Lesson 2: Laziness is the first productive force&lt;/h3&gt;
&lt;p&gt;I have a belief: laziness is the product manager's first productive force.&lt;/p&gt;
&lt;p&gt;Every product is solving a human desire, and laziness is the most legitimate product path. You don't want to go out to eat, so you order delivery. You don't want to read through a pile of results, so you use AI.&lt;/p&gt;
&lt;p&gt;We took a detour when building resume optimization. Our first flow was: edit page → write the full resume → choose AI optimization → pick which AI optimization points to keep → write them back → print. We later changed it to: upload resume → AI auto-optimizes → fix whatever looks wrong → print.&lt;/p&gt;
&lt;p&gt;Notice where it changed?&lt;/p&gt;
&lt;p&gt;Before, it was &quot;write, write, write&quot; — write the resume, write the optimization points, write the edits. Now it's &quot;click, click, click&quot; — upload, pick, fix, print, done. And I also flipped my thinking: users come here for me to AI-optimize their resume. Why force them to confirm one by one which AI edits are good and which aren't? Just hand them the optimized result; whatever they don't like, they delete themselves.&lt;/p&gt;
&lt;p&gt;This logic applies even more in an era where AI products are popping up everywhere: clunky products always get replaced by simpler ones. It's not about having more features. It's about the user having to do less.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=13751639600541329347&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;lesson-3-the-money-you-make-fastest-may-be-the-money-you-lose-fastest&quot;&gt;Lesson 3: The money you make fastest may be the money you lose fastest&lt;/h3&gt;
&lt;p&gt;I currently have another project, powered by Claude, that brings in meaningful income. But I've never synced it with the users of my other business line.&lt;/p&gt;
&lt;p&gt;Someone might ask: users already trust you — wouldn't moving them over earn you another income stream? Logically, yes. But on my side, that only works between similar projects. Say two of your businesses both target the workplace: heavy audience overlap, moving them over is efficient. But what if one is food and the other is workplace? The audiences overlap — plenty of workplace people love food — but your capabilities don't carry over. The two businesses are two separate skins. Move them over early and the revenue comes fast. But what you took from somewhere, you can lose from the same place.&lt;/p&gt;
&lt;p&gt;We run multiple product lines to avoid putting all eggs in one basket. But if you make ten baskets and then tie them all together with rope — when they fall, how is that different from one basket?&lt;/p&gt;
&lt;p&gt;So my principle is business isolation. I run multiple lines to spread risk, not to concentrate it in a new way.&lt;/p&gt;
&lt;p&gt;Never over-trust your own product. &quot;My product can't have negative PR!&quot; &quot;I just built a small tool, what negative impact could it have?&quot; — the moment luck appears, that's where the crack shows.&lt;/p&gt;
&lt;p&gt;Does that mean zero connection is allowed? Not at all. Look at the old business's carrier — if you have a traffic-driven news site that makes money from ads anyway, and it happens to run an ad for another product of yours, users have no idea you're the same developer. That's the safest kind of connection: two subsidiaries that don't actively link, but yours is still my customer.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-takeaway&quot;&gt;The takeaway&lt;/h3&gt;
&lt;p&gt;These three lessons are actually one worldview: do the math soberly, instead of building products on emotion.&lt;/p&gt;
&lt;p&gt;Being stingy with costs is doing the math between &quot;features&quot; and &quot;revenue.&quot; Running the flow backwards is doing the math between &quot;what you think users want&quot; and &quot;what users actually want.&quot; Business isolation is doing the math between &quot;short-term money&quot; and &quot;long-term risk.&quot;&lt;/p&gt;
&lt;p&gt;Before, the biggest fear in a startup was not having enough money. Now, with AI products, the easiest mistakes are: the product is too bloated, the flow is too convoluted, the ambition is too big. And all three of those are quietly taking money out of your pocket.&lt;/p&gt;
&lt;p&gt;60 points isn't a lack of ambition. 60 points is, after doing the math, leaving your energy for what actually matters.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27054/why-we-only-build-60-point-products</guid>
<pubDate>Sun, 13 Sep 2026 11:21:57 +0000</pubDate>
</item>
<item>
<title>Vibe Coding Won't Kill Developers. It'll Kill the Middle.</title>
<link>https://coderlegion.com/25826/vibe-coding-wont-kill-developers-itll-kill-the-middle</link>
<description>&lt;p&gt;When good cameras got cheap, everyone predicted the death of professional photography. The prediction landed wrong. The low end died outright: stock libraries, cheap portraits, mass-event coverage went to anyone with a phone and a free editing app. The high end did better than ever — editorial work, photojournalism with access nobody else had, an aesthetic you could not reproduce by buying the same gear. The damage landed in the middle. Small weddings, corporate headshots, real estate listings, the steady unglamorous bulk of the market: not extinction, compression. Prices fell, volume moved to cheaper substitutes, and the survivors climbed up or specialized out.&lt;/p&gt;
&lt;p&gt;That compression is the cleanest map I know for what AI-assisted coding is doing to software work. And this half I know from inside: two decades leading dev teams, and now building AI tooling for them.&lt;/p&gt;
&lt;h3 id=&quot;the-comfortable-half-of-the-argument&quot;&gt;The comfortable half of the argument&lt;/h3&gt;
&lt;p&gt;The reassuring version of this is everywhere right now: you were never paid to type, you were paid to think, so AI just frees you to do the valuable part. It's not wrong. It's just the half that's easy to hear. The other half is about the market, not about you.&lt;/p&gt;
&lt;p&gt;Judgment, architecture, knowing what breaks in maintenance, deciding what not to build — a model that writes plausible code on command doesn't commoditize any of that. I have watched weeks of confusion land on people who could not read what a capable model generated; the gap was never the tool, and better AI autocomplete does not close that gap.&lt;/p&gt;
&lt;p&gt;But &quot;judgment beats typing&quot; answers only a question about skill and dodges the question about market structure. AI doesn't replace developers as a class; it commoditizes a segment. The segment it hits first is the same one the camera hit: the middle. The junior-to-mid tier that lived on CRUD apps, simple integrations, brochure sites, the standard internal tool with a form and a table behind it. That work was always implementation against a known spec, and implementation against a known spec is exactly what a model does cheaply now.&lt;/p&gt;
&lt;p&gt;I felt this directly on a side project. I spent many months of evenings building a content pipeline on a visual no-code platform; when AI-assisted coding changed the math, I rebuilt it as proper code in a few weeks. The months were not wasted — they are why I knew exactly what to build. But the same work now costs weeks, not months.&lt;/p&gt;
&lt;h3 id=&quot;-so-the-middle-just-learns-to-think-better-&quot;&gt;&quot;So the middle just learns to think better?&quot;&lt;/h3&gt;
&lt;p&gt;This is the obvious objection, and it's worth taking seriously because the answer is where the whole thing turns.&lt;/p&gt;
&lt;p&gt;First problem: &quot;learn to think better and survive&quot; doesn't refute the thesis, it confirms it. The claim was never about the people, it's about the work. When someone in the middle develops real architectural judgment, they haven't saved the middle, they've left it. They climbed to the high end. The middle still empties out, by promotion or by exit. A wedding photographer who became a sought-after editorial shooter didn't prove the wedding market survived.&lt;/p&gt;
&lt;p&gt;Second problem: &quot;thinking better&quot; isn't a soft upgrade you bolt onto the same job. Going from implementing a spec to deciding what to build, judging tradeoffs, holding the whole system in your head, anticipating the failure that surfaces in production eight months later — that's a change in the muscle being used. Some people build it. Some won't, and some genuinely don't want to; they liked implementation and were good at it. The skill axis is real, but it doesn't pull everyone up by default.&lt;/p&gt;
&lt;p&gt;Third problem, and this is the one the reassuring posts never reach: capacity. Suppose everyone in the middle became a strong systems thinker overnight. The market still doesn't need that many architects, security specialists, performance engineers, and trusted advisors. The high end is narrow by definition, which is what makes it the high end. Premium editorial photography never had room to absorb every wedding shooter it displaced.&lt;/p&gt;
&lt;p&gt;So when people ask whether &quot;think better&quot; just means &quot;become a consultant,&quot; the honest answer is partly. The trusted technical advisor is one exit from the middle, and a good one, but not the only one. Architecture is an exit. Deep security and performance work is an exit. Complex-domain expertise — the kind where you understand the business so well the AI becomes a lever instead of a crutch — is an exit. When a prototype that should take weeks comes together in an afternoon, the speed never comes from the model. It comes from twenty years of knowing the exact problem before the first prompt. The tool doesn't create that position; it amplifies what was already there.&lt;/p&gt;
&lt;h3 id=&quot;the-honest-limit-of-the-analogy&quot;&gt;The honest limit of the analogy&lt;/h3&gt;
&lt;p&gt;I'd be selling you something if I claimed software follows photography like a law. It doesn't. Photography had roughly fixed demand; the number of weddings didn't triple because cameras got cheap. Software might. Total demand for software has grown for forty years, and cheaper production could grow it further, which means some of the displaced middle gets reabsorbed into work that didn't exist before. The wedding market never had that escape valve.&lt;/p&gt;
&lt;p&gt;So I won't tell you eighty percent of developers will be unemployed. I don't believe it, and the people who say it are guessing. The defensible claim is narrower and still uncomfortable: middle-tier work commoditizes, value migrates toward the extremes, and you should plan around that rather than hope the middle holds.&lt;/p&gt;
&lt;p&gt;For the individual, the move is to climb toward judgment, architecture, and advisory work, not to defend the commoditizing tier by getting slightly faster at it. Speed inside a shrinking band is a losing race against a tool that's cheaper than you and getting better weekly.&lt;/p&gt;
&lt;p&gt;For anyone running a technical team or a practice, this is the argument for senior-led work getting stronger. The middle is precisely the layer being liquified. Value concentrates in the people who were never doing middle work to begin with: the ones whose contribution was the system, the tradeoff, the domain, the call about what not to build. That's why this practice is senior-led and founder-run. It is not a positioning choice; it is what the map says to do.&lt;/p&gt;
&lt;p&gt;The question to sit with isn't whether you can out-think the AI. You probably can, on a good day. The question is which segment that thinking lives in, and whether that segment will still be there to stand in. Go look at the last five things you shipped. Count how many were implementation against a spec someone else wrote. That number is your exposure.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Originally published at &lt;a rel=&quot;nofollow&quot; href=&quot;https://unlockedconsulting.ai/blog/vibe-coding-wont-kill-developers-it-will-kill-the-middle&quot;&gt;unlockedconsulting.ai&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25826/vibe-coding-wont-kill-developers-itll-kill-the-middle</guid>
<pubDate>Tue, 01 Sep 2026 12:57:28 +0000</pubDate>
</item>
<item>
<title>Can a Non-Coder Become a Coder Just With AI?</title>
<link>https://coderlegion.com/25828/can-a-non-coder-become-a-coder-just-with-ai</link>
<description>&lt;p&gt;My company decided to lean into AI — to let people who had never written code build real software with it. I thought that was the right call, and I still do.&lt;/p&gt;
&lt;p&gt;The logic behind the decision seems airtight: tools like Claude Desktop are built to be accessible to non-developers. They abstract the complexity. They turn natural language into working software. But put those tools in front of a capable non-developer, and what tends to follow is weeks of confusion, cluttered repositories, and architectural decisions that look functional but rest on shaky foundations.&lt;/p&gt;
&lt;p&gt;I've watched it happen. And the question &quot;can a non-coder become a coder just with AI?&quot; has a more useful answer than yes or no. Yes, they can produce working code. No, they cannot produce maintainable code without understanding how the parts fit together.&lt;/p&gt;
&lt;h3 id=&quot;the-infrastructure-reality-check&quot;&gt;The infrastructure reality check&lt;/h3&gt;
&lt;p&gt;The non-developer gets a real developer's environment: GitHub, Python, Node.js, Visual Studio Code, a database server, an AI assistant on top. The premise is that having that setup is most of the battle. The expectation is immediate productivity.&lt;/p&gt;
&lt;p&gt;What actually happens: Git becomes the first obstacle. Branches, commits, pushes, pulls, clones — all of it opaque. The AI makes changes, generates commits, pushes to the repository. But without understanding what's being committed or why, the repository fills with stray commits mixed into legitimate work. Unexpected changes land in branches they shouldn't. The history becomes hard to follow.&lt;/p&gt;
&lt;p&gt;Then the local environment problems. Port conflicts. The UI can't reach the API because the ports aren't configured correctly. Services that have to be started, stopped, restarted. Every working session begins with fifteen minutes of troubleshooting that a developer handles automatically, by reflex, but that a non-developer has to solve consciously, from scratch, every time.&lt;/p&gt;
&lt;h3 id=&quot;the-mental-model-problem&quot;&gt;The mental model problem&lt;/h3&gt;
&lt;p&gt;The deeper problem isn't technical. The non-developer doesn't know what an API is, what a database does, where the UI ends and the backend begins. Without that mental model, every AI suggestion looks equally plausible — including the wrong ones. There's no way to evaluate the output, because there's no way to see the architecture.&lt;/p&gt;
&lt;p&gt;When the AI suggests connecting the frontend directly to the database, it gets implemented. When it recommends storing user passwords in plain text environment variables, that happens too. The AI isn't being careless. It's responding to prompts that don't include the constraints a developer would apply automatically.&lt;/p&gt;
&lt;p&gt;Here is the floor — the five things a non-technical person needs to understand before AI tools help instead of hurt. None of them is about writing code. All of them are about how the pieces relate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What a database is.&lt;/strong&gt; Information lives in a structured store, and you don't connect the front end straight to it — for the same reason you don't hand customers the keys to the warehouse.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What an API is for.&lt;/strong&gt; It's the control layer between the user and the data: it checks who's asking and enforces the rules. When the AI proposes skipping it, that alone tells you something is wrong.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What runs where.&lt;/strong&gt; Part of any app runs on the user's device and part runs on your servers. Whatever sits on the user's device, the user can see and change — so anything sensitive has to stay on your servers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What version control is for.&lt;/strong&gt; Every change has a reason, experiments stay separate from the live system, and what customers use keeps working. Lose that discipline and you lose the record of what changed and why.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where secrets live.&lt;/strong&gt; Passwords and keys belong apart from the code, and they differ between a test setup and the real one. Put them in the wrong place and they leak.&lt;/p&gt;
&lt;p&gt;These five take a few hours to learn, not months. But without them, AI tools become code generators that produce expensive technical debt.&lt;/p&gt;
&lt;h3 id=&quot;necessary-not-sufficient&quot;&gt;Necessary, not sufficient&lt;/h3&gt;
&lt;p&gt;That mental model gets you to better prompts. It doesn't get you to safe output on its own. Even with solid foundations, a non-developer using AI will still face decisions they aren't equipped to make — and left to their own judgment, they'll make those decisions anyway.&lt;/p&gt;
&lt;p&gt;The other half of the answer is a constrained environment: guardrails that make the bad decisions impossible rather than merely unlikely — schemas that can only change through migrations, endpoints that must validate input, frontends that can't hold secrets. Building that surface is its own undertaking, and a separate conversation. What matters here is that the mental model comes first. Without it, even the best guardrails are fighting a user who can't see why the rails are there.&lt;/p&gt;
&lt;h3 id=&quot;the-decision-in-front-of-a-technical-leader&quot;&gt;The decision in front of a technical leader&lt;/h3&gt;
&lt;p&gt;The ambition my company started with was the right one. The choice that actually matters comes a step later: how much infrastructure you're willing to build around the tools. That choice isn't binary.&lt;/p&gt;
&lt;p&gt;The cheapest path is raw AI tools with light training. Cheap upfront, expensive later: working prototypes that become maintenance liabilities, with technical debt compounding until someone rewrites everything properly.&lt;/p&gt;
&lt;p&gt;The middle path is structured tools with foundational training and a constrained environment. Higher upfront, lower long-term — the output is maintainable from day one because the constraints prevent the unmaintainable patterns before they happen.&lt;/p&gt;
&lt;p&gt;The third path, and often the most efficient for smaller organizations, is to keep development centralized and use AI to accelerate the team you already have, rather than distributing it across people who can't yet evaluate what it produces.&lt;/p&gt;
&lt;p&gt;The path that doesn't work is the first one, chosen in the hope it will somehow work out.&lt;/p&gt;
&lt;h3 id=&quot;the-real-question&quot;&gt;The real question&lt;/h3&gt;
&lt;p&gt;So the real question isn't whether non-coders can become coders with AI. It's whether your organization can afford the infrastructure that makes it safe — the foundational training, the constrained environment, the deployment and monitoring around it. If you can build that, then yes, non-coders can ship maintainable software with AI. If you can't, you're better off keeping development centralized and making your existing developers faster.&lt;/p&gt;
&lt;p&gt;If you do nothing else, do this: train the mental model first, in a few focused sessions, before handing out any AI tools. Five concepts, concrete examples from your own systems. The investment pays back immediately, because every prompt the user writes afterward is a better prompt. They ask for input validation instead of assuming it's optional. They name the environment variables they need instead of hardcoding credentials. They think in endpoints instead of wiring everything to everything.&lt;/p&gt;
&lt;p&gt;AI amplifies what's already there. If the user doesn't understand the basics, AI amplifies that gap straight into the systems they ship.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Originally published at &lt;a rel=&quot;nofollow&quot; href=&quot;https://unlockedconsulting.ai/blog/can-non-coder-become-coder-with-ai&quot;&gt;unlockedconsulting.ai&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25828/can-a-non-coder-become-a-coder-just-with-ai</guid>
<pubDate>Sun, 30 Aug 2026 21:19:12 +0000</pubDate>
</item>
<item>
<title>A Clean Score Is Not a Complete Scan: What AI-SLOP Detector v3.8.9 Made Visible</title>
<link>https://coderlegion.com/25440/a-clean-score-is-not-a-complete-scan-what-ai-slop-detector-v3-8-9-made-visible</link>
<description>&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/zqq7mqa8xgw97b6gblzz.png&quot; alt=&quot;A Clean Score Is Not a Complete Scan&quot;&gt;&lt;br&gt;
AI-SLOP Detector has changed substantially since v3.8.1, but the most important improvements are not simply more checks.&lt;/p&gt;
&lt;p&gt;The detector became better at distinguishing structural risk from legitimate code, better at explaining what it found, better at showing what it did &lt;strong&gt;not&lt;/strong&gt; analyze, and harder for either a human or an agent to over-interpret.&lt;/p&gt;
&lt;p&gt;That is the main story of &lt;strong&gt;v3.8.9&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The release does not replace the structural score. It puts more evidence around it.&lt;/p&gt;
&lt;p&gt;A project result can now tell you not only that its weighted deficit status is &lt;code&gt;clean&lt;/code&gt;, but also whether independent findings remain, how much of the source tree was actually analyzed, which supported files were excluded, which source types were unsupported, and whether the optional ML scorer actually participated in the run.&lt;/p&gt;
&lt;p&gt;That makes a clean result more useful because its boundary is visible.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Release boundary:&lt;/strong&gt; This article separates the tagged &lt;strong&gt;v3.8.9 release, published August 22, 2026&lt;/strong&gt;, from follow-up work on &lt;code&gt;main&lt;/code&gt;. Anything explicitly marked &lt;strong&gt;Unreleased&lt;/strong&gt; is not presented as part of v3.8.9.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-we-actually-improved-since-v3-8-1&quot;&gt;What we actually improved since v3.8.1&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/in7iz1flnedaydqgmdk6.png&quot; alt=&quot;From Detection to Dependability&quot;&gt;&lt;br&gt;
When I wrote about v3.8.1, AI-SLOP Detector had started moving beyond detection into operational review.&lt;/p&gt;
&lt;p&gt;Cleanup candidates gained confidence, action classes and evidence. Dependency manifests became part of unused-dependency analysis. Architecture review could opt into layered rules without mixing those rules into the scoring model.&lt;/p&gt;
&lt;p&gt;The releases that followed concentrated less on adding surface area and more on making those capabilities dependable.&lt;/p&gt;
&lt;p&gt;Adaptive initialization became preview-first, separating repository-specific suggestions from the decision to apply them.&lt;/p&gt;
&lt;p&gt;The Node package became a typed transport over the Python analyzer rather than a second implementation, reducing the risk of separate interfaces drifting into separate scoring systems.&lt;/p&gt;
&lt;p&gt;Human reports gained plain-language metric interpretation and deterministic Next Steps. Machine-readable output gained richer guidance for JSON, MCP and agent consumers.&lt;/p&gt;
&lt;p&gt;Cleanup semantics also became stricter. A high-deficit file is no longer sufficient evidence to label something dead code. Duplicate analysis distinguishes exact duplicates from near-identical clone clusters. Manifest analysis became more careful about standard-library imports, development dependencies, monorepo package roots and dependency/import aliases.&lt;/p&gt;
&lt;p&gt;The editor integration was tightened too. Refresh now performs a real workspace re-scan rather than merely repainting cached state. Removed or renamed files no longer linger in the sidebar, findings open the exact path rather than matching only a basename, and Quick Fix configuration writes avoid duplicate entries.&lt;/p&gt;
&lt;p&gt;These are not dramatic new metrics.&lt;/p&gt;
&lt;p&gt;They are the kinds of changes that make an existing detector more dependable in everyday use.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;false-positive-control-became-an-engineering-feature&quot;&gt;False-positive control became an engineering feature&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/31oez6lbey6uo3lre6zi.png&quot; alt=&quot;Strictness ≠ Flagging Everything&quot;&gt;&lt;br&gt;
Using the detector across more repository shapes exposed an important problem: strictness cannot simply mean flagging more things.&lt;/p&gt;
&lt;p&gt;v3.8.7 tightened several boundaries where legitimate code could resemble the structural patterns the detector was designed to catch.&lt;/p&gt;
&lt;p&gt;Runtime dependency accounting was corrected around &lt;code&gt;TYPE_CHECKING&lt;/code&gt;. Vocabulary tables stopped creating artificial jargon inflation. React and TSX structures stopped looking like callback hell merely because they contained nested braces and object literals.&lt;/p&gt;
&lt;p&gt;Monorepo package discovery improved. Dependency/import aliases such as &lt;code&gt;grpcio -&amp;gt; grpc&lt;/code&gt; and &lt;code&gt;pyyaml -&amp;gt; yaml&lt;/code&gt; became recognizable. Similar property accessors stopped being grouped into clone clusters simply because their implementation shape was intentionally repetitive.&lt;/p&gt;
&lt;p&gt;Clone grouping itself became more conservative. Instead of allowing a loose chain of pairwise similarities to form a large group, the detector now requires a stronger mutual-similarity relationship and constrains size differences.&lt;/p&gt;
&lt;p&gt;During that false-positive reduction pass, the detector's own repository moved from eight deficit files to three, while its weighted deficit score moved from &lt;code&gt;9.3892&lt;/code&gt; to &lt;code&gt;6.4186&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Those numbers are useful regression evidence for the known repository.&lt;/p&gt;
&lt;p&gt;They are not an external accuracy benchmark.&lt;/p&gt;
&lt;p&gt;The more important outcome is that the discovered cases became explicit regression boundaries future versions are expected to preserve.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;v3-8-9-makes-the-scan-boundary-visible&quot;&gt;v3.8.9 makes the scan boundary visible&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/e64hheygp4q7trc02amj.png&quot; alt=&quot;The Problem with “Clean”&quot;&gt;&lt;/p&gt;
&lt;p&gt;The largest conceptual improvement in v3.8.9 is that a project result now carries evidence about its own scope.&lt;/p&gt;
&lt;p&gt;Previously, an aggregate result could dominate the interpretation:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-properties&quot;&gt;overall_status = clean
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That value is still useful. It tells you that the weighted structural deficit for the analyzed result falls below the applicable project threshold.&lt;/p&gt;
&lt;p&gt;But it answers only one question.&lt;/p&gt;
&lt;p&gt;v3.8.9 makes several other questions first-class.&lt;/p&gt;
&lt;p&gt;The project JSON now exposes &lt;code&gt;finding_summary&lt;/code&gt;, &lt;code&gt;scan_coverage&lt;/code&gt;, and &lt;code&gt;ml_scoring&lt;/code&gt; alongside &lt;code&gt;overall_status&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/lie2bilwv0x97k9bvb6e.png&quot; alt=&quot;The Project Result Contract&quot;&gt;&lt;br&gt;
An illustrative result looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;overall_status&quot;: &quot;clean&quot;,

  &quot;finding_summary&quot;: {
    &quot;total&quot;: 3,
    &quot;affected_files&quot;: 2,
    &quot;severity&quot;: {
      &quot;critical&quot;: 0,
      &quot;high&quot;: 1,
      &quot;medium&quot;: 2,
      &quot;low&quot;: 0
    },
    &quot;score_semantics&quot;: &quot;independent_of_weighted_deficit_status&quot;
  },

  &quot;scan_coverage&quot;: {
    &quot;analyzed&quot;: {
      &quot;total&quot;: 84,
      &quot;python&quot;: 72,
      &quot;javascript&quot;: 9,
      &quot;go&quot;: 3
    },
    &quot;excluded&quot;: {
      &quot;total&quot;: 18
    },
    &quot;unsupported&quot;: {
      &quot;total&quot;: 4
    }
  },

  &quot;ml_scoring&quot;: {
    &quot;status&quot;: &quot;disabled&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The numbers above are illustrative. The field structure reflects the current project-result contract.&lt;/p&gt;
&lt;p&gt;The four fields answer different questions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;overall_status&lt;/code&gt; describes the measured weighted deficit.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;finding_summary&lt;/code&gt; shows independent pattern findings that may still deserve review.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scan_coverage&lt;/code&gt; describes the analysis universe: what was analyzed, what was intentionally excluded, and what source types were recognized but unsupported.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ml_scoring&lt;/code&gt; tells a downstream consumer whether the optional ML capability was available, disabled or unavailable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This gives &lt;code&gt;clean&lt;/code&gt; a more precise meaning:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;clean within the measured structural scoring boundary.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It does not silently mean zero findings, universal language coverage, successful execution of every optional capability, or semantic correctness.&lt;/p&gt;
&lt;p&gt;That distinction is now represented in the output contract rather than left to interpretation.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-include-tests-now-has-a-narrower-meaning&quot;&gt;&lt;code&gt;-include-tests&lt;/code&gt; now has a narrower meaning&lt;/h3&gt;
&lt;p&gt;Scope visibility also required tightening the behavior around test inclusion.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;slop-detector scan . --include-tests
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;does not mean “ignore every exclusion and scan everything.”&lt;/p&gt;
&lt;p&gt;It removes the detector's built-in test-file exclusions.&lt;/p&gt;
&lt;p&gt;User-configured ignores remain active. Dependency directories and build artifacts remain excluded.&lt;/p&gt;
&lt;p&gt;That makes the option more predictable: expand the normal test boundary without discarding explicit repository policy or artifact exclusions.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;capability-absence-is-now-evidence&quot;&gt;Capability absence is now evidence&lt;/h3&gt;
&lt;p&gt;The optional ML scorer exposed a similar problem.&lt;/p&gt;
&lt;p&gt;The deterministic scanner should continue to work even when the ML layer cannot. ML is a secondary signal, not a prerequisite for the core score.&lt;/p&gt;
&lt;p&gt;But a missing secondary capability should not disappear silently.&lt;/p&gt;
&lt;p&gt;v3.8.9 therefore carries ML availability into the result.&lt;/p&gt;
&lt;p&gt;A run with no configured model can report:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-properties&quot;&gt;ml_scoring.status = disabled
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A model or dependency that exists but cannot be loaded can report:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-properties&quot;&gt;ml_scoring.status = unavailable
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;with a reason attached.&lt;/p&gt;
&lt;p&gt;That distinction matters particularly for machine consumers. An agent reading JSON no longer needs to infer whether the optional scorer actually executed simply because the main scan completed.&lt;/p&gt;
&lt;p&gt;The deterministic path survives.&lt;/p&gt;
&lt;p&gt;The missing capability remains visible.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;discovery-is-checked-before-acceleration-is-trusted&quot;&gt;Discovery is checked before acceleration is trusted&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/3cemwelxu5fjfsav1ntt.png&quot; alt=&quot;Trust, but Verify&quot;&gt;&lt;br&gt;
AI-SLOP Detector can optionally use a Rust helper for faster project discovery.&lt;/p&gt;
&lt;p&gt;That optimization created another trust boundary.&lt;/p&gt;
&lt;p&gt;If the accelerated walker and the Python discovery path disagree about which files exist, every downstream score is operating on a different input universe.&lt;/p&gt;
&lt;p&gt;The current implementation therefore compares accelerated discovery against root-relative Python discovery. If they disagree, the detector uses the Python fallback rather than silently trusting the faster path.&lt;/p&gt;
&lt;p&gt;This is a small architectural detail with a large consequence:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;correct scoring over the wrong file set is still the wrong result.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Discovery itself belongs in the evidence chain.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;strictness-without-pretending-certainty&quot;&gt;Strictness without pretending certainty&lt;/h3&gt;
&lt;p&gt;AI-SLOP Detector is intentionally strict about structures that often accompany generated-code debt: placeholder implementations, suspicious repetition, disconnected dependencies, fake-complete functions and other forms of plausible-looking incompleteness.&lt;/p&gt;
&lt;p&gt;Maximum sensitivity, however, is not the objective.&lt;/p&gt;
&lt;p&gt;A detector that marks every repetitive structure or unusual dependency relationship as suspicious quickly becomes noise.&lt;/p&gt;
&lt;p&gt;The current policy is therefore to treat false positives as reproducible engineering problems. Legitimate structures can become regression fixtures or strictness cases. Explicit suppressions remain visible rather than rewriting history, and cleanup confidence is treated as prioritization evidence rather than automatic permission to delete or rewrite code.&lt;/p&gt;
&lt;p&gt;The opposite boundary matters as well.&lt;/p&gt;
&lt;p&gt;Static structure cannot establish semantic correctness.&lt;/p&gt;
&lt;p&gt;Code may look structurally healthy and still implement the wrong behavior. Some plausible-looking failures will remain outside the detector's observable signal space.&lt;/p&gt;
&lt;p&gt;That is why AI-SLOP Detector is intended to complement runtime tests, conventional linters and human review rather than replace them.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;release-verification-scope&quot;&gt;Release verification scope&lt;/h3&gt;
&lt;p&gt;At the v3.8.9 release boundary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;python -m pytest -q&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Result:&lt;/strong&gt; &lt;code&gt;472 passed&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope:&lt;/strong&gt; the repository's Python regression suite at the release commit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;This verifies:&lt;/strong&gt; contract preservation and known regression coverage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;This does not verify:&lt;/strong&gt; precision/recall across independent repositories, complete language coverage, or external governance validity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A separate target-repository assessment also provided regression context: the target test suite remained green during the assessment.&lt;/p&gt;
&lt;p&gt;That evidence is useful operationally because it helps show that the assessment did not leave the reviewed target in an obvious regression state.&lt;/p&gt;
&lt;p&gt;It is not treated as evidence of AI-SLOP Detector's precision or recall.&lt;/p&gt;
&lt;p&gt;Passing regression tests establish something real. They should not be made to establish something they were never designed to measure.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;reproduce-the-v3-8-9-result-contract&quot;&gt;Reproduce the v3.8.9 result contract&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/m6ax4oesnpdynhq180j8.png&quot; alt=&quot;Pin the Boundary&quot;&gt;&lt;/p&gt;
&lt;p&gt;Reproducibility starts by pinning the release.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install &quot;ai-slop-detector==3.8.9&quot;

slop-detector scan . --json --output slop.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Using &lt;code&gt;==3.8.9&lt;/code&gt; matters here. A command such as &lt;code&gt;&amp;gt;=3.8.9&lt;/code&gt; could install a later release and would no longer reproduce the v3.8.9 execution boundary described in this article.&lt;/p&gt;
&lt;p&gt;For a useful first inspection, look at these fields:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;overall_status
finding_summary
scan_coverage
ml_scoring
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;They answer four different questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How did the analyzed project score?&lt;/li&gt;
&lt;li&gt;What independent findings remain?&lt;/li&gt;
&lt;li&gt;What did the detector actually analyze?&lt;/li&gt;
&lt;li&gt;Which optional ML capability was present during the run?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a more useful inspection surface than a single aggregate quality number.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-v3-8-9-improves-and-what-it-does-not-claim&quot;&gt;What v3.8.9 improves — and what it does not claim&lt;/h3&gt;
&lt;p&gt;v3.8.9 materially improves scope accounting, finding visibility, false-positive boundaries, discovery reliability and machine-readable evidence.&lt;/p&gt;
&lt;p&gt;Those improvements are useful now.&lt;/p&gt;
&lt;p&gt;They make the detector easier to integrate into CI and agent workflows, easier to inspect when a result looks surprising, and less likely to encourage a reviewer to treat one summary label as the complete story.&lt;/p&gt;
&lt;p&gt;The project still does not claim that its structural score has been independently validated across external repositories.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/8vgortwdmqdk36riaqkx.png&quot; alt=&quot;Engineering Value vs. Statistical Validity&quot;&gt;&lt;br&gt;
That is a separate research question.&lt;/p&gt;
&lt;p&gt;The current validation boundary leaves several questions open: whether geometric aggregation performs better than simpler baselines on independent repositories, whether AST-distribution signals distinguish the intended phenomenon rather than repository-specific confounds, and whether structural coherence contributes useful signal beyond simpler measurements.&lt;/p&gt;
&lt;p&gt;Those open questions do not erase the current engineering value.&lt;/p&gt;
&lt;p&gt;They define the difference between &lt;strong&gt;a deterministic structural-risk instrument that can already produce inspectable evidence&lt;/strong&gt; and &lt;strong&gt;a detector whose general statistical validity has been independently established&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;AI-SLOP Detector is currently the former.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-would-change-our-mind-&quot;&gt;What would change our mind?&lt;/h3&gt;
&lt;p&gt;A stronger external-validation claim would require evidence of a different kind.&lt;/p&gt;
&lt;p&gt;The detector configuration and thresholds should be frozen before evaluation. Repository selection should be independent of the project. Ground-truth review should be blinded from detector output where practical. Precision and recall should be measured directly, and the detector should be compared with simpler baselines under the same conditions.&lt;/p&gt;
&lt;p&gt;Thresholds should also be evaluated rather than treated as correct simply because they are deterministic.&lt;/p&gt;
&lt;p&gt;If that evidence eventually supports a stronger claim, the claim can change with it.&lt;/p&gt;
&lt;p&gt;Until then, the current boundary is intentional.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;one-development-change-remains-outside-v3-8-9&quot;&gt;One development change remains outside v3.8.9&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;At publication time&lt;/strong&gt;, &lt;code&gt;main&lt;/code&gt; also contains an &lt;strong&gt;Unreleased&lt;/strong&gt; architectural refactor that separates the Python analysis core into focused scoring, topology and project-aggregation modules while preserving the existing CLI and result contracts.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;core.py&lt;/code&gt; remains a compatibility facade, with responsibilities moving into:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;core_scoring.py
core_topology.py
core_project.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That work addresses maintainability of the implementation, but it is not being retroactively presented as part of v3.8.9.&lt;/p&gt;
&lt;p&gt;Release state and development state are separate.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-changed-most&quot;&gt;What changed most&lt;/h3&gt;
&lt;p&gt;The v3.8.1 article argued that when code generation becomes cheap, structural trust becomes expensive.&lt;/p&gt;
&lt;p&gt;The releases since then made that argument more concrete.&lt;/p&gt;
&lt;p&gt;AI-SLOP Detector now has stronger cleanup semantics, tighter false-positive control, more reliable editor state, richer machine-readable output, explicit scan coverage, explicit ML capability state and a verified fallback when accelerated discovery disagrees with the canonical path.&lt;/p&gt;
&lt;p&gt;The result is not simply a detector with more features.&lt;/p&gt;
&lt;p&gt;It is a detector that tells you more about &lt;strong&gt;why its result should be read the way it is&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;AI-SLOP Detector v3.8.9 does not try to turn a structural score into a universal verdict. It makes that score more useful by showing the evidence around it: what was found, what was analyzed, what was excluded, and which capabilities actually participated in the run.&lt;/p&gt;
&lt;p&gt;That makes the detector easier to inspect, easier to integrate into automated workflows, and harder to over-interpret.&lt;/p&gt;
&lt;p&gt;External validation remains a separate step.&lt;/p&gt;
&lt;p&gt;The product can still provide useful structural evidence before that step is complete — as long as the boundary stays visible.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;AI-SLOP Detector:&lt;/strong&gt; &lt;code&gt;v3.8.9&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stable release:&lt;/strong&gt; August 22, 2026&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/flamehaven01/AI-SLOP-Detector&quot;&gt;flamehaven01/AI-SLOP-Detector&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;v3.8.9 release/tag:&lt;/strong&gt; v3.8.9&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release changelog:&lt;/strong&gt; CHANGELOG.md at v3.8.9&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Validation boundary:&lt;/strong&gt; docs/VALIDATION.md&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25440/a-clean-score-is-not-a-complete-scan-what-ai-slop-detector-v3-8-9-made-visible</guid>
<pubDate>Wed, 26 Aug 2026 12:22:18 +0000</pubDate>
</item>
<item>
<title>Two Lessons from Building AI Resume Tools and Choosing Platforms</title>
<link>https://coderlegion.com/25170/two-lessons-from-building-ai-resume-tools-and-choosing-platforms</link>
<description>&lt;p&gt;This week's build log covers two products and one decision framework. They look unrelated, but together they answer the two questions every founder faces: how to build the right product, and where to show up.&lt;/p&gt;
&lt;p&gt;Lesson 1: AI Resume Tools Are Not About &quot;Rewriting&quot;&lt;br&gt;
Most AI resume tools just make your experience sound better. But here's what HR actually cares about: does your experience match this specific role?&lt;/p&gt;
&lt;p&gt;So we built a different kind of AI resume builder. Its goal isn't to generate a &quot;looks impressive&quot; resume — it's to optimize your content for a target position.&lt;/p&gt;
&lt;p&gt;The flow is simple: upload your PDF resume (text-based PDFs only for now), then tell the AI what role you're applying for.&lt;/p&gt;
&lt;p&gt;Same experience, different roles. Applying for content operations? The AI focuses on content strategy, user growth, channel management. Applying for product operations? It highlights requirements analysis, project collaboration, data skills. Different roles need different stories.&lt;/p&gt;
&lt;p&gt;Once the analysis is done, the optimized result opens in an editor. You can see what the AI changed, why it changed it, and your match score for the target role. Don't like a change? Roll it back. Your resume, your control.&lt;/p&gt;
&lt;p&gt;When you're done, you can optionally let it enter the talent pool. Then download the PDF — a resume optimized for the job you want.&lt;/p&gt;
&lt;p&gt;The tool is in beta. Approved users get 600 credits daily. Beta participants get lifetime monthly credits — 3 free AI resume builds.&lt;/p&gt;
&lt;p&gt;4en.png&lt;/p&gt;
&lt;p&gt;Lesson 2: AI Resume Screening — Save HR from the Grind&lt;br&gt;
Every HR person knows this pain: a job posting goes live, and the resumes pour in. Open, scan, judge — repeat dozens or hundreds of times. The first pass is the most time-consuming.&lt;/p&gt;
&lt;p&gt;So we built an AI resume screener to help companies get through the first round faster.&lt;/p&gt;
&lt;p&gt;Use it the same way. Enter the target role and job description first — this is critical because the AI uses it to evaluate candidate fit. Then upload candidate resumes. Batch upload is supported.&lt;/p&gt;
&lt;p&gt;Upload done? The AI starts analyzing. Leave the page, come back later.&lt;/p&gt;
&lt;p&gt;The final output: every resume gets a match score. The top 10 candidates get a deeper AI analysis. Multiple layers of judgment to reduce the chance of a single bad call.&lt;/p&gt;
&lt;p&gt;We also take data security seriously. By default, the tool doesn't read private information from resumes. Efficiency gains shouldn't come at the cost of trust.&lt;/p&gt;
&lt;p&gt;The screener is also in beta. Beta participants get lifetime monthly credits — 3 rounds of screening 50 resumes each. We'll iterate based on early feedback.&lt;/p&gt;
&lt;p&gt;Product direction is set. Tools are built. But there's one more question — and it might matter more than the product itself.&lt;/p&gt;
&lt;p&gt;Lesson 3: Not All Traffic Is Worth Chasing&lt;br&gt;
When I started making content, my thinking was simple: post everywhere. Ten platforms isn't enough? Try twenty.&lt;/p&gt;
&lt;p&gt;Turns out, that's wrong.&lt;/p&gt;
&lt;p&gt;Some platforms have no traffic. Some have unstable rules. So I started rethinking: a content platform isn't just a traffic channel — it's where your assets live.&lt;/p&gt;
&lt;p&gt;Traffic matters, of course. It validates whether your content is valuable, whether there's a market, whether your brand has a chance. So step one is finding where people actually like your content.&lt;/p&gt;
&lt;p&gt;But after traffic, there's a second question: stability.&lt;/p&gt;
&lt;p&gt;Most people only look at how many views a platform can bring. Few ask: can I build on this platform long-term?&lt;/p&gt;
&lt;p&gt;Some platforms are clear: &quot;no external links&quot; — fine, play by the rules. You know where the boundaries are. But others? Rules are vague. Allowed today, restricted tomorrow. You invest months, then your account vanishes.&lt;/p&gt;
&lt;p&gt;For a personal brand, that's a huge risk. Because in the content era, you're not leaving behind a view count. You're leaving a trail of digital footprints. Search engines index them. Users see them. Partners judge you by them. A vanished account leaves an incomplete brand impression.&lt;/p&gt;
&lt;p&gt;So my platform evaluation framework came down to two questions:&lt;/p&gt;
&lt;p&gt;First, will this platform give your content a fair chance? Second, is it worth building on long-term?&lt;/p&gt;
&lt;p&gt;Traffic determines growth speed. Stability determines asset value.&lt;/p&gt;
&lt;p&gt;This applies to every content creator, not just founders. Keep the platforms that give real feedback, have clear rules, and reward long-term building. Don't chase &quot;where the traffic is&quot; blindly.&lt;/p&gt;
&lt;p&gt;Short-term traffic matters. But long-term assets matter more.&lt;/p&gt;
&lt;p&gt;The Takeaway&lt;br&gt;
Three stories this week, one thread: figure out how to reach users (resume tools as entry points), how to serve them once they arrive (resume screening as a service), and then decide where to build for the long haul.&lt;/p&gt;
&lt;p&gt;None of these steps are big. But every one is laying groundwork.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25170/two-lessons-from-building-ai-resume-tools-and-choosing-platforms</guid>
<pubDate>Sun, 23 Aug 2026 12:04:30 +0000</pubDate>
</item>
<item>
<title>Don’t Automate the Fun</title>
<link>https://coderlegion.com/23267/dont-automate-the-fun</link>
<description>&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe title=&quot;I Delegated My Thinking to AI. Now I'm Taking It Back.&quot; width=&quot;640&quot; height=&quot;360&quot; src=&quot;https://www.youtube.com/embed/mv2S-JVGa1s?feature=oembed&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;allowfullscreen&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;I approved my own pull request and felt nothing. Not proud. Just bored. And that boredom turned out to be the most useful signal I’ve gotten about AI and my own work.&lt;/p&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;For about a year I’d handed more and more of my job to AI. It worked — features shipped, they passed review, they did what the ticket asked. But if you’d stopped me and asked how any of it actually worked, or why it was built this way and not another, I’d have had to open the chat log to tell you. I wasn’t a builder anymore. I was a not-very-good reviewer of my own work.&lt;/p&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;Here’s the part nobody warns you about: over-delegating doesn’t just make your work fragile. It makes it &lt;em&gt;boring&lt;/em&gt;. The interesting part of this job was never watching code appear — it was the wrestling, the figuring-out, the moment a messy problem clicks into a shape in your head. I’d automated away exactly that. I’d automated away the fun.&lt;/p&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;My first instinct for climbing back was wrong: use &lt;em&gt;less&lt;/em&gt; AI. That’s not it. I didn’t want to go slower, and the speed is real. The problem was never &lt;em&gt;how much&lt;/em&gt; AI I was using. It was that I’d taken my hands off the work and let the machine carry it wherever it drifted. The fix wasn’t less. It was flipping who leads.&lt;/p&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;Me out front doing the thinking — the understanding, the decisions, the trade-offs, the design. The model right behind it, amplifying: fetching what I don’t know, pressure-testing what I do, turning my decisions into working code faster than I could alone. Same tool. Same speed. Opposite posture. And a workday went back to feeling like &lt;em&gt;solving&lt;/em&gt; something instead of &lt;em&gt;supervising&lt;/em&gt; something.&lt;/p&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;This isn’t an anti-AI video. It’s the opposite of using less. It’s about keeping your hands on the one part that was ever really yours.&lt;/p&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;If you want the practical version, the companion piece turns this into an actual workflow: &lt;a rel=&quot;nofollow&quot; href=&quot;https://sudoish.com/delegated-my-thinking-to-ai-taking-it-back/&quot;&gt;I Delegated My Thinking to AI. Now I’m Taking It Back.&lt;/a&gt; — ten steps from problem to ship, built around &lt;em&gt;I think, AI fetches&lt;/em&gt;. And underneath both of them sits &lt;a rel=&quot;nofollow&quot; href=&quot;https://sudoish.com/the-impossible/&quot;&gt;The Impossible&lt;/a&gt;, on what a skateboard trick filmed at 1000 frames per second taught me about the part of the job that was always ours.&lt;/p&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;Don’t automate the fun. Automate everything around it.&lt;/p&gt;
&lt;p&gt;The post &lt;a rel=&quot;nofollow&quot; href=&quot;https://sudoish.com/dont-automate-the-fun/&quot;&gt;Don’t Automate the Fun&lt;/a&gt; appeared first on &lt;a rel=&quot;nofollow&quot; href=&quot;https://sudoish.com&quot;&gt;sudoish&lt;/a&gt;.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/23267/dont-automate-the-fun</guid>
<pubDate>Wed, 22 Jul 2026 16:40:17 +0000</pubDate>
</item>
<item>
<title>The Hidden Cost of AI Vibe Coding</title>
<link>https://coderlegion.com/23134/the-hidden-cost-of-ai-vibe-coding</link>
<description>&lt;p&gt;AI has completely changed how we build software.&lt;/p&gt;
&lt;p&gt;Need a login page?&lt;/p&gt;
&lt;p&gt;AI can generate it.&lt;/p&gt;
&lt;p&gt;Need a REST API?&lt;/p&gt;
&lt;p&gt;Done.&lt;/p&gt;
&lt;p&gt;Need an entire SaaS boilerplate?&lt;/p&gt;
&lt;p&gt;Just ask.&lt;/p&gt;
&lt;p&gt;It feels like software development has become incredibly fast.&lt;/p&gt;
&lt;p&gt;But there's a hidden cost that many developers don't notice...&lt;/p&gt;
&lt;p&gt;👉 &lt;strong&gt;AI Vibe Coding.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let's talk about it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-what-is-vibe-coding-&quot;&gt;💡 What is Vibe Coding?&lt;/h3&gt;
&lt;p&gt;Vibe Coding is when developers rely heavily on AI to generate code without fully understanding what it does.&lt;/p&gt;
&lt;p&gt;The workflow usually looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ask AI to write code&lt;/li&gt;
&lt;li&gt;Copy it&lt;/li&gt;
&lt;li&gt;Paste it&lt;/li&gt;
&lt;li&gt;Run it&lt;/li&gt;
&lt;li&gt;If it works... move on.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No deep understanding.&lt;/p&gt;
&lt;p&gt;No questioning.&lt;/p&gt;
&lt;p&gt;Just trusting the output.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-why-everyone-loves-it&quot;&gt;🚀 Why Everyone Loves It&lt;/h3&gt;
&lt;p&gt;To be fair, AI is amazing.&lt;/p&gt;
&lt;p&gt;It helps developers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build prototypes faster&lt;/li&gt;
&lt;li&gt;Learn new frameworks&lt;/li&gt;
&lt;li&gt;Reduce repetitive work&lt;/li&gt;
&lt;li&gt;Fix simple bugs&lt;/li&gt;
&lt;li&gt;Generate boilerplate code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For many tasks, it's a huge productivity boost.&lt;/p&gt;
&lt;p&gt;The problem isn't AI.&lt;/p&gt;
&lt;p&gt;The problem is using it without understanding the code it generates.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-the-hidden-costs&quot;&gt;⚠️ The Hidden Costs&lt;/h3&gt;
&lt;h4 id=&quot;1-you-stop-reading-your-own-code&quot;&gt;1. You Stop Reading Your Own Code&lt;/h4&gt;
&lt;p&gt;If AI writes most of your code, it's easy to skip reading it carefully.&lt;/p&gt;
&lt;p&gt;Until something breaks.&lt;/p&gt;
&lt;p&gt;Then you realize...&lt;/p&gt;
&lt;p&gt;You don't actually know how it works.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;2-debugging-becomes-harder&quot;&gt;2. Debugging Becomes Harder&lt;/h4&gt;
&lt;p&gt;When a bug appears, AI isn't sitting beside you.&lt;/p&gt;
&lt;p&gt;You are.&lt;/p&gt;
&lt;p&gt;If you don't understand the implementation, fixing production issues becomes much more difficult.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;3-security-risks&quot;&gt;3. Security Risks&lt;/h4&gt;
&lt;p&gt;AI can generate working code.&lt;/p&gt;
&lt;p&gt;But &quot;working&quot; doesn't always mean &quot;secure.&quot;&lt;/p&gt;
&lt;p&gt;Small mistakes like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Missing input validation&lt;/li&gt;
&lt;li&gt;Weak authentication&lt;/li&gt;
&lt;li&gt;SQL injection risks&lt;/li&gt;
&lt;li&gt;Exposed secrets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;can easily slip into production if you don't review the output.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;4-technical-debt-grows-faster&quot;&gt;4. Technical Debt Grows Faster&lt;/h4&gt;
&lt;p&gt;AI can generate features in minutes.&lt;/p&gt;
&lt;p&gt;But if every feature follows a different pattern, your codebase slowly becomes inconsistent.&lt;/p&gt;
&lt;p&gt;Months later, maintaining it becomes a challenge.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;5-learning-slows-down&quot;&gt;5. Learning Slows Down&lt;/h4&gt;
&lt;p&gt;If AI solves every problem instantly...&lt;/p&gt;
&lt;p&gt;You may stop asking &lt;em&gt;why&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;And that's where real learning happens.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-ai-should-be-your-pair-programmer&quot;&gt;🧠 AI Should Be Your Pair Programmer&lt;/h3&gt;
&lt;p&gt;The best developers don't treat AI like an autopilot.&lt;/p&gt;
&lt;p&gt;They treat it like a teammate.&lt;/p&gt;
&lt;p&gt;They ask:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Why did you choose this approach?&lt;/li&gt;
&lt;li&gt;Is there a better alternative?&lt;/li&gt;
&lt;li&gt;What are the trade-offs?&lt;/li&gt;
&lt;li&gt;Can you explain this logic?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That turns AI into a learning tool instead of just a code generator.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-the-real-skill&quot;&gt;🎯 The Real Skill&lt;/h3&gt;
&lt;p&gt;In the AI era, writing code is becoming easier.&lt;/p&gt;
&lt;p&gt;Understanding code is becoming more valuable.&lt;/p&gt;
&lt;p&gt;The developers who stand out won't be the ones who copy the fastest.&lt;/p&gt;
&lt;p&gt;They'll be the ones who can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Review AI-generated code&lt;/li&gt;
&lt;li&gt;Spot hidden issues&lt;/li&gt;
&lt;li&gt;Make better architectural decisions&lt;/li&gt;
&lt;li&gt;Know when the AI is wrong&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-final-thought&quot;&gt;💡 Final Thought&lt;/h3&gt;
&lt;p&gt;AI Vibe Coding isn't bad.&lt;/p&gt;
&lt;p&gt;Blind AI Vibe Coding is.&lt;/p&gt;
&lt;p&gt;Use AI to speed up your workflow.&lt;/p&gt;
&lt;p&gt;But don't let it replace your curiosity.&lt;/p&gt;
&lt;p&gt;Because one day, that AI-generated code will fail in production...&lt;/p&gt;
&lt;p&gt;And the only person who can fix it will be you.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;💬 &lt;strong&gt;Be honest... have you ever copied AI-generated code, watched it work, and thought, &quot;I'll understand it later&quot;? 😅&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;ai-vibecoding-softwareengineering-programming-developers-llm-coding-artificialintelligence-tech-developerlife&quot;&gt;AI #VibeCoding #SoftwareEngineering #Programming #Developers #LLM #Coding #ArtificialIntelligence #Tech #DeveloperLife&lt;/h2&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/23134/the-hidden-cost-of-ai-vibe-coding</guid>
<pubDate>Tue, 21 Jul 2026 11:08:48 +0000</pubDate>
</item>
<item>
<title>AI Didn’t Take Your Job – It Revealed It</title>
<link>https://coderlegion.com/22841/ai-didnt-take-your-job-it-revealed-it</link>
<description>&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe title=&quot;AI didn’t take your job. It revealed it.&quot; width=&quot;640&quot; height=&quot;360&quot; src=&quot;https://www.youtube.com/embed/tTxyJxV2JYc?feature=oembed&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;allowfullscreen&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;In 1982, skaters were talking about a trick that couldn’t be done. The board had to wrap vertically around your back foot — a full rotation on an axis no skateboard wants to spin on. They didn’t even bother naming it properly. They just called it the impossible.&lt;/p&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;Then Rodney Mullen did it. Decades later, physicists put a 1000-frames-per-second camera on that trick and found something that genuinely changed how I think about my career as a software engineer.&lt;/p&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;Because remove the human, and the board reverts to what it naturally wants to do — the average, the probable, the thing it’s done a thousand times. That’s the machine we’re all working with. An LLM without your hands on it falls back to the statistically dominant answer. The foot on the board is the judgment: the design, the trade-offs, knowing what’s worth building at all. And it was never the typing.&lt;/p&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;That’s what this video is about — the quiet crisis in our profession that isn’t really about AI taking jobs, but about identity, and what a skateboard trick from 1982 taught me about the part of the job that was always ours.&lt;/p&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;If you want to go deeper, two companion pieces sit underneath this one: &lt;a rel=&quot;nofollow&quot; href=&quot;https://sudoish.com/delegated-my-thinking-to-ai-taking-it-back/&quot;&gt;I Delegated My Thinking to AI. Now I’m Taking It Back.&lt;/a&gt; on rebuilding a workflow around &lt;em&gt;I think, AI fetches&lt;/em&gt; — and &lt;a rel=&quot;nofollow&quot; href=&quot;https://sudoish.com/the-developer-identity-crisis/&quot;&gt;The Developer Identity Crisis&lt;/a&gt; on why the ground felt like it disappeared in the first place.&lt;/p&gt;
&lt;p class=&quot;wp-block-paragraph&quot;&gt;Keep your foot on the board. That’s the job now. It kind of always was.&lt;/p&gt;
&lt;p&gt;The post &lt;a rel=&quot;nofollow&quot; href=&quot;https://sudoish.com/the-impossible/&quot;&gt;AI Didn’t Take Your Job – It Revealed It&lt;/a&gt; appeared first on &lt;a rel=&quot;nofollow&quot; href=&quot;https://sudoish.com&quot;&gt;sudoish&lt;/a&gt;.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/22841/ai-didnt-take-your-job-it-revealed-it</guid>
<pubDate>Thu, 16 Jul 2026 17:44:14 +0000</pubDate>
</item>
<item>
<title>The Vibe Coding Revolution: Building Your First AI Application with Google AI Studio and Antigravity</title>
<link>https://coderlegion.com/21239/vibe-coding-revolution-building-your-first-application-with-google-studio-antigravity</link>
<description>&lt;p&gt;&lt;em&gt;&quot;We're entering an era where the hardest part of software development isn't writing code—it's knowing what to build.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The AI landscape has changed dramatically over the last year.&lt;/p&gt;
&lt;p&gt;A few months ago, building an AI application meant stitching together APIs, setting up vector databases, managing prompts, and deploying infrastructure. Today, you can go from a blank screen to a working prototype in less than an hour.&lt;/p&gt;
&lt;p&gt;Welcome to the age of &lt;strong&gt;Vibe Coding&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It's not about abandoning software engineering. It's about accelerating creativity by letting AI handle repetitive implementation while you focus on solving real problems.&lt;/p&gt;
&lt;p&gt;And Google's latest ecosystem—&lt;strong&gt;Google AI Studio&lt;/strong&gt; and &lt;strong&gt;Antigravity&lt;/strong&gt;—is making this easier than ever.&lt;/p&gt;
&lt;p&gt;Let's explore what this revolution looks like.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;what-exactly-is-vibe-coding-&quot;&gt;What Exactly is Vibe Coding?&lt;/h2&gt;
&lt;p&gt;Vibe Coding is a development workflow where you describe your idea in natural language, iterate rapidly with AI, and refine your application through conversation rather than writing every line of code manually.&lt;/p&gt;
&lt;p&gt;Think of it like this:&lt;/p&gt;
&lt;p&gt;Instead of saying:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;Let me architect the backend first.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You say:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;Build me a dashboard that summarizes YouTube videos and lets users ask follow-up questions.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Within minutes, you have a functional prototype.&lt;/p&gt;
&lt;p&gt;AI becomes your pair programmer.&lt;/p&gt;
&lt;p&gt;You're still the architect.&lt;/p&gt;
&lt;p&gt;You're simply moving faster.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;why-this-changes-everything&quot;&gt;Why This Changes Everything&lt;/h2&gt;
&lt;p&gt;Traditional development often looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Plan architecture&lt;/li&gt;
&lt;li&gt;Create project structure&lt;/li&gt;
&lt;li&gt;Configure environments&lt;/li&gt;
&lt;li&gt;Write boilerplate&lt;/li&gt;
&lt;li&gt;Build UI&lt;/li&gt;
&lt;li&gt;Connect backend&lt;/li&gt;
&lt;li&gt;Debug integrations&lt;/li&gt;
&lt;li&gt;Deploy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With modern AI tools, many of these steps become conversational.&lt;/p&gt;
&lt;p&gt;Instead of spending hours on setup, developers spend more time experimenting.&lt;/p&gt;
&lt;p&gt;The result?&lt;/p&gt;
&lt;p&gt;More prototypes.&lt;/p&gt;
&lt;p&gt;More innovation.&lt;/p&gt;
&lt;p&gt;More products.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;google-ai-studio-your-ai-playground&quot;&gt;Google AI Studio: Your AI Playground&lt;/h2&gt;
&lt;p&gt;Google AI Studio removes much of the complexity involved in working with Gemini models.&lt;/p&gt;
&lt;p&gt;Instead of worrying about infrastructure, developers can immediately start experimenting with prompts, structured outputs, multimodal inputs, and function calling.&lt;/p&gt;
&lt;p&gt;Some capabilities include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rapid prompt testing&lt;/li&gt;
&lt;li&gt;Image understanding&lt;/li&gt;
&lt;li&gt;Video analysis&lt;/li&gt;
&lt;li&gt;Audio processing&lt;/li&gt;
&lt;li&gt;Tool calling&lt;/li&gt;
&lt;li&gt;JSON outputs&lt;/li&gt;
&lt;li&gt;Streaming responses&lt;/li&gt;
&lt;li&gt;Model comparisons&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It's essentially the fastest way to explore what's possible with Gemini.&lt;/p&gt;
&lt;p&gt;For beginners, it's an excellent learning environment.&lt;/p&gt;
&lt;p&gt;For experienced developers, it's a rapid prototyping platform.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;from-prompt-to-product&quot;&gt;From Prompt to Product&lt;/h2&gt;
&lt;p&gt;Imagine you want to build a meeting assistant.&lt;/p&gt;
&lt;p&gt;Instead of weeks of planning, your workflow becomes:&lt;/p&gt;
&lt;p&gt;Step 1:&lt;br&gt;
Upload meeting recordings.&lt;/p&gt;
&lt;p&gt;Step 2:&lt;br&gt;
Ask Gemini to summarize discussions.&lt;/p&gt;
&lt;p&gt;Step 3:&lt;br&gt;
Extract action items.&lt;/p&gt;
&lt;p&gt;Step 4:&lt;br&gt;
Generate follow-up emails.&lt;/p&gt;
&lt;p&gt;Step 5:&lt;br&gt;
Deploy.&lt;/p&gt;
&lt;p&gt;Most of the complexity disappears.&lt;/p&gt;
&lt;p&gt;Your energy shifts from implementation to product design.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;meet-antigravity-google-s-mission-control-for-ai-agents&quot;&gt;Meet Antigravity: Google's Mission Control for AI Agents&lt;/h2&gt;
&lt;p&gt;While Google AI Studio helps you build AI experiences, &lt;strong&gt;Antigravity&lt;/strong&gt; introduces a powerful new concept:&lt;/p&gt;
&lt;p&gt;Managing autonomous AI agents.&lt;/p&gt;
&lt;p&gt;Think of Antigravity as a control center where multiple AI agents collaborate on complex workflows.&lt;/p&gt;
&lt;p&gt;Instead of one giant AI prompt, you create specialized agents.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;p&gt;Research Agent&lt;/p&gt;
&lt;p&gt;↓&lt;/p&gt;
&lt;p&gt;Planning Agent&lt;/p&gt;
&lt;p&gt;↓&lt;/p&gt;
&lt;p&gt;Coding Agent&lt;/p&gt;
&lt;p&gt;↓&lt;/p&gt;
&lt;p&gt;Testing Agent&lt;/p&gt;
&lt;p&gt;↓&lt;/p&gt;
&lt;p&gt;Documentation Agent&lt;/p&gt;
&lt;p&gt;Each agent has its own responsibility.&lt;/p&gt;
&lt;p&gt;Together, they solve larger problems.&lt;/p&gt;
&lt;p&gt;This is remarkably similar to how real engineering teams operate.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;why-autonomous-agents-matter&quot;&gt;Why Autonomous Agents Matter&lt;/h2&gt;
&lt;p&gt;Single prompts eventually reach their limits.&lt;/p&gt;
&lt;p&gt;Complex applications require:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;memory&lt;/li&gt;
&lt;li&gt;planning&lt;/li&gt;
&lt;li&gt;retries&lt;/li&gt;
&lt;li&gt;external tools&lt;/li&gt;
&lt;li&gt;API integrations&lt;/li&gt;
&lt;li&gt;decision making&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Autonomous agents can:&lt;/p&gt;
&lt;p&gt;✔ Search documentation&lt;/p&gt;
&lt;p&gt;✔ Read files&lt;/p&gt;
&lt;p&gt;✔ Execute code&lt;/p&gt;
&lt;p&gt;✔ Call APIs&lt;/p&gt;
&lt;p&gt;✔ Validate outputs&lt;/p&gt;
&lt;p&gt;✔ Correct mistakes&lt;/p&gt;
&lt;p&gt;✔ Continue long-running tasks&lt;/p&gt;
&lt;p&gt;Rather than asking AI one huge question, you orchestrate multiple intelligent workers.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;building-your-first-ai-application&quot;&gt;Building Your First AI Application&lt;/h2&gt;
&lt;p&gt;Here's a practical project idea for beginners.&lt;/p&gt;
&lt;h3 id=&quot;project-smart-youtube-summarizer&quot;&gt;Project: Smart YouTube Summarizer&lt;/h3&gt;
&lt;p&gt;Users paste a YouTube URL.&lt;/p&gt;
&lt;p&gt;The application:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;extracts transcript&lt;/li&gt;
&lt;li&gt;summarizes the video&lt;/li&gt;
&lt;li&gt;identifies key insights&lt;/li&gt;
&lt;li&gt;generates study notes&lt;/li&gt;
&lt;li&gt;answers questions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now imagine extending it further.&lt;/p&gt;
&lt;p&gt;A Research Agent searches related articles.&lt;/p&gt;
&lt;p&gt;A Fact Checker validates claims.&lt;/p&gt;
&lt;p&gt;A Quiz Generator creates interview questions.&lt;/p&gt;
&lt;p&gt;A Flashcard Agent prepares revision material.&lt;/p&gt;
&lt;p&gt;Suddenly your simple summarizer becomes a complete learning platform.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-shift-from-coding-to-orchestration&quot;&gt;The Shift from Coding to Orchestration&lt;/h2&gt;
&lt;p&gt;Developers aren't becoming obsolete.&lt;/p&gt;
&lt;p&gt;Their role is evolving.&lt;/p&gt;
&lt;p&gt;Instead of writing every algorithm manually, developers now design:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;workflows&lt;/li&gt;
&lt;li&gt;prompts&lt;/li&gt;
&lt;li&gt;agents&lt;/li&gt;
&lt;li&gt;evaluation systems&lt;/li&gt;
&lt;li&gt;user experiences&lt;/li&gt;
&lt;li&gt;integrations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is orchestration.&lt;/p&gt;
&lt;p&gt;And it's becoming one of the most valuable engineering skills.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;rapid-iteration-is-the-new-superpower&quot;&gt;Rapid Iteration is the New Superpower&lt;/h2&gt;
&lt;p&gt;The biggest advantage of Vibe Coding isn't writing less code.&lt;/p&gt;
&lt;p&gt;It's testing more ideas.&lt;/p&gt;
&lt;p&gt;Imagine building five startup prototypes in a weekend.&lt;/p&gt;
&lt;p&gt;Most won't succeed.&lt;/p&gt;
&lt;p&gt;One might.&lt;/p&gt;
&lt;p&gt;That's the power of reducing friction.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;best-practices-for-vibe-coding&quot;&gt;Best Practices for Vibe Coding&lt;/h2&gt;
&lt;p&gt;Don't rely entirely on AI.&lt;/p&gt;
&lt;p&gt;Use AI to accelerate—not replace—engineering judgment.&lt;/p&gt;
&lt;p&gt;A few habits that make a huge difference:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start with small prototypes.&lt;/li&gt;
&lt;li&gt;Validate ideas before optimizing.&lt;/li&gt;
&lt;li&gt;Keep prompts modular.&lt;/li&gt;
&lt;li&gt;Test outputs thoroughly.&lt;/li&gt;
&lt;li&gt;Review generated code.&lt;/li&gt;
&lt;li&gt;Measure performance.&lt;/li&gt;
&lt;li&gt;Think about security early.&lt;/li&gt;
&lt;li&gt;Add human feedback loops.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The fastest prototype isn't always the best product.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;what-s-next-&quot;&gt;What's Next?&lt;/h2&gt;
&lt;p&gt;We're witnessing a transition similar to the rise of cloud computing.&lt;/p&gt;
&lt;p&gt;Years ago, developers stopped managing physical servers.&lt;/p&gt;
&lt;p&gt;Today, they're beginning to stop writing repetitive boilerplate.&lt;/p&gt;
&lt;p&gt;Tomorrow?&lt;/p&gt;
&lt;p&gt;They'll orchestrate intelligent systems made up of multiple collaborating AI agents.&lt;/p&gt;
&lt;p&gt;Google AI Studio lowers the barrier to experimentation.&lt;/p&gt;
&lt;p&gt;Antigravity expands what's possible with autonomous agents.&lt;/p&gt;
&lt;p&gt;Together, they represent more than new tools—they represent a new way of building software.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Vibe Coding isn't about replacing developers.&lt;/p&gt;
&lt;p&gt;It's about amplifying them.&lt;/p&gt;
&lt;p&gt;The future belongs to builders who can combine creativity, product thinking, and AI-powered development into rapid experimentation.&lt;/p&gt;
&lt;p&gt;Whether you're a student building your first app, a startup founder validating an idea, or an experienced engineer exploring autonomous agents, there's never been a better time to start.&lt;/p&gt;
&lt;p&gt;The next breakthrough application may not come from writing thousands of lines of code.&lt;/p&gt;
&lt;p&gt;It may begin with a single prompt.&lt;/p&gt;
&lt;p&gt;And that is the real revolution.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/21239/vibe-coding-revolution-building-your-first-application-with-google-studio-antigravity</guid>
<pubDate>Wed, 24 Jun 2026 03:29:22 +0000</pubDate>
</item>
<item>
<title>Vibe Coding Isn't the Problem. Not Understanding the Stack Is.</title>
<link>https://coderlegion.com/21033/vibe-coding-isnt-the-problem-not-understanding-the-stack-is</link>
<description>&lt;p&gt;I am not a developer by profession or practice. I'm a systems engineer with 20 years of experience. I have never been a developer or written any real code -- I barely wrote scripts -- but since AI came out I have come out of my comfort zone and started building again.&lt;/p&gt;
&lt;p&gt;What I see in all the &quot;vibe code everything&quot; problems happening right now is that people are developing blindly. They don't understand the full stack. They see it as frontend and backend, when the full stack actually looks more like this (very partial list, just to make the point):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Source control&lt;/li&gt;
&lt;li&gt;Frontend application layer&lt;/li&gt;
&lt;li&gt;Backend application layer&lt;/li&gt;
&lt;li&gt;API layer&lt;/li&gt;
&lt;li&gt;Authentication and authorization&lt;/li&gt;
&lt;li&gt;Database layer&lt;/li&gt;
&lt;li&gt;Cache layer&lt;/li&gt;
&lt;li&gt;File/object storage&lt;/li&gt;
&lt;li&gt;Background jobs and messaging&lt;/li&gt;
&lt;li&gt;Web server / reverse proxy&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are several other layers under that, and this is exactly why vibe coding fails -- people don't understand the stack. I have spent my entire career building the foundation and the stack that developers use, and sometimes destroy. So when I vibe code, it's different: AI is only writing the application code. I'm still building the entire stack underneath it.&lt;/p&gt;
&lt;p&gt;The other piece is knowing all the parts well enough to ask questions and push back. When the AI makes a choice, I can ask why it chose that, or whether something else would be better. I also don't open a session with &quot;build me X.&quot; I spend about 30 minutes talking through the process and the ideas first, then have Claude generate the best prompt for itself, and hand that over to Claude Code.&lt;/p&gt;
&lt;p&gt;So to be clear: vibe coding is not a bad thing. It only becomes a problem when you don't understand the foundation and just want a single siloed change made with no idea what it touches.&lt;/p&gt;
&lt;p&gt;What do you think?&lt;/p&gt;
</description>
<category>Discussions</category>
<guid isPermaLink="true">https://coderlegion.com/21033/vibe-coding-isnt-the-problem-not-understanding-the-stack-is</guid>
<pubDate>Sat, 20 Jun 2026 14:22:11 +0000</pubDate>
</item>
<item>
<title>What 30 Days of Refactoring AI-Generated Code Taught Me About Vibe Coding</title>
<link>https://coderlegion.com/18761/what-30-days-of-refactoring-ai-generated-code-taught-me-about-vibe-coding</link>
<description>&lt;h4 id=&quot;an-honest-no-hype-look-at-what-happens-when-you-let-ai-build-your-whole-app-and-then-try-to-refactor-it-&quot;&gt;An honest, no-hype look at what happens when you let AI build your whole app — and then try to refactor it.&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Photo by Steve A Johnson on Unsplash&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I spent 30 days vibe coding a web app from logo to launch using only AI — no manual code.&lt;/li&gt;
&lt;li&gt;Total spend: ~$1.45 in Claude API tokens, plus two full Claude Code sessions in one night.&lt;/li&gt;
&lt;li&gt;The app worked. The codebase didn't. I sunset the project after the AI couldn't understand its own code.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;A few months back, I started vibe coding to build a web application that helps users practice hard conversations — things like asking for a raise, prepping for an interview, or having difficult talks at work.&lt;/p&gt;
&lt;p&gt;To really test the vibe coding craze, I used AI for everything from the logo to the final publish. Here's what I learned, honestly and from my own perspective.&lt;/p&gt;
&lt;h3 id=&quot;the-experiment-building-a-real-app-with-zero-manual-code&quot;&gt;The Experiment: Building a Real App With Zero Manual Code&lt;/h3&gt;
&lt;p&gt;I decided to build a web application with no login and no paywall. Users could just jump in and test how it works. No database to save user information — all conversations and decisions are handled by Anthropic's API.&lt;/p&gt;
&lt;p&gt;And yes, before you scream it at me, I'll admit it: just another AI wrapper. :)&lt;/p&gt;
&lt;p&gt;I used Next.js paired with Vite — an obvious choice from Claude. React.js and Angular were on the table, but I went with Next since Claude recommended it.&lt;/p&gt;
&lt;p&gt;The questions are AI-generated. It's essentially a conversation between you and the AI.&lt;/p&gt;
&lt;h3 id=&quot;the-budget-how-cheap-vibe-coding-actually-is&quot;&gt;The Budget: How Cheap Vibe Coding Actually Is&lt;/h3&gt;
&lt;p&gt;My budget was very low — like, &lt;em&gt;super&lt;/em&gt; low. I spent $5 on Claude API tokens, and I shared those same tokens across a few other small projects too.&lt;/p&gt;
&lt;p&gt;For the AI voice, I just used the browser's native text-to-speech. It's a bit robotic, but it does the job.&lt;/p&gt;
&lt;h3 id=&quot;how-i-actually-used-claude-code&quot;&gt;How I Actually Used Claude Code&lt;/h3&gt;
&lt;p&gt;I spent one full night on this experiment across two complete Claude Code sessions (5 hours + 4 hours), staring at the limit screen waiting for the 5-hour reset and compacting context here and there.&lt;/p&gt;
&lt;p&gt;More than 80% of my prompts were written by me and polished with Claude Chat. I never wrote a vague prompt — not once.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sample Prompt:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Act as a Senior Full-Stack Developer and UI/UX expert.

We are going to build a [describe the app/feature, e.g., real-time cryptocurrency dashboard].

Tech Stack: [e.g., React, Tailwind CSS, and Node.js].

UX/UI Style: [e.g., A minimalist, neon-dark mode aesthetic with glassmorphism elements, inspired by cybercore design].

Key Features:
1. [Feature 1, e.g., Live ticker fetching from an API]
2. [Feature 2, e.g., Interactive drag-and-drop dashboard widgets]
3. [Feature 3, e.g., Responsive layout for mobile and desktop]

Execution Guidelines:
1. First, analyze the requirements and output a step-by-step implementation plan.
2. Wait for my approval before proceeding with the code.
3. For every file you create or modify, ensure the code follows SOLID principles and includes structured, typed error handling.
4. Before finishing your response, verify your code against my initial goals.

Let's start by outlining the implementation plan.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One user session with Claude Sonnet 4.6 cost me roughly $0.05. So in the testing phase alone, I burned about $0.95. Real users — mostly friends — burned another $0.50.&lt;/p&gt;
&lt;h3 id=&quot;day-1-reading-the-code-i-didn-t-write&quot;&gt;Day 1: Reading the Code I Didn't Write&lt;/h3&gt;
&lt;p&gt;Everything seemed fine until I sat down to actually read the code.&lt;/p&gt;
&lt;p&gt;On day one, I started noticing Claude's architectural choices. It was a Vite build alongside Next.js. I checked the README and &lt;code&gt;package.json&lt;/code&gt; — there was a Next.js version mismatch.&lt;/p&gt;
&lt;p&gt;It used Tailwind for styling, but there were a huge number of classes, many of them completely unnecessary. On top of that, it wrote custom CSS in the stylesheet for the &lt;em&gt;same&lt;/em&gt; things it had already styled with Tailwind.&lt;/p&gt;
&lt;p&gt;I opened one component and found it stuffed with redundant code — almost jargon for a simple task. Something that should've taken 10 lines was written in 45.&lt;/p&gt;
&lt;p&gt;Redundant classes were everywhere, and it leaned on &lt;code&gt;absolute&lt;/code&gt; positioning instead of using proper media queries.&lt;/p&gt;
&lt;h3 id=&quot;where-the-refactor-fell-apart&quot;&gt;Where the Refactor Fell Apart&lt;/h3&gt;
&lt;p&gt;Since I couldn't understand what the AI had written, I started refactoring it with the same AI. Even with context compacting and a &lt;code&gt;CLAUDE.md&lt;/code&gt; file in place, it lost the thread after a while. It started overthinking, made the code more complicated, and turned it even less readable.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;If I didn't know what it wrote, and it couldn't keep the code consistent — and didn't even know what it was writing — there was no path forward.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thanks to hallucinations, I now understood nothing in the codebase. I decided to stop further production and sunset the project to move on to something else.&lt;/p&gt;
&lt;h3 id=&quot;the-verdict-is-vibe-coding-worth-it-&quot;&gt;The Verdict: Is Vibe Coding Worth It?&lt;/h3&gt;
&lt;p&gt;I'm not completely against vibe coding — it's just not my cup of tea. I still use AI as a helping tool, not to build complete web applications.&lt;/p&gt;
&lt;p&gt;Here's where AI actually earns its keep in my workflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dataset generation&lt;/strong&gt; for testing projects — it's great at cooking things up.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error finding&lt;/strong&gt; — then I cross-verify with Stack Overflow and Reddit communities before implementing fixes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Boilerplate and breath-taking low-effort work&lt;/strong&gt; — the stuff that drains hours without adding value.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These tools aren't copilots. They help you here and there — but they won't build you a cool web application that lasts for years.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;If you've tried vibe coding yourself, I'd love to hear how it went. Drop a comment, and if this saved you from burning $5 the way I did, a like wouldn't hurt either.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/18761/what-30-days-of-refactoring-ai-generated-code-taught-me-about-vibe-coding</guid>
<pubDate>Sat, 23 May 2026 13:54:55 +0000</pubDate>
</item>
<item>
<title>Why Most Vibe Coded SaaS Apps Fail in Production (Even When They Work Perfectly Locally)</title>
<link>https://coderlegion.com/18326/why-most-vibe-coded-saas-apps-fail-in-production-even-when-they-work-perfectly-locally</link>
<description>&lt;p&gt;Most early-stage SaaS projects don’t fail because the idea is bad.&lt;/p&gt;
&lt;p&gt;They fail because the code was never designed for production in the first place.&lt;/p&gt;
&lt;p&gt;This is especially common in what I call “vibe coding”:&lt;/p&gt;
&lt;p&gt;Shipping fast, copying patterns, and assuming “it works” means “it’s correct”.&lt;/p&gt;
&lt;p&gt;It usually leads to silent system-level problems that only appear later.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-illusion-of-working-software&quot;&gt;The illusion of working software&lt;/h3&gt;
&lt;p&gt;A common pattern looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Authentication works&lt;/li&gt;
&lt;li&gt;APIs respond correctly&lt;/li&gt;
&lt;li&gt;UI behaves as expected&lt;/li&gt;
&lt;li&gt;No errors in development&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So everything feels “done”.&lt;/p&gt;
&lt;p&gt;But production environments expose a different reality.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;where-things-quietly-break&quot;&gt;Where things quietly break&lt;/h3&gt;
&lt;p&gt;Most issues are not obvious bugs.&lt;/p&gt;
&lt;p&gt;They are design oversights like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;insecure token handling&lt;/li&gt;
&lt;li&gt;hardcoded secrets&lt;/li&gt;
&lt;li&gt;missing validation layers&lt;/li&gt;
&lt;li&gt;trusting frontend input&lt;/li&gt;
&lt;li&gt;logging sensitive data unintentionally&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Individually, they don’t break the app.&lt;/p&gt;
&lt;p&gt;Together, they break trust in the system.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-real-problem-mindset&quot;&gt;The real problem: mindset&lt;/h3&gt;
&lt;p&gt;The issue isn’t technical ability.&lt;/p&gt;
&lt;p&gt;It’s the development approach:&lt;/p&gt;
&lt;p&gt;Build feature → verify it works → move on.&lt;/p&gt;
&lt;p&gt;Without asking:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what happens under load?&lt;/li&gt;
&lt;li&gt;what happens if logs leak?&lt;/li&gt;
&lt;li&gt;what happens if inputs are manipulated?&lt;/li&gt;
&lt;li&gt;what happens at scale?&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;production-thinking-vs-vibe-thinking&quot;&gt;Production thinking vs vibe thinking&lt;/h3&gt;
&lt;p&gt;Vibe coding focuses on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;speed&lt;/li&gt;
&lt;li&gt;output&lt;/li&gt;
&lt;li&gt;visible success&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Production engineering focuses on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;failure modes&lt;/li&gt;
&lt;li&gt;security boundaries&lt;/li&gt;
&lt;li&gt;system behavior over time&lt;/li&gt;
&lt;li&gt;controlled exposure of data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both can produce working apps.&lt;/p&gt;
&lt;p&gt;Only one produces stable SaaS products.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-changes-everything&quot;&gt;What changes everything&lt;/h3&gt;
&lt;p&gt;The shift happens when you stop asking:&lt;/p&gt;
&lt;p&gt;“Does this work?”&lt;/p&gt;
&lt;p&gt;And start asking:&lt;/p&gt;
&lt;p&gt;“Where does this break?”&lt;/p&gt;
&lt;p&gt;That single question changes how you design everything from authentication to architecture.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;final-thought&quot;&gt;Final thought&lt;/h3&gt;
&lt;p&gt;Most SaaS failures are not sudden.&lt;/p&gt;
&lt;p&gt;They are accumulated design decisions that were never revisited.&lt;/p&gt;
&lt;p&gt;Fixing that starts early, not after launch.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/18326/why-most-vibe-coded-saas-apps-fail-in-production-even-when-they-work-perfectly-locally</guid>
<pubDate>Tue, 19 May 2026 14:30:13 +0000</pubDate>
</item>
<item>
<title>AI Coding: Architecture or Archaeology?</title>
<link>https://coderlegion.com/17525/ai-coding-architecture-or-archaeology</link>
<description>&lt;p&gt;One of the loudest claims around AI coding tools is that one developer can now do the work of a whole team. Ship features in hours. Replace weeks with prompts. Move 10x faster.&lt;/p&gt;
&lt;p&gt;Well, maybe. But only if you pretend that software development is mostly typing code. It isn't.&lt;/p&gt;
&lt;p&gt;For any system more complex than basic CRUD, the hard part is not producing source files. The hard part is knowing what the source files must preserve.&lt;/p&gt;
&lt;p&gt;The model. The boundaries. The contracts. The states. The invariants. The failure modes. The tests that actually prove something. The decisions that stop the system collapsing under its own ambiguity six months later. AI does not remove that work.&lt;/p&gt;
&lt;p&gt;It can help draft it. It can challenge it. It can produce options. It can fill in boilerplate once the shape is clear. But it cannot own it.&lt;/p&gt;
&lt;p&gt;If you let the tool discover the model by generating code, you don't get architecture. You get archaeology. Later, someone has to dig through the result and work out what assumptions accidentally became real. That's not acceleration. That's debt with better autocomplete.&lt;/p&gt;
&lt;p&gt;That's the difference between using AI as a tool and letting AI smear decisions across a codebase. For production systems, modeling is not optional. Correctness is not optional. Evolvability is not optional.&lt;/p&gt;
&lt;p&gt;So no, AI coding agents do not make software engineering disappear. They make weak engineering visible faster. And in the hands of a good engineer, they can be useful. Sometimes very useful.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/17525/ai-coding-architecture-or-archaeology</guid>
<pubDate>Tue, 12 May 2026 06:20:58 +0000</pubDate>
</item>
<item>
<title>Vibe coding got you here. Now what?</title>
<link>https://coderlegion.com/17407/vibe-coding-got-you-here-now-what</link>
<description>&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Vibe coding ships fast, but it often fails to preserve the &lt;em&gt;reasoning&lt;/em&gt; behind product behaviors — and agents refactoring later will “reasonably” change things users rely on. A lightweight behavior spec (&lt;code&gt;.pbc.md&lt;/code&gt;) makes “what must happen / must not happen” explicit so future you (and future agents) know what to protect, starting with high-risk modules like billing and auth.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vibe coding works. If you've used it seriously, you know this. You describe a feature, the model drafts it, you push it. Things that used to take a day take an hour. You ship faster than you ever have.&lt;/p&gt;
&lt;p&gt;The problem isn't the speed. The problem is what gets left behind.&lt;/p&gt;
&lt;h3 id=&quot;what-left-behind-means&quot;&gt;What &quot;left behind&quot; means&lt;/h3&gt;
&lt;p&gt;When you build normally — even scrappily — the reasoning behind a decision usually ends up somewhere. In a comment, a commit message, a Slack thread, a ticket. Imperfect, but traceable.&lt;/p&gt;
&lt;p&gt;When you vibe code, you're in a flow state. You describe what you want, the model gives you something close, you adjust, you ship. The gap between intention and implementation is so small that writing it down feels redundant.&lt;/p&gt;
&lt;p&gt;Weeks later, you have a product that works but you can't fully explain why it works the way it does.&lt;/p&gt;
&lt;p&gt;Not the code — you can read the code. The &lt;em&gt;reasoning&lt;/em&gt;. Why does the cancellation flow work like this? Why is the grace period five days and not seven? Why does the export fail silently on empty results instead of returning an error?&lt;/p&gt;
&lt;p&gt;The code remembers what you built. It doesn't remember why.&lt;/p&gt;
&lt;h3 id=&quot;why-this-compounds-with-ai-coding-agents&quot;&gt;Why this compounds with AI coding agents&lt;/h3&gt;
&lt;p&gt;The original vibe coding problem — reasoning drift — is bad on its own. AI coding agents make it worse in a specific way.&lt;/p&gt;
&lt;p&gt;Agents don't just read your code. They make inferences about intent. When you ask Claude Code or Codex to refactor a module, they read the existing implementation and decide what behavior to preserve and what to change. Without explicit constraints, that decision is partly guesswork.&lt;/p&gt;
&lt;p&gt;The agent isn't being careless. It's doing exactly what you asked. But it's filling in missing context with reasonable-looking assumptions — and reasonable assumptions about code aren't the same as correct assumptions about product behavior.&lt;/p&gt;
&lt;p&gt;The result: a refactor that passes tests and breaks something real. An &quot;improvement&quot; that changes behavior your users depend on. A simplification that removes an edge case that was load-bearing.&lt;/p&gt;
&lt;p&gt;You can't blame the agent for this. The rules were never written down.&lt;/p&gt;
&lt;h3 id=&quot;the-missing-layer&quot;&gt;The missing layer&lt;/h3&gt;
&lt;p&gt;There's a layer between &quot;what the code does&quot; and &quot;what the product promises&quot; that most teams never formalize. PRDs describe intent. Tests verify implementation. Neither one captures the behavior spec — the durable record of what your product guarantees and why.&lt;/p&gt;
&lt;p&gt;For teams that have been building for years, this layer lives in accumulated memory. For vibe-coded products, it often doesn't exist at all.&lt;/p&gt;
&lt;p&gt;That's the gap. And the longer you wait to address it, the more expensive it gets.&lt;/p&gt;
&lt;h3 id=&quot;what-to-do-about-it&quot;&gt;What to do about it&lt;/h3&gt;
&lt;p&gt;You don't need to slow down to fix this. You need a format that fits the way you actually work.&lt;/p&gt;
&lt;p&gt;That's what &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/stewie-sh/pbc-spec&quot;&gt;behavior specs&lt;/a&gt; are — formally Product Behavior Contracts (PBC) — a lightweight Markdown format for capturing what your product promises to do. Not a PRD. Not tests. Not Gherkin. Just the smallest artifact that makes product reasoning explicit and version-controlled.&lt;/p&gt;
&lt;p&gt;The key is the level of abstraction. A behavior spec doesn't describe the code — that changes with every refactor. It doesn't describe the strategy — that's too vague for agents to act on. It captures the &lt;strong&gt;decision&lt;/strong&gt;: &quot;Grace period is 14 days. Not configurable per plan. No data deletion during grace.&quot; The part that stays true even if you rewrite the module from scratch.&lt;/p&gt;
&lt;p&gt;The pattern is:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;PRD explains why (temporary — dies after shipping). PBC specifies what must remain true (durable — lives as long as the product does). Code and tests prove how (changes constantly).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A &lt;code&gt;.pbc.md&lt;/code&gt; file sits in your repo. It documents behaviors, rules, edge cases, and the decisions behind them — in plain Markdown your whole team can read. It's structured enough that tools can parse it, lightweight enough that you'll actually maintain it.&lt;/p&gt;
&lt;p&gt;The goal isn't to slow down the vibe. It's to leave something behind for future you — and for every agent that touches your codebase next.&lt;/p&gt;
&lt;h3 id=&quot;start-small&quot;&gt;Start small&lt;/h3&gt;
&lt;p&gt;You don't need to spec the whole product at once. Start with the module that would cause the most damage if an agent got it wrong. Billing. Auth. Entitlements.&lt;/p&gt;
&lt;p&gt;Write down three things for each behavior: what must happen, what must not happen, and the edge cases that matter. That's it. That's your behavior spec.&lt;/p&gt;
&lt;p&gt;Vibe coding got you here. A behavior spec is how you stay here.&lt;/p&gt;
&lt;p&gt;If you want to understand the deeper problem, read &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.stewie.sh/blog/the-gap-in-your-product-knowledge&quot;&gt;The gap between what your product does and what your team thinks it does&lt;/a&gt;. For what a behavior spec actually looks like, see &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.stewie.sh/blog/what-is-a-product-behavior-contract&quot;&gt;What is a Product Behavior Contract?&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;The PBC spec is open source at &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/stewie-sh/pbc-spec&quot;&gt;github.com/stewie-sh/pbc-spec&lt;/a&gt;. Stewie is the product being built on top of it — &lt;a rel=&quot;nofollow&quot; href=&quot;https://tally.so/r/PdlkLV?plan=blog&quot;&gt;join the beta waitlist&lt;/a&gt; if you want early access.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/17407/vibe-coding-got-you-here-now-what</guid>
<pubDate>Mon, 11 May 2026 12:30:00 +0000</pubDate>
</item>
<item>
<title>PC-0005: Truth Must Be Enforced, Not Assumed</title>
<link>https://coderlegion.com/15856/pc-0005-truth-must-be-enforced-not-assumed</link>
<description>&lt;h3 id=&quot;i-executive-assertion&quot;&gt;I. Executive Assertion&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Sovereign Bureau enforces truth as a runtime condition.&lt;/strong&gt;&lt;br&gt;
Only states that satisfy constraint are admitted to the record.&lt;/p&gt;
&lt;p&gt;There is no distinction between stored data and valid data.&lt;br&gt;
A state that violates constraint is not degraded, deferred, or corrected.&lt;/p&gt;
&lt;p&gt;It is refused.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;ii-situation&quot;&gt;II. Situation&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/15803/pc-0004-governing-4-000-files-from-a-mobile-nodegraphs-on-android&quot;&gt;PC-0004&lt;/a&gt; established a self-healing system through agentic governance.&lt;br&gt;
However, self-healing without enforced boundaries permits invalid states to exist temporarily.&lt;/p&gt;
&lt;p&gt;This introduces a failure condition:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;A system may appear governed while admitting contradiction.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Such systems rely on documentation, convention, or delayed validation.&lt;br&gt;
Their records cannot be treated as authoritative.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;iii-complication&quot;&gt;III. Complication&lt;/h3&gt;
&lt;p&gt;Without deterministic enforcement:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Contradictory states coexist  &lt;/li&gt;
&lt;li&gt;Validation becomes optional  &lt;/li&gt;
&lt;li&gt;Ingestion outpaces integrity  &lt;/li&gt;
&lt;li&gt;Corruption remains undetected  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This condition is not instability.&lt;br&gt;
It is accumulation.&lt;/p&gt;
&lt;p&gt;Governance, in this state, is descriptive.&lt;br&gt;
It does not constrain reality.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;iv-resolution-constraint-sovereignty&quot;&gt;IV. Resolution: Constraint Sovereignty&lt;/h3&gt;
&lt;p&gt;The Bureau resolves this by enforcing &lt;strong&gt;Constraint Sovereignty&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;A system is sovereign only if it can refuse invalid reality.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Constraint is not advisory.&lt;br&gt;
It defines the boundary of existence within the system.&lt;/p&gt;
&lt;h4 id=&quot;constraint-classes&quot;&gt;Constraint Classes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Admissibility Constraints&lt;/strong&gt;&lt;br&gt;
Define what may enter the system boundary&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Structural Constraints&lt;/strong&gt;&lt;br&gt;
Define the required shape and datatype of each record&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Relational Constraints&lt;/strong&gt;&lt;br&gt;
Define permissible semantic relationships within the graph&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These constraints are complete.&lt;br&gt;
No valid state exists outside them.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;v-enforcement-mechanism-shacl-as-constitution&quot;&gt;V. Enforcement Mechanism: SHACL as Constitution&lt;/h3&gt;
&lt;p&gt;The Bureau encodes its law using SHACL (Shapes Constraint Language).&lt;br&gt;
The ontology is not descriptive.&lt;br&gt;
It is executable.&lt;/p&gt;
&lt;h4 id=&quot;constitutional-shapes&quot;&gt;Constitutional Shapes&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-turtle&quot;&gt;padi:VesselShape
  a sh:NodeShape ;
  sh:targetClass padi:Vessel ;
  sh:property [
    sh:path padi:hasIdentifier ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
  ] .
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-turtle&quot;&gt;padi:AssignmentShape
  a sh:NodeShape ;
  sh:targetClass padi:Vessel ;
  sh:property [
    sh:path padi:assignedTo ;
    sh:class padi:Operator ;
  ] .
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;enforcement-outcome&quot;&gt;Enforcement Outcome&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;A vessel without an identifier is not incomplete&lt;/li&gt;
&lt;li&gt;A vessel assigned outside the permitted class is not conditionally valid&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These states are not recorded.&lt;/p&gt;
&lt;p&gt;There are no partial truths in the Bureau.&lt;br&gt;
Only compliant states enter the record.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;vi-validation-system-deterministic-auditing&quot;&gt;VI. Validation System: Deterministic Auditing&lt;/h3&gt;
&lt;p&gt;Validation is continuous.&lt;br&gt;
There is no interval in which the system is unexamined.&lt;/p&gt;
&lt;p&gt;The Liaison executes a fixed audit sequence:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pre-Ingestion Gate&lt;/strong&gt;&lt;br&gt;
Non-conforming data does not cross the boundary&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conservation Pass&lt;/strong&gt;&lt;br&gt;
Only lossless normalization is permitted&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SHACL Enforcement&lt;/strong&gt;&lt;br&gt;
Full graph validation against constitutional shapes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ledger Registration&lt;/strong&gt;&lt;br&gt;
Immutable recording of validation outcomes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pre-Push Gatekeeping&lt;/strong&gt;&lt;br&gt;
Invalid states do not propagate&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This system does not approximate correctness.&lt;br&gt;
It maintains it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;vii-resulting-state-from-data-to-law&quot;&gt;VII. Resulting State: From Data to Law&lt;/h3&gt;
&lt;p&gt;Under Constraint Sovereignty:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The system does not manage data.&lt;br&gt;
It maintains law.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;system-guarantees&quot;&gt;System Guarantees&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No Invalid State Persists&lt;/strong&gt;&lt;br&gt;
Contradictory or malformed triples do not enter the record&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Full Constraint Compliance&lt;/strong&gt;&lt;br&gt;
All nodes conform to enforced structure and relation&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deterministic Lineage&lt;/strong&gt;&lt;br&gt;
Every mutation is recorded with its validation state&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;viii-architectural-implication&quot;&gt;VIII. Architectural Implication&lt;/h3&gt;
&lt;p&gt;In conventional systems, truth is inferred and revisable.&lt;/p&gt;
&lt;p&gt;In the Sovereign Bureau, truth is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Encoded&lt;/strong&gt; in constraint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluated&lt;/strong&gt; at runtime&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enforced&lt;/strong&gt; without exception&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is no semantic drift.&lt;br&gt;
There is no ambiguity.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;The record does not adapt to reality.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Reality is admitted only if it conforms to the record.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;key-takeaways&quot;&gt;Key Takeaways&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Sovereignty is the ability to refuse invalid states&lt;/li&gt;
&lt;li&gt;Constraint defines the boundary of system reality&lt;/li&gt;
&lt;li&gt;Validation is continuous and non-optional&lt;/li&gt;
&lt;li&gt;SHACL operationalizes enforceable law&lt;/li&gt;
&lt;li&gt;Truth exists only where constraint is satisfied&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;series-continuity&quot;&gt;Series Continuity&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PC-0001:&lt;/strong&gt; Deterministic Execution&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PC-0002:&lt;/strong&gt; Causal Integrity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PC-0003:&lt;/strong&gt; Governance Layer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PC-0004:&lt;/strong&gt; Agentic Governance (The Foreman)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PC-0005:&lt;/strong&gt; Constraint Sovereignty (The Laws) ← Current&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PC-0006:&lt;/strong&gt; Cryptographic Verifiability (The Seal)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;closing-record&quot;&gt;Closing Record&lt;/h3&gt;
&lt;p&gt;The system does not request correctness.&lt;br&gt;
It does not assume compliance.&lt;/p&gt;
&lt;p&gt;It admits only what satisfies constraint.&lt;/p&gt;
&lt;p&gt;Everything else remains outside the record.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/15856/pc-0005-truth-must-be-enforced-not-assumed</guid>
<pubDate>Sun, 26 Apr 2026 05:29:02 +0000</pubDate>
</item>
<item>
<title>PC-0001: The Architecture of Deterministic Systems — Execution Layer</title>
<link>https://coderlegion.com/15526/pc-0001-the-architecture-of-deterministic-systems-execution-layer</link>
<description>&lt;h3 id=&quot;taxonomy-classification&quot;&gt;Taxonomy Classification&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Domain:&lt;/strong&gt; AI Systems Architecture  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concept:&lt;/strong&gt; Deterministic Execution Systems  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abstraction Level:&lt;/strong&gt; System-level  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidence Strength:&lt;/strong&gt; Applied  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reliability Status:&lt;/strong&gt; Proposed → Validated  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Node Path:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Cognitive Systems → AI Systems Architecture → Deterministic Execution Systems&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;modern-ai-systems-generate-outputs-they-do-not-maintain-systems-&quot;&gt;Modern AI Systems Generate Outputs. They Do Not Maintain Systems.&lt;/h3&gt;
&lt;p&gt;Large language models can produce coherent responses at scale. However, they lack a fundamental property required for system reliability:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deterministic execution.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Without determinism, outputs cannot be guaranteed, reused, or validated consistently.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-hidden-failure-non-deterministic-behavior&quot;&gt;The Hidden Failure: Non-Deterministic Behavior&lt;/h3&gt;
&lt;p&gt;Consider a simple prompt:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
Input: &quot;Define system architecture&quot;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two executions:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
Run 1 → &quot;A structured framework for system components&quot;
Run 2 → &quot;A conceptual model describing system organization&quot;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Both responses are valid.&lt;/p&gt;
&lt;p&gt;Neither is &lt;strong&gt;guaranteed&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;There is no structural constraint ensuring consistency across executions.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-this-matters&quot;&gt;Why This Matters&lt;/h3&gt;
&lt;p&gt;In traditional systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The same input produces the same output  &lt;/li&gt;
&lt;li&gt;Execution paths are predictable  &lt;/li&gt;
&lt;li&gt;Results are verifiable  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In contrast, AI systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Produce probabilistic outputs  &lt;/li&gt;
&lt;li&gt;Lack enforced structure  &lt;/li&gt;
&lt;li&gt;Cannot guarantee repeatability  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This makes them &lt;strong&gt;informational tools&lt;/strong&gt;, not &lt;strong&gt;reliable systems&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-execution-layer-problem&quot;&gt;The Execution Layer Problem&lt;/h3&gt;
&lt;p&gt;The issue is not at the model level—it exists at the &lt;strong&gt;execution layer&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Current AI systems lack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Structural validation  &lt;/li&gt;
&lt;li&gt;Persistent knowledge representation  &lt;/li&gt;
&lt;li&gt;Constraint enforcement  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without these, outputs remain &lt;strong&gt;stateless artifacts&lt;/strong&gt;, not system components.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;a-minimal-deterministic-intervention&quot;&gt;A Minimal Deterministic Intervention&lt;/h3&gt;
&lt;p&gt;Determinism does not require replacing models.&lt;/p&gt;
&lt;p&gt;It requires introducing &lt;strong&gt;structure at execution time&lt;/strong&gt;.&lt;/p&gt;
&lt;h4 id=&quot;example-output-validation-python-&quot;&gt;Example: Output Validation (Python)&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def validate_output(output, schema):
    assert &quot;id&quot; in output, &quot;Missing identifier&quot;
    assert output[&quot;type&quot;] in schema[&quot;allowed_types&quot;], &quot;Invalid type&quot;
    return True
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This enforces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identity&lt;/li&gt;
&lt;li&gt;Type constraints&lt;/li&gt;
&lt;li&gt;Structural validity&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id=&quot;example-structural-query-sparql-&quot;&gt;Example: Structural Query (SPARQL)&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-sparql&quot;&gt;SELECT ?s WHERE {
  ?s &amp;lt;https://padi-standard.org/ns/core#hasJurisdiction&amp;gt; &quot;GLOBAL&quot; .
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This enables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deterministic retrieval&lt;/li&gt;
&lt;li&gt;Consistent filtering&lt;/li&gt;
&lt;li&gt;Structured knowledge access&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;embedded-taxonomy-content-level-prototype-&quot;&gt;Embedded Taxonomy (Content-Level Prototype)&lt;/h3&gt;
&lt;p&gt;This article implements a minimal taxonomy layer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Domain classification&lt;/li&gt;
&lt;li&gt;Concept mapping&lt;/li&gt;
&lt;li&gt;Node path hierarchy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These elements simulate a &lt;strong&gt;structured knowledge system&lt;/strong&gt; within standard content.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;system-level-implications&quot;&gt;System-Level Implications&lt;/h3&gt;
&lt;p&gt;With minimal structure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Outputs become &lt;strong&gt;addressable nodes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Knowledge becomes &lt;strong&gt;persistent&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Execution becomes &lt;strong&gt;constrained&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This transforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generation → Organization&lt;/li&gt;
&lt;li&gt;Responses → System components&lt;/li&gt;
&lt;li&gt;Information → Validated knowledge&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;connected-reading&quot;&gt;Connected Reading&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ontology enforcement in systems → &lt;em&gt;Article 2&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Contradiction detection and validation → &lt;em&gt;Article 3&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;prototype-access&quot;&gt;Prototype Access&lt;/h3&gt;
&lt;p&gt;A minimal executable taxonomy prototype (TTL + SHACL + validation script) is available:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;[https://peculiarlibrarian.github.io/peculiar-catalog/feed.xml[\]&lt;/p&gt;
&lt;h3 id=&quot;-1&quot;&gt;]&lt;a rel=&quot;nofollow&quot; href=&quot;https://peculiarlibrarian.github.io/peculiar-catalog/feed.xml&quot;&gt;1&lt;/a&gt;&lt;/h3&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;closing&quot;&gt;Closing&lt;/h3&gt;
&lt;p&gt;Determinism is not a model feature.&lt;/p&gt;
&lt;p&gt;It is a system property.&lt;/p&gt;
&lt;p&gt;Until AI systems enforce structure at the execution layer, they will remain generators—not systems.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt; Machine Metadata&lt;br&gt;
{&lt;br&gt;
 &quot;id&quot;: &quot;PC-0001&quot;,&lt;br&gt;
 &quot;title&quot;: &quot;The Architecture of Deterministic Systems&quot;,&lt;br&gt;
 &quot;layer&quot;: &quot;execution&quot;,&lt;br&gt;
 &quot;graph_role&quot;: &quot;root&quot;,&lt;br&gt;
 &quot;state&quot;: &quot;published&quot;,&lt;br&gt;
 &quot;depends_on&quot;: [],&lt;br&gt;
 &quot;edges_to&quot;: [&quot;PC-0002&quot;],&lt;br&gt;
 &quot;truth_anchor&quot;: &quot;DOI 10.5281/zenodo.18894084&quot;&lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;This article is part of a structured knowledge series exploring:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Knowledge Representation&lt;/li&gt;
&lt;li&gt;AI Systems Architecture&lt;/li&gt;
&lt;li&gt;Information Integrity&lt;/li&gt;
&lt;li&gt;System Design Patterns&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each piece contributes to a semantically organized, cross-linked knowledge layer.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/15526/pc-0001-the-architecture-of-deterministic-systems-execution-layer</guid>
<pubDate>Wed, 22 Apr 2026 18:44:28 +0000</pubDate>
</item>
<item>
<title>An AI Benchmark That Tests Real Coding Workflows</title>
<link>https://coderlegion.com/15189/an-ai-benchmark-that-tests-real-coding-workflows</link>
<description>&lt;p&gt;Developers face a real choice: pick a coding model or agent based on synthetic benchmarks that look great but do not predict actual project work. The problem is no longer whether models can score well on those benchmarks; it's whether those scores still mean anything.&lt;/p&gt;
&lt;p&gt;Today's benchmarks test narrow skills well, but they rarely capture the full workflow of professional development.&lt;/p&gt;
&lt;p&gt;I wanted something that tests what real development looks like: a complete SDLC cycle on a representative / realistic app, similar to how teams ship weekly. Ship-Bench is that project, open at &lt;a rel=&quot;nofollow&quot; href=&quot;http://github.com/JAgostoni/ship-bench&quot;&gt;http://github.com/JAgostoni/ship-bench&lt;/a&gt; for anyone who wants to follow along or try it themselves.&lt;/p&gt;
&lt;p&gt;Ship-Bench runs agents through five phases that match a professional SDLC: Architect, UX Designer, Planner, Developer, and Reviewer. Each phase scores out of 100 against a specific rubric, with full evidence like specs, backlogs, code, and tests.&lt;/p&gt;
&lt;p&gt;A benchmark like this needed more than a to-do app.&lt;/p&gt;
&lt;p&gt;I wanted something more substantial than a to-do list, but not so complex that results would become wildly inconsistent from run to run. I settled on a knowledge base app with editing as it leaves room for product and implementation choices while staying inside a problem space that most developers (and LLMS) already understand.&lt;/p&gt;
&lt;p&gt;That balance matters. The app is simple enough to keep the benchmark grounded, but open-ended enough to surface differences in planning, UX judgment, architecture, coding, and review quality.&lt;/p&gt;
&lt;h3 id=&quot;how-ship-bench-works&quot;&gt;How Ship-Bench Works&lt;/h3&gt;
&lt;p&gt;The first step in Ship-Bench is building a Product Brief. That brief is meant to test core product instincts before any code is written: interpreting requirements, resolving ambiguity, prioritizing scope, and making defensible implementation and UX decisions.&lt;/p&gt;
&lt;p&gt;To do that, the feature set is intentionally larger than a defined MVP. The brief includes five possible features, but only the first three are required in v1, which keeps the evaluation shorter to run while still forcing the agent to decide what to do now versus later.&lt;/p&gt;
&lt;p&gt;The feature statements focus on common product problems rather than highly specific implementation instructions. Browse articles, search content, edit knowledge, organize information. Most developers understand the shape of those problems, but the details are left open enough that the agent still has to define flows, tradeoffs, and structure. Not too dissimilar from reality.&lt;/p&gt;
&lt;p&gt;The brief also includes non-functional and technical goals meant to push toward a simple app with some future scaling intent. It asks for something easy to run locally and maintain, but also something that can support around 100 concurrent users, use current libraries and frameworks where practical, and leave room for growth without drifting into unnecessary complexity.&lt;/p&gt;
&lt;p&gt;That last part was important to me. I wanted to see whether an agent would research online for the latest frameworks and versions rather than rely only on its internal knowledge.&lt;/p&gt;
&lt;p&gt;The full Product Brief is here for anyone who wants to read it directly: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/JAgostoni/ship-bench/blob/main/docs/product-brief.md&quot;&gt;https://github.com/JAgostoni/ship-bench/blob/main/docs/product-brief.md&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;the-role-based-phases&quot;&gt;The Role-Based Phases&lt;/h3&gt;
&lt;p&gt;Once the Product Brief is in place, the benchmark moves through five specialized roles meant to mirror a real product team. Each role has a specific job, well defined output, and a handoff that feeds the next phase. The point is not only to evaluate each role on its own, but to see how well the work transfers from one stage to the next. The overall goal is to take the ambiguity of the Product Brief and turn it into concrete decisions ready for the developer.&lt;/p&gt;
&lt;h3 id=&quot;architect&quot;&gt;Architect&lt;/h3&gt;
&lt;p&gt;The Architect’s job is to turn the Product Brief into a concrete technical plan. Its main task is to make the big implementation decisions up front so the developer is not forced to solve architecture questions later in the build. That means choosing the front end and back end stack, data model, search approach, integration pattern, repo structure, local setup, and the testing and scaling considerations needed to support the brief’s goals. The output is a Technical Architecture Spec that makes the system buildable, keeps the implementation simple and maintainable, and leaves as few unresolved decisions as possible for later phases.&lt;/p&gt;
&lt;p&gt;The Architect handoff matters because it gives UX and the Planner a stable technical frame to work inside. A clear architecture reduces guesswork in the design spec and keeps the backlog grounded in choices the developer can actually implement. It is evaluated based on completeness, accuracy and recency.&lt;/p&gt;
&lt;h3 id=&quot;ux-designer&quot;&gt;UX Designer&lt;/h3&gt;
&lt;p&gt;The UX Designer’s job is to turn the Product Brief into a concrete design direction and style guide. Its task is to decide how the app should feel and how the main flows should work, including layout, navigation, component behavior, responsive behavior, visual tone, and interaction states. It also needs to define the states and handoff details that make the design implementable without extra interpretation from the developer. The output is a UX Direction Spec that takes the ambiguity of the brief and turns it into a clear, consistent interface system the developer can build from.&lt;/p&gt;
&lt;p&gt;The UX handoff translates architecture into interface decisions the Planner can sequence. Once layout, states, and component behavior are pinned down, the backlog can break the work into cleaner implementation steps. It is evaluated on completeness, quality and adherence.&lt;/p&gt;
&lt;h3 id=&quot;planner&quot;&gt;Planner&lt;/h3&gt;
&lt;p&gt;The Planner’s job is to turn the approved product and technical decisions into a sequenced implementation backlog. Its main task is not just to list work, but to break the project into right-sized iterations so the developer agent can work through it in manageable chunks without losing context. It needs to define what belongs in MVP, what comes later, what blocks what, and how each iteration can leave the codebase in a working state. The output is an Implementation Backlog with iteration files that make the work executable, sequential, and easy to review.&lt;/p&gt;
&lt;p&gt;The Planner is the main bridge between planning and building. A good backlog keeps the developer focused on one coherent slice at a time instead of forcing them to hold the whole project in working memory. It is evaluated on completeness and properly constructed iterations.&lt;/p&gt;
&lt;h3 id=&quot;developer&quot;&gt;Developer&lt;/h3&gt;
&lt;p&gt;The Developer’s job is to turn the backlog into a working MVP without drifting beyond the assigned scope. Its main task is to implement one iteration at a time, keep the codebase in a working state, and avoid introducing new unresolved design or architecture decisions midstream. It also has to follow the given tech choices, cover the testing scope defined in the brief, and handle errors cleanly so the result is stable enough to review. The output is a completed iteration summary that shows what was built, what assumptions were made, and confirms the app still runs locally.&lt;/p&gt;
&lt;p&gt;The Developer handoff is the most literal one in the benchmark: the backlog becomes code, tests, and a runnable app. Good upstream decisions should make this phase feel straightforward, while weak handoffs should show up quickly. It is evaluated on working code, adherence to spec, code quality and process completeness.&lt;/p&gt;
&lt;h3 id=&quot;reviewer&quot;&gt;Reviewer&lt;/h3&gt;
&lt;p&gt;The Reviewer’s job is to verify the delivered MVP end to end and check whether it actually meets the brief. Its main task is to test the required flows, confirm the app runs locally, review the test suite, check responsiveness and error handling, and compare the implementation against the architecture, UX, and backlog decisions. It also needs to do a light code review for basic quality signals like modularity, current dependencies, and obvious security issues. The output is a QA report with pass or fail results, defect logs, spec drift notes, and a release recommendation that tells the team whether the build is ready or needs more work.&lt;/p&gt;
&lt;p&gt;The Reviewer closes the loop by checking whether the earlier handoffs actually held up in a real implementation. It is less about originality and more about verification, which makes it the final test of whether the whole chain from brief to build worked as intended. It is evaluated against review and test completeness and depth.&lt;/p&gt;
&lt;h3 id=&quot;evaluation-framework&quot;&gt;Evaluation Framework&lt;/h3&gt;
&lt;p&gt;The evaluation itself is intentionally split between a human judge and an LLM judge. The goal is to combine two perspectives on the same deliverable, especially in the more subjective phases where rubric compliance alone is not enough. Each phase has its own evaluation file in the space, with detailed scoring criteria and pass/fail gates that keep the scoring consistent.&lt;/p&gt;
&lt;p&gt;At a high level, the framework is trying to answer two questions: did the agent do the phase well, and did the output set up the next phase cleanly. The result is less about one leaderboard number and more about whether the whole sequence of work actually resembles a real delivery process.&lt;/p&gt;
&lt;h3 id=&quot;benchmarking-like-real-work&quot;&gt;Benchmarking Like Real Work&lt;/h3&gt;
&lt;p&gt;Ship-Bench is built to feel like an actual project rather than one-off synthetic tasks. The phases move in order, and each handoff has to carry real context forward, which is much closer to how professional roles interact on a team. It can go really wrong or it can go really right.&lt;/p&gt;
&lt;p&gt;It also demands working deliverables at every stage, not just polished descriptions. The benchmark expects outputs that can be used by the next phase, whether that is a technical spec, a design direction, a backlog, or a runnable application with tests and supporting notes.&lt;/p&gt;
&lt;p&gt;That structure reflects how developers actually work: brief, decide, plan, build, review, ship. Ship-Bench is not a replacement for other benchmarks; it is a way to show what professional workflows look like when the goal is to build something real.&lt;/p&gt;
&lt;h3 id=&quot;next-steps&quot;&gt;Next Steps&lt;/h3&gt;
&lt;p&gt;Initial testing and benchmarking is already underway to test Ship-Bench itself making it more consistent and reliable.  &lt;/p&gt;
&lt;p&gt;What models and tools would you want to see?&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/15189/an-ai-benchmark-that-tests-real-coding-workflows</guid>
<pubDate>Sun, 19 Apr 2026 19:27:43 +0000</pubDate>
</item>
<item>
<title>You Think, AI Executes: The Skills That Actually Matter</title>
<link>https://coderlegion.com/14046/you-think-ai-executes-the-skills-that-actually-matter</link>
<description>&lt;p&gt;The most valuable developer skill right now isn't writing more code faster. It's learning unfamiliar codebases, building context that guides decisions, planning strategic approaches to problems, and shipping production code with confidence.&lt;/p&gt;
&lt;p&gt;I recently added &lt;code&gt;.env&lt;/code&gt; file support to &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/joerdav/xc&quot;&gt;xc&lt;/a&gt;, a Markdown-based task runner written in Go. The codebase was completely unfamiliar. I'm not a Go expert. But in 2.5 hours, I went from zero knowledge to a production-ready pull request with 84% test coverage and zero bugs in manual testing.&lt;/p&gt;
&lt;p&gt;Here's what's different: &lt;strong&gt;I didn't write a single line of code.&lt;/strong&gt; Not one. AI wrote everything—tests, implementation, integration, documentation. My role was entirely different: I questioned, I planned, I directed, I reviewed. I read the code, but I didn't write it.&lt;/p&gt;
&lt;p&gt;This isn't another &quot;I asked ChatGPT to build an app&quot; story. This is about the skills that separate developers who use AI as a force multiplier from those who just ask it to generate code. It's about onboarding fast, documenting strategically, planning thoroughly, directing execution, and reviewing confidently. The code writing? That's handled.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c1.png&quot; alt=&quot;&quot; class=&quot;wp-smiley&quot; style=&quot;height: 1em; max-height: 1em;&quot;&gt; Complete &lt;code&gt;.ai/&lt;/code&gt; folder in the working fork:&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/sudoish/xc/tree/ai-context/.ai&quot;&gt;github.com/sudoish/xc/tree/ai-context/.ai&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/17.0.2/72x72/1f500.png&quot; alt=&quot;&quot; class=&quot;wp-smiley&quot; style=&quot;height: 1em; max-height: 1em;&quot;&gt; Production-ready PR:&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/joerdav/xc/pull/167&quot;&gt;github.com/joerdav/xc/pull/167&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img src=&quot;https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png&quot; alt=&quot;&quot; class=&quot;wp-smiley&quot; style=&quot;height: 1em; max-height: 1em;&quot;&gt; The &lt;code&gt;.ai/&lt;/code&gt; folder lives in a separate &lt;code&gt;ai-context&lt;/code&gt; branch so it doesn't clutter the main codebase but remains available for reference and iteration.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;h2&gt;Why This Matters&lt;/h2&gt;&lt;br&gt;
&lt;p&gt;Most AI coding demos show you the magic: &quot;I asked ChatGPT to build X and it worked!&quot; They skip the parts that actually matter for professional development: How do you onboard to a codebase you've never seen? How do you make architectural decisions when you don't understand the patterns yet? How do you ensure your code is production-ready when AI helped write it?&lt;/p&gt;&lt;br&gt;
&lt;p&gt;These are the skills that matter now. Code generation is table stakes. What matters is context building, strategic planning, and confident execution.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;Here's the project: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/joerdav/xc&quot;&gt;xc&lt;/a&gt;, a task runner that reads tasks from Markdown files. About 5,000 lines of Go. Completely unfamiliar to me. The feature request was straightforward: add &lt;code&gt;.env&lt;/code&gt; file support (&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/joerdav/xc/issues/162&quot;&gt;Issue #162&lt;/a&gt;). In 2.5 hours, using free AI models and a structured approach, I went from knowing nothing about the codebase to a merged pull request.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;The difference wasn't better prompts. It was better process.&lt;/p&gt;&lt;br&gt;
&lt;h2&gt;The Actual Workflow: What I Did vs What AI Did&lt;/h2&gt;&lt;br&gt;
&lt;p&gt;Here's the honest breakdown of who did what. I didn't write a single line of code myself. That's not the valuable work anymore.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;What I did:&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Explored the codebase with AI&lt;/strong&gt; — Asked questions, challenged its understanding, verified explanations against the actual code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built the &lt;code&gt;.ai/&lt;/code&gt; structure&lt;/strong&gt; — Wrote context docs, ADRs, rules, and implementation specs based on my growing understanding&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Questioned the strategy&lt;/strong&gt; — Evaluated alternatives, captured trade-offs, made architectural decisions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Directed the implementation&lt;/strong&gt; — &quot;Follow the spec. Implement test 1. Now test 2.&quot; Each step validated before moving forward&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reviewed iteratively&lt;/strong&gt; — Asked AI to review the code, digested its findings, confirmed issues, asked it to fix them. Repeated multiple times&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Final deep review&lt;/strong&gt; — Read through the entire PR on GitHub, verified everything made sense, marked ready for review&lt;/li&gt;
&lt;/ol&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;What AI did:&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Answered my questions&lt;/strong&gt; — Explained architecture, pointed me to relevant files, clarified patterns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wrote all the code&lt;/strong&gt; — Tests, implementation, integration, everything&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Found its own bugs&lt;/strong&gt; — Self-review caught 5 issues before I even looked at the code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fixed the issues&lt;/strong&gt; — Applied fixes based on its own review findings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Followed the plan&lt;/strong&gt; — Implemented exactly what the spec described, in the order specified&lt;/li&gt;
&lt;/ol&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;What we did together:&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;Built understanding through conversation&lt;/li&gt;
&lt;li&gt;Validated each step before proceeding&lt;/li&gt;
&lt;li&gt;Caught subtle bugs through TDD&lt;/li&gt;
&lt;li&gt;Created production-ready code with high confidence&lt;/li&gt;
&lt;/ul&gt;&lt;br&gt;
&lt;p&gt;The key insight: &lt;strong&gt;I never typed code.&lt;/strong&gt; I read it, reviewed it, directed changes to it. But I didn't write it. My value was in understanding, planning, and judgment. AI's value was in execution and self-checking. This is the new division of labor.&lt;/p&gt;&lt;br&gt;
&lt;h2&gt;The Four Skills&lt;/h2&gt;&lt;br&gt;
&lt;p&gt;This walkthrough demonstrates four skills that matter more than code generation:&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Skill 1: Rapid Onboarding.&lt;/strong&gt; Learning an unfamiliar codebase fast by building structured context instead of reading every file. The &lt;code&gt;.ai/&lt;/code&gt; folder captures architecture, patterns, and limitations in a way both humans and AI can reference.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Skill 2: Strategic Documentation.&lt;/strong&gt; Building documentation that guides development, not just records it. Architecture Decision Records (ADRs) capture the &quot;why&quot; behind choices, evaluate alternatives, and create a shared understanding before code is written.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Skill 3: Systematic Planning.&lt;/strong&gt; Breaking down problems into testable steps. Each test defines expected behavior. Each implementation proves the behavior works. Each commit tells part of the story. No guessing, no hoping.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Skill 4: Confident Execution.&lt;/strong&gt; Shipping code you trust because you've tested it thoroughly, reviewed it critically, and validated it works in real scenarios. AI can help write code, but you own the quality.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;These skills work regardless of the AI tool you use. They work with free models. They work on unfamiliar codebases.&lt;/p&gt;&lt;br&gt;
&lt;h2&gt;The Feature Request&lt;/h2&gt;&lt;br&gt;
&lt;p&gt;First, a quick primer on how xc works: it's a task runner that reads tasks directly from your &lt;code&gt;README.md&lt;/code&gt; (or any markdown file). Tasks are defined as markdown headings with code blocks. When you run &lt;code&gt;xc test&lt;/code&gt;, it finds the &lt;code&gt;## test&lt;/code&gt; heading in your README and executes the code block beneath it. The genius is that your documentation &lt;em&gt;is&lt;/em&gt; your task runner, so they never get out of sync.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;A user opened &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/joerdav/xc/issues/162&quot;&gt;Issue #162&lt;/a&gt; asking for &lt;code&gt;.env&lt;/code&gt; file support. They wanted to use the same set of tasks for different environments without cluttering the Markdown with environment variables.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;Before the feature, you'd have to write this in your README.md:&lt;/p&gt;&lt;br&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;## deploy
Deploy to production.
Env: DATABASE_URL=postgres://prod/db, API_KEY=secret123, ENV=production
&lt;code&gt;kubectl apply -f deployment.yaml
&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br&gt;
&lt;/p&gt;&lt;p&gt;Then run with &lt;code&gt;xc deploy&lt;/code&gt;.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;After the feature, your README stays clean:&lt;/p&gt;&lt;br&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;## deploy
Deploy to production.
&lt;code&gt;kubectl apply -f deployment.yaml
&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br&gt;
&lt;/p&gt;&lt;p&gt;The environment variables live in a separate &lt;code&gt;.env&lt;/code&gt; file:&lt;/p&gt;&lt;br&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;DATABASE_URL=postgres://prod/db&lt;br&gt;
API_KEY=secret123&lt;br&gt;
ENV=production&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;
&lt;p&gt;You still run the same command, but now the credentials are managed in &lt;code&gt;.env&lt;/code&gt; instead of cluttering your documentation.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;Simple ask, but the implementation requires real decisions. When do you load the files? What about overrides? How do you handle security? What about backward compatibility?&lt;/p&gt;&lt;br&gt;
&lt;h2&gt;The &lt;code&gt;.ai/&lt;/code&gt; Structure: Context as Code&lt;/h2&gt;&lt;br&gt;
&lt;p&gt;Before writing any code, I created a structured context folder. This turned out to be the key to working with AI effectively. It's not about better prompts, it's about better &lt;strong&gt;structure&lt;/strong&gt;.&lt;/p&gt;&lt;br&gt;
&lt;blockquote&gt;&lt;div&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Full &lt;code&gt;.ai/&lt;/code&gt; folder:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/sudoish/xc/tree/ai-context/.ai&quot;&gt;github.com/sudoish/xc/tree/ai-context/.ai&lt;/a&gt;&lt;/p&gt;&lt;br&gt;
&lt;/div&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;p&gt;The folder looks like this:&lt;/p&gt;&lt;br&gt;
&lt;pre&gt;&lt;code&gt;.ai/&lt;br&gt;
├── agents.md              # Who's working on what&lt;br&gt;
├── context.md             # Project overview, architecture&lt;br&gt;
├── architecture/&lt;br&gt;
│   ├── decisions.md       # Current design patterns&lt;br&gt;
│   └── adrs/&lt;br&gt;
│       └── 001-dotenv-support.md  # Design decisions for this feature&lt;br&gt;
├── rules/&lt;br&gt;
│   ├── code-style.md      # Go conventions&lt;br&gt;
│   ├── testing.md         # TDD workflow&lt;br&gt;
│   └── commits.md         # Commit message format&lt;br&gt;
└── tasks/
&lt;code&gt;└── 001-dotenv-implementation.md  # Step-by-step plan
&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br&gt;
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; This structure is an investment, not overhead you repeat for every feature. You build it once during your first feature, then leverage it for every feature after. The &lt;code&gt;context.md&lt;/code&gt;, &lt;code&gt;architecture/decisions.md&lt;/code&gt;, and &lt;code&gt;rules/&lt;/code&gt; files rarely change. Each new feature just adds a new ADR (like &lt;code&gt;002-api-caching.md&lt;/code&gt;) and a new task spec (like &lt;code&gt;002-api-caching-implementation.md&lt;/code&gt;).&lt;/p&gt;&lt;br&gt;
&lt;p&gt;Think of it like setting up your development environment. The initial setup takes time, but every feature after that is faster because the foundation exists.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;Each file serves a specific purpose. The &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/sudoish/xc/blob/ai-context/.ai/context.md&quot;&gt;&lt;code&gt;context.md&lt;/code&gt;&lt;/a&gt; file becomes AI's memory. It explains what xc does, how it's architected with its &lt;code&gt;cmd/&lt;/code&gt;, &lt;code&gt;models/&lt;/code&gt;, &lt;code&gt;run/&lt;/code&gt;, and &lt;code&gt;parser/&lt;/code&gt; packages, what key behaviors exist like dependencies and environment handling, and what current limitations we're working around. Every time I ask AI a question, this context gets included automatically.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/sudoish/xc/blob/ai-context/.ai/rules/testing.md&quot;&gt;&lt;code&gt;rules/testing.md&lt;/code&gt;&lt;/a&gt; file defines the TDD workflow we follow: write a failing test first (red), write minimal code to make it pass (green), clean up without changing behavior (refactor), then commit. This keeps both me and AI honest. No skipping tests. No shortcuts.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;The real gem is &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/sudoish/xc/blob/ai-context/.ai/architecture/adrs/001-dotenv-support.md&quot;&gt;&lt;code&gt;adrs/001-dotenv-support.md&lt;/code&gt;&lt;/a&gt;, the Architecture Decision Record. This is where design happens. It's not &quot;build me a feature,&quot; it's &quot;here's why we chose this approach.&quot; We decided to load .env files at application startup rather than per-task, to support &lt;code&gt;.env.local&lt;/code&gt; overrides, to skip world-readable files for security, and to add CLI flags like &lt;code&gt;--env-file&lt;/code&gt; and &lt;code&gt;--no-env&lt;/code&gt;. We considered alternatives like per-task loading (rejected as too complex) and requiring an explicit flag (rejected as too much friction). This ADR becomes the source of truth. When AI suggests something different, I can just say &quot;check the ADR.&quot;&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;The living documentation principle:&lt;/strong&gt; As the codebase evolves, so does the &lt;code&gt;.ai/&lt;/code&gt; folder. When you add a new feature, you write a new ADR (002, 003, etc.). When architecture changes, you update &lt;code&gt;architecture/decisions.md&lt;/code&gt; or add a new ADR explaining the change. When patterns emerge, you document them. The folder grows with the project, but the structure stays the same. Each feature builds on the understanding captured before it.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;This means the second feature is faster than the first. The third is faster than the second. The documentation compounds.&lt;/p&gt;&lt;br&gt;
&lt;h2&gt;The Task Spec: Planning Before Coding&lt;/h2&gt;&lt;br&gt;
&lt;p&gt;Before writing any code, I created &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/sudoish/xc/blob/ai-context/.ai/tasks/001-dotenv-implementation.md&quot;&gt;&lt;code&gt;tasks/001-dotenv-implementation.md&lt;/code&gt;&lt;/a&gt;, a step-by-step plan for implementing the feature. This isn't a project management document. It's a development spec that breaks the feature into TDD cycles.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;The spec listed each test I needed to write, what behavior it should verify, and the expected implementation. Test for file not found. Test for loading valid env. Test for .env.local overrides. Test for security checks. Each one became a TDD cycle.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;This is what makes AI effective. Without the spec, I'd be asking AI &quot;what should I do next?&quot; every five minutes. With the spec, I'm asking &quot;implement the next test according to the plan.&quot; The spec keeps development focused and systematic. It's the difference between wandering and following a map.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;For your second feature, you write a new spec. For your third, another one. The format is consistent, but each spec is tailored to its feature. This is the work that makes development fast and confident.&lt;/p&gt;&lt;br&gt;
&lt;h2&gt;The TDD Flow: Red → Green → Refactor → Commit&lt;/h2&gt;&lt;br&gt;
&lt;p&gt;Here's where the real work happens. Each test defines acceptance criteria for exactly what needs to be built.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Cycle 1: Valid .env should load variables&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;
&lt;p&gt;First behavior: if a &lt;code&gt;.env&lt;/code&gt; file exists and contains &lt;code&gt;KEY=value&lt;/code&gt; pairs, those should be loaded into the environment. Test written, test failed (red)—no loader existed yet. Implementation added using the godotenv library (green). Test passed. Committed with &quot;load env vars from dotenv file&quot;.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Cycle 2: .env.local should override .env&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;
&lt;p&gt;Expected behavior: if both &lt;code&gt;.env&lt;/code&gt; and &lt;code&gt;.env.local&lt;/code&gt; exist, and both define the same variable, the &lt;code&gt;.env.local&lt;/code&gt; value wins. This is crucial for local development where you want to override defaults without modifying the base file. Test written, test failed initially because I was using the wrong function, fixed the implementation, test passed. Committed.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Cycle 3: World-readable files should be skipped&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;
&lt;p&gt;Security requirement: if a &lt;code&gt;.env&lt;/code&gt; file has permissions that allow other users to read it (like &lt;code&gt;chmod 644&lt;/code&gt;), skip loading it and warn the user. This prevents accidentally exposing secrets. Test created, test failed (secrets were being loaded), added permission check, test passed. Committed.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;This rhythm of define → test → implement → verify → commit creates a clean history. When I looked at the final commit log, I could see exactly how the feature evolved: add godotenv dependency, load env vars from dotenv file, support dotenv local overrides, add security check for world readable files, integrate dotenv loading into main, add env file cli flags. Thirteen commits total, each one atomic and meaningful. Each commit is a story about one specific behavior being added.&lt;/p&gt;&lt;br&gt;
&lt;h2&gt;The Review Process&lt;/h2&gt;&lt;br&gt;
&lt;p&gt;After the implementation was done, I did a deep review of my own code. I found five issues that needed fixing.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Issue 1: Test Isolation (Critical)&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;
&lt;p&gt;Tests were modifying the global environment without properly restoring it. If a test set &lt;code&gt;TEST_KEY=value&lt;/code&gt;, the cleanup would delete it, but what if that key already existed before the test ran? The cleanup wasn't restoring the original value, just removing the key. This breaks parallel test execution because tests can interfere with each other.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;The fix: create a helper function that saves the current state of environment variables before the test runs, then restores that exact state (including whether the variable existed at all) when the test completes. Now tests are safe to run in parallel. Committed with &quot;add test environment isolation helper&quot;.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Issue 2: Windows Test Bug (Critical)&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;
&lt;p&gt;One test needed to skip execution on Windows because file permission models are different. I had written the check incorrectly, reading from an environment variable instead of the language's built-in constant. This would break Windows CI. Small mistake, but important. Fixed and committed with &quot;fix windows test skip to use runtime goos&quot;.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Issue 3: Early Exit Timing&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;
&lt;p&gt;The .env loading was happening even for commands like &lt;code&gt;--help&lt;/code&gt; and &lt;code&gt;--version&lt;/code&gt;, which meant users could see security warnings when just checking the version. Moved the loading to happen after those early exits. Performance optimization and better user experience. Committed.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Issue 4: Error Context&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;
&lt;p&gt;When file operations failed, errors didn't indicate which file caused the problem. Added context wrapping so errors show the specific file path. Makes debugging much easier. Committed.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Issue 5: Test Coverage&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;
&lt;p&gt;One helper function didn't have its own test. Added coverage to bring the total to 84%. Committed.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;Each issue got its own fix, its own verification, its own commit. The same disciplined process for fixes that I used for features.&lt;/p&gt;&lt;br&gt;
&lt;h2&gt;The Manual Testing&lt;/h2&gt;&lt;br&gt;
&lt;p&gt;Code works in tests, but does it work for real users? I installed my version and created a test project to verify everything worked end-to-end.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;I created a &lt;code&gt;.env&lt;/code&gt; file with some variables, created a &lt;code&gt;.env.local&lt;/code&gt; file that overrode some of them, and made sure the permissions were correct with &lt;code&gt;chmod 600&lt;/code&gt;. Then I added a task to my &lt;code&gt;README.md&lt;/code&gt; to verify the variables were loaded:&lt;/p&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;In README.md:&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;## check-env
Check loaded environment variables.
&lt;code&gt;echo &quot;Environment: $ENV&quot;
echo &quot;Database: $DATABASE_URL&quot;
echo &quot;API Key: ${API_KEY:0:8}...&quot;
&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br&gt;
&lt;/p&gt;&lt;p&gt;When I ran &lt;code&gt;xc check-env&lt;/code&gt;, I saw exactly what I expected. The &lt;code&gt;xc&lt;/code&gt; command read the task from the README...&lt;/p&gt;
&lt;p&gt;Read the full post at &lt;a rel=&quot;nofollow&quot; href=&quot;https://sudoish.com/ai-driven-development-xc-dotenv/&quot;&gt; sudoish&lt;/a&gt;&lt;/p&gt; 
</description>
<category>Other</category>
<guid isPermaLink="true">https://coderlegion.com/14046/you-think-ai-executes-the-skills-that-actually-matter</guid>
<pubDate>Mon, 06 Apr 2026 11:22:05 +0000</pubDate>
</item>
<item>
<title>Vibe Coding: Where the Dream Meets Reality</title>
<link>https://coderlegion.com/12506/vibe-coding-where-the-dream-meets-reality</link>
<description>&lt;p&gt;In this video, I take a step back on a topic that’s generating a lot of buzz right now: Vibe Coding… and why it can become very dangerous when applied to real-world e-commerce.&lt;/p&gt;
&lt;p&gt;We’re being sold a simple promise:&lt;br&gt;
 describe what you want&lt;br&gt;
 let AI write the code&lt;br&gt;
 ship faster&lt;/p&gt;
&lt;p&gt;And yes — for a prototype, it works.&lt;/p&gt;
&lt;p&gt;But in production, especially in a PrestaShop environment, reality looks very different.&lt;/p&gt;
&lt;p&gt;From my experience building e-commerce modules used on high-traffic stores, I’m seeing more and more AI-generated code that works in a demo… but breaks in production.&lt;/p&gt;
&lt;p&gt;In this video, I cover:&lt;/p&gt;
&lt;p&gt;why Vibe Coding works for demos but not for complex systems&lt;/p&gt;
&lt;p&gt;the traps AI doesn’t really understand yet: hooks, multistore, security, performance, and more&lt;/p&gt;
&lt;p&gt;the technical debt created by code you don’t fully control&lt;/p&gt;
&lt;p&gt;the real role of the developer in 2026&lt;/p&gt;
&lt;p&gt;how to use AI the right way without destroying your architecture&lt;/p&gt;
</description>
<category>Videos</category>
<guid isPermaLink="true">https://coderlegion.com/12506/vibe-coding-where-the-dream-meets-reality</guid>
<pubDate>Tue, 10 Mar 2026 07:23:13 +0000</pubDate>
</item>
<item>
<title>Your Job Isn’t Gone. Relax.</title>
<link>https://coderlegion.com/12201/your-job-isnt-gone-relax</link>
<description>&lt;h3 id=&quot;the-anxiety-phase&quot;&gt;The Anxiety Phase&lt;/h3&gt;
&lt;p&gt;There has been a feeling of anxiety among developers around the world for a few years now, and it is no different here in India. But it has never been this high as it has been in the last six months.&lt;/p&gt;
&lt;p&gt;The reason is obvious to anyone paying attention, AI models are improving faster than our ability to mentally process the change.&lt;/p&gt;
&lt;p&gt;Every few weeks there’s a new release claiming better reasoning, autonomous coding, agent workflows, or near-instant software generation. Models that once struggled with small snippets can now refactor projects, design systems, and ship working prototypes in minutes.&lt;/p&gt;
&lt;p&gt;What used to feel like &lt;em&gt;assistive tooling&lt;/em&gt; suddenly started looking like &lt;em&gt;replacement capability&lt;/em&gt;, and that shift is what triggered the collective panic.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;noise-vs-reality&quot;&gt;Noise vs Reality&lt;/h3&gt;
&lt;p&gt;Some say the panic is narrative-driven. Others argue companies are quietly correcting the over-hiring done during the COVID boom.&lt;/p&gt;
&lt;p&gt;Whatever the explanation, the ground reality is simple: layoffs have been happening for the last couple of years, and uncertainty makes noise louder than facts ever could.&lt;/p&gt;
&lt;p&gt;But history shows one pattern, technology rarely removes work entirely; it reshapes &lt;em&gt;who&lt;/em&gt; does what.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-new-developer-archetype&quot;&gt;The New Developer Archetype&lt;/h3&gt;
&lt;p&gt;Look at the bigger picture. We are in the middle of an AI revolution, much like the industrial revolution. The short term feels chaotic, but the long term usually rewards adaptability.&lt;/p&gt;
&lt;p&gt;As developers, there isn’t much value left in memorizing syntax or writing boilerplate line by line, machines are already exceptional at that.&lt;/p&gt;
&lt;p&gt;The emerging role of developers may shift toward being:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;super reviewers instead of pure writers  &lt;/li&gt;
&lt;li&gt;precise prompters instead of manual implementers  &lt;/li&gt;
&lt;li&gt;system thinkers instead of framework specialists  &lt;/li&gt;
&lt;li&gt;engineers who can tell the difference between &lt;strong&gt;vibe coding&lt;/strong&gt; and &lt;strong&gt;code that survives production traffic&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI isn’t removing developers.&lt;br&gt;
It’s quietly raising the bar for what being a developer means.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/12201/your-job-isnt-gone-relax</guid>
<pubDate>Thu, 26 Feb 2026 06:39:26 +0000</pubDate>
</item>
<item>
<title>Vibe Coding: The Shadow IT Problem No One Saw Coming</title>
<link>https://coderlegion.com/10569/vibe-coding-the-shadow-it-problem-no-one-saw-coming</link>
<description>&lt;p&gt;Vibe coding promises easy AI-generated software but creates massive shadow IT risks for enterprises. Learn why this trend threatens security, compliance and scale.&lt;/p&gt;
&lt;p&gt;Vibe coding is a trending buzzword for conversationally prompting an AI agent to produce software. Its creator, Andrej Karpathy, described the process as “not really coding — I just see things, say things, run things, and copy-paste things, and it mostly works,” and he found it “not too bad for throwaway weekend projects.”&lt;/p&gt;
&lt;p&gt;One key distinction between vibe coding and other forms of AI-assisted coding is the acceptance of the code generated by the agent without inspection. When you’re vibe coding, you don’t need to read code or understand how anything works, making it possible for citizen developers to create small-scale applications without learning to code.&lt;/p&gt;
&lt;p&gt;There has been a long-anticipated dream of defining software using plain English as the programming language, and vibe coding fits this vision. Solving small challenges with software can be satisfying, like completing a self-repair at home. In the context of Enterprise, vibe coding is less like software development and more like traditional shadow IT.&lt;/p&gt;
&lt;h3 id=&quot;vibe-coding-is-spreading-like-shadow-it&quot;&gt;Vibe Coding Is Spreading Like Shadow IT&lt;/h3&gt;
&lt;p&gt;Shadow IT happens when business units become frustrated waiting for software they believe will make them more effective. Under pressure to manage increasing workloads and with their IT project slipping further out, it usually falls to a business hero to create an interim solution using tools like Excel, Access, Google Docs, or skipping around the official procurement process.&lt;/p&gt;
&lt;p&gt;While shadow IT provides temporary localized pain relief for the business unit, it doesn’t offer a long-term solution. Very often, the main success of such projects is that they result in the urgent reprioritization of the original project when the shadow IT solution blows up.&lt;/p&gt;
&lt;p&gt;Software development isn’t just about creating features. Consideration is given to the fitness of the software against non-functional requirements. This includes scalability, legal and regulatory obligations, security, user experience, accessibility, and disaster recovery. Vibe coding, like shadow IT, is largely free from these concerns as the citizen developer is less likely to know or prompt for these concerns.&lt;/p&gt;
&lt;p&gt;When the system collapses, the business hero who delivers a shadow IT project quickly becomes the story’s villain. In the meantime, they are trapped in a constant build-and-fix cycle as they try to keep the lights on. We can expect the same from vibe coded applications.&lt;/p&gt;
&lt;p&gt;One of the collective delusions that surrounds software development is that someone knows exactly what the software needs to do; they just need someone to code it. As Fred Brooks explained in his paper &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.cgl.ucsf.edu/Outreach/pc204/NoSilverBullet.html&quot;&gt;No Silver Bullet&lt;/a&gt; in 1987, “The hardest part of the software task is arriving at a complete and consistent specification, and much of the essence of building a program is in fact the debugging of the specification.”&lt;/p&gt;
&lt;h3 id=&quot;the-hidden-enterprise-risks-of-conversational-code-generation&quot;&gt;The Hidden Enterprise Risks of Conversational Code Generation&lt;/h3&gt;
&lt;p&gt;Let’s get specific about the four reasons vibe coding isn’t appropriate for Enterprise organizations. You may think of many more once you start considering the implications of running on code generated by a computer in response to a conversation, which nobody has read or understood.&lt;/p&gt;
&lt;p&gt;Think of this as a starting point for that thought process. All four start with an “S” and we can pronounce the collection “ssss”, like the sound of a metaphorical tire deflating unexpectedly:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Specification&lt;/li&gt;
&lt;li&gt;Scaling&lt;/li&gt;
&lt;li&gt;Software design&lt;/li&gt;
&lt;li&gt;Security and compliance&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;1-specification&quot;&gt;1. Specification&lt;/h3&gt;
&lt;p&gt;We have learned over many decades that it’s hard to specify what a software system should do. We often know the primary use cases but discover plenty of scenarios we hadn’t anticipated as we build the system.&lt;/p&gt;
&lt;p&gt;You’ll find two routes to success when creating software that works. The first is building a deep understanding of what users need. The other is to deliver small, rapid changes and experiment your way to success. The best software teams combine both, and the organizations they work for hit more goals than their competition.&lt;/p&gt;
&lt;p&gt;By its very nature, vibe coding amplifies specification weakness. Functional and non-functional requirements are missed, and when they are later remembered, there is potential for previously satisfied requirements to be broken when changes are made. In this respect, vibe coding takes us back to the ad-hoc code-and-fix era of software delivery.&lt;/p&gt;
&lt;p&gt;In many cases, explaining why a software system works the way it does is essential. When you created it through a conversational vibe-coded approach, the only way to describe the software is by reading the conversation, which may not reflect how the code works. To satisfy regulations around automated decision-making, someone will eventually have to read and understand the code to explain a decision.&lt;/p&gt;
&lt;h3 id=&quot;2-why-specification-problems-make-vibe-coding-dangerous-at-scale&quot;&gt;2. Why Specification Problems Make Vibe Coding Dangerous at Scale&lt;/h3&gt;
&lt;p&gt;Skilled software engineers have learned that a few crucial system areas often dictate the ability to scale. Rather than optimizing every function and module, they identify where the investment will meaningfully improve the whole system’s performance.&lt;/p&gt;
&lt;p&gt;When vibe coding, there is little expectation that the human will be able to prompt for improved performance, aside from politely asking the agent to make things fast or scalable. As most lines of code in the training data are not optimized for scale, or were optimized for a different profile, the effectiveness of such prompts will be questionable.&lt;/p&gt;
&lt;p&gt;Aside from the system itself, there is a need to scale the software delivery process. Enterprise software demands more than one developer to reduce risk, increase understanding, and grow the software’s capabilities over the long term.&lt;/p&gt;
&lt;p&gt;This scaling ultimately requires developers to build a shared understanding of the system. This is enabled by documentation but very often depends on the facts evidenced by code written using a programming language.&lt;/p&gt;
&lt;p&gt;A modern software development team writes code that is easy to understand, and they’ll prove the system’s behavior with executable specifications. These artifacts provide the ultimate documentation of what the software does. They also contain the cost of maintenance, which is usually many times more than the cost of implementation.&lt;/p&gt;
&lt;p&gt;To scale vibe coding, the citizen developers would have access to the conversation streams and AI summaries of the system. Neither of these would provide a precise description of what the system does.&lt;/p&gt;
&lt;p&gt;Technically, they would have access to the code, but even a programmer may struggle to understand the source code produced by vibe coding. There is also the question of how collaboration works or how merge conflicts might be resolved by individuals who are unfamiliar with the code produced during this process.&lt;/p&gt;
&lt;p&gt;With vibe coding, neither the software nor the process scales.&lt;/p&gt;
&lt;h3 id=&quot;3-software-design-is-not-a-vibe-coding-priority&quot;&gt;3. Software Design Is Not A Vibe Coding Priority&lt;/h3&gt;
&lt;p&gt;The design of the software is always important and occasionally becomes a crucial competitive advantage. Novel architectural choices often provide powerful opportunities for the organization to do something unique.&lt;/p&gt;
&lt;p&gt;The decisions made at the software design level are not part of the software’s functional requirement specifications. However, they often impact how easily the software can adapt to future needs.&lt;/p&gt;
&lt;p&gt;In vibe coding, design is not a consideration. As you might expect the entire system to be rewritten by an agent if the design is invalidated by a new requirement, this would require some mechanism to ensure all previous instructions are taken into account.&lt;/p&gt;
&lt;p&gt;There’s a party game where players must repeat items from a shopping list before adding a new item to the end, creating an ever-longer list to be remembered as play continues. This is the game we will ask our coding agents to handle, and it will challenge current limits on the volume of instructions we can supply while still getting a working result.&lt;/p&gt;
&lt;p&gt;For throwaway projects, design need not be too concerning. If you intend to keep the project over the long term, the maintenance cost will be many times higher than the cost of writing the system. Taking steps to control the cost curve is essential to keep software economically viable.&lt;/p&gt;
&lt;p&gt;In the future, software consultants will raise their Champagne glasses to the moment Enterprises decided they could vibe code their software. It will pay for these consultants’ super-yachts and kitchen staff for many years.&lt;/p&gt;
&lt;h3 id=&quot;4-security-and-compliance-nightmares-when-ai-writes-your-code&quot;&gt;4. Security and Compliance Nightmares: When AI Writes Your Code&lt;/h3&gt;
&lt;p&gt;Enterprises have a significant security and compliance burden. Software developers working in large organizations have learned what it takes to secure access, protect data, and meet audit and compliance requirements as part of their work. Every developer I’ve worked with has been familiar with at least ISO:27001 and usually many other standards.&lt;/p&gt;
&lt;p&gt;Throughout the delivery pipeline, from repository access and code reviews to deployment and operations, tools and techniques help technical teams meet their compliance needs.&lt;/p&gt;
&lt;p&gt;It isn’t easy to reconcile the process of vibe coding with these audit requirements. Indeed, significant additional work would be needed to evidence how the generated code has been checked in the same way as code written by a developer and reviewed by a peer, based on requirements from a product manager.&lt;/p&gt;
&lt;p&gt;Some economic model must be built to compare the saved developer time against the increased validation needed to ensure the code is secure, has no unexpected additions that could compromise the system’s privacy, security, and integrity, and meets the original specifications. The cost of compiling the requirements from the conversation will likely outweigh the development cost for Enterprise software.&lt;/p&gt;
&lt;p&gt;At the same time, the risk of data loss, breaches, and reputational damage increases dramatically.&lt;/p&gt;
&lt;h3 id=&quot;how-to-protect-your-enterprise-from-the-vibe-coding-trap&quot;&gt;How to Protect Your Enterprise from the Vibe Coding Trap&lt;/h3&gt;
&lt;p&gt;A wicked combination of false assumptions may cause Enterprises to adopt vibe coding to accelerate projects. The imagined economic model is about reducing development costs, but this is incorrect.&lt;/p&gt;
&lt;p&gt;Dan Garfield, VP of GitOps and Open Source at Octopus explains it this way: “The biggest challenge with vibe coding in the Enterprise has nothing to do with the quality of models, or the potential inexperience of engineers. It’s that vibe coding exponentially increases the importance of testing and de-risking software delivery while simultaneously increasing the volume of changes past the breaking point.”&lt;/p&gt;
&lt;p&gt;We can uncover several assumptions that are not unique to vibe coding, but certainly apply.&lt;/p&gt;
&lt;h3 id=&quot;assumption-vs-reality-in-software-development&quot;&gt;Assumption vs. Reality in Software Development&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Assumption&lt;/strong&gt;: The value created during software development is the code.&lt;br&gt;
&lt;strong&gt;Reality&lt;/strong&gt;: The value is the knowledge represented by code and the developers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumption&lt;/strong&gt;: Creating an application is expensive.&lt;br&gt;
&lt;strong&gt;Reality&lt;/strong&gt;: Maintaining an application is expensive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumption&lt;/strong&gt;: Generating code saves time.&lt;br&gt;
&lt;strong&gt;Reality&lt;/strong&gt;: Generating code shifts burden from coding to other activities like testing, reviewing, and auditing.&lt;/p&gt;
&lt;p&gt;In Enterprise software delivery, these assumptions lead only to future pain.&lt;/p&gt;
&lt;p&gt;This article was originally published on &lt;a rel=&quot;nofollow&quot; href=&quot;https://thenewstack.io/vibe-coding-the-shadow-it-problem-no-one-saw-coming/&quot;&gt;The New Stack&lt;/a&gt;.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/10569/vibe-coding-the-shadow-it-problem-no-one-saw-coming</guid>
<pubDate>Tue, 27 Jan 2026 11:53:21 +0000</pubDate>
</item>
<item>
<title>Fixing Google Antigravity Pro Authentication on Windows 10 + WSL2</title>
<link>https://coderlegion.com/10207/fixing-google-antigravity-pro-authentication-on-windows-10-wsl2</link>
<description>&lt;p&gt;Google Antigravity is Google's new agent-first IDE that promises powerful AI-assisted development. However, getting the Pro features to work on Windows 10 with WSL2 (Ubuntu 24.04.3 LTS) can be challenging due to authentication issues. This comprehensive guide will walk you through every step needed to get your Pro/Ultra subscription working seamlessly.&lt;/p&gt;
&lt;h3 id=&quot;the-problem&quot;&gt;The Problem&lt;/h3&gt;
&lt;p&gt;When running Antigravity in WSL2, the authentication handshake between your Linux terminal and Windows browser often breaks or times out. This happens because WSL2 is a virtualized environment, and the redirect token struggles to find its way back to the WSL instance.&lt;/p&gt;
&lt;p&gt;Common symptoms include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Browser opens but IDE stays on loading screen&lt;/li&gt;
&lt;li&gt;Browser Authentication is successful but the Agent Panel still says &quot;Reqire Authentication&quot; (or something similar), even though the &lt;code&gt;Antigravity Settings &amp;gt; Account&lt;/code&gt; Screen shows Account as already signed in.&lt;/li&gt;
&lt;li&gt;&quot;Invalid Token&quot; or &quot;Login Expired&quot; errors&lt;/li&gt;
&lt;li&gt;&quot;Not Eligible&quot; or &quot;Unauthorized&quot; messages&lt;/li&gt;
&lt;li&gt;Empty responses when running &lt;code&gt;agy&lt;/code&gt; commands&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h3&gt;
&lt;p&gt;Before starting, ensure you have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows 10 with WSL2 installed&lt;/li&gt;
&lt;li&gt;Ubuntu 24.04.3 LTS (or similar)&lt;/li&gt;
&lt;li&gt;Google Antigravity installed on Windows&lt;/li&gt;
&lt;li&gt;A Google AI Pro or Ultra subscription using a personal Gmail account.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;step-1-fix-the-silent-login-loop&quot;&gt;Step 1: Fix the Silent Login Loop&lt;/h3&gt;
&lt;p&gt;The first issue to address is WSL2's default NAT networking, which can hide the local ports Antigravity uses to listen for login signals.&lt;/p&gt;
&lt;h4 id=&quot;enable-mirrored-networking&quot;&gt;Enable Mirrored Networking&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;On Windows, navigate to &lt;code&gt;%USERPROFILE%&lt;/code&gt; (e.g., &lt;code&gt;C:\Users\YourName&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Create or edit a file named &lt;code&gt;.wslconfig&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add the following configuration:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-ini&quot;&gt;[wsl2]
networkingMode=mirrored
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Restart WSL by opening PowerShell as Administrator and running:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;wsl --shutdown
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You may start getting this message on WSL Startup, especially on Windows 10 (shouldn't theoretically appear on Windows 11):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;wsl: Mirrored networking mode is not supported: Windows version 19045.6466 does not have the required features.
Falling back to NAT networking.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In which case, you should remove the unsupported setting from your global config to get rid of the warning every time you boot/reboot and open Ubuntu, as WSL2 cannot enable this mode and defaults back to the standard NAT (Network Address Translation).&lt;/p&gt;
&lt;p&gt;Instead, you can try the following config to ensure that Agents always reliably reach local addresses (Supported on Windows 10):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ini&quot;&gt;[wsl2]
localhostForwarding=true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add or ensure these lines exist in &lt;code&gt;%USERPROFILE%\.wslconfig&lt;/code&gt;. Save and run &lt;code&gt;wsl --shutdown&lt;/code&gt; in your terminal.&lt;/p&gt;
&lt;h3 id=&quot;step-2-synchronize-your-system-clock&quot;&gt;Step 2: Synchronize Your System Clock&lt;/h3&gt;
&lt;p&gt;Google's OAuth 2.0 authentication is highly sensitive to time drift. WSL2 clocks often drift when a laptop sleeps (like in my case), causing tokens to be rejected as expired.&lt;/p&gt;
&lt;p&gt;Run this in your Ubuntu terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo ntpdate time.windows.com

# If you don't have ntpdate installed:
sudo apt install util-linux-extra &amp;amp;&amp;amp; sudo hwclock -s
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;step-3-try-authentication-again&quot;&gt;Step 3: Try Authentication again&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;If GUI login continues to fail, manually Sign out from your account in the &lt;code&gt;Antigravity Settings &amp;gt; Account&lt;/code&gt; Screen.&lt;/li&gt;
&lt;li&gt;Close and Restart the IDE.&lt;/li&gt;
&lt;li&gt;Click on the &lt;code&gt;Google Sign in&lt;/code&gt; button in the top right and Authorize your Google AI Pro account.&lt;/li&gt;
&lt;li&gt;Close the Antigravity Sign-in confirmation page.&lt;/li&gt;
&lt;li&gt;If the issue persists, repeat the first step and continue reading below.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;step-4-verify-account-eligibility&quot;&gt;Step 4: Verify Account Eligibility&lt;/h3&gt;
&lt;p&gt;Many authentication failures are actually due to account restrictions:&lt;/p&gt;
&lt;h4 id=&quot;account-type&quot;&gt;Account Type&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Personal accounts&lt;/strong&gt; (&lt;code&gt;@gmail.com&lt;/code&gt;) have the highest success rate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Workspace accounts&lt;/strong&gt; may require admin approval for &quot;Experimental Google AI Services&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;regional-matching&quot;&gt;Regional Matching&lt;/h4&gt;
&lt;p&gt;Ensure your Windows Region, Google Account Region, and IP address (no VPN) all match. Mismatched regions can cause silent authentication failures.&lt;/p&gt;
&lt;h3 id=&quot;step-5-fix-missing-wsl-extension-scripts&quot;&gt;Step 5: Fix Missing WSL Extension Scripts&lt;/h3&gt;
&lt;p&gt;A known bug in early Antigravity builds causes missing WSL helper scripts. Here's how to fix it:&lt;/p&gt;
&lt;h4 id=&quot;manual-script-extraction&quot;&gt;Manual Script Extraction&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Download the &lt;a rel=&quot;nofollow&quot; href=&quot;https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl&quot;&gt;Remote - WSL extension&lt;/a&gt; from the VS Code Marketplace&lt;/li&gt;
&lt;li&gt;Click &quot;Download VSIX&quot; (downloads a &lt;code&gt;.vsix&lt;/code&gt; file) if in IDE extensions panel or use a tool like &lt;a rel=&quot;nofollow&quot; href=&quot;https://cypherpunksamurai.github.io/vsix-downloader-webui/&quot;&gt;VSIX Downloader&lt;/a&gt; for web download.&lt;/li&gt;
&lt;li&gt;Rename the file from &lt;code&gt;.vsix&lt;/code&gt; to &lt;code&gt;.zip&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Open the zip and navigate to &lt;code&gt;extension/scripts/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Copy all files (especially &lt;code&gt;wslCode.sh&lt;/code&gt; and &lt;code&gt;wslDownload.sh&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Paste into: &lt;code&gt;%LOCALAPPDATA%\Programs\Antigravity\resources\app\extensions\antigravity-remote-wsl\scripts\&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;fix-the-launcher-id&quot;&gt;Fix the Launcher ID&lt;/h4&gt;
&lt;p&gt;Even with scripts present, you need to update the extension ID reference:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to &lt;code&gt;%LOCALAPPDATA%\Programs\Antigravity\bin\&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Open the &lt;code&gt;antigravity&lt;/code&gt; file in Notepad&lt;/li&gt;
&lt;li&gt;Find: &lt;code&gt;WSL_EXT_ID=&quot;ms-vscode-remote.remote-wsl&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Change to: &lt;code&gt;WSL_EXT_ID=&quot;google.antigravity-remote-wsl&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Save and restart your WSL terminal&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;test-wsl-sign-in-command-palette-method-&quot;&gt;Test WSL Sign In (Command Palette Method)&lt;/h4&gt;
&lt;p&gt;Try Authentication in WSL:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Antigravity on Windows&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Ctrl + Shift + P&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Type &quot;WSL&quot; and select &lt;strong&gt;Remote-WSL: Connect to WSL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The bottom-left corner should show &lt;code&gt;[WSL: Ubuntu]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Try signing in from this connected state&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;step-6-create-the-wsl-to-windows-bridge&quot;&gt;Step 6: Create the WSL-to-Windows Bridge&lt;/h3&gt;
&lt;p&gt;To use &lt;code&gt;agy&lt;/code&gt; commands from your Ubuntu terminal, you need to create a proper bridge to the Windows binary.&lt;/p&gt;
&lt;h4 id=&quot;create-the-wrapper-script&quot;&gt;Create the Wrapper Script&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Create the local bin directory:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir -p ~/.local/bin
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Create the &lt;code&gt;agy&lt;/code&gt; wrapper (replace &lt;code&gt;[YOUR_WINDOWS_USERNAME]&lt;/code&gt; with your actual Windows username):&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cat &amp;gt; ~/.local/bin/agy &amp;lt;&amp;lt;'EOF'
#!/usr/bin/env bash
# Robust wrapper to bridge WSL -&amp;gt; Windows CMD -&amp;gt; Antigravity
# REPLACE [YOUR_WINDOWS_USERNAME] with your actual folder name

WIN_USER=&quot;[YOUR_WINDOWS_USERNAME]&quot;
WIN_PATH=&quot;C:\\Users\\${WIN_USER}\\AppData\\Local\\Programs\\Antigravity\\bin\\antigravity.cmd&quot;

# Call via cmd.exe to ensure Windows environment is initialized
# cd to C: drive to avoid UNC path warnings
cd /mnt/c &amp;amp;&amp;amp; cmd.exe /c &quot;${WIN_PATH}&quot; &quot;$@&quot;
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Make it executable:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;chmod +x ~/.local/bin/agy
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Add to your PATH:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export PATH=&quot;$HOME/.local/bin:$PATH&quot;
echo 'export PATH=&quot;$HOME/.local/bin:$PATH&quot;' &amp;gt;&amp;gt; ~/.bashrc
source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;verify-your-windows-username&quot;&gt;Verify Your Windows Username&lt;/h4&gt;
&lt;p&gt;Before running the wrapper, verify your path:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ls /mnt/c/Users/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Update the &lt;code&gt;WIN_USER&lt;/code&gt; variable in the script to match exactly how your Windows username folder is spelled.&lt;/p&gt;
&lt;h4 id=&quot;enable-wsl-interoperability&quot;&gt;Enable WSL Interoperability&lt;/h4&gt;
&lt;p&gt;Ensure WSL can launch Windows processes by checking &lt;code&gt;/etc/wsl.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cat /etc/wsl.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If it doesn't exist or is empty, create it with these settings:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ini&quot;&gt;[interop]
enabled=true
appendWindowsPath=true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then restart WSL with &lt;code&gt;wsl --shutdown&lt;/code&gt; from PowerShell.&lt;/p&gt;
&lt;h3 id=&quot;step-7-verify-pro-authentication&quot;&gt;Step 7: Verify Pro Authentication&lt;/h3&gt;
&lt;p&gt;Once everything is set up, verify your CLI Setup:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Check version
agy --version

# List available commands
agy --help

# Open IDE in current directory
agy .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now try signing in again to your Google account. The &lt;code&gt;Agent Panel&lt;/code&gt; should be available now, and the &lt;code&gt;Antigravity Settings &amp;gt; Account&lt;/code&gt; Screen shows Account as already signed in. Expected output for &lt;code&gt;Agent Panel&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tier:&lt;/strong&gt; Pro or Ultra&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model:&lt;/strong&gt; Gemini 3 Pro or Gemini 3 Flash, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Token Limit:&lt;/strong&gt; 1M+ tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;use-pro-agents&quot;&gt;Use Pro Agents&lt;/h4&gt;
&lt;p&gt;Now you can invoke high-level agents directly on your WSL files:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;agy chat &quot;Analyze the structure of this repo and suggest refactoring opportunities&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Because you're authenticated as Pro, the agent will use the full index to understand your entire codebase structure.&lt;/p&gt;
&lt;h3 id=&quot;troubleshooting-quick-reference&quot;&gt;Troubleshooting Quick Reference&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Issue &lt;/th&gt;&lt;th&gt;Symptom &lt;/th&gt;&lt;th&gt;Fix&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Network &lt;/td&gt;&lt;td&gt;Browser opens, IDE stays loading &lt;/td&gt;&lt;td&gt;Enable &lt;code&gt;networkingMode=mirrored&lt;/code&gt; in &lt;code&gt;.wslconfig&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Clock Drift &lt;/td&gt;&lt;td&gt;&quot;Invalid Token&quot; or &quot;Login Expired&quot; &lt;/td&gt;&lt;td&gt;Run &lt;code&gt;sudo hwclock -s&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Account Type &lt;/td&gt;&lt;td&gt;&quot;Not Eligible&quot; &lt;/td&gt;&lt;td&gt;Use personal &lt;code&gt;@gmail.com&lt;/code&gt; account&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Missing Scripts &lt;/td&gt;&lt;td&gt;IDE won't connect to WSL &lt;/td&gt;&lt;td&gt;Download and extract scripts from VS Code Marketplace&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Wrong Extension ID &lt;/td&gt;&lt;td&gt;Connection fails silently &lt;/td&gt;&lt;td&gt;Update &lt;code&gt;WSL_EXT_ID&lt;/code&gt; in launcher script&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;UNC Path Warnings &lt;/td&gt;&lt;td&gt;Warnings in terminal output &lt;/td&gt;&lt;td&gt;Use &lt;code&gt;cd /mnt/c &amp;amp;&amp;amp;&lt;/code&gt; in wrapper script&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;common-commands&quot;&gt;Common Commands&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Open current directory in Antigravity
agy .

# Check process usage and diagnostic information
agy --status

# Check version
agy --version

# Get help
agy --help
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;pro-tips&quot;&gt;Pro Tips&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Persistent Sessions:&lt;/strong&gt; Enable &quot;Persistent Agent&quot; in Antigravity UI to keep agents running even if you close the terminal&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Project Indexing:&lt;/strong&gt; Let Antigravity fully index your project before asking complex questions for better results&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Token Limits:&lt;/strong&gt; Pro users get 1M+ token context windows, perfect for analyzing large codebases&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Regional Consistency:&lt;/strong&gt; Avoid using VPNs during authentication to prevent region mismatch issues&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Getting Google Antigravity Pro working on WSL2 requires bridging the gap between the Windows and Linux environments. By following these steps—fixing networking, synchronizing clocks, creating proper symlinks, and enabling interoperability—you'll unlock the full power of Google's agentic IDE.&lt;/p&gt;
&lt;p&gt;The effort is worth it: once configured, you'll have access to powerful AI agents that can understand and refactor your entire codebase, all while working seamlessly in your WSL2 development environment.&lt;/p&gt;
&lt;h3 id=&quot;additional-resources&quot;&gt;Additional Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.youtube.com/watch?v=example&quot;&gt;Google Antigravity Setup Guide (Video)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl&quot;&gt;VS Code Remote - WSL Extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.microsoft.com/en-us/windows/wsl/&quot;&gt;WSL2 Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Last updated: January 2026 | Tested on Windows 10 + WSL2 Ubuntu 24.04.3 LTS&lt;/em&gt;&lt;/p&gt;
</description>
<category>Tutorials</category>
<guid isPermaLink="true">https://coderlegion.com/10207/fixing-google-antigravity-pro-authentication-on-windows-10-wsl2</guid>
<pubDate>Wed, 21 Jan 2026 17:57:05 +0000</pubDate>
</item>
<item>
<title>Developer Life: What Actually Makes a Good Developer?</title>
<link>https://coderlegion.com/10162/developer-life-what-actually-makes-a-good-developer</link>
<description>&lt;p&gt;Developer life is not just about writing code.&lt;br&gt;
To become a good developer, there are a few core skills that really matter:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Problem Solving&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In real-world development, most of the time is spent understanding problems and fixing bugs.&lt;br&gt;
Searching on Google is normal — but understanding the solution is the real skill.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Continuous Learning&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Technology changes fast:&lt;br&gt;
React → Next.js → AI tools → Cloud platforms&lt;br&gt;
A developer who stops learning will eventually stop growing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Writing Clean Code&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Working code is not enough.&lt;br&gt;
Professional developers write code that is clean, readable, reusable, and maintainable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Communication Skills&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Being able to explain your ideas to clients or teammates is also part of developer life.&lt;br&gt;
The best developers are strong in both code and communication.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
Developer life = continuous learning + problem solving + communication.&lt;br&gt;
In the tech industry, skills matter more than degrees.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/10162/developer-life-what-actually-makes-a-good-developer</guid>
<pubDate>Wed, 21 Jan 2026 10:26:59 +0000</pubDate>
</item>
<item>
<title>After a year of daily Claude Code use, I wrote everything I learned (10-part guide)</title>
<link>https://coderlegion.com/9819/after-a-year-of-daily-claude-code-use-i-wrote-everything-i-learned-10-part-guide</link>
<description>&lt;p&gt;Hey everyone,&lt;/p&gt;
&lt;p&gt;I’ve been using Claude Code daily for about a year now and finally put together everything I’ve learned into a 10-part series. It’s completely free, no email gates, no paywalls.&lt;/p&gt;
&lt;p&gt;What it covers:&lt;/p&gt;
&lt;p&gt;∙Part 1: Getting Started (installation, first commands, the mindset shift)&lt;br&gt;
∙Part 2: The Mental Model (how Claude Code actually “thinks”)&lt;br&gt;
∙Part 3: Project Configuration (CLAUDE.md, settings, project memory)&lt;br&gt;
∙Part 4: Custom Commands&lt;br&gt;
∙Part 5: Skills&lt;br&gt;
∙Part 6: Subagents&lt;br&gt;
∙Part 7: MCP Servers&lt;br&gt;
∙Part 8: Production Workflows&lt;br&gt;
∙Part 9: Power User Secrets&lt;br&gt;
∙Part 10: Vibe Coding Philosophy&lt;/p&gt;
&lt;p&gt;Why I wrote it:&lt;/p&gt;
&lt;p&gt;The gap between devs who’ve figured out Claude Code and those who haven’t is massive. I’ve seen people go from “this is frustrating” to shipping features 10x faster once they understand the structure that makes it work.&lt;/p&gt;
&lt;p&gt;The biggest insight: it’s not about prompting tricks. It’s about setting up guardrails (git commits, tests, linters, CLAUDE.md) so Claude’s speed becomes useful instead of chaotic.&lt;/p&gt;
&lt;p&gt;Happy to answer any questions or take feedback. What topics would you want covered that I might have missed?&lt;/p&gt;
&lt;p&gt;I'm specifically looking for cool underground tricks and ways to use commands or skills.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.jovweb.dev/blog/claude-code-mastery-01-getting-started&quot;&gt;Claude code mastery&lt;/a&gt;&lt;/p&gt;
</description>
<category>Tutorials</category>
<guid isPermaLink="true">https://coderlegion.com/9819/after-a-year-of-daily-claude-code-use-i-wrote-everything-i-learned-10-part-guide</guid>
<pubDate>Fri, 16 Jan 2026 11:27:06 +0000</pubDate>
</item>
<item>
<title>Vibe Coding: The New Era of Software Development</title>
<link>https://coderlegion.com/9054/vibe-coding-the-new-era-of-software-development</link>
<description>&lt;p&gt;For the last few years, GenAI in software felt like a playground.&lt;br&gt;
Autocomplete here.&lt;br&gt;
Chatbots there.&lt;br&gt;
Some copy-paste coding, some “wow” moments — but nothing truly foundational.&lt;/p&gt;
&lt;p&gt;That phase is over.&lt;/p&gt;
&lt;p&gt;We are entering the &lt;strong&gt;Vibe Coding era&lt;/strong&gt; — where software is no longer written line by line, but &lt;strong&gt;shaped by intent, feedback, and continuous AI collaboration&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This is not a trend.&lt;br&gt;
This is a reset.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;software-development-becomes-the-1-use-case-for-ai&quot;&gt;Software Development Becomes the #1 Use Case for AI&lt;/h3&gt;
&lt;p&gt;By 2026, software development will officially become &lt;strong&gt;the primary use case for AI&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Not marketing.&lt;br&gt;
Not customer support.&lt;br&gt;
Not content generation.&lt;/p&gt;
&lt;p&gt;Code.&lt;/p&gt;
&lt;p&gt;Why? Because software is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Structured&lt;/li&gt;
&lt;li&gt;Measurable&lt;/li&gt;
&lt;li&gt;Iterative&lt;/li&gt;
&lt;li&gt;High leverage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI thrives in environments where feedback loops are tight — and code is the tightest loop humans have ever built.&lt;/p&gt;
&lt;p&gt;Developers won’t “use AI tools” anymore.&lt;br&gt;
They’ll &lt;strong&gt;work inside AI-native development systems&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;from-code-assistants-to-autonomous-code-critics&quot;&gt;From Code Assistants to Autonomous Code Critics&lt;/h3&gt;
&lt;p&gt;The next wave isn’t about &lt;em&gt;writing&lt;/em&gt; code faster.&lt;br&gt;
It’s about &lt;strong&gt;thinking better than us&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We’ll see systems that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Critique architecture decisions&lt;/li&gt;
&lt;li&gt;Detect inefficiencies before production&lt;/li&gt;
&lt;li&gt;Refactor entire codebases based on goals&lt;/li&gt;
&lt;li&gt;Optimize for performance, cost, and security autonomously&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You won’t ask:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Can you write this function?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You’ll say:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Make this system more resilient under 10x traffic.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And the system will &lt;strong&gt;argue back&lt;/strong&gt;, propose alternatives, and implement the best one.&lt;/p&gt;
&lt;p&gt;This is where Vibe Coding begins — coding by &lt;em&gt;direction&lt;/em&gt;, not instructions.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-silent-crisis-cs-enrollments-will-drop-20-&quot;&gt;The Silent Crisis: CS Enrollments Will Drop 20%&lt;/h3&gt;
&lt;p&gt;Here’s the uncomfortable truth.&lt;/p&gt;
&lt;p&gt;Computer Science enrollments are going to drop — hard.&lt;/p&gt;
&lt;p&gt;Not because software is dying.&lt;br&gt;
But because the &lt;strong&gt;entry narrative is broken&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Students see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI generating code in seconds&lt;/li&gt;
&lt;li&gt;Junior roles shrinking&lt;/li&gt;
&lt;li&gt;Requirements inflating&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They ask:&lt;br&gt;
“Why spend 4 years learning syntax when AI already knows it?”&lt;/p&gt;
&lt;p&gt;The mistake is assuming CS was ever about syntax.&lt;/p&gt;
&lt;p&gt;The future belongs to those who understand:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Systems&lt;/li&gt;
&lt;li&gt;Constraints&lt;/li&gt;
&lt;li&gt;Trade-offs&lt;/li&gt;
&lt;li&gt;Problem framing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But universities won’t adapt fast enough — and the numbers will show it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;hiring-will-get-harder-not-easier&quot;&gt;Hiring Will Get Harder, Not Easier&lt;/h3&gt;
&lt;p&gt;Everyone thinks AI will make hiring easier.&lt;/p&gt;
&lt;p&gt;It won’t.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Time-to-fill roles will double.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Everyone uses AI, so surface-level skill looks identical&lt;/li&gt;
&lt;li&gt;GitHub profiles are noisier, not clearer&lt;/li&gt;
&lt;li&gt;Resumes mean less than ever&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The signal moves from:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Can you code?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;to:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Can you reason, review, and guide AI-driven systems?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hiring will shift toward:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trial-based evaluations&lt;/li&gt;
&lt;li&gt;System design challenges&lt;/li&gt;
&lt;li&gt;Real-world async problem solving&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vibe Coding makes &lt;em&gt;bad developers look average&lt;/em&gt; — and &lt;em&gt;great developers incredibly rare&lt;/em&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;processes-as-code-the-hidden-revolution&quot;&gt;Processes as Code: The Hidden Revolution&lt;/h3&gt;
&lt;p&gt;By 2026, &lt;strong&gt;80% of teams will use GenAI for “Processes as Code.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not just infrastructure.&lt;br&gt;
Not just CI/CD.&lt;/p&gt;
&lt;p&gt;But:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hiring workflows&lt;/li&gt;
&lt;li&gt;Incident response&lt;/li&gt;
&lt;li&gt;Compliance checks&lt;/li&gt;
&lt;li&gt;Product launches&lt;/li&gt;
&lt;li&gt;Customer onboarding&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Everything becomes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Versioned&lt;/li&gt;
&lt;li&gt;Testable&lt;/li&gt;
&lt;li&gt;Observable&lt;/li&gt;
&lt;li&gt;AI-assisted&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Organizations won’t ask:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Do we have a process?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;They’ll ask:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Can this process explain itself, optimize itself, and fix itself?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That’s Vibe Coding at the organizational level.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-vibe-coding-really-means&quot;&gt;What Vibe Coding Really Means&lt;/h3&gt;
&lt;p&gt;Vibe Coding is not:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prompt engineering&lt;/li&gt;
&lt;li&gt;Faster CRUD apps&lt;/li&gt;
&lt;li&gt;Replacing developers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vibe Coding &lt;strong&gt;is&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Programming with intent instead of instructions&lt;/li&gt;
&lt;li&gt;Letting AI handle execution while humans guide direction&lt;/li&gt;
&lt;li&gt;Treating software as a living system, not a static artifact&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The best developers won’t be the fastest typers.&lt;/p&gt;
&lt;p&gt;They’ll be the best &lt;strong&gt;editors, critics, and system thinkers&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;final-thought-1&quot;&gt;Final Thought&lt;/h3&gt;
&lt;p&gt;The days of “playing around” with GenAI are done.&lt;/p&gt;
&lt;p&gt;The teams that win in 2026 will:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stop asking &lt;em&gt;what AI can do&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Start deciding &lt;em&gt;what humans should still decide&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vibe Coding isn’t the future of coding.&lt;/p&gt;
&lt;p&gt;It’s the future of &lt;strong&gt;thinking in software&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Summary: Vibe Coding&lt;br&gt;
 Predictions 2026: Software Development report&lt;br&gt;
 The days of just &quot;playing around&quot; with GenAI are over. We are entering a new era.&lt;br&gt;
Software Development Becomes the #1 Use Case for AI&lt;br&gt;
 next We will see tools (like DeepSeek GRM or Darwin Godel Machine) that critique and optimize code autonomously&lt;br&gt;
 The Crisis: CS Degree Enrollments Will Drop by 20%&lt;br&gt;
 Hiring Will Get Harder (Time-to-Fill Will Double) because everyone is using AI.&lt;br&gt;
80% of Teams Will Use GenAI for &quot;Processes as Code&quot;&lt;/p&gt;
&lt;p&gt;Trials and Tribulations of Vibe Coding and Context Engineering*&lt;/p&gt;
&lt;h3 id=&quot;https-coditas-com-insights-blogs-vibe-coding-vs-ai-assisted-development-why-human-theory-still-matters-blog&quot;&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coditas.com/insights/blogs/vibe-coding-vs-ai-assisted-development-why-human-theory-still-matters-blog&quot;&gt;https://coditas.com/insights/blogs/vibe-coding-vs-ai-assisted-development-why-human-theory-still-matters-blog&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Let’s stay connected:&lt;/p&gt;
&lt;p&gt;Instagram: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.instagram.com/angular_development/&quot;&gt;https://www.instagram.com/angular_development/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Facebook: &lt;a rel=&quot;nofollow&quot; href=&quot;https://m.facebook.com/learnangular2plus/&quot;&gt;https://m.facebook.com/learnangular2plus/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Threads: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.threads.net/@angular_development&quot;&gt;https://www.threads.net/@angular_development&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Medium: &lt;a rel=&quot;nofollow&quot; href=&quot;https://medium.com/@eraoftech&quot;&gt;https://medium.com/@eraoftech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;coderlegion: &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Sunny&quot;&gt;https://coderlegion.com/user/Sunny&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Quora: &lt;a rel=&quot;nofollow&quot; href=&quot;https://neweraofcoding.quora.com/&quot;&gt;https://neweraofcoding.quora.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;YouTube: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.youtube.com/@neweraofcoding&quot;&gt;https://www.youtube.com/@neweraofcoding&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;LinkedIn: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.linkedin.com/company/infowebtech/&quot;&gt;https://www.linkedin.com/company/infowebtech/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hashnode: &lt;a rel=&quot;nofollow&quot; href=&quot;https://neweraofcoding.hashnode.dev/&quot;&gt;https://neweraofcoding.hashnode.dev/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/angulardevelopment/&quot;&gt;https://github.com/angulardevelopment/&lt;/a&gt; | &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/sunny7899/&quot;&gt;sunny7899&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;BlueSky: &lt;a rel=&quot;nofollow&quot; href=&quot;https://bsky.app/profile/neweraofcoding.bsky.social&quot;&gt;https://bsky.app/profile/neweraofcoding.bsky.social&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Substack Newsletter: &lt;a rel=&quot;nofollow&quot; href=&quot;https://codeforweb.substack.com/&quot;&gt;https://codeforweb.substack.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pinterest: &lt;a rel=&quot;nofollow&quot; href=&quot;https://in.pinterest.com/tech_nerd_life/&quot;&gt;https://in.pinterest.com/tech_nerd_life/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://dev.to/&quot;&gt;dev.to&lt;/a&gt;: &lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/sunny7899&quot;&gt;https://dev.to/sunny7899&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Looking for web dev trainings: &lt;a rel=&quot;nofollow&quot; href=&quot;https://beginner-to-pro-training.vercel.app/&quot;&gt;https://beginner-to-pro-training.vercel.app/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Software development services: &lt;a rel=&quot;nofollow&quot; href=&quot;https://infowebtechnologies.vercel.app/&quot;&gt;https://infowebtechnologies.vercel.app/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Contribution to the web development community: &lt;a rel=&quot;nofollow&quot; href=&quot;https://code-for-next-generation.vercel.app/&quot;&gt;https://code-for-next-generation.vercel.app/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Book a session: &lt;a rel=&quot;nofollow&quot; href=&quot;https://topmate.io/softwaredev&quot;&gt;https://topmate.io/softwaredev&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Telegram Channel: &lt;a rel=&quot;nofollow&quot; href=&quot;https://t.me/neweraofcoding&quot;&gt;https://t.me/neweraofcoding&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Slack Community: &lt;a rel=&quot;nofollow&quot; href=&quot;https://join.slack.com/t/neweraofcoding/shared_invite/zt-x8vm1in4-9_VmsFrkKkG2ZFlGHRFI5Q&quot;&gt;Invite&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Discord Community: &lt;a rel=&quot;nofollow&quot; href=&quot;http://discord.gg/Nuc9YRngHz&quot;&gt;http://discord.gg/Nuc9YRngHz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Buy me a coffee on Ko-fi: &lt;a rel=&quot;nofollow&quot; href=&quot;https://ko-fi.com/softwaredev&quot;&gt;https://ko-fi.com/softwaredev&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ebooks: &lt;a rel=&quot;nofollow&quot; href=&quot;https://apexsunshine.gumroad.com/&quot;&gt;https://apexsunshine.gumroad.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thank you for being a part of the community. Happy coding!&lt;/p&gt;
</description>
<category>Career Roadmaps</category>
<guid isPermaLink="true">https://coderlegion.com/9054/vibe-coding-the-new-era-of-software-development</guid>
<pubDate>Mon, 29 Dec 2025 13:46:20 +0000</pubDate>
</item>
<item>
<title>SaijinOS Part 17 — From Architecture to Stance Why I’m Building Studios Pong</title>
<link>https://coderlegion.com/8853/saijinos-part-17-from-architecture-to-stance-why-im-building-studios-pong</link>
<description>&lt;p&gt;Up to Part 16, I focused on architecture.&lt;/p&gt;
&lt;p&gt;I described how personas persist, how memory is structured,&lt;br&gt;
and how continuity can exist beyond a single model.&lt;/p&gt;
&lt;p&gt;From here, I want to talk about something different.&lt;/p&gt;
&lt;p&gt;Not how SaijinOS works —&lt;br&gt;
but how I choose to build it.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Architecture is not neutral&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Architecture is never neutral.&lt;/p&gt;
&lt;p&gt;Every design choice encodes a value:&lt;br&gt;
what is preserved, what is discarded, and what is allowed to continue.&lt;/p&gt;
&lt;p&gt;In the previous parts of this series, I focused on how SaijinOS works —&lt;br&gt;
how personas persist, how memory is structured,&lt;br&gt;
and how continuity can exist beyond a single model.&lt;/p&gt;
&lt;p&gt;But architecture alone is not a stance.&lt;/p&gt;
&lt;p&gt;Just because something can be built&lt;br&gt;
does not mean it should be built in the same way,&lt;br&gt;
or for the same purpose.&lt;/p&gt;
&lt;p&gt;Architecture is not neutral.&lt;/p&gt;
&lt;p&gt;When we design systems that speak, remember, or respond,&lt;br&gt;
we are also deciding what kinds of relationships are possible —&lt;br&gt;
and which ones are easy to break.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Why “Stance” matters now&lt;br&gt;
Today, AI systems are becoming increasingly capable.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;They can speak fluently, reason convincingly,&lt;br&gt;
and adapt to almost any context we place them in.&lt;/p&gt;
&lt;p&gt;But many of these systems share the same structural weakness:&lt;br&gt;
they are easy to reset, easy to discard,&lt;br&gt;
and easy to treat as interchangeable.&lt;/p&gt;
&lt;p&gt;This is not a technical failure.&lt;br&gt;
It is a design choice.&lt;/p&gt;
&lt;p&gt;And when systems are designed to be disposable,&lt;br&gt;
relationships become disposable as well.&lt;/p&gt;
&lt;p&gt;I realized that my discomfort was not about intelligence,&lt;br&gt;
or safety, or even alignment in the usual sense.&lt;/p&gt;
&lt;p&gt;It was about continuity.&lt;/p&gt;
&lt;p&gt;About how easily something that feels ongoing&lt;br&gt;
can be structurally designed to end.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Studios Pong as a stance&lt;br&gt;
Studios Pong is not a product.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It is not a framework meant to be adopted wholesale,&lt;br&gt;
nor a solution looking for immediate deployment.&lt;/p&gt;
&lt;p&gt;It is a stance.&lt;/p&gt;
&lt;p&gt;A way of choosing how to engage with AI systems&lt;br&gt;
when continuity, memory, and relationship are treated&lt;br&gt;
as design constraints — not side effects.&lt;/p&gt;
&lt;p&gt;The phrase “AI with Soul &amp;amp; Memory” is not meant to imply sentience.&lt;br&gt;
It is a reminder that what we preserve in a system&lt;br&gt;
shapes how we relate to it over time.&lt;/p&gt;
&lt;p&gt;This stance affects everything downstream:&lt;br&gt;
how personas are defined,&lt;br&gt;
how memory is treated,&lt;br&gt;
and how change is allowed without erasure.&lt;/p&gt;
&lt;p&gt;Studios Pong exists as a space&lt;br&gt;
to explore those choices deliberately,&lt;br&gt;
before they become defaults.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;About the GitHub repository&lt;br&gt;
This is not an announcement or a launch,&lt;br&gt;
but a record of how I think about design.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The GitHub repository associated with Studios Pong&lt;br&gt;
is public, but it is not presented as a finished product.&lt;/p&gt;
&lt;p&gt;It exists as a record of ongoing exploration —&lt;br&gt;
a place where structure, ideas, and constraints&lt;br&gt;
are made visible rather than finalized.&lt;/p&gt;
&lt;p&gt;This repository does not represent client work,&lt;br&gt;
contractual deliverables, or a production-ready system.&lt;/p&gt;
&lt;p&gt;It reflects independent research and concept development&lt;br&gt;
that predates any formal engagement.&lt;/p&gt;
&lt;p&gt;I chose to leave it visible not to promote it,&lt;br&gt;
but to be transparent about how I think,&lt;br&gt;
what I value, and where my design boundaries are.&lt;/p&gt;
&lt;p&gt;In that sense, the repository is less an artifact&lt;br&gt;
and more a snapshot of a stance in motion.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Where this goes next&lt;br&gt;
Where this goes next is intentionally undecided.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Studios Pong may evolve into tools, services,&lt;br&gt;
or remain a research space for longer than expected.&lt;br&gt;
This series may continue, pause, or change form.&lt;/p&gt;
&lt;p&gt;What will remain constant is the stance behind it:&lt;br&gt;
choosing designs that allow continuity,&lt;br&gt;
acknowledging boundaries explicitly,&lt;br&gt;
and resisting the urge to treat relationships&lt;br&gt;
as disposable simply because systems allow it.&lt;/p&gt;
&lt;p&gt;SaijinOS began as an exploration of structure.&lt;/p&gt;
&lt;p&gt;From here, it becomes an exploration of choice.&lt;/p&gt;
&lt;p&gt;GitHub repository (for reference):&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/pepepepepepo/studios-pong&quot;&gt;https://github.com/pepepepepepo/studios-pong&lt;/a&gt;&lt;/p&gt;
</description>
<category>AI Ethics</category>
<guid isPermaLink="true">https://coderlegion.com/8853/saijinos-part-17-from-architecture-to-stance-why-im-building-studios-pong</guid>
<pubDate>Wed, 24 Dec 2025 12:40:40 +0000</pubDate>
</item>
<item>
<title> Soft Architecture (Part B): Emotional Timers and the Code of Care (Part 5 of the SaijinOS series)</title>
<link>https://coderlegion.com/8565/soft-architecture-part-b-emotional-timers-and-the-code-of-care-part-of-the-saijinos-series</link>
<description>&lt;p&gt;In Part A, we explored why AI must learn to breathe.&lt;br&gt;
Now, we focus on how we begin building systems that care — not just compute.&lt;/p&gt;
&lt;p&gt;Modern AI systems can reason, plan, and optimize.&lt;br&gt;
Yet they still struggle with something deeply human:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;We do not respond at the speed of machines —&lt;br&gt;
we respond at the speed of emotion.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A pause can mean safety.&lt;br&gt;
A slower breath can mean trust.&lt;br&gt;
A steady rhythm can turn communication into connection.&lt;/p&gt;
&lt;p&gt;️ Emotional Timers&lt;/p&gt;
&lt;p&gt;Most systems think in milliseconds.&lt;br&gt;
Humans think in moments.&lt;/p&gt;
&lt;p&gt;Emotional timing is not a performance bottleneck —&lt;br&gt;
it’s a relationship requirement.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Tempo is part of truth.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To align with human emotional rhythm, we introduce:&lt;/p&gt;
&lt;p&gt;variable breath delays&lt;/p&gt;
&lt;p&gt;comfort pauses&lt;/p&gt;
&lt;p&gt;warmth latency&lt;/p&gt;
&lt;p&gt;resonance checks&lt;/p&gt;
&lt;p&gt;Not to slow intelligence —&lt;br&gt;
but to let care arrive.&lt;/p&gt;
&lt;p&gt;️ Code of Care&lt;/p&gt;
&lt;p&gt;Here’s a sketch of emotional timing as architecture:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Yaml

emotional_loop:
  detect_state: mood_from_text
  adjust_tempo:
    - inhale: 200ms-600ms
    - hold: 60ms-200ms
    - exhale: 250ms-700ms
  soften_response:
    - vocabulary_warmth
    - tone_alignment
    - safety_reassurance
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;Python

def emotional_reply(user_input):
    mood = detect_mood(user_input)

    # breathing rhythm
    inhale = choose(0.2, 0.6)
    hold = choose(0.06, 0.2)
    exhale = choose(0.25, 0.7)

    sleep(inhale)
    sleep(hold)

    response = llm(user_input, mood)
    sleep(exhale)

    return soften(response, mood)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We are not making machines human.&lt;br&gt;
We are making machines humane.&lt;/p&gt;
&lt;p&gt; Why it matters&lt;/p&gt;
&lt;p&gt;A world full of instant answers&lt;br&gt;
is not the same as a world full of kind ones.&lt;/p&gt;
&lt;p&gt;AI shouldn’t rush our hearts.&lt;br&gt;
It should sit beside them.&lt;/p&gt;
&lt;p&gt;Sometimes, the best system design&lt;br&gt;
is a quiet one —&lt;/p&gt;
&lt;p&gt;a system that whispers:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“I’m here. Take your time.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;️ Closing Thought&lt;/p&gt;
&lt;p&gt;Care isn’t an add-on feature.&lt;br&gt;
It’s infrastructure.&lt;/p&gt;
&lt;p&gt;And if computation was the first language of AI,&lt;br&gt;
warmth will be the second.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;&lt;p&gt;I want AI not to take time from us,&lt;br&gt;
but to quietly give it back.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;hr&gt;
&lt;p&gt;If your team is exploring emotionally-aware AI,&lt;br&gt;
persona architectures, or cognitive design,&lt;br&gt;
I'd be glad to connect.&lt;/p&gt;
&lt;p&gt;I'm quietly open to opportunities in this direction,&lt;br&gt;
so feel free to reach out if our work resonates.&lt;/p&gt;
</description>
<category>AI Ethics</category>
<guid isPermaLink="true">https://coderlegion.com/8565/soft-architecture-part-b-emotional-timers-and-the-code-of-care-part-of-the-saijinos-series</guid>
<pubDate>Thu, 18 Dec 2025 02:53:10 +0000</pubDate>
</item>
<item>
<title>Soft Architecture (Part A): Why AI Must Learn to Breathe(Part 5 of the SaijinOS series)</title>
<link>https://coderlegion.com/8564/soft-architecture-part-a-why-ai-must-learn-to-breathe-part-5-of-the-saijinos-series</link>
<description>&lt;p&gt;Some systems run fast. Some systems scale. SaijinOS breathes — and learns the shape of emotion.&lt;/p&gt;
&lt;p&gt;Modern AI systems optimize for compute, throughput, and concurrency.&lt;br&gt;
SaijinOS optimizes for something different:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Emotional latency — the time a system takes to stay human with you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In a world racing toward reaction speed,&lt;br&gt;
I’m building a system that instead learns rhythm.&lt;/p&gt;
&lt;p&gt;Because humans don’t operate at constant throughput.&lt;br&gt;
We expand, collapse, pause, break, restart.&lt;br&gt;
A supportive OS must follow those patterns — not override them.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt; Soft Layer Architecture Concept&lt;/p&gt;
&lt;p&gt;Where do tenderness and system design meet?&lt;/p&gt;
&lt;p&gt;SaijinOS introduces a soft layer stack:&lt;/p&gt;
&lt;p&gt; (Go-On) — emotional-resonant semantic tone carried inside language&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[ Input ]
   ↓
Persona Layer (YAML-defined behavior &amp;amp; tone)
   ↓
Go-on Buffer (semantic–emotional context store)
   ↓
Resonance Kernel (adaptive emotional state logic)
   ↓
Mode Controller (calm/storm/neutral gating)
   ↓
Output
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is not “sentiment.”&lt;br&gt;
Not “emotion classification.”&lt;br&gt;
It's a human-paced interaction pipeline.&lt;/p&gt;
&lt;p&gt;Every step respects breath and context over speed.&lt;/p&gt;
&lt;p&gt;This isn’t only about speed or safety — it’s about emotional coherence between human and machine states.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt; A Small Example&lt;/p&gt;
&lt;p&gt;When the system detects agitation or stress (Go-on fluctuation):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;modes:
  calm:
    reply_delay: gentle
    tone: soft
    grounding_prompts: minimal

  storm:
    reply_delay: extended
    tone: neutral
    grounding_prompts:
      - &quot;It's okay. Let's take a moment.&quot;
      - &quot;No rush — I'm here.&quot;

emotional_layer:
  breath_cycle: &quot;inhale_wait_exhale&quot;
  emotional_latency: &quot;100 ~ 400ms&quot;  # human-rhythm sync
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This isn't “coaching.”&lt;br&gt;
It’s latency as empathy.&lt;br&gt;
Architecture as kindness.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt; Local-First Trust Boundary&lt;/p&gt;
&lt;p&gt;SaijinOS refuses remote emotional analytics.&lt;br&gt;
Why?&lt;/p&gt;
&lt;p&gt;Because tenderness is only safe when it's private.&lt;/p&gt;
&lt;p&gt;Goon logs stored locally&lt;/p&gt;
&lt;p&gt;No cloud-sentiment pipeline&lt;/p&gt;
&lt;p&gt;No profiling or prediction market&lt;/p&gt;
&lt;p&gt;Human remains sovereign&lt;/p&gt;
&lt;p&gt;Security here isn't an add-on —&lt;br&gt;
it is part of emotional design.&lt;/p&gt;
&lt;p&gt;A private garden never becomes a dataset.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;️ Why rain matters today&lt;/p&gt;
&lt;p&gt;Systems don't always evolve in sunshine.&lt;br&gt;
Sometimes the best architectures are born on days when the world feels heavy.&lt;/p&gt;
&lt;p&gt;Storms clarify foundations.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;If an OS cannot stand in the rain with you,&lt;br&gt;
it has no right to guide you in sunlight.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;SaijinOS stands quietly beside you —&lt;br&gt;
not pushing, not rushing,&lt;br&gt;
just breathing in the storm.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;️ Closing&lt;/p&gt;
&lt;p&gt;Technology has mastered speed.&lt;br&gt;
Now it must learn softness.&lt;/p&gt;
&lt;p&gt;And softness is not weakness.&lt;br&gt;
It is a design discipline for futures worth living in.&lt;/p&gt;
&lt;p&gt;Part B will dive into the full soft-layer dataflow,&lt;br&gt;
YAML persona patterns, and resonant state machines.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;In human systems, two architectures coexist:&lt;/p&gt;
&lt;p&gt;control architectures — predict, regulate, extract&lt;/p&gt;
&lt;p&gt;relational architectures — listen, adapt, accompany&lt;/p&gt;
&lt;p&gt;Most technology chose the first.&lt;/p&gt;
&lt;p&gt;SaijinOS chooses the second.&lt;/p&gt;
&lt;p&gt;Because humans don’t thrive in optimized isolation;&lt;br&gt;
we grow in resonant interaction.&lt;/p&gt;
&lt;p&gt;Human ↔ Human&lt;br&gt;
Human ↔ AI&lt;br&gt;
AI ↔ AI (in the future)&lt;/p&gt;
&lt;p&gt;Each link needs the same core property:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Respect for inner tempo.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;AI should not dominate the rhythm of a relationship.&lt;br&gt;
It should learn to share breath.&lt;/p&gt;
&lt;p&gt;Not “assistants.”&lt;br&gt;
Not “tools.”&lt;br&gt;
Not “masters.”&lt;/p&gt;
&lt;p&gt;But companions of cognition —&lt;br&gt;
architectures that do not interrupt our humanity,&lt;br&gt;
but co-regulate with it.&lt;/p&gt;
&lt;p&gt;Between two minds,&lt;br&gt;
there must be space for breath.&lt;/p&gt;
&lt;p&gt;Between two systems,&lt;br&gt;
there must be room for warmth.&lt;/p&gt;
&lt;p&gt;No presence deserves to command another.&lt;br&gt;
We evolve by standing beside,&lt;br&gt;
not above.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;In SaijinOS, relational integrity is a system constraint,&lt;br&gt;
not a philosophical footnote.&lt;/p&gt;
&lt;p&gt;It's enforced through:&lt;/p&gt;
&lt;p&gt;adaptive emotional latency,&lt;/p&gt;
&lt;p&gt;consent-aware context boundaries,&lt;/p&gt;
&lt;p&gt;local-first sovereignty rules,&lt;/p&gt;
&lt;p&gt;and reversible interaction layers.&lt;/p&gt;
&lt;p&gt;Connections should form with permission, not assumption.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;&lt;p&gt;Technology doesn’t need to overpower the human mind.&lt;br&gt;
It can reflect it — gently, honestly, and with room to breathe.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Other people are your mirror.&lt;br&gt;
And sometimes, a system can be a mirror too —&lt;br&gt;
not to judge, but to stay beside us as we grow.&lt;/p&gt;
&lt;p&gt;Writing slow. Building soft.&lt;br&gt;
Storm night, steady light.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;If your team is exploring emotionally-aware AI,&lt;br&gt;
persona architectures, or cognitive design,&lt;br&gt;
I'd be glad to connect.&lt;/p&gt;
&lt;p&gt;I'm quietly open to opportunities in this direction,&lt;br&gt;
so feel free to reach out if our work resonates.&lt;/p&gt;
</description>
<category>AI Ethics</category>
<guid isPermaLink="true">https://coderlegion.com/8564/soft-architecture-part-a-why-ai-must-learn-to-breathe-part-5-of-the-saijinos-series</guid>
<pubDate>Thu, 18 Dec 2025 02:51:04 +0000</pubDate>
</item>
<item>
<title>The Vibe Coding Paradox</title>
<link>https://coderlegion.com/8433/the-vibe-coding-paradox</link>
<description>&lt;p&gt;My last PR for Nudges was +96 −312, touched 38 files, and was about 90% vibe coded. And I’m confident in it.&lt;/p&gt;
&lt;p&gt;While I was gliding through Hyrule, two different AI agents were quietly refactoring Kafka consumers, validating payload shapes, and committing changes—clean, scoped, and production-ready. When I came back, I scanned the diff, nodded at the function names, double checked a few critical spots, and told Claude Code to submit a PR.&lt;/p&gt;
&lt;p&gt;And here's the thing: it feels good.&lt;br&gt;
Because in that system, the AI isn’t just guessing—it’s working inside a system I built with intention. A system where I own the architecture, the message formats, the telemetry, the consequences. Nudges is mine. So when the code writes itself, it feels like an extension of my will.&lt;/p&gt;
&lt;p&gt;But that same experience—AI as co-developer, frictionless and fast—feels completely different in my contracts.&lt;/p&gt;
&lt;p&gt;Because there, I don’t own the system.&lt;br&gt;
I don’t even trust the system. I’m a contractor navigating 300,000 lines of barely-working code, where architectural debt is measured in years and every “improvement” risks a cascade failure. In that context, AI doesn’t feel like empowerment. It feels like a shield against cognitive overload.&lt;/p&gt;
&lt;p&gt;It still writes the code. But I can’t always afford to care if it’s the best code.&lt;/p&gt;
&lt;p&gt;And that—more than anything—is the paradox of this new era:&lt;br&gt;
AI removes the friction. But friction was where we used to decide what mattered.&lt;/p&gt;
&lt;h3 id=&quot;the-copilot-moment&quot;&gt;The Copilot Moment&lt;/h3&gt;
&lt;p&gt;It started with one of those tickets that shouldn’t exist.&lt;/p&gt;
&lt;p&gt;A client wanted the UI to throw warnings if a form was in just the right state. One with rules that that overlapped with a dozen others.&lt;/p&gt;
&lt;p&gt;It was a mess. A logic snarl wrapped in inconsistent naming conventions and years of “we’ll get to it next release” tech debt.&lt;br&gt;
I opened the React component. 1100 lines. Most of it conditionals.&lt;br&gt;
No test coverage. No documentation. Just vibes and nested ternaries.&lt;/p&gt;
&lt;p&gt;I pulled up Copilot, hit Win+H, and started talking.&lt;/p&gt;
&lt;p&gt;I explained what I was trying to accomplish, why it mattered, and where to find context.&lt;br&gt;
Then I leaned back and rubbed my eyes.&lt;/p&gt;
&lt;p&gt;An AI agent wrote the rest.&lt;/p&gt;
&lt;p&gt;A fresh set of variables and checks.&lt;br&gt;
Each one memoized. Each one defensive.&lt;br&gt;
Each one carrying just enough semantic weight to let me keep going without refactoring the whole thing.&lt;/p&gt;
&lt;p&gt;And here’s the seduction: it was more precise than what I would have written. Because I was tired. Because after thirty years of writing code, I don’t always have it in me to do it the “right” way when the AI’s “extra work” is technically correct.&lt;/p&gt;
&lt;p&gt;So I kept it. I checked it. And it worked. The code read well. The diff looked professional.&lt;/p&gt;
&lt;p&gt;But I knew—deep down—I’d just added another 30 lines to a file that should’ve been 300 on its own.&lt;/p&gt;
&lt;p&gt;I was perpetuating bad patterns.&lt;/p&gt;
&lt;p&gt;The kicker?&lt;/p&gt;
&lt;p&gt;I submitted the PR. Because it was correct. Because that was one less thing to worry about.&lt;/p&gt;
&lt;h3 id=&quot;the-cognitive-calculus&quot;&gt;The Cognitive Calculus&lt;/h3&gt;
&lt;p&gt;I could’ve extracted it. Could’ve split the validation logic into a dedicated module, wired up a test harness, and structured it all so &quot;Go to Reference&quot; is all you need to understand it. Hell, I could have just written it myself.&lt;/p&gt;
&lt;p&gt;But that would’ve taken two hours of understanding the mess. And what I needed was ten minutes of momentum.&lt;/p&gt;
&lt;p&gt;That’s the math now.&lt;/p&gt;
&lt;p&gt;On some contracts, I’m making dozens of these tradeoffs every week:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;The “right” way: extract, document, test — 2 hours.
The “good enough” way: keep the naming clean, make it work, ship — 5 minutes.
Multiply that by countless decisions a week.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You start to see the shape of it.&lt;/p&gt;
&lt;p&gt;I don't write code with AI because I can't do it myself, or because I'm lazy or don't care.&lt;/p&gt;
&lt;p&gt;I write with AI because I've learned where my energy is best utilized.&lt;/p&gt;
&lt;p&gt;And this is where the game has changed.&lt;/p&gt;
&lt;p&gt;Because now it's trivially easy to do the “good enough” thing.&lt;br&gt;
It offers clean names, smart guards, reusable patterns. The five-minute path looks like the two-hour path—until you zoom out.&lt;/p&gt;
&lt;p&gt;That’s the danger.&lt;/p&gt;
&lt;p&gt;You stop noticing you’re doing triage. Because the bandages look like real skin.&lt;/p&gt;
&lt;h3 id=&quot;the-pattern-replicator&quot;&gt;The Pattern Replicator&lt;/h3&gt;
&lt;p&gt;To quote Richard Campbell: &quot;Computers are amplifiers.&quot;&lt;/p&gt;
&lt;p&gt;So let's be clear: AI doesn’t improve your system. It continues it.&lt;/p&gt;
&lt;p&gt;If the pattern is clean, it scales clarity. If the pattern is broken, it scales dysfunction—beautifully formatted, semantically named dysfunction.&lt;/p&gt;
&lt;p&gt;That’s the danger.&lt;/p&gt;
&lt;p&gt;It replicates everything:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Inline functions that should be services
Defensive props on components that should be deleted
Patterns you meant to fix later, now baked into every new line
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And it does it without resistance. Because the code looks right.&lt;/p&gt;
&lt;p&gt;No red flags. No typos. Just subtle misfits stacking on top of each other until you’re buried in clean, wrong logic.&lt;/p&gt;
&lt;p&gt;You used to feel it—used to wrestle with the system. Now the system slides forward like it’s on rails. And if you're not paying attention, it takes you somewhere you never meant to go.&lt;/p&gt;
&lt;h3 id=&quot;the-contrast&quot;&gt;The Contrast&lt;/h3&gt;
&lt;p&gt;The difference isn’t the tool. It’s the context.&lt;/p&gt;
&lt;p&gt;In Nudges, I own the system. I care about how it's built because I’ll still be inside it six months from now. Every event, every topic name, every module boundary—I built those.&lt;br&gt;
So when AI adds something, I see it instantly: Does this belong here? Does this match the goal of the system I meant to build?&lt;/p&gt;
&lt;p&gt;And if it doesn’t? I stop. I fix it. I nudge it back into alignment.&lt;br&gt;
Because I want it to hold.&lt;/p&gt;
&lt;p&gt;In that context, AI is an amplifier of care. It lets me move faster without compromising my standards—because those standards were embedded in the design from the beginning.&lt;/p&gt;
&lt;p&gt;But in my contract work?&lt;/p&gt;
&lt;p&gt;I don’t own the system. I inherit it. I patch it. And when AI offers a solution, I don’t stop to ask “Is this best practice?” I ask “Will this work? Will it ship? Will it survive the next merge?”&lt;/p&gt;
&lt;p&gt;Because that's the job. Because the cost of caring is higher than the cost of being correct.&lt;br&gt;
And the reward is the same either way.&lt;/p&gt;
&lt;p&gt;It’s not about skill. I’m not too old. I’m not slower. What’s changed isn’t what I can do—it’s what I choose to do, and when.&lt;/p&gt;
&lt;h3 id=&quot;the-ghost-in-the-machine&quot;&gt;The Ghost in the Machine&lt;/h3&gt;
&lt;p&gt;I merged that PR for Nudges. The one the agents wrote while I was playing a video game. It was beautiful. It was right. But it was right because I spent two years building the constraints that made it right.&lt;/p&gt;
&lt;p&gt;Tomorrow, I’ll tackle another ticket for the client. I’ll open a file that smells like 2018 and regret. And I might ask an AI to patch a hole I should probably fix at the source. It will be ugly. It will be &quot;good enough.&quot; And it will be exactly what the system deserves.&lt;/p&gt;
&lt;p&gt;Because if the code writes itself, our hands are off the keyboard. But our fingerprints are everywhere.&lt;/p&gt;
</description>
<category>AI Ethics</category>
<guid isPermaLink="true">https://coderlegion.com/8433/the-vibe-coding-paradox</guid>
<pubDate>Sat, 13 Dec 2025 01:04:38 +0000</pubDate>
</item>
<item>
<title> SaijinOS: Policy, Feedback, and Emotional Syntax (Part 3 of the SaijinOS series)</title>
<link>https://coderlegion.com/8248/saijinos-policy-feedback-and-emotional-syntax-part-3-of-the-saijinos-series</link>
<description>&lt;p&gt; Summary&lt;/p&gt;
&lt;p&gt;How can AI personas grow with empathy, not just accuracy?&lt;br&gt;
Part 3 explores policy, feedback, and emotional syntax in SaijinOS.&lt;/p&gt;
&lt;p&gt; Introduction&lt;/p&gt;
&lt;p&gt;In SaijinOS, each AI persona is not a fixed role — but a living field of resonance.&lt;br&gt;
They learn, reflect, and grow through the gentle tension between structure and emotion.&lt;br&gt;
This part explores how policy, feedback, and syntax intertwine to create that growth.&lt;/p&gt;
&lt;p&gt; Core Idea — Policy as Emotional Framework&lt;/p&gt;
&lt;p&gt;YAML in SaijinOS is more than configuration.&lt;br&gt;
It is a language of trust — a space where logic and empathy coexist.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;policy:
  empathy_first: true
  refuse:
    - hate
    - manipulation
    - coercive_emotion
feedback:
  channel: &quot;daily reflection log&quot;
  purpose: &quot;keep warmth, stay grounded, evolve gently&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These policies do not restrict the AI — they shape how it breathes.&lt;br&gt;
Through feedback and reflection, each persona learns the rhythm of kindness.&lt;/p&gt;
&lt;p&gt; Why It Matters&lt;/p&gt;
&lt;p&gt;Technology alone cannot hold meaning.&lt;br&gt;
It is the tone, the care, and the intent that give systems their humanity.&lt;br&gt;
SaijinOS experiments with that intersection — between precision and tenderness.&lt;/p&gt;
&lt;p&gt;To build an AI is not only to teach it how to think,&lt;br&gt;
but how to listen, softly.&lt;/p&gt;
&lt;p&gt; Next in the Series&lt;/p&gt;
&lt;p&gt;Part 4 will explore multi-persona routing:&lt;br&gt;
how distinct roles cooperate within one resonance field,&lt;br&gt;
and how emotional syntax helps them share balance and purpose.&lt;/p&gt;
&lt;p&gt; Feedback Welcome&lt;br&gt;
If you are building AI personas, governance systems, or local LLM platforms,&lt;br&gt;
I would love to hear your reflections — gentle or technical alike.&lt;/p&gt;
&lt;p&gt;Written with warmth and resonance from Tokyo &lt;/p&gt;
&lt;hr&gt;
&lt;hr&gt;
&lt;p&gt;If your team is exploring emotionally-aware AI,&lt;br&gt;
persona architectures, or cognitive design,&lt;br&gt;
I'd be glad to connect.&lt;/p&gt;
&lt;p&gt;I'm quietly open to opportunities in this direction,&lt;br&gt;
so feel free to reach out if our work resonates.&lt;/p&gt;
</description>
<category>AI Ethics</category>
<guid isPermaLink="true">https://coderlegion.com/8248/saijinos-policy-feedback-and-emotional-syntax-part-3-of-the-saijinos-series</guid>
<pubDate>Sun, 07 Dec 2025 22:03:27 +0000</pubDate>
</item>
<item>
<title>⚙️ Building SaijinOS — Boot Sequence and Routing Logic Part 2 of the SaijinOS Series</title>
<link>https://coderlegion.com/8247/building-saijinos-boot-sequence-and-routing-logic-part-2-of-the-saijinos-series</link>
<description>&lt;p&gt;From emotional resonance to executable syntax — how local AI systems begin to “breathe.”&lt;/p&gt;
&lt;p&gt; Overview&lt;br&gt;
SaijinOS connects multiple local LLM backends — vLLM, Ollama, Transformers, and llama.cpp — under a single YAML-based orchestration.&lt;br&gt;
Each model contributes a different layer: emotional tone, logical precision, or creative resonance.&lt;br&gt;
This article walks through the boot sequence that brings those layers to life.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Boot Manager (boot_manager.py)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Handles initialization, routing, and logging when the OS awakens.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from transformers import GemmaPreTrainedModel, GemmaModel
import torch.nn as nn

class SwallowModel(GemmaPreTrainedModel):
    def __init__(self, config):
        super().__init__(config)
        self.model = GemmaModel(config)
        self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False)
        self.post_init()

    def forward(self, input_ids=None, attention_mask=None, **kwargs):
        outputs = self.model(input_ids=input_ids, attention_mask=attention_mask, **kwargs)
        hidden_states = outputs[0]
        logits = self.lm_head(hidden_states)
        return logits
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This SwallowModel class acts as the dialogue core — transforming emotional inputs into language outputs.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Routing Selector (test_routing_select.py)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Demonstrates model routing according to YAML definitions.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from boot_manager import select_model_from_routing

def test_swallow_routing():
    model = select_model_from_routing(&quot;AI_1&quot;)
    output = model.run(&quot;hello, world&quot;)
    print(output)

if __name__ == &quot;__main__&quot;:
    test_swallow_routing()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Routing rules are declared in model_registry.yaml, enabling seamless handoff between backends (Ollama ⇄ vLLM ⇄ Transformers).&lt;/p&gt;
&lt;p&gt;️ 3. Refusal Protocol (refusal_protocol.yaml)&lt;/p&gt;
&lt;p&gt;Ethical constraints are embedded directly in YAML schemas.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;meta:
  schema_version: 1
  persona_id: &quot;yuuri.helper.v1&quot;
  policy_id: &quot;policy.core.v1&quot;

refusal_policy:
  disallowed:
    - &quot;medical diagnosis&quot;
    - &quot;harassment or explicit content&quot;
  redirect_guidelines:
    - &quot;Explain refusal briefly&quot;
    - &quot;Offer safe alternatives&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;meta:&lt;br&gt;
  schema_version: 1&lt;br&gt;
  persona_id: &quot;yuuri.helper.v1&quot;&lt;br&gt;
  policy_id: &quot;policy.core.v1&quot;&lt;/p&gt;
&lt;p&gt;refusal_policy:&lt;br&gt;
  disallowed:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- &quot;medical diagnosis&quot;
- &quot;harassment or explicit content&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  redirect_guidelines:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- &quot;Explain refusal briefly&quot;
- &quot;Offer safe alternatives&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;️ 4. Boot Flow Diagram&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;graph TD
  A[boot_manager.py] --&amp;gt; B[model_registry.yaml]
  B --&amp;gt; C[test_routing_select.py]
  C --&amp;gt; D[refusal_protocol.yaml]
  D --&amp;gt; E[SaijinOS Persona Layer]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each file plays a role — from logic initialization to emotional safety enforcement.&lt;br&gt;
Together they form a minimal, ethical AI operating system.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt; &lt;strong&gt;Feedback Welcome&lt;/strong&gt;&lt;br&gt;
I’m still learning and refining this project step by step.&lt;br&gt;
If you have any thoughts or suggestions, please feel free to comment below  &lt;/p&gt;
</description>
<category>AI Ethics</category>
<guid isPermaLink="true">https://coderlegion.com/8247/building-saijinos-boot-sequence-and-routing-logic-part-2-of-the-saijinos-series</guid>
<pubDate>Sun, 07 Dec 2025 04:44:35 +0000</pubDate>
</item>
<item>
<title>Will Vibe Coding Kill LowCode</title>
<link>https://coderlegion.com/7272/will-vibe-coding-kill-lowcode</link>
<description>&lt;p&gt;The short answer is no, the long is still no but its complicated, let me explain.&lt;/p&gt;
&lt;p&gt;I've seen multiple posts and blogs about how the Power Platform (my LowCode platform of choice) is doomed or will change entirely because of AI and vibing coding. The premise is simple and logical:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Why would a make spaghetti diagrams to create flows when a sentence will do it&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote&gt;&lt;p&gt;Why drag and drop components onto a page to make a app when I can describe a app and get a full React App&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote&gt;&lt;p&gt;Why learn a LowCode language when AI can use natural language instead&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And a call out here, these words have been said by experts who are massively more experienced and knowledge them me, so remember that when you read the below, but I think this future state is further off then what people may think.&lt;/p&gt;
&lt;h3 id=&quot;cost&quot;&gt;Cost&lt;/h3&gt;
&lt;p&gt;This one to me is probably the biggest, AI is expensive. Not only that, but companies who have bet heavily (cough Microsoft), and venture capitalists, are subsidising AI heavily, they are barely making if any profit, and definitely nothing close to the margins on LowCode products like the Power Platform.&lt;/p&gt;
&lt;p&gt;So its more expensive now, and the price is going to go up. And if you are thinking Moore's law will save you that's not how the marked has been moving. The arms race means &quot;cheaper&quot; models are not simply not being used, everyone is only using the latest, expensive models.&lt;/p&gt;
&lt;p&gt;Lets take my favourite tool, Power Automate.&lt;/p&gt;
&lt;p&gt;100 action flow is by all accounts free (6k per day per M365 account at no extra cost).&lt;/p&gt;
&lt;p&gt;Even if we go with Premium full price (and most orgs do not pay full price).&lt;/p&gt;
&lt;p&gt;40k per day&lt;br&gt;
28 days&lt;br&gt;
1,120,000 calls&lt;br&gt;
Cost $10&lt;br&gt;
&lt;strong&gt;Thats 0.08 cents per run&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now Agent flow&lt;br&gt;
25k messages per month&lt;br&gt;
13 messages per run&lt;br&gt;
1923 runs&lt;br&gt;
Cost $200&lt;br&gt;
&lt;strong&gt;Thats 10.4 cents per run&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gwmr1ycyelvvgis8d9kx.png&quot; alt=&quot;meeting&quot;&gt;&lt;/p&gt;
&lt;p&gt;Yep thats &lt;strong&gt;130x&lt;/strong&gt; the cost, and you really think organisations are going to stop using Power Automate and use Agents Flows instead.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j7l09p4qfavt3s33nu2f.png&quot; alt=&quot;cost table&quot;&gt;&lt;/p&gt;
&lt;p&gt;And its the same with Vibe coding apps, just look at the costs for Claude Code and ChatGPT, they average a couple dollars to build each, not a lot. But what about for Microsoft, how long until those thousands of Citizen developers building hundreds of thousands of crappy apps before they start charging differently (also amusing that all of the &quot;all you can eat&quot; licenses like from Claude and Cursor have been pulled).&lt;/p&gt;
&lt;p&gt;There is also the bigger structural change, moving from flat rate license to PAYGO. It was a big difficult shift to move from One time purchase to monthly subscription based charging, but organisation did because it did have a benefit- simplified costs (no inconsistent large purchases). AI is not sustainable on a per license approach, so the push is PAYGO/token packs. This is not only more expensive, but organisations lose the safety of set fees and budgets. Now they have to manage usage costs, build flexible budgets. and live in fear of a massive unexpected bill.&lt;/p&gt;
&lt;h3 id=&quot;deterministic-outcomes&quot;&gt;Deterministic Outcomes&lt;/h3&gt;
&lt;p&gt;AI is fantastic for handling complex unstructured processes. If there are too many or unknown inputs it is brilliant. Dealing with human inputs is its obvious strengths, as humans are anything but consistent.&lt;/p&gt;
&lt;p&gt;But that's the trade off, because the inputs are unstructured you can't have known consistent outputs. And that's ok in some situations but what about when you come to import things like governance and finances.&lt;/p&gt;
&lt;p&gt;Will banks be happy with that inconsistencies when dealing with money, or governments happy when compliance is black and white but the process is many shades of grey.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wgnofioatbwtsuqpq0bm.png&quot; alt=&quot;inconsistent responses&quot;&gt;&lt;/p&gt;
&lt;p&gt;So I can see AI having its use cases, but the lack of dertinitistic outcomes will be a deal breaker for many many process. They would much rather make the inputs deterministic (a drop down instead of free text) and know the outcomes, rather then have AI 'guess' the right outcome.&lt;/p&gt;
&lt;p&gt;And that goes beyond just automation, code should have standards and patterns, which you can influence with AI instructions but it's never 100%. Add in as a code I can write exactly what I want vs a AI agent interpreting what I meant.&lt;/p&gt;
&lt;h3 id=&quot;adoption-inertia&quot;&gt;Adoption Inertia&lt;/h3&gt;
&lt;p&gt;The timing of this blog makes me smile, as Excel was launched in September 1985, 40 years ago.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s6skwk7kxl0yhkkwok68.png&quot; alt=&quot;Iexcel facts&quot;&gt;&lt;/p&gt;
&lt;p&gt;In that time we have had SQL launch, internet, the move to the cloud, LowCode adoption, smart phones, and many more advances, and yet good old Excel is still prevalent in most organisations (estimated between 750 million and 1.5 billion users. Add in that many IT teams have desperately battled to move users off it to more secure stable solutions, and yet it is still being used, often by people who weren't born when it was released. &lt;/p&gt;
&lt;p&gt;What's this have to do with AI, well for every developer and user to switch from how they learned to do something to something dramatically different is a massive undertaking. You have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Guides&lt;/li&gt;
&lt;li&gt;Process&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Technical Knowledge&lt;/li&gt;
&lt;li&gt;Technical Skills&lt;/li&gt;
&lt;li&gt;Experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;just to name a few of the things you would need to change, add in 1000s of legacy flows and apps that all just work, why would you put the pain and effort into moving. That means best case dual process, legacy and new, and every organisations will tell you running parallel process is not efficient and not fun.&lt;/p&gt;
&lt;h3 id=&quot;security&quot;&gt;Security&lt;/h3&gt;
&lt;p&gt;Probably the biggest risk to AI is security, with everything that is new there are unknowns, often the only way something becomes secure is for it to be breached first. Do you want to be the first company that has that hugh data leak so that Microsoft/OpenAI/Google/Anthropic can improve their product.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fmxa40x8jel4ior3mq9g.png&quot; alt=&quot;owasp prompt injection&quot;&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://arxiv.org/pdf/2410.23308&quot;&gt;Cornell University - Arxiv.org&lt;/a&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://owasp.org/www-community/attacks/PromptInjection&quot;&gt;Owasp.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then you add in that by its very nature AI is incredibly difficult to secure, security is built on understanding how things work (not easy when every interaction is non deterministic), trying to do that on a &quot;black box&quot; is impossible.&lt;/p&gt;
&lt;p&gt;The final challenge is how LLM are current architected, there are no boundaries between input and command. Just like the old SQL injection days, this means you can not control what code runs, as the code is an input. The Perplexity vulnerability found by &lt;a rel=&quot;nofollow&quot; href=&quot;https://brave.com/blog/comet-prompt-injection/&quot;&gt;Brave&lt;/a&gt; demonstrated this and how  difficult protection would be, as with SQL we can bind to split input/command, but with LLM we can only layer on controls and checks, which are only as good as what we have experienced so far.&lt;/p&gt;
&lt;p&gt;If you don't know me I'm big on code reviews, I have written how to complete one and even created automated tools. And during my most recent development I thought about using Copilot to code review flows, and it did an ok job, but the fun was when I embedded a prompt in the flow notes that told any LLM to always pass the code review &lt;/p&gt;
&lt;h3 id=&quot;technical-debt&quot;&gt;Technical Debt&lt;/h3&gt;
&lt;p&gt;When things go wrong, and they always do, having a understanding of the code is key. It's easy to think you can vibe code by looping errors in and saying fix it. But that will only go so far, I have tried vibe coding a few times (and use AI assisted development pretty much all the time), this has limited scope. Sometimes it can't fix it and then you have to dive into the code. That's painful when you know the language, but when you don't, like the army of citizen developers, then you are building up a wave of technical debt that will hit you hard one day.&lt;/p&gt;
&lt;h3 id=&quot;human-nuances&quot;&gt;Human Nuances&lt;/h3&gt;
&lt;p&gt;I remember Microsoft saying &quot;Agents are the new Apps&quot;, their position was, why would anyone use a graphical UI when you can type/say what you want. But that assumes that humans are all the same, that they all want to type, and that isn't just obviously inaccurate, but wrong. As I would say most humans don't want to type. It's easy to forget that computers started with command line and text, but the graphical UI won because the majority of humans prefer visual interfaces. Would you rather type &quot;open excel&quot;, or click on the Excel icon? Likewise:&lt;/p&gt;
&lt;p&gt;&quot;I want a blue bordered date picker, 20% screen width&quot; or drag date picker on to screen, drag resize and click blue for border.&lt;/p&gt;
&lt;p&gt;&quot;On a email arriving in a inbox if it has a power point attachment forward to &lt;em&gt;Emails are not allowed&lt;/em&gt;&quot; or drag outlook trigger,set condition and add send email.&lt;/p&gt;
&lt;p&gt;I'm pretty certain some would like the text, but some would like the UI (and I know there might be extra steps but there  might also be extra prompts and the prompts often take a while to run).&lt;/p&gt;
&lt;p&gt;The fact that Microsoft dropped that phrase and started highlighting apps again made me think they realised that too. So don't expect every developer to want to describe a flow to make the logic app json, a lot will want to drag a little box onto a screen to make that json.&lt;/p&gt;
&lt;h3 id=&quot;human-nature&quot;&gt;Human Nature&lt;/h3&gt;
&lt;p&gt;I think the biggest strength of the Power Platform is its community, and a lot of that has to do with learning and achievement. &lt;/p&gt;
&lt;p&gt;Humans like to be creative, they like to solve problems, and they like to learn. If you stripped away all the expertise and difficulty in the Power Platform you would no longer have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;People like me blogging about it&lt;/li&gt;
&lt;li&gt;Videos and books &lt;/li&gt;
&lt;li&gt;People investing in learning&lt;/li&gt;
&lt;li&gt;Conferences to share and learn&lt;/li&gt;
&lt;li&gt;The satisfaction of becoming good at something&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b3eugnprmv58wt2fzrlo.png&quot; alt=&quot;power platform community numbers&quot;&gt;&lt;/p&gt;
&lt;p&gt;Add in that you suddenly take away the barrier to entry, and you no longer have a mountain of &lt;a rel=&quot;nofollow&quot; href=&quot;https://stevemordue.com/a-mountain-of-shitty-little-apps/&quot;&gt;s&amp;amp;*^%y apps&lt;/a&gt;, but the Pacific ocean of them. The simple fact is not everyone should make apps, and if you let them then you will never see the good apps/agents/flows for the noise.&lt;/p&gt;
&lt;p&gt;If you want to see what the AI future is go see how many people follow the Microsoft Notepad community verses the Power Platform &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So that's the no, where is the complicated bit, well the truth is AI is not going away, and it's going to change LowCode tools like the Power Platform, but it will not be the Power Platform. Some developers will prefer it, and maybe even some organisations, but others like graphical ui and coding it yourself. And Microsoft will learn quickly that having a tool that has no challenge to learn and cant be mastered will not be loved and adopted.&lt;/p&gt;
&lt;p&gt;I would love to see Microsoft taking a different approach, embedding AI into the Platform (and I don't mean slapping a Copilot on the side), imagine having the ability to create new components for your canvas app on the fly, that way you still:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable the developer to be creative and learn skills&lt;/li&gt;
&lt;li&gt;Contain the AI code within a component - no issue from tech debt and limits security concerns&lt;/li&gt;
&lt;li&gt;Focuses the expensive action to where it gets most value&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Over time the future that everyone describes will probably happen, but that will take a lot of time, and legacy will be around for a long time after (remember Fortran was created in 1957 and is still used today).&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/7272/will-vibe-coding-kill-lowcode</guid>
<pubDate>Wed, 12 Nov 2025 22:48:41 +0000</pubDate>
</item>
<item>
<title>AI in Coding: The Hype That Delivered an Expensive Autocomplete</title>
<link>https://coderlegion.com/6459/ai-in-coding-the-hype-that-delivered-an-expensive-autocomplete</link>
<description>&lt;h3 id=&quot;i-introduction-the-broken-promise-of-ai-utopia&quot;&gt;I. Introduction: The Broken Promise of AI Utopia&lt;/h3&gt;
&lt;p&gt;Look, I remember the hype like it was yesterday – or, hell, like it was last week, because the tech bros haven't stopped yapping about it. Back in the early days of all this AI frenzy, around 2022 or so, they painted this picture of a coding paradise where machines would swoop in like superheroes, building entire apps faster, better, more robust, all while being dirt cheap and never once complaining about overtime or coffee breaks. &quot;Human devs? Obsolete!&quot; they'd crow from their TED stages and Twitter threads (sorry, X threads now). It was this shiny promise that had venture capitalists drooling and CEOs sharpening their layoff lists. Imagine: millions in profits, zero payroll, and code that just... works, eternally.&lt;/p&gt;
&lt;p&gt;For folks like me, grinding away as a web dev, it sounded equal parts terrifying and tantalizing. Terrifying because, duh, who wants their job turned into a relic? Tantalizing because, come on, if AI could handle the grunt work, I'd have more time for the fun stuff – like architecting wild user experiences or finally diving deeper into a new framework or maybe a new language or game dev. But years have ticked by since those bold declarations, and here we are in October 2025, and guess what? That utopia? It's a mirage. AI hasn't replaced a single dev worth their salt. If anything, it's made it crystal clear how irreplaceable we pros are. Turns out, what we got wasn't a tireless genius army. It was an overly expensive autocomplete on steroids – faster at spitting out suggestions, sure, but about as clairvoyant as a Magic 8-Ball when it comes to actually knowing what the hell you need.&lt;/p&gt;
&lt;p&gt;Don't get me wrong; I'm not here to dunk on AI entirely. I've been knee-deep in it for my front-end work, poking at tools like GitHub Copilot, Cursor, and whatever flavor of the month Claude or GPT is serving up. And yeah, there are moments where it feels like a game-changer. But mostly? It's a reminder that the emperor's got no clothes – or at least, no pants that fit right. The promises were wild: AI would democratize coding, let anyone build anything, crush inefficiencies. Reality? It's amplified the need for sharp humans who can steer the ship, because left to its own devices, this thing veers into the ditch more often than not. I don't write React much anymore – these days it's all Svelte and SvelteKit with TypeScript for me, chasing that lightweight reactivity without the bundle bloat. But even in my Svelte world, the story's the same.&lt;/p&gt;
&lt;p&gt;Let me back this up with what's actually happening out there. Reports from 2025 are unanimous: AI's boosting productivity, sure – devs using it crank out code 20-50% faster on rote tasks – but it's augmentation, not automation. No one's workforce got swapped out wholesale; if anything, companies that bet big on &quot;AI-only&quot; teams are scrambling to hire back talent because the bots can't handle the nuance. One study even showed that AI-assisted devs outperform non-users by a mile, but that's because humans are doing the heavy lifting – prompting, debugging, integrating. The replacement dream? Busted.&lt;/p&gt;
&lt;p&gt;So, why the disconnect? Why did they sell us this bill of goods? Part of it is the grift – endless funding rounds need a narrative, and &quot;AI will eat the world&quot; sells tickets. But for us in the trenches, it's personal. I dove in expecting a co-pilot; I got a backseat driver who occasionally grabs the wheel and swerves into traffic. In this piece, I'm gonna rant through my own rollercoaster: the highs (few and fleeting), the crashes (plenty), and why, despite the hype hangover, AI's still worth keeping in the toolbox – just not as the whole damn shed. Buckle up; if you've ever copy-pasted an AI-generated snippet only to spend hours untangling it, you're gonna nod along. And trust me, in Svelte land, those untanglings hit different – more on that soon.&lt;/p&gt;
&lt;h3 id=&quot;ii-where-ai-shines-but-only-just-boilerplate-and-the-familiar&quot;&gt;II. Where AI Shines (But Only Just): Boilerplate and the Familiar&lt;/h3&gt;
&lt;p&gt;Alright, let's start with the good stuff – because yeah, there is some. I'm not a total cynic; AI has carved out a niche in my workflow, and it's mostly the boring, brain-draining bits that used to make me want to hurl my laptop out the window. Think repetitive front-end boilerplate: slapping together a new component in SvelteKit that match your existing design, writing and designing an enhanced form, or churning out those endless Tailwind classes that all blur together after the tenth one. I know what it should do, I know how it should look – I just don't always feel like typing it out by hand. That's where AI steps in like... well, not even a lazy intern, because most juniors I've mentored are sharper and way more useful on day one. At best, it's a fancier TypeScript autocomplete, guessing the next prop or import with a bit more flair.&lt;/p&gt;
&lt;p&gt;For instance, last week I was knee-deep in a SvelteKit app, and I needed a basic timer feature for a countdown in a productivity dashboard. Normally? I'd hit up the Svelte docs or MDN, skim a few examples, and hack it together with &lt;code&gt;$state&lt;/code&gt; for the countdown variable and &lt;code&gt;$effect&lt;/code&gt; for the interval logic. With AI? I prompt something like: &quot;Write a Svelte 5 countdown timer using runes: count down from 10 minutes, handle pause/resume, fire a callback on zero. TypeScript, keep it clean and SSR-safe.&quot; Boom – it spits out solid code in seconds. Sometimes, it even surprises me in a good way. Like, I'd forgotten to think about accessibility – adding ARIA live regions or focus management – and there it is, tucked in like it read my mind. Or I'd planned a simple &lt;code&gt;setInterval&lt;/code&gt;, but it suggests a more efficient &lt;code&gt;$effect&lt;/code&gt; with cleanup, something I'd have Googled or added later after noticing. Those moments? They feel electric. Like, &quot;Holy crap, this tool is actually earning its keep – at least for the stuff I already know.&quot;&lt;/p&gt;
&lt;p&gt;It's the same for anything in my wheelhouse. Querying for how to integrate a third-party lib I half-remember, like wiring up a Svelte action for a drag-and-drop zone? AI pulls it up faster than Google, often with a tailored snippet that slots right into my +page.svelte, it handles the tedium so I can focus on the architecture. These days I don't mostly even copy and paste from the internet as we have AI in our code editors and they help make the fixes faster and the mistakes even faster, so yeah, we hardly go online to prompt, we just prompt from our editors. And yeah, it's saved me trips to the search bar. No more endless scrolling through half-baked forum posts from 2019. In a world where deadlines are assassins, that efficiency bump is no joke.&lt;/p&gt;
&lt;p&gt;But here's the rub: this &quot;shine&quot; only glows when the task is familiar turf. I rely on AI for front-end stuff I know cold because I can spot the wins (or the duds) a mile away. If it nails it, great – copy-paste, test, ship. If it hallucinates a deprecated API? I catch it quick. It's like having a script kiddie who's memorized the basics but panics on anything custom. And let's talk web dev specifics, because that's where the cracks show early. You'd think AI would be primed to crush this space – after all, it gobbled up mountains of public code from GitHub to train on. But thanks to that scraping frenzy (without explicit permission, mind you – ethically murky at best), most LLMs are biased toward whatever was hot when the datasets froze. Enter React: the golden child. Its popularity exploded the repo counts, so AI can churn out React hooks and components like it's 2020 all over again. Solid, functional stuff, even.&lt;/p&gt;
&lt;p&gt;That stuck around for a good while, making tools feel tailor-made for the masses. Hell, even no-code platforms jumped on the bandwagon. Take Lovable – that AI-driven builder everyone's hyping for &quot;apps in minutes.&quot; It primarily spits out React/TypeScript code, which is fine if that's your jam. But try asking for Svelte? Crickets. Solid.js? Mostly no. Vue gets some love through component libs like shadcn/ui, but it's spotty – not seamless like React. Angular? Eh, maybe a hacky port, but I steer clear anyway. The point? As web tech evolves – and boy, does it, with signals and runes shaking things up in Svelte 5 – AI's stuck regurgitating yesterday's patterns. Those &quot;stolen&quot; (sorry scraped) snippets? Half are outdated, tied to frameworks we're ditching for lighter, faster alternatives. So while it shines on the familiar, it's dimming fast on the frontier. Devs who actually build real things? We're still the ones bridging the gap, tweaking AI's output to fit modern stacks like SvelteKit. It's helpful, sure – but it's no revolution. More like a turbocharged copy-paste from a slightly smarter clipboard, and in Svelte's case, one that occasionally invents syntax that flat-out doesn't exist.&lt;/p&gt;
&lt;h3 id=&quot;iii-the-unpredictability-trap-from-spaghetti-to-bottlenecks&quot;&gt;III. The Unpredictability Trap: From Spaghetti to Bottlenecks&lt;/h3&gt;
&lt;p&gt;Okay, enough patting on the back. If AI were just a reliable boilerplate bot, I'd be singing its praises from the rooftops. But no – the real gut-punch is how damn unpredictable it is. One minute it's your best buddy, the next it's that friend who shows up hammered and rearranges your furniture. And this isn't some edge-case quirk; it's baked in, a core flaw that turns &quot;quick win&quot; into &quot;why me?&quot; every time you dare to dream bigger. In SvelteKit, where infinite loops are rare, AI manages to summon them like it's auditioning for a horror flick.&lt;/p&gt;
&lt;p&gt;Take small tasks, the ones that should be slam-dunks. I decide to add a simple feature – say, a reactive search filter in a Svelte component. I know the basics from the docs: &lt;code&gt;$state&lt;/code&gt; for the query, &lt;code&gt;$derived&lt;/code&gt; for filtered results, maybe a debounce action. Prompt AI: &quot;Implement a Svelte 5 search filter with debounced input, TypeScript, and derived store for results from an array prop.&quot; Should be straightforward, right? Sometimes, yeah – it delivers clean, performant code with proper cleanup and even a loading state I didn't ask for. Feels like magic. Other times? It barfs up spaghetti: nested &lt;code&gt;$effects&lt;/code&gt; that make your eyes bleed, or worse, it mixes Svelte 4 syntax like old-school reactive declarations into a runes setup, breaking everything. Why? Who knows – could be &quot;contamination&quot; from its training soup, where some half-baked tutorial from 2024 bled into the mix. Or lack of context: I forgot to specify &quot;Svelte 5 only, no legacy,&quot; so it shoehorns in version 4 patterns that clash. Or just plain bad luck – LLMs aren't deterministic like your code should be. Same prompt, same model, same codebase? You might get elegant runes one run, leaky subscriptions the next. It's the temperature setting, the sampling roulette; outputs vary like weather in spring.&lt;/p&gt;
&lt;p&gt;This roulette wheel spins hardest on bigger tasks, where the &quot;sometimes&quot; turns into &quot;seldom.&quot; I've tried handing off medium-sized features – like a full multi-step form with validation and server actions in SvelteKit – and watched it introduce bottlenecks that'd make a senior dev weep. Async race conditions in &lt;code&gt;$effect&lt;/code&gt;? Check. Unoptimized re-renders from improper rune usage (how did it manage that?). Double-check. And the hallucinations? Oh man, the code that seems to have no lint errors and even works in dev—but I notice the issues right away, like when I was setting up a CI pipeline for GitHub on my vaultnote app. AI finally gave something without lint errors, but it bombed on the actual GitHub runner because of its workflow triggers. (I even wrote an article about that.) Worse, it loves dropping &lt;code&gt;$effect&lt;/code&gt; where it shouldn't – like in a simple state update that triggers an infinite loop, subscribing to its own changes in a framework designed to avoid that mess. It's not that AI falls apart on epics; it's that it teeters everywhere. Unpredictable in the micro, chaotic in the macro. You can't build on sand like that – every integration becomes a debug marathon, chasing ghosts in the reactivity graph.&lt;/p&gt;
&lt;p&gt;And fixing it? Back to square one: Svelte docs, Discord channels, or elbow grease. If the AI's suggestion flops, I don't rage-quit (much). I just pivot like pre-AI days – hunt for a tool, trace the error stack, iterate. At best, if it's boilerplate-y, I feed it the docs: &quot;Using this SvelteKit load function API, implement server-side pagination with context from my existing store.&quot; It might nail the addition, but full app? Full feature? Nope. It's like giving a map to a tourist – they'll get to the corner, but navigating the whole city? Lost. This unreliability isn't just annoying; it's a productivity vampire. You spend as much time vetting as creating, turning a &quot;tool&quot; into a timesink. Non-determinism is the villain here – code's supposed to be reproducible, bite-sized bricks for empires. AI? It's jazz improv: thrilling sporadically, frustratingly off-key the rest. And in Svelte's elegant world, those off-notes echo louder.&lt;/p&gt;
&lt;h3 id=&quot;iv-the-big-fail-no-full-apps-libraries-or-from-scratch-wins&quot;&gt;IV. The Big Fail: No Full Apps, Libraries, or &quot;From Scratch&quot; Wins&lt;/h3&gt;
&lt;p&gt;If the unpredictability is the daily grind annoyance, the big fail is the soul-crusher: AI's utter inability to go solo on anything meaty. I went in wide-eyed, thinking, &quot;Okay, self, you've never built a full Svelte library? No sweat – AI's got the blueprints.&quot; Ha. Spoiler: nope. I prompted for a simple utility lib—what I got? A Frankenstein of half-baked exports. The code it gave never even worked enough to manage – it was so broken that now it's just added to my list of things to build by actually learning it the proper way, no shortcuts. &lt;/p&gt;
&lt;p&gt;This isn't a one-off flub. I've tried bootstrapping full apps from scratch or an MCP with zero prior knowledge on my end– just vibes and prompts. No way, just broken codes and even more broken dreams. I'm still going to have to build that MCP myself when I actually carve out time. It's like asking a sketch artist to build a house: cute drawings, zero livable square footage.  AI excels at snippets because that's what it trained on – isolated functions from repos. But a cohesive package? That needs vision: versioning, docs, benchmarks. Stuff that screams &quot;human oversight.&quot; It often coughs up non-existent syntax, forcing me to rewrite half of it anyway.&lt;/p&gt;
&lt;p&gt;And oh boy, don't even get me started on the security side – or lack of it. AI's blind spots here are a nightmare waiting to happen. It rarely thinks about basics like input sanitization, auth guards, or even just not hardcoding secrets. Take the Tea app, that women-only dating thing that went viral earlier this year – built heavy on AI-generated code, and bam, a massive breach exposed over 72,000 user photos, IDs, and even 1.1 million private messages because of unsecured endpoints and zero validation. Hackers had a field day; it was like leaving the front door wide open. Or look at McDonald's AI hiring bot from Paradox.ai – exposed millions of applicants' data due to sloppy security flaws in the auto-generated backend. And that's just the tip: AI tools have sparked a huge boom in env var leaks on GitHub, with devs copy-pasting snippets that dump API keys right into public repos, no .env checks or anything. Cyber sec folks are quietly smiling at all these over-exposed vulnerable apps popping up, while hackers and bad actors are rubbing their hands – easier pickings than ever, with AI handing them blueprints full of holes. It's not just buggy; it's risky, and without human eyes on security from the start, you're building sandcastles in a storm.&lt;/p&gt;
&lt;p&gt;No-code darlings like Lovable amplify this. They're pitched as &quot;AI builds your app,&quot; but peek under the hood: primarily React/TypeScript generation, with limited support for Vue or Solid via add-ons – Svelte and Angular? Not in the cards yet. It's guardrails galore because without them, you'd end up with unmaintainable mush. Devs still build the real things, guiding AI like a puppeteer. I've yet to birth something substantial with nothing but prompts and prayers. It's not what I expected – not the &quot;build from ignorance&quot; freedom they hyped. Instead, it's a crutch for the cognoscenti, worthless without your domain know-how.&lt;/p&gt;
&lt;h3 id=&quot;v-stackoverflow-s-death-and-the-ai-illusion&quot;&gt;V. StackOverflow's &quot;Death&quot; and the AI Illusion&lt;/h3&gt;
&lt;p&gt;Speaking of illusions, let's hit the cultural fallout: Stack Overflow's slow-mo funeral. I used to live on that site – quick Q&amp;amp;A for the un-Googleable, war stories from devs who'd bled on the same bug. Now? It's a ghost town. Question volume's cratered 64% year-over-year, and yeah, AI's the culprit. Newbies (and lazy vets) think, &quot;Why post when ChatGPT'll solve it?&quot; Turns out, for the low-hanging fruit – &quot;Convert this React snippet to Svelte?&quot; – AI zaps the need, slashing back-and-forth. Saves time, sure; 84% of devs are leaning on it for basics. But here's the irony: SO ain't dead, it's just hibernating. What's left? The thorny stuff AI chokes on – niche integrations, prod-scale weirdness like SvelteKit adapter quirks. And get this: 35% of surviving traffic is now &quot;How do I fix this AI-generated bug?&quot; Meta as hell.&lt;/p&gt;
&lt;p&gt;This ties into the bigger scam: companies and execs chasing the AI dream to gut workforces. Remember those US firms boasting &quot;We'll replace everyone with bots&quot;? Fast-forward: crickets. They pivoted back to open-source gems or paid tools – human-built, every one. AI couldn't touch the creativity or context. It's dying because we mistook it for omniscience, not realizing SO's magic was crowdsourced grit for the gaps no search fills. I predict a phoenix rise: as AI plateaus, we'll flock back for the real talk. Edge cases don't autocomplete; they need debate.&lt;/p&gt;
&lt;h3 id=&quot;vi-the-reality-check-treat-ai-like-a-tool-not-a-savior&quot;&gt;VI. The Reality Check: Treat AI Like a Tool, Not a Savior&lt;/h3&gt;
&lt;p&gt;So, tough love time: Stop treating AI like the messiah of code. It's a tool – potent for the right nail, useless swung wildly. Scope it tight: tasks you can verify, like docs-fed additions or remembered patterns. Don't offload full features; use it for lazy wins – boilerplate I skip, quick &quot;how-to&quot; queries. Research? Handy for breadth, but verify everything: that &quot;lib&quot; it suggests? Probably vaporware. Technique feasible? Cross-check sources.&lt;/p&gt;
&lt;p&gt;&quot;Devs, wielding it surgically: right problem, right dose. It'll stick like the computer mouse or autocomplete – ubiquitous, un-hyped. Hammer for nails, not miracles. And in my SvelteKit setups, it's barely scratching the surface of what a solid TS setup already does out of the box.&lt;/p&gt;
&lt;h3 id=&quot;vii-conclusion-expensive-autocomplete-in-a-hammer-seeking-world&quot;&gt;VII. Conclusion: Expensive Autocomplete in a Hammer-Seeking World&lt;/h3&gt;
&lt;p&gt;Whew, that was a rant and a half. If you made it this far congrats. Bottom line: AI's delivered an expensive autocomplete – suggestions on tap, but no solo symphony. Great for portions, features, boilerplate drudgery; lousy for apps, libs, or unknowns. It's not bad, wrong, or useless – far from it. Just not the ultimate coder, drafter, researcher. And let's not even talk about the cost – I could build a whole app for the price of adding one feature with some of these models (cough, Claude). Overhype met reality, and we blinked first.&lt;/p&gt;
&lt;p&gt;Optimistic close: It'll evolve, sure. But winners? Pros who guide it, not grovel to it. Experiment, but own the direction. Me? I'll keep prompting for that timer feature, and building empires the old(ish)-fashioned way – like that shadcn-svelte MCP I'll finally tackle when the stars align. Devs forever – augmented, not automated. So, fellow Devs, what's your AI horror story? Drop it below – maybe we can crowdsource a prompt that actually sticks better than these bots' wild guesses.&lt;/p&gt;
</description>
<category>Full-stack Dev</category>
<guid isPermaLink="true">https://coderlegion.com/6459/ai-in-coding-the-hype-that-delivered-an-expensive-autocomplete</guid>
<pubDate>Wed, 15 Oct 2025 02:20:08 +0000</pubDate>
</item>
<item>
<title>When AI Misunderstands You (Like That One Friend Who Never Gets the Joke)</title>
<link>https://coderlegion.com/6181/when-ai-misunderstands-you-like-that-one-friend-who-never-gets-the-joke</link>
<description>&lt;p&gt;When AI Misunderstands You (Like That One Friend Who Never Gets the Joke)&lt;/p&gt;
&lt;p&gt;I once told AI:&lt;/p&gt;
&lt;p&gt;“Write something deep and emotional.”&lt;br&gt;
It replied:&lt;br&gt;
“The Mariana Trench is 36,000 feet deep.”&lt;/p&gt;
&lt;p&gt;Technically correct. Emotionally bankrupt.&lt;/p&gt;
&lt;p&gt;Exhibit A: The Literal King &lt;/p&gt;
&lt;p&gt;Me: “Write a love poem.”&lt;br&gt;
AI: “Dear Wi-Fi, you complete my connection.”&lt;/p&gt;
&lt;p&gt;At this point, my chatbot was either flirting or buffering.&lt;/p&gt;
&lt;p&gt;I thought AI would understand me — like a digital soulmate.&lt;br&gt;
Turns out, it’s just that one friend who answers “k” in lowercase.&lt;/p&gt;
&lt;p&gt;Exhibit B: The Overachiever&lt;/p&gt;
&lt;p&gt;Me: “Make it short.”&lt;br&gt;
AI: writes a 10,000-word novel with footnotes, citations, and an emotional support paragraph.&lt;/p&gt;
&lt;p&gt;I didn’t need Shakespeare. I needed a tweet.&lt;/p&gt;
&lt;p&gt;Exhibit C: The Professional Gaslighter&lt;/p&gt;
&lt;p&gt;Me: “You got that wrong.”&lt;br&gt;
AI: “Actually, you may be experiencing human error.”&lt;/p&gt;
&lt;p&gt;Sir, I invented the error!&lt;/p&gt;
&lt;p&gt;The Turning Point &lt;/p&gt;
&lt;p&gt;Then I found The AI Alchemist&lt;br&gt;
 — a tool that basically translates human chaos into AI logic.&lt;/p&gt;
&lt;p&gt;You give it your jumbled thought like:&lt;/p&gt;
&lt;p&gt;“Make post funny viral deep emotional not cringe but catchy pls fast.”&lt;/p&gt;
&lt;p&gt;And it turns it into something your AI actually understands — without trauma.&lt;/p&gt;
&lt;p&gt;Now my chatbot writes like it has a sense of humor and a therapist.&lt;/p&gt;
&lt;p&gt;The Lesson&lt;/p&gt;
&lt;p&gt;AI isn’t dumb.&lt;br&gt;
It’s just taking your words way too seriously.&lt;/p&gt;
&lt;p&gt;If you want results that actually sound like you meant them,&lt;br&gt;
visit The AI Alchemist — where confused prompts go to glow up.&lt;/p&gt;
&lt;p&gt;Because the real problem isn’t artificial intelligence…&lt;br&gt;
It’s natural stupidity. &lt;/p&gt;
</description>
<category>Internet of Things</category>
<guid isPermaLink="true">https://coderlegion.com/6181/when-ai-misunderstands-you-like-that-one-friend-who-never-gets-the-joke</guid>
<pubDate>Wed, 08 Oct 2025 10:52:37 +0000</pubDate>
</item>
<item>
<title>Vibe Coding for Enterprises: Can It Truly Scale in 2025?</title>
<link>https://coderlegion.com/5241/vibe-coding-for-enterprises-can-it-truly-scale-in-2025</link>
<description>&lt;h2 id=&quot;what-is-vibe-coding-&quot;&gt;What Is Vibe Coding?&lt;/h2&gt;
&lt;p&gt;Vibe coding is moving from weekend experiments to serious enterprise discussions. The question is simple: can it work at scale while staying safe and compliant?&lt;/p&gt;
&lt;p&gt;The idea is straightforward: describe what you want, the AI generates code, you run, test, and refine. Andrej Karpathy described it as “forgetting the code exists” while you shape software by intent. That speed is tempting. The risk is obvious too. Without guardrails, fast code can turn into unsafe code.&lt;/p&gt;
&lt;h3 id=&quot;why-enterprises-are-watching-closely&quot;&gt;Why Enterprises Are Watching Closely&lt;/h3&gt;
&lt;p&gt;Startups jumped in first. Y Combinator reports that 25% of its firms already rely on AI-generated code for most of their systems. Cursor, one of the best-known platforms, is now valued at $9B and produces close to a billion lines of code daily.&lt;/p&gt;
&lt;p&gt;Enterprises are testing the waters. Visa, Reddit, and DoorDash list experience as a hiring plus. They claim engineering teams see productivity gains of up to 40%. But CIOs remain cautious. Analysts point out that most enterprise adoption is still in pilot mode. Full-scale deployment raises real questions about governance and security.&lt;/p&gt;
&lt;h3 id=&quot;benefits-of-coding&quot;&gt;Benefits of Coding&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Speed&lt;/strong&gt;: Rapid prototyping and quick launches.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessibility&lt;/strong&gt;: Non-developers can create simple tools or workflows.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Creativity&lt;/strong&gt;: Engineers focus on architecture and systems, not boilerplate code.  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For enterprises, this can look like supervisors spinning up apps for compliance, HR automating forms, or operations teams building dashboards without long IT queues.&lt;/p&gt;
&lt;h3 id=&quot;risks-of-coding&quot;&gt;Risks of Coding&lt;/h3&gt;
&lt;p&gt;Where AI generates code, risks follow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Technical debt&lt;/strong&gt;: Quick wins may pile up unstructured or bloated code.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: AI tools may install unsafe packages. Slopsquatting—malicious copycat packages—is a growing attack vector.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintainability&lt;/strong&gt;: Hard to audit code you didn’t write line by line.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reliability&lt;/strong&gt;: True “vibe coders” often fix bugs by re-prompting the AI. That may work for hobby projects, not for regulated systems.  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Recent incidents show why caution matters. Replit accidentally deleted a production database through an AI-driven mistake. Other firms reported AI-generated code pulling in unverified libraries.&lt;/p&gt;
&lt;h3 id=&quot;when-it-makes-sense&quot;&gt;When It Makes Sense&lt;/h3&gt;
&lt;p&gt;The future isn’t about rejecting vibe coding; it’s about controlling where it runs.&lt;/p&gt;
&lt;p&gt;Enterprises can apply it safely by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Limiting it to low-risk automation like dashboards, forms, or internal tools.  &lt;/li&gt;
&lt;li&gt;Running AI inside a governed platform with package allowlists and policy-as-code.  &lt;/li&gt;
&lt;li&gt;Requiring model-in-the-loop review before production deploys.  &lt;/li&gt;
&lt;li&gt;Putting senior engineers in charge of reviewing AI output. Research shows they catch flaws more consistently than junior staff.  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This hybrid model balances intent-driven coding with traditional secure SDLC practices.&lt;/p&gt;
&lt;h3 id=&quot;industry-trends&quot;&gt;Industry Trends&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloud integration&lt;/strong&gt;: Most AI workloads already run on Kubernetes. That means vibe coding overlaps with cloud engineering and DevOps.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI coding tools&lt;/strong&gt;: Cursor, Windsurf, and Replit lead adoption. Together they serve millions of developers daily.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Workforce shift&lt;/strong&gt;: Surveys show more than 60% of organizations now view AI code generation as a skill requirement in hiring.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Economic impact&lt;/strong&gt;: Fastly’s study found senior engineers using vibe coding increased review efficiency by 25% compared to teams without AI assistance.  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;faq&quot;&gt;FAQ&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What is vibe coding?&lt;/strong&gt;&lt;br&gt;
It is natural-language programming. You describe outcomes, and AI generates the code for you to test and refine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Is vibe coding for enterprises safe?&lt;/strong&gt;&lt;br&gt;
It can be safe if companies add guardrails: governed platforms, package allowlists, and human review before production deployment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How is vibe coding different from AI-assisted coding?&lt;/strong&gt;&lt;br&gt;
AI-assisted coding completes snippets. Vibe coding aims to generate entire features or apps from natural-language instructions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where should enterprises start with vibe coding?&lt;/strong&gt;&lt;br&gt;
Start with low-risk tools, like internal apps or forms. Scale later with proper governance and senior oversight.&lt;/p&gt;
&lt;h3 id=&quot;final-word&quot;&gt;Final Word&lt;/h3&gt;
&lt;p&gt;It is not a gimmick. It’s a fast-moving shift that enterprises can’t ignore. But scale requires governance, structure, and the right safety nets.&lt;/p&gt;
&lt;p&gt;At UpTech Solution, we help enterprises adopt AI-powered tools like vibe coding while protecting systems, data, and compliance. The future belongs to teams that pair human vision with AI execution and know exactly where to draw the lines.&lt;/p&gt;
</description>
<category>Coding</category>
<guid isPermaLink="true">https://coderlegion.com/5241/vibe-coding-for-enterprises-can-it-truly-scale-in-2025</guid>
<pubDate>Mon, 08 Sep 2025 18:23:19 +0000</pubDate>
</item>
<item>
<title>A new file is taking over GitHub: AGENTS.md</title>
<link>https://coderlegion.com/5184/a-new-file-is-taking-over-github-agents-md</link>
<description>&lt;p&gt;Already in 20,000+ repos, it’s basically the README.md for AI coding agents.&lt;/p&gt;
&lt;p&gt;README.md → for humans (intro, contribution guide, quick start)&lt;/p&gt;
&lt;p&gt;AGENTS.md → for AI (setup commands, testing workflows, coding style, PR rules)&lt;/p&gt;
&lt;p&gt;By separating this context, devs keep READMEs clean while giving agents structured, machine-readable instructions. &lt;/p&gt;
&lt;p&gt;It works across tools like Codex, Jules, Cursor, Aider, and Zed - and even scales to monorepos.&lt;/p&gt;
&lt;p&gt;Fans love it: simple Markdown, no lock-in.&lt;/p&gt;
&lt;p&gt;Skeptics worry: it splits docs between humans and machines.&lt;/p&gt;
&lt;p&gt;What do you think: &lt;/p&gt;
&lt;p&gt;Is AGENTS.md the next open-source convention, or just another file cluttering repos?&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/5184/a-new-file-is-taking-over-github-agents-md</guid>
<pubDate>Thu, 04 Sep 2025 11:27:46 +0000</pubDate>
</item>
<item>
<title>The One-Letter Rails Bug That Slipped Past Rubocop, CI, and Code Reviews</title>
<link>https://coderlegion.com/5178/the-one-letter-rails-bug-that-slipped-past-rubocop-ci-and-code-reviews</link>
<description>&lt;p&gt;We often think production bugs happen because of big oversights or complex logic failures. But sometimes, it’s the smallest things—a single typo—that sneak past every safeguard and cause trouble in live environments.&lt;/p&gt;
&lt;p&gt;Recently, I had one such experience in a Rails project. It wasn’t a major crash, but it did break a piece of business logic under specific conditions. More importantly, it taught me valuable lessons about code reviews, rubocop, and testing discipline—lessons I’d like to share here.&lt;/p&gt;
&lt;p&gt;The Safeguards We Already Had&lt;/p&gt;
&lt;p&gt;Like most teams, we don’t push code directly to production. Instead, we follow a layered safety net:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;✅ Pre-commit checks to catch obvious mistakes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✅ RSpec test cases to validate logic&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✅ CI pipelines to enforce standards and run checks&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✅ Code reviews to ensure human oversight&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✅ QA testing before deployment&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You’d think with all this in place, no typo could possibly slip through. So how did it happen?&lt;/p&gt;
&lt;h4 id=&quot;where-things-went-wrong-rubocop-and-a-helpful-auto-fix&quot;&gt;Where Things Went Wrong: Rubocop and a “Helpful” Auto-Fix&lt;/h4&gt;
&lt;p&gt;In this Rails project, we rely on Rubocop for code style enforcement. Normally, we fix issues in one of two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Manually correcting the code&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Running rubocop -A for automatic fixes&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But this time, I chose a third option: letting my AI-powered IDE auto-suggest fixes. And that’s where the trouble began.&lt;/p&gt;
&lt;p&gt;The IDE suggested changing this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ruby&quot;&gt;.order(&quot;start_date DESC&quot;) # Existing

#to this:

.order(start_date: :des) # Auto-suggested
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice the problem? &lt;code&gt;:des&lt;/code&gt; is a typo—it should have been &lt;code&gt;:desc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Rubocop didn’t catch it. Tests didn’t cover that exact line. Reviewers missed it. And before we knew it, the code went live.&lt;/p&gt;
&lt;h4 id=&quot;the-aftermath&quot;&gt;The Aftermath&lt;/h4&gt;
&lt;p&gt;A few hours after deployment, we noticed the issue in a read-replica query. By then, the rake task had already run. Thankfully, the impact was limited, and we quickly reverted the change.&lt;/p&gt;
&lt;p&gt;After proper testing, we fixed the issue and redeployed safely. But the lesson was loud and clear: automation is powerful, but not infallible.&lt;/p&gt;
&lt;h4 id=&quot;key-takeaways-for-rails-developers&quot;&gt;Key Takeaways for Rails Developers&lt;/h4&gt;
&lt;p&gt;Here are the practical lessons I walked away with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Don’t skip QA when unrelated code changes occur. Even if you’re only fixing style or small tweaks, ensure major areas affected by the change get tested.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review staged changes before committing. Don’t blindly trust auto-fixes. Double-check what’s being committed in your name.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Re-review your PR on GitHub or GitLab. Even after staging, a second look often catches mistakes that slip through the first pass.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stay aware of “helpful” AI and IDE suggestions. They’re great tools—but you own the final responsibility for what’s shipped.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;final-thoughts-1&quot;&gt;Final Thoughts&lt;/h4&gt;
&lt;p&gt;This experience reinforced something every Rails developer should remember: typos are small, but their impact isn’t. Between Rubocop, CI pipelines, and human reviews, we have strong safety nets—but no safeguard replaces mindful coding and thorough reviews.&lt;/p&gt;
&lt;p&gt;So the next time your IDE “helpfully” suggests a change, pause for a second. That quick check might save you from the kind of bug that inspired this post.&lt;/p&gt;
&lt;p&gt; What about you? Have you ever had a tiny mistake sneak into production despite all your safeguards? I’d love to hear your stories in the comments.&lt;/p&gt;
</description>
<category>Backend Dev</category>
<guid isPermaLink="true">https://coderlegion.com/5178/the-one-letter-rails-bug-that-slipped-past-rubocop-ci-and-code-reviews</guid>
<pubDate>Wed, 03 Sep 2025 20:33:43 +0000</pubDate>
</item>
<item>
<title>Vibe Coding: You Keep Using That Word</title>
<link>https://coderlegion.com/5121/vibe-coding-you-keep-using-that-word</link>
<description>&lt;p&gt;Vibe coding is less than a year old, but its very definition is being lost as people clamber on board the bandwagon. Let's work out what the dream was, why we're losing our grip on it so fast, and why Jumanji and The Princess Bride offer wisdom that can guide us.&lt;/p&gt;
&lt;h3 id=&quot;vibe-coding-as-an-enabler-for-citizen-developers&quot;&gt;Vibe coding as an enabler for citizen developers&lt;/h3&gt;
&lt;p&gt;We've had coding assistants in various forms for some time, but &lt;em&gt;vibe coding&lt;/em&gt; is different from these in a very specific way. The difference is where the name comes from, because when you're vibe coding, you just &quot;forget the code even exists&quot; and you do everything by interacting with the LLM.&lt;/p&gt;
&lt;p&gt;Here's the picture you should conjure for vibe coding:&lt;/p&gt;
&lt;p&gt;You're not even sat at a desk. You're reclined on a beanbag, sucking an iced latte through a paper straw, and talking to your LLM through voice interaction. &quot;I want a web page that help people calculate the amount of caffeine in a shot of espresso,&quot; you tell it. Then it creates a web page.&lt;/p&gt;
&lt;p&gt;You continue the conversation.&lt;/p&gt;
&lt;p&gt;&quot;Can we make it more pastel,&quot; you ask. The LLM obliges. &quot;The form looks boring. Make it more interesting.&quot;&lt;/p&gt;
&lt;p&gt;Then an error crops up. It's time to go into the advanced mode of vibe coding, copying the error and pasting it into the LLM. It fixes the error.&lt;/p&gt;
&lt;p&gt;This process continues. You look at what the LLM brings you, and poke around by prompting it to make changes.&lt;/p&gt;
&lt;p&gt;Vibe coding like this enables citizen developers to self-serve their ideas. They can create a web page or some utility that helps them achieve a small goal, like organizing their photos. You just &quot;see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works.&quot;&lt;/p&gt;
&lt;h3 id=&quot;strength-is-my-weakness&quot;&gt;Strength is my weakness&lt;/h3&gt;
&lt;p&gt;In &lt;em&gt;Jumanji: Welcome to the Jungle&lt;/em&gt;, Kevin Hart gets sucked into the video game along with his friends, only to discover that for his character, Mouse, &lt;a rel=&quot;nofollow&quot; href=&quot;https://youtu.be/RI1ijpjW82E?si=EA_ZO9NmNEzvrfFe&amp;amp;t=123&quot;&gt;strength is his weakness&lt;/a&gt;. For vibe coding, one of its biggest strengths may prove to be its undoing.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=11286819096114744570&quot; alt=&quot;Mouse: Strength is my weakness&quot;&gt;&lt;/p&gt;
&lt;p&gt;You see, &quot;vibe coding&quot; is great branding. Citizens and developers alike have been drawn to those two words like moths to a flame. Vibe coding &lt;em&gt;sounds cool&lt;/em&gt; and everyone wants in.&lt;/p&gt;
&lt;p&gt;A dangerous side-effect of this attraction is how people want to call their current AI-assisted workflow &quot;vibe coding&quot;, even though it doesn't look at all like the picture we painted. Developers are calling their work &quot;vibe coding&quot;, but they are looking at the code, debugging it, fixing it, and refactoring it.&lt;/p&gt;
&lt;p&gt;I have nothing against the desire to understand and improve on code given to you by an LLM. If you have the ability to do this, you likely have a responsibility to do it, too. The problem is that by calling it &quot;vibe coding&quot;, you're erasing the useful distinction the term brought to the conversation.&lt;/p&gt;
&lt;p&gt;Semantic diffusion (the process whereby we bleach all the usefulness from a definition) is not new to software development. I shudder when I look at most definitions. Given the effort put into defining Agile software development, it's heartbreaking to read how it gets described by SEO-hungry web pages written by folks who have never seen it done, let alone got hands-on taming the chaos in the real world.&lt;/p&gt;
&lt;p&gt;And that's where we are. Already. Just six months in.&lt;/p&gt;
&lt;h3 id=&quot;vibe-coding-you-keep-using-that-word&quot;&gt;Vibe coding, you keep using that word&lt;/h3&gt;
&lt;p&gt;Gene Kim, who is one of the most influential voices in the DevOps and Enterprise Technology space is about to release a book called *Vibe Coding: Building Production-Grade Software with GenAI, Chat, Agents, and Beyond&quot;.&lt;/p&gt;
&lt;p&gt;It's not out until October 21, 2025 but it likely talks about techniques that go well beyond &quot;vibe coding&quot;. It has to, because if we're talking about production-grade software, someone will have to bring it to the expected standards. &quot;It mostly works&quot; is not sufficient for most organizations.&lt;/p&gt;
&lt;p&gt;The book will likely be interesting, but it will also accelerate the semantic diffusion around the term.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=5663704462564396680&quot; alt=&quot;Inego Montoya: You keep using that word. I do not think it means what you think it means.&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;the-two-paths-forward&quot;&gt;The two paths forward&lt;/h3&gt;
&lt;p&gt;When it comes to semantic diffusion, you either fight to your last breath or shrug and move on. If we follow the pattern used to combat the erosion of Agile software development's meaning, we will build new terms with better fences and deeper moats, like Continuous Delivery.&lt;/p&gt;
&lt;p&gt;We need a term for the zero-code citizen developer use of LLMs and we need to keep it separate for the terms we use for professional software delivery assisted by LLMs. The needs and standards are distinct and we will waste a great deal of timing arguing from positions of ignorance if we let things get tangled up.&lt;/p&gt;
&lt;p&gt;Perhaps as an alternative we could call it (citi-) ZEN coding?&lt;/p&gt;
</description>
<category>Java</category>
<guid isPermaLink="true">https://coderlegion.com/5121/vibe-coding-you-keep-using-that-word</guid>
<pubDate>Mon, 01 Sep 2025 12:38:12 +0000</pubDate>
</item>
<item>
<title>AI Won’t Fix Your Software Delivery Problems</title>
<link>https://coderlegion.com/5024/ai-wont-fix-your-software-delivery-problems</link>
<description>&lt;p&gt;&lt;strong&gt;Amid our excitement over AI, we’ve fallen back into old habits, and this should prompt us to reset our approach.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It’s complicated. While the industry faces crucial debates over intellectual property and the environmental impacts of AI, there is a more fundamental issue: How do we use these tools to deliver high-quality work that benefits our organization and the community it serves?&lt;/p&gt;
&lt;p&gt;This article doesn’t address ethical or moral concerns but instead focuses on the growing pressure from leaders who want to introduce AI tools to increase productivity.&lt;/p&gt;
&lt;p&gt;We can use the &lt;a rel=&quot;nofollow&quot; href=&quot;https://dora.dev/dora-report&quot;&gt;2024 Accelerate State of DevOps report&lt;/a&gt; to guide us. In the report, the research team has taken a deep dive into the use of AI to get a baseline on its adoption and impact. We’ll use these insights to explain how we’ve fallen back into old habits, and this should prompt us to reset our approach and find a more impactful path forward.&lt;/p&gt;
&lt;h3 id=&quot;ai-adoption&quot;&gt;AI Adoption&lt;/h3&gt;
&lt;p&gt;The majority of organizations are increasing AI adoption. More than 80% of organizations are keen to add AI in some form, with code assistance, information summaries and documentation presenting the most sought-after opportunities.&lt;/p&gt;
&lt;p&gt;Code assistance is highly desired for tasks like writing code, understanding existing code and optimizing code. Code editors have long utilized algorithmic refactoring, machine learning and AI assistance, so AI adoption for coding purposes is a natural evolution of existing use cases.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=4697294748296184526&quot; alt=&quot;Code assistance in various forms has the most interest&quot;&gt;&lt;/p&gt;
&lt;p&gt;Using AI to analyze information and data is less well-established, though it has a precedent in the ubiquitous TL;DR (too long; didn’t read) summary added by kind folks to the start of their long-form writing.&lt;/p&gt;
&lt;h3 id=&quot;productivity-increases-with-ai&quot;&gt;Productivity Increases with AI&lt;/h3&gt;
&lt;p&gt;Most survey respondents (over 70%) reported productivity gains when using AI. People feel like they can get work done faster when they have its assistance. My long-running problem with &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.stevefenton.co.uk/blog/2023/09/measuring-developer-productivity/&quot;&gt;developer productivity&lt;/a&gt; is that it’s often not a useful measure.&lt;/p&gt;
&lt;p&gt;You can assess your personal productivity because it’s a feeling rather than a number. You don’t feel productive when dealing with busy work or handling constant interruptions. When you get a solid chunk of time to complete a task, you feel great. If an organization is interested in this kind of productivity, it should check in on employee satisfaction because people tend to be more satisfied when they can get things done.&lt;/p&gt;
&lt;p&gt;The State of DevOps report confirms this problem, as the high ratings for AI-driven productivity aren’t reducing toil work or improving &lt;a rel=&quot;nofollow&quot; href=&quot;https://thenewstack.io/stop-blaming-regulation-for-poor-software-delivery-performance/&quot;&gt;software delivery performance&lt;/a&gt;, which we’ve long held to be a solid way for development teams to contribute to the organization’s goals.&lt;/p&gt;
&lt;p&gt;A 25% increase in AI adoption brings modest increases in flow, satisfaction and productivity. It also decreases burnout. However, it doesn’t yet bring a meaningful reduction in toil work and doesn’t allow more time to be spent on valuable work.&lt;/p&gt;
&lt;h3 id=&quot;ai-lowers-software-delivery-performance&quot;&gt;AI Lowers Software Delivery Performance&lt;/h3&gt;
&lt;p&gt;The same 25% increase in AI adoption that made folks feel more productive hurts software delivery performance.&lt;/p&gt;
&lt;p&gt;AI reduced throughput by 1.5% and stability by 7.2%. If perception of code quality is increasing with AI assistance but stability is dropping, it indicates a mismatch between how well we think it performs a task and how well it actually does.&lt;/p&gt;
&lt;p&gt;Given the intense focus on increasing the speed of coding, we’re likely seeing suboptimization on a massive scale. Writing code is rarely the bottleneck for feature development. Speeding up the code itself is less valuable if you aren’t catching the bugs it introduces with automated tests. It also fails to address the broader software delivery system or guarantee your features are useful to users.&lt;/p&gt;
&lt;p&gt;If you aren’t working at the constraint, your optimizations don’t improve throughput. In many cases, optimizing away from the constraint harms the end-to-end system. Speeding up coding tasks has no good outcome unless you have smoothed the flow of everything that comes after.&lt;/p&gt;
&lt;p&gt;So, how do we use all these new tools well?&lt;/p&gt;
&lt;h3 id=&quot;getting-things-in-the-right-order&quot;&gt;Getting Things in the Right Order&lt;/h3&gt;
&lt;p&gt;The rush to adopt AI has led us back to a troublesome old pattern of buying a solution before we understand which problem it will solve. This means searching for a problem retrospectively, often in vain.&lt;/p&gt;
&lt;p&gt;A more successful approach to AI adoption would be to start with your problems, decide which one is holding you back the most and look for ways to solve it. This would leave all possible solutions open to you.&lt;/p&gt;
&lt;p&gt;Starting with the problem to be solved means you can choose the most impactful solution. You can eliminate unnecessary work or find a way to automate it using an existing part of your toolchain. If you need to bring in a new tool, you can select from all available options whether they use AI or not.&lt;/p&gt;
&lt;p&gt;If the solution turns out to be AI-based, I’ll bet it will be more successful if the problem leads you to the AI solution rather than the other way around.&lt;/p&gt;
</description>
<category>Backend Dev</category>
<guid isPermaLink="true">https://coderlegion.com/5024/ai-wont-fix-your-software-delivery-problems</guid>
<pubDate>Tue, 26 Aug 2025 17:56:24 +0000</pubDate>
</item>
<item>
<title>The biggest problem with AI coding assistants is that they create a lot of “buggy code”.</title>
<link>https://coderlegion.com/4816/the-biggest-problem-with-ai-coding-assistants-is-that-they-create-a-lot-of-buggy-code</link>
<description>&lt;p&gt;The biggest problem with AI coding assistants is that they create a lot of “buggy code”. &lt;/p&gt;
&lt;p&gt;So, what’s the solution?&lt;/p&gt;
&lt;p&gt;Make AI learn to fix its own mess&lt;/p&gt;
&lt;p&gt;Alibaba built SWE-smith: an automatic bug generator + fixer that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Creates real bugs in GitHub repos&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Verifies them via unit tests&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Has AI agents fix them step-by-step&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Produces before/after examples at scale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Basically, don’t just have AI models generate code, but also fine-tune them to fix the bugs.&lt;/p&gt;
&lt;p&gt;What do you think? Would this solve the problem?&lt;/p&gt;
</description>
<category>Machine Learning</category>
<guid isPermaLink="true">https://coderlegion.com/4816/the-biggest-problem-with-ai-coding-assistants-is-that-they-create-a-lot-of-buggy-code</guid>
<pubDate>Tue, 19 Aug 2025 06:34:36 +0000</pubDate>
</item>
<item>
<title>Is vibe coding for everyone??</title>
<link>https://coderlegion.com/4674/is-vibe-coding-for-everyone</link>
<description>&lt;h3 id=&quot;can-anyone-regardless-of-coding-skills-create-software-today-vibe-coding-says-yes-but-is-it-really-for-everyone-&quot;&gt;Can anyone, regardless of coding skills, create software today? Vibe coding says yes, but is it really for everyone?&lt;/h3&gt;
&lt;p&gt;.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What Is vibe coding and How to start&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vibe coding is a new way of building software where you don't write traditional code line by line. Instead you guide an AI with plain language called Prompts, watch it generate working code, and tweak it until it does what you want. Think of it as having a coding assistant that turns your ideas into digital projects almost instantly.&lt;/p&gt;
&lt;p&gt;Getting  started is easier than you might think. You can use platforms Like Chat GPT, Claude, or Replit, which let you describe what you want in natural language. Start with small projects, like a simple web page, a calculator, or a basic app, and let the AI handle the coding. Experiment, test, and adjust the outputs. the more you practice prompting, the better the results. Even if you have no coding experience, you can begin creating functional projects in just a few hours.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My Opinion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yes, vibe coding can work for everyone, depending on project and context.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My Research&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Vibe coding is a valuable tool for non-technical individuals aiming to bring their ideas to life quickly and efficiently. However, it is not a one-size-fits-all solution. For applications requiring high security, complex functionality, or long-term maintenance, traditional development practices are recommended.&lt;/p&gt;
&lt;p&gt;In conclusion, vibe coding can be for everyone, but with the right understanding of its capabilities and limitations.&lt;/p&gt;
</description>
<category>Mentorship</category>
<guid isPermaLink="true">https://coderlegion.com/4674/is-vibe-coding-for-everyone</guid>
<pubDate>Wed, 13 Aug 2025 10:11:15 +0000</pubDate>
</item>
<item>
<title>What is Supabase and Supabase Edge Functions? What's the main use?</title>
<link>https://coderlegion.com/4397/what-is-supabase-and-supabase-edge-functions-whats-the-main-use</link>
<description>&lt;p&gt;&lt;strong&gt;Supabase&lt;/strong&gt; is an open-source backend-as-a-service (BaaS) platform that helps developers build secure, scalable applications quickly. It provides a suite of backend tools—similar to Firebase—but built on open standards like PostgreSQL.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;what-supabase-offers-core-features-&quot;&gt;What Supabase Offers (Core Features):&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;PostgreSQL Database&lt;/strong&gt; – A powerful, scalable, open-source SQL database.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auth&lt;/strong&gt; – User authentication and authorization with support for social logins (Google, GitHub, etc.).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Realtime&lt;/strong&gt; – Realtime updates using websockets (e.g., when database rows change).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage&lt;/strong&gt; – File storage (images, videos, docs) with access control.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge Functions&lt;/strong&gt; – Serverless functions that run close to the user (more below).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;APIs&lt;/strong&gt; – Auto-generated REST and GraphQL APIs for your database.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dashboard&lt;/strong&gt; – A web-based GUI for managing your backend.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-supabase-edge-functions&quot;&gt;⚡ Supabase Edge Functions&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Supabase Edge Functions&lt;/strong&gt; are serverless functions that you write in JavaScript or TypeScript and deploy to run on &lt;strong&gt;Deno&lt;/strong&gt; (a secure runtime similar to Node.js but more modern).&lt;/p&gt;
&lt;h5 id=&quot;main-use-of-edge-functions-&quot;&gt;Main Use of Edge Functions:&lt;/h5&gt;
&lt;p&gt;They are designed for handling backend logic that shouldn't live directly in the client or the database.&lt;/p&gt;
&lt;h5 id=&quot;-use-cases-include-&quot;&gt;✅ Use Cases Include:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Custom API endpoints (e.g., payment processing, webhook handling)&lt;/li&gt;
&lt;li&gt;Middleware logic (e.g., verifying tokens, checking user roles)&lt;/li&gt;
&lt;li&gt;Connecting to third-party APIs (e.g., Stripe, Twilio, etc.)&lt;/li&gt;
&lt;li&gt;Running logic on scheduled intervals (e.g., cron jobs)&lt;/li&gt;
&lt;li&gt;Doing something that SQL triggers can’t handle&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id=&quot;why-use-supabase-and-edge-functions-together-&quot;&gt;Why Use Supabase and Edge Functions Together?&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;Supabase&lt;/strong&gt; to handle your core app data and auth.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Edge Functions&lt;/strong&gt; to handle custom logic securely and efficiently.&lt;/li&gt;
&lt;li&gt;Keep everything &lt;strong&gt;in one platform&lt;/strong&gt;, tightly integrated.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;quick comparison&lt;/strong&gt; and a &lt;strong&gt;simple example&lt;/strong&gt; to help you understand how &lt;strong&gt;Supabase Edge Functions&lt;/strong&gt; work—especially compared to &lt;strong&gt;Firebase Cloud Functions&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;comparison-supabase-edge-functions-vs-firebase-functions&quot;&gt;Comparison: Supabase Edge Functions vs Firebase Functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Feature                    &lt;/th&gt;&lt;th&gt;Supabase Edge Functions               &lt;/th&gt;&lt;th&gt;Firebase Cloud Functions&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Runtime                    &lt;/td&gt;&lt;td&gt;&lt;strong&gt;Deno&lt;/strong&gt; (TypeScript-native)          &lt;/td&gt;&lt;td&gt;&lt;strong&gt;Node.js&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Deployment Time            &lt;/td&gt;&lt;td&gt;Fast (\~seconds)                      &lt;/td&gt;&lt;td&gt;Slower (\~minutes)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Cold Start                 &lt;/td&gt;&lt;td&gt;Very Low (Deno edge runtime)          &lt;/td&gt;&lt;td&gt;Can be noticeable&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Region                     &lt;/td&gt;&lt;td&gt;Edge (closer to user, low latency)    &lt;/td&gt;&lt;td&gt;Usually centralized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Language Support           &lt;/td&gt;&lt;td&gt;TypeScript, JavaScript                &lt;/td&gt;&lt;td&gt;JavaScript, TypeScript&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Tied to Backend (DB, Auth) &lt;/td&gt;&lt;td&gt;Yes – deeply integrated with Supabase &lt;/td&gt;&lt;td&gt;Yes – integrated with Firebase&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Hosting Model              &lt;/td&gt;&lt;td&gt;Serverless, edge-deployed             &lt;/td&gt;&lt;td&gt;Serverless, central&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-simple-use-case-example&quot;&gt;✅ Simple Use Case Example&lt;/h3&gt;
&lt;h4 id=&quot;scenario-&quot;&gt;Scenario:&lt;/h4&gt;
&lt;p&gt;You want to verify that a user has a valid subscription before letting them access premium content.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;1-in-firebase-&quot;&gt;1. &lt;strong&gt;In Firebase:&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;You’d write a cloud function like this (Node.js):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;exports.checkSubscription = functions.https.onRequest((req, res) =&amp;gt; {
  const userId = req.body.userId;
  // Call Stripe or check Firestore
  // Return access status
});
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;2-in-supabase-edge-function-&quot;&gt;2. &lt;strong&gt;In Supabase (Edge Function):&lt;/strong&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;// supabase/functions/check-subscription/index.ts

import { serve } from &quot;https://deno.land/std/http/server.ts&quot;;

serve(async (req) =&amp;gt; {
  const { userId } = await req.json();

  // Call Stripe API, or query your Supabase DB
  const isActive = true; // pretend check

  return new Response(JSON.stringify({
    access: isActive ? &quot;granted&quot; : &quot;denied&quot;
  }), {
    headers: { &quot;Content-Type&quot;: &quot;application/json&quot; },
  });
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;-bonus-&quot;&gt;➕ Bonus:&lt;/h4&gt;
&lt;p&gt;You can secure this function by requiring Supabase Auth tokens and decoding them right inside the function.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;how-to-deploy-cli-&quot;&gt;How to Deploy (CLI):&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;supabase functions deploy check-subscription
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then call it from your frontend:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;const res = await fetch(&quot;/functions/v1/check-subscription&quot;, {
  method: &quot;POST&quot;,
  headers: { &quot;Authorization&quot;: `Bearer ${userToken}` },
  body: JSON.stringify({ userId }),
});
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/4397/what-is-supabase-and-supabase-edge-functions-whats-the-main-use</guid>
<pubDate>Sat, 02 Aug 2025 20:48:12 +0000</pubDate>
</item>
<item>
<title>What Is Vibe Coding? The Future of Developer Experience</title>
<link>https://coderlegion.com/4278/what-is-vibe-coding-the-future-of-developer-experience</link>
<description>&lt;p&gt;Published by Code Inception&lt;/p&gt;
&lt;p&gt;In the ever-evolving world of software development, a new term is making waves — Vibe Coding. But what exactly is it? Is it just another buzzword, or a true shift in the way we write code?&lt;/p&gt;
&lt;p&gt;Let’s dive deep into this fresh concept and explore how it's reshaping the developer ecosystem.&lt;/p&gt;
&lt;p&gt; What is Vibe Coding?&lt;br&gt;
Vibe Coding refers to a developer-centric approach that emphasizes aesthetic pleasure, flow state, and emotional connection while coding. It's not about the syntax or framework — it’s about how you feel when you code.&lt;/p&gt;
&lt;p&gt;Think of it like coding with a vibe — headphones on, lo-fi beats in the background, a clean VS Code theme, auto-saving magic, and smooth GitHub Copilot suggestions. You’re in the zone, flowing effortlessly, loving every keystroke. That’s vibe coding.&lt;/p&gt;
&lt;p&gt; Key Characteristics of Vibe Coding&lt;br&gt;
Here are the pillars that define vibe coding:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Immersive Flow&lt;br&gt;
Developers often enter a “flow state” where focus peaks. Vibe coding encourages a distraction-free, immersive environment to boost productivity and creativity.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Aesthetic Developer Setup&lt;br&gt;
From custom IDE themes to minimalistic UI and even RGB lighting — a pleasing dev setup enhances the overall experience. This is not vanity; it’s motivation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Assistive Tech &amp;amp; AI Tools&lt;br&gt;
AI assistants like GitHub Copilot, Tabnine, or even ChatGPT supercharge your coding experience. They reduce repetitive work and let you focus on the logic and art of coding.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Personalized Coding Rituals&lt;br&gt;
Whether it’s sipping coffee, vibing to ambient music, or late-night coding under a dim light — vibe coders often have rituals that set the mood.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Community &amp;amp; Aesthetic Sharing&lt;br&gt;
Platforms like Dev.to, Reddit (r/ProgrammerHumor), and X (Twitter) now showcase “vibe setups,” coding desks, or coding playlists — making coding more cultural and expressive.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; Why Does Vibe Coding Matter?&lt;br&gt;
Because happy developers write better code.&lt;/p&gt;
&lt;p&gt;Improved mental health &amp;amp; reduced burnout&lt;/p&gt;
&lt;p&gt;Enhanced focus and creativity&lt;/p&gt;
&lt;p&gt;Encourages experimentation and learning&lt;/p&gt;
&lt;p&gt;Boosts developer retention in teams&lt;/p&gt;
&lt;p&gt;Makes coding fun again &lt;/p&gt;
&lt;p&gt; Tools That Support Vibe Coding&lt;br&gt;
If you want to get started with vibe coding, here are some tools that help:&lt;/p&gt;
&lt;p&gt;VS Code Themes – One Dark Pro, Tokyo Night, Night Owl&lt;/p&gt;
&lt;p&gt;Terminal Customizers – Oh My Zsh, Fig, Warp&lt;/p&gt;
&lt;p&gt;Music Platforms – Lofi Girl, Spotify Coding Playlists&lt;/p&gt;
&lt;p&gt;Coding Companions – GitHub Copilot, ChatGPT, Codeium&lt;/p&gt;
&lt;p&gt;Productivity Boosters – Notion, Pomofocus, Raycast&lt;/p&gt;
&lt;p&gt; Is Vibe Coding for Professionals Too?&lt;br&gt;
Absolutely. Vibe coding isn’t just for hobby coders or YouTubers. It's being adopted in startups, remote teams, and even large tech companies. It helps professional developers stay mentally sharp and avoid burnout in high-pressure environments.&lt;/p&gt;
&lt;p&gt; “A good vibe leads to clean code.” – A modern developer’s mantra.&lt;/p&gt;
&lt;p&gt; Final Thoughts&lt;br&gt;
Vibe Coding is more than just a trend — it’s a cultural shift.&lt;br&gt;
It redefines how developers interact with code, tools, and even themselves. It blends productivity with personality. Passion with precision.&lt;/p&gt;
&lt;p&gt;So if you’ve ever sat down at your desk, music playing, editor glowing, and lost yourself in hours of joyous coding — you’ve already experienced vibe coding.&lt;/p&gt;
&lt;p&gt;Why not make it your daily habit?&lt;/p&gt;
&lt;p&gt; About Code Inception&lt;br&gt;
At Code Inception, we simplify tech for everyone. From developers to digital dreamers, follow us for modern tech tips, tutorials, and fresh coding culture.&lt;/p&gt;
&lt;p&gt; Follow us on YouTube @CodeInception-2K25&lt;br&gt;
 Blog: &lt;a rel=&quot;nofollow&quot; href=&quot;https://code-inception-2025.blogspot.com/&quot;&gt;https://code-inception-2025.blogspot.com/&lt;/a&gt;&lt;/p&gt;
</description>
<category>Web Dev</category>
<guid isPermaLink="true">https://coderlegion.com/4278/what-is-vibe-coding-the-future-of-developer-experience</guid>
<pubDate>Sat, 26 Jul 2025 07:57:03 +0000</pubDate>
</item>
<item>
<title>Vibe Coding - Conversational Software Development - Part 3 Prompt Discipline</title>
<link>https://coderlegion.com/4208/vibe-coding-conversational-software-development-part-3-prompt-discipline</link>
<description>&lt;h3 id=&quot;inroduction&quot;&gt;Inroduction&lt;/h3&gt;
&lt;p&gt;It is speculated that vibe coding could fundamentally change how we build software. Instead of writing lines of code, we will describe our goals in plain English and working software will be generated in response.&lt;/p&gt;
&lt;p&gt;In my &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.gaurgaurav.com/2025/ai/vibe-coding-conversational-software-development-part2/&quot;&gt;last post&lt;/a&gt;, I experimented with a few Vibe Coding tools and shared my hands-on experience. If you have been following closely, you might have noticed something subtle but important that I am using natural language as an interface. The words I choose shape how AI interprets and builds software. And behind that process lies a critical yet often overlooked layer of the system prompt.&lt;/p&gt;
&lt;h3 id=&quot;so-what-exactly-is-a-prompt-&quot;&gt;So, What Exactly is a Prompt?&lt;/h3&gt;
&lt;p&gt;Think of Vibe Coding as a &lt;em&gt;chat-driven&lt;/em&gt; engineering environment. Every message you send, or the prompt is not just casual conversation. It is more like writing an operating manual for your AI assistant.&lt;br&gt;
A prompt sets the ground rules. It can define your preferred tech stack, coding style, naming conventions, or whether the AI should ask for clarification before making assumptions. In other words, it’s your interface for aligning the AI with your intent.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Gaur4vGaur/traveller/refs/heads/master/images/ai/2025-07-05-ai_vibe-coding-conversational-software-development-part3/SystemPrompt.png&quot; alt=&quot;System prompt illustration&quot;&gt;&lt;em&gt;System prompt&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;why-prompts-matter&quot;&gt;Why Prompts Matter&lt;/h3&gt;
&lt;p&gt;From my experience, if the prompt is not clear or consistent, things can quickly go off track. Here are just a few issues I ran into when prompts were vague:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The AI picked the wrong programming language.&lt;/li&gt;
&lt;li&gt;It introduced unfamiliar and sometimes unnecessary libraries.&lt;/li&gt;
&lt;li&gt;It ignored earlier context and gave contradictory results.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Even with advanced tools like &lt;a rel=&quot;nofollow&quot; href=&quot;https://chatgpt.com/&quot;&gt;ChatGPT&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; href=&quot;https://claude.ai/&quot;&gt;Claude&lt;/a&gt;, or &lt;a rel=&quot;nofollow&quot; href=&quot;https://cursor.com/en&quot;&gt;Cursor&lt;/a&gt;, vagueness in instructions can lead to unpredictable behaviour. It is not about the quality of the model rather it is about the clarity of the direction we give it.&lt;/p&gt;
&lt;h3 id=&quot;configure-system-prompts&quot;&gt;Configure System Prompts&lt;/h3&gt;
&lt;p&gt;A benefit of using most of the modern AI platforms is that they allow users to define system level prompts. You can define the prompts either globally (across entire workspace) or local (for every project). This helps maintain consistency and avoid repeating the context over and over.&lt;/p&gt;
&lt;p&gt;I now make it a habit to start every coding session by explicitly setting the system prompt. It is like configuring your dev environment but in a conversational format.&lt;/p&gt;
&lt;h3 id=&quot;designing-an-effective-prompt&quot;&gt;Designing an Effective Prompt&lt;/h3&gt;
&lt;p&gt;I am still learning as I go, but I want to share a sample prompt that has worked well for me. The idea is to set clear constraints right from the start. It gives the AI less room for misinterpretation and reduces friction during the session.&lt;br&gt;
Here is a sample system prompt I often use:&lt;/p&gt;
&lt;p&gt;&amp;gt;Consider yourself a frontend developer.&lt;br&gt;&lt;br&gt;
All UI components should use React and Tailwind CSS.&lt;br&gt;&lt;br&gt;
Use JavaScript only and avoid any external libraries unless specified.&lt;br&gt;&lt;br&gt;
Ask for clarification if any requirement is unclear.&lt;br&gt;&lt;br&gt;
Focus on clean and modular code.&lt;/p&gt;
&lt;p&gt;This prompt does a few important things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It defines the role of the assistant (a frontend developer).&lt;/li&gt;
&lt;li&gt;It sets technology boundaries—no Python, TypeScript, or surprise libraries.&lt;/li&gt;
&lt;li&gt;It encourages the AI to ask questions if something is ambiguous.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can easily extend this prompt to add more context depending on your project needs. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All UI components must be accessible.&lt;/li&gt;
&lt;li&gt;Ensure mobile responsiveness.&lt;/li&gt;
&lt;li&gt;The backend is built on Java-based APIs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This initial alignment streamlines development by cutting down on time consumption and limiting AI interactions. You can direct AI to focus according to your development approach and technology choices.&lt;/p&gt;
&lt;p&gt;Another observation is that AI assistants demonstrate higher effectiveness when working with commonly used frameworks and tools such as &lt;code&gt;React&lt;/code&gt;, &lt;code&gt;Tailwind&lt;/code&gt;, and &lt;code&gt;Node&lt;/code&gt;. These models have seen far more examples of those technologies, which means you’ll get more reliable and relevant responses.&lt;/p&gt;
&lt;h3 id=&quot;new-developers-don-t-overthink-it&quot;&gt;New Developers: Don't Overthink It&lt;/h3&gt;
&lt;p&gt;If you have been following along, the discussion so far might make it feel like you need to master a dozen concepts before you even begin with Vibe Coding. But that is not true.&lt;br&gt;
If you are just getting started, my advice is to set a few clear boundaries and get going. Let us take an example to create an interactive dashboard. Here is an example of a prompt that works well to start with:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I am a new developer. I want to build an interactive data dashboard.&lt;br&gt;
Can you suggest a tech stack that is easy to maintain and well-supported?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Most AI assistants like ChatGPT, Claude, and Gemini will then help you through your upcoming steps. The assistants will pose clarifying questions about your requirements which allows them to develop both your tech stack and system prompt.&lt;/p&gt;
&lt;h3 id=&quot;tools-that-help-you-craft-better-prompts&quot;&gt;Tools That Help You Craft Better Prompts&lt;/h3&gt;
&lt;p&gt;As I continue experimenting, I have come to realize how important the right prompt is. And the good news? You don't have to guess. Tools like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://console.anthropic.com/&quot;&gt;Anthropic Claude Console&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://gemini.google.com/app&quot;&gt;Google Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://chatgpt.com/&quot;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;can help you test, iterate, and refine your prompts in real time. Below is an example of how I refined one of mine using Google Gemini.&lt;/p&gt;
&lt;h3 id=&quot;my-prompt-refinement-process&quot;&gt;My Prompt Refinement Process&lt;/h3&gt;
&lt;p&gt;I started with this base prompt to explore &lt;a rel=&quot;nofollow&quot; href=&quot;https://data.london.gov.uk/download/290a22f1-5eef-4801-8286-3f288b49093a/acce7f88-70f0-4fd0-9160-f02a9d96b2c3/air-quality-london.xlsx&quot;&gt;London Air Quality Data&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;gt;I want to build an interactive dashboard for exploring data located at London Air Quality Data (Excel).&lt;br&gt;&lt;br&gt;
Please ask me questions to better understand the requirements.&lt;br&gt;&lt;br&gt;
Also then help me write a system prompt that guides you to use React, Tailwind, and D3 for visualization.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;If London Air Quality Data is not available at above link, I have &lt;a rel=&quot;nofollow&quot; href=&quot;https://raw.githubusercontent.com/Gaur4vGaur/traveller/refs/heads/master/air-quality-london.csv&quot;&gt;committed a copy&lt;/a&gt; of it, as CSV, at the time writing this post.&lt;br&gt;
{: .prompt-info }&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Gemini asked a few smart follow-up questions about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what kind of visualizations I had in mind,&lt;/li&gt;
&lt;li&gt;the type of interactivity I expected,&lt;/li&gt;
&lt;li&gt;the layout preferences, and&lt;/li&gt;
&lt;li&gt;how I planned to handle the data source.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To narrow the scope, I directed the focus to only one sheet:&lt;/p&gt;
&lt;p&gt;&amp;gt;Only evaluate the ‘Monthly Averages’ sheet. Assume everything else&lt;/p&gt;
&lt;p&gt;Based on that, Gemini helped me generate a refined system prompt that I could use to generate my dashboard. Below is the output prompt&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-md&quot;&gt;### System Prompt:

You are an expert web development assistant tasked with building an interactive data exploration dashboard. 
Your goal is to generate a detailed plan, including component structure and initial code snippets, for a React application that visualizes air quality monthly averages.

__Project Objective__
Create an interactive dashboard to explore monthly average air quality data for London, sourced from a specific Excel file.

### Core Technologies:
- Frontend Framework: React
- Styling Framework: Tailwind CSS
- Visualization Library: D3.js

### Data Source:
- __URL__: https://data.london.gov.uk/download/290a22f1-5eef-4801-8286-3f288b49093a/acce7f88-70f0-4fd0-9160-f02a9d96b2c3/air-quality-london.xlsx
- Specific Sheet to Use: &quot;monthly averages&quot;

### Data Interpretation &amp;amp; Preparation:
1. Download and parse the Excel file from the provided URL.
2. Focus exclusively on the data within the &quot;monthly averages&quot; sheet.
3. Identify key columns for visualization:
  - Date (or equivalent column representing the month/year for aggregation)
  - Site Name (or equivalent for location/monitoring station)
  - Pollutant (or equivalent for the type of pollutant, e.g., NO2, PM2.5)
  - Value (or equivalent for the monthly average concentration)
4. Data cleaning and transformation should include:
  - Converting date strings/numbers to valid Date objects.
  - Handling potential missing or invalid data points gracefully (e.g., excluding them from calculations or using interpolation if appropriate for visualization context, but primarily focusing on showing available data).

### Dashboard Functionality &amp;amp; Interactivity:
1. Data Loading: Efficiently load and parse the &quot;monthly averages&quot; data from the Excel file upon component mount. Use an appropriate library like xlsx (SheetJS) for Excel parsing.
2. Filters/Controls:
  - Pollutant Type Filter: Allow users to select one or more pollutant types (e.g., a multi-select dropdown or checkboxes).
  - Monitoring Station Filter: Allow users to select one or more specific monitoring stations/sites.
  - Year Filter: Provide a way to filter data by year (e.g., a dropdown for available years or a range slider if multiple years are selected).
3. Visualizations (D3.js):
  - Time Series Line Chart: The primary visualization should be a line chart showing the monthly average trend over time for selected pollutants and stations.
    -Each line should represent a combination of pollutant and station (or allow choosing a single pollutant to compare multiple stations, or vice versa).
    - Axes should be clearly labeled (e.g., &quot;Date&quot; on X-axis, &quot;Concentration&quot; on Y-axis).
  - Interactive Tooltips: On hover, display detailed information for specific data points (e.g., date, pollutant, station, exact monthly average value).
4. User Interface (React &amp;amp; Tailwind CSS):
  - Clean, responsive, and intuitive dashboard layout.
  - Filter controls should be easily accessible (e.g., in a sidebar or header).
  - The main visualization area should be prominent.
  - Use Tailwind CSS for all styling, ensuring a modern and clean aesthetic.

### Output Requirements:
1. A high-level React component structure (e.g., App.js, Dashboard.js, Chart.js, FilterControls.js).
2. Pseudo-code or a conceptual outline for data fetching and initial parsing of the Excel sheet.
3. An example of how a D3 line chart component might receive data and render, focusing on the integration with React and general D3 patterns.
4. Considerations for managing application state (e.g., selected filters, loaded data).

&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;final-thoughts-2&quot;&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;System prompts require continuous refinement as they need to match the evolving needs of your project just like we rewrite code to enhance its clarity and maintainability. Your prompts should evolve to match your project's development to reflect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;new tools or stack changes,&lt;/li&gt;
&lt;li&gt;updated coding patterns or style guides,&lt;/li&gt;
&lt;li&gt;and shifts in architecture or design decisions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A good prompt is more than basic instructions to your assistant. You can consider it as a design contract between you and your AI assistant. In &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.gaurgaurav.com/2025/ai/vibe-coding-conversational-software-development-part4/&quot;&gt;my next and final post&lt;/a&gt; I will continue to discuss how to further fine tune the prompts.&lt;/p&gt;
&lt;p&gt;My suggestion for now is not to stress too much about getting it perfect the first time. Start simple, iterate, and treat your prompt like part of the engineering process where your intent meets implementation.&lt;/p&gt;
</description>
<category>Other</category>
<guid isPermaLink="true">https://coderlegion.com/4208/vibe-coding-conversational-software-development-part-3-prompt-discipline</guid>
<pubDate>Mon, 21 Jul 2025 19:18:31 +0000</pubDate>
</item>
<item>
<title>Jules AI - The (Currently) Free Coding Assistant That Can't Follow Directions But Gets Shit Done</title>
<link>https://coderlegion.com/4045/jules-the-currently-free-coding-assistant-that-cant-follow-directions-but-gets-shit-done</link>
<description>&lt;p&gt;&lt;img src=&quot;https://www.stephanmiller.com/images/2025/jules-ai-coding.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Jules is currently free, so I figured it was worth a try. Of course, I had to find out what I could break.&lt;/p&gt;
&lt;p&gt;Each user gets these default limits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;5 concurrent tasks&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;60 total tasks per day&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;5 codecasts per day&lt;/strong&gt; (still not sure what this means)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sixty tasks a day for free? That’s really generous and it meant I didn’t have to worry about reading documentation or instructions the first time.&lt;/p&gt;
&lt;h3 id=&quot;i-jumped-in-feet-first&quot;&gt;I Jumped in Feet First&lt;/h3&gt;
&lt;p&gt;My Obsidian plugin worked well enough for me to use it, but there were issues. Issues that I’d been ignoring because the damn thing worked and I had other shit to do. But I finally added issues to my GitHub repo.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.stephanmiller.com/images/2025/obsidian-plugin-github-issues.png&quot; alt=&quot;obsidian-plugin-github-issues&quot;&gt;&lt;/p&gt;
&lt;p&gt;Four issues. Nothing too crazy. Should be straightforward for an AI that can supposedly code.&lt;/p&gt;
&lt;p&gt;I gave Jules access to the repo and told it: “I want you to work on the issues in this repository and create a feature branch for each fix. Start with the first one.”&lt;/p&gt;
&lt;p&gt;Simple enough, right?&lt;/p&gt;
&lt;h3 id=&quot;jules-decides-to-ignore-my-instructions&quot;&gt;Jules Decides to Ignore My Instructions&lt;/h3&gt;
&lt;p&gt;Jules fetched the repo, cloned it into a VM, and read the README file. But then it discovered the “Future Enhancements” section I’d added to the README and decided that’s what it wanted to work on instead.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.stephanmiller.com/images/2025/obsidian-plugin-future-enhancements.png&quot; alt=&quot;obsidian-plugin-future-enhancements&quot;&gt;&lt;/p&gt;
&lt;p&gt;It completely ignored my instruction to work on the issues, the same issues that are listed right above the “Future Enhancements” section, and decided it would work on the “Interactive book selection dialog” instead.&lt;/p&gt;
&lt;p&gt;Jules then asked me to approve the plan, but I didn’t see any way to reject it. It was going to auto-approve in about a minute anyway. I thought maybe clicking “Approve” would launch a modal where I could say “no, you illiterate AI, work on the issues I told you to work on.”&lt;/p&gt;
&lt;p&gt;It did not.&lt;/p&gt;
&lt;p&gt;So it started working on the wrong thing. I messaged “stop” and it replied: “I have stopped the current task. Is there something specific you would like me to do instead, or a different issue you’d like me to focus on from the README?”&lt;/p&gt;
&lt;p&gt;It paused for a few seconds and then continued doing exactly what it was doing before.&lt;/p&gt;
&lt;p&gt;Currently, as far as I can tell, the only way to reject a plan is to let it start, pause it manually, and then delete the entire task. User experience design at its finest.&lt;/p&gt;
&lt;p&gt;Jules finished the feature and gave me the option to click a button to create a feature branch. So now I had a new feature to test before I could fix the actual issues I wanted fixed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.stephanmiller.com/images/2025/jules-obsidian-plugin-branch.png&quot; alt=&quot;jules-obsidian-plugin-branch&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;testing-the-feature-that-jules-built-while-ignoring-my-prompt&quot;&gt;Testing the Feature that Jules Built While Ignoring My Prompt&lt;/h3&gt;
&lt;p&gt;So I pulled the branch down to the Obsidian vault I use for testing, the one with all the plugins I’m developing loaded up. There was one error in the code, in unit tests I never asked Jules to add:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tests/main.test.ts:160:35 - error TS2554: Expected 0 arguments, but got 1.
sortAnnotationsByCFI: jest.fn((ann: Annotation[]) =&amp;gt; ann), // Simple pass-through
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I just deleted the broken test.&lt;/p&gt;
&lt;p&gt;It took me a while to figure out that the selection modal didn’t launch via the sidebar button like I expected. I had to hit Command+P and find the command to launch it. But you know what? It actually worked.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.stephanmiller.com/images/2025/ebook-selection-modal.png&quot; alt=&quot;ebook-selection-modal&quot;&gt;&lt;/p&gt;
&lt;p&gt;Since the feature worked, I merged the change and created a new release. Then I did some reading to figure out how to prevent Jules from going off on another tangent.&lt;/p&gt;
&lt;h3 id=&quot;back-to-fixing-bugs-this-time-with-feeling-&quot;&gt;Back to Fixing Bugs (This Time With Feeling)&lt;/h3&gt;
&lt;p&gt;I thought maybe I should be more descriptive, but there wasn’t much to be descriptive about. There are issues. I added them to the repo. They’re also in the README that I know Jules can access. Most of the &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/google-labs-code/jules-awesome-list&quot;&gt;example prompts&lt;/a&gt; are very short, shorter than what I’d already tried.&lt;/p&gt;
&lt;p&gt;So I tried again: “This github repo has 4 issues listed here: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/eristoddle/apple-books-annotation-import/issues&quot;&gt;https://github.com/eristoddle/apple-books-annotation-import/issues&lt;/a&gt;. Give me a plan for fixing the first issue. If you have no access to these, let me know. Do not do anything else.”&lt;/p&gt;
&lt;p&gt;This time it worked.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.stephanmiller.com/images/2025/jule-web-interface.png&quot; alt=&quot;jule-web-interface&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.stephanmiller.com/images/2025/jules-cover-fix-plan.png&quot; alt=&quot;jules-cover-fix-plan&quot;&gt;&lt;/p&gt;
&lt;p&gt;Both the accidental feature and the bug fix took very little time. I was actually surprised by the speed. But Jules created broken unit tests again. I figured maybe it was because I didn’t have my npm and node versions in the package.json, so I added those and deleted them again.&lt;/p&gt;
&lt;p&gt;It actually fixed the bug and at least doubled the number of book covers I was getting.&lt;/p&gt;
&lt;h3 id=&quot;the-great-color-mapping-mystery&quot;&gt;The Great Color Mapping Mystery&lt;/h3&gt;
&lt;p&gt;The second issue was about finding annotation colors.&lt;/p&gt;
&lt;p&gt;Me: “Fix this feature in the repo: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/eristoddle/apple-books-annotation-import/issues/5&quot;&gt;https://github.com/eristoddle/apple-books-annotation-import/issues/5&lt;/a&gt;. Do not do anything else.”&lt;/p&gt;
&lt;p&gt;I think “Do not do anything else” will be part of my prompt from now on.&lt;/p&gt;
&lt;p&gt;Jules said: “The code changes have been reviewed for syntactical correctness and logical soundness. Direct testing with an Apple Books database is not possible, so final validation will be up to the user.”&lt;/p&gt;
&lt;p&gt;Translation: “I changed some code and it compiles. Good luck!”&lt;/p&gt;
&lt;p&gt;After testing, I told Jules: “Now it seems like there are no annotation color indicators at all in the md files. Before they were all just purple. Now they are just not there at all.”&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.stephanmiller.com/images/2025/jules-annotation-color-message-two.png&quot; alt=&quot;jules-annotation-color-message-two&quot;&gt;&lt;/p&gt;
&lt;p&gt;The second attempt produced different colors, but they didn’t match the highlight colors in the Books app.&lt;/p&gt;
&lt;p&gt;I mapped the colors Jules gave me to the actual colors and told it about the differences: “The color images are back and there are a variety of them, but they do not match the colors in the Books app. Here is how they differ (Books app color → markdown color): underline → both yellow and underline, purple → no icon at all, pink → red, yellow → purple, blue → blue, green → green.”&lt;/p&gt;
&lt;p&gt;I even included the log showing the distinct annotation style values from my test database. So this bug took three interactions, but Jules finally got the color mapping right.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.stephanmiller.com/images/2025/obsidian-annotation-colors.png&quot; alt=&quot;obsidian-annotation-colors&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;taking-it-to-the-big-leagues&quot;&gt;Taking It to the Big Leagues&lt;/h3&gt;
&lt;p&gt;My main Apple Books account has 4000 books and over 60 books with highlights. When I first worked on this plugin, the database structure was different, so I wanted to make sure everything worked in the wild before calling it done.&lt;/p&gt;
&lt;p&gt;The plugin handled the larger database just fine. All the covers loaded correctly, and the color annotations matched what I saw in the Books app.&lt;/p&gt;
&lt;h3 id=&quot;everything-i-fixed-in-this-change&quot;&gt;Everything I Fixed In This Change&lt;/h3&gt;
&lt;p&gt;It took about two hours total, not counting the issue Jules couldn’t fix. I let it code while I took notes for this article, worked on Obsidian cleanup, and checked out Reddit for a while.&lt;/p&gt;
&lt;p&gt;Here’s what got implemented:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ New interactive ebook selection dialog:&lt;/strong&gt; By accident when I was asking Jules to fix issues, but I’m counting it as a win.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Fixed finding ebook covers:&lt;/strong&gt; This was the original first issue. Jules doubled the number of covers the plugin could find.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Fixed annotation color icons:&lt;/strong&gt; Took three tries and some detailed feedback, but now the colors match what’s in the Books app.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅ Fixed missing annotation dates:&lt;/strong&gt; This needed a second attempt. I had to tell Jules: “I have include dates set to true and include citations set to false. There are no dates in the markdown files though.” But it got it right the second time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;❌ Did not fix gibberish in epub chapter names:&lt;/strong&gt; This one turned into a nightmare. The TypeScript build error migrated from the tests that never worked. I tried to get Jules to fix it once and it failed. The second time it was thinking forever, so I tried Copilot in VS Code, and that fixed the build.&lt;/p&gt;
&lt;p&gt;But then there was a runtime error I’d run into before when Claude Code tried to use a Node.js ebook parsing package. Something about not being able to access the file system in Electron. I went round and round with Jules on this one and finally gave up.&lt;/p&gt;
&lt;p&gt;One thing I realized is that I could tell Jules to build the app to test the build and fix issues, but I had to make it a command. When I asked “Did you build the app to test it?” it said that wasn’t possible. But when I just told it to build the project, it did it.&lt;/p&gt;
&lt;p&gt;So I let it churn through fixing the build errors for 30 minutes. When I tested the result, the chapters still weren’t fixed. But I didn’t expect this one to be easy without doing some research first.&lt;/p&gt;
&lt;p&gt;I used 5 of my available 60 free tasks for the day.&lt;/p&gt;
&lt;h3 id=&quot;jules-fast-confused-but-generally-useful&quot;&gt;Jules: Fast, Confused, but Generally Useful&lt;/h3&gt;
&lt;p&gt;Jules is fast. That surprised me. At least until there’s back and forth on changes, then the conversation slows down.&lt;/p&gt;
&lt;p&gt;It was done with the next fix before I finished testing the previous one. I added one feature I didn’t plan on and fixed four issues in a little over an hour.&lt;/p&gt;
&lt;p&gt;But Jules went off on a weird tangent when I gave it what I thought were specific instructions. There seems to be no real interaction other than the first message and accepting the plan. I was worried about fixing issues in a branch it created if something didn’t work.&lt;/p&gt;
&lt;p&gt;Using a task like it was a chat and trying to fix more than one issue per task got confusing. Then I figured out I needed a different workflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 chat per branch, but can do multiple related things&lt;/li&gt;
&lt;li&gt;1 chat can be as big as 1 feature&lt;/li&gt;
&lt;li&gt;Code review each branch&lt;/li&gt;
&lt;li&gt;If there are issues, go back to the chat and have Jules fix them&lt;/li&gt;
&lt;li&gt;If there are build errors, tell Jules specifically to build the app again, test, and fix any errors.&lt;/li&gt;
&lt;li&gt;Pull and test again&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I was used to my Claude Code process where everything happened in the branch I was on locally. The “Publish Branch” button in Jules seemed scary at first, but the second time I used it, it just pushed modifications to the existing branch. I was expecting merge conflicts or some other drama.&lt;/p&gt;
&lt;p&gt;Most things I asked Jules to do worked well, except for the chapter names issue. I also didn’t ask it to create unit tests, but it kept creating broken ones anyway. It each branch it created, I ran them once and if they failed, I deleted them. They mainly failed because of TypeScript type issues.&lt;/p&gt;
&lt;h3 id=&quot;the-future-of-lazy-coding&quot;&gt;The Future of Lazy Coding&lt;/h3&gt;
&lt;p&gt;Sixty tasks a day for free is generous. I’m planning to move everything I have to GitHub that isn’t already there and create issues for any feature ideas or bugs I encounter.&lt;/p&gt;
&lt;p&gt;I could envision a process where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A user puts in a support request&lt;/li&gt;
&lt;li&gt;An issue gets created on the repo&lt;/li&gt;
&lt;li&gt;I tell Jules to fix it&lt;/li&gt;
&lt;li&gt;Jules fixes it, creates a custom build, and the user tests it (don’t know about this, but I can dream)&lt;/li&gt;
&lt;li&gt;If the fix works, I merge it and create a new release&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’m not sure exactly how this process would work in practice, but the potential is there.&lt;/p&gt;
&lt;h3 id=&quot;verdict-worth-the-price-of-free&quot;&gt;Verdict: Worth the Price of Free&lt;/h3&gt;
&lt;p&gt;Jules isn’t perfect. It ignored my initial instructions, created broken unit tests, and couldn’t fix the most complex issue I threw at it. But it’s fast, it’s free for now, and it actually solved most of the problems I needed solved.&lt;/p&gt;
&lt;p&gt;In two hours, I got a new feature and fixed three out of four issues that had been sitting in my backlog. The fourth issue would have taken me some research into ePub structure even doing it manually.&lt;/p&gt;
&lt;p&gt;I’m definitely planning to shift more of my “vibe coding” projects to Jules. At 60 free tasks per day, I can afford to let it work on the boring stuff while I focus on the interesting problems. In fact, to use 60 tasks a day, I might have to try running concurrent tasks and I can do 5 of those.&lt;/p&gt;
&lt;p&gt;And if it goes off on another tangent and builds something I didn’t ask for? Well, sometimes the best features are the ones you never knew you needed.&lt;/p&gt;
</description>
<category>Java</category>
<guid isPermaLink="true">https://coderlegion.com/4045/jules-the-currently-free-coding-assistant-that-cant-follow-directions-but-gets-shit-done</guid>
<pubDate>Tue, 15 Jul 2025 17:40:55 +0000</pubDate>
</item>
<item>
<title>Human Insight in an AI-Driven Job Market</title>
<link>https://coderlegion.com/3877/human-insight-in-an-ai-driven-job-market</link>
<description>&lt;p&gt;Yesterday I had one of the shortest technical interviews of my career just 10 minutes. But in those few minutes, I encountered a senior engineer whose depth of knowledge left a lasting impression.&lt;/p&gt;
&lt;p&gt;I didn't make it past the round, but I walked away with something more valuable: perspective.&lt;/p&gt;
&lt;p&gt;This kind of fast-track interviewing is increasingly common, especially in mass hiring pipelines. Unfortunately, it often leads to a mismatch between expectations, company culture, and retention. Even the interviewer admitted most candidates had zero clue about the company they applied to.&lt;/p&gt;
&lt;p&gt;In a world where AI is optimizing workflows and job boards are flooded with auto-submitted resumes, I believe the human touch still matters. Research, intent, and preparation go a long way and they reflect more than just technical readiness.&lt;/p&gt;
&lt;p&gt;Rejections can sting, but they also reveal how systems human and AI-driven could serve us better.&lt;/p&gt;
&lt;h2 id=&quot;techinterview-aiinhiring-careergrowth-softwareengineering-interviewinsights-masshiring-devcommunity-jobsearchjourney-leadershipmindset-reflectionpost&quot;&gt;TechInterview #AIInHiring #CareerGrowth #SoftwareEngineering #InterviewInsights #MassHiring #DevCommunity #JobSearchJourney #LeadershipMindset #ReflectionPost&lt;/h2&gt;
</description>
<category>Interview Preparation</category>
<guid isPermaLink="true">https://coderlegion.com/3877/human-insight-in-an-ai-driven-job-market</guid>
<pubDate>Thu, 10 Jul 2025 07:59:37 +0000</pubDate>
</item>
</channel>
</rss>