<?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: davidvk89</title>
    <description>The latest articles on DEV Community by davidvk89 (@davidvk89).</description>
    <link>https://dev.to/davidvk89</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1014488%2Fc7126a8d-bc3f-4eb5-9deb-7831cb5a5744.jpeg</url>
      <title>DEV Community: davidvk89</title>
      <link>https://dev.to/davidvk89</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/davidvk89"/>
    <language>en</language>
    <item>
      <title>From Vibes to Project Memory</title>
      <dc:creator>davidvk89</dc:creator>
      <pubDate>Tue, 30 Jun 2026 14:06:11 +0000</pubDate>
      <link>https://dev.to/davidvk89/from-vibes-to-project-memory-2poe</link>
      <guid>https://dev.to/davidvk89/from-vibes-to-project-memory-2poe</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxyw7zca33pooectauem7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxyw7zca33pooectauem7.png" alt=" " width="654" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is the full set published.&lt;/p&gt;

&lt;p&gt;I did not write these articles because I think I found the final answer to AI-assisted development.&lt;/p&gt;

&lt;p&gt;I wrote them because I spent one serious week building with AI, ran into context drift almost immediately, and found a small workflow that made the project feel less fragile.&lt;/p&gt;

&lt;p&gt;The three pieces ended up covering the same idea from different angles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vibe Coding Done Right&lt;/strong&gt; — the workflow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation as Project Memory in AI-Assisted Development&lt;/strong&gt; — the memory system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Defensive AI Engineering&lt;/strong&gt; — the objections and limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they trace the thing I was really trying to do:&lt;/p&gt;

&lt;p&gt;move from vibes to memory.&lt;/p&gt;

&lt;p&gt;From a messy human experience with AI tools into written documentation, bounded contracts, and a workflow I could actually inspect.&lt;/p&gt;

&lt;p&gt;The supporting GitHub repo is there too, not as a framework or package, but as the artifact trail from the case study.&lt;/p&gt;

&lt;p&gt;The main thing I learned is still simple:&lt;/p&gt;

&lt;p&gt;AI-assisted development is not only a coding problem.&lt;/p&gt;

&lt;p&gt;It is a context management problem.&lt;/p&gt;

&lt;p&gt;For me, the useful pattern became:&lt;/p&gt;

&lt;p&gt;Explore in conversation.&lt;br&gt;&lt;br&gt;
Build from a contract.&lt;br&gt;&lt;br&gt;
Preserve the result in documentation.&lt;br&gt;&lt;br&gt;
Reuse that documentation as context for the next task.&lt;/p&gt;

&lt;p&gt;The result was not perfect AI coding.&lt;/p&gt;

&lt;p&gt;The result was reviewable AI coding.&lt;/p&gt;

&lt;p&gt;That was the part worth writing down.&lt;/p&gt;

&lt;p&gt;I’m going to leave the series there. It was a one-week field report, not a manifesto. Maybe I will come back to the ideas later after using the workflow more, maybe I will not.&lt;/p&gt;

&lt;p&gt;For now, it exists. That was the goal.&lt;/p&gt;

&lt;p&gt;Thank you to everyone who read, skimmed, questioned, or followed along.&lt;/p&gt;

&lt;p&gt;And if you made it all the way through the series: genuinely, thank you for making it this far.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Defensive AI Engineering</title>
      <dc:creator>davidvk89</dc:creator>
      <pubDate>Tue, 30 Jun 2026 13:43:50 +0000</pubDate>
      <link>https://dev.to/davidvk89/defensive-ai-engineering-2m27</link>
      <guid>https://dev.to/davidvk89/defensive-ai-engineering-2m27</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3ok05w6mogf66sl5namp.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3ok05w6mogf66sl5namp.png" alt=" " width="654" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you tell developers that my solution to AI context drift was keeping four live markdown files updated alongside every code change, the reaction is entirely predictable:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“You’ve just traded code debt for documentation debt. This kills velocity.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or, from the IDE-purists:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Why are you manually passing files around when native agents can scrape your whole repo?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These are fair critiques.&lt;/p&gt;

&lt;p&gt;If you treat documentation as a post-work chore or rely blindly on an autonomous agent to manage its own sandbox, the system collapses under its own weight.&lt;/p&gt;

&lt;p&gt;But the TB / CC / FR loop — Task Brief / Codex Contract / Final Review — is not a bureaucratic process. It is a defensive pattern.&lt;/p&gt;

&lt;p&gt;Coming from a background in cybersecurity, my default mode of operating is isolation, strict boundary enforcement, and assuming the agent will misbehave if given loose permissions.&lt;/p&gt;

&lt;p&gt;This was the solution that fit my project, my tools, and my risk tolerance. The useful part is not that every developer should copy my exact setup. The useful part is that the pattern can change shape depending on the team, tooling, and codebase.&lt;/p&gt;

&lt;p&gt;Here is how the project memory loop holds up against the four harshest criticisms of AI-assisted engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The "Documentation Tax" Can Be Shifted, Not Removed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Critique:&lt;/strong&gt; Maintaining four separate documentation files — &lt;code&gt;DEV_ARCHITECTURE.md&lt;/code&gt;, &lt;code&gt;DEV_DATA_SHAPES.md&lt;/code&gt;, &lt;code&gt;DEV_API_CONTRACTS.md&lt;/code&gt;, and &lt;code&gt;TECHNICAL_DEBT.md&lt;/code&gt; — for every meaningful code change creates a bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Reality:&lt;/strong&gt; The human developer does not need to write most of the documentation manually.&lt;/p&gt;

&lt;p&gt;In this workflow, documentation is a required transactional output of the implementation contract. Because the context memory is defined during the Task Brief and refined into a bounded Codex Contract, the coding agent is the one tasked with updating the relevant markdown files.&lt;/p&gt;

&lt;p&gt;The human’s job is to act as editor and gatekeeper during Final Review, verifying the AI’s reported documentation updates against the actual code changes.&lt;/p&gt;

&lt;p&gt;That still costs attention. It is not free.&lt;/p&gt;

&lt;p&gt;But the cost moves from “remember everything later and write documentation someday” to “review the documentation while the task context is still fresh.”&lt;/p&gt;

&lt;p&gt;You are not eliminating the documentation tax. You are turning it into a reviewable part of the implementation transaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Case for Separated Context
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Critique:&lt;/strong&gt; Manually passing project files into an assistant or switching between an assistant and a coding agent feels primitive when IDE-integrated tools can auto-index a codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Reality:&lt;/strong&gt; Full-repository context is convenient, but convenience is not the same thing as control.&lt;/p&gt;

&lt;p&gt;The important separation in this workflow is not physical air-gapping. It is memory separation.&lt;/p&gt;

&lt;p&gt;The assistant can operate from broader project memory: architecture, tradeoffs, future direction, unresolved concerns, and the reasoning behind the current shape of the system.&lt;/p&gt;

&lt;p&gt;The coding agent should not automatically receive all of that.&lt;/p&gt;

&lt;p&gt;The coding agent should receive the bounded implementation slice: what to build, what to preserve, what not to touch, which files are likely involved, what documentation must be updated, and how to report back.&lt;/p&gt;

&lt;p&gt;That is the purpose of the Codex Contract.&lt;/p&gt;

&lt;p&gt;The CC acts as a translation layer between broad architectural thinking and narrow implementation work. It lets the assistant help preserve strategy and future direction without creating a route for the coding client to start building future ideas too early.&lt;/p&gt;

&lt;p&gt;A planning conversation can contain useful context that is dangerous implementation context.&lt;/p&gt;

&lt;p&gt;“This might become a system later” is useful for architectural memory.&lt;/p&gt;

&lt;p&gt;It is not useful as permission for the coding agent to start building that system now.&lt;/p&gt;

&lt;p&gt;By keeping assistant memory and coding-agent context separate, the workflow forces intentionality. The coding agent only receives the implementation details and documentation updates that belong in the current task.&lt;/p&gt;

&lt;p&gt;That keeps it in executor mode rather than co-architect-with-selective-memory mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Grading the Homework: Mitigating AI Hallucinations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Critique:&lt;/strong&gt; You cannot trust an AI to verify its own work or accurately report that it updated the documentation correctly. LLMs are notoriously prone to sycophancy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Reality:&lt;/strong&gt; Correct.&lt;/p&gt;

&lt;p&gt;LLMs will absolutely grade their own homework poorly if left unsupervised.&lt;/p&gt;

&lt;p&gt;That is exactly why the Final Review stage relies on strict human acceptance and manual testing.&lt;/p&gt;

&lt;p&gt;The assistant can assist in reviewing the coding agent’s return, but it does not replace human verification. The human remains the ultimate source of truth for scope and risk.&lt;/p&gt;

&lt;p&gt;Furthermore, every software engineering methodology has a single point of failure: the human developer.&lt;/p&gt;

&lt;p&gt;If a human engineer experiences a lapse in judgment, a critical oversight, or a medical emergency, the system breaks.&lt;/p&gt;

&lt;p&gt;The loop does not assume the AI is perfect.&lt;/p&gt;

&lt;p&gt;It assumes the AI is volatile, and creates a rhythm to catch mistakes before they are born.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The Scale Bottleneck: Moving Beyond the Prototype
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Critique:&lt;/strong&gt; This works for a solo developer handling local JSON persistence. On an enterprise team with dozens of developers working on different branches, simultaneously modifying core markdown files will cause catastrophic Git merge conflicts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Reality:&lt;/strong&gt; This is a completely accurate limitation of the manual prototype.&lt;/p&gt;

&lt;p&gt;For a solo project, dragging files into a browser provides a simple, zero-cost map.&lt;/p&gt;

&lt;p&gt;For a sprawling, multi-developer enterprise repository, the method would need to evolve from manual file handling to an automated tooling layer.&lt;/p&gt;

&lt;p&gt;The architectural blueprint to solve this likely requires two next-generation components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Memory Controller:&lt;/strong&gt; a system utility that programmatically parses, slices, and modularizes the core documentation files based on directory domains, feeding the LLM a compressed context packet rather than the entire repo documentation history.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Semantic Diff Validator:&lt;/strong&gt; a verification gate that compares the old documentation state against the new state, isolating the structural variance and presenting the human reviewer with a focused slice to approve or reject during pull requests.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Until better tooling exists around this kind of workflow, teams will have to adapt to these branching realities.&lt;/p&gt;

&lt;p&gt;But the underlying principle remains useful:&lt;/p&gt;

&lt;p&gt;AI-assisted development becomes safer when project memory is explicit, implementation context is bounded, and human review remains the final gate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Defensive AI engineering means accepting a simple truth:&lt;/p&gt;

&lt;p&gt;AI coding agents are incredibly fast, but they are strong enough to cause damage before lunch if left unconstrained.&lt;/p&gt;

&lt;p&gt;The TB / CC / FR loop is not about slowing down development for the sake of process.&lt;/p&gt;

&lt;p&gt;It is about establishing reviewable guardrails so that velocity does not turn into chaotic drift into the fog.&lt;/p&gt;

&lt;p&gt;By treating documentation as a live transaction, keeping assistant memory separate from coding-agent context, and forcing human sign-off, you keep the human firmly in control of the codebase.&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft3gcypv8jkegpy8wmae4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft3gcypv8jkegpy8wmae4.png" alt=" " width="654" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Documentation as Project Memory in AI-Assisted Development</title>
      <dc:creator>davidvk89</dc:creator>
      <pubDate>Tue, 30 Jun 2026 13:26:14 +0000</pubDate>
      <link>https://dev.to/davidvk89/documentation-as-project-memory-in-ai-assisted-development-2699</link>
      <guid>https://dev.to/davidvk89/documentation-as-project-memory-in-ai-assisted-development-2699</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffgkfkvr5mxsz50y8w2oj.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffgkfkvr5mxsz50y8w2oj.png" alt=" " width="654" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A practical case study in keeping AI-generated software bounded, reviewable, and maintainable.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;AI-assisted development has a context problem. Coding agents can implement quickly, but they depend heavily on the context they receive. A long planning conversation is often poor implementation context: it may contain rejected options, future ideas, shorthand, loose assumptions, and half-decisions.&lt;/p&gt;

&lt;p&gt;For a human, that is normal design exploration. For a coding agent, it can become accidental permission.&lt;/p&gt;

&lt;p&gt;This case study describes a workflow for reducing that risk by treating documentation as project memory. The implementation was tested under a strict constraint: every code change in the project went through the AI-assisted workflow. I did not write code directly, even when it would have been faster.&lt;/p&gt;

&lt;p&gt;The core pattern is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Explore in conversation. Build from a contract. Preserve the result in documentation. Reuse that documentation as context for the next task.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The case study is intended to be read alongside the project documents and three consecutive Codex Contracts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DEV_ARCHITECTURE.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DEV_DATA_SHAPES.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DEV_API_CONTRACTS.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TECHNICAL_DEBT.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CP-0011.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CP-0012.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CP-0013.txt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, these documents show the method operating across a short development sequence rather than a single isolated task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem: context decay
&lt;/h2&gt;

&lt;p&gt;The practical risk in AI-assisted development is context decay: decisions are made faster than they are preserved.&lt;/p&gt;

&lt;p&gt;Architecture, API behavior, data shapes, validation rules, temporary compromises, and deferred work can disappear into chat history or human memory. Once that happens, later tasks start from incomplete or stale context.&lt;/p&gt;

&lt;p&gt;The solution in this implementation was to make documentation part of the development transaction.&lt;/p&gt;

&lt;p&gt;Documentation is not written “after the work.” It is a required output of the work.&lt;/p&gt;

&lt;p&gt;If a task changes architecture, the architecture document changes. If it changes an API response, the API contract changes. If it changes stored data, the data shape document changes. If it exposes a problem that should not be fixed yet, the technical debt document changes.&lt;/p&gt;

&lt;p&gt;In this project, the main memory files are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DEV_ARCHITECTURE.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DEV_DATA_SHAPES.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DEV_API_CONTRACTS.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TECHNICAL_DEBT.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These files are operational project memory. They preserve decisions, constrain future work, and provide current context for later AI-assisted tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation: TB / CC / FR
&lt;/h2&gt;

&lt;p&gt;The workflow uses three stages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Task Brief:&lt;/strong&gt; explore the problem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex Contract:&lt;/strong&gt; define the bounded implementation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Final Review:&lt;/strong&gt; check the result and update project memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The control model is two-way review: the human reviews the AI’s output, and the assistant reviews the human’s instructions for ambiguity, scope creep, and loose language. The human decides when the contract is clear enough to hand off, and when the result is acceptable.&lt;/p&gt;

&lt;p&gt;In practice:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;explore → contract → review → implement → test → review result → patch code or docs → continue from updated documentation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Task Brief
&lt;/h2&gt;

&lt;p&gt;The Task Brief is where the task is explored before it becomes implementation work.&lt;/p&gt;

&lt;p&gt;The goal is to identify scope, risks, constraints, non-goals, affected files, expected behavior, and documentation impact.&lt;/p&gt;

&lt;p&gt;This stage may include uncertainty, alternative designs, and questions. It is not sent directly to the coding agent.&lt;/p&gt;

&lt;p&gt;The assistant is useful here as a reviewer and translator. It helps convert engineering instincts into clearer technical language:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“This feels unsafe” becomes “this crosses a trust boundary.”&lt;/li&gt;
&lt;li&gt;“Do not save failed AI output” becomes “protect the validation and commit boundary.”&lt;/li&gt;
&lt;li&gt;“This ugly thing should not be fixed now” becomes “record it as technical debt and keep it out of scope.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output of the Task Brief is not code. The output is a clearer implementation target.&lt;/p&gt;

&lt;h2&gt;
  
  
  Codex Contract
&lt;/h2&gt;

&lt;p&gt;The Codex Contract is the bounded instruction set given to the coding agent.&lt;/p&gt;

&lt;p&gt;It is not a transcript of the planning conversation. It is the cleaned-up implementation contract.&lt;/p&gt;

&lt;p&gt;A good contract states:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the goal;&lt;/li&gt;
&lt;li&gt;relevant context;&lt;/li&gt;
&lt;li&gt;files likely involved;&lt;/li&gt;
&lt;li&gt;behavior that must be preserved;&lt;/li&gt;
&lt;li&gt;non-goals;&lt;/li&gt;
&lt;li&gt;acceptance criteria;&lt;/li&gt;
&lt;li&gt;verification steps;&lt;/li&gt;
&lt;li&gt;required documentation updates;&lt;/li&gt;
&lt;li&gt;final report requirements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The non-goals are critical.&lt;/p&gt;

&lt;p&gt;With coding agents, “do not do this” is often as important as “do this.” If the contract does not explicitly say not to refactor a legacy route, the agent may refactor it. The refactor may be technically reasonable and still be wrong for the current task.&lt;/p&gt;

&lt;p&gt;The contract defines the box.&lt;/p&gt;

&lt;p&gt;Documentation updates are part of that box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Review
&lt;/h2&gt;

&lt;p&gt;Final Review checks both implementation and memory.&lt;/p&gt;

&lt;p&gt;The review asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did the implementation match the contract?&lt;/li&gt;
&lt;li&gt;Did it preserve required behavior?&lt;/li&gt;
&lt;li&gt;Did it avoid unrelated changes?&lt;/li&gt;
&lt;li&gt;Did it update the correct documentation?&lt;/li&gt;
&lt;li&gt;Did it record deferred work as technical debt?&lt;/li&gt;
&lt;li&gt;Did the report accurately describe what changed?&lt;/li&gt;
&lt;li&gt;Does anything need a bounded patch?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Manual testing remains required. The assistant can help review the coding agent’s return, but it does not replace human acceptance.&lt;/p&gt;

&lt;p&gt;The workflow is therefore not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Write code, then someday update docs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Design the slice, implement the slice, update the docs, review the result, patch if needed, repeat.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the mechanism that turns documentation into project memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why contract review matters
&lt;/h2&gt;

&lt;p&gt;The contract review step exists because conversational language can leak into technical instructions.&lt;/p&gt;

&lt;p&gt;A simple example from this case study is the phrase “dynamic frontend.” In conversation, that is understandable shorthand. The project has a browser interface with dynamic behavior: polling, player input submission, scene rendering, choices, Chronicle rendering, and rollback wiring.&lt;/p&gt;

&lt;p&gt;But the project-memory wording is more precise:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;a static browser frontend served by the Node backend, with dynamic client-side behavior owned by &lt;code&gt;public/app.js&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That distinction matters. In a CC, “dynamic frontend” could be misread as permission to introduce a frontend framework, server-side rendering, a build step, or a broader UI restructure. None of that is intended.&lt;/p&gt;

&lt;p&gt;This is exactly the failure mode the workflow is designed to catch. Human shorthand is useful during exploration. It must be cleaned up before implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Representative sequence: CP-0011 to CP-0013
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;CP-0011&lt;/code&gt;, &lt;code&gt;CP-0012&lt;/code&gt;, and &lt;code&gt;CP-0013&lt;/code&gt; are included as three consecutive Codex Contracts from the same development phase.&lt;/p&gt;

&lt;p&gt;They are useful together because they show the workflow being applied repeatedly across different kinds of context work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;CP-0011&lt;/code&gt; establishes a narrow Thread Context Controller v0.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CP-0012&lt;/code&gt; establishes a Messages Side Channel v0.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CP-0013&lt;/code&gt; deprecates legacy Enforcement data and adds clean scoped Enforcement v0.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The details differ, but the contract pattern is the same. Each task defines a bounded implementation, preserves legacy behavior, names what must not be changed, gives acceptance criteria, requires verification, and tells Codex what to report back.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;CP-0013&lt;/code&gt; is the strongest documentation-memory example because it explicitly requires narrow updates across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DEV_DATA_SHAPES.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DEV_API_CONTRACTS.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DEV_ARCHITECTURE.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TECHNICAL_DEBT.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The sequence matters. It shows that documentation as project memory was not a one-off instruction. It was part of the operating pattern across consecutive development passes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example pattern
&lt;/h2&gt;

&lt;p&gt;Assume a feature is hardcoded in a legacy file. It should eventually become a cleaner system, but the current task should only create a safe v0 seam.&lt;/p&gt;

&lt;p&gt;A weak instruction would be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Refactor this feature into a better system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That instruction has no boundary.&lt;/p&gt;

&lt;p&gt;A better Task Brief clarifies the scope:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We are not building the full system yet. We are creating a clean v0 seam. The old legacy data must remain. The new code should read clean records, skip legacy records, and expose a separate API field. No migration. No deletion. No broad refactor.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Codex Contract turns that into implementation instructions:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a controller for clean v0 records. Preserve the old API field. Add a new clean projection. Do not rewrite existing files. Do not change JSON loading behavior. Do not refactor unrelated legacy routes. Update architecture notes, API contracts, data shapes, and technical debt only where this task changes them. Report changed files, validation rules, documentation updates, and risks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now the coding agent has a bounded task. It knows what to build, what not to touch, where documentation belongs, and what to report back.&lt;/p&gt;

&lt;p&gt;Final Review then checks the implementation, the report, and the documentation updates. Any correction goes back through the loop as a bounded patch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it works
&lt;/h2&gt;

&lt;p&gt;This pattern works because documentation becomes part of the development transaction.&lt;/p&gt;

&lt;p&gt;The documents are updated while the context is fresh. The coding agent receives a bounded contract instead of a messy conversation. The assistant can reason from current project documents instead of stale chat history. The developer does not have to keep the whole system in working memory.&lt;/p&gt;

&lt;p&gt;The result is not perfect AI coding.&lt;/p&gt;

&lt;p&gt;The result is reviewable AI coding.&lt;/p&gt;

&lt;p&gt;A change can be evaluated against the contract. A working implementation can still be rejected if it violates scope. Deferred work can be preserved without being accidentally implemented. Future tasks can begin from documented project state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope
&lt;/h2&gt;

&lt;p&gt;The implementation described here was built as a local prototype with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node backend;&lt;/li&gt;
&lt;li&gt;static browser frontend with dynamic client-side behavior;&lt;/li&gt;
&lt;li&gt;local JSON persistence;&lt;/li&gt;
&lt;li&gt;rollback support;&lt;/li&gt;
&lt;li&gt;validation gates;&lt;/li&gt;
&lt;li&gt;LLM gateway compatible with local or OpenAI-style providers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ChatGPT was used for planning, review, and learning. Codex was used as the coding agent. LM Studio was used for local model testing.&lt;/p&gt;

&lt;p&gt;The exact tools are not the important part.&lt;/p&gt;

&lt;p&gt;The transferable pattern is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;conversation for exploration, contract for implementation, documentation for memory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Under this implementation, documentation acted as project memory because three conditions were enforced:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;documentation updates were required by the implementation contract;&lt;/li&gt;
&lt;li&gt;documentation updates were checked during final review;&lt;/li&gt;
&lt;li&gt;updated documentation was reused as context for later tasks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The workflow does not remove the need for human judgment. It depends on it. The human still owns scope, acceptance, risk decisions, and final review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Documentation as project memory is a practical control mechanism for AI-assisted development.&lt;/p&gt;

&lt;p&gt;The value is not that documentation exists.&lt;/p&gt;

&lt;p&gt;The value is that documentation becomes operational.&lt;/p&gt;

&lt;p&gt;It constrains the next task, preserves decisions, records deferred work, and reduces dependence on chat history or human memory.&lt;/p&gt;

&lt;p&gt;That is what kept the project understandable under a prompt-only implementation constraint.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/davidvk89" rel="noopener noreferrer"&gt;
        davidvk89
      &lt;/a&gt; / &lt;a href="https://github.com/davidvk89/ai-project-memory-loop" rel="noopener noreferrer"&gt;
        ai-project-memory-loop
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A lightweight workflow for using live project documentation as memory in AI-assisted development.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;ai-project-memory-loop&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Supporting files for a one-week case study in using live project documentation as memory during AI-assisted development.&lt;/p&gt;
&lt;p&gt;This repository is not a framework, package, or complete methodology. It is the artifact trail behind three companion articles about keeping AI-assisted development bounded, reviewable, and human-led.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Core idea&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;AI-assisted development has a context problem.&lt;/p&gt;
&lt;p&gt;Coding agents can move quickly, but they only work from the context they are given. A long planning conversation can contain rejected ideas, shorthand, future plans, temporary assumptions, and half-decisions. For a human, that is normal design exploration. For a coding agent, it can become accidental permission.&lt;/p&gt;
&lt;p&gt;The workflow documented here uses a lightweight loop:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;Task Brief      -&amp;gt; explore the problem
Codex Contract  -&amp;gt; define the bounded implementation
Final Review    -&amp;gt; test, inspect, patch, and update project memory
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The project memory files are updated as part of the work, not someday after the work. That gives the…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/davidvk89/ai-project-memory-loop" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Vibe Coding Done Right</title>
      <dc:creator>davidvk89</dc:creator>
      <pubDate>Tue, 30 Jun 2026 13:13:43 +0000</pubDate>
      <link>https://dev.to/davidvk89/vibe-coding-done-right-3o66</link>
      <guid>https://dev.to/davidvk89/vibe-coding-done-right-3o66</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmvh4199zz88e0l6cfuqx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmvh4199zz88e0l6cfuqx.png" alt=" " width="654" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Or: spec-driven AI-assisted development for solo developers.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I did not set out to invent a software development workflow. I was trying to build a small local app with AI help, learn as I went, and avoid turning the project into a mysterious pile of files that technically ran but could no longer be explained by anyone involved.&lt;/p&gt;

&lt;p&gt;AI coding tools are powerful. They can generate code quickly, refactor without getting bored, write boilerplate, spot patterns, and produce useful documentation. They can also confidently make changes that are almost right, broaden the scope, fix things you did not ask them to fix, or “helpfully” redesign a part of the system you were trying to keep boring.&lt;/p&gt;

&lt;p&gt;For a solo developer, that creates a practical problem. The AI can move faster than your ability to keep the project organized. At first, this feels like productivity. A few sessions later, you may be staring at a codebase wondering when the raccoon got into the wiring.&lt;/p&gt;

&lt;p&gt;The issue is not that the AI is bad. The issue is that AI-assisted development needs structure. Not heavy enterprise-process structure. Just enough structure to separate thinking from building, and building from review.&lt;/p&gt;

&lt;p&gt;Spec-driven does not mean big upfront design. It means writing just enough specification before spending coding-agent credits.&lt;/p&gt;

&lt;p&gt;The casual name is the TB / CC / FR loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TB: Task Brief&lt;/li&gt;
&lt;li&gt;CC: Codex Contract&lt;/li&gt;
&lt;li&gt;FR: Final Review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After introducing those names, I just call it the loop.&lt;/p&gt;

&lt;p&gt;In my workflow, ChatGPT is the assistant: planner, tutor, reviewer, and sometimes patient explainer of software engineering terms I probably should have known already. Codex is the coding agent: the builder that gets the final bounded contract.&lt;/p&gt;

&lt;p&gt;That separation matters. The assistant can help me think through the mess. Codex should get the cleaned-up version.&lt;/p&gt;

&lt;h2&gt;
  
  
  My stack
&lt;/h2&gt;

&lt;p&gt;This workflow did not come from an expensive or exotic setup.&lt;/p&gt;

&lt;p&gt;My stack is practical:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows as my main environment&lt;/li&gt;
&lt;li&gt;ChatGPT Plus in the browser for planning, review, and architectural discussion&lt;/li&gt;
&lt;li&gt;Codex through its desktop client as the coding agent&lt;/li&gt;
&lt;li&gt;PowerShell for running the project and checking output&lt;/li&gt;
&lt;li&gt;Visual Studio Code with the codebase open beside everything&lt;/li&gt;
&lt;li&gt;LM Studio running a local LLM so I can test my application layer without needing a paid API key for every experiment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LM Studio is useful because I am building an app that talks to a language model. I need to test that loop often. Running a local model lets me test rough application behavior without worrying that every broken model response or half-working route is costing money through an API.&lt;/p&gt;

&lt;p&gt;Codex credits matter too. Burning through them because I handed the coding agent a vague contract is not just wasteful; eventually, you run out. That is one reason I started separating architectural discussion from implementation. ChatGPT can help me think, review, and refine the task. Codex should get the bounded contract that is actually ready to build.&lt;/p&gt;

&lt;p&gt;This is not a luxury AI engineering stack. It is one paid subscription, local tooling where possible, and a workflow that tries to make the most of both.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why solo AI coding gets messy
&lt;/h2&gt;

&lt;p&gt;When I started using AI to help build my project, the temptation was simple: explain what I wanted, let the coding agent make changes, test the result, then continue.&lt;/p&gt;

&lt;p&gt;That works for tiny changes. It does not scale well once the project starts developing architecture.&lt;/p&gt;

&lt;p&gt;Software projects are full of invisible context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This part is temporary.&lt;/li&gt;
&lt;li&gt;This ugly thing is legacy, but still required.&lt;/li&gt;
&lt;li&gt;This file should not become a dumping ground.&lt;/li&gt;
&lt;li&gt;This route must preserve its API contract.&lt;/li&gt;
&lt;li&gt;This data shape is intentionally minimal.&lt;/li&gt;
&lt;li&gt;This feature sounds useful, but it belongs later.&lt;/li&gt;
&lt;li&gt;This bug should be fixed, but not inside this task.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A human developer on a team may know this from conversations, code reviews, planning meetings, or institutional memory. A coding agent does not have stable shared context unless you give it one.&lt;/p&gt;

&lt;p&gt;But giving it everything creates a different problem. The agent may grab onto the wrong idea from earlier discussion and implement something half-decided, future-facing, or experimental.&lt;/p&gt;

&lt;p&gt;So the trick is not “give the AI everything.”&lt;/p&gt;

&lt;p&gt;The trick is to give the AI the right bounded slice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The loop
&lt;/h2&gt;

&lt;p&gt;The loop separates the work into three stages.&lt;/p&gt;

&lt;p&gt;A TB, or Task Brief, is where I think through the problem. This is the design space. What are we trying to do? Why does it matter? What are the risks? What does this touch? What should we avoid? Are we building the real system, or just an extension point for the future?&lt;/p&gt;

&lt;p&gt;This is the place for discussion, uncertainty, and tradeoffs.&lt;/p&gt;

&lt;p&gt;A CC, or Codex Contract, is the reviewed instruction set that Codex receives.&lt;/p&gt;

&lt;p&gt;This is not the place for brainstorming. This is the place for instructions.&lt;/p&gt;

&lt;p&gt;An FR, or Final Review, happens after Codex reports back. This is not the same kind of review as the CC review. The CC is rigorously reviewed before Codex builds. The FR happens after Codex is done: I manually test the feature, inspect the result, and have the assistant check Codex’s return against the contract.&lt;/p&gt;

&lt;p&gt;This is where the human stays in charge.&lt;/p&gt;

&lt;p&gt;The loop is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Think through the task → write the CC → review the CC → let Codex build → manually test and review Codex’s return → patch if needed → move to the next slice.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That may sound formal, but in practice it is lightweight. It keeps the project from becoming a long improvisation session where every step technically makes sense but the whole thing slowly loses shape.&lt;/p&gt;

&lt;h2&gt;
  
  
  The CC is the contract
&lt;/h2&gt;

&lt;p&gt;The CC is the heart of the workflow.&lt;/p&gt;

&lt;p&gt;A good CC is not just a set of instructions. It is a small implementation contract.&lt;/p&gt;

&lt;p&gt;It should include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the goal&lt;/li&gt;
&lt;li&gt;current context&lt;/li&gt;
&lt;li&gt;known legacy behavior&lt;/li&gt;
&lt;li&gt;non-goals&lt;/li&gt;
&lt;li&gt;likely files involved&lt;/li&gt;
&lt;li&gt;rules that must not be broken&lt;/li&gt;
&lt;li&gt;acceptance criteria&lt;/li&gt;
&lt;li&gt;verification steps&lt;/li&gt;
&lt;li&gt;final report requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The non-goals are especially important.&lt;/p&gt;

&lt;p&gt;With AI coding, “do not do this” is often as valuable as “do this.” If you do not explicitly say “do not refactor this legacy route,” there is a real chance the agent will decide the route looks messy and try to improve it. Sometimes it will even be right that the code is messy. That does not mean it belongs in the current task.&lt;/p&gt;

&lt;p&gt;A CC gives the coding agent a box to work inside.&lt;/p&gt;

&lt;p&gt;The box is not there because the agent is weak. The box is there because the agent is strong enough to cause damage quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review the CC before handing it off
&lt;/h2&gt;

&lt;p&gt;One part of the workflow that matters more than I expected is reviewing the CC before giving it to Codex.&lt;/p&gt;

&lt;p&gt;At first, I thought of the CC as something I wrote and then sent. Now I treat it like a small design artifact that deserves review before it becomes implementation fuel.&lt;/p&gt;

&lt;p&gt;My process is simple. I read the CC myself while also having the assistant review it. I look for context I do not want Codex to act on. If I see future ideas, speculative comments, or background discussion that should not become code, I remove it or mark it clearly as out of scope.&lt;/p&gt;

&lt;p&gt;At the same time, I ask the assistant to look for ambiguity, missing constraints, contradictions, and places where Codex might reasonably misunderstand the task. If the review brings up a good point, I patch the CC before committing it to Codex.&lt;/p&gt;

&lt;p&gt;Sometimes this takes one review. Most of the time it takes two. For larger architectural tasks, it may take four or five passes.&lt;/p&gt;

&lt;p&gt;That is not wasted time. It is much cheaper to patch a contract than to untangle an implementation that faithfully followed a bad one.&lt;/p&gt;

&lt;p&gt;The question is not only: does this contract describe what I want?&lt;/p&gt;

&lt;p&gt;It is also: does this contract contain anything I do not want Codex to treat as permission?&lt;/p&gt;

&lt;p&gt;That second question matters a lot.&lt;/p&gt;

&lt;p&gt;AI coding agents are good at picking up intent, but they are not always good at knowing which parts of a conversation were final, deferred, speculative, rejected, or just me thinking out loud. Reviewing the CC creates a checkpoint between design discussion and implementation.&lt;/p&gt;

&lt;p&gt;In normal software development, code review happens after someone writes code. In this workflow, contract review happens before the AI writes code. It does not replace implementation review, but it prevents a surprising number of mistakes from being born in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the coding agent’s context clean
&lt;/h2&gt;

&lt;p&gt;The coding agent does not need the entire conversation history.&lt;/p&gt;

&lt;p&gt;That is intentional.&lt;/p&gt;

&lt;p&gt;The broad architectural discussion happens elsewhere. The CC is the distilled result. It gives Codex just enough context to implement the task without dragging in every idea, doubt, future feature, and half-joking comment that came up during planning.&lt;/p&gt;

&lt;p&gt;This separation matters because solo developers often think through projects conversationally. That is useful. It is also messy. A conversation can contain today’s plan, tomorrow’s idea, a rejected approach, a metaphor, and a possible future feature that should not be touched for three months.&lt;/p&gt;

&lt;p&gt;You do not want all of that in the implementation context.&lt;/p&gt;

&lt;p&gt;Instead, Codex should receive something closer to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here is the task. Here is the boundary. Here are the contracts. Here is what success means. Here is what you must not touch. Report back when done.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That keeps Codex in executor mode rather than co-architect-with-selective-memory mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation is project memory
&lt;/h2&gt;

&lt;p&gt;This workflow depends on good documentation, but not the ceremonial kind.&lt;/p&gt;

&lt;p&gt;I am not talking about writing a polished manual nobody reads. I mean living project documents that help make the next decision.&lt;/p&gt;

&lt;p&gt;This may be the most important part of the method: with the right CC, the documentation starts to write itself.&lt;/p&gt;

&lt;p&gt;I do not manually write most of my documentation. The CC tells Codex which documentation files to update and what kind of change belongs where.&lt;/p&gt;

&lt;p&gt;In my project, that usually means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DEV_ARCHITECTURE.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DEV_DATA_SHAPES.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DEV_API_CONTRACTS.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TECHNICAL_DEBT.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If we discuss architecture during the TB, the CC tells Codex to update &lt;code&gt;DEV_ARCHITECTURE.md&lt;/code&gt;. If the implementation changes an API response, the CC tells it to update &lt;code&gt;DEV_API_CONTRACTS.md&lt;/code&gt;. If a data shape changes, it belongs in &lt;code&gt;DEV_DATA_SHAPES.md&lt;/code&gt;. If something is intentionally deferred, it goes into &lt;code&gt;TECHNICAL_DEBT.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I do not usually review the documentation line by line myself. The Final Review is based on Codex’s return: what files it changed, what behavior it implemented, what it says it verified, and what documentation it reports updating.&lt;/p&gt;

&lt;p&gt;Most of the time, I have the assistant review that return and check whether the reported documentation updates match the CC and the implementation summary. If something is missing, too broad, or in the wrong document, I ask for a patch and send that back through the loop.&lt;/p&gt;

&lt;p&gt;So the workflow is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Write code, then someday write docs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is closer to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Design the slice, build the slice, have Codex update the docs, review Codex’s return, patch if needed, repeat.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These documents are not just for future users. They are for me, for the AI assistant, and for the project itself.&lt;/p&gt;

&lt;p&gt;For me, they reduce the amount I have to keep in my head. I can check what the system currently promises, what is legacy, what is intentionally deferred, and what should not be touched yet.&lt;/p&gt;

&lt;p&gt;For the AI assistant, they provide current project memory. I can feed the docs into ChatGPT and it can reason from the latest architecture instead of guessing from stale conversation history. That makes the next TB or CC sharper because the assistant is working from documented project truth, not vibes.&lt;/p&gt;

&lt;p&gt;For the project, the docs act like a stabilizer. They guide contracts, preserve decisions, and make technical debt explicit. &lt;code&gt;TECHNICAL_DEBT.md&lt;/code&gt; is especially useful. It lets me say, “Yes, this is ugly. No, we are not fixing it in this task.”&lt;/p&gt;

&lt;p&gt;The docs also solve a practical problem with long AI chats. Eventually, a long conversation can become slow, heavy, or awkward to continue. If the project memory only lives in that chat, starting fresh means losing context. But if the docs are up to date, I can open a fresh chat, upload the docs, add a short context packet, and continue from a clean starting point.&lt;/p&gt;

&lt;p&gt;That turns documentation into long-term memory.&lt;/p&gt;

&lt;p&gt;Good docs turn the project from a memory test into a map. A sharper map makes the CC sharper. A sharper CC makes the implementation safer. A safer implementation makes the docs easier to update.&lt;/p&gt;

&lt;p&gt;That is the loop beginning to reinforce itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the assistant to learn, not just brainstorm
&lt;/h2&gt;

&lt;p&gt;The assistant is not only there to brainstorm features or polish contracts. For me, it is also part of the learning process.&lt;/p&gt;

&lt;p&gt;I am not approaching the project as someone who already knows every software engineering pattern by name. A lot of the value comes from asking what something is called, why a design feels risky, what tradeoff I am making, or how an experienced engineer would describe the problem.&lt;/p&gt;

&lt;p&gt;That turns the assistant into more than a planning partner. It becomes a tutor, translator, and reviewer.&lt;/p&gt;

&lt;p&gt;Sometimes I ask for the industry term. Sometimes I ask for the simple version. Sometimes I ask for the “software engineer review” of an idea that feels right but may have hidden problems. That is how vague instincts become clearer concepts.&lt;/p&gt;

&lt;p&gt;There is one trick I found useful: sometimes you have to be strict with your assistant.&lt;/p&gt;

&lt;p&gt;If the answer starts drifting, getting too soft, or turning into pleasant brainstorming when I need implementation discipline, I say something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Review this like a software engineer.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Write the CC like a software engineer.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That kind of instruction helps reset the tone. It tells the assistant to stop being encouraging for a moment and start looking for ambiguity, missing constraints, scope creep, and failure modes.&lt;/p&gt;

&lt;p&gt;That is important for a beginner mindset. Beginner-friendly does not mean vague. It means clear enough that you can learn without pretending you already know everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small example
&lt;/h2&gt;

&lt;p&gt;Imagine you have a feature that is currently hardcoded in a messy legacy file. You know it needs to become a clean, reusable system eventually. The tempting AI instruction is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Please refactor this feature into a better system.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is dangerous. “Better” can mean anything.&lt;/p&gt;

&lt;p&gt;A TB would first clarify the actual goal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“We are not building the full system yet. We are creating a clean v0 seam. The old legacy data must remain. The new code should read clean records, skip legacy records, and expose a separate API field. No migration. No deletion. No broad refactor.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then the CC would translate that into implementation instructions:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Create a controller for the clean v0 records. Preserve the old API field. Add a new clean projection. Do not rewrite existing files. Do not change JSON loading behavior. Do not refactor unrelated legacy routes. Add docs. Report changed files, validation rules, and risks.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before sending that CC, I would review it. If it included a paragraph about future advanced filtering, and I did not want that implemented yet, I would remove it or put it under non-goals. If the assistant pointed out that “clean projection” could be confused with “LLM context,” I would patch the CC to define those as separate outputs.&lt;/p&gt;

&lt;p&gt;Only then would I hand it to Codex.&lt;/p&gt;

&lt;p&gt;The result is not glamorous, but it is safe. And safe is underrated when you are building with tools that can rewrite half your project before lunch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this helps solo developers
&lt;/h2&gt;

&lt;p&gt;Solo developers have an unusual burden. You are the product owner, architect, developer, tester, reviewer, and documentation department. Now, with AI, you may also be managing one or more very fast assistants.&lt;/p&gt;

&lt;p&gt;The loop helps because it creates a small team structure even when you are working alone:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You, during TB: architect&lt;/li&gt;
&lt;li&gt;You, reviewing CC: editor and risk filter&lt;/li&gt;
&lt;li&gt;ChatGPT: tutor and reviewer&lt;/li&gt;
&lt;li&gt;Codex: implementer&lt;/li&gt;
&lt;li&gt;Docs: shared memory&lt;/li&gt;
&lt;li&gt;You, during FR: tester and reviewer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That separation makes the work feel less like constantly reacting and more like moving through deliberate slices.&lt;/p&gt;

&lt;p&gt;When you are learning, you do not always know the perfect architecture upfront. That is fine. The point is not to be a senior engineer cosplaying as a process consultant. The point is to slow the project down just enough that you can understand what changed and why.&lt;/p&gt;

&lt;p&gt;A beginner-friendly workflow should not require pretending to know everything. It should make uncertainty manageable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real benefit
&lt;/h2&gt;

&lt;p&gt;The real benefit of this workflow is not that it makes AI coding perfect. It does not.&lt;/p&gt;

&lt;p&gt;The benefit is that it makes AI coding reviewable.&lt;/p&gt;

&lt;p&gt;You can compare the implementation against the CC. You can test the feature manually. You can have the assistant review Codex’s return. You can update the docs. You can reject a change for violating scope even if the code works. You can preserve decisions instead of rediscovering them three sessions later.&lt;/p&gt;

&lt;p&gt;It also makes the contract itself reviewable. That is easy to overlook. A clean CC is not just better writing; it is risk reduction.&lt;/p&gt;

&lt;p&gt;Without structure, AI-assisted development can feel like accelerating into fog.&lt;/p&gt;

&lt;p&gt;With lightweight specs, it feels more like driving with a map. You may still take wrong turns, but at least you know which road you meant to be on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thought
&lt;/h2&gt;

&lt;p&gt;Vibe coding done right is not about making solo projects more bureaucratic. It is about making them less fragile.&lt;/p&gt;

&lt;p&gt;The loop gives the work a rhythm:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Think clearly. Write the contract. Review the contract. Build narrowly. Test manually. Review honestly. Document what changed. Repeat.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That rhythm keeps the human in charge without wasting the AI’s strengths.&lt;/p&gt;

&lt;p&gt;The coding agent can move fast. The docs can remember. The CC can define the box. The assistant can help you learn why the box should look that way. The review can catch ambiguity before it becomes code. The FR can protect the project from “almost right.”&lt;/p&gt;

&lt;p&gt;And the solo developer can keep building without needing to hold the entire system in their head at once.&lt;/p&gt;

&lt;p&gt;That, for me, is the point.&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr2pv10kxbseqi59yv00z.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr2pv10kxbseqi59yv00z.png" alt=" " width="654" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I spent a week trying to make AI-assisted development less chaotic.</title>
      <dc:creator>davidvk89</dc:creator>
      <pubDate>Tue, 30 Jun 2026 12:52:54 +0000</pubDate>
      <link>https://dev.to/davidvk89/i-spent-a-week-trying-to-make-ai-assisted-development-less-chaotic-366h</link>
      <guid>https://dev.to/davidvk89/i-spent-a-week-trying-to-make-ai-assisted-development-less-chaotic-366h</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyvstdjwy0pu75fm88p86.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyvstdjwy0pu75fm88p86.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hi, I’m David.&lt;/p&gt;

&lt;p&gt;I’m close enough to middle age that I have no interest in pretending I discovered the future of software development in a week.&lt;/p&gt;

&lt;p&gt;What I did do was spend one serious week building a small local app with AI assistance, while trying to keep the project understandable.&lt;/p&gt;

&lt;p&gt;That turned out to be harder, and more interesting, than I expected.&lt;/p&gt;

&lt;p&gt;The coding agent could move quickly. Sometimes very quickly. It could generate code, refactor, write boilerplate, and help move the project forward.&lt;/p&gt;

&lt;p&gt;But it could also widen scope, preserve the wrong assumption, “helpfully” redesign something I wanted to keep boring, or act on context that was never meant to become implementation work.&lt;/p&gt;

&lt;p&gt;The main lesson I took from that week was simple:&lt;/p&gt;

&lt;p&gt;AI-assisted development is not only a coding problem.&lt;/p&gt;

&lt;p&gt;It is a context management problem.&lt;/p&gt;

&lt;p&gt;So I started using a lightweight loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task Brief      -&amp;gt; think through the problem
Codex Contract  -&amp;gt; give the coding agent a bounded instruction set
Final Review    -&amp;gt; test, inspect, patch, and update project memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The result was not perfect AI coding.&lt;/p&gt;

&lt;p&gt;The result was reviewable AI coding.&lt;/p&gt;

&lt;p&gt;That distinction felt important enough to write down.&lt;/p&gt;
&lt;h2&gt;
  
  
  The three articles
&lt;/h2&gt;

&lt;p&gt;I published three companion articles from that first week.&lt;/p&gt;

&lt;p&gt;They are meant to stand on their own, but together they describe the workflow, the memory system, and the objections I think are worth taking seriously.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Vibe Coding Done Right
&lt;/h2&gt;

&lt;p&gt;This is the accessible starting point.&lt;/p&gt;

&lt;p&gt;It explains how I used a lightweight, spec-driven workflow as a solo developer working with ChatGPT, Codex, VS Code, PowerShell, and a local LLM through LM Studio.&lt;/p&gt;

&lt;p&gt;The point is not the exact stack.&lt;/p&gt;

&lt;p&gt;The point is the separation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one place for thinking, learning, and review;&lt;/li&gt;
&lt;li&gt;another place for bounded implementation;&lt;/li&gt;
&lt;li&gt;documentation as the memory that keeps the next task grounded.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/davidvk89/vibe-coding-done-right-3o66" class="crayons-story__hidden-navigation-link"&gt;Vibe Coding Done Right&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/davidvk89" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1014488%2Fc7126a8d-bc3f-4eb5-9deb-7831cb5a5744.jpeg" alt="davidvk89 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/davidvk89" class="crayons-story__secondary fw-medium m:hidden"&gt;
              davidvk89
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                davidvk89
                
              
              &lt;div id="story-author-preview-content-4031384" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/davidvk89" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1014488%2Fc7126a8d-bc3f-4eb5-9deb-7831cb5a5744.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;davidvk89&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/davidvk89/vibe-coding-done-right-3o66" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 30&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/davidvk89/vibe-coding-done-right-3o66" id="article-link-4031384"&gt;
          Vibe Coding Done Right
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/davidvk89/vibe-coding-done-right-3o66#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            12 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  2. Documentation as Project Memory in AI-Assisted Development
&lt;/h2&gt;

&lt;p&gt;This is the more technical case-study piece.&lt;/p&gt;

&lt;p&gt;The part that surprised me most was documentation.&lt;/p&gt;

&lt;p&gt;Not documentation as a polished manual.&lt;br&gt;
Not documentation as a chore at the end.&lt;br&gt;
Not documentation nobody reads.&lt;/p&gt;

&lt;p&gt;Documentation as project memory.&lt;/p&gt;

&lt;p&gt;The project used a small set of live documents to preserve architecture, data shapes, API contracts, and technical debt.&lt;/p&gt;

&lt;p&gt;Those documents were updated as part of the implementation transaction, not someday after the work.&lt;/p&gt;

&lt;p&gt;That gave the next AI-assisted task a cleaner starting point.&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/davidvk89/documentation-as-project-memory-in-ai-assisted-development-2699" class="crayons-story__hidden-navigation-link"&gt;Documentation as Project Memory in AI-Assisted Development&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/davidvk89" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1014488%2Fc7126a8d-bc3f-4eb5-9deb-7831cb5a5744.jpeg" alt="davidvk89 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/davidvk89" class="crayons-story__secondary fw-medium m:hidden"&gt;
              davidvk89
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                davidvk89
                
              
              &lt;div id="story-author-preview-content-4031530" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/davidvk89" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1014488%2Fc7126a8d-bc3f-4eb5-9deb-7831cb5a5744.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;davidvk89&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/davidvk89/documentation-as-project-memory-in-ai-assisted-development-2699" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 30&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/davidvk89/documentation-as-project-memory-in-ai-assisted-development-2699" id="article-link-4031530"&gt;
          Documentation as Project Memory in AI-Assisted Development
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/davidvk89/documentation-as-project-memory-in-ai-assisted-development-2699#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            7 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;h2&gt;
  
  
  3. Defensive AI Engineering: Hardening the Project Memory Loop
&lt;/h2&gt;

&lt;p&gt;This one is for the reasonable skeptics.&lt;/p&gt;

&lt;p&gt;Because the obvious criticisms are fair.&lt;/p&gt;

&lt;p&gt;Isn’t this just documentation debt?&lt;/p&gt;

&lt;p&gt;Why manually pass context around when IDE agents can read the repo?&lt;/p&gt;

&lt;p&gt;Can you trust AI to update its own docs?&lt;/p&gt;

&lt;p&gt;Does this scale beyond one solo developer building a prototype?&lt;/p&gt;

&lt;p&gt;I do not think those questions should be hand-waved away.&lt;/p&gt;

&lt;p&gt;The third article is my attempt to stress-test the workflow rather than sell it as a universal answer.&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/davidvk89/defensive-ai-engineering-2m27" class="crayons-story__hidden-navigation-link"&gt;Defensive AI Engineering&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/davidvk89" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1014488%2Fc7126a8d-bc3f-4eb5-9deb-7831cb5a5744.jpeg" alt="davidvk89 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/davidvk89" class="crayons-story__secondary fw-medium m:hidden"&gt;
              davidvk89
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                davidvk89
                
              
              &lt;div id="story-author-preview-content-4031722" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/davidvk89" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1014488%2Fc7126a8d-bc3f-4eb5-9deb-7831cb5a5744.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;davidvk89&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/davidvk89/defensive-ai-engineering-2m27" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 30&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/davidvk89/defensive-ai-engineering-2m27" id="article-link-4031722"&gt;
          Defensive AI Engineering
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/davidvk89/defensive-ai-engineering-2m27#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;h2&gt;
  
  
  Supporting repo
&lt;/h2&gt;

&lt;p&gt;I also published a small GitHub repo with the supporting files from the case study.&lt;/p&gt;

&lt;p&gt;It is not a framework or package.&lt;/p&gt;

&lt;p&gt;It is just the artifact trail: project-memory files, example Codex Contracts, and supporting notes from the development sequence.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/davidvk89" rel="noopener noreferrer"&gt;
        davidvk89
      &lt;/a&gt; / &lt;a href="https://github.com/davidvk89/ai-project-memory-loop" rel="noopener noreferrer"&gt;
        ai-project-memory-loop
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A lightweight workflow for using live project documentation as memory in AI-assisted development.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;ai-project-memory-loop&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Supporting files for a one-week case study in using live project documentation as memory during AI-assisted development.&lt;/p&gt;
&lt;p&gt;This repository is not a framework, package, or complete methodology. It is the artifact trail behind three companion articles about keeping AI-assisted development bounded, reviewable, and human-led.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Core idea&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;AI-assisted development has a context problem.&lt;/p&gt;
&lt;p&gt;Coding agents can move quickly, but they only work from the context they are given. A long planning conversation can contain rejected ideas, shorthand, future plans, temporary assumptions, and half-decisions. For a human, that is normal design exploration. For a coding agent, it can become accidental permission.&lt;/p&gt;
&lt;p&gt;The workflow documented here uses a lightweight loop:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;Task Brief      -&amp;gt; explore the problem
Codex Contract  -&amp;gt; define the bounded implementation
Final Review    -&amp;gt; test, inspect, patch, and update project memory
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The project memory files are updated as part of the work, not someday after the work. That gives the…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/davidvk89/ai-project-memory-loop" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Why I’m posting this
&lt;/h2&gt;

&lt;p&gt;I am not claiming authority on AI engineering.&lt;/p&gt;

&lt;p&gt;I am a guy who spent a week building with AI, ran into context drift almost immediately, and stumbled into a workflow that made the project feel less fragile.&lt;/p&gt;

&lt;p&gt;That seemed worth sharing.&lt;/p&gt;

&lt;p&gt;Maybe someone else is also trying to use AI coding tools without turning their project into a mysterious pile of files that technically runs but no longer makes sense.&lt;/p&gt;

&lt;p&gt;If so, I hope some part of this is useful.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
