From 69e82a22f03e9b30062e5952d328a788aa665bbe Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Sat, 7 Mar 2026 11:54:54 -0500 Subject: [PATCH] Fix two validation warnings in docs workflows and treat warnings as failures - nlspec-conformance: add retry_target="fix" to goal_gate node test_full - solitaire: fix fallback_retry_target reference from impl_game_logic to impl_logic - run_tests.sh: fail validate phase on warnings, not just errors Co-Authored-By: Claude Opus 4.6 --- docs/examples/nlspec-conformance.mdx | 2 +- docs/examples/solitaire.mdx | 6 +++--- test/docs/CHECKLIST.md | 4 ++-- .../nlspec-conformance/n-l-spec-conformance.dot | 2 +- test/docs/examples/solitaire/build-solitaire.dot | 2 +- test/docs/run_tests.sh | 10 ++++++++-- 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/docs/examples/nlspec-conformance.mdx b/docs/examples/nlspec-conformance.mdx index 30b95f0ad..547919b05 100644 --- a/docs/examples/nlspec-conformance.mdx +++ b/docs/examples/nlspec-conformance.mdx @@ -48,7 +48,7 @@ digraph NLSpecConformance { gate_quick [shape=diamond, label="Quick suite passing?"] // Phase 4: Full conformance - test_full [label="Full Conformance", shape=parallelogram, script="make conformance-full 2>&1 || true", goal_gate=true] + test_full [label="Full Conformance", shape=parallelogram, script="make conformance-full 2>&1 || true", goal_gate=true, retry_target="fix"] gate_full [shape=diamond, label="All tests passing?"] // Wiring diff --git a/docs/examples/solitaire.mdx b/docs/examples/solitaire.mdx index ce357aa6f..02bdb1a3f 100644 --- a/docs/examples/solitaire.mdx +++ b/docs/examples/solitaire.mdx @@ -20,7 +20,7 @@ digraph BuildSolitaire { rankdir=LR, default_max_retry=3, retry_target="impl_setup", - fallback_retry_target="impl_game_logic", + fallback_retry_target="impl_logic", model_stylesheet=" * { llm_model: claude-sonnet; llm_provider: anthropic; } .hard { llm_model: claude-opus; llm_provider: anthropic; } @@ -207,11 +207,11 @@ The graph sets two levels of retry targets: ```dot graph [ retry_target="impl_setup", - fallback_retry_target="impl_game_logic" + fallback_retry_target="impl_logic" ] ``` -If a node fails and has no local retry target, Arc jumps back to `impl_setup` to re-attempt from project setup. If that target itself can't recover, Arc falls back further to `impl_game_logic`. This creates a cascading recovery strategy without cluttering every node with retry configuration. +If a node fails and has no local retry target, Arc jumps back to `impl_setup` to re-attempt from project setup. If that target itself can't recover, Arc falls back further to `impl_logic`. This creates a cascading recovery strategy without cluttering every node with retry configuration. ### Three-tier model routing diff --git a/test/docs/CHECKLIST.md b/test/docs/CHECKLIST.md index 09d4ac911..dec4c79ca 100644 --- a/test/docs/CHECKLIST.md +++ b/test/docs/CHECKLIST.md @@ -18,9 +18,9 @@ | 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 | warning: goal_gate without retry_target | +| 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 | warning: missing retry_target | +| 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 | diff --git a/test/docs/examples/nlspec-conformance/n-l-spec-conformance.dot b/test/docs/examples/nlspec-conformance/n-l-spec-conformance.dot index 395b4c4d0..2c6cb5400 100644 --- a/test/docs/examples/nlspec-conformance/n-l-spec-conformance.dot +++ b/test/docs/examples/nlspec-conformance/n-l-spec-conformance.dot @@ -28,7 +28,7 @@ digraph NLSpecConformance { gate_quick [shape=diamond, label="Quick suite passing?"] // Phase 4: Full conformance - test_full [label="Full Conformance", shape=parallelogram, script="make conformance-full 2>&1 || true", goal_gate=true] + test_full [label="Full Conformance", shape=parallelogram, script="make conformance-full 2>&1 || true", goal_gate=true, retry_target="fix"] gate_full [shape=diamond, label="All tests passing?"] // Wiring diff --git a/test/docs/examples/solitaire/build-solitaire.dot b/test/docs/examples/solitaire/build-solitaire.dot index d39b11300..7b31e6407 100644 --- a/test/docs/examples/solitaire/build-solitaire.dot +++ b/test/docs/examples/solitaire/build-solitaire.dot @@ -4,7 +4,7 @@ digraph BuildSolitaire { rankdir=LR, default_max_retry=3, retry_target="impl_setup", - fallback_retry_target="impl_game_logic", + fallback_retry_target="impl_logic", model_stylesheet=" * { llm_model: claude-sonnet; llm_provider: anthropic; } .hard { llm_model: claude-opus; llm_provider: anthropic; } diff --git a/test/docs/run_tests.sh b/test/docs/run_tests.sh index a26a59b9f..a82c7df65 100755 --- a/test/docs/run_tests.sh +++ b/test/docs/run_tests.sh @@ -31,8 +31,14 @@ run_one() { case "$PHASE" in validate) if "$ARC" validate "$dot" > "$result_file.log" 2>&1; then - echo "PASS" > "$result_file" - echo " PASS $rel" + if grep -qi 'warn' "$result_file.log"; then + echo "FAIL" > "$result_file" + echo " FAIL $rel (warnings)" + grep -i 'warn' "$result_file.log" | head -3 >&2 + else + echo "PASS" > "$result_file" + echo " PASS $rel" + fi else echo "FAIL" > "$result_file" echo " FAIL $rel"