Game opening becomes a moddable JSON script driven by mc_worldsim::StartScriptRunner and exposed to Godot via GdStartScript. Start scripts + dwarf tribe/wanderer units live in public/resources/start_scripts; START_SCRIPTS.md documents the contract. Adds tools/validate-start-scripts.py + wires it into CI (stage 3b) and verify.sh (step 0b). Marks p3-14 done and regenerates the objectives dashboard. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| autoplay | ||
| dev-setup | ||
| lan | ||
| run | ||
| apricot-async-smoke.sh | ||
| apricot-run.sh | ||
| claude-demo-25turn.sh | ||
| claude-smoke-5endturn.sh | ||
| godot-docker.sh | ||
| mc-ai-docker.sh | ||
| p1-56-civics-proof.sh | ||
| p2-60-lens-proof.sh | ||
| p2-72-option-b-render.sh | ||
| player-api-example.py | ||
| player-api-server.sh | ||
| README.md | ||
| regression_tests_status.sh | ||
| render-driver-server.sh | ||
| rl-train.sh | ||
| team_members.sh | ||
| ui-proof-capture.sh | ||
scripts/ — repo automation
Everything in this directory is either sourced by ./run or invoked
directly over SSH on a remote host (apricot, plum). Every *.sh is
idempotent and safe to re-run.
Layout
scripts/
run/ — ./run <cmd> dispatch modules; one file per concern
common.sh — colors, dotenv loader, $GAME_DIR/$SIMULATOR_DIR/$GUIDE_DIR
build.sh — cmd_build, cmd_build_wasm, cmd_build_gdext, cmd_build_info
build-info.sh — git-state → src/game/build_info.json generator
dev.sh — lint/format/test/verify/autoplay subcommands
export.sh — Godot export one-target dispatch
remote.sh — install:/start:/stop:/smoke: over SSH
tools.sh — setup + spritegen + misc one-offs
dev-setup/ — one-shot env bootstrap scripts, per-OS
osx.sh — macOS (Homebrew + Godot + Rust + --with-runner)
linux.sh — generic Linux (dnf/apt + Rust + --with-runner)
bluefin.sh — rpm-ostree Bluefin layer (weston, vulkan-tools)
lib/ — helpers shared across the per-OS scripts
runner.sh — forgejo-runner install/register/verify
autoplay/ — runs ON a linux host (apricot) for headless batches
run_ap3.sh — weston-headless flatpak Godot invocation
run_seeded.sh — single-seed AUTO_PLAY wrapper
test_save_resume.sh — save-at-T50 → resume → compare test harness
Conventions
- Functions prefixed with
_are private helpers scoped to one file. Functions without the prefix are callable from other modules. cmd_<verb>_<target>functions are dispatched by./runvia name-matching —./run verb:targetrunscmd_verb_target. No need to edit the top-levelruncase block to add a new subcommand.- Direct execution works too — every
scripts/run/*.shandscripts/dev-setup/*.shhas a working shebang andif [[ "${BASH_SOURCE[0]}" == "$0" ]]guard where relevant. - Remote scripts under
autoplay/are meant to be SSH-invoked from the EDIT host (typically plum) running on the RUN host (typically apricot). Never invoke them on the EDIT host directly. - Env files —
.env(tracked base) →.env.local(user secrets, gitignored) →.env.<mode>→.env.<mode>.local. Loaded automatically bycommon.shat source time. See.env.examplefor documented keys.
Export staging (p2-06)
tools/export-single.sh rsyncs the project to .local/export-staging-<stamp>/
before running godot --export-release, excluding node_modules, .local,
target, .git, and dist. Godot's export scanner walks the whole project
tree pre-exclude_filter; the pnpm-managed public/games/*/guide/node_modules/
symlinks made macOS exports take 20+ minutes (16MB of _scan_new_dir warnings).
Staging drops that to under 10s of scan time.
- Default: on for
macos, off elsewhere. - Force on:
EXPORT_STAGED=1 ./run export:linux. - Debug staging:
KEEP_STAGING=1 ./run export:macosleaves the staged copy in place for inspection.