mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-08-28 05:27:41 +00:00
A node with no `shape` defaulted to `box`, which resolves to the agent handler. That made a shapeless `script` node run as an LLM call prompted with its own label, while the `script` was reported as inert — wrong behavior behind a warning. `script` is read by the command handler and by nothing else, so a shapeless node that sets it is unambiguously a command node. `shape()` now infers `parallelogram` in that case. An explicit `shape` still wins. Two rules keep the inference honest: - `script_prompt_conflict` — setting both `script` and `prompt` is an error. No handler reads both. It fires regardless of shape so that adding one cannot downgrade the error to a warning. - `command_requires_script` — a command node without a script is an error. Without this the original trap just moves: a node meant as a command that omits its script silently becomes an agent again. Also drops the `tool_command` alias in favor of `script` alone, routing the six read sites through a new `Node::script()` accessor. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| batch_clean.dot | ||
| batch_has_errors.dot | ||
| batch_warnings_only.dot | ||
| consensus_task.dot | ||
| green_test_complex.dot | ||
| green_test_moderate.dot | ||
| green_test_vague.dot | ||
| refactor_test_complex.dot | ||
| refactor_test_moderate.dot | ||
| refactor_test_vague.dot | ||
| reference_template.dot | ||
| semport.dot | ||
| simple_example.dot | ||
| solitaire_fast.dot | ||