When a human gate has only a freeform edge and no fixed choices, use
QuestionType::Freeform instead of MultipleChoice. This sends the user
directly to a text input prompt, skipping the unnecessary select menu.
Also removes the Quit choice from the REPL workflow so it uses the new
freeform-only path.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Thread the previous stage's response through `Question.context_display`
so `ConsoleInterviewer` renders it before the interactive prompt. This
lets users see the agent's response before deciding what to do next in
looping workflows like REPL.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update default git author to Fabro <noreply@fabro.sh>. Append
"Generated with Fabro" footer to all checkpoint and metadata commits,
and to PR bodies. When the commit author is overridden, add a
Co-Authored-By trailer for attribution.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Note in stylesheets, DOT reference, multi-model tutorial, run config,
and skill references that provider is now optional and auto-inferred.
Remove redundant provider from TOML examples.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
- Remove private research preview warning from quick-start page
- Update sandboxes section on how-fabro-works to list all 6 providers
- Mark exe.dev and Sprites as (preview) in sidebar nav titles
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update all brand SVG files in files-internal/assets/brand/ to use the
new Fabro geometric symbol and logotype instead of the old Arc organic
icon and wordmark.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Box the Usage field in Turn::Assistant to satisfy clippy::large_enum_variant.
Rename ARC_ prefixed env vars to FABRO_ in .env.example.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update product name references in CONTRIBUTING.md, competitive landscape,
logging/events strategy docs, API design draft, spec files, and web
screenshot guide. Rust crate names and file paths left unchanged.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Zoom in on the workflow graph in both the workflow diagram page and
run overview page to improve readability of node labels and edges.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Consolidates server-mode documentation into a single page with
standalone vs. server comparison table, setup guide, and cross-references.
Updates how-arc-works, quick-start, and architecture pages to link to
the new canonical page instead of duplicating the comparison table.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add 10 screenshots of the Fabro web UI to docs pages (workflows, runs,
retros, observability, steering)
- Update arc-web logos from Arc to Fabro (logotype.svg, logotype-light.svg)
- Hide Start and Settings nav items in arc-web for cleaner screenshots
- Mount arc-web public/ as Docker volume for logo hot-swapping
- Combine "Run agents 24/7" and "Scale infinitely" use cases
- Replace clone-and-build Quick Start with curl installer from README
- Add internal docs for updating web screenshots
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allows users to specify a reachable base URL for SSH hosts so that
get_preview_url(port) returns the correct external URL instead of
falling back to localhost.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace docs/images screenshots (runs-board, run-detail, workflow-example)
with fresh captures from the current FABRO-branded UI in demo mode.
Also fix a panic in arc-api demo::run_config_to_api where None-valued
HashMap fields (e.g. sandbox.env) serialized to JSON null, which failed
to deserialize into non-optional HashMap fields in RunConfiguration.
Added strip_nulls helper to clean the intermediate JSON value.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add `client: reqwest::Client` field (matches LinearTracker pattern); eliminates 7 per-call client constructions that prevented connection pool reuse
- Remove `graphql_url: String` field — always derivable from base_url, computed via `graphql_url()` method at each call site
- Extract `make_test_issue()` test helper to replace 3 copy-pasted Issue struct literals
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- New arc-tracker crate defines the Tracker trait and shared Issue/BlockerRef types
- arc-linear: replace Issue/BlockerRef with arc-tracker re-exports, add LinearTracker struct implementing Tracker, remove free functions
- arc-github: add GitHubTracker implementing Tracker via Projects V2 GraphQL API, with lazy project node ID resolution (org → user fallback) and create_installation_access_token_for_projects helper
- 47 tests in arc-github (15 new), 24 tests in arc-linear (updated to use LinearTracker)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Make execute_graphql private (callers use domain functions)
- Extract extract_issues() helper to deduplicate node-parsing blocks
- Replace O(n^2) .find() loop with HashMap for ID-ordered results
- Add tracing::debug on all public functions, warn on HTTP errors
- Extract BLOCKS_RELATION_TYPE constant for magic string
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
GraphQL client with 6 public functions: execute_graphql, fetch_viewer_id,
create_comment, update_issue_state, fetch_candidate_issues, and
fetch_issues_by_ids. Includes Issue/BlockerRef domain types with manual
normalization from GraphQL JSON responses.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The inherent method shadowed the identical Sandbox trait method,
creating a risk of subtle divergence if one were changed without
the other.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds a generic SSH sandbox that connects to any user-provided host via
openssh, without VM lifecycle management. Supports git clone with GitHub
App credentials, configurable working directory, and arc cp reconnection.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extract duplicated compaction check+trigger blocks in the session loop into
Session::compact_if_needed(). Replace the hardcoded 20_000 token budget with
COMPACTION_USER_MESSAGE_TOKEN_BUDGET constant. Change extract_recent_user_messages
to take ownership of discarded turns instead of borrowing and cloning.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>