Skip to content

v1.26.2 ·

Eleven reviews the gate could not see

aidlc review <instance> requirements wrote requirements.review.md. The review gate looked for findings keyed requirements.md. The two never met, so a complete adversarial review, written, parsed and summarized correctly, was invisible to the gate it was run for.

The mechanism: loadFindings keyed its index on the filename with .review.md stripped, so requirements.review.md became requirements. The gate looked up requirements.md and design.md, the names the template declares. Only the full-feature template turns the gate on, for exactly those two.

It was worse than the report said. The report asked whether any finished instance held a findings file that never counted. There were 11 files across 6 instances, every one on requirements or design, the two phases the gate covers. Eleven reviews were done and none counted. One instance, app-operational-skills, used both spellings, one counted and one not.

Every instance since agent-portability uses the .md.review.md spelling. Nothing in the code changed. Agents started typing the extension, nothing rewarded them and nothing warned the ones who did not. The help text did hint at it, with requirements.md as the example. A hint is not a boundary.

What changed

aidlc review now accepts the bare artifact name or the one with .md, and writes the name the gate reads. The gate reads either spelling. A doctor migration renames the legacy files and reports collisions instead of resolving them. A gate violation now names the filename it expected and the artifacts that do have findings.

The report named two directions, and warned about the second. Appending the extension to what the command writes leaves the eleven dead files dead. Letting the gate accept both revives them, but leaves two valid spellings forever. They are the two halves of one fix. One module, packages/cli/src/review/findings-naming.ts, owns the mapping in both directions, and the writer and the reader both take their key from it.

Which spelling wins was arithmetic. The doubled .md is ugly, but it is what the gate already looks up, and 31 files across 13 instances already carry it, against eleven. Choosing the prettier name would have moved 31 files to save 11, and touched the gate as well.

I added one thing the report did not ask for. An artifact name no template declares used to scaffold a findings file happily, so a typo produced a real file no gate would read. The command now refuses it and lists the names that would work. The list covers optional artifacts and every phase, not just the current one's required files, because a real instance had reviewed an optional architecture diagram, and re-reviewing an earlier phase is what the amendment protocol asks for.

What it does not fix

It is a patch, and it is stricter in one way. Someone reviewing an artifact no template declares is now refused. Nothing in this repository does that, and the alternative was a typo silently producing a file nothing reads.

I did not re-run or reopen the six instances. Their files are renamed and their history stands. The reviews were real when written. Only the gate's opinion of them was wrong.