idx-cli/Cargo.toml
hermes 1e551385d0 fix: close the remaining review findings (cross-process lock, partials)
Second Codex (gpt-6.1-sol, xhigh) pass over 60634d3, each item verified
before fixing:

- new: the sync recheck hashed an existing empty database before schema
  setup, so the first sync falsely reported an external change. Hash
  after setup; a published snapshot already has the schema and keeps
  its bytes.
- sync, import, and entity edits now hold a cross-process lock
  (<db>.lock, std File::lock), so a sync cannot replace the database
  under an import running in another process. Import validates and
  downloads before taking the lock, keeping its error order. MSRV
  1.85 -> 1.89 for File::lock.
- the row-count rebuild branch also never downgrades history.
- cache reads no longer delete corrupt entries (a concurrent writer may
  have just replaced them); the next put overwrites atomically.
- idx-mcp validates the changes limit before querying and runs each
  requested section or analysis once.
- XLSX parsing bounds total cell text, so one large shared string
  referenced from many cells cannot exhaust memory.
- PDF/archive percentages must be 0-100%; HHI uses saturating math.

CLI goldens unchanged. Live A/B vs 0.2.4: 16 passed, discover hits the
IDX 403 on both builds (exit 4 vs 1, intended).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:20:57 +00:00

23 lines
795 B
TOML

[workspace]
resolver = "3"
members = ["crates/idx-core", "crates/idx-cli", "crates/idx-mcp"]
[workspace.package]
version = "0.3.0"
edition = "2024"
rust-version = "1.89"
license = "MIT"
repository = "https://github.com/0xrsydn/idx-cli"
homepage = "https://github.com/0xrsydn/idx-cli"
[workspace.dependencies]
idx-core = { path = "crates/idx-core", version = "=0.3.0" }
clap = { version = "4", features = ["derive"] }
serde = { version = "1", features = ["derive"] }
serde_json = { version = "1", features = ["raw_value"] }
toml = "0.8"
chrono = { version = "0.4", features = ["serde"] }
ureq = { version = "3", features = ["json", "cookies"] }
rusqlite = { version = "0.32", features = ["bundled-full"] }
sha2 = "0.10"
zip = { version = "2", default-features = false, features = ["deflate"] }