# dev-tools The tools a machine needs to develop the mesh's own code (novox/hq issue 626). Every node is a development machine: an agent working on a change builds it and runs its tests there, with these tools, before it opens a pull request. The lab is the QA step after that: it tests the work in a sandbox, through its seat at the mesh scope, and is not where development happens. Assign it to every node. ## Owns | what | package | class (ADR 0182) | |---|---|---| | the Go toolchain, for `go build` and `go test` in every Go module | `go` | package | | a C compiler, for `go test -race` and cgo | `gcc` | package | | make | `make` | package | | Node.js and npm, for the TypeScript modules' `npm ci` and `npm test` | `nodejs`, `npm` | package | | Python, for the scripts some checks run | `python` | package | | git and jq | `git`, `jq` | package | All are in the distribution's official repositories, so the node-engine's package manager installs them on any node. The versions are the distribution's: the toolchain images that run `mesh/repo-check` stay the judge of a pull request, and a local run is the developer's early answer, not the verdict. Nothing else is placed: no file, no service, no environment. A module's own dependencies come from its lock file (`go.mod`, `package-lock.json`), as in the toolchain images.