btctax-cli 0.14.0

btctax — an offline, single-user US Bitcoin tax ledger (CLI: import, reconcile, and compute).
Documentation
[package]
name = "btctax-cli"
version = "0.14.0"
edition.workspace = true
license.workspace = true
description = "btctax — an offline, single-user US Bitcoin tax ledger (CLI: import, reconcile, and compute)."
repository.workspace = true
homepage.workspace = true
keywords.workspace = true
categories = ["command-line-utilities", "finance"]
rust-version.workspace = true   # M3: enforce the workspace MSRV (1.88 — raised from 1.74, see FOLLOWUPS CI entry) like the other 3 crates

[lib]
name = "btctax_cli"
path = "src/lib.rs"

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

[dependencies]
btctax-core = { path = "../btctax-core", version = "0.14.0" }
btctax-store = { path = "../btctax-store", version = "0.14.0" }
btctax-adapters = { path = "../btctax-adapters", version = "0.14.0" }
btctax-forms = { path = "../btctax-forms", version = "0.14.0" }  # export-irs-pdf: fills official IRS PDFs
rust_decimal = { version = "1.36", default-features = false, features = ["std"] }
time = { version = "0.3", features = ["macros", "parsing", "formatting"] }
rusqlite = { version = "0.31", features = ["bundled"] } # cli_config side-table over the vault Connection
clap = { version = "4.5", features = ["derive"] }       # binary arg parsing (derive)
rpassword = "7.3"                                        # secure interactive passphrase (main only)
csv = "1.3"                                              # FR10 ledger CSV export
serde_json = { version = "1", features = ["preserve_order"] }                                         # classify-raw typed-payload input
toml = "0.8"                                             # full-return `income import` (offline TOML input)
serde_ignored = "0.1"                                    # P9 §2.3: reject unknown `income import` TOML keys
thiserror = "1"
dirs = "5"                                               # resolve the local price-cache path (#41 Part C; NO network)

[dev-dependencies]
tempfile = "3"
rust_decimal_macros = "1.36"
time = { version = "0.3", features = ["macros"] }
# Integration tests inject a controlled synthetic price provider via `Session::set_prices` [R0-C1].
btctax-adapters = { path = "../btctax-adapters", version = "0.14.0" }