Give packs an identity so create can refuse missing deps and load in a stable order.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 00:20:36 +03:00
co-authored by Cursor
parent e5a0ae5b9d
commit 263c94c55d
28 changed files with 851 additions and 56 deletions
+36
View File
@@ -35,6 +35,7 @@ public sealed class CatalogLoader
ApplyPatches(resolved, patches);
var catalog = Materialize(order, resolved, localesRu, localesEn);
ResolveReferences(catalog);
WarnMissingLabels(catalog, log);
return catalog;
}
@@ -491,5 +492,40 @@ public sealed class CatalogLoader
PeopleDefValidator.Validate(catalog);
}
private static void WarnMissingLabels(DefCatalog catalog, IContentLog log)
{
foreach (var def in ConcreteDefs(catalog))
{
if (!catalog.HasText("ru", def.DefName) && !catalog.HasText("en", def.DefName))
{
log.Warning($"Def {DefCatalog.KindOf(def)}:{def.DefName} has no label in the pack locales.");
}
}
}
private static IEnumerable<Def> ConcreteDefs(DefCatalog catalog)
{
return Enumerate(catalog.Actions.Values)
.Concat(Enumerate(catalog.Things.Values))
.Concat(Enumerate(catalog.Positions.Values))
.Concat(Enumerate(catalog.Works.Values))
.Concat(Enumerate(catalog.Rooms.Values))
.Concat(Enumerate(catalog.Buildings.Values))
.Concat(Enumerate(catalog.Floors.Values))
.Concat(Enumerate(catalog.Territories.Values))
.Concat(Enumerate(catalog.Skills.Values))
.Concat(Enumerate(catalog.Traits.Values))
.Concat(Enumerate(catalog.BodyAttributes.Values))
.Concat(Enumerate(catalog.Needs.Values))
.Concat(Enumerate(catalog.NameSets.Values))
.Concat(Enumerate(catalog.Subjects.Values))
.Concat(Enumerate(catalog.Staffing.Values))
.Concat(Enumerate(catalog.DayFrames.Values))
.Concat(Enumerate(catalog.Holidays.Values))
.Concat(Enumerate(catalog.Behavior.Values));
static IEnumerable<Def> Enumerate(IEnumerable<Def> defs) => defs.Where(def => !def.Abstract);
}
private sealed record RawDef(string PackId, DefKind Kind, string DefName, JsonObject Json, string Source);
}