mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-06 08:18:58 +00:00
Stage 3 of the settings TOML redesign. Switches the core parse/merge/ resolve path to the v2 namespaced schema while keeping the legacy flat Settings shape accessible via the bridge for not-yet-migrated consumers. Parser and layering: - ConfigLayer is now a newtype around v2 SettingsFile. Loading via ConfigLayer::parse/load/settings/for_workflow/project now hard-fails on legacy top-level keys (version, llm, vars, sandbox, etc.) with targeted rename hints emitted by fabro_types::settings::v2::tree - new fabro_config::merge module encodes the merge matrix directly: replace-by-default maps, sticky merge for run.sandbox.env and provider-native labels, splice-aware string arrays for run.model.fallbacks and notification route events, whole-list replacement for run.prepare.steps, field-merge keyed objects for notifications/MCPs/web-auth providers, and ordered hook id-aware replacement - ConfigLayer::resolve delegates to fabro_types::settings::v2::bridge so consumers keep reading through the legacy Settings shape until Stage 4 migrates them off it - effective_settings::resolve_settings now treats project/workflow/ run/features as shared layered domains and strips cli/server from non-local layers before merging, fulfilling the owner-first trust boundary rule Consumer migration (Stage 4 preview, kept to the files that block the workspace build): - fabro-server run_manifest builds v2 RunLayer from ManifestArgs and resolves manifest dockerfile references through the v2 sandbox daytona snapshot tree - fabro-cli manifest_builder consults run.goal via v2; user_config writes the v2 server.storage.root field under the CLI storage-dir override; run/overrides constructs a v2 RunLayer from RunArgs - fabro-cli scaffolds (repo init, workflow create) emit _version = 1 with project.directory/workflow.graph/run.sandbox etc. fabro-config / fabro-types legacy parse-time types (ProjectConfig, LlmConfig, SandboxConfig, PullRequestConfig, ExecConfig, SettingsFile try_into, etc.) are deleted from the parse path; the resolved type re-exports (LlmSettings, SandboxSettings, etc.) remain as shims so unmigrated consumers keep compiling. fabro-test helper: settings.toml fixtures now use _version = 1 plus [server.storage] root and [cli.target] type = "unix" path. Legacy flat storage_dir/server.target handling removed from the sync path. Known Stage 4/5 follow-ups: - fabro-cli integration test fixtures still use legacy-shape TOML (version = 1, [llm], [sandbox], [vars], [exec], [fabro], etc.); tests currently fail to parse against the v2 schema as intended. Migrating them is the bulk of Stage 4 and lands in subsequent commits. - OpenAPI ServerSettings schema, generated clients, apps/fabro-web workflowData fallback, and docs/reference examples are unchanged and land in Stage 5. |
||
|---|---|---|
| .. | ||
| crates | ||
| packages/fabro-api-client | ||