fabro/lib/crates/fabro-cli/tests/it/cmd
Bryan Helmkamp f07bb4aaba
feat(cli): support sparse input overrides (#222)
## Summary
- Add repeatable `-I` / `--input KEY=VALUE` CLI overrides for workflow
run inputs on `fabro run`, `fabro create`, and `fabro preflight`. CLI
inputs are sparse per-key overrides that merge over the resolved config
inputs (preserving unrelated inherited values), unlike TOML
`[run.inputs]` which still replaces wholesale.
- Manifest bundling and graph-level goal resolution render workflow
source with the effective inputs before structural scanning, so
input-driven `@prompt`, `import`, and `stack.child_workflow` paths get
bundled correctly.
- Persist raw `KEY=VALUE` strings on `ManifestArgs.input` so server-side
replay applies the same sparse overrides on top of merged config.
- Review-driven cleanups: shared `TemplateContext::for_input_scan`
helper for the recurring "render inputs but defer goal" idiom (replaces
4 sites), `#[derive(Default)]` on `ManifestBuildInput` to drop
boilerplate, inline trivial `apply_input_overrides` wrapper, drop a
redundant clone, and tighten the parser/test helpers.

## Test plan
- [ ] `cargo nextest run -p fabro-cli -p fabro-config -p fabro-server -p
fabro-template -p fabro-workflow`
- [ ] `cargo +nightly-2026-04-14 fmt --check --all`
- [ ] `cargo +nightly-2026-04-14 clippy -p fabro-cli -p fabro-config -p
fabro-server -p fabro-template -p fabro-workflow --all-targets -- -D
warnings`
- [ ] Smoke: `fabro run <workflow> -I key=value --input other=42`
overrides those keys while preserving unrelated inherited inputs
- [ ] Smoke: `-I` accepts strings, integers, floats, booleans, empty
values; rejects arrays, inline tables, datetimes; rejects missing `=`
and empty key
- [ ] Smoke: input-driven `@prompts/{{ inputs.foo }}` and
`stack.child_workflow="{{ inputs.bar }}/workflow.fabro"` paths bundle
correctly when overridden via `-I`

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 10:00:35 -04:00
..
archive.rs chore(test): extract TestContext::set_http_target helper 2026-04-30 10:11:47 -04:00
artifact_cp.rs test(cli): trim slow integration fixture setup 2026-04-28 19:14:56 -07:00
artifact_list.rs test(cli): trim slow integration fixture setup 2026-04-28 19:14:56 -07:00
attach.rs fix(runs): restore terminal sandbox regressions 2026-05-08 22:41:42 -04:00
auth.rs test(cli): tighten env-dev-token-ignore tests 2026-05-01 16:25:13 -04:00
cli_reference.rs refactor(dev): decouple CLI reference generation 2026-05-06 12:31:02 -04:00
config.rs migrate cli install tests off sparse settings layers 2026-04-23 18:37:37 -04:00
create.rs feat(cli): support sparse input overrides (#222) 2026-05-09 10:00:35 -04:00
diff.rs test(cli): prune slow integration outliers 2026-04-28 19:26:27 -07:00
discord.rs refactor(cli): deglobalize server and storage target flags 2026-04-05 16:06:42 -04:00
docs.rs refactor(cli): deglobalize server and storage target flags 2026-04-05 16:06:42 -04:00
doctor.rs chore(clippy): require reasons on allow attributes 2026-04-19 20:24:24 -04:00
dump.rs Surface silent fallback warnings in runs and logs (#205) 2026-05-05 09:18:05 -04:00
events.rs fix(runs): restore terminal sandbox regressions 2026-05-08 22:41:42 -04:00
exec.rs chore(test): extract TestContext::set_http_target helper 2026-04-30 10:11:47 -04:00
fabro.rs feat(cli): split run events and raw logs 2026-05-06 13:29:35 -04:00
fork.rs test(cli): trim slow integration fixture setup 2026-04-28 19:14:56 -07:00
graph.rs feat(cli): render fatal errors with miette 2026-04-24 15:35:57 -04:00
inspect.rs feat(run): separate stage state and artifact retries 2026-05-01 20:10:47 -04:00
install.rs test(cli): refresh help-text snapshots for backtick-wrapped placeholders 2026-05-06 08:29:53 -04:00
json_global.rs feat(cli): split run events and raw logs 2026-05-06 13:29:35 -04:00
logs.rs fix(cli): preserve API error details 2026-05-06 14:03:12 -04:00
mod.rs feat(cli): split run events and raw logs 2026-05-06 13:29:35 -04:00
model.rs chore(catalog): add GPT-5.5 and GPT-5.5 Pro, set 5.5 as OpenAI default 2026-05-04 11:12:40 -04:00
model_list.rs refactor(cli): separate local socket and storage defaults 2026-04-06 11:57:14 -04:00
model_test.rs Model Test Bounded Concurrency Implementation Plan (#204) 2026-05-04 13:46:44 -04:00
parse.rs feat(cli): render fatal errors with miette 2026-04-24 15:35:57 -04:00
pr.rs remove(cli): drop pr list command entirely 2026-04-24 08:56:07 -04:00
pr_close.rs refactor(pr): simplify server-side PR plumbing 2026-04-24 11:17:01 -04:00
pr_create.rs refactor(types): remove stage status compatibility 2026-04-30 06:48:47 -04:00
pr_merge.rs refactor(pr): simplify server-side PR plumbing 2026-04-24 11:17:01 -04:00
pr_view.rs test(cli): trim slow integration fixture setup 2026-04-28 19:14:56 -07:00
preflight.rs feat(cli): support sparse input overrides (#222) 2026-05-09 10:00:35 -04:00
provider.rs refactor(cli): deglobalize server and storage target flags 2026-04-05 16:06:42 -04:00
provider_login.rs Complete provider credential auth and scripted install 2026-04-13 09:15:45 -04:00
ps.rs test(cli): tighten env-dev-token-ignore tests 2026-05-01 16:25:13 -04:00
render_graph.rs lint(clippy): disallow blocking std::io and std::net on Tokio paths 2026-04-19 16:06:02 -04:00
repo.rs feat(cli): render fatal errors with miette 2026-04-24 15:35:57 -04:00
repo_deinit.rs refactor(config): move project state under .fabro 2026-04-11 12:55:46 -04:00
repo_init.rs feat(cli): render fatal errors with miette 2026-04-24 15:35:57 -04:00
resume.rs test(cli): prune slow integration outliers 2026-04-28 19:26:27 -07:00
rewind.rs test(cli): trim slow integration fixture setup 2026-04-28 19:14:56 -07:00
rm.rs fix(system): expose unreadable run repair flow 2026-05-06 07:15:18 -04:00
run.rs feat(cli): support sparse input overrides (#222) 2026-05-09 10:00:35 -04:00
runner.rs fix(api): type interview answer submissions 2026-05-08 09:18:35 -07:00
sandbox_cp.rs test(cli): refresh help-text snapshots for backtick-wrapped placeholders 2026-05-06 08:29:53 -04:00
sandbox_preview.rs Make git metadata sandbox-native 2026-04-27 21:43:15 -07:00
sandbox_ssh.rs feat(cli): render fatal errors with miette 2026-04-24 15:35:57 -04:00
secret.rs feat(cli): render fatal errors with miette 2026-04-24 15:35:57 -04:00
secret_list.rs feat: add typed secrets metadata and API 2026-04-12 12:47:08 -04:00
secret_rm.rs refactor(cli): deglobalize server and storage target flags 2026-04-05 16:06:42 -04:00
secret_set.rs test(cli): align stale CI snapshots 2026-04-24 19:53:02 -04:00
send_analytics.rs refactor(cli): deglobalize server and storage target flags 2026-04-05 16:06:42 -04:00
send_panic.rs refactor(cli): deglobalize server and storage target flags 2026-04-05 16:06:42 -04:00
server_start.rs fix(server): default foreground logs to stdout 2026-05-06 12:41:52 -04:00
server_status.rs refactor(server): unify daemon runtime metadata 2026-04-22 16:07:52 -04:00
server_stop.rs refactor(test): promote shared server-lifecycle test helpers into fabro-test 2026-04-19 16:43:26 -04:00
start.rs feat(cli): render fatal errors with miette 2026-04-24 15:35:57 -04:00
support.rs fix(runs): restore terminal sandbox regressions 2026-05-08 22:41:42 -04:00
system.rs fix(system): expose unreadable run repair flow 2026-05-06 07:15:18 -04:00
system_df.rs test(cli): trim slow integration fixture setup 2026-04-28 19:14:56 -07:00
system_events.rs refactor(cli): finish command context cleanup 2026-04-23 07:14:32 -04:00
system_info.rs refactor(cli): finish command context cleanup 2026-04-23 07:14:32 -04:00
system_prune.rs test(cli): trim slow integration fixture setup 2026-04-28 19:14:56 -07:00
system_repair.rs fix(system): expose unreadable run repair flow 2026-05-06 07:15:18 -04:00
test_panic.rs test: speed up slow default-profile tests and tighten nextest thresholds 2026-04-05 13:15:59 -04:00
top_level.rs feat(cli): show curated landing output for bare fabro 2026-04-17 08:59:03 -04:00
unarchive.rs chore(test): extract TestContext::set_http_target helper 2026-04-30 10:11:47 -04:00
uninstall.rs refactor(server): unify daemon runtime metadata 2026-04-22 16:07:52 -04:00
upgrade.rs feat(cli): render fatal errors with miette 2026-04-24 15:35:57 -04:00
validate.rs fix(cli): keep validate off runtime preflight 2026-04-28 14:50:04 -07:00
version.rs feat(cli): add fabro version command 2026-04-14 16:30:53 -04:00
wait.rs test(cli): trim slow integration fixture setup 2026-04-28 19:14:56 -07:00
worker_auth.rs fix(test): align worker token fixtures with auth routing 2026-05-02 12:08:00 -04:00
workflow.rs test(cli): refresh list output expectations 2026-04-14 11:30:34 -04:00
workflow_create.rs feat(cli): render fatal errors with miette 2026-04-24 15:35:57 -04:00
workflow_list.rs feat(cli): render fatal errors with miette 2026-04-24 15:35:57 -04:00