Commit graph

24 commits

Author SHA1 Message Date
Bryan Helmkamp
a4abd68686
Use temp dir for dry-run instead of ~/.fabro/runs to avoid clutter in fabro ps -a
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:27:10 -04:00
Bryan Helmkamp
8cb6c4f26f
Rename .dot files to .fabro and update all references
Rename 79 workflow files from .dot to .fabro extension across
fabro/workflows/, test/, test/docs/, and files-internal/demo/.
Update TOML configs, Rust production code, test code, and shell
scripts. Backward compat tests in test/attractor/ are unchanged.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 22:27:19 -04:00
Bryan Helmkamp
d37fb9a9b4 simplify model stylesheet: rename llm_model/llm_provider, add provider inference
Rename `llm_model` → `model` and `llm_provider` → `provider` in stylesheet
properties, accessor methods, and all DOT/doc references. Add
ProviderInferenceTransform that automatically infers provider from the model
catalog, eliminating redundant provider declarations in stylesheets.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:27:18 -04:00
Bryan Helmkamp
376b132ca9 rename docs-internal to files-internal
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:50:27 -04:00
Bryan Helmkamp
28884ae093 rename Arc to Fabro in all Rust crates, symbols, env vars, and supporting files
- Rename 20 crate directories lib/crates/arc-* → fabro-*
- Update all Cargo.toml: crate names, dep paths, feature flags, bin name
- Rename arc_server module → fabro_server in fabro-llm
- ArcError → FabroError across 30+ files
- ARC_VERSION/ARC_GIT_SHA/ARC_BUILD_DATE → FABRO_* constants
- All use/qualified paths: arc_agent:: → fabro_agent::, etc. (~1500 occurrences)
- Env vars ARC_* → FABRO_* in string literals and shell scripts
- String literals: X-Arc-Demo, arc-bot, arc@local, arc-web, arc-mcp, etc.
- Path strings: .arc/ → .fabro/, arc.toml → fabro.toml, refs/arc/ → refs/fabro/
- arc-api.yaml → fabro-api.yaml (OpenAPI spec)
- skills/arc-create-workflow → fabro-create-workflow
- trycmd fixtures: $ arc → $ fabro
- Inline snapshots (insta) updated
- CI, Docker, install.sh, scripts, CLAUDE.md, AGENTS.md
- TypeScript app: env vars, headers, JWT issuer
- Docs: page slugs, git refs, config paths, sandbox names, repo URLs
- Repo references: brynary/arc → fabro-sh/fabro

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 12:25:58 -04:00
Bryan Helmkamp
8c63328a5b move solitaire 2026-03-11 17:05:22 -04:00
Bryan Helmkamp
73a793bdb1 Add extracted fixed-loop DOT fixture from branch-loop tutorial
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 08:57:00 -04:00
Bryan Helmkamp
d002aa0b51 Rename arc run startarc run (#5)
* arc(01KK7524KNGTPS4090QMF87FJN): implement (success)

Arc-Run: 01KK7524KNGTPS4090QMF87FJN
Arc-Completed: 2
Arc-Checkpoint: 1ff03c704805dfe8e7c37b37f97bd06dfa0e5dc5

* Fix: restore trailing newlines stripped by previous commit

* arc(01KK7524KNGTPS4090QMF87FJN): simplify (success)

Arc-Run: 01KK7524KNGTPS4090QMF87FJN
Arc-Completed: 3
Arc-Checkpoint: 21771adfd26283a1d1e6b8a123a83a0c4277db48

---------

Co-authored-by: arc <arc@local>
Co-authored-by: Arc Assistant <assistant@arc.dev>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:14:50 -04:00
Bryan Helmkamp
562d03742b run_tests 2026-03-07 18:06:58 -05:00
Bryan Helmkamp
97e4c41f4e 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>
2026-03-07 18:06:57 -05:00
Bryan Helmkamp
69e82a22f0 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>
2026-03-07 11:54:54 -05:00
Bryan Helmkamp
131b71aea9 Update docs tutorials, examples, and add sub-workflow tutorial
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 10:01:53 -05:00
Bryan Helmkamp
50aaf22f8c Auto-install agent CLIs in sandboxes when missing
AgentCliBackend now detects missing CLIs at runtime and installs them
on-demand (including Node.js via NodeSource if needed), removing the
need for custom Dockerfiles that pre-install CLI tools.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-07 01:44:14 -05:00
Bryan Helmkamp
9f6da0748c Restore backend-demo CLI mode with Daytona snapshot that installs claude
The run.toml specifies a Dockerfile with node:22 + @anthropic-ai/claude-code
so the Daytona sandbox has the claude CLI available for backend="cli" testing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-06 16:27:30 -05:00
Bryan Helmkamp
181aecc301 Improve CLI backend error message, parallel test runner, fix backend-demo
- CLI backend: show last 500 chars of stderr (not first), and include
  the command itself when stderr is empty (e.g. exit code 127)
- Test runner: add PARALLEL env var for concurrent execution
- backend-demo.dot: use API backend since claude CLI isn't in sandbox

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-06 16:17:45 -05:00
Bryan Helmkamp
942f717eb4 Fix GitHub App repo visibility check: treat 401/403 as private
The is_repo_public function called GET /repos/{owner}/{repo} with
the App JWT, but GitHub returns 401 for App JWTs on the repos
endpoint (they need an installation token). Previously this 401
was treated as an auth error, failing sandbox init.

Now 401 and 403 are treated like 404: assume private and proceed
to create an installation access token, which has the right perms.

Also add preflight phase to the DOT test runner.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-06 15:44:00 -05:00
Bryan Helmkamp
a519124532 Fix dry-run issues: stub scripts, runner cd, transition weight
- Add stub scripts for clone-substack (validate-*.sh, fix-fmt.sh)
- Update runner to cd into dot file directory so relative script
  paths resolve correctly
- Add weight=10 to transition-patterns approve edge to avoid
  review→fix loop in dry-run (mock LLM has no routing directives)

35/36 pass dry-run. clone-substack hits dry-run's hard 10-visit
safety limit on its implement loop — expected for complex looping
workflows with mock LLMs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-06 15:01:21 -05:00
Bryan Helmkamp
2cce052f9f Add DOT docs test suite and fix invalid DOT in docs examples
Extract all 29 full digraph workflows from docs into test/docs/ with
an extraction script, assemble 7 snippet DOTs from reference pages,
and add a runner script for validate/dry-run/haiku/full phases.

Docs fixes:
- definition-of-done: replace multi-word condition values with
  underscored equivalents (parser doesn't support spaces), make
  safe-default edges unconditional for fallback coverage
- semantic-port: make fallback edges unconditional on fetch/analyze
  nodes so validator doesn't reject all-conditional-edge nodes

All 36 DOTs pass `arc validate`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-06 14:55:56 -05:00
Bryan Helmkamp
a535c6575f Rename kilroy → attractor in test directory and compat tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 18:10:22 -05:00
Bryan Helmkamp
73b00f047b Add per-run retrospectives with LLM-powered retro agent
After each pipeline run, auto-derive stats from the checkpoint (stages,
retries, cost, files touched) then run an Opus agent session that
explores progress.ndjson to produce qualitative analysis: smoothness
rating, intent, outcome, learnings, friction points, and open items.

Backend:
- retro.rs: data model, save/load, derive_retro(), extract_stage_durations()
- retro_agent.rs: post-pipeline agent session with submit_retro tool
- cli/run.rs: hook retro generation after final.json, before engine_result?
- server.rs: GET /pipelines/{id}/retro endpoint, auto-derive on completion

Frontend:
- data/retros.ts: TS types + mock data + smoothness color config
- routes/retros.tsx: list page with smoothness badges
- routes/run-retro.tsx: detail view (stats, intent, stages, learnings)
- routes.ts + run-detail.tsx: wire up retro route and tab

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 15:46:02 -05:00
Bryan Helmkamp
24cff30518 Fix clippy warnings, test failures, and apply cargo fmt
- Fix 4 test failures: add unconditional fallback edges to branching.dot
  and conditions.dot to satisfy all_conditional_edges validation rule
- Fix clippy await_holding_lock: scope MutexGuard before await in
  daytona_integration.rs
- Fix clippy unnecessary_get_then_check: use contains_key in script.rs
- Fix clippy expect_fun_call: use unwrap_or_else in integration.rs
- Run cargo fmt across entire workspace

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 13:02:16 -05:00
Bryan Helmkamp
88f2fa245b Add kilroy DOT files and parsing compatibility tests
Copy 14 DOT workflow files from the kilroy project and add tests proving
arc can parse them. 11 files parse successfully, exercising features
including subgraphs, fan-out/fan-in, conditional routing, goal gates,
model stylesheets, and large 40+ node workflows.

3 batch test files (batch_*.dot) document a parser gap: arc requires
quoted values for strings with hyphens/dots (e.g., "gpt-5.2") while
kilroy's parser accepts them unquoted.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 18:05:34 -05:00
Bryan Helmkamp
379f92c110 Add legacy_tool.dot workflow and CLI tests for backwards compat
Exercises the old tool_command attribute through validate and
dry-run to catch regressions in the tool → script compatibility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 12:08:04 -05:00
Bryan Helmkamp
5932b500e7 Implement GET /pipelines/{id}/graph endpoint for SVG rendering
Stores DOT source in ManagedPipeline and pipes it through `dot -Tsvg`
on request. Returns image/svg+xml on success, 502 if graphviz is
unavailable, 404 if pipeline not found. Resolves spec gap #1.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 09:13:36 -05:00