Appearance
art-manifest.mjs
Renders app/src/game/art-manifest.mjs, the generated list of every set the art tree holds, and checks it for drift.
Contributor tooling › art-manifest.mjs
What it does
Walks app/public/art and records every directory holding at least one file as a "set". Each set is keyed by its path relative to that root. Renders the sets into the exact text of the generated module. Without --write, compares that text byte for byte against app/src/game/art-manifest.mjs on disk and reports the first line where the two diverge.
Usage
No package.json script wraps this tool. Run it directly:
bash
node tools/art-manifest.mjsOptions
| Flag | Value | What it does | Default |
|---|---|---|---|
--write | no value | Writes the rendered module to app/src/game/art-manifest.mjs, overwriting the file on disk. | Off. The bare invocation only compares and reports. |
Inputs and outputs
Reads every file under app/public/art, recursively. Passing --write overwrites app/src/game/art-manifest.mjs; the bare invocation writes nothing.
On success (exit 0), the bare invocation prints that the file matches the art tree. Passing --write prints how many bytes it wrote.
On failure (exit 1), the output file is either missing, or its content drifts from the art tree. A missing file gets an error naming the --write command that creates it. A drifted file gets the first line where the on-disk text and the freshly rendered text disagree.
Examples
Check whether the committed manifest still matches the art tree, for example after pulling a branch that added or removed art files:
bash
node tools/art-manifest.mjsRegenerate the manifest after adding, removing, or renaming a file under app/public/art:
bash
node tools/art-manifest.mjs --writeNotes
The scan reads the filesystem directly, because app/public sits outside Vite's resolution graph, and no import.meta.glob call can see a file placed there. This tool is the only way a new file under app/public/art reaches the game code.
A directory holding only subdirectories is not itself a set. A directory holding both files and subdirectories is a set, and is still recursed into. Its subdirectories are named as their own nested sets — for example, system-view and system-view/packs both appear as separate entries.
The generated module also exports ART_ORPHANS: sets no declared surface asks for. It is always empty. The surface table that computation depends on is absent from the codebase.
Source
tools/art-manifest.mjs — part of Contributor tooling