Build

Part two

This is where a work order becomes a commit — and where most of the machine checks live. Four steps: build, hand off, ask for review, get a verdict.

04

Build, with the machine checks

Tests, linting, security scanning, dependency audit, secret scan, and an independent AI review of the change — all before anything is called done.

Developer / Writer→ a commit
05

Hand off

Writes up what changed, what was proved and how, what was skipped. Then tells the Principal one short line.

Developer / Writer→ a report file
06

Ask for review

Nothing reviews itself. A finished report waits until the Principal asks.

Principal/review
07

Verdict

An Architect session re-runs the checks rather than trusting the report, proves the security rule still holds by deliberately breaking it in a copy, and checks something nobody was asked to check. Only the strongest models available run this step, and never the session that built the item — a verdict's job is to disprove the builder, the last check before work is accepted, and it can't do that from inside the session it's grading.

Architect→ recorded verdict

Not always a straight line

Most builds run all four steps smoothly: build, hand off, ask for review, get a verdict of conforms, done. But the path isn't required to be that clean, and the rule for what happens when it isn't is the same rule that governs everything else here — a Developer never resolves something outside their own spec.

If a Developer hits a real issue mid-build — the spec is ambiguous, the fix needs a file they don't own, something looks wrong that nobody asked them to check — they don't decide it themselves. They document exactly what they found and why they stopped, close out their own report as usual, and hand off. That question now belongs to the Architect, not the Developer: it gets answered at review, where the Architect either resolves it directly, or writes the follow-up work as its own item. Either way the verdict says so explicitly — conforms-with-deviations, or kicked-back with exactly what's owed — never a silent "looked fine to me."

That's the same escalation rule from Define's "every seat's rulebook" — guessing is not part of any seat's job — applied at the one point in the loop where a session is most tempted to just fix the thing in front of it and keep moving.

Three artifacts, three different questions

They look redundant and aren't. The work order says what was asked for. The report says what was actually done and how it was proved. The verdict says what an independent reviewer made of it. Losing any one of them loses a distinct thing.

What the Principal actually types

The commands

These remove clerical load, never judgment. They don't decide what to build, what's safe to ship, or whether something works.

CommandWhat it doesLeaves behind
/projectplanState of everything, plus which items can safely run at the same time
/nextdevBriefs a Developer item — summary on screen, full detail to a filea dispatch note
/nexttwThe same, for the Tech Writera dispatch note
/buildA fresh session picks the item up and takes the role the note namesa commit
/reviewThe strongest available model reviews a finished build — never the session that built ita verdict
/acceptRecords what was tested and what happenedan acceptance record
/checkpointMakes state durable so a session can be closed safelycommitted files

In action

One item, start to finish

A real piece of work from this week: T20, closing a gap in the settings leak-guard's own test coverage. The guard's formatter had just been unit-tested thoroughly (a separate item, T3), but nothing yet proved the guard's pytest.fail actually fires when settings genuinely drift. Here is every keystroke.

Principal — Architect session

/projectplan

Shows everything open, who holds what, and which items can safely run at the same time.

Principal — Architect session

/nextdev T20

The Architect writes the full briefing to a file, then reports back:

T20 — the leak guard's trigger is untested. Developer, 0.75h.

Building: tests proving the guard's pytest.fail genuinely fires on real settings drift, extending the existing formatter tests.

Touches: tests/test_settings_leak_guard.py only — extend it, don't rewrite it. tests/conftest.py is read-only.

Must not break: the eleven existing formatter tests keep passing.

Not doing: the guard's own registration — whether pytest wires the fixture in at all — isn't in scope here.

Run: /build T20 in a fresh session.

This is the approval moment. Five lines, and the two that matter are must not break and not doing — where a wrong instruction is visible before any code exists.

Principal — new session

/build T20

Six characters. The session reads the briefing from disk, takes the Developer role because the briefing says so, and confirms scope in three lines before touching anything.

Then it builds: three new tests, each proved by mutation against a scratch copy — the exact disarm that motivated the spec (pytest.fail silently mutated to pass) makes one specific test fail, and several more independent mutants each land on exactly one test. All fourteen tests pass on the real file. It writes up what it did and says: "T20 done, `772aa45`."

Principal — Architect session

/review T20

The Architect reads the write-up, then ignores it and checks for itself — re-runs all fourteen tests, reproduces the mutants in a scratch copy, and looks at one thing nobody was asked to look at. That last habit is where the best findings come from.

Verdict: conforms. And the habit paid off here — the thing nobody was asked to check turned out to be real: the guard's own registration (whether pytest actually wires the fixture in for every test) was untested by either this build or the one before it. Raised as a new item, T25, rather than fixed on the spot — deciding scope is Architect work, and a review isn't the place to expand one.

The Principal typed four commands and one ID. Nothing was copied between windows, nothing was decided without him, and every step left a committed file behind — so if any session had died mid-way, the next one could pick up exactly where it stopped.

This particular item's story stops at the verdict: T20 is a test-only change with no page or button a person can click, so it was never separately exercised in the test environment and never entered the business-acceptance log. Not every item needs to — see Not Done for the one that has gone all the way through business testing.

Does it actually work

What each safeguard catches — and what it doesn't

Eleven independent checks stand between a session's first keystroke and anything reaching a server. Listing what each one catches and stopping there would be a brochure. The column that matters is the one on the right.

SafeguardCatchesDoes not catch
Architect reviewConformance to spec, proven by mutationWhether the spec was right
Qcoder LLM reviewDefects in .pyTemplates, workflows, shell, config — no review at all
pytest -q on every push919 testsNothing end-to-end
ruff check .Lint and style
bandit -c pyproject.tomlInsecure Python patternsExcludes tests/
pip-auditVulnerable dependencies
scan_secrets.py + pre-commit hookCommitted secretsValues that aren't quoted string literals
Both deploy jobs needs: all five gatesAnything deploying un-green
promote.sh green checkNon-green shas — and refuses on "no checks at all" and "still running", with three distinct messages
environment: production reviewerAn unreviewed production releaseIt is one person approving their own release
Prod fast-forwards to the SIT tip onlyNew code entering prod without passing SIT

Each safeguard's scope is listed here for reference, next to what it catches: together, static analysis, dependency and secret scanning, spec conformance, and the CI-to-deploy path cover the full pipeline from commit to release.

Two of these are worth calling out as genuinely good, without hedging. The green check doesn't just look for a failure — it treats "no checks have run at all" as a refusal too, which is exactly the case a naive "nothing failed" test gets wrong. And both deploy jobs require all five CI gates before they'll run — SIT is protected by exactly the same bar as production, not a lighter one.

The last three rows — the green check, the human reviewer, and the SIT-tip rule — are the promotion path's own safeguards. Deploy covers the full path a commit takes from SIT into production; this table is the full reference for all eleven.

Test coverage and acceptance

How robust is the testing?

919 tests, eleven independent safeguards, five required CI jobs, review-by-mutation, and a promotion path that fails closed in three directions.

Test authorship follows the same rule as the rest of the build: whoever builds a spec writes the tests that pin it, and the Architect verifies both by mutation — breaking the code and confirming the test catches the break — rather than reading the test and taking it on faith. Business-level acceptance happens separately: a person actually uses what shipped, and that's recorded per release (see Deploy for the count).