mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-09 03:20:56 +00:00
Re-sync test/docs DOT fixtures with current documentation
Re-extracted all DOT examples from docs, added test fixtures for new pages (preview, brave-search, daytona, sub-workflow), recreated assembled snippet files, and excluded not-yet-working vnc-access and vpn-connections pages. 40 files now validate and dry-run clean. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
130339ee87
commit
97e4c41f4e
30 changed files with 222 additions and 354 deletions
|
|
@ -1,9 +1,8 @@
|
|||
# DOT Documentation Examples Test Checklist
|
||||
|
||||
## Summary
|
||||
- 36 .dot files (29 extracted from full workflows + 7 assembled from snippets)
|
||||
- Covers 29 doc pages, 118 DOT code blocks (29 full, 89 snippets)
|
||||
- Skipped: changelog/2026-02-27 (deprecated `handler=codergen` syntax)
|
||||
- 40 .dot files (34 extracted from full workflows + 6 assembled from snippets)
|
||||
- Skipped: changelog/2026-02-27 (deprecated `handler=codergen` syntax), human-tools/vnc-access, human-tools/vpn-connections (workflows not yet working)
|
||||
|
||||
## Phase 1: Validate (`arc validate`)
|
||||
|
||||
|
|
@ -11,66 +10,68 @@
|
|||
|---|------|--------|-------|
|
||||
| 1 | agents/outputs/output-patterns.dot | PASS | assembled |
|
||||
| 2 | agents/prompts/pipeline.dot | PASS | added start/exit |
|
||||
| 3 | changelog/2026-03-05/new-features.dot | PASS | assembled, added fallback |
|
||||
| 4 | core-concepts/agents/backend-demo.dot | PASS | assembled |
|
||||
| 5 | core-concepts/models/example.dot | PASS | added start/exit + wiring |
|
||||
| 6 | core-concepts/workflows/my-workflow.dot | PASS | |
|
||||
| 7 | examples/clone-substack/clone-substack.dot | PASS | 578 lines |
|
||||
| 8 | examples/definition-of-done/spec-dod-multimodel.dot | PASS | fixed condition quoting + fallbacks |
|
||||
| 9 | examples/definition-of-done/spec-dod.dot | PASS | fixed condition quoting + fallbacks |
|
||||
| 10 | examples/nlspec-conformance/n-l-spec-conformance.dot | PASS | added retry_target="fix" to goal_gate node |
|
||||
| 11 | examples/semantic-port/semantic-port.dot | PASS | added fallback edges |
|
||||
| 12 | examples/solitaire/build-solitaire.dot | PASS | fixed fallback_retry_target to match node name |
|
||||
| 13 | execution/context/example.dot | PASS | added start/exit |
|
||||
| 14 | execution/failures/example.dot | PASS | added start/exit |
|
||||
| 15 | execution/failures/example-02.dot | PASS | added start/exit |
|
||||
| 16 | execution/failures/example-03.dot | PASS | added start/exit |
|
||||
| 17 | execution/failures/example-04.dot | PASS | added start/exit |
|
||||
| 18 | execution/interviews/default-choice.dot | PASS | assembled |
|
||||
| 19 | execution/run-configuration/c-i.dot | PASS | added start/exit, has run.toml |
|
||||
| 20 | getting-started/why-arc/plan-implement.dot | PASS | |
|
||||
| 21 | reference/dot-language/implement-feature.dot | PASS | |
|
||||
| 22 | reference/dot-language/my-workflow.dot | PASS | |
|
||||
| 23 | tutorials/branch-loop/branch-loop.dot | PASS | |
|
||||
| 24 | tutorials/ensemble/ensemble.dot | PASS | |
|
||||
| 25 | tutorials/hello-world/hello.dot | PASS | |
|
||||
| 26 | tutorials/hello-world/sub-agent.dot | PASS | |
|
||||
| 27 | tutorials/hello-world/tool-use.dot | PASS | |
|
||||
| 28 | tutorials/multi-model/multi-model.dot | PASS | |
|
||||
| 29 | tutorials/parallel-review/parallel.dot | PASS | |
|
||||
| 30 | tutorials/plan-implement/plan-implement.dot | PASS | has @prompt stub |
|
||||
| 31 | workflows/human-in-the-loop/hitl-patterns.dot | PASS | assembled |
|
||||
| 32 | workflows/stages-and-nodes/all-node-types.dot | PASS | assembled, 15 nodes |
|
||||
| 33 | workflows/stylesheets/example.dot | PASS | |
|
||||
| 34 | workflows/transitions/transition-patterns.dot | PASS | assembled, added fallbacks |
|
||||
| 35 | workflows/variables/check.dot | PASS | has run.toml |
|
||||
| 36 | workflows/variables/example.dot | PASS | added start/exit |
|
||||
| 3 | changelog/2026-03-05/new-features.dot | PASS | assembled |
|
||||
| 4 | core-concepts/models/example.dot | PASS | added start/exit + wiring |
|
||||
| 5 | core-concepts/workflows/my-workflow.dot | PASS | |
|
||||
| 6 | examples/clone-substack/clone-substack.dot | PASS | 578 lines |
|
||||
| 7 | examples/definition-of-done/spec-dod-multimodel.dot | PASS | |
|
||||
| 8 | examples/definition-of-done/spec-dod.dot | PASS | |
|
||||
| 9 | examples/nlspec-conformance/n-l-spec-conformance.dot | PASS | |
|
||||
| 10 | examples/semantic-port/semantic-port.dot | PASS | |
|
||||
| 11 | examples/solitaire/build-solitaire.dot | PASS | |
|
||||
| 12 | execution/context/example.dot | PASS | added start/exit |
|
||||
| 13 | execution/failures/example.dot | PASS | added start/exit |
|
||||
| 14 | execution/failures/example-02.dot | PASS | added start/exit + label |
|
||||
| 15 | execution/failures/example-03.dot | PASS | added start/exit + referenced nodes |
|
||||
| 16 | execution/failures/example-04.dot | PASS | added start/exit |
|
||||
| 17 | execution/interviews/default-choice.dot | PASS | assembled |
|
||||
| 18 | execution/run-configuration/c-i.dot | PASS | added start/exit, has run.toml |
|
||||
| 19 | getting-started/why-arc/plan-implement.dot | PASS | |
|
||||
| 20 | human-tools/preview/build-and-preview.dot | PASS | new |
|
||||
| 21 | integrations/brave-search/research.dot | PASS | new |
|
||||
| 22 | integrations/daytona/example.dot | PASS | added start/exit |
|
||||
| 23 | reference/dot-language/implement-feature.dot | PASS | |
|
||||
| 24 | reference/dot-language/my-workflow.dot | PASS | |
|
||||
| 25 | tutorials/branch-loop/branch-loop.dot | PASS | |
|
||||
| 26 | tutorials/ensemble/ensemble.dot | PASS | |
|
||||
| 27 | tutorials/hello-world/hello.dot | PASS | |
|
||||
| 28 | tutorials/hello-world/sub-agent.dot | PASS | |
|
||||
| 29 | tutorials/hello-world/tool-use.dot | PASS | |
|
||||
| 30 | tutorials/multi-model/multi-model.dot | PASS | |
|
||||
| 31 | tutorials/parallel-review/parallel.dot | PASS | |
|
||||
| 32 | tutorials/plan-implement/plan-implement.dot | PASS | has @prompt stub |
|
||||
| 33 | tutorials/sub-workflow/implement-and-test.dot | PASS | new |
|
||||
| 34 | tutorials/sub-workflow/sub-workflow.dot | PASS | new |
|
||||
| 35 | workflows/human-in-the-loop/hitl-patterns.dot | PASS | assembled |
|
||||
| 36 | workflows/stages-and-nodes/all-node-types.dot | PASS | assembled |
|
||||
| 37 | workflows/stylesheets/example.dot | PASS | |
|
||||
| 38 | workflows/transitions/transition-patterns.dot | PASS | assembled |
|
||||
| 39 | workflows/variables/check.dot | PASS | has run.toml |
|
||||
| 40 | workflows/variables/example.dot | PASS | added start/exit |
|
||||
|
||||
## Phase 2: Dry Run (`arc run start --dry-run --auto-approve`)
|
||||
|
||||
| # | File | Status | Notes |
|
||||
|---|------|--------|-------|
|
||||
| 1-36 | (all) | | |
|
||||
| 1-40 | (all) | | |
|
||||
|
||||
## Phase 3: Haiku (`arc run start --model claude-haiku-4-5 --auto-approve`)
|
||||
|
||||
| # | File | Status | Notes |
|
||||
|---|------|--------|-------|
|
||||
| 1-36 | (all) | | |
|
||||
| 1-40 | (all) | | |
|
||||
|
||||
## Phase 4: Full (`arc run start --auto-approve`)
|
||||
|
||||
| # | File | Status | Notes |
|
||||
|---|------|--------|-------|
|
||||
| 1-36 | (all) | | |
|
||||
| 1-40 | (all) | | |
|
||||
|
||||
## Issues Found During Validation (fixed in test DOTs)
|
||||
|
||||
1. **Condition parser doesn't support multi-word values** — `preferred_label=More fixes needed` fails parse. Fixed by using underscored values (`more_fixes_needed`). Affects: definition-of-done examples. **This is a docs bug** — the source DOTs in docs/examples/ use multi-word condition values that won't parse.
|
||||
1. **Several "full" digraphs in docs lack start/exit nodes** — 10 extracted DOTs were minimal digraph wrappers showing graph-level attributes without start/exit nodes or wiring. Fixed by adding them in test DOTs.
|
||||
|
||||
2. **Several "full" digraphs in docs lack start/exit nodes** — 9 extracted DOTs were minimal digraph wrappers showing graph-level attributes without start/exit nodes or wiring. Fixed by adding them in test DOTs.
|
||||
|
||||
3. **All-conditional edges need unconditional fallback** — Validator requires at least one fallback edge when a node has only conditional outgoing edges. Fixed by adding fallback edges. Affects: semantic-port, definition-of-done examples, and assembled snippet DOTs.
|
||||
2. **All-conditional edges need unconditional fallback** — Validator requires at least one fallback edge when a node has only conditional outgoing edges. Fixed by adding fallback edges in assembled DOTs.
|
||||
|
||||
## Commands
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,8 @@
|
|||
// Assembled from docs/agents/outputs.mdx snippets
|
||||
// Tests output context keys and routing directives
|
||||
|
||||
digraph OutputPatterns {
|
||||
graph [goal="Exercise output and routing patterns from the outputs docs page"]
|
||||
start [shape=Mdiamond]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
// Line 25-29: Context keys from prior stages
|
||||
plan [label="Plan", prompt="Create an implementation plan."]
|
||||
implement [label="Implement", prompt="Implement the plan."]
|
||||
|
||||
// Line 68-78: Review node with routing directives
|
||||
plan [label="Plan"]
|
||||
implement [label="Implement"]
|
||||
review [
|
||||
label="Review",
|
||||
shape=tab,
|
||||
|
|
@ -20,14 +11,10 @@ digraph OutputPatterns {
|
|||
If everything looks good, respond with: \
|
||||
{\"preferred_next_label\": \"approve\"}."
|
||||
]
|
||||
exit [shape=Msquare]
|
||||
|
||||
fix [label="Fix", prompt="Fix the issues found."]
|
||||
|
||||
// Wiring
|
||||
start -> plan -> implement -> review
|
||||
|
||||
review -> fix [label="Fix"]
|
||||
review -> exit [label="Approve"]
|
||||
|
||||
fix -> review
|
||||
review -> implement [label="Fix"]
|
||||
review -> exit [label="Approve"]
|
||||
review -> exit [weight=-1]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
digraph Pipeline {
|
||||
graph [goal="Add a /health endpoint to the API server"]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
start [shape=Mdiamond]
|
||||
implement [prompt="Implement the following: $goal"]
|
||||
exit [shape=Msquare]
|
||||
|
||||
start -> implement -> exit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,28 +1,7 @@
|
|||
// Assembled from docs/changelog/2026-03-05.mdx snippets
|
||||
// Tests: condition expressions, model assignment, per-node max_visits,
|
||||
// $$ escape, and simplified handler type names
|
||||
|
||||
digraph NewFeatures {
|
||||
graph [goal="Exercise new features from the 2026-03-05 changelog"]
|
||||
start [shape=Mdiamond]
|
||||
stage_a [label="Stage A"]
|
||||
exit [shape=Msquare]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
// Line 85: Model assignment (gpt54-pro)
|
||||
stage_a [model="gpt54-pro", type="agent", prompt="The cost is $$50 and the goal is $goal"]
|
||||
|
||||
// Line 95: Per-node loop limit
|
||||
verify [type="agent", max_visits=20, prompt="Verify the implementation."]
|
||||
|
||||
// Line 128-129: Simplified handler type names
|
||||
stage_b [type="prompt", prompt="Summarize the results."]
|
||||
|
||||
// Wiring with condition expressions (line 31)
|
||||
start -> stage_a -> verify
|
||||
|
||||
verify -> stage_b [label="Pass", condition="outcome=success"]
|
||||
verify -> stage_a [label="Retry", condition="outcome=fail"]
|
||||
verify -> exit [label="Fallback"]
|
||||
|
||||
stage_b -> exit
|
||||
start -> stage_a -> exit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,18 +0,0 @@
|
|||
// Assembled from docs/core-concepts/agents.mdx snippets
|
||||
// Tests backend attribute and inline vs external prompts
|
||||
|
||||
digraph BackendDemo {
|
||||
graph [goal="Exercise agent backend and prompt patterns from the agents docs page"]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
// Line 47: CLI backend with explicit provider
|
||||
implement [label="Implement", backend="cli", llm_provider="anthropic"]
|
||||
|
||||
// Line 95-96: Inline prompt
|
||||
plan [label="Plan", prompt="Analyze the codebase and write a step-by-step plan."]
|
||||
|
||||
// Wiring
|
||||
start -> plan -> implement -> exit
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
version = 1
|
||||
goal = "Exercise agent backend and prompt patterns from the agents docs page"
|
||||
graph = "backend-demo.dot"
|
||||
|
||||
[sandbox]
|
||||
provider = "daytona"
|
||||
|
||||
[sandbox.daytona]
|
||||
auto_stop_interval = 60
|
||||
|
||||
[sandbox.daytona.labels]
|
||||
project = "arc-docs-test"
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
digraph Example {
|
||||
graph [
|
||||
goal="Demonstrate model stylesheet",
|
||||
model_stylesheet="
|
||||
* { llm_model: claude-haiku-4-5; }
|
||||
.coding { llm_model: claude-sonnet-4-5; reasoning_effort: high; }
|
||||
|
|
@ -8,12 +7,11 @@ digraph Example {
|
|||
"
|
||||
]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
start [shape=Mdiamond]
|
||||
spec [label="Write Spec"]
|
||||
implement [label="Implement", class="coding"]
|
||||
review [label="Review"]
|
||||
exit [shape=Msquare]
|
||||
|
||||
start -> spec -> implement -> review -> exit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
#\!/bin/sh
|
||||
echo "stub: $0"
|
||||
#!/bin/sh
|
||||
echo "fix-fmt stub"
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
#\!/bin/sh
|
||||
echo "stub: $0"
|
||||
#!/bin/sh
|
||||
echo "validate-artifacts stub"
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
#\!/bin/sh
|
||||
echo "stub: $0"
|
||||
#!/bin/sh
|
||||
echo "validate-browser stub"
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
#\!/bin/sh
|
||||
echo "stub: $0"
|
||||
#!/bin/sh
|
||||
echo "validate-build stub"
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
#\!/bin/sh
|
||||
echo "stub: $0"
|
||||
#!/bin/sh
|
||||
echo "validate-fmt stub"
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
#\!/bin/sh
|
||||
echo "stub: $0"
|
||||
#!/bin/sh
|
||||
echo "validate-test stub"
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
digraph Example {
|
||||
graph [goal="Test default fidelity setting", default_fidelity="summary:medium"]
|
||||
graph [default_fidelity="summary:medium"]
|
||||
start [shape=Mdiamond]
|
||||
work [label="Work"]
|
||||
exit [shape=Msquare]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
plan [label="Plan", prompt="Create a plan."]
|
||||
|
||||
start -> plan -> exit
|
||||
start -> work -> exit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,8 @@
|
|||
digraph Example {
|
||||
graph [goal="Test max_node_visits with per-node max_visits", max_node_visits="20"]
|
||||
graph [max_node_visits="20"]
|
||||
start [shape=Mdiamond]
|
||||
fix [label="Fix", max_visits=3]
|
||||
exit [shape=Msquare]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
implement [label="Implement", prompt="Implement the feature."]
|
||||
fix [label="Fix", max_visits=3, prompt="Fix the issues."]
|
||||
|
||||
start -> implement -> fix -> exit
|
||||
start -> fix -> exit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,10 @@
|
|||
digraph Example {
|
||||
graph [goal="Test retry_target attributes", retry_target="plan"]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
plan [label="Plan", prompt="Create a plan."]
|
||||
implement [label="Implement", prompt="Implement the plan."]
|
||||
verify [label="Verify", goal_gate="true", retry_target="implement", prompt="Verify the implementation."]
|
||||
graph [retry_target="plan"]
|
||||
start [shape=Mdiamond]
|
||||
plan [label="Plan"]
|
||||
implement [label="Implement"]
|
||||
verify [shape=box, label="Verify", goal_gate="true", retry_target="implement"]
|
||||
exit [shape=Msquare]
|
||||
|
||||
start -> plan -> implement -> verify -> exit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
digraph Example {
|
||||
graph [goal="Test stall_timeout setting", stall_timeout="300"]
|
||||
graph [stall_timeout="300"]
|
||||
start [shape=Mdiamond]
|
||||
work [label="Work"]
|
||||
exit [shape=Msquare]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
plan [label="Plan", prompt="Create a plan."]
|
||||
|
||||
start -> plan -> exit
|
||||
start -> work -> exit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
digraph Example {
|
||||
graph [goal="Test max_node_visits graph setting", max_node_visits="20"]
|
||||
graph [max_node_visits="20"]
|
||||
start [shape=Mdiamond]
|
||||
work [label="Work"]
|
||||
exit [shape=Msquare]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
implement [label="Implement", prompt="Implement the feature."]
|
||||
|
||||
start -> implement -> exit
|
||||
start -> work -> exit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,10 @@
|
|||
// Assembled from docs/execution/interviews.mdx snippet
|
||||
// Tests human gate with default_choice attribute
|
||||
|
||||
digraph DefaultChoice {
|
||||
graph [goal="Exercise human gate with default choice from the interviews docs page"]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
deploy [label="Deploy", prompt="Deploy the changes."]
|
||||
abort [label="Abort", prompt="Abort the deployment."]
|
||||
|
||||
// Line 114: Human gate with human.default_choice
|
||||
start [shape=Mdiamond]
|
||||
approve [shape=hexagon, label="Approve?", human.default_choice="deploy"]
|
||||
deploy [label="Deploy"]
|
||||
exit [shape=Msquare]
|
||||
|
||||
start -> approve
|
||||
|
||||
approve -> deploy [label="[A] Deploy"]
|
||||
approve -> abort [label="[R] Abort"]
|
||||
|
||||
deploy -> exit
|
||||
abort -> exit
|
||||
approve -> deploy [label="[D] Deploy"]
|
||||
approve -> exit [label="[S] Skip"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
digraph CI {
|
||||
graph [goal="Run tests for $repo_name"]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
start [shape=Mdiamond]
|
||||
clone [shape=parallelogram, script="git clone $repo_url repo"]
|
||||
test [label="Test", prompt="Run the $language test suite."]
|
||||
exit [shape=Msquare]
|
||||
|
||||
start -> clone -> test -> exit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,7 +86,11 @@ def find_custom_vars(code: str) -> list[str]:
|
|||
|
||||
|
||||
def main():
|
||||
skip_pages = {"changelog/2026-02-27"} # deprecated syntax
|
||||
skip_pages = {
|
||||
"changelog/2026-02-27", # deprecated handler=codergen syntax
|
||||
"human-tools/vnc-access", # workflows not yet working
|
||||
"human-tools/vpn-connections", # workflows not yet working
|
||||
}
|
||||
|
||||
extracted = 0
|
||||
skipped_snippets = 0
|
||||
|
|
|
|||
14
test/docs/human-tools/preview/build-and-preview.dot
Normal file
14
test/docs/human-tools/preview/build-and-preview.dot
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
digraph BuildAndPreview {
|
||||
graph [goal="Build and preview the marketing site"]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
build [label="Build Site", prompt="Install dependencies and build the marketing site."]
|
||||
serve [label="Start Dev Server", shape=parallelogram, script="cd site && npx serve -l 3000 &"]
|
||||
review [shape=hexagon, label="Review Preview"]
|
||||
|
||||
start -> build -> serve -> review
|
||||
review -> exit [label="[A] Approve"]
|
||||
review -> build [label="[R] Revise"]
|
||||
}
|
||||
12
test/docs/integrations/brave-search/research.dot
Normal file
12
test/docs/integrations/brave-search/research.dot
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
digraph Research {
|
||||
graph [goal="Research and summarize a topic"]
|
||||
rankdir=LR
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
research [label="Research", prompt="Use web_search to find recent information about $goal. Save your findings to research.md."]
|
||||
summarize [label="Summarize", shape=tab, prompt="Read research.md and write a concise summary of the key findings."]
|
||||
|
||||
start -> research -> summarize -> exit
|
||||
}
|
||||
8
test/docs/integrations/daytona/example.dot
Normal file
8
test/docs/integrations/daytona/example.dot
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
digraph Example {
|
||||
graph [stall_timeout="1200"]
|
||||
start [shape=Mdiamond]
|
||||
work [label="Work"]
|
||||
exit [shape=Msquare]
|
||||
|
||||
start -> work -> exit
|
||||
}
|
||||
15
test/docs/tutorials/sub-workflow/implement-and-test.dot
Normal file
15
test/docs/tutorials/sub-workflow/implement-and-test.dot
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
digraph ImplementAndTest {
|
||||
graph [goal="Implement the plan and make tests pass"]
|
||||
rankdir=LR
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
implement [label="Implement", prompt="Read plan.md and implement every step. Write the code and tests to disk."]
|
||||
validate [label="Validate", shape=parallelogram, script="python3 -m pytest -v 2>&1 || true"]
|
||||
gate [shape=diamond, label="Tests passing?"]
|
||||
|
||||
start -> implement -> validate -> gate
|
||||
gate -> exit [label="Pass", condition="outcome=success"]
|
||||
gate -> implement [label="Fix", max_visits=5]
|
||||
}
|
||||
13
test/docs/tutorials/sub-workflow/sub-workflow.dot
Normal file
13
test/docs/tutorials/sub-workflow/sub-workflow.dot
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
digraph SubWorkflow {
|
||||
graph [goal="Create a Python module (tempconv.py) that converts between Celsius, Fahrenheit, and Kelvin, with pytest tests"]
|
||||
rankdir=LR
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
plan [label="Plan", prompt="Analyze the goal. List the functions needed, their signatures, and edge cases. Write the plan to plan.md."]
|
||||
impl [label="Implement & Test", shape=house, stack.child_dotfile="implement-and-test.dot", manager.max_cycles=50]
|
||||
review [label="Review", prompt="Read every file the child workflow created. Run the tests yourself with 'python3 -m pytest -v'. Verify the implementation matches plan.md and all tests pass. Write a short verdict to review.md."]
|
||||
|
||||
start -> plan -> impl -> review -> exit
|
||||
}
|
||||
|
|
@ -1,40 +1,19 @@
|
|||
// Assembled from docs/workflows/human-in-the-loop.mdx snippets
|
||||
// Tests human gates: basic, freeform, and default_choice
|
||||
|
||||
digraph HitlPatterns {
|
||||
graph [goal="Exercise human-in-the-loop patterns from the HITL docs page"]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
plan [label="Plan", prompt="Create an implementation plan."]
|
||||
implement [label="Implement", prompt="Implement the plan."]
|
||||
custom [label="Custom", prompt="Handle custom input."]
|
||||
|
||||
// Line 13-17: Basic human gate with accelerators
|
||||
start [shape=Mdiamond]
|
||||
plan [label="Plan"]
|
||||
approve [shape=hexagon, label="Approve Plan"]
|
||||
|
||||
// Line 39-43: Freeform input on human gate
|
||||
implement [label="Implement"]
|
||||
review [shape=hexagon, label="Review Changes"]
|
||||
custom [label="Handle Custom"]
|
||||
exit [shape=Msquare]
|
||||
|
||||
// Line 53: Default choice on timeout
|
||||
deploy_gate [shape=hexagon, label="Deploy?", human.default_choice="approve"]
|
||||
|
||||
// Wiring
|
||||
start -> plan -> approve
|
||||
|
||||
approve -> implement [label="[A] Approve"]
|
||||
approve -> plan [label="[R] Revise"]
|
||||
approve -> exit [label="[S] Skip"]
|
||||
|
||||
implement -> review
|
||||
|
||||
review -> deploy_gate [label="[A] Approve"]
|
||||
review -> plan [label="[R] Revise"]
|
||||
review -> custom [freeform=true]
|
||||
|
||||
custom -> deploy_gate
|
||||
|
||||
deploy_gate -> exit [label="[A] Approve"]
|
||||
deploy_gate -> plan [label="[R] Revise"]
|
||||
review -> exit [label="[A] Approve"]
|
||||
review -> plan [label="[R] Revise"]
|
||||
review -> custom [freeform=true]
|
||||
custom -> exit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,69 +1,31 @@
|
|||
// Assembled from docs/workflows/stages-and-nodes.mdx snippets
|
||||
// Tests every node type documented on that page
|
||||
|
||||
digraph AllNodeTypes {
|
||||
graph [goal="Exercise every node type from the stages-and-nodes docs page"]
|
||||
|
||||
// Line 23: Start node
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
|
||||
// Line 33: Exit node
|
||||
plan [label="Plan"]
|
||||
approve [shape=hexagon, label="Approve Plan"]
|
||||
implement [label="Implement", prompt="Read plan.md and implement every step."]
|
||||
spec [label="Write Spec", shape=tab, prompt="Write a brief spec for a string utility module."]
|
||||
test [label="Run Tests", shape=parallelogram, script="cargo test 2>&1 || true"]
|
||||
gate [shape=diamond, label="Tests passing?"]
|
||||
cooldown [label="Wait 30s", shape=insulator, duration="30s"]
|
||||
fork [label="Fan Out", shape=component, join_policy="wait_all", error_policy="continue"]
|
||||
security [label="Security Review"]
|
||||
architecture [label="Architecture Review"]
|
||||
quality [label="Quality Review"]
|
||||
merge [label="Merge Results", shape=tripleoctagon]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
// Line 43: Agent node
|
||||
implement [label="Implement", prompt="Read plan.md and implement every step."]
|
||||
|
||||
// Line 74-81: Subgraph cluster with thread_id
|
||||
subgraph cluster_impl {
|
||||
node [fidelity="full", thread_id="impl"]
|
||||
plan_thread [label="Plan Thread"]
|
||||
implement_thread [label="Implement Thread"]
|
||||
review_thread [label="Review Thread"]
|
||||
}
|
||||
|
||||
// Line 90: Prompt (tab) node
|
||||
spec [label="Write Spec", shape=tab, prompt="Write a brief spec for a string utility module."]
|
||||
|
||||
// Line 102: Command (parallelogram) node
|
||||
test [label="Run Tests", shape=parallelogram, script="echo 'tests passed' 2>&1 || true"]
|
||||
|
||||
// Line 117-120: Human (hexagon) node
|
||||
approve [shape=hexagon, label="Approve Plan"]
|
||||
|
||||
// Line 132: Wait (insulator) node
|
||||
cooldown [label="Wait 1s", shape=insulator, duration="1s"]
|
||||
|
||||
// Line 146-149: Conditional (diamond) node
|
||||
gate [shape=diamond, label="Tests passing?"]
|
||||
|
||||
// Line 161-165: Parallel (component) fan-out node
|
||||
fork [label="Fan Out", shape=component, join_policy="wait_all", error_policy="continue"]
|
||||
|
||||
// Line 198-203: Merge (tripleoctagon) fan-in node
|
||||
merge [label="Merge Results", shape=tripleoctagon]
|
||||
|
||||
// Branches for fan-out
|
||||
security [label="Security", prompt="Check for security issues."]
|
||||
architecture [label="Architecture", prompt="Check architecture."]
|
||||
|
||||
// Wiring
|
||||
start -> spec -> implement -> test -> gate
|
||||
|
||||
gate -> approve [label="Pass", condition="outcome=success"]
|
||||
gate -> implement [label="Fix"]
|
||||
|
||||
approve -> plan_thread [label="[A] Approve"]
|
||||
approve -> implement [label="[R] Revise"]
|
||||
|
||||
plan_thread -> implement_thread -> review_thread -> cooldown
|
||||
|
||||
cooldown -> fork
|
||||
|
||||
start -> plan -> approve
|
||||
approve -> spec [label="[A] Approve"]
|
||||
approve -> plan [label="[R] Revise"]
|
||||
spec -> implement -> test -> gate
|
||||
gate -> fork [label="Pass", condition="outcome=success"]
|
||||
gate -> cooldown [label="Fix"]
|
||||
cooldown -> implement
|
||||
fork -> security
|
||||
fork -> architecture
|
||||
|
||||
fork -> quality
|
||||
security -> merge
|
||||
architecture -> merge
|
||||
|
||||
quality -> merge
|
||||
merge -> exit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,7 @@
|
|||
// Assembled from docs/workflows/transitions.mdx snippets
|
||||
// Tests conditions, human gates, unconditional edges, weights, and agent routing
|
||||
|
||||
digraph TransitionPatterns {
|
||||
graph [goal="Exercise every transition pattern from the transitions docs page"]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
// Line 103-114: Agent transition with routing JSON
|
||||
start [shape=Mdiamond]
|
||||
plan [label="Plan"]
|
||||
implement [label="Implement"]
|
||||
review [
|
||||
label="Review",
|
||||
shape=tab,
|
||||
|
|
@ -17,60 +11,20 @@ digraph TransitionPatterns {
|
|||
looks good, respond with: \
|
||||
{\"preferred_next_label\": \"approve\"}."
|
||||
]
|
||||
gate [shape=diamond, label="Check Result"]
|
||||
fast_path [label="Fast Path"]
|
||||
slow_path [label="Slow Path"]
|
||||
preferred [label="Preferred"]
|
||||
exit [shape=Msquare]
|
||||
|
||||
fix [label="Fix", prompt="Fix the issues found in the review."]
|
||||
|
||||
// Line 32-33: Condition on edges
|
||||
gate [shape=diamond, label="Tests passing?"]
|
||||
|
||||
// Line 60: Boolean flag condition (truthiness check)
|
||||
flag_gate [shape=diamond, label="Flag check"]
|
||||
|
||||
// Line 68-79: Compound conditions
|
||||
deploy_gate [shape=diamond, label="Deploy gate"]
|
||||
|
||||
deploy [label="Deploy", prompt="Deploy the changes."]
|
||||
proceed [label="Proceed", prompt="Proceed with next step."]
|
||||
retry [label="Retry", prompt="Retry the operation."]
|
||||
|
||||
// Line 123-128: Human gate transitions
|
||||
approve [shape=hexagon, label="Approve Plan"]
|
||||
plan [label="Plan", prompt="Create a plan."]
|
||||
skip [label="Skip", prompt="Skip this step."]
|
||||
|
||||
// Line 137: Chain syntax (unconditional)
|
||||
start -> plan -> review
|
||||
|
||||
review -> fix [label="Fix"]
|
||||
review -> gate [label="Approve", weight=10]
|
||||
|
||||
fix -> review
|
||||
|
||||
// Line 32-33: Conditional edges
|
||||
gate -> exit [label="Pass", condition="outcome=success"]
|
||||
gate -> flag_gate [label="Fix", condition="outcome=fail"]
|
||||
gate -> exit [label="Fallback"]
|
||||
|
||||
// Line 60: Truthiness check
|
||||
flag_gate -> deploy_gate [condition="outcome=success"]
|
||||
flag_gate -> retry
|
||||
|
||||
// Line 68-70: Compound condition
|
||||
deploy_gate -> deploy [condition="outcome=success && context.tests_passed=true"]
|
||||
// Line 72: OR condition
|
||||
deploy_gate -> proceed [condition="outcome=success || outcome=partial_success"]
|
||||
deploy_gate -> exit [label="Fallback"]
|
||||
|
||||
deploy -> approve
|
||||
|
||||
// Line 123-128: Human gate edges
|
||||
approve -> exit [label="[A] Approve"]
|
||||
approve -> plan [label="[R] Revise"]
|
||||
approve -> skip [label="[S] Skip"]
|
||||
|
||||
skip -> exit
|
||||
proceed -> exit
|
||||
retry -> review
|
||||
|
||||
// Line 152-153: Weight tiebreaking (tested on deploy_gate fallback)
|
||||
start -> plan -> implement -> review
|
||||
review -> implement [label="Fix"]
|
||||
review -> gate [label="Approve"]
|
||||
review -> gate [weight=-1]
|
||||
gate -> fast_path [condition="outcome=success"]
|
||||
gate -> slow_path
|
||||
fast_path -> preferred [weight=10]
|
||||
fast_path -> exit [weight=1]
|
||||
slow_path -> exit
|
||||
preferred -> exit
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
digraph Example {
|
||||
graph [goal="Implement the login feature"]
|
||||
|
||||
start [shape=Mdiamond, label="Start"]
|
||||
exit [shape=Msquare, label="Exit"]
|
||||
|
||||
start [shape=Mdiamond]
|
||||
plan [label="Plan", prompt="Create a plan for: $goal"]
|
||||
exit [shape=Msquare]
|
||||
|
||||
start -> plan -> exit
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue