487f0b6fef
`run_headless_commands` read `crossterm::terminal::size()`, and the page size decides where `page-scroll` lands, so one script wrote a different record in a different window — and CI (no tty, 80x24 default) disagreed with a shell. Pin it to 80x24 in `HEADLESS_EXTENT`. The test drives two sizes through LINES/ COLUMNS with the child detached by `setsid`, and asserts the same record. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
84 lines
2.6 KiB
TOML
84 lines
2.6 KiB
TOML
[workspace]
|
|
members = [".", "crates/improvise-formula", "crates/improvise-core", "crates/improvise-protocol", "crates/improvise-io", "crates/improvise-command", "crates/improvise-wasm-client", "crates/improvise-ws-server", "crates/improvise-worker-server", "crates/gp-tree", "crates/improvise-gp"]
|
|
|
|
[package]
|
|
name = "improvise"
|
|
version = "0.1.0-rc2"
|
|
edition = "2024"
|
|
description = "Terminal pivot-table modeling in the spirit of Lotus Improv"
|
|
license = "Apache-2.0"
|
|
repository = "https://github.com/fiddlerwoaroof/improvise"
|
|
homepage = "https://github.com/fiddlerwoaroof/improvise"
|
|
readme = "README.md"
|
|
keywords = ["tui", "pivot", "spreadsheet", "data", "improv"]
|
|
categories = ["command-line-utilities", "visualization"]
|
|
|
|
[[bin]]
|
|
name = "improvise"
|
|
path = "src/main.rs"
|
|
|
|
# improvise-i5tk's acceptance criterion: whether the TUI's whole-grid GridCache
|
|
# is worth narrowing to a viewport is a measurement, not an argument.
|
|
# `test = false`: it takes seconds by design, and the suite's rule is that no
|
|
# single test binary exceeds two of them.
|
|
[[bench]]
|
|
name = "grid_projection"
|
|
harness = false
|
|
test = false
|
|
|
|
[[bench]]
|
|
name = "reshape_observation"
|
|
harness = false
|
|
test = false
|
|
|
|
[dependencies]
|
|
gp-tree = { path = "crates/gp-tree" }
|
|
improvise-core = { path = "crates/improvise-core" }
|
|
improvise-formula = { path = "crates/improvise-formula" }
|
|
improvise-io = { path = "crates/improvise-io" }
|
|
improvise-command = { path = "crates/improvise-command" }
|
|
ratatui = "0.30"
|
|
crossterm = "0.29"
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
anyhow = "1"
|
|
thiserror = "2"
|
|
indexmap = { version = "2", features = ["serde"] }
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
flate2 = "1"
|
|
unicode-width = "^0.2"
|
|
csv = "1"
|
|
clap = { version = "4.6.7", features = ["derive"] }
|
|
enum_dispatch = "0.3.13"
|
|
|
|
[dev-dependencies]
|
|
# Only `tests/grid_frame_agreement.rs` needs it: that test drives the TUI
|
|
# widget and the browser client over ONE `GridCache` and asserts they draw
|
|
# the same grid frame (improvise-anr9). A dev-dependency, so the terminal
|
|
# binary does not grow a wasm client; `improvise-wasm-client` builds
|
|
# natively, which is how its own tests already run.
|
|
improvise-wasm-client = { path = "crates/improvise-wasm-client" }
|
|
improvise-protocol = { path = "crates/improvise-protocol" }
|
|
# `tests/headless_cli.rs` detaches the binary from any terminal with `setsid`.
|
|
libc = "0.2"
|
|
pest = "2.9.2"
|
|
pest_derive = "2.9.2"
|
|
pest_meta = "2.9.2"
|
|
proptest = "1"
|
|
tempfile = "3"
|
|
|
|
[profile.release]
|
|
opt-level = 3
|
|
lto = true
|
|
codegen-units = 1
|
|
strip = true
|
|
|
|
[profile.profiling]
|
|
inherits = "release"
|
|
strip = false
|
|
debug = 2
|
|
|
|
# The profile that 'dist' will build with
|
|
[profile.dist]
|
|
inherits = "release"
|