rustup target add wasm32-unknown-unknown wasm32-wasip2. The build script of dm-web builds the browser reader for the first target. Thus each build of amem needs it. The second target builds the taps. make check lints the taps, and the tests of the tap host build them. Thus the gate needs the second target.dm-web runs a second cargo for the reader. That cargo reads the cargo config files and the environment. It does not get the command line of the first cargo: --config, --offline and --frozen do not reach it. Put such a setting, for example a vendored source replacement, in a cargo config file. For a build without the network, set CARGO_NET_OFFLINE=true, or net.offline = true in a config file. The build script sets its own rustflags (--remap-path-prefix) for this cargo. So the rustflags in a cargo config file do not reach the reader build.build-essential on Debian and Ubuntu, or the Visual Studio Build Tools on Windows.make. On Windows, run the targets from Git Bash or WSL.python3, for scripts/conformance.py and its test. make check and the tests of the binary run them. The script uses only the standard library.scripts/chrome-container.sh. This script pulls the image on its first use. The test has two minutes. To keep the pull out of these two minutes, run podman pull mcr.microsoft.com/playwright:v1.61.1-noble before the test. To select a browser directly, set CHROME=<path>.git clone git@github.com:apache/tooling-memory.git cd tooling-memory make init # installs the pre-commit hook make check # format, clippy, tests, guard, docs-only and conformance tests
| Command | What it runs |
|---|---|
make check | cargo fmt --check, cargo clippy -D warnings, cargo test, the guard, docs-only and conformance tests. It is the pre-commit gate. A commit that has only Markdown, outside crates/ and taps/, runs the guard tests instead |
make conformance | scripts/conformance.py: the seven M0 steps over MCP, against a new record that this build serves. URL=<mcp endpoint> points it at a different server. OPERATOR=<command> gives it the export, import and reindex of that server, for the last two steps |
make test | only cargo test |
make fmt | cargo fmt, which changes the files in place |
make run ARGS='...' | the amem binary, for example ARGS='init --root /tmp/m --domain dom-me' |
make verify | check, and also cargo deny, cargo machete, coverage against COVERAGE_MIN, and the browser builds of dm-core, dm-policy and dm-reader. CI runs this target |
make msrv-check | cargo check of the workspace and of the browser builds, with the Rust release that rust-version in Cargo.toml names. It needs that toolchain: rustup toolchain install <rust-version> --profile minimal --target wasm32-unknown-unknown. It is not part of check or verify. CI runs it as a separate job |
make e2e | the browser tests in e2e/. Chromium in the Playwright image drives the pages. The tests put screenshots in e2e/screenshots/. It needs Podman or Docker, not Node. It is not part of check or verify. Run it for a change to the pages. See e2e/README.md |
make coverage | cargo llvm-cov over the workspace. It writes an lcov report to target/lcov.info |
verify needs three cargo extensions. Install them one time:
cargo install cargo-binstall cargo binstall cargo-llvm-cov cargo-deny cargo-machete
rust-toolchain.toml pins the channel. It also adds rustfmt, clippy, the llvm tools and the wasm targets. Thus rustup sets up the rest on its first use.
Use one worktree for each topic. Then several people and sessions can work at the same time:
git worktree add ../durable-memory-<topic> -b feat/<topic> origin/main
Make your branch from main. make check must pass before each commit. The hook enforces this. Write the commit subject with a conventional-commit prefix. Open the PR against main. In its description, say what changed and why. For a new test, also say what the test reported against the code before the change.
AGENTS.md is the contract for AI agents that work in this repository. Most of it is also good advice for people.