You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Catalogue of the repository's developer, CI, and packaging scripts. Kept current
the same way docs/README.md is: when you add, move, or remove
a script under scripts/, update its row here in the same commit.
The Invoked by column tells you whether a script is load-bearing or a one-off:
CI / Makefile / pre-commit scripts are wired into the project and must keep
working; manual scripts are run by hand (usually documented in docs/); spike
scripts are one-shot investigations kept as reproducible evidence for a plan doc,
not maintained tooling.
Check the architecture boundaries CODESTYLE.md and AGENTS.md already state: the engine never includes the game, no STL in shipped code, platform conditionals stay in the platform layer, and the two god-header figures only fall. Every rule prints the sentence it comes from, and where the cheapest way to turn it green is the wrong one, the fix to make instead.
Verify doc references resolve: markdown links and #anchors via lychee, plus docs/<name>.md paths named by bare path in source comments, tests and CMake (invisible to a link checker). --external checks URLs. lychee's settings live in lychee.toml, shared with local runs.
Verify a doc's claim about where code lives: for `Foo()` in [FILE] the symbol must be defined there, and the report names the file it is actually in. Paths resolving is not the same as the prose being right.
Lint docs/knowledge/ against the fourteen rules in its SCHEMA.md: frontmatter and types, relations and body links that resolve, one owner per concept, evidence fields that agree, generated pages that reproduce. --drift [REF] reports concepts whose cited files changed since their as_of, a report rather than a failure.
CI (docs-links.yml), make knowledge-check, make knowledge-drift
Run shellcheck over the run: blocks of composite actions. actionlint only walks .github/workflows/ and the shellcheck job only sees *.sh, so the shell in .github/actions/ was checked by nothing. Errors rather than skips on anything it cannot parse.
Self-test for the above: fixtures for a clean block, a warning-level finding, GitHub expressions, and the four shapes that must fail loudly rather than pass quietly.
Architecture rules only a compiled tree can answer: the engine reaching the game through a header it does not name, and how many translation units still get DEFINES.H in front of them. Complements check-arch.py, which reads the sources with no toolchain. --report prints the per-TU header fan-out.
Generate tests/automation/README.md from the fixtures' own headers. The suite cannot run in CI (retail data, and skips exit 0), so the index being honest is the part that can be checked. --check fails when it has drifted.
Probe the external tools the repo expects, tier by tier; non-zero only when the clone cannot build. Reads every version floor from the file that pins it.
Clients and sweeps for the --listen command socket, which needs a
-DLBA2_CONTROL_SERVER=ON build; see
CONTROL.md. The sweeps import
lba2ctl and are restart-tolerant where they need to be, because walking many cubes in
one process faults and a sweep that stops at the first fault covers almost nothing.
Speak the line protocol: a REPL for looking around, a Control class for scripting a probe loop. Its docstring carries the traps that cost the most to rediscover.
Sweep every cube for transition gates that are enabled, separating ones switched off from ones waiting on a door collision: zonelist reports the two identically and they want opposite fixes.
Turn the CRASH block in adeline.log into functions, files and lines: match each module to a symbol archive by build ID, UUID or PE timestamp and size, fetching the release's or the CI run's with --fetch.
Post-release smoke test: download the published Linux artifacts, run each in a clean container, and check the version, AppImage self-update channel and AppStream metainfo they carry.
One bundler per platform; the CI release workflows are glue around them. The
*-readme.txt.in files are the user-facing README templates the bundlers expand
into each artifact.
Extract a playable game-data folder from a rip, a CD drive (--from-drive) or a ripped soundtrack, naming the CD tracks the way the engine asks for them (--selftest for the cue and TOC rules).
Identify which release a game directory or disc image holds, from the payload rather than the config: RESS.HQR names the master, SCENE/TEXT the pressing.
Add the knowledge bundle's edges to graphify-out/graph.json in place after a graphify update: every typed relation in a concept's frontmatter by its own name, and a cites edge from each concept to the source files and routines its footnotes link. graphify reads the bundle as documents and resolves links only to other documents, so without this the bundle is an island with no edge into the code. Idempotent; --dry-run counts.
Project a table section of docs/ASM_VALIDATION_PROGRESS.md into a generated Porting Status concept under docs/knowledge/porting/, one routine per section with the progress doc's own status word. --check fails when the file on disk has drifted from its source.