···16021602 </div>
16031603 <div class="error-hint"><p>Interop test directories should be named after the oracle tool (e.g. spacepackets, dariol83, crcmod), not the language (e.g. python, go). This makes it clear which external implementation is the reference.</p></div>
16041604</div>
16051605+<div class="error-card" id="E802">
16061606+ <div>
16071607+ <span class="error-code">E802</span>
16081608+ <span class="error-title">Interop test not replay-only</span>
16091609+ </div>
16101610+ <div class="error-hint"><p>Traces must be committed to git. The test stanza must depend on (source_tree traces) so tests run from traces alone — the external tool is NOT required at test time. This is the 'generate once, replay always' principle.</p></div>
16111611+</div>
16121612+<div class="error-card" id="E803">
16131613+ <div>
16141614+ <span class="error-code">E803</span>
16151615+ <span class="error-title">Interop test requires external tool</span>
16161616+ </div>
16171617+ <div class="error-hint"><p>Interop tests must run from committed traces without needing the external tool at test time. The test.ml should only read trace files, never shell out to run the oracle. If you need the oracle, put it in the generator script.</p></div>
16181618+</div>
16051619<div class="error-card" id="E805">
16061620 <div>
16071621 <span class="error-code">E805</span>
···16091623 </div>
16101624 <div class="error-hint"><p>Python oracles must pin dependencies in requirements.txt with exact versions (e.g. crcmod==1.7). This ensures reproducible trace generation without depending on local installs.</p></div>
16111625</div>
16261626+<div class="error-card" id="E806">
16271627+ <div>
16281628+ <span class="error-code">E806</span>
16291629+ <span class="error-title">Missing go.mod</span>
16301630+ </div>
16311631+ <div class="error-hint"><p>Go oracles must pin the upstream module in go.mod with a tagged version or pseudo-version. This ensures reproducible trace generation without depending on $GOPATH or local clones.</p></div>
16321632+</div>
16331633+<div class="error-card" id="E807">
16341634+ <div>
16351635+ <span class="error-code">E807</span>
16361636+ <span class="error-title">Missing Cargo.toml</span>
16371637+ </div>
16381638+ <div class="error-hint"><p>Rust oracles must pin the upstream crate in Cargo.toml with a tagged version or git rev. This ensures reproducible trace generation without depending on local checkouts.</p></div>
16391639+</div>
16121640<div class="error-card" id="E810">
16131641 <div>
16141642 <span class="error-code">E810</span>
···16301658 </div>
16311659 <div class="error-hint"><p>Use csvt (Csvt.decode_file with a Csvt.Row codec) for CSV trace parsing. Never hand-roll CSV readers with open_in/input_line/split_on_char.</p></div>
16321660</div>
16611661+<div class="error-card" id="E825">
16621662+ <div>
16631663+ <span class="error-code">E825</span>
16641664+ <span class="error-title">Missing csvt dependency</span>
16651665+ </div>
16661666+ <div class="error-hint"><p>Interop tests with CSV traces should use csvt for parsing. Add csvt to the (libraries ...) in the dune file and use Csvt.decode_file with a Row codec.</p></div>
16671667+</div>
16331668<div class="error-card" id="E830">
16341669 <div>
16351670 <span class="error-code">E830</span>
16361671 <span class="error-title">Inlined algorithm in generator</span>
16371672 </div>
16381673 <div class="error-hint"><p>The generator MUST call the upstream tool's public API. Never reimplement the algorithm being verified — this defeats the purpose of interop testing. If the public API doesn't expose what you need, drop the test rather than inlining.</p></div>
16741674+</div>
16751675+<div class="error-card" id="E835">
16761676+ <div>
16771677+ <span class="error-code">E835</span>
16781678+ <span class="error-title">pip install --break-system-packages</span>
16791679+ </div>
16801680+ <div class="error-hint"><p>Python deps must live in a venv. Never use pip install --break-system-packages. The generate.sh wrapper should create/reuse a venv automatically.</p></div>
16391681</div>
1640168216411683 <a href="#top" class="back-to-top">↑ Top</a>