Common Rust conventions (comments, module layout, dependency management, error handling, pre-commit checks, commit conventions) are defined in the root AGENTS.md. This file documents SkillFS-specific additions only.
crates/
skillfs-core/ parser / store / views / compiler / env / watcher
skillfs-fuse/ FUSE filesystem layer
skillfs-cli/ `skillfs` binary (mount / classify / validate / list)
docs/specs/ implementation specifications
docs/skills/ the bundled agent skill (skillfs-mount)
scripts/ build.sh, test.sh
Each crate's Cargo.toml carries a one-line description = "..." that
matches the table above; keep them in sync.
The tests/common/mod.rs file in crates/skillfs-core/tests/common/mod.rs is the only allowed mod.rs — cargo's official convention for sharing helpers across integration tests.
The two per-crate version literals below are deliberate. Do not "tidy them up" into [workspace.dependencies]:
crates/skillfs-core/Cargo.toml :: notify = { version = "7", features = ["macos_kqueue"] }— macOS-specific feature, single consumer.crates/skillfs-cli/Cargo.toml :: clap = { version = "4", features = ["derive"] }— CLI-only; no reason to pollute the workspace.
Any new exception must be justified in the PR description.
The three pre-existing unwrap() usages — in compiler.rs, parser.rs, and cli/main.rs — each carry a one-line justification proving the failure case is impossible. New code must do the same; unreachable!() with a comment is preferred over bare unwrap().
Existing named error types: FuseError / ParseError / WatcherError.
In addition to the standard Rust checks (see root AGENTS.md §3.5), SkillFS requires:
scripts/test.sh # e2e FUSE mount; skips itself if fuse3 / /dev/fuse is missingThis FUSE smoke test is required when changing filesystem-layer code.