Files
catena/Cargo.toml
T
funkpower c4e1fb9c02 drop the parity harness, keep what it argued
The harness compared these tools against the code they replaced — Python
imported from book-pipeline, podcast-pipeline and knowledge-mcp, and
JavaScript copied out of the podcast media server and indexer, each pinned to
a commit. All of it has since been deleted, so the live half cannot run and
the golden half pins answers against a source nobody can consult.

What was worth keeping was never the comparison. `KNOWN.md` argued, at
length, why a dozen of these tools deliberately do something a reader would
not expect: why pdfgutter measures the crop box throughout, why avplan finds
the encoder rather than reading one out of the environment, why mdscrub will
not manufacture a page boundary. Those arguments are about this code and
stand on their own, so they are now `docs/decisions.md`, rewritten to say
what each tool does and why rather than what it does differently.

Binding coverage is unaffected: the bindings carry 24 tests of their own, a
node smoke test against the built package, and a typecheck.
2026-09-21 07:25:10 -04:00

81 lines
3.2 KiB
TOML

[workspace]
resolver = "3"
members = ["crates/*"]
[workspace.package]
version = "0.1.0"
edition = "2024"
rust-version = "1.85"
license = "MPL-2.0"
repository = "https://git.pumpin.online/funkpower/catena"
[workspace.dependencies]
catena-cli = { path = "crates/catena-cli", version = "0.1.0" }
corpus-core = { path = "crates/corpus-core", version = "0.1.0" }
cuekit = { path = "crates/cuekit", version = "0.1.0" }
textkit = { path = "crates/textkit", version = "0.1.0" }
chunkmd = { path = "crates/chunkmd", version = "0.1.0" }
mdscrub = { path = "crates/mdscrub", version = "0.1.0" }
mdsplit = { path = "crates/mdsplit", version = "0.1.0" }
pdftriage = { path = "crates/pdftriage", version = "0.1.0" }
cuenorm = { path = "crates/cuenorm", version = "0.1.0" }
cueseg = { path = "crates/cueseg", version = "0.1.0" }
rrf = { path = "crates/rrf", version = "0.1.0" }
cuepack = { path = "crates/cuepack", version = "0.1.0" }
bibclean = { path = "crates/bibclean", version = "0.1.0" }
avplan = { path = "crates/avplan", version = "0.1.0" }
pdfgutter = { path = "crates/pdfgutter", version = "0.1.0" }
catena = { path = "crates/bindings", version = "0.1.0" }
seriesof = { path = "crates/seriesof", version = "0.1.0" }
idnorm = { path = "crates/idnorm", version = "0.1.0" }
bibfetch = { path = "crates/bibfetch", version = "0.1.0" }
bookmeta = { path = "crates/bookmeta", version = "0.1.0" }
langid = { path = "crates/langid", version = "0.1.0" }
tocfind = { path = "crates/tocfind", version = "0.1.0" }
booksniff = { path = "crates/booksniff", version = "0.1.0" }
citefind = { path = "crates/citefind", version = "0.1.0" }
emb = { path = "crates/emb", version = "0.1.0" }
clap = { version = "4", features = ["derive"] }
clap_mangen = "0.3"
pyo3 = { version = "0.27", features = ["extension-module", "abi3-py39"] }
wasm-bindgen = "0.2"
serde-wasm-bindgen = "0.6"
deunicode = "1"
fancy-regex = "0.16"
# 0.38 is the last release that builds on the pinned toolchain; the ones
# after it need a newer compiler than the rest of this asks for.
lopdf = { version = "0.38", default-features = false }
# Reading one small member out of an EPUB. Default features pull in four
# compression backends; an EPUB is deflate or nothing.
zip = { version = "2", default-features = false, features = ["deflate"] }
regex = "1"
schemars = "1"
serde = { version = "1", features = ["derive"] }
# float_roundtrip: without it a float read back from JSON can be one unit in
# the last place away from the one that was written, which would make a
# record that round-trips through a pipe not the record it started as.
serde_json = { version = "1", features = ["float_roundtrip"] }
thiserror = "2"
unicode-general-category = "1"
unicode-normalization = "0.1"
ureq = { version = "3", features = ["json"] }
tiktoken-rs = "0.12"
[workspace.lints.rust]
unsafe_code = "forbid"
missing_docs = "warn"
[profile.release]
strip = true
lto = true
codegen-units = 1
# The Python extension module, which cannot be stripped the way a binary can.
# Stripping a dylib's symbols leaves one macOS refuses to load at all —
# "mis-aligned LINKEDIT string pool" — and there is nothing to strip for
# anyway, since the interpreter resolves its symbols at load time.
[profile.wheel]
inherits = "release"
strip = false