Two concerns bundled into one commit because the csharpier tool restore
reformatted four earlier files as soon as the manifest landed:
- .config/dotnet-tools.json: csharpier 1.2.6 as local tool, follows
the standard .config layout (dotnet tool restore will find it).
- Anvil/packages.lock.json: produced by dotnet restore, pinned alongside
the csproj's RestorePackagesWithLockFile=true.
- Anvil/RecipeData/RecipeDataLoadResult.cs: public record carrying the
adapter's load-pass summary (counts + duration + warnings). Surfaced
to the SelfTest step and future UI status surfaces.
- Anvil/RecipeData/RecipeDataCatalog.cs: public DI singleton with all
seven dictionary lookups, the two helper methods (ActionsForClassJob,
TryResolveActionRowId), and the four meta properties from spec §2.7.
Backed by a private CatalogState record that the adapter swaps in via
a volatile reference - readers either see the empty initial state or
the fully populated post-load snapshot, never a partial mid-build.
TryResolveActionRowId carries the Cosmic-sentinel logic so hook code
does not need to know about the CosmicOnly flag itself.
- Reformatting in AnvilAction.cs, ActionMechanicsTable.cs,
ConditionMechanicsTable.cs, and Anvil.csproj: csharpier-mandated
line-wrap / blank-line tweaks. No semantic changes.