Add CLAUDE.md, and point at the blog's search - #5
Merged
Conversation
Two things, both about knowledge that had nowhere to live. The repo had no CLAUDE.md, so everything learned by running the game sat only in a session's memory. Most of it is invisible from the code and expensive to rediscover: Factorio writes nothing to stderr, omission in mod-list.json means enabled, read-data is layout-dependent, script.on_init takes exactly one handler, serde_json is one ULP out on long decimals, preserve_order must stay off, runtime-api.json publishes no defines values, and 2.1 deleted LuaEntity.fluidbox along with the whole LuaFluidBox class. Each of those is recorded with what was measured rather than as a rule to follow, because the reason is the part that stops someone undoing it. A reader who does not know why preserve_order is off will turn it on. The section leads with the reason it exists: three real defects here once survived 60 unit tests and were caught by the first run against the actual game, because the fake encoded the same wrong beliefs the code did. Second, the README said the blog "carries the 10 most recent posts only". That is true of the Atom feed and wrong about the blog. There is a search endpoint, https://factorio.com/blog/search/<term>, and it covers the whole archive - a search for "mirroring" returns FFF #80 from 2015. That matters because the feed alone cannot answer "what shipped in version X", which is the actual question after a game update. Measured 2026-08-17: search returns HTML, about 10 results, no total. Word choice matters more than expected - "mirroring" does NOT return FFF #442, the post that introduced entity mirroring, while "flip" and "fluid" both do. So the note says to try several wordings before concluding a post does not exist. Docs only. fmt, clippy and test all pass: 113 unit tests plus 6 install-gated. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P9FADuTnjE7SFEQWnpNhfc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two things, both about knowledge that had nowhere to live.
CLAUDE.md
The repo had none, so everything learned by running the game sat only in a session's memory. Most of it is invisible from the code and expensive to rediscover:
mod-list.jsonmeans enabledread-datais layout-dependent, so a relative token only works on macOSscript.on_inittakes exactly one handlerserde_jsonis one ULP out on long decimal literalspreserve_ordermust stay offruntime-api.jsonpublishes nodefinesvaluesLuaEntity.fluidboxand the wholeLuaFluidBoxclassLuaEntityneeds apcall, because 2.0 raises on unknown keysfactorio.exeis a GUI-subsystem binary, so PowerShell does not wait for itEach is recorded with what was measured, not as a rule to follow, because the reason is the part that stops someone undoing it. A reader who does not know why
preserve_orderis off will turn it on.The section leads with why it exists: three real defects here once survived 60 unit tests and were caught by the first run against the actual game, because the fake encoded the same wrong beliefs the code did.
Also covers the layout, the five run modes and their per-mode success predicates, the exact CI command, and the test counts to expect (113 unit plus 6 install-gated, which skip rather than fail without a game - so a green run on a machine with no Factorio proves less than it looks).
The blog search
The README said the blog "carries the 10 most recent posts only". That is true of the Atom feed and wrong about the blog. There is a search endpoint:
It covers the whole archive - a search for
mirroringreturns FFF #80, from 2015. That matters because the feed alone cannot answer "what shipped in version X", which is the actual question after a game update.Measured 2026-08-17: HTML not JSON, about 10 results, no total shown. Word choice matters more than you would expect -
mirroringdoes not return FFF #442, the post that introduced entity mirroring, whileflipandfluidboth do. So the note says to try two or three wordings before concluding a post does not exist. A bare number works too:search/442.Checks
Docs only, no code changes.
cargo fmt --all -- --check,cargo clippy --all-targets -- -D warningsandcargo test --all-targetsall pass: 113 unit tests plus 6 install-gated integration tests, run against a real 2.1.14 install.🤖 Generated with Claude Code
https://claude.ai/code/session_01P9FADuTnjE7SFEQWnpNhfc