Skip to content

Add SQLite-backed per-user config store - #84

Merged
pixelbadger merged 9 commits into
masterfrom
claude/per-user-config-system-k9yurh
Oct 9, 2026
Merged

pixelbadger merged 9 commits into
masterfrom
claude/per-user-config-system-k9yurh

Conversation

@pixelbadger

Copy link
Copy Markdown
Owner

IConfigStore/ITopicConfig plus a Dapper-over-Microsoft.Data.Sqlite
implementation with one table per topic. Bump version to 7.2.0.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_017gKT7yHfLjdTqeKrP5YFbD

claude added 9 commits October 8, 2026 23:49
IConfigStore/ITopicConfig plus a Dapper-over-Microsoft.Data.Sqlite
implementation with one table per topic. Bump version to 7.2.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017gKT7yHfLjdTqeKrP5YFbD
Builds a `config` topic by walking the finished command tree, applies stored
defaults (action > group > topic > built-in) via default-value factories,
adds the WithImmutableDefault marker, IConfigStore interfaces, and isolates
ToolkitProcess config home per invocation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017gKT7yHfLjdTqeKrP5YFbD
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017gKT7yHfLjdTqeKrP5YFbD
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017gKT7yHfLjdTqeKrP5YFbD
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017gKT7yHfLjdTqeKrP5YFbD
…dd config integration tests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017gKT7yHfLjdTqeKrP5YFbD
Add docs/config.html covering set, show and unset, precedence, what can
not be configured, and storage. Add a config card to docs/index.html.
In CLAUDE.md, add config examples, the topic list entry, the Dapper
dependency, and a Per-user config section for developers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017gKT7yHfLjdTqeKrP5YFbD
When a stored config value failed to parse, SetErrorCore replaced the
option's DefaultValueFactory with one that only added an error and
returned default. --help renders the factory's return value, so help
showed "[default: 0]" instead of the built-in default.

The error factory now captures the option's existing factory and returns
its value after recording the error. The parse still fails for the
action, and help shows the built-in default.

Adds regression tests for help output and for the invalid-default error
on a normal parse.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017gKT7yHfLjdTqeKrP5YFbD

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. CI is green, the version is bumped (7.1.0 to 7.2.0), docs are updated, and tests are included.

Non-blocking nit: SqliteConfigStore.GetAll opens the database with SqliteOpenMode.ReadWrite (Services/SqliteConfigStore.cs:352). A read-only config file or directory would make every topic command fail with "unreadable". ReadOnly is enough for a read.


Automated review of 44e164e

@pixelbadger
pixelbadger merged commit 969acdc into master Oct 9, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants