import type { Metadata } from "next"; import { ButtonLink, Container, SectionHeader, TerminalCard, } from "@/src/components/site"; import { ProcessStepCard } from "@/src/components/process/ProcessStepCard"; import { PROCESS_STEPS } from "@/src/components/process/processSteps"; import { SAMPLE_DELIVERY_REPORT } from "@/src/components/process/sampleDeliveryReport"; import { formatDeliveryReport } from "@/src/domain/deliveryReport"; const TITLE = "Process: AI speed, engineering proof"; const DESCRIPTION = "How I ship AI-accelerated code that holds up: spec first, red, green, mutation check and a delivery report with exact commands and results on every pull request."; export const metadata: Metadata = { title: TITLE, description: DESCRIPTION, alternates: { canonical: "/process" }, openGraph: { title: TITLE, description: DESCRIPTION, url: "/process", type: "website", }, }; const GUARDRAILS = [ { title: "Pre-commit gate", text: "Formatting and lint on staged files, then typecheck and the unit tests, run before a commit is created. Broken code does not enter history.", }, { title: "Pre-push gate", text: "Coverage runs before a push leaves my machine, and the mutation check runs when the domain logic changed. The remote only receives green work.", }, { title: "CI gates the deploy", text: "On client projects the same checks run again in CI, and a deploy only starts when they pass. My machine is not the only line of defense.", }, { title: "Tests are never weakened", text: "If a test blocks a change, I do not skip, loosen or delete it to get green. If the test is wrong, I tell you why and the spec changes with your agreement.", }, ] as const; const reportLines = formatDeliveryReport(SAMPLE_DELIVERY_REPORT); export default function Page() { return (

The five steps

One running example: parsing an availability, meaning a date and weekly hours. The date 2026-02-30 must be rejected, 2028-02-29 must be accepted, and 168 hours is the upper boundary of a week.

    {PROCESS_STEPS.map((step, index) => ( ))}
{reportLines.map((line) => (

{line}

))}

Download the sample report (sample-delivery-report.md)

What I do when tests are weak or missing

AI-built code often arrives with few tests, or with tests that only repeat the implementation. I do not start by rewriting. I write the expected behavior as cases for the parts that matter most, run them against the existing code, and let the failures show what is really broken. Then I add a mutation baseline so you can see which tests would not notice a bug.

Why mutation testing

Coverage tells you which lines ran during the tests. It does not tell you whether the tests would notice a bug in those lines. Mutation testing changes the code on purpose and checks that a test fails. That is the question you care about. Coverage stays useful as a gap finder: it points at code nothing exercises. It is not a goal, and a high number alone proves little.

Two systems where I run this: a Rust and Solidity liquidation system across 7 chains, with a zero-survivor mutation gate and a coverage ratchet, and the domain core of this website, which has its own tests and mutation gate.

    {GUARDRAILS.map((item) => (
  • {item.title}

    {item.text}

  • ))}

Want this on your codebase?

A 20-minute intro call is enough to see whether this fits your team.

Book a 20-minute intro call
); }