Commit Graph
5 Commits
Author SHA1 Message Date
james.maesandClaude Opus 5.5 20c95cffaa refactor: fix analyzer findings and add header comments
Fixes every finding the new quality gate reports, without changing behavior:

- One type per file (MA0048): AppBrand, Attribution, NullActivityLog,
  LogSnapshot, ISanitizable, AppTheme, UpdateCheckResult, UpdateText,
  IUpdateBackend, ContentDialogPrompter, WindowExtensions, MessageBoxPrompter,
  and the samples' SampleSettings/SampleSettingsContext get their own files
  (the samples now link samples/Shared/*.cs).
- Regex match timeouts on the two generated regexes (MA0009).
- AppInfo.Id reports nameof(value) as the parameter (MA0015); test updated.
- Splash dismissal is a named DismissAfterAsync started through the
  dispatcher (MA0147, MA0134), and the WinUI splash constructor is split into
  builders (MA0051). The WPF countdown must go through the dispatcher: the
  sample builds its window before Application.Run, when no synchronization
  context exists.
- The WinUI sample's startup update check is a named method (MA0147).
- CA1859 in BrandTool and the version tests; private static readonly fields
  renamed to s_camelCase (IDE1006).
- A header comment on every type and method (K22-CODE-09/CS-04): hand-written
  for library, sample, and tool code; test methods summarize their
  Subject_Behavior names.

Verified: zero-warning x64 build, 115 unit tests with 100% line coverage of
KofTwentyTwo.AppKit and KofTwentyTwo.AppKit.Updates, 12 UI tests, and
dotnet format --verify-no-changes --severity warn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
2026-10-09 10:23:40 -05:00
james.maesandClaude Opus 5.5 44fe822201 docs: add SPDX license headers to every C# file
K22-CODE-24: every source file starts with a copyright line and an SPDX
license identifier, the same header the KofTwentyTwo IntelliJ copyright
profile inserts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
2026-10-09 10:23:39 -05:00
james.maesandClaude Opus 5.5 9d4a21cb99 style: apply the Kingsrook layout and LF line endings
Formatting only, no behavior change. Produced mechanically:

- dotnet format on the solution (3-space indent, Allman braces, `if(`,
  usings, `var`, System.Threading.Lock); the linked samples/Shared file is
  formatted through one project, because formatting it through both writes
  conflict markers into it.
- Kingsrook blank lines the .NET formatter cannot express (K22-CODE-06,
  K22-CODE-CS-03): three blank lines around methods, constructors, types, and
  multi-line properties; at most one blank line inside code blocks and between
  single-line members; two after the using list. Applied with a Roslyn rewriter
  equivalent to Rider's resharper_blank_lines_* keys.
- XML-family files (.csproj, .props, .slnx, .xaml, manifests, .runsettings)
  re-indented to three spaces.
- git add --renormalize: every text file is stored with LF.

Listed in .git-blame-ignore-revs so git blame skips it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
2026-10-09 10:23:38 -05:00
james.maesandClaude Opus 5.5 5006a8c822 build: adopt the KofTwentyTwo .NET quality gate and lock files
Brings in the standards' configs/dotnet files (K22-CODE-CS-01, -08):

- .editorconfig: Kingsrook layout (3-space indent, Allman braces, no space
  after control keywords), naming rules and code-style rules at build-failing
  severity, plus the AppKit samples' XAML-handler relaxations.
- .gitattributes: LF line endings everywhere (K22-CODE-07).
- Directory.Build.props: analyzers, warnings as errors, documentation file for
  IDE0005, deterministic builds, NuGetAudit mode all, lock files, and locked
  restore on CI; AppKit's version and package metadata kept.
- Directory.Packages.props: Meziantou.Analyzer and transitive pinning.
- packages.lock.json for every project (locked restore verified for x64 and
  ARM64).

The code is reformatted and the new analyzer findings are fixed in the
following commits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
2026-10-09 10:23:37 -05:00
James MaesandClaude Opus 5.5 83f028f188 AppKit: shared foundation packages for KofTwentyTwo Windows apps
Extracts the app-agnostic plumbing proven in gclo 1.0 into four packages that
every future KofTwentyTwo Windows app builds on:

- KofTwentyTwo.AppKit: AppInfo identity, AppPaths, BuildVersion, crash-safe
  FileActivityLog with retention, LogTail, atomic SettingsStore<T> with
  ShellSettings, Credential Manager secret vault, IUserPrompter seam
- KofTwentyTwo.AppKit.Updates: Velopack startup hook, never-throwing GitHub
  Releases update service with stable/dev channel selection, and the shared
  "check for updates" flow (UpdateCoordinator)
- KofTwentyTwo.AppKit.WinUI / .Wpf: code-built splash overlay, About, live log
  viewer, crash net, theme and window helpers, dialog adapters

The two framework-free packages are held to 100% line coverage (109 tests).
WinUI and WPF sample apps exercise every service and are driven end to end by
12 FlaUI tests. BrandTool generates the vector mark and multi-size .ico.

CI mirrors gclo's gates (zero warnings, coverage, UI tests, format, CodeQL,
dependency review); the release workflow packs, checksums, attests build
provenance, publishes a GitHub release, and pushes to nuget.org.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 07:10:42 -05:00