mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-06 08:18:58 +00:00
`setup_register` in `web_auth.rs` used to round-trip the user's settings file through `toml::Value` + `toml::to_string_pretty`, which strips every comment, blank line, and explicit key ordering on the way out. A user who'd hand-commented their `~/.fabro/settings.toml` would see all of that lost on the next GitHub App registration. Switches the edit path to `toml_edit::DocumentMut`, which preserves prefix decoration (comments, blank lines) on every key. Adds `toml_edit = "0.22"` as a workspace dependency (already pulled in transitively via `toml 0.8`) and declares it in `fabro-server`. Implementation notes: - New `ensure_nested_table(doc, &["server", "web"])` walks a dotted path and `or_insert`s missing intermediate tables without touching existing ones. - New `set_preserving_decor(table, key, value)` replaces an entry's value while copying the old key's `leaf_decor` forward. Without that workaround, `toml_edit::Table::insert` drops the prefix decoration of the replaced key -- which would strip a top-of-file comment attached to `_version = 1` or any other value we update. - `_version` is only inserted when missing; it's always `1` today, so rewriting it every time is unnecessary and would trample its decor. - `merge_settings_keys` now takes `&mut toml_edit::DocumentMut` instead of `&mut toml::Value`. The flow in `setup_register` parses the file on disk into a `DocumentMut`, applies the merge, and writes `doc.to_string()` back. Adds a new test `merge_settings_keys_preserves_comments_and_unrelated_keys` that round-trips a fixture file containing: - A top-of-file comment attached to `_version` - A comment above `[server.storage]` - A comment above a pre-existing `[server.integrations.slack]` table - Unrelated keys in `[server.storage]`, `[server.integrations.slack]`, and `[run.model]` and asserts that every comment and every unrelated key survives the merge, that the new GitHub App keys are present, and that the final output still parses as a valid v2 `SettingsFile` via `fabro_config::ConfigLayer::parse`. Also strengthens the existing `merge_settings_keys_writes_v2_server_integrations_github` test with a round-trip parse of the emitted TOML through `ConfigLayer::parse` to ensure the output is real v2 config, not just a JSON-shaped blob. 3,765 workspace tests pass (+1 new). `cargo fmt --check --all` and `cargo clippy --workspace -- -D warnings` are clean. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| crates | ||
| packages/fabro-api-client | ||