fabro/lib/apps/fabro-cli/tests/it/cmd
Bryan Helmkamp 467087998d
Read workflow graphs through Petri's DOT parser
Fabro's own DOT parser was left with one job after create-time compile
moved to Petri: walking a workflow's file references for the bundler and
the workflow-version store, and reading a name, a goal and two counts.
Petri's frontend parses the same language, so the parser goes and a small
crate reads the graph through Petri's.

`fabro-dot` is that crate: `WorkflowGraph::parse` over
`petri_frontend_attractor::dot` and its semantic model (defaults applied,
subgraphs flattened, chains expanded), `references(position)` as the one
walker over the static-reference vocabulary (each reference with its node
and position, file references checked to be template-free), and
`normalize_for_graphviz`, the re-emit of Fabro DOT with dotted attribute
keys quoted, which the SVG render needs. It sits beside `fabro-petri`
rather than inside it because `fabro-petri` depends on `fabro-workflow`,
which depends on `fabro-workflow-version`: the version store cannot reach
`fabro-petri` without a cycle, and the bundler should not pull the engine
in to read a graph.

Deleted: `fabro-graphviz`'s lexer, grammar, AST, semantic pass and
`parse_ast` (1,829 lines, plus the `nom` dependency); the DOT model in
`fabro-types::graph` (`Graph`, `Node`, `Edge`, `AttrValue`,
`shape_to_handler_type`), with only `ReferenceKind` kept, moved to
`fabro_types::reference`; `fabro-template`'s `visit_graph_references` and
the `GraphReference`/`GraphPosition` types, with the template-syntax rule
(`validate_static_reference`) kept there; the pull-request body's DOT
fallback summary, which was unreachable because the DOT source only
travels with the run spec whose display graph the summary already reads.
`fabro-graphviz` is now the render alone, over `fabro-dot`.

Parity: the old and new walkers were run over every `.fabro` and `.dot`
file in the repository (118) before the deletion. Every reference set is
identical. Five files differ in what Petri reads more correctly: a
backslash before a newline inside a quoted string is a line continuation
(four files, inline prompt text only), and a node named only by an edge
counts as a node (`test/edge_only_node.fabro`, 3 nodes rather than 2, so
the `fabro validate` snapshot moves). The checked-in bundles' shapes and
references are pinned by a snapshot in `fabro-dot`.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-19 12:23:57 -04:00
..
approve.rs Keep approval help concise and document attaching to interviews 2026-09-17 15:15:42 -04:00
archive.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
artifact_cp.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
artifact_list.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
attach.rs Record the snapshots the Petri pin and the record positions changed 2026-09-18 22:17:15 -04:00
auth.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
cli_reference.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
config.rs Create CLI runs from immutable workflow intents 2026-09-01 16:14:34 -04:00
create.rs Port the CLI tests to Petri runs and the run stream 2026-09-18 14:30:18 -04:00
deny.rs Keep approval help concise and document attaching to interviews 2026-09-17 15:15:42 -04:00
diff.rs Resolve blob references in inspect, diff, output and dump 2026-09-18 16:00:11 -04:00
discord.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
docs.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
doctor.rs Point twin_doctor's isolated server at the twin 2026-09-14 09:41:05 -06:00
dump.rs Hand Petri the server's environment and MCP catalogs 2026-09-19 07:08:08 -04:00
events.rs Record the snapshots the Petri pin and the record positions changed 2026-09-18 22:17:15 -04:00
exec.rs Bump lithos-llm to 43a42ac and migrate catalogs to the codecs schema 2026-09-18 22:07:00 -04:00
fabro.rs Merge remote-tracking branch 'origin/main' into petri-integration 2026-09-19 06:37:02 -04:00
graph.rs Delete fabro-validate and fabro-acp; validate on Petri's check 2026-09-18 11:32:04 -04:00
inspect.rs Build the run's display graph from Petri's admission 2026-09-19 11:41:58 -04:00
install.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
json_global.rs Port the CLI tests to Petri runs and the run stream 2026-09-18 14:30:18 -04:00
logs.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
mcp.rs Read workflow graphs through Petri's DOT parser 2026-09-19 12:23:57 -04:00
mod.rs Delete the checkpoint endpoint, fabro parse, and the fabro-workflow shims 2026-09-19 09:31:09 -04:00
model.rs Expose lithos request and response shapes through the API, server, CLI, and web 2026-09-09 17:26:57 -06:00
model_list.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
model_test.rs Expose lithos request and response shapes through the API, server, CLI, and web 2026-09-09 17:26:57 -06:00
parent.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
pr.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
pr_close.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
pr_create.rs Make pull request creation durable and asynchronous 2026-08-01 19:28:52 -04:00
pr_link.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
pr_merge.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
pr_unlink.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
pr_view.rs Serve the run stream as the only run event API 2026-09-18 13:36:00 -04:00
preflight.rs Build the run's display graph from Petri's admission 2026-09-19 11:41:58 -04:00
provider.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
provider_login.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
ps.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
render_graph.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
repo.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
repo_deinit.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
repo_init.rs Create CLI runs from immutable workflow intents 2026-09-01 16:14:34 -04:00
resume.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
rm.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
run.rs Hand Petri the server's environment and MCP catalogs 2026-09-19 07:08:08 -04:00
runner.rs Regenerate the checkpoint client model and name the CLI stream helpers 2026-09-18 14:45:07 -04:00
sandbox_cp.rs Project a Petri run's sandbox instance from its scope records 2026-09-18 15:57:12 -04:00
sandbox_preview.rs Route Daytona sandboxes through the sandbox driver 2026-09-09 19:14:13 -06:00
sandbox_ssh.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
secret.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
secret_list.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
secret_rm.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
secret_set.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
send_analytics.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
send_panic.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
server_start.rs Remove the engine flag: every run is a Petri run 2026-09-18 09:58:21 -04:00
server_status.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
server_stop.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
start.rs Create CLI runs from immutable workflow intents 2026-09-01 16:14:34 -04:00
support.rs Fix what the gates found after the removal sweep 2026-09-19 10:15:15 -04:00
system.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
system_df.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
system_events.rs Serve the run stream as the only run event API 2026-09-18 13:36:00 -04:00
system_info.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
system_prune.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
system_repair.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
test_panic.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
top_level.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
unarchive.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
uninstall.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
upgrade.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
validate.rs Read workflow graphs through Petri's DOT parser 2026-09-19 12:23:57 -04:00
variable.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
variable_get.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
variable_list.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
variable_rm.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
variable_set.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
version.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
wait.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
worker_auth.rs Regenerate the checkpoint client model and name the CLI stream helpers 2026-09-18 14:45:07 -04:00
workflow.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
workflow_create.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
workflow_list.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00