Preserve the Bengali and MyBatis catalog additions, keep Laravel storage examples disk-consistent, isolate ECC 2 test configuration with private permissions, and verify every command-referenced runtime script is published.
Addresses review feedback on #3277: the previous commit sandboxed the
primary config path, but Config::global_config_paths() also reads the
legacy $HOME/.claude/ecc2.toml. A test that called Config::load() would
pick up (or fail on a malformed) developer-local legacy config.
Under cfg(test), legacy_global_config_path() now resolves inside the same
per-test-thread scratch root as config_path().
Proof of red (new test, before the fix):
$ cargo test legacy_config_path_under_test
running 1 test
test config::tests::legacy_config_path_under_test_is_sandboxed_away_from_user_home ... FAILED
failures:
---- config::tests::legacy_config_path_under_test_is_sandboxed_away_from_user_home stdout ----
tests must never read the real legacy user config, got /Users/<me>/.claude/ecc2.toml
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
failures:
config::tests::legacy_config_path_under_test_is_sandboxed_away_from_user_home
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 491 filtered out; finished in 0.00s
error: test failed, to rerun pass `--bin ecc-tui`
After the fix:
$ cargo test legacy_config_path_under_test
test config::tests::legacy_config_path_under_test_is_sandboxed_away_from_user_home ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 491 filtered out
$ cargo test # full suite
test result: ok. 491 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out
Refs #3276
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011Y54kLgLGzLGqAxwLMFEc9
Dashboard tests that spawn sessions reach Config::save() through
auto_split_layout_after_spawn, which wrote to the developer's real
~/Library/Application Support/ecc2/config.toml. The fixture's db_path
pointed at a deleted temp dir, so the next `cargo run` failed with
"unable to open database file".
Under cfg(test), config_root() now returns a per-test-thread scratch
directory that is removed when the thread exits, so no test can reach
the real user config.
Fixes#3276
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011Y54kLgLGzLGqAxwLMFEc9
- TokenMeter widget using ratatui Gauge with color gradient (green->yellow->red)
- Budget fields (cost_budget_usd, token_budget) in Config
- Aggregate cost display in status bar
- Warning state at 80%+ budget consumption
- Tests for gradient, config fallback, and meter rendering
Initial scaffold for ECC 2.0, a terminal-native agentic IDE built with
Ratatui. Compiles to a 3.4MB single binary.
Core modules:
- Session manager with SQLite-backed state store
- TUI dashboard with split-pane layout (sessions, output, metrics)
- Worktree orchestration (auto-create per agent session)
- Observability with tool call risk scoring
- Inter-agent communication via SQLite mailbox
- Background daemon with heartbeat monitoring
- CLI with start/stop/sessions/status/daemon subcommands
Tech stack: Rust + Ratatui + Crossterm + Tokio + rusqlite + git2 + clap