jacquardSnapshot

← snapshot

4279 bytes
[workspace]
resolver = "3"
members = ["crates/*", "xtask"]

[workspace.package]
edition = "2024"
rust-version = "1.92"
license = "UNLICENSED"
publish = false
repository = "https://github.com/jdetle/jacquard"
authors = ["John Detlefs <jdetle@gmail.com>"]

[workspace.dependencies]
# Internal. Every internal edge is also a trust-plane edge; `cargo xtask
# boundary` walks this graph and proves the rendezvous plane never reaches
# content.
jac-core = { path = "crates/jac-core" }
jac-sketch = { path = "crates/jac-sketch" }
jac-object = { path = "crates/jac-object" }
jac-decision = { path = "crates/jac-decision" }
jac-gate = { path = "crates/jac-gate" }
jac-rendezvous = { path = "crates/jac-rendezvous" }
jac-git = { path = "crates/jac-git" }
jac-repo = { path = "crates/jac-repo" }
jac-telemetry = { path = "crates/jac-telemetry" }

# External. Kept deliberately small: every crate in the graph is a crate the
# privacy boundary has to reason about.
anyhow = "1.0"
blake3 = "1.5"
bytes = "1.9"
cargo_metadata = "0.19"
clap = { version = "4.5", features = ["derive"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
smallvec = { version = "1.13", features = ["const_generics", "union", "serde"] }
thiserror = "2.0"

# The HTTP surface (jac-serve). Content-plane only; the rendezvous plane's
# reachability is unchanged by these.
axum = "0.8"
# `process`/`fs` carry local Whisper transcription: jac-serve shells out to
# whisper.cpp and cleans up the temp audio it wrote.
tokio = { version = "1", features = ["macros", "rt-multi-thread", "signal", "process", "fs"] }
tower-http = { version = "0.6", features = ["cors"] }

# Telemetry shipping (jac-telemetry). rustls only — deny.toml bans openssl-sys.
# `json` carries the GitHub importer; telemetry posts NDJSON by hand.
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "json"] }
ulid = "1"

# Dev-only: driving an axum Router in integration tests without a socket.
tower = { version = "0.5", features = ["util"] }
http-body-util = "0.1"

# ---------------------------------------------------------------------------
# Lint policy. Defined once here and inherited by every member with
# `[lints] workspace = true`, so policy lives in metadata rather than being
# scattered across `#![deny(...)]` attributes in each crate root.
# ---------------------------------------------------------------------------
[workspace.lints.rust]
unsafe_code = "forbid"
missing_docs = "warn"
missing_debug_implementations = "warn"
unreachable_pub = "warn"
unused_qualifications = "warn"
rust_2018_idioms = { level = "warn", priority = -1 }

[workspace.lints.clippy]
pedantic = { level = "warn", priority = -1 }

# Module layout: `foo.rs` + `foo/`, never `foo/mod.rs`. This lint has known
# reliability gaps (rust-clippy#8123), so `cargo xtask lint-layout` greps for
# `mod.rs` as an independent backstop. Two mechanisms, same invariant.
mod_module_files = "deny"

# Selected `restriction` lints. The restriction group as a whole is not meant
# to be enabled wholesale; these are the individually justified picks.
unwrap_used = "deny"
expect_used = "warn"
panic = "warn"
exit = "warn"
dbg_macro = "deny"
todo = "deny"
unimplemented = "deny"
float_cmp = "warn"
mem_forget = "deny"
rest_pat_in_fully_bound_structs = "warn"
verbose_file_reads = "warn"
str_to_string = "warn"

# Correctness signals that are free at compile time.
cast_possible_truncation = "warn"
cast_possible_wrap = "warn"
cast_sign_loss = "warn"
cast_precision_loss = "warn"
missing_const_for_fn = "warn"
redundant_clone = "warn"
or_fun_call = "warn"
ptr_as_ptr = "warn"

# ---------------------------------------------------------------------------
# Profiles.
# ---------------------------------------------------------------------------
[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
panic = "abort"
strip = "symbols"
debug = false

# Gate failures must be diagnosable from a CI log, so the gate crate keeps
# line tables even in release.
[profile.release.package.jac-gate]
debug = "line-tables-only"

[profile.dev]
opt-level = 0
debug = true

# Dependencies are rebuilt rarely and dominate test runtime (blake3 in
# particular), so they are optimised even in dev.
[profile.dev.package."*"]
opt-level = 2