Canonical agent skills in .agents/skills/. .claude/skills is compat symlink
for Claude Code. Check mz-* skill before tasks — encodes project conventions,
saves time.
For operation flow tracing, read first:
doc/developer/generated/flows.md— maps operations (query lifecycle, source ingestion, MV creation, sink lifecycle, catalog DDL, timestamp selection, persist read/write, controller architecture) tocrate::modulepaths in execution order.doc/developer/generated/<crate>/_crate.md— per-crate overview: modules, key types, dependencies.doc/developer/generated/<crate>/<module>.md— per-file docs.
All third-party versions declared in [workspace.dependencies] in root
Cargo.toml. Members use dep.workspace = true or
dep = { workspace = true, optional = true }.
- Add new dep: add to
[workspace.dependencies]in rootCargo.tomlfirst, thendep.workspace = truein member crate. - Never inline version in member
Cargo.toml—bin/lint-cargoenforces. - Update version: change once in root
Cargo.toml. - Cargo unifies features workspace-wide, so workspace declaration is union of all features across crates. Members just use
dep.workspace = true.
Never regenerate full Cargo.lock. When changing deps:
- Add dep or change features: run
cargo check— updates only what changed. - Update specific crate:
cargo update -p <crate>(optional--precise <version>). - Never bare
cargo update— bumps every semver-compatible dep, causes unrelated breakage from transitive changes. - If lock regenerated, diff before commit (
git diff Cargo.lock | grep '^[+-]version') and pin back unintended bumps withcargo update -p <crate> --precise <old-version>.
Two files control license policy, keep in sync: deny.toml ([licenses].allow) and about.toml (accepted). New dep with new license not already allowed: add SPDX identifier to both.