window 2026-08-20 → 2026-09-22 commits 47 releases v0.1.0 → v0.1.7 mode definition track live · delivery track spec'd

A gated delivery pipeline, built under its own gates — and reviewed by a second model family

A project-management case study. One person owned scope, quality, and risk for an idea-to-code orchestration system — directing AI agents as both the delivery resource and, by the end, the adversarial reviewer. The system was built under the same discipline it enforces, and every claim on this page traces to a git commit or a document in the project repository.

66automated tests
8gated releases
9pipeline stages
7/7predictions confirmed
3smoke runs · 2 model families
7standing lessons

§1 · The project

What was built, and under what constraints

The product: Conductor — a Claude Code plugin that runs software products from idea to code through enforced quality gates. Its Definition track is live: a nine-stage document pipeline (concept → research → strategy → definition → PRD → UX → system specs → technical design → backlog) where every document is approved by a human at a closed-question gate, every approval binds to a content hash, and any post-approval edit halts the pipeline as detected drift. Seventeen document templates, five gate skills, five zero-dependency scripts, and a cross-model review harness.

The constraints: a single owner with finite session time; a deliverable whose entire value is trustworthiness — a gate system that can be talked around is worse than none — and a delivery resource (AI engineering agents) that is fast, tireless, and confidently wrong just often enough that nothing it reports can be accepted without evidence. The recursive twist: the product being built is a management system, so it was built under its own philosophy — gates, ledgers, adversarial review, evidence before claims — and every place the discipline slipped became a documented lesson in the product itself.

The delivery model: AI agents on both sides of the gate

  1. Spec-gated construction. The system began as a brainstormed spec and a 13-task implementation plan executed by fresh-context subagents — one implementer per task, an independent review after every task, a whole-branch review at the end. That final review caught a critical defect in the plan itself (a decision log that would have tripped its own drift detector) before first use.
  2. Verification runs with pre-registered predictions. Before smoke run 2, seven failure predictions were written down from a desk read of the prose. All seven were confirmed live — proof that the cheapest verification layer is reading with intent, and that predictions must be registered before the run to count.
  3. Cross-model adversarial review. A second model family (OpenAI Codex, pinned model and reasoning effort) reviews every change wave and red-teams documents at key gates. Across six engagements it caught what the authoring side structurally could not — including a false invariant whose own regression test was enforcing the error.
  4. Lessons routed to every home. Each lesson lands in the analysis record (why), the operator manual (what to type), the implementer guide (what not to reintroduce), and — wherever executable — a script or test, the only home that doesn't rely on anyone reading.

§2 · The management system

Five mechanisms, each with a paper trail

Hash-bound approvals

"Approved" means this exact text: every gate records a sha256 of the content approved. A one-byte edit afterward reads as STALE and halts the pipeline until a human re-approves — drift is caught, never absorbed.

source: scripts/validate-state.js · MANUAL §gates
Closed-question gates, paired events

Approval is a two-option question — only "Approved" opens a gate. Every approval must consume exactly one open request (pairing, never raw counts — the count form shipped once, was wrong, and is now test-banned from returning).

source: skills/advance · docs/lessons.md #1
Executable lessons

"An instruction that says check X is a missing script." The backlog contract, template citation rules, CLI behaviors, and the state schema are all enforced by the 66-test suite — including lints born directly from named failures.

source: CLAUDE.md · scripts/check-backlog.js
Verification record

An append-only table of every smoke run and review round — findings, fixes, suite counts, evidence pointers. Seven standing lessons distilled from it, one tracked through five recurrences of the same failure class.

source: docs/lessons.md, verification record
Cross-model review panel

Tier 1: every change wave gets an adversarial Codex review. Tier 2: an opt-in red-team at the strategy and PRD gates, before approval freezes the doc. Disagreement between model families is treated as signal, not noise.

source: scripts/codex-review.js · docs/reviews/

§3 · Timeline

Five weeks, six phases

Click a phase to expand its record.

AUG 18–21Design week & Session 1expand

Brainstorm → approved spec → a 13-task implementation plan → subagent-driven build with an independent review after every task. Tagged v0.1.0-session1 with 20 tests. The whole-branch review caught a Critical defect in the plan itself: the decision log was hash-bound and appended-to at every gate — it would have tripped its own drift detector at the first gate after strategy. Fixed before first use; the management system's first save was of itself.

SEP 14–16The critique gauntletexpand

Three external reviews converged: a direction-drift critique ("your gates protect documents, not direction"), a Codex mechanical review ("your trust layer is prototype-grade — the validator checks shape, not the state machine"), and the responses that reconciled them. Outcome: the roadmap was re-sequenced around a "Trust Core" — executable state transitions before visibility features — and an atomic state-file contract was chosen over an event-sourced design.

SEP 19–21Smoke run 1 & the invariant that enforced its own errorexpand

First human-driven run: 28 structured findings, headlined by a live event-log asymmetry — 7 approvals against 4 requests, re-gates skipping the request half. The fix wave then shipped a stated invariant ("request count == approval count") pinned by its own regression test — and the invariant was false, diverging during every legitimate awaiting-approval window. A cross-model re-review caught it; the replacement (per-stage pairing) is the rule today.

  • Lesson #1, verbatim: an executable invariant fails on its first honest run; a prose invariant can stay wrong forever.
SEP 21Smoke run 2 — seven predictions, seven confirmationsexpand

A deliberately hostile trim (drop the optional strategy stage) with seven failure predictions pre-registered from a desk read. All seven confirmed — including a decision log that was never created (≈80 founder decisions unlogged, silently) and an undeclared dependency the staleness graph couldn't see. Ceremony cost measured honestly for the first time: 3h35m against a 60–75 minute budget. Same-day sweep: suite 35 → 46, with new lints that catch both confirmed template classes.

SEP 22 AMThe fix-wave cycle — and the sweep that skipped itselfexpand

All six ranked fix candidates shipped across v0.1.3–0.1.5: the decision log now survives any trim, gates became closed questions, findings got a ledger, dependencies got declared. The adversarial review of that wave found the project's signature failure inside the wave: the documentation sweep ran for one commit of four and was skipped for the rest, leaving the implementer guide teaching the exact bug the wave had fixed. Separately, an independent Codex full-manifest run demonstrated the core motivation in one line: nine synthetic gates went green with zero human approvals — approval integrity is prose until the Trust Core ships.

SEP 22The reviewer reviews itselfexpand

The Codex CLI was wired in as a standing reviewer (v0.1.6) — read-only sandbox, pinned model, loud failures. Its bootstrap assignment: review its own integration diff, through the wrapper under review. It found five real defects — including a stale-report masquerade in that very wrapper (proven with a /usr/bin/true repro) and the fifth instance of the unmirrored-gate pattern. All five fixed with regression tests the same day (v0.1.7, 66 tests). The review panel validated itself by catching its own harness.

§4 · The numbers

Three views of the record

Automated test suite over time

tests passing at each pinned count · Aug 21 – Sep 22, 2026

Counts as recorded in commit messages. The long flat stretch is the critique period — design work, no code. The right-edge climb is verification converting findings into pinned behavior: 46 tests became 66 in a single day of review cycles.

Commits per working day

47 total across 7 working days · the shape of punctuated, gated delivery

Nothing lands between sessions by design — every commit belongs to a gated working session with a review cycle. The two single-commit days are documentation waves from the critique period.

Documented findings, by the verification layer that caught them

layered verification: each net catches what the others miss

Conservative counts from the verification record. The cross-model bar is the argument for the review panel: 19 findings — several invisible to same-model review by construction, including an invariant whose own test was enforcing its wrongness.

§5 · Exhibits

The artifacts themselves

Excerpts from the project's real management documents, lightly condensed.

Verification record — every round, its findings, and where they went

excerpt · docs/lessons.md · convention: an append-only row per smoke run or review round

RoundOutcomeSuite
Session 1 final reviewPlan-authored Critical caught before first use (decision-log drift bomb)20
Smoke run 128 findings · 7/4 event asymmetry found live · 6 fixes merged20 → 34
Codex re-review of run-1 fixes7 findings incl. the false count-equality invariant pinned by its own test→ 35
Smoke run 27/7 pre-registered predictions confirmed · pairing verified live35 → 46
Candidates wave + reviewsFix candidates 1–6 shipped · sweep-skipped-itself caught · 2 code defects fixed46 → 57
Codex full-manifest smokeAll 9 stages, 17 templates rendered · 9 synthetic gates went green — the Trust Core case, demonstrated—
Reviewer bootstrap (v0.1.6–7)Codex reviewed its own integration: 5 real defects, all fixed same-day57 → 66

§6 · What the record demonstrates

PM competencies, with receipts

CompetencyWhere the record shows it
Quality managementLayered verification with counted catches (smoke runs → same-model review → cross-model review → desk-read predictions); no wave ships unreviewed; 66 tests including lints born from named failures
Risk managementHash-bound approvals; a pairing invariant replacing a demonstrably false one; a backlog gate that blocks on priority inversion by explicit owner decision, not default
Process improvementSeven standing lessons distilled from a verification record; one failure class tracked through five instances across escalating detection layers until its executable fix was specified
Managing multi-vendor AI deliveryTwo model families with governed roles — canonical repo vs. independent port, pinned review model and effort, accuracy-first policy for cheaper models, and a hard rule against fabricated reviews
Evidence-based decisionsPre-registered predictions (7/7); a founder decision log for every gate-behavior change; ceremony cost measured (3h35m vs. a 75-minute guess) and fed back into the design
Communication & continuityFour-home knowledge routing (lessons · manual · implementer guide · code); an append-only verification record; a status report that prints problems before progress
Honest scope controlA "what's real today" header in the product's own manual; enforcement claims graded into four levels (detection-when-invoked ≠ prevention); visibility features deliberately re-sequenced behind the trust layer

§7 · Retrospective

An honest accounting

What worked
  • Pre-registered predictions. Seven written before the run, seven confirmed — the cheapest verification layer in the project, and the discipline that makes a desk read count as evidence.
  • Cross-model review. Six engagements, every one catching something the authoring side structurally could not — culminating in the reviewer finding real defects in its own harness on its first live run.
  • Executable over prose. The false count-invariant survived a week as prose and would have survived forever; its executable replacement would have failed on the first honest data. That asymmetry now drives the roadmap.
  • Same-day staleness sweeps. Docs contradicted by events were amended in the session that contradicted them — the manual's honesty header stayed true the entire window.
What I'd do differently
  • A prose invariant shipped wrong, with a test enforcing the error. It was authored and pinned in the same commit, unreviewed. Invariants now get adversarial review before they get tests — but that rule cost a cross-model catch to learn.
  • The knowledge sweep skipped itself — twice. Run for one commit of four, skipped for three, in the wave that wrote the sweep rule. Partial compliance is the failure mode; the fix is a commit-time mechanism, not more resolve.
  • The budget estimate was off 3×. 60–75 minutes guessed, 3h35m measured. No timing was captured in run 1 at all — the first real number arrived a month into the project.
  • Approval integrity is still prose. An independent harness drove nine gates to green with zero human approvals. The Trust Core — executable state transitions and reconciliation — exists because of that demonstration, and it is deliberately next.