tidaldb/tidal-stress/Cargo.toml
jx12n 005e292cbb fix(m11): review remediation + tidal-stress perf sweep + perf wave 2
Resolve all BLOCKER/CRITICAL/WARNING findings from the m11p7/p8 review:
- tidalctl restore: safe_join path-traversal/Zip-Slip guard + fsync on write
- corrupt-WAL checkpoint_seq guard; PITR archive-before-delete
- cluster: x-tidal-relayed audit-dedup marker; forward_failures counts 5xx
- mTLS/HTTP-TLS handshake hardening; accept-loop EMFILE backoff
- per-principal rate-limit + node-token marker-pinning tests
- self-heal tier-3 coverage; 5 router-auth tests

tidal-stress: measurement-fidelity fixes (schedule-lag p99/max, exact
feed-over-SLO verdict, shed annotation) + typed Body, workload.next
184ns->68ns, RoundRobin len==1 short-circuit, HeaderValue cache;
new benches/hotpath.rs + lib.rs.

perf wave 2: signal_snapshot SmallVec/SignalKey carrier; one-get-per-type
ranking pre-pass.
2026-06-13 12:28:04 -06:00

67 lines
3.0 KiB
TOML

[package]
name = "tidal-stress"
version = "0.1.0"
edition.workspace = true
rust-version.workspace = true
description = "Open-loop load generator + capacity ramp for tidalDB's HTTP surface (standalone + multi-process cluster), modeling a thepeach-style feed workload"
license.workspace = true
# ── tidal-crate lint posture (single source of truth) ──────────────────────
# IDENTICAL block across tidaldb / tidal-net / tidal-server / tidalctl. These
# crates deliberately DO NOT inherit `[workspace.lints]`; they hold the embedded
# recommendation DB + its transport/server/CLI to a stricter correctness bar
# (`unsafe_code = forbid`, `clippy::all = deny`, `unwrap_used = deny`).
# `unwrap_used = "deny"` is kept per-crate rather than in `[workspace.lints]`
# because the workspace also hosts the example/consumer crates under
# `applications/` (not held to the engine's bar). Keep these four blocks BYTE-IDENTICAL.
[lints.rust]
unsafe_code = "forbid"
[lints.clippy]
all = { level = "deny", priority = -1 }
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }
# Justified allows: latency/rate math is pervasive usize<->u64<->f64 casting (a
# load generator is nothing but counters and durations), so the lossy-cast
# pedantic family is allowed exactly as the engine's ranking math allows it.
cast_possible_truncation = "allow"
cast_possible_wrap = "allow"
cast_precision_loss = "allow"
cast_sign_loss = "allow"
module_name_repetitions = "allow"
# Advisory pedantic/nursery style lints that are noise for a CLI load tool (and
# which the engine crates already run at warn, not deny): help-text URLs/flags
# read fine bare; `out.push_str(&format!(..))` is the clearest way to assemble a
# report table; constructors take their config by value; const-ness of trivial
# accessors churns. Correctness lints (clippy::all) stay DENY.
doc_markdown = "allow"
format_push_string = "allow"
needless_pass_by_value = "allow"
missing_const_for_fn = "allow"
map_unwrap_or = "allow"
unwrap_used = "deny"
[dependencies]
clap = { version = "4.5", features = ["derive", "env"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
thiserror = "2"
tokio = { version = "1", features = ["macros", "rt-multi-thread", "sync", "time", "signal"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
rand = "0.9"
# Async HTTP only (no blocking client): rustls posture matches tidal-server /
# tidal-net — drops the OpenSSL/native-tls system dependency for a clean static
# build. `json` for the typed request/response bodies.
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
[dev-dependencies]
# Honest before/after for the generator's OWN per-request cost (no server, no
# network): bench workload.next() construction and the latency-histogram record
# path in isolation. Matches the engine crate's criterion posture.
criterion = { version = "0.5", features = ["html_reports"] }
[[bench]]
name = "hotpath"
harness = false