[{"data":1,"prerenderedAt":1688},["ShallowReactive",2],{"navigation":3,"\u002Freference\u002Fapi-cheat-sheet":170,"\u002Freference\u002Fapi-cheat-sheet-surround":1683},[4,25,104,150,160],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-rocket",{"title":26,"icon":6,"path":27,"stem":28,"children":29,"page":6},"Guides","\u002Fguides","2.guides",[30,35,40,45,50,55,60,65,70,75,79,84,89,94,99],{"title":31,"path":32,"stem":33,"icon":34},"Seeds and TestBiome","\u002Fguides\u002Fseeds-and-testbiome","2.guides\u002F01.seeds-and-testbiome","i-lucide-sprout",{"title":36,"path":37,"stem":38,"icon":39},"Blueprints","\u002Fguides\u002Fblueprints","2.guides\u002F02.blueprints","i-lucide-drafting-compass",{"title":41,"path":42,"stem":43,"icon":44},"Customizing","\u002Fguides\u002Fcustomizing","2.guides\u002F03.customizing","i-lucide-sliders-horizontal",{"title":46,"path":47,"stem":48,"icon":49},"Parent\u002Fchild chains and .Under","\u002Fguides\u002Fparents-and-children","2.guides\u002F04.parents-and-children","i-lucide-git-fork",{"title":51,"path":52,"stem":53,"icon":54},"Fan-out","\u002Fguides\u002Ffan-out","2.guides\u002F05.fan-out","i-lucide-split",{"title":56,"path":57,"stem":58,"icon":59},"Sequences","\u002Fguides\u002Fsequences","2.guides\u002F06.sequences","i-lucide-list-ordered",{"title":61,"path":62,"stem":63,"icon":64},"Time and precision","\u002Fguides\u002Ftime-and-precision","2.guides\u002F07.time-and-precision","i-lucide-clock",{"title":66,"path":67,"stem":68,"icon":69},"Transients","\u002Fguides\u002Ftransients","2.guides\u002F08.transients","i-lucide-ghost",{"title":71,"path":72,"stem":73,"icon":74},"Aggregates","\u002Fguides\u002Faggregates","2.guides\u002F09.aggregates","i-lucide-boxes",{"title":76,"path":77,"stem":78,"icon":74},"Input blueprints","\u002Fguides\u002Finput-blueprints","2.guides\u002F09.input-blueprints",{"title":80,"path":81,"stem":82,"icon":83},"Save hooks and global defaults","\u002Fguides\u002Fsave-hooks-and-defaults","2.guides\u002F10.save-hooks-and-defaults","i-lucide-webhook",{"title":85,"path":86,"stem":87,"icon":88},"EF Core store","\u002Fguides\u002Fef-core-store","2.guides\u002F11.ef-core-store","i-lucide-database",{"title":90,"path":91,"stem":92,"icon":93},"No-DB unit tests","\u002Fguides\u002Fno-db-unit-tests","2.guides\u002F12.no-db-unit-tests","i-lucide-flask-conical",{"title":95,"path":96,"stem":97,"icon":98},"Generated grafts and scenario helpers","\u002Fguides\u002Fscenario-helpers-and-sugar","2.guides\u002F13.scenario-helpers-and-sugar","i-lucide-wand-sparkles",{"title":100,"path":101,"stem":102,"icon":103},"Constructor setup","\u002Fguides\u002Fconstructor-setup","2.guides\u002F14.constructor-setup","i-lucide-blocks",{"title":105,"path":106,"stem":107,"children":108,"icon":6},"Examples","\u002Fexamples","3.examples\u002F1.index",[109,111,116,121,126,130,135,140,145],{"title":105,"path":106,"stem":107,"icon":110},"i-lucide-library",{"title":112,"path":113,"stem":114,"icon":115},"Code reviews","\u002Fexamples\u002Fcode-reviews","3.examples\u002F2.code-reviews","i-lucide-git-pull-request",{"title":117,"path":118,"stem":119,"icon":120},"Membership","\u002Fexamples\u002Fmembership","3.examples\u002F3.membership","i-lucide-users",{"title":122,"path":123,"stem":124,"icon":125},"Board","\u002Fexamples\u002Fboard","3.examples\u002F4.board","i-lucide-kanban",{"title":127,"path":128,"stem":129,"icon":44},"Custom seed","\u002Fexamples\u002Fcustom-seed","3.examples\u002F5.custom-seed",{"title":131,"path":132,"stem":133,"icon":134},"Commerce","\u002Fexamples\u002Fcommerce","3.examples\u002F6.commerce","i-lucide-shopping-cart",{"title":136,"path":137,"stem":138,"icon":139},"Project management","\u002Fexamples\u002Fproject-management","3.examples\u002F7.project-management","i-lucide-folder-kanban",{"title":141,"path":142,"stem":143,"icon":144},"Learning","\u002Fexamples\u002Flearning","3.examples\u002F8.learning","i-lucide-graduation-cap",{"title":146,"path":147,"stem":148,"icon":149},"Docs ingest","\u002Fexamples\u002Fdocs-ingest","3.examples\u002F9.docs-ingest","i-lucide-file-search",{"title":151,"icon":6,"path":152,"stem":153,"children":154,"page":6},"Reference","\u002Freference","4.reference",[155],{"title":156,"path":157,"stem":158,"icon":159},"API cheat sheet","\u002Freference\u002Fapi-cheat-sheet","4.reference\u002F1.api-cheat-sheet","i-lucide-list-checks",{"title":161,"icon":6,"path":162,"stem":163,"children":164,"page":6},"Agent Skills","\u002Fagents","5.agents",[165],{"title":166,"path":167,"stem":168,"icon":169},"Agent skills","\u002Fagents\u002Fagent-skills","5.agents\u002F1.agent-skills","i-lucide-bot",{"id":171,"title":156,"body":172,"description":1676,"extension":1677,"links":1678,"meta":1679,"navigation":1680,"path":157,"seo":1681,"stem":158,"__hash__":1682},"docs\u002F4.reference\u002F1.api-cheat-sheet.md",{"type":173,"value":174,"toc":1661},"minimark",[175,179,184,494,498,535,541,688,720,724,750,753,797,831,850,922,938,941,1068,1079,1082,1132,1138,1225,1239,1243,1326,1330,1333,1381,1390,1396,1423,1427],[176,177,178],"p",{},"Use this page when you know the scenario you want and need to find the API shape. For the reasoning and worked examples, follow the corresponding guide.",[180,181,183],"h2",{"id":182},"you-want-you-write","You want \u002F you write",[185,186,187,200],"table",{},[188,189,190],"thead",{},[191,192,193,197],"tr",{},[194,195,196],"th",{},"You want",[194,198,199],{},"Write",[201,202,203,219,231,241,251,272,282,292,305,315,338,353,366,379,417,430,448,473],"tbody",{},[191,204,205,209],{},[206,207,208],"td",{},"Start a test",[206,210,211,215,216],{},[212,213,214],"code",{},"TestBiome.Start(out var seed)"," \u002F ",[212,217,218],{},"TestBiome.Start(_db, out var seed, time)",[191,220,221,224],{},[206,222,223],{},"Reuse a baseline recipe per test",[206,225,226,227,230],{},"Start and Add common parents in the instance constructor; extend the instance builder in each test. See ",[228,229,100],"a",{"href":101},".",[191,232,233,236],{},[206,234,235],{},"Root blueprint",[206,237,238],{},[212,239,240],{},"Blueprint.For\u003CTSeed, T>(ctx => new() { … })",[191,242,243,246],{},[206,244,245],{},"Child blueprint",[206,247,248],{},[212,249,250],{},"Blueprint.ChildOf\u003CTSeed, TParent, T>((parent, ctx) => new() { … })",[191,252,253,256],{},[206,254,255],{},"Generated Add methods",[206,257,258,261,262,265,266,215,269],{},[212,259,260],{},"[BiomeGraft]"," catalog → ",[212,263,264],{},"{Catalog}Grafts","; ",[212,267,268],{},"[Graft(\"Name\", Plural = \"Names\")]",[212,270,271],{},"[NoGraft]",[191,273,274,277],{},[206,275,276],{},"Root built from an input",[206,278,279],{},[212,280,281],{},"Blueprint.FromInput\u003CTSeed, TInput, T>(() => new(), (input, ctx) => …)",[191,283,284,287],{},[206,285,286],{},"Child built from an input",[206,288,289],{},[212,290,291],{},"Blueprint.ChildFromInput\u003CTSeed, TParent, TInput, T>(() => new(), (parent, input, ctx) => …)",[191,293,294,297],{},[206,295,296],{},"Variant",[206,298,299,215,302],{},[212,300,301],{},"bp.With(trait)",[212,303,304],{},"bp.With((e, ctx) => …)",[191,306,307,310],{},[206,308,309],{},"Derived default (fill-only)",[206,311,312],{},[212,313,314],{},"bp.Derive(e => e.Prop, (e, ctx) => …)",[191,316,317,320],{},[206,318,319],{},"Sequence",[206,321,322,325,326,215,329,215,332,265,335],{},[212,323,324],{},"Sequence.Of(1, n => n + 1)"," + ",[212,327,328],{},".PerSession()",[212,330,331],{},".PerParent()",[212,333,334],{},".Per\u003CT>()",[212,336,337],{},"bp.Derive(e => e.Prop, seq)",[191,339,340,343],{},[206,341,342],{},"Never save",[206,344,345,348,349,352],{},[212,346,347],{},"bp.AsTransient()"," (blueprint) \u002F ",[212,350,351],{},".Transient()"," (most recent step)",[191,354,355,358],{},[206,356,357],{},"One \u002F many",[206,359,360,215,363],{},[212,361,362],{},"AddOne(bp, out var x[, c])",[212,364,365],{},"Add(bp, out var xs[, n | c1, c2…])",[191,367,368,371],{},[206,369,370],{},"Jump back",[206,372,373,215,376],{},[212,374,375],{},".Under(entity)",[212,377,378],{},".Under(array)",[191,380,381,384],{},[206,382,383],{},"Context",[206,385,386,389,390,389,393,389,396,389,399,389,402,389,405,389,408,389,411,389,414],{},[212,387,388],{},"ctx.Seed",", ",[212,391,392],{},"ctx.Now",[212,394,395],{},"ctx.Ago(t)",[212,397,398],{},"ctx.FromNow(t)",[212,400,401],{},"ctx.NewId(\"p\")",[212,403,404],{},"ctx.Index",[212,406,407],{},"ctx.Next(seq)",[212,409,410],{},"ctx.Ancestor\u003CT>()",[212,412,413],{},"ctx.All\u003CT>()",[212,415,416],{},"ctx.Last\u003CT>()",[191,418,419,422],{},[206,420,421],{},"Child context",[206,423,424,389,427],{},[212,425,426],{},"+ ctx.Parent",[212,428,429],{},"ctx.ParentIndex",[191,431,432,435],{},[206,433,434],{},"Inspect",[206,436,437,389,440,443,444,447],{},[212,438,439],{},"biome.All\u003CT>()",[212,441,442],{},"biome.Last\u003CT>()"," (keep ",[212,445,446],{},"var biome = TestBiome.Start(…)",")",[191,449,450,453],{},[206,451,452],{},"Options",[206,454,455,389,458,389,461,389,464,389,467,389,470],{},[212,456,457],{},"SeedEntities",[212,459,460],{},"Default\u003CTBase, TProp>",[212,462,463],{},"BeforeSave",[212,465,466],{},"AfterSave",[212,468,469],{},"TimePrecision",[212,471,472],{},"Ids",[191,474,475,478],{},[206,476,477],{},"Save",[206,479,480,483,484,389,487,490,491],{},[212,481,482],{},"await biome.BuildAsync(ct)"," once; stores: ",[212,485,486],{},"NullStore",[212,488,489],{},"EfCoreStore",", your ",[212,492,493],{},"IBiomeStore",[180,495,497],{"id":496},"entry-point","Entry point",[185,499,500,510],{},[188,501,502],{},[191,503,504,507],{},[194,505,506],{},"API",[194,508,509],{},"Notes",[201,511,512],{},[191,513,514,519],{},[206,515,516],{},[212,517,518],{},"Biome.Start\u003CTSeed>(seed, options, store = null, time = null)",[206,520,521,522,525,526,529,530,265,532,534],{},"Returns ",[212,523,524],{},"BiomeBuilder\u003CTSeed, TSeed>",". Freezes the options. ",[212,527,528],{},"null"," store = ",[212,531,486],{},[212,533,528],{}," time = frozen clock.",[180,536,538],{"id":537},"biomebuildertseed-tanchor",[212,539,540],{},"BiomeBuilder\u003CTSeed, TAnchor>",[185,542,543,553],{},[188,544,545],{},[191,546,547,550],{},[194,548,549],{},"Member",[194,551,552],{},"Meaning",[201,554,555,565,578,592,605,619,629,642,652,662,675],{},[191,556,557,562],{},[206,558,559],{},[212,560,561],{},"Add(bp, out T[] created)",[206,563,564],{},"One default entity.",[191,566,567,572],{},[206,568,569],{},[212,570,571],{},"Add(bp, out T[] created, int count)",[206,573,574,577],{},[212,575,576],{},"count"," default entities (per parent for children).",[191,579,580,585],{},[206,581,582],{},[212,583,584],{},"Add(bp, out T[] created, params Action\u003CT>[] customize)",[206,586,587,588,591],{},"One entity per customizer. Comma = new entity, ",[212,589,590],{},"+"," = stacked traits.",[191,593,594,599],{},[206,595,596],{},[212,597,598],{},"Add(bp, out T[] created, params Action\u003CT, BiomeContext\u003CTSeed>>[] customize)",[206,600,601,602,230],{},"Context-aware form. Children receive ",[212,603,604],{},"ChildContext\u003CTSeed, TParent>",[191,606,607,612],{},[206,608,609],{},[212,610,611],{},"AddOne(bp, out T created, Action\u003CT>? customize = null)",[206,613,614,615,618],{},"Exactly one. A child ",[212,616,617],{},"AddOne"," needs exactly one parent.",[191,620,621,626],{},[206,622,623],{},[212,624,625],{},"AddOne(bp, out T created, Action\u003CT, ctx> customize)",[206,627,628],{},"Exactly one, context-aware.",[191,630,631,639],{},[206,632,633,215,636],{},[212,634,635],{},"Under(parent)",[212,637,638],{},"Under(parents)",[206,640,641],{},"Re-anchor to an earlier output or seed row. Adds nothing.",[191,643,644,649],{},[206,645,646],{},[212,647,648],{},"Transient()",[206,650,651],{},"Exclude the most recent Add step from the save.",[191,653,654,659],{},[206,655,656],{},[212,657,658],{},"BuildAsync(ct = default)",[206,660,661],{},"Save once. A second call throws.",[191,663,664,672],{},[206,665,666,389,669],{},[212,667,668],{},"All\u003CT>()",[212,670,671],{},"Last\u003CT>()",[206,673,674],{},"Inspect entities created so far (include transients and aggregate wrappers, exclude seed rows).",[191,676,677,685],{},[206,678,679,389,682],{},[212,680,681],{},"Session",[212,683,684],{},"Anchor",[206,686,687],{},"The shared session and the current anchor.",[176,689,690,691,389,694,389,697,700,701,704,705,708,709,712,713,716,717,230],{},"All Add overloads exist for ",[212,692,693],{},"Blueprint",[212,695,696],{},"ChildBlueprint",[212,698,699],{},"InputBlueprint"," and ",[212,702,703],{},"ChildInputBlueprint",". For the input forms, customizers act on ",[212,706,707],{},"TInput",", while ",[212,710,711],{},"out"," and the new anchor hold the output ",[212,714,715],{},"T",". Every Add returns ",[212,718,719],{},"BiomeBuilder\u003CTSeed, T[]>",[180,721,723],{"id":722},"generated-grafts","Generated grafts",[176,725,726,727,729,730,732,733,265,736,739,740,700,743,745,746,749],{},"Mark a supported catalog with ",[212,728,260],{},". The generator emits a sibling ",[212,731,264],{}," static class in the same namespace, with the catalog's accessibility. The catalog must be a top-level, non-generic, non-file-local ",[212,734,735],{},"static class",[212,737,738],{},"partial"," is not required. ",[212,741,742],{},"[Graft]",[212,744,271],{}," apply to fields or properties. Eligible members are public, internal, or protected-internal non-const ",[212,747,748],{},"static readonly"," fields and static getter-only properties with no setter, whose type is one of the four blueprint types. Traits, sequences, private members, mutable fields, and unrelated types are skipped. Generated method accessibility follows the member.",[176,751,752],{},"Each eligible member with valid names gets three methods:",[185,754,755,765],{},[188,756,757],{},[191,758,759,762],{},[194,760,761],{},"Generated method",[194,763,764],{},"Behavior",[201,766,767,777,787],{},[191,768,769,774],{},[206,770,771],{},[212,772,773],{},"AddName(out T value, Action\u003CT>? customize = null)",[206,775,776],{},"One output; the optional callback customizes it.",[191,778,779,784],{},[206,780,781],{},[212,782,783],{},"AddNames(out T[] values, int count)",[206,785,786],{},"The requested number of default outputs.",[191,788,789,794],{},[206,790,791],{},[212,792,793],{},"AddNames(out T[] values, params Action\u003CT>[] customize)",[206,795,796],{},"One output per callback; with no callbacks, one default output.",[176,798,799,800,700,802,389,804,807,808,265,811,813,814,816,817,820,821,824,825,827,828,830],{},"For ",[212,801,699],{},[212,803,703],{},[212,805,806],{},"Action\u003CT>"," above is ",[212,809,810],{},"Action\u003CTInput>",[212,812,711],{}," and the returned builder still use output type ",[212,815,715],{},". Root and root-input methods are generic in ",[212,818,819],{},"TAnchor"," and work after any anchor with the same seed; their count or customizer list applies once at the current anchor. Child and child-input methods accept only ",[212,822,823],{},"BiomeBuilder\u003CTSeed, TParent[]>"," and fan out for each parent. A child count or customizer applies to each parent. All generated calls take ",[212,826,711],{},", return ",[212,829,719],{},", and re-anchor on the output array. Singular child calls require exactly one parent at runtime; a plural call with no customizers creates one default per parent (or one for a root).",[176,832,833,834,836,837,839,840,843,844,215,847,849],{},"By default the catalog member name supplies the singular suffix and a simple pluralization rule supplies the plural suffix. ",[212,835,268],{}," overrides either suffix, and ",[212,838,271],{}," excludes a field or property. The ",[212,841,842],{},"Graft"," values must be valid C# identifiers. Grafts do not generate context-aware callbacks: use core ",[212,845,846],{},"Add",[212,848,617],{}," with the blueprint for a one-off callback that needs context.",[185,851,852,864],{},[188,853,854],{},[191,855,856,859,862],{},[194,857,858],{},"Diagnostic",[194,860,861],{},"Severity",[194,863,552],{},[201,865,866,882,897,910],{},[191,867,868,873,876],{},[206,869,870],{},[212,871,872],{},"BIOME001",[206,874,875],{},"Warning",[206,877,878,879,230],{},"Catalog members produce overlapping graft signatures on the same builder; rename one with ",[212,880,881],{},"[Graft(\"Name\")]",[191,883,884,889,891],{},[206,885,886],{},[212,887,888],{},"BIOME002",[206,890,875],{},[206,892,893,894,230],{},"The singular and plural suffixes match; set a distinct ",[212,895,896],{},"Plural",[191,898,899,904,907],{},[206,900,901],{},[212,902,903],{},"BIOME003",[206,905,906],{},"Error",[206,908,909],{},"The annotated catalog is not a supported top-level static class.",[191,911,912,917,919],{},[206,913,914],{},[212,915,916],{},"BIOME004",[206,918,906],{},[206,920,921],{},"A singular or plural suffix is not a valid C# identifier.",[923,924,925],"note",{},[176,926,927,928,931,932,935,936,230],{},"Check the API of the library referenced by your project before using ordinary entity outputs from ",[212,929,930],{},"FromInput"," or ",[212,933,934],{},"ChildFromInput","; this page does not identify a public release for those APIs. See ",[228,937,76],{"href":77},[180,939,36],{"id":940},"blueprints",[185,942,943,953],{},[188,944,945],{},[191,946,947,950],{},[194,948,949],{},"Type",[194,951,952],{},"Members",[201,954,955,974,998,1011,1037,1056],{},[191,956,957,962],{},[206,958,959,961],{},[212,960,693],{}," (static)",[206,963,964,389,967,389,970,389,972],{},[212,965,966],{},"For",[212,968,969],{},"ChildOf",[212,971,930],{},[212,973,934],{},[191,975,976,981],{},[206,977,978],{},[212,979,980],{},"Blueprint\u003CTSeed, T>",[206,982,983,389,986,389,989,389,992,389,995],{},[212,984,985],{},"With(Action\u003CT>)",[212,987,988],{},"With(Action\u003CT, BiomeContext\u003CTSeed>>)",[212,990,991],{},"Derive(prop, value)",[212,993,994],{},"Derive(prop, sequence)",[212,996,997],{},"AsTransient()",[191,999,1000,1005],{},[206,1001,1002],{},[212,1003,1004],{},"ChildBlueprint\u003CTSeed, TParent, T>",[206,1006,1007,1008,230],{},"Same, with ",[212,1009,1010],{},"Action\u003CT, ChildContext\u003CTSeed, TParent>>",[191,1012,1013,1018],{},[206,1014,1015],{},[212,1016,1017],{},"InputBlueprint\u003CTSeed, TInput, T>",[206,1019,1020,1021,1023,1024,215,1026,1029,1030,1032,1033,1036],{},"Same, over ",[212,1022,707],{}," (",[212,1025,810],{},[212,1027,1028],{},"Action\u003CTInput, BiomeContext\u003CTSeed>>","). ",[212,1031,715],{}," is any reference type; an ",[212,1034,1035],{},"IBiomeAggregate"," output is saved as its parts.",[191,1038,1039,1044],{},[206,1040,1041],{},[212,1042,1043],{},"ChildInputBlueprint\u003CTSeed, TParent, TInput, T>",[206,1045,1020,1046,1048,1049,1052,1053,230],{},[212,1047,707],{},", with ",[212,1050,1051],{},"Action\u003CTInput, ChildContext\u003CTSeed, TParent>>",". The factory receives ",[212,1054,1055],{},"(parent, input, ctx)",[191,1057,1058,1062],{},[206,1059,1060],{},[212,1061,1035],{},[206,1063,1064,1067],{},[212,1065,1066],{},"IEnumerable\u003Cobject> GetEntities()",": the parts to save, in order. May return nested aggregates.",[176,1069,1070,1071,1074,1075,1078],{},"Inputs are construction data. They are not recorded, saved, or usable with ",[212,1072,1073],{},"Under",", and ",[212,1076,1077],{},"All\u003CTInput>()"," is empty.",[180,1080,56],{"id":1081},"sequences",[185,1083,1084,1092],{},[188,1085,1086],{},[191,1087,1088,1090],{},[194,1089,506],{},[194,1091,552],{},[201,1093,1094,1104,1113,1122],{},[191,1095,1096,1101],{},[206,1097,1098],{},[212,1099,1100],{},"Sequence.Of(start, next)",[206,1102,1103],{},"Session-scoped sequence.",[191,1105,1106,1110],{},[206,1107,1108],{},[212,1109,328],{},[206,1111,1112],{},"One counter per test (default).",[191,1114,1115,1119],{},[206,1116,1117],{},[212,1118,331],{},[206,1120,1121],{},"One counter per immediate parent (by reference).",[191,1123,1124,1129],{},[206,1125,1126],{},[212,1127,1128],{},".Per\u003CTAncestor>()",[206,1130,1131],{},"One counter per nearest ancestor of that type (by reference).",[180,1133,1135],{"id":1134},"biomeoptionstseed",[212,1136,1137],{},"BiomeOptions\u003CTSeed>",[185,1139,1140,1148],{},[188,1141,1142],{},[191,1143,1144,1146],{},[194,1145,549],{},[194,1147,552],{},[201,1149,1150,1164,1174,1184,1194,1208],{},[191,1151,1152,1157],{},[206,1153,1154],{},[212,1155,1156],{},"SeedEntities(seed => IEnumerable\u003Cobject>)",[206,1158,1159,1160,1163],{},"Rows to save before created entities. They count as owned, so ",[212,1161,1162],{},".Under(seedRow)"," works.",[191,1165,1166,1171],{},[206,1167,1168],{},[212,1169,1170],{},"Default\u003CTBase, TProp>(e => e.Prop, (e, ctx) => value)",[206,1172,1173],{},"Fill-only default on entities matching a class or interface.",[191,1175,1176,1181],{},[206,1177,1178],{},[212,1179,1180],{},"BeforeSave((save, ct) => ValueTask)",[206,1182,1183],{},"See and change the final row list.",[191,1185,1186,1191],{},[206,1187,1188],{},[212,1189,1190],{},"AfterSave((save, ct) => ValueTask)",[206,1192,1193],{},"Runs after a successful save.",[191,1195,1196,1201],{},[206,1197,1198],{},[212,1199,1200],{},"TimePrecision(TimeSpan)",[206,1202,1203,1204,1207],{},"Default 1 µs. ",[212,1205,1206],{},"TimeSpan.Zero"," disables rounding.",[191,1209,1210,1215],{},[206,1211,1212],{},[212,1213,1214],{},"Ids(prefix => string)",[206,1216,1217,1218,1221,1222,230],{},"Override ",[212,1219,1220],{},"ctx.NewId",". Default ",[212,1223,1224],{},"prefix_\u003Cuuidv7>",[176,1226,1227,1228,1235,1236,230],{},"Options are fluent, safe to share across tests, and ",[1229,1230,1231,1232],"strong",{},"frozen on first ",[212,1233,1234],{},"Biome.Start",": later changes throw ",[212,1237,1238],{},"InvalidOperationException",[180,1240,1242],{"id":1241},"stores","Stores",[185,1244,1245,1256],{},[188,1246,1247],{},[191,1248,1249,1251,1254],{},[194,1250,949],{},[194,1252,1253],{},"Package",[194,1255,552],{},[201,1257,1258,1274,1288,1309],{},[191,1259,1260,1264,1269],{},[206,1261,1262],{},[212,1263,493],{},[206,1265,1266],{},[212,1267,1268],{},"Zeeq.Biome",[206,1270,1271],{},[212,1272,1273],{},"ValueTask SaveAsync(IReadOnlyList\u003Cobject> entities, CancellationToken)",[191,1275,1276,1281,1285],{},[206,1277,1278],{},[212,1279,1280],{},"NullStore.Instance",[206,1282,1283],{},[212,1284,1268],{},[206,1286,1287],{},"Saves nothing. The default.",[191,1289,1290,1295,1300],{},[206,1291,1292],{},[212,1293,1294],{},"EfCoreStore(DbContext)",[206,1296,1297],{},[212,1298,1299],{},"Zeeq.Biome.EntityFrameworkCore",[206,1301,1302,1305,1306,230],{},[212,1303,1304],{},"AddRange"," in order, one ",[212,1307,1308],{},"SaveChangesAsync",[191,1310,1311,1316,1320],{},[206,1312,1313],{},[212,1314,1315],{},"db.AsBiomeStore()",[206,1317,1318],{},[212,1319,1299],{},[206,1321,1322,1323,230],{},"Extension that returns ",[212,1324,1325],{},"new EfCoreStore(db)",[180,1327,1329],{"id":1328},"pipeline-order","Pipeline order",[176,1331,1332],{},"For each entity in an Add step:",[1334,1335,1336,1343,1352,1357,1366,1375],"ol",{},[1337,1338,1339,1342],"li",{},[1229,1340,1341],{},"Factory"," creates it (IDs here).",[1337,1344,1345,1023,1348,1351],{},[1229,1346,1347],{},"Traits",[212,1349,1350],{},".With","), in declaration order.",[1337,1353,1354],{},[1229,1355,1356],{},"Call-site customizers.",[1337,1358,1359,1365],{},[1229,1360,1361,1364],{},[212,1362,1363],{},"Derive","s",", fill-only, in declaration order. Sequences first reserve every explicit value in the step.",[1337,1367,1368,1023,1371,1374],{},[1229,1369,1370],{},"Global defaults",[212,1372,1373],{},"options.Default","), fill-only.",[1337,1376,1377,1378,230],{},"Entity, parent link and step are ",[1229,1379,1380],{},"recorded",[176,1382,1383,1384,1386,1387,1389],{},"For an input blueprint, the order is: every input is created and gets its traits and call-site customizers; ",[212,1385,994],{}," reserves explicit values across the whole step; then, for each input in order, its ",[212,1388,1363],{},"s run and the factory builds the output; finally steps 5 and 6 apply to each output.",[176,1391,1392,1395],{},[212,1393,1394],{},"BuildAsync"," then:",[1334,1397,1398,1401,1404,1407,1412,1418],{},[1337,1399,1400],{},"Takes the seed rows, followed by created entities in creation order.",[1337,1402,1403],{},"Expands aggregates.",[1337,1405,1406],{},"Drops transients and removes duplicate references.",[1337,1408,1409,1410,230],{},"Runs ",[212,1411,463],{},[1337,1413,1414,1415,230],{},"Calls ",[212,1416,1417],{},"IBiomeStore.SaveAsync",[1337,1419,1409,1420,1422],{},[212,1421,466],{},", if the save succeeded.",[180,1424,1426],{"id":1425},"common-errors","Common errors",[185,1428,1429,1442],{},[188,1430,1431],{},[191,1432,1433,1436,1439],{},[194,1434,1435],{},"Symptom",[194,1437,1438],{},"Cause",[194,1440,1441],{},"Fix",[201,1443,1444,1461,1478,1507,1527,1543,1559,1575,1591,1610,1623,1638],{},[191,1445,1446,1451,1454],{},[206,1447,1448],{},[212,1449,1450],{},"CS1929 … requires a receiver of type 'BiomeBuilder\u003C…, Parent[]>'",[206,1452,1453],{},"The anchor isn't the child's parent type.",[206,1455,1456,1457,1460],{},"Add the parent first, or ",[212,1458,1459],{},".Under(parent)",". Use a scenario helper.",[191,1462,1463,1468,1473],{},[206,1464,1465],{},[212,1466,1467],{},"CS1503: cannot convert from 'lambda expression' to 'out X'",[206,1469,1470,1471,230],{},"Missing ",[212,1472,711],{},[206,1474,1475],{},[212,1476,1477],{},"AddX(out _, x => …)",[191,1479,1480,1485,1492],{},[206,1481,1482],{},[212,1483,1484],{},"CS1593: Delegate 'Action\u003CX>' does not take 2 arguments",[206,1486,1487,1488,1491],{},"Mixed lambda arities, or a ",[212,1489,1490],{},"(x, ctx)"," lambda passed to a graft that has no context overload.",[206,1493,1494,1495,1497,1498,215,1500,1502,1503,230],{},"Write all in ",[212,1496,1490],{}," form and use the core ",[212,1499,846],{},[212,1501,617],{},", or add a ",[228,1504,1506],{"href":1505},"\u002Fguides\u002Fscenario-helpers-and-sugar#context-overloads-when-a-test-needs-them","context overload",[191,1508,1509,1514,1520],{},[206,1510,1511],{},[212,1512,1513],{},"CS8852: Init-only property …",[206,1515,1516,1517,230],{},"The property is ",[212,1518,1519],{},"init",[206,1521,1522,1523,1526],{},"Customize an ",[228,1524,1525],{"href":77},"input blueprint"," instead, or make the property settable.",[191,1528,1529,1534,1537],{},[206,1530,1531],{},[212,1532,1533],{},"A singular child AddOne requires exactly one parent",[206,1535,1536],{},"The anchor holds several (or zero) parents.",[206,1538,1539,1540,230],{},"Use the plural Add, or ",[212,1541,1542],{},".Under(repos[0])",[191,1544,1545,1550,1556],{},[206,1546,1547],{},[212,1548,1549],{},"No ancestor of type X exists…",[206,1551,1552,1553,230],{},"The chain skipped ",[212,1554,1555],{},"X",[206,1557,1558],{},"Build the full chain or use a scenario helper.",[191,1560,1561,1566,1569],{},[206,1562,1563],{},[212,1564,1565],{},"BuildAsync may only be called once…",[206,1567,1568],{},"Two builds, or an Add after the build.",[206,1570,1571,1572,1574],{},"One ",[212,1573,1394],{}," per session.",[191,1576,1577,1582,1585],{},[206,1578,1579],{},[212,1580,1581],{},"Biome options are frozen…",[206,1583,1584],{},"A test changed shared options.",[206,1586,1587,1588,230],{},"Configure options once in ",[212,1589,1590],{},"TestBiome",[191,1592,1593,1598,1604],{},[206,1594,1595],{},[212,1596,1597],{},"Parent at index N … is not owned by this biome session",[206,1599,1600,1603],{},[212,1601,1602],{},".Under"," got an object Biome didn't build or select.",[206,1605,1606,1607,1609],{},"Use an Add output or a ",[212,1608,457],{}," row.",[191,1611,1612,1617,1620],{},[206,1613,1614],{},[212,1615,1616],{},"This biome session is faulted…",[206,1618,1619],{},"An earlier Add threw.",[206,1621,1622],{},"Fix the first error.",[191,1624,1625,1628,1635],{},[206,1626,1627],{},"Duplicate key on a number",[206,1629,1630,1631,1634],{},"An explicit value was set in a ",[1229,1632,1633],{},"later"," step.",[206,1636,1637],{},"Set it in the same step as the defaults, or earlier.",[191,1639,1640,1643,1649],{},[206,1641,1642],{},"Timestamp differs by ticks after reading back",[206,1644,1645,1648],{},[212,1646,1647],{},"DateTimeOffset.UtcNow"," was used.",[206,1650,1651,1652,215,1654,1657,1658,230],{},"Use ",[212,1653,392],{},[212,1655,1656],{},"ctx.Ago",", or a shared ",[212,1659,1660],{},"FakeTimeProvider",{"title":1662,"searchDepth":1663,"depth":1664,"links":1665},"",1,2,[1666,1667,1668,1669,1670,1671,1672,1673,1674,1675],{"id":182,"depth":1664,"text":183},{"id":496,"depth":1664,"text":497},{"id":537,"depth":1664,"text":540},{"id":722,"depth":1664,"text":723},{"id":940,"depth":1664,"text":36},{"id":1081,"depth":1664,"text":56},{"id":1134,"depth":1664,"text":1137},{"id":1241,"depth":1664,"text":1242},{"id":1328,"depth":1664,"text":1329},{"id":1425,"depth":1664,"text":1426},"Every public member of Zeeq.Biome at a glance, with the pipeline order and common errors.","md",null,{},{"icon":159},{"title":156,"description":1676},"vJ5XAJVSpYmhTngIY-EiGudmhOqwtUDze09TFhPurZg",[1684,1686],{"title":146,"path":147,"stem":148,"description":1685,"icon":149,"children":-1},"Library, document, section and chunk, plus an ingest-run aggregate and a transient preview.",{"title":166,"path":167,"stem":168,"description":1687,"icon":169,"children":-1},"Two agent skills that teach coding agents to write Biome test chains and author blueprints.",1791831052688]