v3.0.0
v3.0.0 (major)
Changes since v2.0.0:
- [major] Sonar: clear all 24 open issues and the one security hotspot (@matt-edmondson)
- [patch] MSTEST0058/0061: fix the two MSTest analyzer diagnostics (@matt-edmondson)
- [patch] S4136/S4144: group overloads and drop duplicate private factories (@matt-edmondson)
- [patch] S3776: reduce cognitive complexity in seven methods (@matt-edmondson)
- [patch] S3267: clear the last two generator loops (@matt-edmondson)
- [patch] S1172: drop the last four unused generator parameters (@matt-edmondson)
- [patch] S3267: simplify two generator loops with LINQ (@matt-edmondson)
- [patch] S1192: name the literals the generators emit (@matt-edmondson)
- [patch] Add a local SonarCloud check; simplify AdjustForContrast; test PatternValidationRule (@matt-edmondson)
- [patch] Fix a sentence-case bug, harden the pattern regex, tidy the generator (@matt-edmondson)
- [patch] Extract the shared delimiter-separated casing rules (@matt-edmondson)
- [patch] Adopt ktsu.Sdk 2.27.0: KTSU0001 package references (@matt-edmondson)
- Merge remote-tracking branch 'origin/main' into chore/sonarcloud-cleanup-2 (@matt-edmondson)
- [patch] Cover the untested casing and relative-path branches (@matt-edmondson)
- [patch] Cover PropertyTemplate shorthand; drop the duplicated const docs (@matt-edmondson)
- [patch] S4136: group AsAbsolute overloads in the relative path types (@matt-edmondson)
- [patch] Fix SonarCloud issues: S2223, S1192, S6610, S6580, S3358 (@matt-edmondson)
- [patch] Fold the generator tests into Semantics.Test so their coverage is collected (@matt-edmondson)
- [patch] Add source generator tests to cover the generator pipeline (@matt-edmondson)
- [patch] MSTEST0037: use the intent-revealing assertions (@matt-edmondson)
- [patch] MSTEST0068: CollectionAssert.AreEqual -> Assert.AreSequenceEqual (@matt-edmondson)
- [patch] Migrate file headers to the one-line ktsu-dev form (@matt-edmondson)
- [patch] Fix SonarCloud BLOCKER issues in test suite (@matt-edmondson)
- Sync .serena.gitignore (@KtsuTools)
- Sync .runsettings (@KtsuTools)
- Sync .editorconfig (@KtsuTools)
- Sync .gitattributes (@KtsuTools)
- Sync global.json (@KtsuTools)
- [minor] Return the root itself from AbsoluteDirectoryPath.Parent (@matt-edmondson)
- [patch] Fix directory detection in SemanticRelativePath.Make (@matt-edmondson)
- Make the new path tests platform-agnostic (@matt-edmondson)
- Emit CRLF from the generators and re-enable package validation (@matt-edmondson)
- [minor] Compare semantic strings by value and expose path values on interfaces (@matt-edmondson)
- [minor] Add color adjustment operations across color spaces (@matt-edmondson)
- [patch] Fix Oklch assertion in color cross-conversion tests (@matt-edmondson)
- [minor] Add cross-space conversions between all color types (@matt-edmondson)
- fix(music): use ValueTuple.GetHashCode instead of System.HashCode for netstandard2.0 compatibility (@matt-edmondson)
- refactor(music): split Progression.TryParse into helpers to cut cognitive complexity and remove always-true check (SonarQube S3776/S2583) (@matt-edmondson)
- docs(music): update examples and references for Parse/TryParse rename and chart-style progressions (@matt-edmondson)
- feat(music): chart-style Arrangement ToString + Parse/TryParse + structural equality (@matt-edmondson)
- feat(music): chart-style Section ToString + Parse/TryParse (@matt-edmondson)
- feat(music)!: replace bar-delimited Progression.Parse with chart-style ToString/Parse/TryParse + structural equality; migrate call sites (@matt-edmondson)
- feat(music): rename Form.FromPattern to Parse/TryParse, canonical ToString, structural equality (@matt-edmondson)
- feat(music): Rest canonical ToString + Parse/TryParse (@matt-edmondson)
- feat(music): Note canonical ToString + Parse/TryParse (@matt-edmondson)
- feat(music): ChordEvent canonical ToString + Parse/TryParse (@matt-edmondson)
- feat(music): canonical Chord ToString, TryParse, ParseRoot via Notation (@matt-edmondson)
- feat(music): Key canonical ToString + Parse/TryParse; roman-numeral accidental via Notation (@matt-edmondson)
- feat(music): Scale canonical ToString + Parse/TryParse (@matt-edmondson)
- feat(music): Tempo canonical ToString + Parse/TryParse (@matt-edmondson)
- feat(music): Velocity canonical ToString + Parse/TryParse (@matt-edmondson)
- feat(music): TimeSignature canonical ToString + Parse/TryParse (@matt-edmondson)
- feat(music): Duration canonical ToString + Parse/TryParse (@matt-edmondson)
- feat(music): Interval canonical ToString + Parse/TryParse (@matt-edmondson)
- feat(music): rename Mode.FromName to Parse/TryParse, canonical ToString (@matt-edmondson)
- feat(music): typed Pitch factory, rename FromName to Parse/TryParse, canonical ToString (@matt-edmondson)
- feat(music): typed PitchClass factory, Parse/TryParse, canonical ToString (@matt-edmondson)
- feat(music): add NoteLetter and Accidental enums (@matt-edmondson)
- docs: implementation plan for music type-safe factories and canonical round-trip ToString (@matt-edmondson)
- docs: revise music factories spec with canonical round-trip ToString and chart-style aggregate format (@matt-edmondson)
- docs: design spec for music type-safe factories and Parse/TryParse convention (@matt-edmondson)
- [patch] docs: add per-package READMEs and turn root README into a family index (@matt-edmondson)
- docs(music): document the analysis aggregate layer (@matt-edmondson)
- test(music): lock guard/coverage contracts; dedupe chromatic scale check (@matt-edmondson)
- feat(music): add Form pattern extraction and named-form recognition (@matt-edmondson)
- feat(music): add Arrangement container (@matt-edmondson)
- feat(music): add Section structural unit (@matt-edmondson)
- feat(music): add chromatic chord identification (@matt-edmondson)
- feat(music): add key inference by diatonic fit (@matt-edmondson)
- docs(music): switch key inference to quality-weighted scoring (@matt-edmondson)
- feat(music): add cadence detection (@matt-edmondson)
- feat(music): add roman-numeral labeling and functional classification (@matt-edmondson)
- feat(music): add Progression.Parse bar-delimited chord syntax (@matt-edmondson)
- feat(music): add Progression core (construction, totals, empty rejection) (@matt-edmondson)
- fix(music): drop CA1859 pragma; use IMusicalEvent helper in ChordEvent test (@matt-edmondson)
- feat(music): add ChordEvent harmonic event type (@matt-edmondson)
- docs(music): implementation plan for analysis aggregate layer (@matt-edmondson)
- docs(music): design spec for analysis aggregate layer (@matt-edmondson)
- test(strings): add As round-trip test for Uuid (@matt-edmondson)
- docs(strings): reconcile spec As test bullet with implemented roster (@matt-edmondson)
- docs(strings): document Identifiers package in README (@matt-edmondson)
- chore(strings): finalize Identifiers package and document it (@matt-edmondson)
- feat(strings): add JwtToken identifier type (@matt-edmondson)
- feat(strings): add Iban identifier type (@matt-edmondson)
- feat(strings): add Isbn identifier type (@matt-edmondson)
- style(strings): add trailing newline to IsCreditCardNumberAttribute.cs (@matt-edmondson)
- docs(strings): use pattern-matching form in Tasks 5-6 (IDE0078) (@matt-edmondson)
- feat(strings): add CreditCardNumber identifier type (@matt-edmondson)
- feat(strings): add Ulid identifier type (@matt-edmondson)
- docs(strings): align plan Tasks 3-7 with repo conventions (ThrowsExactly, no using System, Ensure.NotNull) (@matt-edmondson)
- feat(strings): add Uuid identifier type (@matt-edmondson)
- chore(strings): scaffold Semantics.Strings.Identifiers package (@matt-edmondson)
- docs(strings): correct empty-string handling in spec; add implementation plan (@matt-edmondson)
- docs(strings): spec for Semantics.Strings.Identifiers (Phase 0) (@matt-edmondson)
- docs(color): correct Oklab round-trip tolerance note in plan (@matt-edmondson)
- feat(color): add NamedColors and gamma-regression tests (@matt-edmondson)
- feat(color): add Oklab mix, lerp, distance, and gradient (@matt-edmondson)
- feat(color): add WCAG luminance, contrast, and accessibility adjustment (@matt-edmondson)
- feat(color): add HSL and HSV conversions (@matt-edmondson)
- feat(color): add Oklab and Oklch perceptual spaces (@matt-edmondson)
- feat(color): add hex and byte conversions (sRGB-interpreted) (@matt-edmondson)
- feat(color): add Srgb space and gamma-correct sRGB<->linear boundary (@matt-edmondson)
- docs(color): add semantic-domains roadmap, Semantics.Color spec and plan (@matt-edmondson)
- style(color): strip UTF-8 BOM and add final newline (editorconfig) (@matt-edmondson)
- feat(color): scaffold Semantics.Color with canonical linear Color type (@matt-edmondson)
- docs: cover Semantics.Music score primitives, frequency, inversions, roman parsing (@matt-edmondson)
- [minor] feat(music): score primitives, frequency bridge, inversions/transpose, roman-numeral parsing (@matt-edmondson)
- feat(music): parse roman numerals back into chords (inverse of RomanNumeralOf) (@matt-edmondson)
- feat(music): add chord inversions and Transpose on Chord/Scale/Key (@matt-edmondson)
- feat(music): add Pitch<->frequency (A440) and interval cents (@matt-edmondson)
- feat(music): add score primitives (Velocity, Tempo, Note, Rest) with real-time conversion (@matt-edmondson)
- Merge feature/semantics-music-types: musical value types (@matt-edmondson)
- [minor] feat(music): musical value types (pitch, interval, scale, chord, key, duration) (@matt-edmondson)
- feat(music): add Key with roman-numeral function; spell chromatic degrees conventionally (flat-preference) (@matt-edmondson)
- feat(music): add Chord engine with parsing, tones, and voicing (full HeatDeathRomance vocabulary) (@matt-edmondson)
- feat(music): add TimeSignature with bar and beat durations (@matt-edmondson)
- feat(music): add rational Duration with arithmetic and dotted/tuplet support (@matt-edmondson)
- feat(music): add Scale and ScaleDegree with degree resolution (@matt-edmondson)
- feat(music): add Mode with full standard scale catalog (diatonic, jazz, symmetric, pentatonic) (@matt-edmondson)
- feat(music): add Interval with octave folding and pitch difference (@matt-edmondson)
- feat(music): add Pitch with MIDI/name conversion and transpose (@matt-edmondson)
- feat(music): scaffold Semantics.Music with PitchClass (@matt-edmondson)
- fix(packaging): unblock the 2.0 release pipeline [patch] (@matt-edmondson)
What's Changed
- MSTEST0058/0061: fix the two MSTest analyzer diagnostics by @matt-edmondson in #169
- [major] Sonar: clear all 24 open issues and the one security hotspot by @matt-edmondson in #170
Full Changelog: v2.9.14...v3.0.0