diff --git a/CLAUDE.md b/CLAUDE.md index 8957e187..31e7db06 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -124,7 +124,8 @@ Use the script rather than your own `luac`. Homebrew no longer ships Lua 5.2, so - Runtime API: - Libraries/functions Factorio adds or modifies (incl. `require()` restrictions): - Lua 5.2 manual: -- Prefer official Factorio docs over forum/blog/wiki advice when changing runtime behavior. +- Friday Facts blog (Wube's own, so it counts as official): . Best source for *why* a behavior changed. See the oracle section below for how to use it and its limits. +- Prefer official Factorio docs over forum/blog/wiki advice when changing runtime behavior. The Friday Facts blog is written by Wube, so it is on the official side of that line. ### The Factorio oracle (re-capture after a game update) @@ -138,7 +139,18 @@ So don't trust memory or the wiki. The game is the only authority on what the ga | `data/*/migrations/*.json` | Every rename, as a table. This is a complete list, not a guess | | `doc-html/runtime-api.json` | The `defines.*` tables, version-stamped to the install. See the caveat below: it publishes a documentation index, not the values | -A fourth source, `data/changelog.txt`, records behavior changes per patch. It is worth reading after an update, but nothing automates it - no code in `tools/` touches it. +Those three are *authoritative*: they say what the game accepts, they ship with the install, and a capture reads them offline and gets the same bytes every time. + +Two more sources are *reference* rather than authoritative. They say **why** something changed, which is what tells you which captured value now needs review. Nothing automates either one, and nothing should. + +- **`data/changelog.txt`** records behavior changes per patch, terse, in the install. No code in `tools/` touches it. +- **The Friday Facts blog, **, is Wube's own writing, so it outranks forum, wiki and third-party blog advice. It is still not authoritative in the sense above - it describes intent, and the shipped game can differ, so check any claim from it against a capture. It is also the only source here that needs the network, which is why it can never gate a capture. + + **Searching it: `https://factorio.com/blog/search/`.** This is the way in, and it covers the whole archive - a search for `mirroring` returns FFF #80 from 2015. Measured 2026-08-17: HTML only, no JSON, about 10 results with no total shown. **Word choice matters more than you would expect.** Searching `mirroring` does *not* return FFF #442, the post that introduced entity mirroring, while `flip` and `fluid` both do. So try two or three wordings before concluding a post does not exist. A bare number works too: `search/442`. + + Direct post URLs are `https://factorio.com/blog/post/fff-`. There is also an Atom feed at , but it carries the **10 most recent posts only**, so it answers "what changed lately" and not "what shipped in version X" - use the search for that. + + Worked example: the pumpjack change behind issue #81 shows up in a dump as `output_fluid_box` pipe connections going from `[[1,-1],[1,-1],[-1,1],[-1,1]]` to `[[1,-1],[1,1],[-1,1],[-1,-1]]`. The dump does not say why. FFF #442, "Flip, Flow, and Fresh Paint", does, and the same release added `use_mirroring` and `migrate_horizontal_mirroring` to that prototype - which is how you learn the change is about entity mirroring rather than a typo fix. `tools/capture-factorio-oracle.sh` pulls those three into `test/FactorioTools.Test/OilField/factorio-oracle.json`: