Modul 01 Hotfix A2: AnvilRecipe.IsSplendorCosmic entfernt

Splendorous-Tool-Bonus is character-equipment state, not recipe state.
The flag moved to the simulator's stats layer (CraftStats.HasSplendorousTool
in module 02) per the 01-RecipeData Rev 6 spec polish (A2).

- AnvilRecipe.cs: IsSplendorCosmic property removed. Cosmic doc-block
  trimmed to four flags (IsCosmic + two MissionHas* + IsIshgardExpert)
  and now points consumers at the stats-layer for the Splendor branch.
- LuminaRecipeAdapter.cs: assignment in the recipe walk removed.
  ValidateCosmicInvariant drops the IsSplendorCosmic implication
  (MissionHas* checks unchanged).
- ConditionMechanicsTable.cs: header comment rewritten to describe
  Splendor as a stats-layer override rather than a recipe-flag override.

Sweep over Anvil/RecipeData/, Anvil/SelfTest/, Anvil/Hosting/,
Plugin.cs, and PluginHostFactory.cs: zero remaining references to
IsSplendorCosmic. Build clean (0/0), csharpier check clean.
This commit is contained in:
2026-05-28 18:30:32 +02:00
parent 8e624e509a
commit ce3fdda51c
3 changed files with 10 additions and 14 deletions
+6 -5
View File
@@ -28,19 +28,20 @@ public sealed record AnvilRecipe
// Cosmic Exploration (Patch 7.x). v0.1.0 ships with MissionHas* always
// false (SH-15 option B) - the data schema stays in place so v0.2.0+ can
// light up the surface by resolving the WKS mission sheet without
// touching the type. IsCosmic / IsSplendorCosmic are still set by the
// recipe-detection path so the catalog knows which recipes belong to the
// Cosmic surface even while the action flags stay dormant.
// touching the type. IsCosmic is still set by the recipe-detection path
// so the catalog knows which recipes belong to the Cosmic surface even
// while the mission flags stay dormant. The Splendorous-tool bonus is
// character-equipment state rather than recipe state, so it lives in
// the simulator's stats layer (CraftStats.HasSplendorousTool in module
// 02) instead of carrying a flag on this record.
//
// Adapter invariant (validated when the catalog is built):
// IsSplendorCosmic == true implies IsCosmic == true
// MissionHasMaterialMiracle == true implies IsCosmic == true
// MissionHasSteadyHand == true implies IsCosmic == true
//
// Inconsistent recipe states (sub-flag without master flag) throw at
// catalog-build time instead of silently corrupting the simulator.
public required bool IsCosmic { get; init; }
public required bool IsSplendorCosmic { get; init; }
public required bool MissionHasMaterialMiracle { get; init; }
public required bool MissionHasSteadyHand { get; init; }
public required bool IsIshgardExpert { get; init; }
@@ -577,7 +577,6 @@ internal sealed class LuminaRecipeAdapter
IsExpertRecipe = recipe.IsExpert,
CanHQ = recipe.CanHq,
IsCosmic = isCosmic,
IsSplendorCosmic = false,
MissionHasMaterialMiracle = false,
MissionHasSteadyHand = false,
IsIshgardExpert = false,
@@ -636,11 +635,6 @@ internal sealed class LuminaRecipeAdapter
// time instead of producing a corrupt simulator state at runtime.
private static void ValidateCosmicInvariant(AnvilRecipe recipe)
{
if (recipe.IsSplendorCosmic && !recipe.IsCosmic)
throw new InvalidOperationException(
$"AnvilRecipe {recipe.RecipeId}: IsSplendorCosmic implies IsCosmic, "
+ "but IsCosmic is false."
);
if (recipe.MissionHasMaterialMiracle && !recipe.IsCosmic)
throw new InvalidOperationException(
$"AnvilRecipe {recipe.RecipeId}: MissionHasMaterialMiracle implies IsCosmic, "
@@ -10,9 +10,10 @@
// behaviour for Robust - that wording predates the verified mechanics table
// and the values below are the source of truth.)
//
// SplendorCosmic raises Good's quality multiplier from 1.5 to 1.75 on
// recipes flagged IsSplendorCosmic. The override lives in the simulator;
// the table holds the non-Splendor default.
// Splendor (the Splendorous-tool bonus) raises Good's quality multiplier
// from 1.5 to 1.75 when the character has the tool equipped. The override
// lives in the simulator's stats layer (CraftStats.HasSplendorousTool in
// module 02); the table holds the non-Splendor default.
using System.Collections.Generic;