Skip to content

chore: align with latest standards and prepare 1.0.0 - #15

Merged
StuartMeeks merged 2 commits into
mainfrom
chore/standards-align-1.0.0
Aug 21, 2026
Merged

chore: align with latest standards and prepare 1.0.0#15
StuartMeeks merged 2 commits into
mainfrom
chore/standards-align-1.0.0

Conversation

@StuartMeeks

Copy link
Copy Markdown
Owner

Brings the repo current with the four NextIteration.Standards clauses that landed after the 2026-08-20 settings adoption (which closed at 28/28), and cuts the version over to 1.0.0.

Standards alignment (clauses new since adoption)

Clause Change
§1.2.1 / §5.2 Enable EnforceCodeStyleInBuild in Directory.Build.props and adopt the revised canonical .editorconfig (byte-identical to the template). The IDE style analyzers now gate the ordained house style in-build under TreatWarningsAsErrors, instead of merely documenting it.
§2.7 Add IDE0005 to the test project's NoWarn — the rule needs GenerateDocumentationFile, which the test project turns off.
§4.4 / §3.0.1 Add the CodeQL query-filters block (cs/unmanaged-code, cs/call-to-unmanaged-code) so codeql.yml matches the canonical template. This library has no P/Invoke, so the filter matches nothing here — carried for template alignment, as non-native repos share it harmlessly.

Bringing the code to green under the new style gate required two mechanical, behaviour-preserving fixes:

  • SettingsStore: two collection initialisations → collection expressions (IDE0028/IDE0305).
  • Test project: file-scoped namespaces → block-scoped (IDE0160), matching the library. Pure re-indentation, no logic change.

I verified the audit's own comparison logic locally: .editorconfig is byte-identical, Directory.Build.props matches in non-comment content, and codeql.yml matches the template (the only ci.yml difference remains the permitted v* tag glob).

Release prep

  • Bump <Version> 0.3.01.0.0. Public API and target frameworks (net8.0/net10.0) are unchanged from 0.3.0; 1.0.0 is the commitment to strict SemVer on that surface from here on.
  • Roll the CHANGELOG [Unreleased] section into [1.0.0] — 2026-08-21, with a fresh empty [Unreleased] and updated compare links.

Verification

  • Release build clean at zero warnings with style enforcement on, both TFMs.
  • All 64 tests (32 × net8.0/net10.0) pass.
  • 1.0.0.nupkg + 1.0.0.snupkg pack cleanly.

Publishing is unchanged and still by hand: no tag is pushed by this PR.

🤖 Generated with Claude Code

Brings the repo current with the four NextIteration.Standards clauses that
landed after the 2026-08-20 adoption, and cuts the version over to 1.0.0.

Standards alignment:
- §1.2.1 / §5.2: enable EnforceCodeStyleInBuild and adopt the revised
  canonical .editorconfig (byte-identical). The IDE style analyzers now gate
  the house style in-build under TreatWarningsAsErrors. Bringing the code to
  green converted two collection initialisations in SettingsStore to
  collection expressions and the test project's file-scoped namespaces to
  block-scoped; no runtime behaviour changed.
- §2.7: add IDE0005 to the test project NoWarn.
- §4.4 / §3.0.1: add the CodeQL query-filters block so codeql.yml matches the
  template (no P/Invoke here, so it matches nothing — carried for alignment).

Release prep:
- Bump <Version> 0.3.0 -> 1.0.0. Public API and target frameworks unchanged;
  1.0.0 commits the surface to SemVer.
- Roll the CHANGELOG [Unreleased] section into [1.0.0] — 2026-08-21.

Build clean at zero warnings; all 64 tests (32 x net8.0/net10.0) pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
{
console.Input.PushTextWithEnter(line);
}
var console = new TestConsole().Interactive();
Assert.Contains("Unknown settings class", result.Output, StringComparison.Ordinal);
Assert.Contains("SampleSettings", result.Output, StringComparison.Ordinal);
private static string FileFor<T>(string directory) =>
Path.Combine(directory, typeof(T).Name + ".json");
Directory.CreateDirectory(Path);
}
public string Path { get; } =
System.IO.Path.Combine(System.IO.Path.GetTempPath(), "ni.scs.tests." + Guid.NewGuid().ToString("N"));
Comment on lines +28 to +32
catch
{
// Best-effort cleanup. Stray scratch dirs in %TEMP% aren't a
// problem — the OS reclaims temp eventually.
}
public async Task WriteAllTextAsync_WritesExpectedContent()
{
using var temp = new TempDir();
var target = Path.Combine(temp.Path, "file.txt");
public async Task WriteAllTextAsync_NoTempFileLeftBehindAfterSuccess()
{
using var temp = new TempDir();
var target = Path.Combine(temp.Path, "file.txt");
public async Task WriteAllTextAsync_OverwritesExisting()
{
using var temp = new TempDir();
var target = Path.Combine(temp.Path, "file.txt");
public async Task WriteAllTextAsync_ConcurrentWriters_OneWinsNoStragglers()
{
using var temp = new TempDir();
var target = Path.Combine(temp.Path, "file.txt");
.BuildServiceProvider();

private static string FileFor<T>(string directory) =>
Path.Combine(directory, typeof(T).Name + ".json");
Under EnforceCodeStyleInBuild, the comment interleaved between `=>` and the
expression in AtomicFile.BuildTempPath tripped IDE0055 (Fix formatting) — but
only on the Windows CI leg, whose git checks files out as CRLF (autocrlf=true)
against the .editorconfig's mandated end_of_line = lf. Moving the comment above
the method removes the CRLF-sensitive construct; verified to build clean under
both LF and a CRLF checkout. No behaviour change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@StuartMeeks
StuartMeeks merged commit 7b38b2e into main Aug 21, 2026
9 checks passed
@StuartMeeks
StuartMeeks deleted the chore/standards-align-1.0.0 branch August 21, 2026 13:35
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