Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,8 @@ Use the script rather than your own `luac`. Homebrew no longer ships Lua 5.2, so
- Runtime API: <https://lua-api.factorio.com/latest/index-runtime.html>
- Libraries/functions Factorio adds or modifies (incl. `require()` restrictions): <https://lua-api.factorio.com/latest/auxiliary/libraries.html>
- Lua 5.2 manual: <https://www.lua.org/manual/5.2/>
- Prefer official Factorio docs over forum/blog/wiki advice when changing runtime behavior.
- Friday Facts blog (Wube's own, so it counts as official): <https://factorio.com/blog/>. 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)

Expand All @@ -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, <https://factorio.com/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/<term>`.** 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-<number>`. There is also an Atom feed at <https://factorio.com/blog/rss>, 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`:

Expand Down