All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.14.0 - 2026-02-28
- chore: Target
net10.0TFM. (#259) - deps: update dependencies and build tools. (#259)
- deps: update System.CommandLine to 2.0.x. (#259)
- deps: update Serilog to 4.x, Serilog.Sinks.Console to 6.x.
- deps: update Microsoft.CodeAnalysis.CSharp to 5.0.0. (#259)
- refactor: migrate source generator to IIncrementalGenerator. (#260)
- refactor: remove morelinq dependency, replace with local implementations.
- refactor: remove Optional dependency, replace with nullable references.
- refactor: code cleanup — remove warning suppressions, fix sync-over-async, move InternalsVisibleTo to csproj.
0.13.0 - 2021-09-16
ListNode<T>-derived classes (e.g.ItemListNode) now have covariant return with self type inWithNodesmethod override (e.g.ItemListNode ItemListNode.WithNodes(nodes)). (#133)wham publishfixed to work on repositories with nogstfile. (#135)
0.12.0 - 2020-11-12
- Feat: Add support for roster migrations (#131).
- deps: Use .NET 5 SDK for build, target only .NET 5 with NuGet packages.
- Fix: RosterTag name in v2.03 XSD schema (was
tags, istag) (#121). - Refactor: Core types are now C# 9 nominal records (#125).
- Refactor: Xml serializers are now manually crafted using C# 9/.NET 5 Source Generators; this allows Xml serialization to work with C#9 records and (primarily) ImmutableArrays, as well as greatly reduce warmup-time in deployments like Blazor WASM, and remove any Reflection from that process (#130).
0.11.0 - 2020-07-15
- Added some base classes:
- added QueryFilteredBase (QueryBase with ChildId), inherits from QueryBase
- added SelectionParentBase, base of Force and Selection
- added ModifierBase, base of Modifier and ModifierGroup
- Added descriptive comments to ModifierKind
- Added RosterTag type
- Added missing fields to be fully 2.03 schema compliant:
- added CostType.Hidden
- added ModifierGroup.ModifierGroups
- added many fields to Publication:
- ShortName
- Publisher
- PublicationDate
- PublisherUrl
- added CustomNotes and Tags to Roster
- added CustomName and CustomNotes to RosterElementBase
- CharacteristicType now inherits Commentable
- renamed SelectorBase to QueryBase
- BSv2.03 schema with the above changes
0.10.0 - 2020-06-03
readmefield on datafile root elements (gamesystem and catalogue) in code and in 2.03 schema (#115).
- In
WarHub.ArmouryModel.ProjectModel.IDatafileInfointerfaceSourceNode? GetData()changed toasync Task<SourceNode?> GetDataAsync(); this also results in some APIs changing to beasyncas well, especially inWorkspaces.BattleScribenamespace (#117).
0.9.0 - 2020-05-21
- C# 8.0 Nullable Reference Types support (NRTs) (#111).
netstandard2.1targets in libraries to support NRT-enabled TFMs.
WhamNodeCoreAttributeclass from.Sourcelibrary (added by accident in v0.8).
0.8.0 - 2020-05-14
NodeList<T>.Slice(int, int)method to support ranges in C#8 (#89).commentfield on data elements (and in 2.03 schema) (#108).
- Renamed
BattleScribeVersionstatic well-known values fromV0_00toV0x00(#86). - Renamed
ResourcestoXmlResources(.Sourcelibrary) (#86). - Changed
NodeList<T>.GetEnumerator()andListNode<T>.GetEnumerator()return type to custom enumeratorNodeList<T>.Enumeratorthat's optimized for performance (#89). - Changed all parameter names across the board to be camelCased. Also changed
parameter names of
Withmethods tovalueto mirror setters (#90). - All Node
Withmethods for collection properties are now extension methods, with the exception the ones where parameter name is the same as the property's that's being modified (#90). - Renamed a couple of Source Core/Node properties (#91):
- Category: IsPrimary -> Primary
- CategoryLink: IsPrimary -> Primary
- EntryBase: IsHidden -> Hidden
- Repeat:
- Repeats -> RepeatCount
- IsRoundUp -> RoundUp
- SelectorBase: PercentValue -> IsValuePercentage
- SelectionEntryBase: Import -> Exported
0.7.0 - 2019-11-05
- Support for BattleScribe v2.03 data format (#47)
- "Latest" channel (folder) for
Catalogue.xsd. wham --infocommand that displays more detailed program info (#64).- EntryLink now has
SelectionEntries,SelectionEntryGroupsandEntryLinkslists (#77).
- Current version of schema changed to v2.03 (latest)
NodeFactoryinWarHub.ArmouryModel.Sourcenamespace was rewritten to provide much more defaults, use other Nodes as value providers, and add more methods (#58).INodeWithCore<TCore>is now covariant onTCoreparameter, updating it's signature tointerface INodeWithCore<out TCore>(#63).- Cores and Nodes' With and Update methods now check for equality of old and new, and when they're equal, return current instance (#75).
SourceRewriterimplementation fixed to actually work (#75).- EntryLink now inherits from SelectionEntryBase instead of EntryBase (#77).
SelectionEntryNode.CategoryEntryIdproperty was removed. It was a leftover from old format, pre-2.01 (#59).SourceNode.Coreproperty was removed (#59). All other classes that previously declared it still have it.SourceNode(NodeCore core, SourceNode parent)constructor was replaced with a new one:SourceNode(SourceNode parent)since theCoreproperty is no longer part of this type (#63).SourceNodeno longer implementsINodeWithCore<NodeCore>(#63).
0.6.17 - 2019-08-16
- Support for BattleScribe v2.02 data format (#39)
- CLI tool
whaminstallable viadotnet install tool -g wham - XSD for
catalogue,rosterandgame systemXML, accessible viaWarHub.AmouryModel.Source.XmlFormat.Resourcesclass - Migration XSL transforms for
game systemandcatalogueXML files, accessible viaWarHub.AmouryModel.Source.XmlFormat.Resourcesclass. Supported BattleScribe versions:- 1.15
- 2.00
- 2.01
- 2.02
- Migrations can be applied via
WarHub.ArmourtModel.Source.BattleScribe.DataVersionManagementtype. This type has methods that allow applying single migration XSL, as well as applying migrations that take given input to newest version known.