fix: explain draft set-input local targets

This commit is contained in:
lda
2026-06-29 21:47:16 +07:00 Verified
parent 12e72a3968
commit 040f61ab7e
2 changed files with 42 additions and 1 deletions
+17 -1
View File
@@ -62,6 +62,19 @@ def _parse_output_map_flags(values: list[str] | None) -> dict[str, str]:
return parsed
def _parse_step_input_map_flags(values: list[str] | None) -> dict[str, str]:
"""Parse graph-source to bare-local input mappings for one draft step."""
parsed = _parse_map_flags(values)
for source, target in parsed.items():
if target.startswith("local."):
bare_target = target.removeprefix("local.")
raise typer.BadParameter(
"--map target must be a bare local field; "
f"use {source}={bare_target}, not {source}={target}"
)
return parsed
def _parse_route_flags(values: list[str] | None) -> dict[str, str]:
return _parse_assignment_flags(
values,
@@ -263,10 +276,13 @@ def set_step_input_map(
--map entries in one command for a complete replacement. Use --merge only
when adding or updating entries across a later revision.
Targets are bare node-local field names. Use `--map input.text=text`, not
`--map input.text=local.text`.
Run `wf draft validate <workspace_id>` after map edits; validation reports
unresolved paths and conflicting writes.
"""
input_map = _parse_map_flags(mapping)
input_map = _parse_step_input_map_flags(mapping)
context = load_cli_context(ctx)
emit_json(
run_cli_operation(
+25
View File
@@ -153,6 +153,8 @@ def test_wf_draft_map_help_explains_replace_merge_and_validate() -> None:
assert "replaces the full input map" in input_help
assert "Use --merge only" in input_help
assert "draft validate" in input_help
assert "input.text=text" in input_help
assert "input.text=local.text" in input_help
assert "replaces the full output map" in output_help
assert "Use --merge only" in output_help
assert "draft validate" in output_help
@@ -254,3 +256,26 @@ def test_wf_draft_route_flags_reject_duplicate_outcomes() -> None:
assert branch_result.exit_code == 2
assert "duplicate --route for 'ok'" in add_result.output
assert "duplicate --route for 'ok'" in branch_result.output
def test_wf_draft_set_input_rejects_local_prefixed_target() -> None:
result = runner.invoke(
app,
[
"draft",
"set-input",
"report_ws",
"--revision",
"1",
"--step",
"render",
"--map",
"input.text=local.text",
],
)
assert result.exit_code == 2
output = " ".join(result.output.split())
assert "bare local field" in output
assert "input.text=text" in output
assert "input.text=local.text" in output