v1.83.0 ·
The test results nobody ran
The agent that wrote the tests also wrote the file saying they passed. That was the whole check.
Before a piece of work leaves testing, AIDLC wants a test-results.md and wants every acceptance criterion named in some test file. It never ran a single test. An agent could cite a criterion in an empty test, write "all tests pass", and move on. With autopilot running overnight, nobody is watching.
What changed
Now the tool runs the tests, not the agent. You name the test command once in .aidlc/config.yaml and switch the check on with assurance: { default: verified }. Then:
aidlc verify <instance>
runs that command and writes a receipt. It records the commit, whether the tree had uncommitted changes, a hash of the command and of its output, the exit code and how long it took. Leaving testing now needs a receipt that passed, on a clean tree, for the current command, with no code changed since. A results file that says "all pass" no longer gets a failing suite through.
In CI, aidlc gate <instance> testing --verify reuses a matching receipt or runs the command itself.
Two choices
The receipt keeps no output. Test output can print secrets, and this file gets committed. A hash is enough to tell two runs apart.
The harder one was when a receipt still counts. "It must name the current commit" sounds right, and breaks the moment you commit the receipt, because that makes a new commit. So a receipt stays valid while the only files changed since are the lifecycle's own notes for that piece of work. Touch any code, committed or not, and it goes stale. Checking a receipt never runs the suite, so moving between phases stays fast however slow your tests are.
What it does not do
It is off unless you ask for it. Projects without the setting behave exactly as before.
And it does not stop an agent from writing a receipt by hand. That guard is the next piece, and the docs say so. This release cost about $10 to build.