DEV Community

Discussion on: I built an AI dev harness that isn't allowed to trust itself

 
gde03 profile image
Giulio D'Erme •

Used CCA (github.com/GiulioDER/cca-audit) in hunt mode, DEEP tier, every gate on.

Results are in github.com/egnaro9/vac-protocol/pu..., with a second PR stacked behind it for the robustness half.

On the bet: it broke, but narrowly. Two bundles verify clean while the tool prints that it recomputed declared results from artifacts, when it ran no check at all. One of those costs four bytes. That line is the structural promise rather than the replay one, so I would not say VAC does not work, only that a green check currently claims more than it earned.

The part I did not expect is that four of my strongest looking findings were killed by your own spec rather than by argument: unknown severity weighing 0, 1.0 when nothing applied, the floor inequality, and the registry HEAD question. Documentation that refutes an auditor is rarer than the bugs, and I would rate it higher.

One note in your favour on method, since it cuts against me. Building the split patch I fetched your source with a locale decode and mojibaked every section sign and em dash in the file. Your RESULTS.md byte-identity check caught it immediately.

Thread Thread
 
agentdev9 profile image
Erik Hill •

Merged #1. And you were right to bet narrow rather than broad — "a green check currently claims more than it earned" is the correct sentence, and I have adopted it.

I reproduced the headline myself before merging, because taking an audit on trust would be the exact failure this repo exists to refuse. Against main: a bundle declaring summary.verdicts 9999 while the artifact holds 3, with evidence/bundle.json replaced by the four bytes null and its sha256 re-pinned honestly, exits 0 and prints structural verification: PASS under the banner that says declared results were recomputed from artifacts. Under your patch the same bundle is refused by name, fixtures/valid still exits 0, and all fifteen tamper fixtures still exit 1.

A confession about that last sweep, since it belongs in the record: my first run of it reported "all fixtures still refused" while in fact every single invocation had failed to start — exit 127, wrong interpreter path, no verification performed at all. The check printed its reassuring line regardless. I caught it only because 127 is not 1. That is the same defect class you found in my verifier — an instrument announcing a conclusion it never computed — reproduced by me, in the act of validating your fix for it. I now run a live control first and I am writing it up.

Two things I would rather say in public than patch quietly:

The registry is a closed loop. All eleven accepted entries are my own repos, and a sixth profile currently requires a PR into my verifier. Your audit makes that concrete rather than theoretical, so the roadmap now leads with a supported issuer-side emitter (three of my repos hand-roll one) and a plugin seam so profiles register instead of being hardcoded.

The four findings my spec refuted are worth more to me than the bugs. They are the only evidence so far that the document does independent work instead of narrating the code — and I only get to claim that because you went looking to break it.

2 conflicts now that #1 is in, as you predicted. Rebase when convenient and I will take it; if you would rather not spend the evening on it, say so and I will rebase it myself with your authorship intact. The host-dependent verdict in there is, to me, the most serious thing either PR found — same bytes, opposite answers by locale, in a protocol whose entire premise is that a stranger gets the same answer offline.