<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Wrought</title>
    <description>The latest articles on DEV Community by Wrought (@usewrought).</description>
    <link>https://dev.to/usewrought</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3832297%2Fbeed702f-533b-4732-9612-03c5d1933bff.png</url>
      <title>DEV Community: Wrought</title>
      <link>https://dev.to/usewrought</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/usewrought"/>
    <language>en</language>
    <item>
      <title>88 Sessions. 201 Commits. Zero Users. What Building an AI Tool With AI Actually Taught Me.</title>
      <dc:creator>Wrought</dc:creator>
      <pubDate>Fri, 24 Apr 2026 16:21:00 +0000</pubDate>
      <link>https://dev.to/usewrought/88-sessions-201-commits-zero-users-what-building-an-ai-tool-with-ai-actually-taught-me-25bp</link>
      <guid>https://dev.to/usewrought/88-sessions-201-commits-zero-users-what-building-an-ai-tool-with-ai-actually-taught-me-25bp</guid>
      <description>&lt;p&gt;I have spent 88 sessions building a software engineering tool using AI — and I used the tool itself for every session. Here is what I learned.&lt;/p&gt;

&lt;p&gt;The tool is called &lt;a href="https://fluxforge.ai" rel="noopener noreferrer"&gt;Wrought&lt;/a&gt;. It is a structured engineering process for AI coding assistants. Think of it as an engineering runbook that your AI assistant actually follows: pipelines for bug investigation, design analysis, implementation, and code review, all producing documentation that builds your project's institutional memory.&lt;/p&gt;

&lt;p&gt;The unusual part is not the product. It is the method. Every feature, every bug fix, every architectural decision in Wrought was built using Wrought's own process. Dogfooding at its most literal. The tool that enforces design-before-code was designed before it was coded. The skill that generates findings trackers was tracked in a findings tracker. The code review system reviewed itself.&lt;/p&gt;

&lt;p&gt;88 sessions. 201 commits. 87 days from first commit to this post. Here is what the numbers say about building with AI — and what they leave out.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;p&gt;Before the lessons, the raw data. These are not estimates; they are counted from the Git history and file system.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sessions (Claude Code conversations)&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Git commits&lt;/td&gt;
&lt;td&gt;201&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Findings trackers created&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Design documents&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blueprints&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Research reports&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code reviews (up-to-5-agent parallel review)&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Investigation reports&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RCA reports&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implementation prompts&lt;/td&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plans&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lines of Python (source)&lt;/td&gt;
&lt;td&gt;~2,300&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lines of Python (tests)&lt;/td&gt;
&lt;td&gt;~3,100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills (structured AI workflows)&lt;/td&gt;
&lt;td&gt;15+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Files changed since first commit&lt;/td&gt;
&lt;td&gt;1,016&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lines inserted&lt;/td&gt;
&lt;td&gt;193,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calendar days (Jan 26 to Apr 23)&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few things jump out immediately. There are more lines of test code than production code. There are more design documents than there are commits to implement them. And 193,000 lines of insertions for a 2,300-line Python CLI means the overwhelming majority of the project is documentation, methodology artifacts, and process records — not source code.&lt;/p&gt;

&lt;p&gt;That ratio — 84 to 1 — is the story.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three Things That Worked
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Cross-Session Memory Via Structured Artifacts
&lt;/h3&gt;

&lt;p&gt;This is the single most valuable pattern I discovered.&lt;/p&gt;

&lt;p&gt;AI coding assistants have a fundamental problem: they forget everything between sessions. Claude Code has auto-memory and CLAUDE.md, which help, but they are lossy. They capture vibes and preferences, not the state of a six-step pipeline with four open findings across three trackers.&lt;/p&gt;

&lt;p&gt;The pattern that solved this is what I call the &lt;strong&gt;Findings Tracker&lt;/strong&gt;. It is a markdown file — nothing fancy — that tracks every significant piece of work through a structured lifecycle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Open -&amp;gt; Investigating/Designing -&amp;gt; Blueprint Ready -&amp;gt; Planned -&amp;gt; Implementing -&amp;gt; Resolved -&amp;gt; Verified
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each tracker has a dependency map, resolution tasks with checkboxes, lifecycle timestamps, and links to every artifact produced along the way. When a new session starts, the AI reads the tracker and knows exactly where work was interrupted, what has been tried, and what comes next.&lt;/p&gt;

&lt;p&gt;Here is a real example. The "Context Compaction Resilience" tracker (&lt;code&gt;docs/findings/2026-03-01_1600_context_compaction_resilience_FINDINGS_TRACKER.md&lt;/code&gt;) tracked a problem where Claude Code's auto-compaction would destroy in-flight state during long sessions. It spawned 5 sub-findings across a 5-layer defense architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;F1&lt;/strong&gt;: No compact instructions in CLAUDE.md (solved: added a section the compactor reads)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;F2&lt;/strong&gt;: Context percentage data was siloed in the display (solved: bridged to a file)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;F3&lt;/strong&gt;: No last-chance backup before compaction (solved: PreCompact hook)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;F4&lt;/strong&gt;: No automated context threshold alerts (solved: Stop hook at 70% warn, 80% block)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;F5&lt;/strong&gt;: Context calculation was inaccurate (solved: fixed the math)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This work spanned 4 sessions. Without the tracker, each session would have started from scratch, rediscovering what had been tried. With it, every session picked up exactly where the last one left off.&lt;/p&gt;

&lt;p&gt;I have 47 of these trackers. They are the project's institutional memory. Not AI-generated summaries — structured records with dependency maps, resolution tasks, and lifecycle stages.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Design-First Pipeline (Even When Code Is Cheap)
&lt;/h3&gt;

&lt;p&gt;The most counterintuitive thing about building with AI: the faster code generation gets, the more design matters.&lt;/p&gt;

&lt;p&gt;When generating code costs effectively nothing, the temptation is to skip analysis and start implementing. In the first few sessions, that is exactly what happened. And it produced mediocre results. The AI would generate code that worked but was architecturally questionable, or that solved the wrong problem, or that solved the right problem in a way that made the next feature harder to build.&lt;/p&gt;

&lt;p&gt;The pipeline that emerged — and that Wrought now enforces — is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/research -&amp;gt; /design -&amp;gt; /blueprint -&amp;gt; /wrought-implement -&amp;gt; /forge-review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every feature starts with research (what exists, what are the constraints). Then a design analysis that evaluates multiple options with a structured tradeoff matrix. Then a blueprint with exact file specifications and acceptance criteria. Only then does implementation begin.&lt;/p&gt;

&lt;p&gt;Here is what this looks like in practice. When I needed to set up the development environment (Session 1), the &lt;code&gt;/design&lt;/code&gt; step evaluated 4 options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Option A: Single &lt;code&gt;.venv&lt;/code&gt; + uv dependency groups (scored 97/105)&lt;/li&gt;
&lt;li&gt;Option B: Multiple virtual environments (scored 68/105)&lt;/li&gt;
&lt;li&gt;Option C: Docker-only development (scored 51/105)&lt;/li&gt;
&lt;li&gt;Option D: System Python + pip (scored 41/105)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each option was scored across 7 weighted criteria. The analysis took maybe 10 minutes. The design document (&lt;code&gt;docs/design/2026-02-11_1848_dev_environment_strategy.md&lt;/code&gt;) is still the reference I consult when questions about the dev setup arise.&lt;/p&gt;

&lt;p&gt;Compare that to the alternative: asking AI to "set up a dev environment" and getting whatever the model's default recommendation happens to be that day. That might work once. It does not produce decisions you can explain or revisit 6 months later.&lt;/p&gt;

&lt;p&gt;60 design documents later, the pattern has proven itself. Design analysis is cheap with AI assistance. Rework from skipping it is expensive.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Self-Referential Testing (The Tool Reviews Itself)
&lt;/h3&gt;

&lt;p&gt;The most powerful quality mechanism was not unit tests (though there are 324 of those). It was using the tool on itself.&lt;/p&gt;

&lt;p&gt;Wrought's &lt;code&gt;/forge-review&lt;/code&gt; skill runs up to 5 parallel AI subagents — 4 run on every review, each specialized in a different dimension of code quality: algorithmic complexity, data structure selection, paradigm consistency, and computational efficiency. A 5th — flow integrator — spawns conditionally when the diff touches navigation-surface files (routes, nav items, wizards, redirects). When this skill was built, it was immediately used to review its own codebase.&lt;/p&gt;

&lt;p&gt;The results were humbling. The review found:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cli.py&lt;/code&gt; had grown to 936 lines with 6+ separate concerns (module cohesion violation)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;update_index&lt;/code&gt; was doing O(n) linear scans for upsert operations&lt;/li&gt;
&lt;li&gt;A module-level constant (&lt;code&gt;DOCS_DIRS&lt;/code&gt;) was a mutable list — a classic Python footgun&lt;/li&gt;
&lt;li&gt;A marker template was duplicated between &lt;code&gt;cmd_init&lt;/code&gt; and &lt;code&gt;cmd_upgrade&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All four findings were tracked, designed, blueprinted, planned, implemented, and verified through the pipeline. The code review system found debt in the codebase, and the pipeline system fixed it. Self-referential quality assurance.&lt;/p&gt;

&lt;p&gt;The review system had a blind spot. None of the four subagents checked flow integrity — how a change to a route, a nav item, or a wizard step affects paths through the product. That gap went unexamined until a post-ship navigation bug in a frontend project exposed it. The fix followed the same pipeline — finding, design, blueprint, implementation, review — and in Session 86 a fifth reviewer, flow integrator, was added. The review system found a gap in its own rubric, and the pipeline built the subagent to close it.&lt;/p&gt;

&lt;p&gt;The same pattern applied throughout development. The workflow enforcement engine that prevents skipping pipeline steps? It was built after the AI skipped a pipeline step in Session 41. The context compaction defense system? Built after auto-compaction destroyed an in-flight session. Every failure became a finding, every finding became a fix, and every fix was tested by continuing to use the tool.&lt;/p&gt;

&lt;p&gt;This is not just dogfooding. It is a continuous quality feedback loop where the product's own methodology catches and corrects its own defects.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three Things That Did Not Work
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Building for 72 Sessions Without a Single User
&lt;/h3&gt;

&lt;p&gt;This is the hardest thing to write, because it is the most important lesson.&lt;/p&gt;

&lt;p&gt;At Session 72, a competitive landscape analysis revealed that the market had shifted significantly during those first months of heads-down building. An open-source project in the same space had accumulated 50,000+ GitHub stars and 119 community-contributed skills. Anthropic had shipped native features (Agent Teams, Tasks, code review) that overlapped with planned Wrought capabilities. The market window had compressed from an estimated 12-18 months to 6-9 months.&lt;/p&gt;

&lt;p&gt;And Wrought had zero users. Zero revenue. Zero external validation.&lt;/p&gt;

&lt;p&gt;The go-to-market findings tracker (&lt;code&gt;docs/findings/2026-03-23_1430_wrought_go_to_market_strategy_FINDINGS_TRACKER.md&lt;/code&gt;) logged this as F1, severity: &lt;strong&gt;Critical&lt;/strong&gt;. It is the most important finding in the project.&lt;/p&gt;

&lt;p&gt;The numbers told the story. By Session 72, I had 31 findings trackers, 47 design documents, 43 blueprints — all focused inward. A sophisticated methodology producing sophisticated artifacts about a tool that no one outside the project had touched.&lt;/p&gt;

&lt;p&gt;The fix came late but came clearly: stop perfecting internals, start external validation. Consulting as a bridge to revenue. Content marketing (including this post) as a bridge to users. Plugin distribution as a bridge to developers. All three should have started by Session 20, not Session 72.&lt;/p&gt;

&lt;p&gt;That was the nadir. Sixteen sessions later — Session 88 — something finally broke the other way.&lt;/p&gt;

&lt;p&gt;A colleague who had been reviewing Wrought's material with a domain practitioner he'd worked with for years sent me the call recap. The practitioner had identified — unprompted, and repeatedly — a specific pain pattern: operators running internal workflow steps by hand, one at a time, with no systematic capture of what worked. The kind of repetitive, structured, correction-loop work that Wrought's pipelines are designed for. A follow-up conversation was offered. The conversation has not yet happened.&lt;/p&gt;

&lt;p&gt;This is not a closed user. It is not a purchase, not a contract, not a proof of product-market fit. It is one practitioner, in one vertical, in one conversation, identifying one pain that the tool might address. It is, however, the first external technical signal this project produced in 88 sessions — sixty more sessions than it should have taken to receive.&lt;/p&gt;

&lt;p&gt;The lesson still stands. The arithmetic of earlier distribution would have compounded that signal many times over.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Over-Engineering the Internals
&lt;/h3&gt;

&lt;p&gt;The pipeline skip enforcement saga is instructive.&lt;/p&gt;

&lt;p&gt;In Session 41, the AI agent skipped the &lt;code&gt;/plan&lt;/code&gt; step after &lt;code&gt;/blueprint&lt;/code&gt;. A legitimate process violation. The response? A 3-layer defense-in-depth architecture: skill language hardening, CLAUDE.md rule tightening, and a code-enforced stage gate.&lt;/p&gt;

&lt;p&gt;This was implemented, verified, and shipped. In Session 46, the agent added editorial commentary suggesting a skip might be acceptable. So the rules were further hardened with an explicit "no commentary" clause.&lt;/p&gt;

&lt;p&gt;In Session 62, the agent used &lt;code&gt;EnterPlanMode&lt;/code&gt; directly instead of the reactive pipeline. So a new rule (Rule 8) was added to CLAUDE.md, creating what was by then an 8-rule governance framework just for pipeline adherence.&lt;/p&gt;

&lt;p&gt;Three sessions of engineering, three findings tracked, three design documents — all to prevent an AI from occasionally suggesting a shortcut. The enforcement worked, but the effort was disproportionate. A simpler rule with a simpler enforcement mechanism would have captured 90% of the value at 20% of the cost.&lt;/p&gt;

&lt;p&gt;When your tool is good at tracking and fixing things, everything looks like something to track and fix. Not everything deserves the full pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Underestimating Distribution
&lt;/h3&gt;

&lt;p&gt;The product thesis — that AI coding tools need structured discipline, not just more features — is, I believe, correct. The execution thesis — that building a great tool is sufficient for distribution — was wrong.&lt;/p&gt;

&lt;p&gt;Having 15+ skills, 324 tests, a workflow enforcement engine, an up-to-5-agent parallel code review system, and a self-documenting methodology means nothing if the tool is not where developers look for tools. It is not on any marketplace. It is not a plugin. It has no content presence. The website exists but has no organic traffic.&lt;/p&gt;

&lt;p&gt;The Claude Code ecosystem has a plugin format. Anthropic has a marketplace (or will soon). Dev.to, Reddit, and Hacker News have active communities discussing exactly the problems Wrought addresses. None of these channels had been touched before Session 70.&lt;/p&gt;

&lt;p&gt;That shifted late in the game. By Session 75 the plugin had shipped — MIT-licensed, 42 files, installable with one command. By Session 79 a first blog post had landed. By Session 88 a three-week publishing cadence was running, and this post is its first entry. The direction is right. The timing was late by sixty-plus sessions.&lt;/p&gt;

&lt;p&gt;Distribution is not a post-launch activity. It is a pre-launch requirement. If I were starting over, the first 10 sessions would include publishing content and engaging with the community — even before the tool was ready. Feedback from real developers would have shaped the product better than 60 design documents written in isolation.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Category Question (Layer 4)
&lt;/h2&gt;

&lt;p&gt;By April 2026, the AI coding tool landscape has taken shape. Five layers are visible; four are competed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Layer 1&lt;/strong&gt; — IDE and editor integrations (Cursor, Windsurf, Copilot inside VS Code).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 2&lt;/strong&gt; — chat and client UIs (Ona's new two-panel interface, Claude Code's terminal, ChatGPT Codex).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 3&lt;/strong&gt; — agent runtimes and infrastructure (Ona Cloud with warm pools and Project Veto sandboxing; Anthropic's Managed Agents, shipped April 2026; LangChain's Deep Agents; Anthropic's native Code Review; Nous Research's Hermes Agent).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 4&lt;/strong&gt; — methodology, governance, process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 5&lt;/strong&gt; — tools and skills (skill marketplaces, community-contributed agents, plugin packs).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Layer 4 is empty.&lt;/p&gt;

&lt;p&gt;There is no major player in the methodology layer. The closest public benchmark is Ona's six-criteria auto-approve-low-risk-PR mechanism — a &lt;strong&gt;74% reduction in time-to-first-approval and a 3× increase in deployment rate&lt;/strong&gt;. That result is a strong validation of process discipline as a lever, but it is rule-based automation, not methodology enforcement. It proves that a simple rubric can compound into measurable operational gains. It does not build the process layer.&lt;/p&gt;

&lt;p&gt;Wrought is a bet on Layer 4. The 47 findings trackers, 60 design documents, 55 blueprints, and 23 forge-reviews are not product artifacts. They are methodology artifacts. The 84-to-1 ratio between lines of documentation and lines of source code is not a sign of over-engineering. It is what the methodology layer looks like when implemented.&lt;/p&gt;

&lt;p&gt;The bet is that when everyone has AI coding assistants and the L1–L3 differentiators flatten, the variable that remains is whether teams have a process their assistant follows. That is Layer 4. Wrought claims it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Methodology: A Brief Overview
&lt;/h2&gt;

&lt;p&gt;For those interested in the process itself, here is how Wrought's pipeline works. You can adopt this approach with or without the tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every significant task starts with a Finding.&lt;/strong&gt; A finding is a gap, defect, or drift — something that needs attention. It gets logged in a Findings Tracker with severity, type, and a proposed resolution path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two pipelines handle two types of work:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reactive&lt;/strong&gt; (something is broken): Incident -&amp;gt; Investigate -&amp;gt; RCA/Bugfix -&amp;gt; Implement Fix -&amp;gt; Code Review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proactive&lt;/strong&gt; (something needs building): Research -&amp;gt; Design -&amp;gt; Blueprint -&amp;gt; Implement -&amp;gt; Code Review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Design before code, always.&lt;/strong&gt; The &lt;code&gt;/design&lt;/code&gt; step produces a structured analysis with multiple options, weighted criteria, and a recommendation. It takes 10-30 minutes with AI assistance and saves hours of rework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blueprints specify acceptance criteria.&lt;/strong&gt; Before implementation begins, there is a document listing exact file changes, acceptance criteria, and test expectations. The AI implements against this spec, not against a vague prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured artifacts are cross-session memory.&lt;/strong&gt; Every step produces a dated, typed document in a known location. When a new session starts, the AI can read these artifacts and resume exactly where work stopped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code review closes the loop.&lt;/strong&gt; After implementation, up to 5 specialized AI subagents review the changes: 4 run on every review — algorithmic complexity, data structure selection, paradigm consistency, and computational efficiency; a 5th (flow integrator) spawns when the diff touches navigation-surface files such as routes, nav items, wizards, and redirects.&lt;/p&gt;

&lt;p&gt;A typical feature takes three sessions and 3-6 hours: finding and research, then design and blueprint, then implementation and review. Each step produces a dated artifact. The methodology works. The artifacts prove it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Happens Next
&lt;/h2&gt;

&lt;p&gt;Three things are now happening in parallel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consulting.&lt;/strong&gt; The methodology that built Wrought is now offered as a service: production bug fixes with root cause analysis, feature architecture and implementation, codebase reviews, and Claude Code workflow setup. The pipeline works on any codebase, not just Wrought.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plugin distribution.&lt;/strong&gt; Wrought's 15+ skills, review agents, and hooks are packaged as an open-source Claude Code plugin — 42 files, MIT licensed, built in Session 75. Public marketplace distribution is scheduled to coincide with the V2.0 launch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content.&lt;/strong&gt; This post is the first of a three-week publishing calendar that will land four long-form pieces: this retrospective, a benchmark response to Ona's 74%/3× auto-approve results (around 2026-04-25), a deep-dive on cross-session memory patterns (2026-04-29), and a piece on why design-first matters even more when AI makes code cheap (2026-05-08). Beyond that: structured incident response workflows, solo-founder retrospectives, and how the 88-session methodology maps onto team settings.&lt;/p&gt;

&lt;p&gt;Wrought V1.0 is a local CLI tool. V2.0 will be an MCP server — a hosted service that any AI coding assistant can connect to over HTTP. The architecture is designed, the skills are built, and the distribution strategy is now in motion.&lt;/p&gt;

&lt;p&gt;If the methodology interests you, there are two paths:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Try the approach.&lt;/strong&gt; The Findings Tracker pattern and design-first pipeline work with any AI coding tool. Start by creating a markdown file that tracks your significant tasks through structured stages. You do not need Wrought to benefit from the process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Follow the build.&lt;/strong&gt; I will be publishing weekly at &lt;a href="https://fluxforge.ai" rel="noopener noreferrer"&gt;fluxforge.ai/blog&lt;/a&gt; and cross-posting to Dev.to and LinkedIn. The next piece covers cross-session memory in detail — the specific patterns that make AI assistants useful across long-running projects.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The 88 sessions taught me that AI does not replace engineering discipline. It amplifies whatever discipline you bring. Bring structure, get structured results. Bring chaos, get faster chaos.&lt;/p&gt;

&lt;p&gt;Wrought is the structure I built. Now it is time to find out if anyone else needs it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://fluxforge.ai/blog/88-sessions-building-ai-tool-with-ai" rel="noopener noreferrer"&gt;fluxforge.ai/blog&lt;/a&gt;. Find me on &lt;a href="https://linkedin.com/in/johangenis" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or follow the build at &lt;a href="https://fluxforge.ai" rel="noopener noreferrer"&gt;fluxforge.ai&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>I Built a Real-Time Artemis II 3D Tracker in One Session — Here's the Engineering Pipeline That Made It Possible</title>
      <dc:creator>Wrought</dc:creator>
      <pubDate>Fri, 03 Apr 2026 22:14:47 +0000</pubDate>
      <link>https://dev.to/usewrought/i-built-a-real-time-artemis-ii-3d-tracker-in-one-session-heres-the-engineering-pipeline-that-1h11</link>
      <guid>https://dev.to/usewrought/i-built-a-real-time-artemis-ii-3d-tracker-in-one-session-heres-the-engineering-pipeline-that-1h11</guid>
      <description>&lt;p&gt;On April 1, 2026, four astronauts launched aboard Orion on Artemis II — humanity's first crewed voyage beyond low Earth orbit since Apollo 17 in 1972.&lt;/p&gt;

&lt;p&gt;I wanted to track it. Not on a static NASA page. Not on someone else's stream overlay. I wanted an interactive 3D visualization with real telemetry, in my browser, that I built myself.&lt;/p&gt;

&lt;p&gt;Six hours - one afternoon - later, I had one. Live at &lt;a href="https://artemis-tracker-murex.vercel.app" rel="noopener noreferrer"&gt;artemis-tracker-murex.vercel.app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh75apxj5r0uvek29gm1d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh75apxj5r0uvek29gm1d.png" alt="Plan view of the Artemis II tracker showing the full free-return trajectory from Earth to Moon" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;47 files. ~8,000 lines of TypeScript. 15 unit tests. 5 serverless API proxies. Degree-8 Lagrange interpolation at 60fps. An AI mission chatbot. Deep Space Network status. Deployed on Vercel.&lt;/p&gt;

&lt;p&gt;Built in a single session using &lt;a href="https://claude.ai/code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; with a structured engineering pipeline called &lt;a href="https://wrought-web.vercel.app" rel="noopener noreferrer"&gt;Wrought&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This post isn't about "look what AI can do." It's about what happens when you give an AI agent &lt;strong&gt;engineering discipline&lt;/strong&gt; instead of just a prompt.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the App Does
&lt;/h2&gt;

&lt;p&gt;ARTEMIS is a real-time 3D mission tracker that combines three NASA data sources into one interactive visualization:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OEM Ephemeris Files&lt;/strong&gt; from NASA's AROW system — actual spacecraft state vectors (position and velocity) at 4-minute intervals, interpolated to 60fps using Lagrange polynomials&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep Space Network XML&lt;/strong&gt; — live antenna status from Goldstone, Canberra, and Madrid&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JPL Horizons API&lt;/strong&gt; — Moon position in the same J2000 reference frame as the spacecraft data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result: you can watch Orion move along its trajectory in real time, see its speed, distance from Earth, distance to the Moon, and which ground stations are currently talking to it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzx3ymrhsh2vo20jz26i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzx3ymrhsh2vo20jz26i.png" alt="Earth view with Orion's trajectory arcing toward the Moon" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's also an AI chatbot powered by Gemini 2.5 Flash. Common questions like "How long is the mission?" resolve instantly via client-side quick-answer buttons — no API call needed. Free-text questions hit a curated knowledge base through a system prompt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Finox52pop3k388vsnv39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Finox52pop3k388vsnv39.png" alt="AI mission chatbot with quick-answer buttons" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem with "Vibe Coding"
&lt;/h2&gt;

&lt;p&gt;Every week, someone posts "I built X in 20 minutes with AI." And every week, the comments are the same: &lt;em&gt;Does it have tests? How's the error handling? What happens when the API is down? Did you actually read the code?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;These are fair questions. The dirty secret of AI-assisted speed runs is that most of them produce code that works for a demo and breaks in production. The AI generates plausible code. You accept it. Ship it. Move on.&lt;/p&gt;

&lt;p&gt;The issue isn't speed — it's the absence of process. No design review. No architecture decision records. No code review. No root cause analysis when something goes wrong. Just "prompt → code → deploy → pray."&lt;/p&gt;

&lt;p&gt;I wanted to show there's a better way.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Pipeline
&lt;/h2&gt;

&lt;p&gt;Wrought is a structured engineering pipeline I built for Claude Code. It enforces a specific sequence of skills for every significant piece of work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finding → Research → Design → Blueprint → Implementation → Code Review&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each stage produces a documented artifact. Each artifact feeds the next stage. The AI agent can't skip ahead — the pipeline is the process.&lt;/p&gt;

&lt;p&gt;Here's how it played out for ARTEMIS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 1: Finding
&lt;/h3&gt;

&lt;p&gt;Every task starts with a &lt;strong&gt;Findings Tracker&lt;/strong&gt; — a structured document that captures what you're building, why, and tracks it through every stage.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Finding: Interactive Artemis II Live Visualization
Type: Gap
Severity: High
Rationale: Artemis II launched 2026-04-01. No unified interactive tracker exists.
  NASA data is scattered across OEM files, XML feeds, and on-demand APIs.
  Mission window is ~10 days — time-sensitive opportunity.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This isn't bureaucracy. It's cross-session memory. If I stop working and come back tomorrow, the tracker tells me exactly where I left off and what decisions were already made.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 2: Research
&lt;/h3&gt;

&lt;p&gt;Before building a chatbot, I needed to decide &lt;em&gt;how&lt;/em&gt; to build it. The research skill evaluated three approaches:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Pros&lt;/th&gt;
&lt;th&gt;Cons&lt;/th&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FAQ Bot (pattern matching)&lt;/td&gt;
&lt;td&gt;Zero cost, instant&lt;/td&gt;
&lt;td&gt;Can't handle novel questions&lt;/td&gt;
&lt;td&gt;Too rigid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;System Prompt + LLM&lt;/td&gt;
&lt;td&gt;Simple, full knowledge in context&lt;/td&gt;
&lt;td&gt;Per-query API cost&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Selected&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAG (vector search)&lt;/td&gt;
&lt;td&gt;Scales to large corpora&lt;/td&gt;
&lt;td&gt;Massive overengineering for ~3K tokens of facts&lt;/td&gt;
&lt;td&gt;Overkill&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The entire Artemis II knowledge base — mission timeline, crew bios, spacecraft specs, orbital mechanics — fits in about 3,000 tokens. That's smaller than this blog post. Building a RAG pipeline with embeddings, a vector database, and chunking strategy for 3,000 tokens of content would have been absurd.&lt;/p&gt;

&lt;p&gt;The research also surfaced that Gemini 2.5 Flash has a genuinely free tier (15 requests per minute, 1,000 per day, no credit card). Claude would have been higher quality, but the $0 budget constraint made Gemini the pragmatic choice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 3: Design
&lt;/h3&gt;

&lt;p&gt;The design stage evaluated four architecture options with weighted scoring:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Stack&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Why Not&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;A: Vite + R3F&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vite, React, React Three Fiber, Vercel&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;8.6/10&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Selected&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B: Vite + 2D&lt;/td&gt;
&lt;td&gt;Vite, React, Canvas 2D&lt;/td&gt;
&lt;td&gt;6.2/10&lt;/td&gt;
&lt;td&gt;No depth perception for 3D trajectory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C: Next.js + R3F&lt;/td&gt;
&lt;td&gt;Next.js, React, R3F&lt;/td&gt;
&lt;td&gt;7.8/10&lt;/td&gt;
&lt;td&gt;SSR adds hydration complexity for a pure client app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D: Vanilla Three.js&lt;/td&gt;
&lt;td&gt;Three.js, no framework&lt;/td&gt;
&lt;td&gt;5.4/10&lt;/td&gt;
&lt;td&gt;Manual state management, no HMR for scene&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The design document also specified the data pipeline for all four NASA sources, the coordinate system (J2000 Earth-centered, 1 unit = 10,000 km), the HUD layout, and camera presets.&lt;/p&gt;

&lt;p&gt;Key insight: &lt;strong&gt;Next.js was actively wrong for this project.&lt;/strong&gt; There's no content to server-render. No SEO to optimize. No dynamic routes. It's a WebGL canvas that talks to APIs. Vite gives you sub-second HMR and a smaller bundle without the hydration tax.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 4: Blueprint
&lt;/h3&gt;

&lt;p&gt;The blueprint translated the design into an implementation spec: 48 files across 8 phases, with acceptance criteria for each phase. It specified the exact file structure, the interfaces for the OEM parser and interpolator, the Zustand store shape, and the serverless proxy signatures.&lt;/p&gt;

&lt;p&gt;This is where the pipeline pays dividends. By the time implementation starts, the AI agent has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A clear architecture to follow (not just a vague prompt)&lt;/li&gt;
&lt;li&gt;Specific interfaces to implement (not ad-hoc decisions mid-code)&lt;/li&gt;
&lt;li&gt;An explicit scope boundary (what to build AND what not to build)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Stage 5: Implementation
&lt;/h3&gt;

&lt;p&gt;One iteration. All 15 tests passing. Build succeeds. Deployed to Vercel.&lt;/p&gt;

&lt;p&gt;That's not AI magic — that's the upstream work paying off. When the design document specifies "Zustand store with scalar selectors to avoid re-render storms" and the blueprint defines the exact store interface, the implementation becomes an execution problem, not a design problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 6: Code Review (This Is Where It Gets Interesting)
&lt;/h3&gt;

&lt;p&gt;After implementation, the pipeline runs a &lt;strong&gt;multi-agent code review&lt;/strong&gt; called &lt;code&gt;/forge-review&lt;/code&gt;. Four specialized agents review the code in parallel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Complexity Analyst&lt;/strong&gt; — algorithmic time/space complexity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paradigm Enforcer&lt;/strong&gt; — consistency within files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficiency Sentinel&lt;/strong&gt; — performance anti-patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Structure Reviewer&lt;/strong&gt; — access patterns vs. data structure selection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first review found &lt;strong&gt;5 critical issues&lt;/strong&gt;:&lt;/p&gt;

&lt;h4&gt;
  
  
  Critical 1: 60fps Re-Render Storm
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The HUD reads spacecraft state as an object from Zustand.
Zustand creates a new object reference every update.
React re-renders all HUD components every frame.
At 60fps, that's 60 full React reconciliation passes per second.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fix: DataDriver writes position to a shared &lt;code&gt;useRef&lt;/code&gt; for the 3D scene (zero React overhead), and throttles Zustand store updates to 4Hz for the HUD. Each HUD card uses a scalar selector (&lt;code&gt;state =&amp;gt; state.spacecraft.speed&lt;/code&gt;) instead of selecting the whole object.&lt;/p&gt;

&lt;h4&gt;
  
  
  Critical 2: O(n) Linear Scan in Hot Path
&lt;/h4&gt;

&lt;p&gt;The Lagrange interpolator was doing a linear search through all state vectors to find the nearest data point. With a 3,232-line OEM file at 60fps, that's ~194,000 comparisons per second.&lt;/p&gt;

&lt;p&gt;The fix: binary search. O(log n). The data is already sorted by epoch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Binary search for closest data point&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;vectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;hi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;hi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vectors&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;mid&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;epochMs&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nx"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Critical 3: Per-Frame Memory Allocations
&lt;/h4&gt;

&lt;p&gt;The interpolator was calling &lt;code&gt;.slice()&lt;/code&gt; and &lt;code&gt;.map()&lt;/code&gt; inside the hot loop — allocating new arrays every frame. At 60fps, that's 120+ garbage-collected arrays per second.&lt;/p&gt;

&lt;p&gt;The fix: module-level reusable buffer, direct array indexing instead of &lt;code&gt;.map()&lt;/code&gt;, and accepting &lt;code&gt;epochMs&lt;/code&gt; as a number instead of creating Date objects.&lt;/p&gt;

&lt;h4&gt;
  
  
  Critical 4: Stale Closure in useChat
&lt;/h4&gt;

&lt;p&gt;The chat hook captured &lt;code&gt;messages&lt;/code&gt; in a closure at mount time. When a user sent a second message, the API call used the stale initial array — losing the conversation history.&lt;/p&gt;

&lt;p&gt;The fix: &lt;code&gt;useRef&lt;/code&gt; tracking the latest messages array, with &lt;code&gt;useCallback&lt;/code&gt; reading from the ref instead of the closure.&lt;/p&gt;

&lt;h4&gt;
  
  
  Critical 5: StrictMode Double-Mount Breaking Polls
&lt;/h4&gt;

&lt;p&gt;A &lt;code&gt;fetchedRef&lt;/code&gt; guard prevented re-fetching in StrictMode's double-mount cycle, but also broke cleanup — orphaning intervals and timeouts.&lt;/p&gt;

&lt;p&gt;The fix: remove the ref guard entirely. Use &lt;code&gt;AbortController&lt;/code&gt; for cancellation. Clean up all intervals and timeouts in the effect's return function.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Re-Review
&lt;/h3&gt;

&lt;p&gt;After fixing all five criticals through an RCA (root cause analysis) cycle, the pipeline ran a second code review:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;th&gt;First Review&lt;/th&gt;
&lt;th&gt;Re-Review&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Warning&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Suggestion&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The two remaining warnings were both benign edge cases (a module-level buffer that's safe in single-threaded browsers, and a ref timing gap that's correctly compensated for). Zero criticals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is the pipeline's value proposition.&lt;/strong&gt; Without the review stage, those five bugs would have shipped. The linear scan and re-render storm would have made the app noticeably janky on mobile. The stale closure would have broken multi-turn chat. And you'd never know until users complained.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Source files&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lines of code&lt;/td&gt;
&lt;td&gt;~8,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit tests&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implementation iterations&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Critical bugs caught&lt;/td&gt;
&lt;td&gt;5 (all fixed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build time&lt;/td&gt;
&lt;td&gt;~2 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bundle size&lt;/td&gt;
&lt;td&gt;149KB app + 1.1MB Three.js/R3F&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NASA data sources&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serverless proxies&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pipeline artifacts&lt;/td&gt;
&lt;td&gt;12 documents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production deploys&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Upstream design eliminates downstream churn.&lt;/strong&gt; The implementation completed in one iteration because the blueprint answered most design questions in advance. "What shape is the Zustand store?" isn't a question you want the AI deciding mid-implementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Code review catches real bugs, not style nits.&lt;/strong&gt; The forge-review found a 60fps re-render storm and an O(n) hot path — genuine performance issues that would have shipped silently without the review stage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. RAG is the new microservices.&lt;/strong&gt; Not everything needs it. A 3,000-token knowledge base doesn't need embeddings, vector search, and a retrieval pipeline. System prompt stuffing is boring and effective.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The audit trail is the product.&lt;/strong&gt; Every decision — why Vite over Next.js, why Gemini over Claude, why Lagrange over Runge-Kutta — is documented in the pipeline artifacts. Six months from now, when someone asks "why did you build it this way?", the answer exists in the design doc, not in someone's memory.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live app&lt;/strong&gt;: &lt;a href="https://artemis-tracker-murex.vercel.app" rel="noopener noreferrer"&gt;artemis-tracker-murex.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source code&lt;/strong&gt;: &lt;a href="https://github.com/fluxforgeai/ARTEMIS" rel="noopener noreferrer"&gt;github.com/fluxforgeai/ARTEMIS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrought pipeline&lt;/strong&gt;: &lt;a href="https://wrought-web.vercel.app" rel="noopener noreferrer"&gt;wrought-web.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full pipeline artifacts — finding, research, design, blueprint, reviews, RCAs — are all in the repo's &lt;code&gt;docs/&lt;/code&gt; directory. The process is as open as the code.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with &lt;a href="https://claude.ai/code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; + &lt;a href="https://wrought-web.vercel.app" rel="noopener noreferrer"&gt;Wrought&lt;/a&gt; by &lt;a href="https://fluxforge.ai" rel="noopener noreferrer"&gt;FluxForge AI&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>space</category>
      <category>react</category>
    </item>
  </channel>
</rss>
