# batches/ — convention only; the data lives under `user://` This folder documents the batch layout. **It does not hold batches.** Real batch output is written under `ISLA_OUTPUT_DIR` (default `user://output/batches`), resolved by `Core/Scripts/ToolingPaths.cs`. Generated worlds are large, regenerable, and do not belong in git. ## Layout ``` batches//NN_/ = the chat namespace · NN = the task number that ran it ├── INDEX.md what varied, what to look at, what was concluded ├── scratch/ intermediates — PERSISTENT, never cleaned └── _/ one directory per generated world ``` ### ⭐ The `` segment (rivers/01) **`NN` is the AUTHORING TASK NUMBER, and task numbers restart at 00 in every build chat** — so a flat `batches/` collides the moment a second chat exists. It did: chat 1's `02_pass1_port` and chat 2's `02_curve_continuous` are both "batch 02", and nothing in either name says which chat made it. On the real pile there were **four colliding prefixes (02, 03, 04, 06)** across 25 batches, separable only by SLUG. The slug is set by `ToolingPaths.ConfigureChat(...)` and is **required** — with none set, `BatchRoot` throws rather than writing to the un-namespaced root. Each tool defaults to its own authoring chat, so re-running it reproduces its batch in place; **`ISLA_CHAT` redirects a run to another namespace**, which is what keeps an acceptance run from overwriting the very anchor it is checking against. > ### ⚠ Writes are namespaced; historical READS carry the prefix themselves. > `BatchRoot(task, descriptor)` inserts ``. `BatchesRoot` is the plain root, and every > `ISLA_*_SOURCE` anchor composes against it — so an anchor default is written out in full, e.g. > `"chat1/02_pass1_port"`. Namespacing only the writes would silently orphan every historical read. > **That is why a missing anchor now THROWS** (`ShapingOracle.LoadAnchor`): a moved anchor used to make > its oracle not RUN, and a batch with a silently-skipped check prints an all-PASS table that reads > exactly like a clean one. `INDEX.md` is not optional. A/B comparisons are browsed by a human, and a flat directory of same-named PNGs is not browsable. ## ⚠ No deletions here. Ever. `FileSafety.AssertDeletable` refuses any path under the batches root, and it refuses without a stated reason regardless. **Intermediates persist.** Any deletion that does happen elsewhere is named explicitly in the run report. → `Tools/README.md`, `Design - Tooling - Iteration and Batching.md`