Skip to content

release: 26.4.0 — profiles promotion + settings framework cleanups#33

Merged
discreteds merged 11 commits into
mainfrom
release/26.4.0
Apr 17, 2026
Merged

release: 26.4.0 — profiles promotion + settings framework cleanups#33
discreteds merged 11 commits into
mainfrom
release/26.4.0

Conversation

@discreteds

Copy link
Copy Markdown
Member

Release 26.4.0

This release promotes the descriptor/registry/auth machinery from mountainash-data into mountainash-settings so other settings-heavy packages can reuse the pattern. It also includes several architectural cleanups across the core settings framework.

Highlights

Profiles promotion (new profiles/ + auth/ sub-packages)

  • profiles/ — pattern mechanism (Pattern A + B):
    • ProfileDescriptor, ParameterSpec (with new template field for declarative Pattern B wiring)
    • DescriptorProfile — pure-mechanism base class (pydantic v2, AfterValidator wiring, template resolution in post_init, adapter contract preserved)
    • Registry — per-domain registry class with bound decorator, ID resolution, and test seams
    • descriptor_invariants_for(registry) — pytest helper producing parametric invariant tests for any registry
  • auth/ — cross-cutting typed auth:
    • AuthSpec base + 10 subclasses (NoAuth, PasswordAuth, TokenAuth, JWTAuth, OAuth2Auth, ServiceAccountAuth, IAMAuth, AzureADAuth, KerberosAuth, CertificateAuth, WindowsAuth) — pydantic v2 discriminated union
    • AUTH_TO_DRIVER_KWARGS + auth_to_driver_kwargs() default dispatch

Public re-exports from mountainash_settings.__init__ expose all new symbols at package root.

Settings framework cleanups

  • Collapse merge framework into SettingsParameters.merge()
  • Remove SettingsUtils facade; normalize kwargs at SettingsParameters.create() boundary
  • Remove namespace field from settings architecture
  • Prevent mutation of cached settings in SettingsManager.get_settings_object()
  • Classify secrets_dir as structural parameter in hash/eq
  • Restore super().post_init() call in AppSettings

Dependencies

  • Disable mountainash-constants dependency (no longer needed)
  • Bump hatch tooling versions

Test plan

What's next

Downstream consumers (mountainash-data Phase 2 migration) can now pin mountainash-settings >= 26.4.0 and consume profiles/ + auth/ from the upstream location.

Full changelog

See merged PRs on develop since v25.8.0 for the full list (11 commits delivered via #32 plus prior architectural cleanups).

discreteds and others added 11 commits April 16, 2026 13:44
Promotes the descriptor/registry/auth/template patterns from
mountainash-data into mountainash-settings, enabling reuse by
mountainash-utils-files, mountainash-utils-secrets, and
mountainash-acrds-core.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
10 tasks: port AuthSpec hierarchy (11 subclasses + dispatch), build
profiles/ sub-package (descriptor + registry + DescriptorProfile +
template wiring + invariants helper), wire public re-exports.
Ships the reusable mechanism ahead of any consumer migration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…upport

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Lifts ConnectionProfile from mountainash-data, renames to DescriptorProfile,
drops domain-specific to_driver_kwargs/to_connection_string, renames helpers
to _default_kwargs/_auth_kwargs, and wires ParameterSpec.template via post_init
(Pattern B). All 13 new tests pass alongside prior 16 (29 total).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds MISSING, DescriptorProfile, ParameterSpec, ProfileDescriptor, Registry,
descriptor_invariants_for, and the full auth hierarchy (AuthSpec + 10 subclasses,
auth_to_driver_kwargs, AUTH_TO_DRIVER_KWARGS) to mountainash_settings.__init__
and __all__. Smoke tests confirm both surfaces are importable from the package root.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat(profiles): promote descriptor/registry/auth machinery from mountainash-data — Phase 1
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
C Security Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@discreteds discreteds merged commit 4e2cca5 into main Apr 17, 2026
5 of 6 checks passed
@discreteds discreteds deleted the release/26.4.0 branch April 17, 2026 03:00
@codecov

codecov Bot commented Apr 17, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.62366% with 20 lines in your changes missing coverage. Please review.
✅ Project coverage is 96.67%. Comparing base (ce1466f) to head (de7f967).
⚠️ Report is 88 commits behind head on main.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
src/mountainash_settings/profiles/profile.py 80.00% 10 Missing and 7 partials ⚠️
src/mountainash_settings/profiles/registry.py 94.33% 2 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #33      +/-   ##
==========================================
- Coverage   96.85%   96.67%   -0.19%     
==========================================
  Files          15       31      +16     
  Lines         573      841     +268     
  Branches       81      109      +28     
==========================================
+ Hits          555      813     +258     
- Misses         14       16       +2     
- Partials        4       12       +8     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

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.

1 participant