A case used to be two hundred lines of script that mostly repeated the previous case. What is left in the file now is the part that is actually about your application.
# the defect this case exists to catch — a case that can name none is one # nobody can justify, and one removed by accident is one nobody misses case: language-round-trip catches: a translated menu entry that leaves the report pane's labels in English precondition: language: pt-BR # absent -> named as unchecked, never red fixture: app: bin/Debug/App.exe environment: [ light, dark ] # every launch this case makes, not only the first shareable: false # this one writes, so it owns its process steps: - resolve: Window#main > Pane#reportHost > Text[order=top] - act: invoke MenuItem[key=menu.language.ptBR] - assert: labels from strings.pt-BR.json - capture: Pane#reportHost -> artifacts/report.pt-BR.png
The loop, the waits, the retries and the verdicts. Which is why a fix to any of them is applied once rather than to some of twenty-seven copies of a runner while the rest keep the bug.
Every field, as it is written. A refusal costs a retry and never a deletion — which matters most for the caller writing the file a field at a time rather than pasting it whole.
A file, a case or a tag. A single case is ten seconds when a single act is what changed, and the run says what it left out rather than reporting a total that quietly moved.