Iteration loops are codified as Taskfile tasks. Prefer them over ad-hoc commands.
After alef changes
task alef:install # cargo install --path ../alef/crates/alef-cli
task alef:generate # alef all --clean --format=false
task alef:format # explicit Alef formatting; task format excludes this
VERSION=0.15.30 task alef:bump # bump pin in alef.toml + reinstall + regen
After crawlberg-core changes
task build # core-only
task build:bindings # all bindings
task build:all # core + all bindings
E2E cycles
task e2e:generate # regenerate all language test suites from fixtures
task e2e:build # build bindings and the generated mock-server for e2e
task e2e:test # run generated e2e suites
task e2e:all # generate + build + run generated e2e suites
Cleanup
task clean # per-language artifacts
task clean:workspace # cargo target + alef IR cache + legacy mock-server bins
task clean:e2e # venvs, node_modules, _build, lockfiles, vendor/
task clean:full # all of the above
Gotchas (codified, but worth knowing)
- Two mock-server binaries.
tools/mock-serveris legacy/unused;e2e/rust/src/main.rsis alef-generated and the binary all language conftests actually spawn.task e2e:buildbuilds the right one ate2e/rust/target/release/mock-server. - Python venv stale
.so. Aftertask python:build:dev, the e2e venv ate2e/python/.venvkeeps a stale extension.task python:cyclerunsuv sync --reinstallto refresh. - Elixir precompiled NIF. Rustler's precompiled binary is tagged at the package's release version and lags local source.
CRAWLBERG_BUILD=1is set in.task/languages/elixir.yml::e2e:testso the e2e suite always builds the NIF from local source. - Generated e2e files.
e2e/<lang>/is alef-generated — never hand-edit. Modify fixtures or alef codegen, thentask alef:generate.