From ce3fdda51cff01fc26c692f9918a531d8790e875 Mon Sep 17 00:00:00 2001 From: Jon Kazama Date: Thu, 28 May 2026 18:30:32 +0200 Subject: [PATCH] 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. --- Anvil/RecipeData/AnvilRecipe.cs | 11 ++++++----- Anvil/RecipeData/Internal/LuminaRecipeAdapter.cs | 6 ------ Anvil/RecipeData/Mechanics/ConditionMechanicsTable.cs | 7 ++++--- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/Anvil/RecipeData/AnvilRecipe.cs b/Anvil/RecipeData/AnvilRecipe.cs index e6b6f16..eeffeae 100644 --- a/Anvil/RecipeData/AnvilRecipe.cs +++ b/Anvil/RecipeData/AnvilRecipe.cs @@ -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; } diff --git a/Anvil/RecipeData/Internal/LuminaRecipeAdapter.cs b/Anvil/RecipeData/Internal/LuminaRecipeAdapter.cs index e5bd358..181799e 100644 --- a/Anvil/RecipeData/Internal/LuminaRecipeAdapter.cs +++ b/Anvil/RecipeData/Internal/LuminaRecipeAdapter.cs @@ -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, " diff --git a/Anvil/RecipeData/Mechanics/ConditionMechanicsTable.cs b/Anvil/RecipeData/Mechanics/ConditionMechanicsTable.cs index ace0e77..8136cd9 100644 --- a/Anvil/RecipeData/Mechanics/ConditionMechanicsTable.cs +++ b/Anvil/RecipeData/Mechanics/ConditionMechanicsTable.cs @@ -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;