SetManifest¶
Namespace Nfty.Core.Output in assembly Nfty.Core.
The Set's own record, written to set.json: its name, size, seed, the hash of the book that produced it, the collection-wide rarity table and the per-recipe distribution. Reports such as SetReport read it alone, so inspecting a large Set costs the same as inspecting a small one.
Constructors¶
SetManifest(string, int, string, string?, string, IReadOnlyList<RecipeCount>, IReadOnlyList<RarityAttribute>, bool?, SetModels?, string?, int?, SetFiles?)¶
public SetManifest(string Name, int Count, string Seed, string? CookbookSha256, string GeneratorVersion, IReadOnlyList<RecipeCount> Distribution, IReadOnlyList<RarityAttribute> Rarity, bool? UniqueDna = null, SetModels? Models = null, string? Symbol = null, int? MetadataShape = null, SetFiles? Files = null);
Parameters
Name(string) - The collection's name.Count(int) - How many assets the Set holds.Seed(string) - The seed that produced it; the same seed and cookbook reproduce it exactly.CookbookSha256(string?) - SHA-256 of the source.cbk— what ties a Set back to the exact archive that produced it. Null when the cookbook never came from a file (an in-memory book). Documented here rather than on the parameter itself: a<summary>inside a positional record's parameter list is not a valid documentation location, so the compiler discarded it with CS1587 and no tooling ever saw it — on the one field CLAUDE.md insists stays threaded through.GeneratorVersion(string) - The engine version stamp.Distribution(IReadOnlyList<RecipeCount>) - Per-recipe counts and shares across the Set.Rarity(IReadOnlyList<RarityAttribute>) - The collection-wide rarity table.UniqueDna(bool?) - Whether every asset was required to have distinct DNA. Recorded because the seed does NOT reproduce a run on its own. The same cookbook and the same seed generate a different collection depending on this switch — with uniqueness on, a colliding roll is discarded and re-rolled, which consumes RNG draws that the unlimited run never spends, so the two diverge from the first collision onward. Without this field a Set carried two thirds of its own recipe. Null means "not recorded", not "false": Sets written before this field existed cannot say, and claiming they were unique would be inventing a fact. Additive and optional, soSchema.Currentis deliberately NOT bumped — older builds ignore unknown properties, whereas a bump would make them reject the file outright.Models(SetModels?) - The 3D models the cook made, or null (and absent from the file) when it made none. Additive and optional, no schema bump.Symbol(string?) - The collection's ticker-style symbol, so an export can writecollection.jsonwithout the source book. Additive and optional, no schema bump; null in a Set cooked before it existed.MetadataShape(int?) - Which shape of per-item metadata the Set carries (MetadataTraits): absent means 1, the shape before color traits and explicitNone; new cooks write 2.extendkeeps writing the recorded shape. Additive and optional, no schema bump.Files(SetFiles?) - How the Set's per-asset files are NAMED when an export renamed them (token ids, a different start id), or marks an export whose metadata links were rewritten; null (and absent from the file) means the writer's own padded names from 1. Written only by an export, and read by every reader of per-asset files throughSetFiles, so an export reopens as a Set whatever it was named. Additive and optional, no schema bump.
Properties¶
CookbookSha256¶
SHA-256 of the source .cbk — what ties a Set back to the exact archive that produced it. Null when the cookbook never came from a file (an in-memory book).
Documented here rather than on the parameter itself: a <summary> inside a positional record's parameter list is not a valid documentation location, so the compiler discarded it with CS1587 and no tooling ever saw it — on the one field CLAUDE.md insists stays threaded through.
Count¶
How many assets the Set holds.
Distribution¶
Per-recipe counts and shares across the Set.
FileNaming¶
The naming this Set's per-asset files follow: SetManifest.Files, or the writer's own.
Files¶
How the Set's per-asset files are NAMED when an export renamed them (token ids, a different start id), or marks an export whose metadata links were rewritten; null (and absent from the file) means the writer's own padded names from 1. Written only by an export, and read by every reader of per-asset files through SetFiles, so an export reopens as a Set whatever it was named. Additive and optional, no schema bump.
GeneratorVersion¶
The engine version stamp.
MetadataShape¶
Which shape of per-item metadata the Set carries (MetadataTraits): absent means 1, the shape before color traits and explicit None; new cooks write 2. extend keeps writing the recorded shape. Additive and optional, no schema bump.
Models¶
The 3D models the cook made, or null (and absent from the file) when it made none. Additive and optional, no schema bump.
Name¶
The collection's name.
Rarity¶
The collection-wide rarity table.
Seed¶
The seed that produced it; the same seed and cookbook reproduce it exactly.
Symbol¶
The collection's ticker-style symbol, so an export can write collection.json without the source book. Additive and optional, no schema bump; null in a Set cooked before it existed.
UniqueDna¶
Whether every asset was required to have distinct DNA.
Recorded because the seed does NOT reproduce a run on its own. The same cookbook and the same seed generate a different collection depending on this switch — with uniqueness on, a colliding roll is discarded and re-rolled, which consumes RNG draws that the unlimited run never spends, so the two diverge from the first collision onward. Without this field a Set carried two thirds of its own recipe.
Null means "not recorded", not "false": Sets written before this field existed cannot say, and claiming they were unique would be inventing a fact. Additive and optional, so Schema.Current is deliberately NOT bumped — older builds ignore unknown properties, whereas a bump would make them reject the file outright.