<?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>Forem: yohey-w</title>
    <description>The latest articles on Forem by yohey-w (@yohey-w).</description>
    <link>https://forem.com/yohey-w</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%2F3848460%2F7d988af1-2bcd-4631-8f4e-454e99189be5.png</url>
      <title>Forem: yohey-w</title>
      <link>https://forem.com/yohey-w</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/yohey-w"/>
    <language>en</language>
    <item>
      <title>Harness as Code: Treating AI Workflows Like Infrastructure</title>
      <dc:creator>yohey-w</dc:creator>
      <pubDate>Tue, 31 Mar 2026 15:45:29 +0000</pubDate>
      <link>https://forem.com/yohey-w/harness-as-code-treating-ai-workflows-like-infrastructure-27ni</link>
      <guid>https://forem.com/yohey-w/harness-as-code-treating-ai-workflows-like-infrastructure-27ni</guid>
      <description>&lt;p&gt;Every AI coding session I've had follows the same arc: I open Claude/ChatGPT, explain what I want, go back and forth for 20 minutes, get something that mostly works, then close the tab. The code exists. The process that created it doesn't.&lt;/p&gt;

&lt;p&gt;Try reproducing that session tomorrow. Try reviewing the prompts your teammate used. Try version-controlling the "vibe" that made the AI generate good code that one time.&lt;/p&gt;

&lt;p&gt;You can't. And that's the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The IaC Parallel
&lt;/h2&gt;

&lt;p&gt;Remember when deploying infrastructure meant clicking through the AWS console? You'd configure a load balancer, set up security groups, tweak auto-scaling — all by hand. It worked, until someone asked "can you do that again exactly the same way?" and the answer was always "probably."&lt;/p&gt;

&lt;p&gt;Then Terraform happened. Infrastructure as Code. Define everything in &lt;code&gt;.tf&lt;/code&gt; files, run &lt;code&gt;plan&lt;/code&gt;, run &lt;code&gt;apply&lt;/code&gt;. Reproducible. Versionable. Reviewable. The console still exists, but serious teams don't touch it.&lt;/p&gt;

&lt;p&gt;AI-assisted development is at the "clicking around in the console" stage right now. We chat with AI, copy-paste code, manually verify, repeat. It works — until it doesn't, and there's no trail to debug.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if AI workflows were defined in code?&lt;/strong&gt; CLI commands. YAML configs. Shell scripts. No chat windows. No interactive sessions. Every step reproducible, every decision versionable.&lt;/p&gt;

&lt;p&gt;I'm calling this &lt;strong&gt;Harness as Code&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  CoDD: A Concrete Implementation
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://github.com/yohey-w/codd-dev" rel="noopener noreferrer"&gt;CoDD&lt;/a&gt; (Coherence-Driven Development) to test this idea. It's a Python CLI that takes a Markdown spec and produces design documents and code through a deterministic pipeline.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;codd-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;spec.md (your requirements in Markdown)
&lt;/span&gt;&lt;span class="gp"&gt;  → codd init                    #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;bootstrap project config
&lt;span class="gp"&gt;  → codd plan --init             #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;AI designs the document dependency graph
&lt;span class="gp"&gt;  → codd generate --wave 1..N   #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;generate design docs, wave by wave
&lt;span class="gp"&gt;  → codd validate                #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;quality gate: catch AI laziness
&lt;span class="gp"&gt;  → codd implement --sprint 1..M #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;generate code from design docs
&lt;span class="gp"&gt;  → codd assemble                #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;integrate fragments into a working project
&lt;span class="gp"&gt;  → build                        #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;standard build &lt;span class="o"&gt;(&lt;/span&gt;npm, cargo, whatever&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No interactive AI chat at any step. Every AI call goes through &lt;code&gt;claude --print&lt;/code&gt; — Claude Code CLI's non-interactive STDIO mode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude &lt;span class="nt"&gt;--print&lt;/span&gt; &lt;span class="nt"&gt;--model&lt;/span&gt; claude-opus-4-6 &lt;span class="nt"&gt;--tools&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;prompt.txt&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prompt in, text out. AI as a pure function. The &lt;code&gt;ai_command&lt;/code&gt; in CoDD's config defines how AI is called:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# codd.yaml&lt;/span&gt;
&lt;span class="na"&gt;ai_command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;claude --print --model claude-opus-4-6 --tools ""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Swap &lt;code&gt;claude&lt;/code&gt; for any other CLI and the pipeline still works. CoDD doesn't care which LLM you use — it only cares about stdin/stdout.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "Coherence-Driven" Actually Means
&lt;/h2&gt;

&lt;p&gt;Most AI code generators treat each prompt independently. CoDD chains design documents through explicit dependency graphs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Requirements
  ├→ Acceptance Criteria        (Wave 1)
  ├→ ADR: Technology Stack      (Wave 1)
  │    └→ System Design          (Wave 2, depends on both above)
  │         ├→ Component Design   (Wave 3)
  │         └→ Task Flows         (Wave 3)
  │              └→ Implementation Plan (Wave 4)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When generating Wave 2's System Design, the AI receives the &lt;strong&gt;full text&lt;/strong&gt; of Wave 1's outputs as context. The ADR says "static export only" → System Design respects React Server Component boundaries. Acceptance Criteria says "ARIA labels required" → Component Design specifies &lt;code&gt;aria-pressed&lt;/code&gt;, focus traps, keyboard bindings.&lt;/p&gt;

&lt;p&gt;Upstream decisions constrain downstream generation. That's the coherence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Numbers
&lt;/h2&gt;

&lt;p&gt;I wrote a 37-line spec for a Todo app (Next.js 15, TypeScript strict, dark theme, localStorage):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# TaskFlow — Personal Todo App&lt;/span&gt;

&lt;span class="gu"&gt;## Functional Requirements&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Task CRUD: create, read, update, delete tasks
&lt;span class="p"&gt;-&lt;/span&gt; Each task has: title, description (optional), due date (optional),
  priority (low/medium/high), completed status
&lt;span class="p"&gt;-&lt;/span&gt; Task list with filtering by: status (all/active/completed), priority
&lt;span class="p"&gt;-&lt;/span&gt; Inline task completion toggle (checkbox)
&lt;span class="p"&gt;-&lt;/span&gt; Local state management (no backend, localStorage)

&lt;span class="gu"&gt;## UI Requirements&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Single-page app with responsive layout (mobile-first)
&lt;span class="p"&gt;-&lt;/span&gt; Dark theme with accent color (#3b82f6)
&lt;span class="p"&gt;-&lt;/span&gt; Floating action button opens a modal form
&lt;span class="p"&gt;-&lt;/span&gt; Toast notifications on create/update/delete
&lt;span class="p"&gt;-&lt;/span&gt; Keyboard shortcuts: Enter to submit, Escape to close modal

&lt;span class="gu"&gt;## Constraints&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Next.js 15 App Router with React Server Components
&lt;span class="p"&gt;-&lt;/span&gt; Tailwind CSS
&lt;span class="p"&gt;-&lt;/span&gt; TypeScript strict mode
&lt;span class="p"&gt;-&lt;/span&gt; Deploy-ready as static export
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Results:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;spec.md (37 lines)&lt;/td&gt;
&lt;td&gt;6 design documents (1,353 lines)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;102 code files (6,445 lines)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;TypeScript strict mode build: &lt;strong&gt;zero errors&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The generated design docs include Mermaid diagrams, component trees with RSC boundaries, state machine definitions, a full implementation plan with 17 sprints — all traceable back to the spec through dependency metadata.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model Role Separation
&lt;/h2&gt;

&lt;p&gt;Here's where it gets interesting. The &lt;code&gt;--ai-cmd&lt;/code&gt; flag lets you assign different models to different pipeline stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Design docs — needs judgment, use Opus&lt;/span&gt;
codd generate &lt;span class="nt"&gt;--wave&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--ai-cmd&lt;/span&gt; &lt;span class="s1"&gt;'claude --print --model claude-opus-4-6 --tools ""'&lt;/span&gt;

&lt;span class="c"&gt;# Code generation — needs volume, use Codex (or Sonnet)&lt;/span&gt;
codd implement &lt;span class="nt"&gt;--sprint&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--ai-cmd&lt;/span&gt; &lt;span class="s1"&gt;'codex --full-auto -q'&lt;/span&gt;

&lt;span class="c"&gt;# Quality check — needs rigor, back to Opus&lt;/span&gt;
codd validate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Opus for architecture. Codex for implementation. Opus for QC. Each model plays to its strengths. You define this in a shell script, not through some proprietary orchestration layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic Pipelines (No Magic Numbers)
&lt;/h2&gt;

&lt;p&gt;Wave and sprint counts depend on your spec — a complex app might have 8 waves and 40 sprints, a simple one might have 3 waves and 5 sprints. CoDD returns these counts for shell scripting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;waves&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;codd plan &lt;span class="nt"&gt;--waves&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;      &lt;span class="c"&gt;# → 4&lt;/span&gt;
&lt;span class="nv"&gt;sprints&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;codd plan &lt;span class="nt"&gt;--sprints&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;# → 17&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the full automation script has zero hardcoded values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;

codd init &lt;span class="nt"&gt;--requirements&lt;/span&gt; spec.md
codd plan &lt;span class="nt"&gt;--init&lt;/span&gt;

&lt;span class="nv"&gt;waves&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;codd plan &lt;span class="nt"&gt;--waves&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;wave &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;seq &lt;/span&gt;1 &lt;span class="nv"&gt;$waves&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;codd generate &lt;span class="nt"&gt;--wave&lt;/span&gt; &lt;span class="nv"&gt;$wave&lt;/span&gt;
&lt;span class="k"&gt;done

&lt;/span&gt;codd validate

&lt;span class="nv"&gt;sprints&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;codd plan &lt;span class="nt"&gt;--sprints&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;sprint &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;seq &lt;/span&gt;1 &lt;span class="nv"&gt;$sprints&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;codd implement &lt;span class="nt"&gt;--sprint&lt;/span&gt; &lt;span class="nv"&gt;$sprint&lt;/span&gt;
&lt;span class="k"&gt;done

&lt;/span&gt;codd assemble
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change the spec, run the same script. Different wave structure, different sprint count, same pipeline. This is what I mean by Harness as Code — the workflow is defined in code, adapts to input, and needs no human adjustment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding Human Checkpoints
&lt;/h2&gt;

&lt;p&gt;Full automation is one mode. Sometimes you want to review before proceeding:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;

codd init &lt;span class="nt"&gt;--requirements&lt;/span&gt; spec.md
codd plan &lt;span class="nt"&gt;--init&lt;/span&gt;
&lt;span class="nv"&gt;waves&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;codd plan &lt;span class="nt"&gt;--waves&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Generate wave 1, then pause for human review&lt;/span&gt;
codd generate &lt;span class="nt"&gt;--wave&lt;/span&gt; 1
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Review acceptance criteria and ADR in docs/"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Press Enter to continue, Ctrl+C to abort"&lt;/span&gt;
&lt;span class="nb"&gt;read&lt;/span&gt;

&lt;span class="c"&gt;# Remaining waves run automatically&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;wave &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;seq &lt;/span&gt;2 &lt;span class="nv"&gt;$waves&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;codd generate &lt;span class="nt"&gt;--wave&lt;/span&gt; &lt;span class="nv"&gt;$wave&lt;/span&gt;
&lt;span class="k"&gt;done

&lt;/span&gt;codd validate

&lt;span class="nv"&gt;sprints&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;codd plan &lt;span class="nt"&gt;--sprints&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;sprint &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;seq &lt;/span&gt;1 &lt;span class="nv"&gt;$sprints&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;codd implement &lt;span class="nt"&gt;--sprint&lt;/span&gt; &lt;span class="nv"&gt;$sprint&lt;/span&gt;
&lt;span class="k"&gt;done

&lt;/span&gt;codd assemble
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Human-in-the-loop is just &lt;code&gt;read&lt;/code&gt; in a shell script. No special API. No webhook configuration. Just standard Unix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality Gates
&lt;/h2&gt;

&lt;p&gt;AI models cut corners when they can. &lt;code&gt;codd validate&lt;/code&gt; catches:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TODO/TBD detection&lt;/td&gt;
&lt;td&gt;AI writes "TODO: implement later" and moves on&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meta-commentary removal&lt;/td&gt;
&lt;td&gt;"The following section will describe..." — no it won't, it's empty&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Section structure&lt;/td&gt;
&lt;td&gt;Required sections (Overview, Architecture) must exist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mermaid diagrams&lt;/td&gt;
&lt;td&gt;Detailed design without diagrams gets rejected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependency consistency&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;depends_on&lt;/code&gt; references in frontmatter must resolve&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Validation failures block the pipeline. Fix and regenerate, or the build doesn't proceed. Same idea as &lt;code&gt;terraform validate&lt;/code&gt; — catch problems before they propagate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Interactive AI Chat&lt;/th&gt;
&lt;th&gt;Harness as Code (CoDD)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reproducible&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes — same spec, same pipeline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Versionable&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes — spec + config in git&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reviewable&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes — PR the spec, review the diff&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model-switchable&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Per-step via &lt;code&gt;--ai-cmd&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD compatible&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes — it's just shell commands&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human checkpoints&lt;/td&gt;
&lt;td&gt;Always (you're the human)&lt;/td&gt;
&lt;td&gt;Optional (&lt;code&gt;read&lt;/code&gt; where needed)&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;Spec quality is the bottleneck.&lt;/strong&gt; My first spec for the Todo app had no UI requirements — the result looked functional but ugly. Adding 10 lines of UI spec (dark theme, FAB, toast notifications, keyboard shortcuts) transformed the output. CoDD faithfully expands what you write. It won't invent what you don't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI laziness is real and predictable.&lt;/strong&gt; Without quality gates, roughly 15-20% of generated design documents contain TODOs or placeholder sections. The validate step catches all of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "wave" abstraction matters.&lt;/strong&gt; Generating all design docs in one shot produces inconsistencies. Generating them in dependency order, with upstream docs as context, produces documents that actually reference each other correctly.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;codd-dev
codd init &lt;span class="nt"&gt;--requirements&lt;/span&gt; spec.md
codd plan &lt;span class="nt"&gt;--init&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repo is here: &lt;a href="https://github.com/yohey-w/codd-dev" rel="noopener noreferrer"&gt;github.com/yohey-w/codd-dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CoDD is early (v1.1.0, ~900 weekly PyPI downloads), but the pipeline works end-to-end. The 37-line spec to working TypeScript app isn't a demo — it's the actual workflow I use.&lt;/p&gt;

&lt;p&gt;If Terraform taught us that infrastructure belongs in code, maybe it's time to accept that AI workflows do too.&lt;/p&gt;

&lt;p&gt;What does your AI development workflow look like? Is it reproducible?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Prompt Context Harness. I Did All Three. Just Hand It Requirements. CoDD — Coherence-Driven Development</title>
      <dc:creator>yohey-w</dc:creator>
      <pubDate>Sun, 29 Mar 2026 03:20:59 +0000</pubDate>
      <link>https://forem.com/yohey-w/codd-coherence-driven-development-what-happens-after-spec-first-514f</link>
      <guid>https://forem.com/yohey-w/codd-coherence-driven-development-what-happens-after-spec-first-514f</guid>
      <description>&lt;h2&gt;
  
  
  The Problem Nobody Solved
&lt;/h2&gt;

&lt;p&gt;Over the past two years, AI-assisted development went through three methodology shifts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Engineering&lt;/strong&gt; (2023-2024) — How to ask AI the right question&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Engineering&lt;/strong&gt; (2024-2025) — How to give AI the right background knowledge (&lt;a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents" rel="noopener noreferrer"&gt;Anthropic's take&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Harness Engineering&lt;/strong&gt; (2025-2026) — How to constrain AI with rules, hooks, and guardrails (&lt;a href="https://www.agent-engineering.dev/article/harness-engineering-in-2026-the-discipline-that-makes-ai-agents-production-ready" rel="noopener noreferrer"&gt;coined by Mitchell Hashimoto&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I went through all three. I run a multi-agent system with 10 AI agents operating as a feudal Japanese military hierarchy (yes, really — &lt;a href="https://github.com/yohey-w/multi-agent-shogun" rel="noopener noreferrer"&gt;details here&lt;/a&gt;). Anthropic's &lt;a href="https://www.anthropic.com/research/building-effective-agents" rel="noopener noreferrer"&gt;Building Effective Agents&lt;/a&gt; paper showed that the most effective agent implementations are simple, composable patterns. That philosophy runs through everything I built. After implementing every methodology on the list, I found a problem none of them address — and built a tool to solve it. The result: on a client LMS project, &lt;strong&gt;I handed AI requirements and constraints. It generated 18 design docs, all code, all tests. When design decisions changed mid-project, nothing broke.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens when something changes mid-development?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's not just "requirements change." During any real project, things shift constantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requirements get added or modified — which design docs are affected?&lt;/li&gt;
&lt;li&gt;You revise the API design — what about the calling code and tests?&lt;/li&gt;
&lt;li&gt;Database schema changes — are your migrations safe? What about RLS policies?&lt;/li&gt;
&lt;li&gt;Tech stack decision changes — test strategy and infra design both break&lt;/li&gt;
&lt;li&gt;A new constraint surfaces — how far does the ripple go?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prompt engineering doesn't answer this. Context engineering doesn't answer this. Harness engineering doesn't answer this. They're all about &lt;strong&gt;"how to make AI build things."&lt;/strong&gt; None of them address &lt;strong&gt;"how to keep things coherent when something changes."&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Context Engineering Ceiling
&lt;/h2&gt;

&lt;p&gt;But there's a deeper issue worth unpacking. Context engineering's core tool is the persistent context file — CLAUDE.md, AGENTS.md, instructions. One file, all the background knowledge, always loaded.&lt;/p&gt;

&lt;p&gt;That works for small projects. &lt;strong&gt;What happens when the project outgrows a single context window?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Requirements, system design, API specs, database design, test strategy, deployment config — you can't fit all of that into one file. And what overflows the context window is invisible to the AI. Invisible means nonexistent.&lt;/p&gt;

&lt;p&gt;The architectural answer is &lt;strong&gt;structured design documents&lt;/strong&gt; — which I'll introduce later in this post.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Decompose knowledge into structured documents&lt;/strong&gt; — not one monolith file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontmatter declares what to read&lt;/strong&gt; — the dependency graph identifies relevant docs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Load only what's needed&lt;/strong&gt; — impact analysis tells you exactly which docs are affected
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt Engineering   → Cram everything into one prompt
Context Engineering  → Write everything into one persistent file (has limits)
???                  → Structured doc set + dependency graph → load only what's relevant
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If CLAUDE.md is "everything in one place," structured design docs are &lt;strong&gt;"the right context at the right time."&lt;/strong&gt; Keep reading to see what fills the &lt;code&gt;???&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Landscape: Everyone Says "Spec First"
&lt;/h2&gt;

&lt;p&gt;The "spec-driven" space is growing fast:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/github/spec-kit" rel="noopener noreferrer"&gt;Spec Kit&lt;/a&gt;&lt;/strong&gt; (GitHub official, 83k+ stars) — Write specs first, then generate code. Extensions include V-Model, Verify, Sync. &lt;a href="https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/" rel="noopener noreferrer"&gt;GitHub Blog&lt;/a&gt; declares that "code serves specifications," not the other way around.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Fission-AI/OpenSpec" rel="noopener noreferrer"&gt;OpenSpec&lt;/a&gt;&lt;/strong&gt; (35k+ stars) — Artifact dependency graphs and &lt;code&gt;/opsx:verify&lt;/code&gt;. Positions itself as the lightweight alternative to Spec Kit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Conductor&lt;/strong&gt; — Persistent Markdown for plan-before-build with Automated Reviews.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/mkhrdev/cc-spec-driven" rel="noopener noreferrer"&gt;cc-spec-driven&lt;/a&gt;&lt;/strong&gt; — Claude Code plugin with bidirectional dependency tracking and quick impact analysis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of them agree: &lt;em&gt;write specs first.&lt;/em&gt; And all of them share the same blind spot:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;None of them tell you what to do when the spec changes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They teach you how to start. They don't teach you how to keep going.&lt;/p&gt;




&lt;h2&gt;
  
  
  CoDD: Coherence-Driven Development
&lt;/h2&gt;

&lt;p&gt;So I built it. Nobody else was solving this, so I did.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CoDD — Coherence-Driven Development.&lt;/strong&gt; A methodology and CLI tool for maintaining design coherence when requirements change.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;codd-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CoDD sits as &lt;strong&gt;Layer 3 of harness engineering&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Harness (CLAUDE.md, Hooks, Skills)  ← Rules, guardrails, workflow
  └─ CoDD (methodology)             ← Operates within the harness
       └─ Design docs (docs/*.md)   ← Artifacts CoDD generates and maintains
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It does three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build a dependency graph&lt;/strong&gt; — Declare dependencies between design artifacts via Markdown frontmatter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyze change impact&lt;/strong&gt; — When anything changes, trace the graph to identify what's affected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintain coherence&lt;/strong&gt; — AI updates the affected docs, code, and tests
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Build the dependency graph from frontmatter&lt;/span&gt;
codd scan

&lt;span class="c"&gt;# See what's affected by your last commit&lt;/span&gt;
codd impact
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Two commands to answer "what broke?"&lt;/p&gt;




&lt;h2&gt;
  
  
  Vibe Coding vs Harness Engineering vs CoDD
&lt;/h2&gt;

&lt;p&gt;Andrej Karpathy &lt;a href="https://x.com/karpathy/status/1886192184808149383" rel="noopener noreferrer"&gt;coined "vibe coding"&lt;/a&gt; in February 2025 — "see things, say things, run things, and vibe." Building without understanding the code. Here's how the three approaches compare across evaluation axes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Axis&lt;/th&gt;
&lt;th&gt;Vibe Coding&lt;/th&gt;
&lt;th&gt;Harness Engineering (existing)&lt;/th&gt;
&lt;th&gt;CoDD&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Initial speed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Excellent. "Build this" and go&lt;/td&gt;
&lt;td&gt;Good after setup&lt;/td&gt;
&lt;td&gt;Slower. Design docs come first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Change resilience&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Poor. Rebuild from scratch&lt;/td&gt;
&lt;td&gt;Moderate. Guardrails exist, but humans trace impact&lt;/td&gt;
&lt;td&gt;Excellent. Dependency graph traces it automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Design traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None. Nobody knows why it's built this way&lt;/td&gt;
&lt;td&gt;Partial. Rules in CLAUDE.md&lt;/td&gt;
&lt;td&gt;Full. Frontmatter declares all dependencies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Setup cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zero&lt;/td&gt;
&lt;td&gt;Medium. Hooks, CLAUDE.md, MCP config&lt;/td&gt;
&lt;td&gt;Medium. Init + frontmatter in design docs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Large projects&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Breaks down&lt;/td&gt;
&lt;td&gt;Manageable with rules&lt;/td&gt;
&lt;td&gt;Scales via dependency graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI runaway risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High. AI builds the wrong thing perfectly&lt;/td&gt;
&lt;td&gt;Moderate. Guardrails constrain&lt;/td&gt;
&lt;td&gt;Low. Divergence from design is detectable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best fit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Prototypes, throwaway code&lt;/td&gt;
&lt;td&gt;Mid-size steady-state projects&lt;/td&gt;
&lt;td&gt;Projects where things keep changing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Vibe coding isn't bad.&lt;/strong&gt; It's perfect for prototypes. Existing harness engineering works fine for stable requirements.&lt;/p&gt;

&lt;p&gt;The question is what happens in &lt;strong&gt;real projects where things keep changing&lt;/strong&gt; — requirements, API designs, database schemas, tech decisions. Vibe coding says "rebuild." Existing harness says "a human tracks the impact." CoDD says "the graph already knows."&lt;/p&gt;

&lt;p&gt;Want speed? Vibe code. Want durability? CoDD. Want both? Prototype with vibe, build with CoDD.&lt;/p&gt;




&lt;h2&gt;
  
  
  Core Philosophy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Derive, Don't Configure
&lt;/h3&gt;

&lt;p&gt;CoDD's central principle: &lt;strong&gt;if you know the upstream, the downstream is self-evident.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If &lt;code&gt;system_design.md&lt;/code&gt; says "Next.js + Supabase," the test strategy is vitest + Playwright. No config file needed. Architecture determines testing. Always.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;system_design.md → "Next.js + Supabase"
→ Test strategy: vitest (unit) + Playwright (E2E). Zero config.

system_design.md → "FastAPI + Python"
→ Test strategy: pytest + httpx. Zero config.

system_design.md → "CLI tool in Go"
→ Test strategy: go test. Zero config.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The world has too many config files. CoDD doesn't scatter configuration. &lt;strong&gt;Requirements + constraints in, design + implementation + tests out.&lt;/strong&gt; The AI derives everything from the upstream artifacts and current best practices.&lt;/p&gt;

&lt;h3&gt;
  
  
  V-Model, Finally Achievable
&lt;/h3&gt;

&lt;p&gt;The V-Model is the ideal development model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Left side (Design)              Right side (Verification)
Requirements              ←→  System Test / E2E
  System Design           ←→  Integration Test
    Detailed Design (API)  ←→  Unit Test
      Implementation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It breaks down in practice because &lt;strong&gt;humans can't track which documents to update when requirements change.&lt;/strong&gt; CoDD automates that change propagation. That's what makes the V-Model sustainable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Waves — Execution Order Along the Dependency Graph
&lt;/h3&gt;

&lt;p&gt;CoDD processes design documents in units called "Waves." Changes propagate from upstream to downstream like waves through the dependency graph — that's the name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Wave 1: Requirements (no dependencies — the origin)
Wave 2: System Design (depends on requirements)
Wave 3: Detailed Design / API Design (depends on system design)
Wave 4: Test Strategy / Infrastructure (depends on detailed design)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Waves work in two directions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generation (upstream → downstream)&lt;/strong&gt; — You can't write system design before requirements are defined. You can't write API design before system design exists. Wave 1 gets finalized first, then Wave 2, and so on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Impact analysis (downstream → upstream lookup)&lt;/strong&gt; — When DB design changes, trace the graph in reverse: "what depends on this?" to identify everything affected.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both directions require &lt;strong&gt;the right order.&lt;/strong&gt; Waves derive that order automatically from the dependency graph.&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontmatter as Single Source of Truth
&lt;/h3&gt;

&lt;p&gt;Dependencies are declared in Markdown frontmatter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;codd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;node_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;design:api-design"&lt;/span&gt;
  &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;design:system-design"&lt;/span&gt;
      &lt;span class="na"&gt;relation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;derives_from&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;req:lms-requirements-v2.0"&lt;/span&gt;
      &lt;span class="na"&gt;relation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;implements&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;graph.db&lt;/code&gt; is a cache. &lt;code&gt;codd scan&lt;/code&gt; regenerates it every time. The frontmatter is the source of truth. No dual-maintained config files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important: humans don't write this frontmatter manually. AI does.&lt;/strong&gt; The design docs, the frontmatter, the dependency declarations — AI generates all of it. Humans define requirements and constraints. That's it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Commands
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;codd init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Stable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Project initialization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;codd scan&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Stable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build dependency graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;codd impact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Stable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Change impact analysis (Green/Amber/Gray bands)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;codd validate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Alpha&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Frontmatter consistency check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;codd generate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Experimental&lt;/td&gt;
&lt;td&gt;Generate design docs in Wave order&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;codd plan&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Experimental&lt;/td&gt;
&lt;td&gt;Wave execution status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;codd verify&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Experimental&lt;/td&gt;
&lt;td&gt;V-Model verification (type check + test → design traceability)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;codd implement&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Experimental&lt;/td&gt;
&lt;td&gt;Design → code generation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Impact analysis returns three confidence bands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Green&lt;/strong&gt; — High confidence. Definitely affected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amber&lt;/strong&gt; — Medium confidence. Check needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gray&lt;/strong&gt; — Low confidence. Possible indirect impact.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  CLI vs Claude Code Skills
&lt;/h2&gt;

&lt;p&gt;CoDD has &lt;strong&gt;two usage modes&lt;/strong&gt;: run the CLI directly, or integrate as Claude Code Skills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLI (works with any editor)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codd scan
codd impact
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run from the terminal. No editor or harness dependency. Works with Cursor, Copilot, or anything else. Good for CI/CD pipelines too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code Skills (recommended: integrates into the dev loop)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CoDD ships with slash-command Skills for Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/codd-init      → Project initialization
/codd-scan      → Build dependency graph
/codd-impact    → Change impact analysis
/codd-validate  → Frontmatter consistency check
/codd-generate  → Generate design docs in Wave order
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With Skills, building the same TaskFlow task management app looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;You:  /codd-init
      → Claude: codd init --project-name "taskflow" --language "typescript" \
                  --requirements spec.txt

You:  /codd-generate
      → Claude: codd generate --wave 2 --path .
      → Claude reads every generated doc, checks scope, validates frontmatter
      → "Wave 2 design docs reviewed. Proceed to Wave 3?"

You:  yes

You:  /codd-generate
      → Claude: codd generate --wave 3 --path .

You:  /codd-scan
      → Claude: codd scan --path .
      → "7 documents, 15 edges. No warnings."

You:  (edit requirements — add SSO + audit logging)

You:  /codd-impact
      → Claude: codd impact --path .
      → Green Band: auto-updates system-design, api-design, db-design, auth-design
      → Amber Band: "test-strategy is affected. Update it?"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key difference is &lt;strong&gt;HITL (Human-in-the-Loop) gates&lt;/strong&gt; are automatic. &lt;code&gt;/codd-generate&lt;/code&gt; pauses between waves for approval. &lt;code&gt;/codd-impact&lt;/code&gt; follows the Green/Amber/Gray protocol — auto-updating safe changes, asking before risky ones. You just make decisions.&lt;/p&gt;

&lt;p&gt;Now combine Skills with hooks for &lt;strong&gt;zero-maintenance coherence&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;.claude/settings.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"PostToolUse"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Edit|Write"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"async"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cd &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;$CLAUDE_PROJECT_DIR&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;&amp;amp; codd scan --path ."&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PostToolUse hook&lt;/strong&gt;: Every time AI edits a file, &lt;code&gt;codd scan&lt;/code&gt; runs automatically. The dependency graph stays current.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pre-commit hook&lt;/strong&gt;: Wire &lt;code&gt;codd validate&lt;/code&gt; into git hooks so broken coherence can't be committed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Once you add that hook, you never run &lt;code&gt;codd scan&lt;/code&gt; manually again.&lt;/strong&gt; Graph maintenance becomes invisible. Your workflow is just: edit files normally, run &lt;code&gt;/codd-impact&lt;/code&gt; when you want to know what's affected. That's it.&lt;/p&gt;

&lt;p&gt;CLI is the manual tool. Skills are the integrated workflow. CLI alone is enough, but Skills + hooks mean &lt;strong&gt;coherence is maintained without you ever thinking about it.&lt;/strong&gt; Set it once. The hook does the rest.&lt;/p&gt;

&lt;p&gt;Full setup details: &lt;a href="https://github.com/yohey-w/codd-dev/blob/main/docs/claude-code-setup.md" rel="noopener noreferrer"&gt;Claude Code x CoDD Setup Guide&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5-Minute Demo — See CoDD in Action
&lt;/h2&gt;

&lt;p&gt;We'll build &lt;strong&gt;TaskFlow&lt;/strong&gt;, a task management app. Write requirements in &lt;strong&gt;plain text&lt;/strong&gt;, let CoDD + AI handle the rest.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Write requirements (any format — txt, md, doc)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# TaskFlow — Requirements

## Functional Requirements
- User auth (email + Google OAuth)
- Workspace management (teams, roles, invites)
- Task CRUD with assignees, labels, due dates
- Real-time updates (WebSocket)
- File attachments (S3)
- Notification system (in-app + email)

## Constraints
- Next.js + Prisma + PostgreSQL
- Row-level security for workspace isolation
- All API endpoints rate-limited
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save as &lt;code&gt;spec.txt&lt;/code&gt;. No special formatting needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Initialize CoDD
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;codd-dev
&lt;span class="nb"&gt;mkdir &lt;/span&gt;taskflow &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;taskflow &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git init
codd init &lt;span class="nt"&gt;--project-name&lt;/span&gt; &lt;span class="s2"&gt;"taskflow"&lt;/span&gt; &lt;span class="nt"&gt;--language&lt;/span&gt; &lt;span class="s2"&gt;"typescript"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--requirements&lt;/span&gt; spec.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CoDD adds frontmatter automatically — &lt;code&gt;node_id&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, dependency metadata. You never touch it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: AI generates design docs
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codd generate &lt;span class="nt"&gt;--wave&lt;/span&gt; 2   &lt;span class="c"&gt;# System design + API design&lt;/span&gt;
codd generate &lt;span class="nt"&gt;--wave&lt;/span&gt; 3   &lt;span class="c"&gt;# DB design + Auth design&lt;/span&gt;
codd generate &lt;span class="nt"&gt;--wave&lt;/span&gt; 4   &lt;span class="c"&gt;# Test strategy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;wave_config&lt;/code&gt; is auto-generated from your requirements. Each design doc gets CoDD frontmatter — all derived, nothing manual.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Build the graph → Change requirements → See impact
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codd scan
&lt;span class="c"&gt;# → 7 docs, 15 edges, zero config&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PM asks for SSO and audit logging. Open &lt;code&gt;docs/requirements/requirements.md&lt;/code&gt; and add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Additional Requirements (v1.1)
- SAML SSO (enterprise customers)
- Audit logging (record &amp;amp; export all operations)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file and ask CoDD what's affected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codd impact    &lt;span class="c"&gt;# detects uncommitted changes automatically&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Changed files: 1
&lt;span class="p"&gt;  -&lt;/span&gt; docs/requirements/requirements.md → req:taskflow-requirements

&lt;span class="gu"&gt;## Green Band (high confidence, auto-propagate)&lt;/span&gt;
| Target                  | Depth | Confidence |
|-------------------------|-------|------------|
| design:system-design    | 1     | 0.90       |
| design:api-design       | 1     | 0.90       |
| detail:db-design        | 2     | 0.90       |
| detail:auth-design      | 2     | 0.90       |

&lt;span class="gu"&gt;## Amber Band (must review)&lt;/span&gt;
| Target                  | Depth | Confidence |
|-------------------------|-------|------------|
| test:test-strategy      | 2     | 0.90       |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2 lines changed → 6 out of 7 docs affected.&lt;/strong&gt; Green band: AI auto-updates. Amber: human reviews. You know exactly what to fix before anything breaks.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real-World Usage
&lt;/h2&gt;

&lt;p&gt;I've used CoDD on a production web app — 18 design docs connected by a dependency graph.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every design doc, every line of code, every test was generated by AI following CoDD. I defined requirements and constraints. That's it.&lt;/strong&gt; You can add HITL (human-in-the-loop) checkpoints at each Wave if you want, or let AI run end-to-end and review only the final output. Your call.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/
├── requirements/       # Requirements (plain text — the only human input)
├── design/             # System design (6 files, AI-generated)
├── detailed_design/    # Detailed design (4 files, AI-generated)
├── governance/         # ADRs (3 files)
├── plan/               # Implementation plan
├── test/               # Acceptance criteria, test strategy
├── operations/         # Runbooks
└── infra/              # Infrastructure design
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;18 Markdown files connected by a dependency graph.&lt;/p&gt;

&lt;p&gt;As development progressed, design decisions naturally evolved. The initial RLS approach for tenant isolation needed refinement as detailed design revealed better table structures. That changed the DB design, which changed the API design, which changed the test strategy.&lt;/p&gt;

&lt;p&gt;This isn't a "requirements change." &lt;strong&gt;It's the normal process of refining decisions as you learn more.&lt;/strong&gt; It happens on every project.&lt;/p&gt;

&lt;p&gt;Without CoDD, a human tracks which of 18 interconnected docs need updating. With CoDD, &lt;code&gt;codd impact&lt;/code&gt; lists the affected artifacts with confidence bands. AI auto-updates Green band docs and surfaces Amber band items for human review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Changes stop being scary.&lt;/strong&gt; That's CoDD's real value. When the cost of changing a design decision drops, you can make provisional decisions early and refine them later — without the design rotting from stale assumptions that nobody updated.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;scan&lt;/code&gt;, &lt;code&gt;impact&lt;/code&gt;, and &lt;code&gt;validate&lt;/code&gt; are stable and production-tested. &lt;code&gt;generate&lt;/code&gt;, &lt;code&gt;verify&lt;/code&gt;, and &lt;code&gt;implement&lt;/code&gt; are experimental. CoDD is public alpha today.&lt;/p&gt;

&lt;p&gt;Near-term roadmap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Typed dependency relations&lt;/strong&gt; — &lt;code&gt;requires&lt;/code&gt;, &lt;code&gt;affects&lt;/code&gt;, &lt;code&gt;verifies&lt;/code&gt;, &lt;code&gt;implements&lt;/code&gt; as distinct relation types&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brownfield support (&lt;code&gt;codd extract&lt;/code&gt;)&lt;/strong&gt; — Reverse-generate dependency-graphed design docs from existing codebases. Bring CoDD to legacy code maintenance and enhancement, not just greenfield&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;codd verify&lt;/code&gt; completion&lt;/strong&gt; — Automated coherence verification across design ↔ code ↔ tests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-harness integration examples&lt;/strong&gt; — Documented workflows for Claude Code, Copilot, and Cursor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Long-term, CoDD aims to stand alongside TDD, BDD, and DDD as a development methodology. Not test-driven. Not behavior-driven. Not domain-driven. &lt;strong&gt;Coherence-driven.&lt;/strong&gt; Development where anything can change without the design falling apart.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Evolution, Summarized
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Methodology&lt;/th&gt;
&lt;th&gt;Problem it solves&lt;/th&gt;
&lt;th&gt;Era&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Prompt Engineering&lt;/td&gt;
&lt;td&gt;How to craft AI input&lt;/td&gt;
&lt;td&gt;2023-2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context Engineering&lt;/td&gt;
&lt;td&gt;How to manage AI's background knowledge&lt;/td&gt;
&lt;td&gt;2024-2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Harness Engineering&lt;/td&gt;
&lt;td&gt;How to constrain AI execution&lt;/td&gt;
&lt;td&gt;2025-2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;　└─ &lt;strong&gt;CoDD&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;How to maintain coherence when things change&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2026+&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;CoDD is part of harness engineering — the layer nobody built yet. Existing harness engineering solves "how do I constrain AI execution." CoDD solves "how do I keep what AI built from falling apart," within the same harness framework.&lt;/p&gt;

&lt;p&gt;Spec Kit and OpenSpec answer &lt;em&gt;"how do I start?"&lt;/em&gt;&lt;br&gt;
CoDD answers &lt;em&gt;"how do I keep going when things change?"&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;codd-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/yohey-w/codd-dev" rel="noopener noreferrer"&gt;GitHub: yohey-w/codd-dev&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;So — what does your project do when things change mid-development?&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I also write about multi-agent systems and AI development in Japanese on &lt;a href="https://zenn.dev/shio_shoppaize" rel="noopener noreferrer"&gt;Zenn&lt;/a&gt;. If you read Japanese (or are curious enough to translate), the CoDD deep-dive is &lt;a href="https://zenn.dev/shio_shoppaize/articles/shogun-codd-coherence" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>contextengineering</category>
      <category>specdriven</category>
      <category>claudecode</category>
    </item>
  </channel>
</rss>
