Rust review guidelines
This project uses Rust for Coglet (crates/), the prediction server that runs
inside Cog containers. It handles HTTP requests, worker process management, and
prediction execution.
What linters already catch (skip these)
clippy runs in CI. cargo-deny audits dependencies for license/advisory issues. Don't flag issues these would catch.
What to look for
Error handling
- Use
thiserrorfor typed errors in library code,anyhowfor application errors - Don't use
.unwrap()or.expect()in non-test code unless the invariant is documented - Error context: use
.context()or.with_context()from anyhow, not bare?
Ownership and lifetimes
- Unnecessary cloning where a borrow would work
- Lifetime issues that suggest a design problem (not just annotation noise)
- Arc/Mutex when simpler patterns exist
Async (tokio)
- Blocking operations inside async contexts (use
spawn_blocking) - Missing
.awaiton futures (compiler catches some, but not all logical issues) - Proper cancellation handling and cleanup
- Task/JoinHandle leaks
Safety
- Any
unsafeblock needs justification and a safety comment - FFI boundaries with Python (PyO3) -- check for panics across FFI, GIL handling
- Memory safety in IPC between parent and worker processes
Architecture
crates/coglet/is the core: HTTP server, worker orchestration, IPCcrates/coglet-python/is PyO3 bindings for Python predictor integration- Two-process architecture: parent (HTTP + orchestrator) and worker (Python execution)
- Don't mix IPC concerns with HTTP handling
- Snapshot tests use
insta-- check if snapshots need updating
Dependencies
- New dependencies should be justified --
crates/deny.tomlaudits them - Prefer std or existing deps over adding new ones for small tasks