bathy-interpret 0.1.0-alpha.2

The pure interpretation layer for bathy: turns recorded probe bytes into structured, evidence-backed claims.
Documentation
[package]
name = "bathy-interpret"
description = "The pure interpretation layer for bathy: turns recorded probe bytes into structured, evidence-backed claims."
version.workspace = true
edition.workspace = true
# 1.88 MSRV tier: this crate depends on nothing that needs more than the
# workspace floor (see the MSRV comment on the workspace `Cargo.toml`).
# `bathy-types` and `regex` (its only two dependencies -- see the module doc
# comment on `src/lib.rs` for why that pair, and no others, is load-bearing)
# both build fine at 1.88. CI's `msrv` job (`.github/workflows/ci.yml`) now
# checks this crate alongside `bathy-types`/`bathy-scope`/`bathy-evidence`/
# `bathy-plan`/`bathy-probe`/`xtask`, not the higher `msrv-bathy-store` tier
# `bathy-store`/`bathy-engine` need for `rusqlite`'s `bundled` feature.
rust-version.workspace = true
license.workspace = true
repository.workspace = true

[dependencies]
bathy-types = { workspace = true }
# The one dependency this crate needs to interpret text-shaped protocol
# banners (HTTP `Server:` headers, SSH identification strings, SMTP
# greetings) without hand-rolling ad hoc string scanning for each one.
# Default features (`std`, `perf`, `unicode`) are all pure computation over
# in-memory byte slices -- no I/O, no threads spawned, nothing that could
# compromise the purity this crate exists to guarantee (see `src/lib.rs`).
regex = { workspace = true }

[dev-dependencies]
# M7 Task 3 (AC-7.15): the criterion micro-benchmarks. `default-features =
# false` drops `plotters` and `rayon` -- this project publishes numbers, not
# HTML reports, and every crate admitted to the graph has to clear
# `cargo deny`'s licence check. `cargo_bench_support` is what lets
# `cargo bench` drive it at all.
criterion = { workspace = true }
# M4 Task 4 (`tests/replay.rs`): fixtures on disk store request/response
# bytes as base64 (the brief's own fixture shape), decoded once at load
# time. Dev-only, like everything else below -- see the note on `insta`.
base64 = "0.23.0"
# M4 Task 4: snapshot-compares `interpret`'s output against a committed
# corpus of recorded captures (`testdata/captures/`). Dev-only:
# `cargo tree -p bathy-interpret --edges normal` (the purity check AC-4.10
# requires) does not walk dev-dependencies at all, so this crate's headline
# claim -- "depends on exactly two crates, `bathy-types` and `regex`" (see
# `src/lib.rs`'s module doc comment) -- is unaffected by anything in this
# section.
insta = { version = "1.48.0", features = ["json"] }
# Property-testing `interpret`'s span-validity and determinism guarantees
# (AC-4.14, AC-4.15) over arbitrary byte inputs -- see `src/interpret.rs`'s
# test module.
proptest = { workspace = true }
# M4 Task 4: `ProbeCapture` itself is deliberately not `Serialize`/
# `Deserialize` (see `bathy_types::capture`'s own doc comment -- nothing in
# M4 puts it on the wire, so adding derives ungoverned by `xtask
# check-schemas` would be a promise nobody is checking). `tests/replay.rs`
# therefore defines its own small `Deserialize`-only fixture shape, local to
# the test binary, and constructs a real `ProbeCapture` from it by hand --
# these two crates are what that deserialization needs.
serde = { workspace = true, features = ["derive"] }
serde_json.workspace = true

[[bench]]
name = "interpret"
harness = false