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 <noreply@anthropic.com>
This commit is contained in:
Bryan Helmkamp 2026-03-07 11:54:54 -05:00
parent 7836eb4eaa
commit 69e82a22f0
6 changed files with 16 additions and 10 deletions

View file

@ -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

View file

@ -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

View file

@ -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 |

View file

@ -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

View file

@ -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; }

View file

@ -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"