Initial release: NextIteration.SpectreConsole.Settings 0.1.0#1
Merged
Conversation
Strongly-typed, JSON-persisted settings for Spectre.Console CLI tools,
a sibling package to NextIteration.SpectreConsole.Auth mirroring its
project structure, packaging, and quality standards (net10.0,
TreatWarningsAsErrors, docs on, SourceLink, snupkg).
Core:
- SettingsBase: field-backed properties + OnPropertyChanged(); inert
until bound at load so deserializer setters never write.
- PersistenceMode Automatic (debounced async write, 250ms default) /
Explicit (Save()/SaveAsync()). Fire-and-forget failures surface via a
configurable error handler, never swallowed.
- AddSettings<T>() DI extension with required-SettingsDirectory
validation; one {ClassName}.json per class; singletons resolve through
ISettingsStore so in-place resets are observed by injected references.
- Tolerant JSON: atomic writes, missing->default, unknown ignored,
case-insensitive, string enums.
- settings list / reset (<class> and --all) via AddSettingsBranch();
all commands honour -v/--verbose.
Tests: 22 xUnit tests (load-on-missing-file, automatic persistence +
round-trip, explicit persistence, debounce coalescing, reset/reset-all,
tolerant deserialisation, atomic writes, error surfacing).
Note: src/.../icon.png is a placeholder (copy of the Auth package icon)
pending a dedicated package icon.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the placeholder (copied from the Auth package) with the dedicated NextIteration.SpectreConsole.Settings icon: a 512x512 RGBA PNG (green gear over a stacked-database mark), consistent with the icon family across the sibling packages. The editable source vector is kept under design/icons/. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The 0.1.0 section was dated and linked to a release tag that doesn't exist yet — the package isn't being released at this point. Mark it Unreleased, point the link at the repo tree, and record the package icon in the initial-release notes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Initial implementation of
NextIteration.SpectreConsole.Settings— strongly-typed, JSON-persisted settings for Spectre.Console CLI tools. Sibling toNextIteration.SpectreConsole.Auth, mirroring its structure, packaging, and quality bar (net10.0,TreatWarningsAsErrors, docs on, SourceLink, snupkg).What's included
SettingsBase— field-backed properties +OnPropertyChanged(). Inert until bound at load, so deserializer setters never trigger a write.PersistenceMode—Automatic(debounced async write, 250 ms default, configurable) /Explicit(Save()/SaveAsync()). Fire-and-forget write failures route to a configurable error handler, never swallowed.AddSettings<T>()— DI registration with required-SettingsDirectoryvalidation; one{ClassName}.jsonper class; per-class singletons resolve throughISettingsStoreso an in-place reset is observed by injected references.settingsbranch —listandreset(<class>and--all) viaAddSettingsBranch(); all commands honour-v/--verbose.design/icons/.Quality
Not in scope here
0.1.0is marked Unreleased in the CHANGELOG; publishing is gated on pushing av*tag, intentionally not done yet.🤖 Generated with Claude Code