blotter-cli 1.1.0

Append-only friction ledger for AI agents: log the cuts that got in the way and the findings worth writing up, find what recurs, promote it into durable fixes, and verify the fixes held.
Documentation
[package]
name = "blotter-cli"
version = "1.1.0"
edition = "2024"
rust-version = "1.89"
license = "MIT"
description = "Append-only friction ledger for AI agents: log the cuts that got in the way and the findings worth writing up, find what recurs, promote it into durable fixes, and verify the fixes held."
repository = "https://github.com/BigCactusLabs/blotter"
keywords = ["cli", "agents", "ai", "jsonl", "friction"]
categories = ["command-line-utilities", "development-tools"]
include = ["src/**", "Cargo.toml", "Cargo.lock", "README.md", "CHANGELOG.md", "LICENSE"]

[lib]
name = "blotter"

[[bin]]
name = "blotter"
path = "src/main.rs"

[dependencies]
# No "color" feature: help/error output must stay ANSI-free for agent consumers.
# The old `color = ColorChoice::Never` builder setting is unavailable without the
# feature, so re-enabling clap defaults would silently colorize an agent-facing tool.
clap = { version = "4", default-features = false, features = ["derive", "std", "help", "usage", "error-context", "suggestions"] }
jiff = { version = "0.2", default-features = false, features = ["std", "perf-inline"] }
serde = { version = "1", features = ["derive"] }
serde_json = { version = "1", features = ["preserve_order"] }
sha2 = "0.11"
thiserror = "2"
libc = "0.2"

[dev-dependencies]
assert_cmd = "2"
tempfile = "3"

[profile.release]
# Speed over size: measured at 100k records, opt-level = "z" cost 2.15x CPU on triage
# (6.61 s vs 3.07 s), 1.76x on list, and 1.40x on verify, for 558 KiB of binary
# (988 KB vs 1.5 MB). Peak RSS was unchanged. The analyzers are the stated scale risk,
# so the half megabyte buys more than it costs.
opt-level = 3
lto = true
codegen-units = 1
panic = "abort"
strip = true

# preserve_order's IndexMap grows serde_json::Value past the lint threshold; boxing 53 AppResult signatures is not worth it for a short-lived CLI (r13).
[lints.clippy]
result_large_err = "allow"