5.1 KiB
5.1 KiB
CLAUDE.md
Concise guidance for agents working in this repository.
Project
ComputerCraft / CC:Tweaked Lua APIs, servers, and programs for Minecraft 1.21. Code runs in the ComputerCraft sandbox, not standard Lua.
Use docs/README.md as the entrypoint for CC:Tweaked, CraftOS-PC, Advanced Peripherals, and Create integration documentation links. Use docs/adrs/README.md for repository architecture decisions.
Constraints
- Do not add a standalone Lua test harness unless asked. Local execution happens through the CraftOS-PC harness (see
docs/install-craftos-pc.md,docs/craftos_pc_glossary.md, and ADR-0005); code otherwise executes in-game. - Do not run
just replas an LLM agent; it is a human-only interactive CraftOS-PC wrapper. Usejust trapos --headless --exec '<lua>; os.shutdown()'for automated probes against the TrapOS dev environment, orjust craftos --headless --exec '<lua>; os.shutdown()'for probes against vanilla CraftOS (no TrapOS mounts). Headless probes are the recommended way to verify hypotheses about CC:Tweaked behavior; see ADR-0012. - When changing behavior, add as many useful CraftOS-PC tests as practical. It is acceptable to skip tests that require human-only validation, such as complex turtle motion, in-game UX feel, or visual approval, but still add unit-style non-regression tests for deterministic parts when possible.
- Use
/apis/libtest.luafor test scripts undertests/;/programs/runtest.luaprints__TRAPOS_TEST_OK__only after the suite passes. libtestcancels each case after3s (--timeout <s>/--no-timeoutto override); never commit a hanging test totests/. Slow harness fixtures go intests/harness/behind dedicated recipes. Seedocs/adrs/adr-0009-layered-test-timeouts.md.- Git hooks own commit/push verification: pre-commit runs
just check test, and pre-push runsjust ci. When explicitly asked to commit and/or push, do not runjust testmanually first; rely on the hooks. Seedocs/adrs/adr-0011-git-hooks-own-commit-push-verification.md. - After editing Lua or Markdown, run
just checkand fix allluacheckwarnings andlycheebroken-link reports (markdown link validation is offline-only viajust lint-markdown). - Use 2-space indent, semicolons, and
local function. requirepaths are absolute ComputerCraft paths, for examplerequire('/apis/net')().- Most API modules return factories; call the required module once before use.
Architecture
apis/eventloop.luais the single-threaded event loop aroundos.pullEventRaw; consider using it everywhere async behavior is needed. A handler that returnsapi.STOPauto-unregisters.apis/libtest.luais the lightweight test helper used by scripts undertests/;/programs/runtest.luadiscovers tests, renders suite output, and owns the__TRAPOS_TEST_OK__success marker.apis/net.luabuilds modem packet messaging, routing, and request/response RPC on the event loop.sendRequestreturnsok, result, packetand defaults to a 0.5s timeout.- A router (
/programs/router.lua) must be running somewhere on the network; without it, packets lackrouterId,isPacketOkrejects them, and cross-machine messaging silently fails. servers/listen for requests and start loops;programs/are clients that send requests and exit.- Well-known channels:
9ping,10router/default routing. Keep duplicated constants in sync.
Boot And Install
startup/servers.luastarts/programs, the shell, and configured servers viaparallel.waitForAll.- Preserve
periphemuguards used for CraftOS-PC emulation; seedocs/craftos_pc_glossary.mdfor upstream emulator references. - TrapOS ships as packages, each described by
packages/<name>/ccpm.json(name,version,dependencies,files,autostart);packages/index.jsonlists them. Source files stay in place — descriptors only reference them. To ship a new file, add it to the right package'sfiles(andautostartif it is a server).packages/trapos/ccpm.jsonis the full OS meta-package. See ADR-0010. install-ccpm.luais the one-time wget bootstrap. It installs onlytos-core/ccpm, seeds the defaultguillaumearm/cc-libsregistry onmaster(ornextwith--beta), and tells users to runccpm updatethenccpm install trapos.ccpm(intos-core) is the package manager:apis/libccpm.luais the testable core (factory with injectablehttp/stateDir/installRoot),programs/ccpm.luathe CLI. State:/trapos/ccpm.json(registries),/trapos/ccpm.lock.json(installed packages), and/trapos/ccpm.cache.json(available packages fromccpm update). Never use the word "manifest" in ccpm — it is reserved for the OS manifest.- Add new servers to
startup/servers.luaas needed.
Conventions
- Bump
local _VERSION = '...'when changing module behavior. - Programs support
-version/--versionand-help/--help; router also supports-silent/--silent. - French or English comments are fine; match surrounding code.
- Commit messages use lightweight conventional style:
topic(scope): descriptionortopic: description.
See DEVELOPMENT.md for local setup.