Remove std::process::Command invocation of scripts/new-atom.sh from kei-forge. Templating moves to pure Rust — eliminates the sed-metacharacter injection class structurally, on top of the description whitelist that E2 added as defence-in-depth. src/generate.rs split into 4 Cubes (Constructor Pattern): - generate/placeholders.rs — 6-token substitution, longer-first ordering - generate/paths.rs — TargetPaths::resolve + assert_none_exist - generate/rollback.rs — Drop-based atomic rollback (Rust idiom for shell `trap ERR`) - generate/atom_tests.rs — 5 tempdir integration tests generate.rs dropped from 295 → 159 LOC as orchestration thin wrapper. Behavioural parity with scripts/new-atom.sh maintained: same 6 tokens, same order, refuse-overwrite, atomic rollback, same file-list ordering. scripts/new-atom.sh untouched on disk (still usable as standalone CLI). Cargo.toml: removed mock-generate feature flag (no longer needed — pure-Rust tests use tempfile::TempDir), added tempfile dev-dep. Tests: 44/44 (was 29 with mock-generate; +15 new pure-Rust unit tests across placeholders/paths/rollback/atom_tests). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
31 lines
626 B
TOML
31 lines
626 B
TOML
[package]
|
|
name = "kei-forge"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
rust-version = "1.75"
|
|
description = "Local web wizard for scaffolding new atoms"
|
|
|
|
[package.metadata.keisei]
|
|
backend = "none"
|
|
description = "Local web wizard for scaffolding new atoms"
|
|
|
|
[[bin]]
|
|
name = "kei-forge"
|
|
path = "src/main.rs"
|
|
|
|
[lib]
|
|
name = "kei_forge"
|
|
path = "src/lib.rs"
|
|
|
|
[dependencies]
|
|
axum = "0.7"
|
|
tokio = { version = "1", features = ["full"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
tower = "0.5"
|
|
tracing = "0.1"
|
|
tracing-subscriber = "0.3"
|
|
|
|
[dev-dependencies]
|
|
tower = { version = "0.5", features = ["util"] }
|
|
tempfile = "3"
|