diff --git a/quest/m0/checks/README.md b/quest/m0/checks/README.md index c0c00ad53..08d457f95 100644 --- a/quest/m0/checks/README.md +++ b/quest/m0/checks/README.md @@ -20,3 +20,4 @@ Each child reports its CPU saved, cold and warm, against `origin/main`. - [A warm gate](/quest/m0/checks/cache.md) - the land gate builds through mbx, as moq's does - [Fixtures that merge](/quest/m0/checks/fixture-layout.md) - `lang` splits by module, and `reject`'s snapshots key by item, not line +- [A case's inputs stay as cases are added](/quest/m0/checks/case-inputs.md) - each differential case's generated inputs are seeded by its name diff --git a/quest/m0/checks/case-inputs.md b/quest/m0/checks/case-inputs.md new file mode 100644 index 000000000..097115c19 --- /dev/null +++ b/quest/m0/checks/case-inputs.md @@ -0,0 +1,24 @@ +# [S] A case's inputs stay as cases are added + +## Goal + +Each case of a differential harness gets generated inputs of its own, seeded from the +case's name, so adding, removing, or reordering a case changes no other case's inputs, and +a new case fails only on its own inputs. + +## Plan + +Decided with the maintainer on 2026-11-02: m0, since every PR adding a case can now fail on +another case's inputs, costing a fixer run and another gate run. + +`ts/tests/differential.ts` draws its random inputs from one seeded stream, and a harness +picks the case by leading bytes modulo its case count: `stock`'s first byte, `lang`'s first +two, and each of `task`'s steps' first. Adding a case shifts which case each random input +reaches, and the full-width values reach only the first eight ops. In +[#436](https://github.com/moq-dev/rust2/pull/436), adding a `stock` case sent the input +`421f00ff...` to `buf::write_all`, which hit the `rt.BytesMut` reserve refusal on a +zero-capacity `take` that no input had reached before. Generate each case's inputs from a +stream seeded by its name, behind the `ops` a harness exports, as `lang`'s caller already +exports one per case. + +Public API: none.