fabro/docs/plans
Bryan Helmkamp dc856d0884
feat(settings): stage 6.1 consumer migration builds workspace-wide
Extends the stage 6.1 WIP into a compiling state across the workspace.
Most crates and their unit/integration tests now read run.* / cli.* /
server.* v2 layers directly or through targeted bridge helpers.

Key moves in this commit:

fabro-server
- AppState.settings: Arc<RwLock<SettingsFile>> -- all helpers,
  create_app_state_with_* factories, and tests updated.
- api_server_settings bridges SettingsFile -> legacy Settings via the
  transitional bridge so /api/v1/settings still emits the legacy DTO
  shape until Stage 6.6 replaces it with an allow-list DTO.
- get_system_info, get_system_df, get_github_repo, webhook startup, and
  other read sites use the v2 accessors (github_app_id_str,
  server_web, run_sandbox, run_model_*).
- web_auth.rs wraps each oauth / register / setup-status handler in a
  local `bridged` helper that produces a legacy Settings from the v2
  state, so the complex oauth mutation flow keeps working until its
  Stage 6.6 rewrite.
- diagnostics::check_github_app reads via github_*_str accessors;
  check_crypto bridges to the legacy shape inline.
- serve.rs: load_settings returns SettingsFile; apply_serve_overrides /
  apply_runtime_settings mutate v2 subtrees directly; the config poll
  loop and TLS/webhook startup use bridged() for legacy-shape reads.
- Tests in tests/it/{helpers,api/*,scenario/*} rewritten to construct
  SettingsFile via ConfigLayer::parse or v2 struct literals.

fabro-workflow
- Every test fixture in pipeline/{finalize,initialize,pull_request,retro,
  execute,persist}, operations/{create,rebuild_meta,start}, run_lookup,
  runtime_store, handler/manager_loop, and tests/it/{integration,
  daytona_integration}.rs now uses SettingsFile.
- start.rs hooks into the bridge helpers directly via use-imports.
- run_graph / run_graph_from_checkpoint / initialize / finalize /
  pull_request calls are Box::pin'd to stay under clippy's large-future
  threshold after the v2 tree brought RunOptions size up.
- resolve_run_settings writes resolved model/provider back into
  run.model as InterpStrings; tests assert via run_model_*_str().
- preprocess_and_validate pulls vars from run_inputs_as_strings().

fabro-cli
- manifest_builder uses ConfigLayer.combine(...).into() to get a v2
  SettingsFile for the manifest goal resolution path; file-based
  goal_file handling is deferred to 6.6 when the manifest schema catches
  up.
- runner::maybe_build_github_app_credentials and
  tests/it/cmd/{create,runner}.rs read from v2 accessors.
- commands/config/mod.rs::merged_config returns SettingsFile; the
  server-side retrieve_server_settings is bridged via a stopgap
  legacy_settings_to_v2 shim that Stage 6.6 replaces.
- commands/store/dump.rs sample_run_record constructs SettingsFile.

fabro-store, fabro-checkpoint
- Test fixtures constructing RunRecord values updated to SettingsFile.
- fabro-checkpoint/src/author.rs stays (v2 From impl landed in a
  previous additive commit).

fabro-config
- effective_settings.rs rewrite compiles and passes its unit tests.
- project::resolve_working_directory takes &SettingsFile.

Build status: `cargo build --workspace --tests`, `cargo clippy
--workspace -- -D warnings`, and `cargo fmt --check --all` all pass.
`cargo nextest run --workspace` passes 3,749 of 3,764 tests; the 15
remaining failures are fabro-cli integration tests whose snapshot +
TOML fixture shapes still need manual updates:

- cmd::config::* (seven tests): fixture TOML files still use v1
  top-level keys and the snapshot outputs expect the legacy flat JSON
  shape.
- cmd::inspect::* (four tests): run-record JSON snapshots embed the
  flat Settings shape.
- cmd::run::dry_run_persists_event_history_in_store and
  json_run_implies_auto_approve_for_human_gates: check `settings.dry_run
  == Some(true)` directly on the v2 file; should assert
  dry_run_enabled() instead.
- cmd::attach::attach_json_errors_without_prompting_for_human_input:
  unrelated insta snapshot drift caused by the new SettingsFile JSON
  shape leaking into an events-log snapshot.

Follow-up work for this stage also includes:
- Rewriting web_auth.rs register flow to emit v2 TOML directly and to
  re-parse the written file back into state.settings so in-memory
  state doesn't lag the on-disk file.
- Removing the legacy_settings_to_v2 shim in fabro-cli/config once
  the server-side settings endpoint returns v2 shapes (Stage 6.6).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 15:25:59 -04:00
..
2026-04-02-001-feat-server-daemon-management-plan.md Add server daemon management with Unix socket support 2026-04-02 10:40:19 -07:00
2026-04-02-002-feat-http-store-client-auto-start-plan.md refactor(cli): route run state through the shared server daemon 2026-04-05 00:15:33 -04:00
2026-04-04-run-event-simplification-plan.md refactor: simplify run event representation 2026-04-04 12:59:42 -04:00
2026-04-04-shared-nextest-test-daemon-plan.md refactor(cli): route run state through the shared server daemon 2026-04-05 00:15:33 -04:00
2026-04-05-cli-deglobalize-server-url-and-storage-dir-plan.md plans 2026-04-06 10:17:30 -04:00
2026-04-05-cli-exec-explicit-local-and-mode-removal-plan.md plans 2026-04-06 10:17:30 -04:00
2026-04-05-cli-model-server-canonical-and-llm-removal-plan.md plans 2026-04-06 10:17:30 -04:00
2026-04-05-cli-run-lifecycle-cleanup-compaction-plan.md plan 2026-04-05 11:03:02 -04:00
2026-04-05-run-adjacent-server-only-cleanup-plan.md plans 2026-04-06 10:17:30 -04:00
2026-04-05-run-create-server-target-plan.md plans 2026-04-06 10:17:30 -04:00
2026-04-05-run-manifest-and-preflight-plan.md plans 2026-04-06 10:17:30 -04:00
2026-04-05-server-canonical-secrets-doctor-repo-plan.md plans 2026-04-06 10:17:30 -04:00
2026-04-06-cli-config-socket-storage-separation-plan.md plans 2026-04-06 10:17:30 -04:00
2026-04-06-object-backed-artifact-uploads.md refactor(artifacts): clean up stale artifact wording 2026-04-07 23:13:22 -04:00
2026-04-06-settings-command-server-local-merge-plan.md plan 2026-04-06 10:43:41 -04:00
2026-04-06-subprocess-run-workers-signal-control-plan.md plans 2026-04-07 10:30:40 -04:00
2026-04-07-fix-attach-terminal-authoritative-stream-plan.md plans 2026-04-07 16:05:11 -04:00
2026-04-07-global-cas-blob-refs-plan.md plans 2026-04-07 17:18:42 -04:00
2026-04-07-interview-control-channel-and-server-slack-plan.md feat: embed fabro spa and align interruption semantics 2026-04-08 14:43:44 -04:00
2026-04-07-run-manifest-blobs-and-bundle-removal-plan.md plan 2026-04-07 23:44:44 -04:00
2026-04-07-run-state-projection-consolidation-plan.md plans 2026-04-07 16:05:21 -04:00
2026-04-07-store-dump-server-owned-export-plan.md plans 2026-04-07 17:18:42 -04:00
2026-04-07-worker-http-only-run-store-migration-plan.md plans 2026-04-07 16:05:11 -04:00
2026-04-08-001-feat-fabro-uninstall-command-plan.md feat(cli): add fabro uninstall command 2026-04-08 16:31:32 -04:00
2026-04-08-cli-services-command-context-refactor-plan.md plan 2026-04-08 16:24:11 -04:00
2026-04-08-fabro-spa-asset-crate-plan.md feat: embed fabro spa and align interruption semantics 2026-04-08 14:43:44 -04:00
2026-04-08-optional-web-ui-server-plan.md docs(plan): add optional web ui server plan 2026-04-08 16:09:42 -04:00
2026-04-08-production-web-ui-test-plan.md test: add test plan for production web UI implementation 2026-04-08 04:28:47 -04:00
2026-04-08-production-web-ui.md plan: revise production web UI plan to fix demo get_run_status, files tab, and Playwright config 2026-04-08 04:17:54 -04:00
2026-04-08-settings-toml-redesign-implementation-plan.md feat(settings): stage 6.1 consumer migration builds workspace-wide 2026-04-09 15:25:59 -04:00
2026-04-09-settings-toml-redesign-handoff.md docs(plans): write Stage 6 handoff for settings TOML redesign 2026-04-09 11:54:44 -04:00