fabro/docs/public/execution
Adrian Muraru a769336c39
Some checks failed
Rust / Format (push) Has been cancelled
Rust / Clippy (push) Has been cancelled
Rust / Generated Docs (push) Has been cancelled
TypeScript / Build (push) Has been cancelled
Rust / Test (Linux) (push) Has been cancelled
Rust / Test (macOS) (push) Has been cancelled
TypeScript / Typecheck (push) Has been cancelled
TypeScript / Test (push) Has been cancelled
feat(workflow): support overriding cwd for local sandbox provider (#467)
## Problem

The `local` sandbox uses the run's `source_directory` (the CLI's cwd at
invocation time) as its working directory and `create_dir_all`s it on
the server (`LocalSandbox::initialize` in `fabro-sandbox`). That is
correct when the CLI and the server share a host — the agent operates
directly on the user's project tree.

When the server is **remote** from the CLI — e.g. `fabro serve` running
in a container in Kubernetes, driven over HTTP with the `local` sandbox
— the client's cwd (e.g. `/Users/alice/project`) does not exist on the
server. The sandbox then tries to create that path as the (often
unprivileged) server user and fails at init:

```
sandbox.failed provider="local" error="Failed to create working directory" causes=["Permission denied (os error 13)"]
```

and the run dies with `workflow_error` before the agent starts.

## Fix

When `source_directory` is absent or does not exist on the server, fall
back to a server-writable `workspace` directory under the run's scratch
dir instead of recreating the client path. **Same-host behavior is
unchanged**: an existing `source_directory` is still used as-is.

The selection is extracted into a small pure helper,
`local_working_directory(source_directory, run_dir)`, so it can be
unit-tested directly.

## Testing

- `cargo test -p fabro-workflow local_working_directory` — 3 new tests
(existing source dir → used; absent → fallback;
present-but-missing-on-server → fallback)
- `cargo check -p fabro-workflow`

🤖 Generated with [Claude Code](https://claude.com/claude-code)


Thanks for fabro @brynary!

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 12:32:32 -04:00
..
automations.mdx docs: refresh changelog and sync product docs 2026-06-11 11:04:31 -04:00
checkpoints.mdx refactor(workflow): remove retro stage (#230) 2026-05-09 10:18:20 -04:00
child-runs.mdx docs: add child runs guide 2026-05-25 15:43:53 -04:00
context.mdx docs: sync command output docs 2026-05-08 17:16:17 -07:00
environments.mdx feat(workflow): support overriding cwd for local sandbox provider (#467) 2026-06-14 12:32:32 -04:00
failures.mdx refactor(types): remove stage status compatibility 2026-04-30 06:48:47 -04:00
observability.mdx docs: sync product docs with runtime changes 2026-05-26 21:55:17 -04:00
outcomes.mdx refactor(model): move provider facts into catalog (#298) 2026-05-17 20:59:08 -04:00
run-configuration.mdx feat(web): add server-managed Environments CRUD settings UI (#462) 2026-06-13 08:44:38 -04:00