- Use this file for durable repo-wide working rules.
- Keep it short and operational. Put detailed subsystem guidance in the nearest nested
AGENTS.md. - Treat
Makefile, code, and config files as the source of truth when docs drift.
internal/: core engine, web, config, gameplay, and runtime packages._datafiles/: bundled world data, web assets, config, and scripts loaded by the server.modules/: optional gameplay/web modules auto-wired through code generation.cmd/generate/: code generation tooling; do not treat it like game logic..github/: CI, release, and automation workflows.scripts/: helper scripts. Keep shell changes compatible with bothbashandzsh.- If a task touches a subsystem with its own
AGENTS.md, read that file before editing.
- Prefer repo entrypoints over ad hoc command sequences.
- Build:
make build - Run locally:
make run - Run in Docker:
make run-docker - Validate Go formatting and vet:
make validate - Full test pass:
make test - JavaScript lint:
make js-lint - Lua lint:
make lua-lint - Local CI dry run:
make ci-local - HTTPS helper:
make https-setup - Reset admin password:
make reset-admin-pw
- Keep PRs small and split non-essential changes instead of bundling unrelated cleanup.
- Leave unrelated tracked or untracked files alone unless the task explicitly includes them.
- When possible, trigger code generation through existing repo commands instead of custom
go generatesequences. - Module config keys live under
Modules.<modulename>.*in_datafiles/config.yaml; modules read them throughplug.Config.Get(...). - New modules are registered via Go
init()functions; generation refreshescmd/generate/module-imports.go. - Room tags on
rooms.Roomare the main extensibility hook for module behavior. - If you add durable guidance for a subsystem, update the nearest relevant
AGENTS.md, not just this root file.
- Run the relevant existing checks for the files you changed.
- For Go changes, prefer
make validateand targeted or full Go tests as appropriate. - For JavaScript or web asset changes, run
make js-lintand any targeted validation that proves the behavior. - If a test fails, propose a solution to fix it.
- Do not claim validation you did not run.
- Update docs when behavior, setup, operator steps, or developer workflows materially change.
- Keep long architecture or onboarding prose in narrower subfolder
README.mddocs, not in this always-loaded file.