Skip to content

Phase 3: Public Surface, Packaging & Binder Cleanup#31

Merged
guy-lud merged 19 commits into
masterfrom
gsd/phase-3-public-surface-packaging-binder-cleanup
Jul 14, 2026
Merged

Phase 3: Public Surface, Packaging & Binder Cleanup#31
guy-lud merged 19 commits into
masterfrom
gsd/phase-3-public-surface-packaging-binder-cleanup

Conversation

@guy-lud

@guy-lud guy-lud commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Phase 3 — Public Surface, Packaging & Binder Cleanup

Batches the remaining pre-v2.0.0-beta breaking changes for the public surface, packaging, and the command-line binder.

Changes

  • API-01SettingsHolder is now internal sealed (was public). Only SettingsCollection consumed it; tests reach it via InternalsVisibleTo.
  • PKG-01 — removed the Core.AspNet package (zero public surface — its only type was an internal Environments) from the solution plus a dead test ProjectReference. The test-local Core/AspNet/Environments.cs duplicate is retained.
  • PKG-02Microsoft.Extensions.* now float per-TFM (net8 → latest 8.0.x per package: Configuration 8.0.0, DependencyInjection.Abstractions 8.0.2; net10 → 10.0.9), freeing net8 consumers from being transitively forced onto 10.x. Adds a restore-time NuGet audit gate (fails on NU1901NU1904).
  • SRC-02 — command-line binder: space-separated --key value + quoted-value-with-spaces binding (in addition to inline =/:); new SkipFirstArgument option (default false); AddCommandLine() now sources Environment.GetCommandLineArgs() and owns the exe-skip internally.

Breaking changes (for beta migration notes)

  • SettingsHolder is no longer public.
  • The Core.AspNet package is removed.
  • net8 consumers now resolve Microsoft.Extensions.* 8.0.x (previously 10.x).
  • AddCommandLine() tokenizes via GetCommandLineArgs() — quoted values with spaces now bind (previously shredded by Split(' ')); the exe path is skipped only at this entry point (AddArguments binds exactly what it is handed).

Verification

  • Full suite 208/208 (net8 + net10 DLLs), build 0 warnings on both TFMs.
  • Goal-backward verification: 4/4 must-haves met (see 03-VERIFICATION.md).
  • Reviewed clean: plan-checker + architect/security/perf (plan), verifier + code-reviewer (code).

Owner follow-up (not automated)

  • Unlist the published ExistForAll.SimpleSettings.Core.AspNet 2.0.0-alpha.0.* prereleases on NuGet.org (requires the publishing account).

guy-lud added 19 commits July 14, 2026 13:59
- Flip public class SettingsHolder to internal sealed
- Removes an internal DTO from the public API surface
- Reachable from tests/benchmark via existing InternalsVisibleTo
- Drop Core.AspNet Project entry from SimpleSettings.slnx
- Drop Core.AspNet ProjectReference from UnitTests.csproj
- Delete src/Core/ExistForAll.SimpleSettings.Core.AspNet/ directory
- Test-local Core/AspNet/Environments.cs duplicate untouched
- Published 2.0.0-alpha.0.* alphas: unlist is owner-optional follow-up
- Split four Microsoft.Extensions.* pins into per-TFM conditional ItemGroups
- net8 floors: Configuration 8.0.0, Configuration.Json 8.0.1, DI 8.0.1, DI.Abstractions 8.0.2
- net10 stays 10.0.9 for all four
- Frees net8 consumers of the packable Binders + GenericHost packages from 10.x
…gument

- space-separated --k v, quoted-with-spaces single token
- prefixed-next-token = new key, prefixed-value non-binding
- SkipFirstArgument true/false, empty-token no-crash
- CLI-path secret-redaction regression (S2)
…02/D-04,D-05)

- SkipFirstArgument (default false, explicit override; no silent arg[0] drop)
- Parse rewritten to index/lookahead loop; space-separated --k v binds
- empty-safe zero-alloc prefix detection (length-delta + Array.IndexOf, cached prefix array)
- prefixed next-token treated as new key; ArgumentPrefixes XML-doc note
…p (SRC-02/Open Q #1)

- replace Environment.CommandLine.Split(' ') with Environment.GetCommandLineArgs()
- wrap caller action to enable SkipFirstArgument=true (exe skip owned by this entry point)
- quoted-value-with-spaces criterion now holds end-to-end unconditionally
@guy-lud
guy-lud merged commit 6303199 into master Jul 14, 2026
2 checks passed
@guy-lud
guy-lud deleted the gsd/phase-3-public-surface-packaging-binder-cleanup branch July 14, 2026 18:48
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