make settings persistence safe for nested data and crashes (T-376)
Three failure modes in the YAML store: maps nested inside lists (the documented keymap-overlay shape) fell through _emitScalar to toString() and corrupted on the next read; writes went straight to the live file, so a crash mid-write truncated every setting; and a parse failure silently returned an empty map that the next set() wrote over the user's file. Maps in lists now emit as YAML flow mappings, writes are temp-file + rename, and an unparseable file is preserved as .broken with a warning through the kernel Logger (new onError hook, wired in the facade). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -144,7 +144,7 @@ class KernelServices {
|
||||
final messages = MessageBus();
|
||||
final filterStates = FilterStateCache(messages: messages);
|
||||
|
||||
final settings = SettingsStore(appDir: appDir);
|
||||
final settings = SettingsStore(appDir: appDir, onError: (m) => log.warn('settings', m));
|
||||
await settings.load();
|
||||
|
||||
final i18n = I18n(loader: i18nLoader, log: log, defaultLocale: defaultLocale, initialLocale: initialLocale, availableLocales: availableLocales);
|
||||
|
||||
Reference in New Issue
Block a user