[{"data":1,"prerenderedAt":6216},["ShallowReactive",2],{"navigation":3,"\u002Fgetting-started\u002Fquick-start":170,"\u002Fgetting-started\u002Fquick-start-surround":6211},[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":21,"body":172,"description":6204,"extension":6205,"links":6206,"meta":6207,"navigation":6208,"path":22,"seo":6209,"stem":23,"__hash__":6210},"docs\u002F1.getting-started\u002F3.quick-start.md",{"type":173,"value":174,"toc":6194},"minimark",[175,210,1141,1148,1157,1171,1436,1445,1460,1464,1475,1696,1713,1717,1720,2125,2140,2235,2251,2255,2258,2429,2448,2657,2661,2675,3285,3291,3773,3785,3795,3968,3975,4186,4332,4336,4343,4664,4684,4844,4865,4891,4987,5004,5118,5121,5917,5924,6148,6154,6163,6167,6190],[176,177,178,179,183,184,188,189,192,193,196,197,200,201,204,205,209],"p",{},"We'll continue with the multi-tenant school system from the ",[180,181,182],"a",{"href":12},"introduction",", so each choice has a concrete purpose. A ",[185,186,187],"code",{},"District"," has ",[185,190,191],{},"School","s, a school has classes (",[185,194,195],{},"SchoolClass",") and ",[185,198,199],{},"Teacher","s, and a class has ",[185,202,203],{},"Student","s. The entities are plain classes, trimmed here to the properties that matter. Entities and parents must be ",[206,207,208],"strong",{},"reference types",".",[211,212,218],"pre",{"className":213,"code":214,"filename":215,"language":216,"meta":217,"style":217},"language-csharp shiki shiki-themes material-theme-lighter github-light github-dark","public sealed class District\n{\n    public string Id { get; set; } = \"\";\n    public string Name { get; set; } = \"\";\n    public string TimeZoneId { get; set; } = \"\";\n    public bool IsArchived { get; set; }\n    public DateTimeOffset CreatedAtUtc { get; set; }\n    public DateTimeOffset UpdatedAtUtc { get; set; }\n}\n\npublic sealed class School\n{\n    public string Id { get; set; } = \"\";\n    public string DistrictId { get; set; } = \"\";\n    public string Name { get; set; } = \"\";\n    public string Code { get; set; } = \"\";\n    public DateTimeOffset CreatedAtUtc { get; set; }\n    public DateTimeOffset UpdatedAtUtc { get; set; }\n}\n\npublic sealed class Teacher\n{\n    public string Id { get; set; } = \"\";\n    public string DistrictId { get; set; } = \"\";\n    public string SchoolId { get; set; } = \"\";\n    public string FullName { get; set; } = \"\";\n    public DateTimeOffset CreatedAtUtc { get; set; }\n}\n\npublic sealed class SchoolClass\n{\n    public string Id { get; set; } = \"\";\n    public string DistrictId { get; set; } = \"\";\n    public string SchoolId { get; set; } = \"\";\n    public string? TeacherId { get; set; } \u002F\u002F null: no teacher assigned yet\n    public string Name { get; set; } = \"\";\n    public int Capacity { get; set; }\n    public DateTimeOffset CreatedAtUtc { get; set; }\n}\n\npublic sealed class Student\n{\n    public string Id { get; set; } = \"\";\n    public string DistrictId { get; set; } = \"\";\n    public string ClassId { get; set; } = \"\";\n    public int Seat { get; set; }\n    public string? FullName { get; set; }\n    public DateTimeOffset EnrolledAtUtc { get; set; }\n}\n","Domain.cs","csharp","",[185,219,220,240,247,287,315,343,367,390,412,418,425,437,442,469,497,524,552,573,594,599,604,616,621,648,675,703,731,752,757,762,774,779,806,833,860,889,916,939,960,965,970,982,987,1014,1041,1069,1091,1114,1136],{"__ignoreMap":217},[221,222,225,229,232,236],"span",{"class":223,"line":224},"line",1,[221,226,228],{"class":227},"sbsja","public",[221,230,231],{"class":227}," sealed",[221,233,235],{"class":234},"sG8yY"," class",[221,237,239],{"class":238},"sbgvK"," District\n",[221,241,243],{"class":223,"line":242},2,[221,244,246],{"class":245},"sP7_E","{\n",[221,248,250,253,257,260,263,266,269,272,274,277,280,284],{"class":223,"line":249},3,[221,251,252],{"class":227},"    public",[221,254,256],{"class":255},"smGrS"," string",[221,258,259],{"class":238}," Id",[221,261,262],{"class":245}," {",[221,264,265],{"class":234}," get",[221,267,268],{"class":245},";",[221,270,271],{"class":234}," set",[221,273,268],{"class":245},[221,275,276],{"class":245}," }",[221,278,279],{"class":255}," =",[221,281,283],{"class":282},"sjJ54"," \"\"",[221,285,286],{"class":245},";\n",[221,288,290,292,294,297,299,301,303,305,307,309,311,313],{"class":223,"line":289},4,[221,291,252],{"class":227},[221,293,256],{"class":255},[221,295,296],{"class":238}," Name",[221,298,262],{"class":245},[221,300,265],{"class":234},[221,302,268],{"class":245},[221,304,271],{"class":234},[221,306,268],{"class":245},[221,308,276],{"class":245},[221,310,279],{"class":255},[221,312,283],{"class":282},[221,314,286],{"class":245},[221,316,318,320,322,325,327,329,331,333,335,337,339,341],{"class":223,"line":317},5,[221,319,252],{"class":227},[221,321,256],{"class":255},[221,323,324],{"class":238}," TimeZoneId",[221,326,262],{"class":245},[221,328,265],{"class":234},[221,330,268],{"class":245},[221,332,271],{"class":234},[221,334,268],{"class":245},[221,336,276],{"class":245},[221,338,279],{"class":255},[221,340,283],{"class":282},[221,342,286],{"class":245},[221,344,346,348,351,354,356,358,360,362,364],{"class":223,"line":345},6,[221,347,252],{"class":227},[221,349,350],{"class":255}," bool",[221,352,353],{"class":238}," IsArchived",[221,355,262],{"class":245},[221,357,265],{"class":234},[221,359,268],{"class":245},[221,361,271],{"class":234},[221,363,268],{"class":245},[221,365,366],{"class":245}," }\n",[221,368,370,372,375,378,380,382,384,386,388],{"class":223,"line":369},7,[221,371,252],{"class":227},[221,373,374],{"class":238}," DateTimeOffset",[221,376,377],{"class":238}," CreatedAtUtc",[221,379,262],{"class":245},[221,381,265],{"class":234},[221,383,268],{"class":245},[221,385,271],{"class":234},[221,387,268],{"class":245},[221,389,366],{"class":245},[221,391,393,395,397,400,402,404,406,408,410],{"class":223,"line":392},8,[221,394,252],{"class":227},[221,396,374],{"class":238},[221,398,399],{"class":238}," UpdatedAtUtc",[221,401,262],{"class":245},[221,403,265],{"class":234},[221,405,268],{"class":245},[221,407,271],{"class":234},[221,409,268],{"class":245},[221,411,366],{"class":245},[221,413,415],{"class":223,"line":414},9,[221,416,417],{"class":245},"}\n",[221,419,421],{"class":223,"line":420},10,[221,422,424],{"emptyLinePlaceholder":423},true,"\n",[221,426,428,430,432,434],{"class":223,"line":427},11,[221,429,228],{"class":227},[221,431,231],{"class":227},[221,433,235],{"class":234},[221,435,436],{"class":238}," School\n",[221,438,440],{"class":223,"line":439},12,[221,441,246],{"class":245},[221,443,445,447,449,451,453,455,457,459,461,463,465,467],{"class":223,"line":444},13,[221,446,252],{"class":227},[221,448,256],{"class":255},[221,450,259],{"class":238},[221,452,262],{"class":245},[221,454,265],{"class":234},[221,456,268],{"class":245},[221,458,271],{"class":234},[221,460,268],{"class":245},[221,462,276],{"class":245},[221,464,279],{"class":255},[221,466,283],{"class":282},[221,468,286],{"class":245},[221,470,472,474,476,479,481,483,485,487,489,491,493,495],{"class":223,"line":471},14,[221,473,252],{"class":227},[221,475,256],{"class":255},[221,477,478],{"class":238}," DistrictId",[221,480,262],{"class":245},[221,482,265],{"class":234},[221,484,268],{"class":245},[221,486,271],{"class":234},[221,488,268],{"class":245},[221,490,276],{"class":245},[221,492,279],{"class":255},[221,494,283],{"class":282},[221,496,286],{"class":245},[221,498,500,502,504,506,508,510,512,514,516,518,520,522],{"class":223,"line":499},15,[221,501,252],{"class":227},[221,503,256],{"class":255},[221,505,296],{"class":238},[221,507,262],{"class":245},[221,509,265],{"class":234},[221,511,268],{"class":245},[221,513,271],{"class":234},[221,515,268],{"class":245},[221,517,276],{"class":245},[221,519,279],{"class":255},[221,521,283],{"class":282},[221,523,286],{"class":245},[221,525,527,529,531,534,536,538,540,542,544,546,548,550],{"class":223,"line":526},16,[221,528,252],{"class":227},[221,530,256],{"class":255},[221,532,533],{"class":238}," Code",[221,535,262],{"class":245},[221,537,265],{"class":234},[221,539,268],{"class":245},[221,541,271],{"class":234},[221,543,268],{"class":245},[221,545,276],{"class":245},[221,547,279],{"class":255},[221,549,283],{"class":282},[221,551,286],{"class":245},[221,553,555,557,559,561,563,565,567,569,571],{"class":223,"line":554},17,[221,556,252],{"class":227},[221,558,374],{"class":238},[221,560,377],{"class":238},[221,562,262],{"class":245},[221,564,265],{"class":234},[221,566,268],{"class":245},[221,568,271],{"class":234},[221,570,268],{"class":245},[221,572,366],{"class":245},[221,574,576,578,580,582,584,586,588,590,592],{"class":223,"line":575},18,[221,577,252],{"class":227},[221,579,374],{"class":238},[221,581,399],{"class":238},[221,583,262],{"class":245},[221,585,265],{"class":234},[221,587,268],{"class":245},[221,589,271],{"class":234},[221,591,268],{"class":245},[221,593,366],{"class":245},[221,595,597],{"class":223,"line":596},19,[221,598,417],{"class":245},[221,600,602],{"class":223,"line":601},20,[221,603,424],{"emptyLinePlaceholder":423},[221,605,607,609,611,613],{"class":223,"line":606},21,[221,608,228],{"class":227},[221,610,231],{"class":227},[221,612,235],{"class":234},[221,614,615],{"class":238}," Teacher\n",[221,617,619],{"class":223,"line":618},22,[221,620,246],{"class":245},[221,622,624,626,628,630,632,634,636,638,640,642,644,646],{"class":223,"line":623},23,[221,625,252],{"class":227},[221,627,256],{"class":255},[221,629,259],{"class":238},[221,631,262],{"class":245},[221,633,265],{"class":234},[221,635,268],{"class":245},[221,637,271],{"class":234},[221,639,268],{"class":245},[221,641,276],{"class":245},[221,643,279],{"class":255},[221,645,283],{"class":282},[221,647,286],{"class":245},[221,649,651,653,655,657,659,661,663,665,667,669,671,673],{"class":223,"line":650},24,[221,652,252],{"class":227},[221,654,256],{"class":255},[221,656,478],{"class":238},[221,658,262],{"class":245},[221,660,265],{"class":234},[221,662,268],{"class":245},[221,664,271],{"class":234},[221,666,268],{"class":245},[221,668,276],{"class":245},[221,670,279],{"class":255},[221,672,283],{"class":282},[221,674,286],{"class":245},[221,676,678,680,682,685,687,689,691,693,695,697,699,701],{"class":223,"line":677},25,[221,679,252],{"class":227},[221,681,256],{"class":255},[221,683,684],{"class":238}," SchoolId",[221,686,262],{"class":245},[221,688,265],{"class":234},[221,690,268],{"class":245},[221,692,271],{"class":234},[221,694,268],{"class":245},[221,696,276],{"class":245},[221,698,279],{"class":255},[221,700,283],{"class":282},[221,702,286],{"class":245},[221,704,706,708,710,713,715,717,719,721,723,725,727,729],{"class":223,"line":705},26,[221,707,252],{"class":227},[221,709,256],{"class":255},[221,711,712],{"class":238}," FullName",[221,714,262],{"class":245},[221,716,265],{"class":234},[221,718,268],{"class":245},[221,720,271],{"class":234},[221,722,268],{"class":245},[221,724,276],{"class":245},[221,726,279],{"class":255},[221,728,283],{"class":282},[221,730,286],{"class":245},[221,732,734,736,738,740,742,744,746,748,750],{"class":223,"line":733},27,[221,735,252],{"class":227},[221,737,374],{"class":238},[221,739,377],{"class":238},[221,741,262],{"class":245},[221,743,265],{"class":234},[221,745,268],{"class":245},[221,747,271],{"class":234},[221,749,268],{"class":245},[221,751,366],{"class":245},[221,753,755],{"class":223,"line":754},28,[221,756,417],{"class":245},[221,758,760],{"class":223,"line":759},29,[221,761,424],{"emptyLinePlaceholder":423},[221,763,765,767,769,771],{"class":223,"line":764},30,[221,766,228],{"class":227},[221,768,231],{"class":227},[221,770,235],{"class":234},[221,772,773],{"class":238}," SchoolClass\n",[221,775,777],{"class":223,"line":776},31,[221,778,246],{"class":245},[221,780,782,784,786,788,790,792,794,796,798,800,802,804],{"class":223,"line":781},32,[221,783,252],{"class":227},[221,785,256],{"class":255},[221,787,259],{"class":238},[221,789,262],{"class":245},[221,791,265],{"class":234},[221,793,268],{"class":245},[221,795,271],{"class":234},[221,797,268],{"class":245},[221,799,276],{"class":245},[221,801,279],{"class":255},[221,803,283],{"class":282},[221,805,286],{"class":245},[221,807,809,811,813,815,817,819,821,823,825,827,829,831],{"class":223,"line":808},33,[221,810,252],{"class":227},[221,812,256],{"class":255},[221,814,478],{"class":238},[221,816,262],{"class":245},[221,818,265],{"class":234},[221,820,268],{"class":245},[221,822,271],{"class":234},[221,824,268],{"class":245},[221,826,276],{"class":245},[221,828,279],{"class":255},[221,830,283],{"class":282},[221,832,286],{"class":245},[221,834,836,838,840,842,844,846,848,850,852,854,856,858],{"class":223,"line":835},34,[221,837,252],{"class":227},[221,839,256],{"class":255},[221,841,684],{"class":238},[221,843,262],{"class":245},[221,845,265],{"class":234},[221,847,268],{"class":245},[221,849,271],{"class":234},[221,851,268],{"class":245},[221,853,276],{"class":245},[221,855,279],{"class":255},[221,857,283],{"class":282},[221,859,286],{"class":245},[221,861,863,865,867,870,873,875,877,879,881,883,885],{"class":223,"line":862},35,[221,864,252],{"class":227},[221,866,256],{"class":255},[221,868,869],{"class":245},"?",[221,871,872],{"class":238}," TeacherId",[221,874,262],{"class":245},[221,876,265],{"class":234},[221,878,268],{"class":245},[221,880,271],{"class":234},[221,882,268],{"class":245},[221,884,276],{"class":245},[221,886,888],{"class":887},"sutJx"," \u002F\u002F null: no teacher assigned yet\n",[221,890,892,894,896,898,900,902,904,906,908,910,912,914],{"class":223,"line":891},36,[221,893,252],{"class":227},[221,895,256],{"class":255},[221,897,296],{"class":238},[221,899,262],{"class":245},[221,901,265],{"class":234},[221,903,268],{"class":245},[221,905,271],{"class":234},[221,907,268],{"class":245},[221,909,276],{"class":245},[221,911,279],{"class":255},[221,913,283],{"class":282},[221,915,286],{"class":245},[221,917,919,921,924,927,929,931,933,935,937],{"class":223,"line":918},37,[221,920,252],{"class":227},[221,922,923],{"class":255}," int",[221,925,926],{"class":238}," Capacity",[221,928,262],{"class":245},[221,930,265],{"class":234},[221,932,268],{"class":245},[221,934,271],{"class":234},[221,936,268],{"class":245},[221,938,366],{"class":245},[221,940,942,944,946,948,950,952,954,956,958],{"class":223,"line":941},38,[221,943,252],{"class":227},[221,945,374],{"class":238},[221,947,377],{"class":238},[221,949,262],{"class":245},[221,951,265],{"class":234},[221,953,268],{"class":245},[221,955,271],{"class":234},[221,957,268],{"class":245},[221,959,366],{"class":245},[221,961,963],{"class":223,"line":962},39,[221,964,417],{"class":245},[221,966,968],{"class":223,"line":967},40,[221,969,424],{"emptyLinePlaceholder":423},[221,971,973,975,977,979],{"class":223,"line":972},41,[221,974,228],{"class":227},[221,976,231],{"class":227},[221,978,235],{"class":234},[221,980,981],{"class":238}," Student\n",[221,983,985],{"class":223,"line":984},42,[221,986,246],{"class":245},[221,988,990,992,994,996,998,1000,1002,1004,1006,1008,1010,1012],{"class":223,"line":989},43,[221,991,252],{"class":227},[221,993,256],{"class":255},[221,995,259],{"class":238},[221,997,262],{"class":245},[221,999,265],{"class":234},[221,1001,268],{"class":245},[221,1003,271],{"class":234},[221,1005,268],{"class":245},[221,1007,276],{"class":245},[221,1009,279],{"class":255},[221,1011,283],{"class":282},[221,1013,286],{"class":245},[221,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033,1035,1037,1039],{"class":223,"line":1016},44,[221,1018,252],{"class":227},[221,1020,256],{"class":255},[221,1022,478],{"class":238},[221,1024,262],{"class":245},[221,1026,265],{"class":234},[221,1028,268],{"class":245},[221,1030,271],{"class":234},[221,1032,268],{"class":245},[221,1034,276],{"class":245},[221,1036,279],{"class":255},[221,1038,283],{"class":282},[221,1040,286],{"class":245},[221,1042,1044,1046,1048,1051,1053,1055,1057,1059,1061,1063,1065,1067],{"class":223,"line":1043},45,[221,1045,252],{"class":227},[221,1047,256],{"class":255},[221,1049,1050],{"class":238}," ClassId",[221,1052,262],{"class":245},[221,1054,265],{"class":234},[221,1056,268],{"class":245},[221,1058,271],{"class":234},[221,1060,268],{"class":245},[221,1062,276],{"class":245},[221,1064,279],{"class":255},[221,1066,283],{"class":282},[221,1068,286],{"class":245},[221,1070,1072,1074,1076,1079,1081,1083,1085,1087,1089],{"class":223,"line":1071},46,[221,1073,252],{"class":227},[221,1075,923],{"class":255},[221,1077,1078],{"class":238}," Seat",[221,1080,262],{"class":245},[221,1082,265],{"class":234},[221,1084,268],{"class":245},[221,1086,271],{"class":234},[221,1088,268],{"class":245},[221,1090,366],{"class":245},[221,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112],{"class":223,"line":1093},47,[221,1095,252],{"class":227},[221,1097,256],{"class":255},[221,1099,869],{"class":245},[221,1101,712],{"class":238},[221,1103,262],{"class":245},[221,1105,265],{"class":234},[221,1107,268],{"class":245},[221,1109,271],{"class":234},[221,1111,268],{"class":245},[221,1113,366],{"class":245},[221,1115,1117,1119,1121,1124,1126,1128,1130,1132,1134],{"class":223,"line":1116},48,[221,1118,252],{"class":227},[221,1120,374],{"class":238},[221,1122,1123],{"class":238}," EnrolledAtUtc",[221,1125,262],{"class":245},[221,1127,265],{"class":234},[221,1129,268],{"class":245},[221,1131,271],{"class":234},[221,1133,268],{"class":245},[221,1135,366],{"class":245},[221,1137,1139],{"class":223,"line":1138},49,[221,1140,417],{"class":245},[176,1142,1143,1144,1147],{},"Every row carries its ",[185,1145,1146],{},"DistrictId",", because the district is the tenant. That repeated wiring is exactly what the blueprints below will hold in one place.",[1149,1150,1152,1153,1156],"h2",{"id":1151},"_1-a-seed-and-a-testbiome-entry-point","1. A seed and a ",[185,1154,1155],{},"TestBiome"," entry point",[176,1158,1159,1160,1163,1164,1167,1168,1170],{},"Most tests in this app start from the same district settings. Keeping them in a ",[206,1161,1162],{},"seed"," gives each scenario a known starting point. We'll wrap ",[185,1165,1166],{},"Biome.Start"," in ",[185,1169,1155],{}," so individual tests do not have to repeat that setup.",[211,1172,1176],{"className":213,"code":1173,"filename":1174,"highlights":1175,"language":216,"meta":217,"style":217},"using Zeeq.Biome;\n\npublic sealed record SchoolSeed(string TimeZoneId);\n\npublic static partial class TestBiome\n{\n    private static readonly BiomeOptions\u003CSchoolSeed> Options = new();\n\n    public static BiomeBuilder\u003CSchoolSeed, SchoolSeed> Start(\n        out SchoolSeed seed,\n        IBiomeStore? store = null,\n        TimeProvider? time = null\n    )\n    {\n        seed = new SchoolSeed(\"America\u002FChicago\");\n        return Biome.Start(seed, Options, store, time);\n    }\n}\n","TestBiome.cs",[249,499,526],[185,1177,1178,1195,1199,1224,1228,1243,1247,1280,1284,1311,1324,1342,1357,1362,1367,1394,1427,1432],{"__ignoreMap":217},[221,1179,1180,1184,1188,1190,1193],{"class":223,"line":224},[221,1181,1183],{"class":1182},"sw1J6","using",[221,1185,1187],{"class":1186},"sfCm-"," Zeeq",[221,1189,209],{"class":245},[221,1191,1192],{"class":1186},"Biome",[221,1194,286],{"class":245},[221,1196,1197],{"class":223,"line":242},[221,1198,424],{"emptyLinePlaceholder":423},[221,1200,1203,1205,1207,1210,1213,1216,1219,1221],{"class":1201,"line":249},[223,1202],"highlight",[221,1204,228],{"class":227},[221,1206,231],{"class":227},[221,1208,1209],{"class":234}," record",[221,1211,1212],{"class":238}," SchoolSeed",[221,1214,1215],{"class":245},"(",[221,1217,1218],{"class":255},"string",[221,1220,324],{"class":238},[221,1222,1223],{"class":245},");\n",[221,1225,1226],{"class":223,"line":289},[221,1227,424],{"emptyLinePlaceholder":423},[221,1229,1230,1232,1235,1238,1240],{"class":223,"line":317},[221,1231,228],{"class":227},[221,1233,1234],{"class":227}," static",[221,1236,1237],{"class":227}," partial",[221,1239,235],{"class":234},[221,1241,1242],{"class":238}," TestBiome\n",[221,1244,1245],{"class":223,"line":345},[221,1246,246],{"class":245},[221,1248,1249,1252,1254,1257,1260,1263,1266,1269,1272,1274,1277],{"class":223,"line":369},[221,1250,1251],{"class":227},"    private",[221,1253,1234],{"class":227},[221,1255,1256],{"class":227}," readonly",[221,1258,1259],{"class":238}," BiomeOptions",[221,1261,1262],{"class":245},"\u003C",[221,1264,1265],{"class":238},"SchoolSeed",[221,1267,1268],{"class":245},">",[221,1270,1271],{"class":238}," Options",[221,1273,279],{"class":255},[221,1275,1276],{"class":255}," new",[221,1278,1279],{"class":245},"();\n",[221,1281,1282],{"class":223,"line":392},[221,1283,424],{"emptyLinePlaceholder":423},[221,1285,1286,1288,1290,1293,1295,1297,1300,1302,1304,1308],{"class":223,"line":414},[221,1287,252],{"class":227},[221,1289,1234],{"class":227},[221,1291,1292],{"class":238}," BiomeBuilder",[221,1294,1262],{"class":245},[221,1296,1265],{"class":238},[221,1298,1299],{"class":245},",",[221,1301,1212],{"class":238},[221,1303,1268],{"class":245},[221,1305,1307],{"class":1306},"sGLFI"," Start",[221,1309,1310],{"class":245},"(\n",[221,1312,1313,1316,1318,1321],{"class":223,"line":420},[221,1314,1315],{"class":227},"        out",[221,1317,1212],{"class":238},[221,1319,1320],{"class":238}," seed",[221,1322,1323],{"class":245},",\n",[221,1325,1326,1329,1331,1334,1336,1340],{"class":223,"line":427},[221,1327,1328],{"class":238},"        IBiomeStore",[221,1330,869],{"class":245},[221,1332,1333],{"class":238}," store",[221,1335,279],{"class":255},[221,1337,1339],{"class":1338},"s39Yj"," null",[221,1341,1323],{"class":245},[221,1343,1344,1347,1349,1352,1354],{"class":223,"line":439},[221,1345,1346],{"class":238},"        TimeProvider",[221,1348,869],{"class":245},[221,1350,1351],{"class":238}," time",[221,1353,279],{"class":255},[221,1355,1356],{"class":1338}," null\n",[221,1358,1359],{"class":223,"line":444},[221,1360,1361],{"class":245},"    )\n",[221,1363,1364],{"class":223,"line":471},[221,1365,1366],{"class":245},"    {\n",[221,1368,1370,1374,1377,1379,1381,1383,1386,1390,1392],{"class":1369,"line":499},[223,1202],[221,1371,1373],{"class":1372},"su5hD","        seed ",[221,1375,1376],{"class":255},"=",[221,1378,1276],{"class":255},[221,1380,1212],{"class":238},[221,1382,1215],{"class":245},[221,1384,1385],{"class":282},"\"",[221,1387,1389],{"class":1388},"s_sjI","America\u002FChicago",[221,1391,1385],{"class":282},[221,1393,1223],{"class":245},[221,1395,1397,1401,1404,1406,1409,1411,1413,1415,1417,1419,1421,1423,1425],{"class":1396,"line":526},[223,1202],[221,1398,1400],{"class":1399},"sVHd0","        return",[221,1402,1403],{"class":1372}," Biome",[221,1405,209],{"class":245},[221,1407,1408],{"class":1306},"Start",[221,1410,1215],{"class":245},[221,1412,1162],{"class":1372},[221,1414,1299],{"class":245},[221,1416,1271],{"class":1372},[221,1418,1299],{"class":245},[221,1420,1333],{"class":1372},[221,1422,1299],{"class":245},[221,1424,1351],{"class":1372},[221,1426,1223],{"class":245},[221,1428,1429],{"class":223,"line":554},[221,1430,1431],{"class":245},"    }\n",[221,1433,1434],{"class":223,"line":575},[221,1435,417],{"class":245},[176,1437,1438,1439,1442,1443,209],{},"Here the seed is only a time zone. If your tests also always need baseline rows, such as an administrator account, select them with ",[185,1440,1441],{},"SeedEntities"," and Biome saves them first. See ",[180,1444,31],{"href":32},[1446,1447,1448],"note",{},[176,1449,1450,1451,1456,1457,1459],{},"Options are shared by every test. They ",[206,1452,1453,1454],{},"freeze on the first ",[185,1455,1408],{},", and changing them afterwards throws. Each ",[185,1458,1408],{}," creates a new session, so parallel tests are safe.",[1149,1461,1463],{"id":1462},"_2-a-blueprint","2. A blueprint",[176,1465,1466,1467,1470,1471,1474],{},"A district needs an ID, a name, a time zone, and creation times even when the test is about something else. Put those routine choices in a ",[206,1468,1469],{},"blueprint",". Its factory receives a context (",[185,1472,1473],{},"ctx",") with the seed, clock, and ID generation.",[211,1476,1480],{"className":213,"code":1477,"filename":1478,"highlights":1479,"language":216,"meta":217,"style":217},"[BiomeGraft]\npublic static partial class Blueprints\n{\n    public static readonly Blueprint\u003CSchoolSeed, District> District =\n        Blueprint.For\u003CSchoolSeed, District>(ctx =>\n            new()\n            {\n                Id = ctx.NewId(\"dist\"), \u002F\u002F \"dist_\u003Cuuidv7>\"\n                Name = \"Riverside Unified\",\n                TimeZoneId = ctx.Seed.TimeZoneId,\n                CreatedAtUtc = ctx.Now, \u002F\u002F never DateTimeOffset.UtcNow\n                UpdatedAtUtc = ctx.Now,\n            }\n        );\n}\n","Blueprints.cs",[369,414,420,427],[185,1481,1482,1493,1506,1510,1537,1563,1571,1577,1607,1625,1647,1667,1682,1687,1692],{"__ignoreMap":217},[221,1483,1484,1487,1490],{"class":223,"line":224},[221,1485,1486],{"class":245},"[",[221,1488,1489],{"class":238},"BiomeGraft",[221,1491,1492],{"class":245},"]\n",[221,1494,1495,1497,1499,1501,1503],{"class":223,"line":242},[221,1496,228],{"class":227},[221,1498,1234],{"class":227},[221,1500,1237],{"class":227},[221,1502,235],{"class":234},[221,1504,1505],{"class":238}," Blueprints\n",[221,1507,1508],{"class":223,"line":249},[221,1509,246],{"class":245},[221,1511,1512,1514,1516,1518,1521,1523,1525,1527,1530,1532,1534],{"class":223,"line":289},[221,1513,252],{"class":227},[221,1515,1234],{"class":227},[221,1517,1256],{"class":227},[221,1519,1520],{"class":238}," Blueprint",[221,1522,1262],{"class":245},[221,1524,1265],{"class":238},[221,1526,1299],{"class":245},[221,1528,1529],{"class":238}," District",[221,1531,1268],{"class":245},[221,1533,1529],{"class":238},[221,1535,1536],{"class":255}," =\n",[221,1538,1539,1542,1544,1547,1549,1551,1553,1555,1558,1560],{"class":223,"line":317},[221,1540,1541],{"class":1372},"        Blueprint",[221,1543,209],{"class":245},[221,1545,1546],{"class":1306},"For",[221,1548,1262],{"class":245},[221,1550,1265],{"class":238},[221,1552,1299],{"class":245},[221,1554,1529],{"class":238},[221,1556,1557],{"class":245},">(",[221,1559,1473],{"class":238},[221,1561,1562],{"class":255}," =>\n",[221,1564,1565,1568],{"class":223,"line":345},[221,1566,1567],{"class":255},"            new",[221,1569,1570],{"class":245},"()\n",[221,1572,1574],{"class":1573,"line":369},[223,1202],[221,1575,1576],{"class":245},"            {\n",[221,1578,1579,1582,1584,1587,1589,1592,1594,1596,1599,1601,1604],{"class":223,"line":392},[221,1580,1581],{"class":1372},"                Id ",[221,1583,1376],{"class":255},[221,1585,1586],{"class":1372}," ctx",[221,1588,209],{"class":245},[221,1590,1591],{"class":1306},"NewId",[221,1593,1215],{"class":245},[221,1595,1385],{"class":282},[221,1597,1598],{"class":1388},"dist",[221,1600,1385],{"class":282},[221,1602,1603],{"class":245},"),",[221,1605,1606],{"class":887}," \u002F\u002F \"dist_\u003Cuuidv7>\"\n",[221,1608,1610,1613,1615,1618,1621,1623],{"class":1609,"line":414},[223,1202],[221,1611,1612],{"class":1372},"                Name ",[221,1614,1376],{"class":255},[221,1616,1617],{"class":282}," \"",[221,1619,1620],{"class":1388},"Riverside Unified",[221,1622,1385],{"class":282},[221,1624,1323],{"class":245},[221,1626,1628,1631,1633,1635,1637,1640,1642,1645],{"class":1627,"line":420},[223,1202],[221,1629,1630],{"class":1372},"                TimeZoneId ",[221,1632,1376],{"class":255},[221,1634,1586],{"class":1372},[221,1636,209],{"class":245},[221,1638,1639],{"class":1372},"Seed",[221,1641,209],{"class":245},[221,1643,1644],{"class":1372},"TimeZoneId",[221,1646,1323],{"class":245},[221,1648,1650,1653,1655,1657,1659,1662,1664],{"class":1649,"line":427},[223,1202],[221,1651,1652],{"class":1372},"                CreatedAtUtc ",[221,1654,1376],{"class":255},[221,1656,1586],{"class":1372},[221,1658,209],{"class":245},[221,1660,1661],{"class":1372},"Now",[221,1663,1299],{"class":245},[221,1665,1666],{"class":887}," \u002F\u002F never DateTimeOffset.UtcNow\n",[221,1668,1669,1672,1674,1676,1678,1680],{"class":223,"line":439},[221,1670,1671],{"class":1372},"                UpdatedAtUtc ",[221,1673,1376],{"class":255},[221,1675,1586],{"class":1372},[221,1677,209],{"class":245},[221,1679,1661],{"class":1372},[221,1681,1323],{"class":245},[221,1683,1684],{"class":223,"line":444},[221,1685,1686],{"class":245},"            }\n",[221,1688,1689],{"class":223,"line":471},[221,1690,1691],{"class":245},"        );\n",[221,1693,1694],{"class":223,"line":499},[221,1695,417],{"class":245},[176,1697,1698,1699,1702,1703,1705,1706,1709,1710,209],{},"The ",[185,1700,1701],{},"[BiomeGraft]"," attribute makes ",[185,1704,36],{}," a catalog. The source generator creates ",[185,1707,1708],{},"BlueprintsGrafts"," in the same namespace; the root blueprint above is available as ",[185,1711,1712],{},".AddDistrict(out var district)",[1149,1714,1716],{"id":1715},"_3-your-first-test","3. Your first test",[176,1718,1719],{},"With those defaults in place, the test can ask for a district and check its relationship to the seed. There is no need to repeat the values the blueprint already supplies. Neither version below touches a database yet: step 6 adds persistence.",[1721,1722,1723,1878],"code-group",{},[211,1724,1728],{"className":213,"code":1725,"filename":1726,"highlights":1727,"language":216,"meta":217,"style":217},"public sealed class DistrictTests\n{\n    [Test]\n    public async Task District_starts_in_the_seed_time_zone()\n    {\n        await TestBiome\n            .Start(out var seed)\n            .AddDistrict(out var district)\n            .BuildAsync();\n\n        await Assert.That(district.TimeZoneId).IsEqualTo(seed.TimeZoneId);\n    }\n}\n","With Biome",[392],[185,1729,1730,1741,1745,1755,1770,1774,1781,1801,1820,1829,1833,1870,1874],{"__ignoreMap":217},[221,1731,1732,1734,1736,1738],{"class":223,"line":224},[221,1733,228],{"class":227},[221,1735,231],{"class":227},[221,1737,235],{"class":234},[221,1739,1740],{"class":238}," DistrictTests\n",[221,1742,1743],{"class":223,"line":242},[221,1744,246],{"class":245},[221,1746,1747,1750,1753],{"class":223,"line":249},[221,1748,1749],{"class":245},"    [",[221,1751,1752],{"class":238},"Test",[221,1754,1492],{"class":245},[221,1756,1757,1759,1762,1765,1768],{"class":223,"line":289},[221,1758,252],{"class":227},[221,1760,1761],{"class":227}," async",[221,1763,1764],{"class":238}," Task",[221,1766,1767],{"class":1306}," District_starts_in_the_seed_time_zone",[221,1769,1570],{"class":245},[221,1771,1772],{"class":223,"line":317},[221,1773,1366],{"class":245},[221,1775,1776,1779],{"class":223,"line":345},[221,1777,1778],{"class":255},"        await",[221,1780,1242],{"class":1372},[221,1782,1783,1786,1788,1790,1793,1796,1798],{"class":223,"line":369},[221,1784,1785],{"class":245},"            .",[221,1787,1408],{"class":1306},[221,1789,1215],{"class":245},[221,1791,1792],{"class":227},"out",[221,1794,1795],{"class":234}," var",[221,1797,1320],{"class":238},[221,1799,1800],{"class":245},")\n",[221,1802,1804,1806,1809,1811,1813,1815,1818],{"class":1803,"line":392},[223,1202],[221,1805,1785],{"class":245},[221,1807,1808],{"class":1306},"AddDistrict",[221,1810,1215],{"class":245},[221,1812,1792],{"class":227},[221,1814,1795],{"class":234},[221,1816,1817],{"class":238}," district",[221,1819,1800],{"class":245},[221,1821,1822,1824,1827],{"class":223,"line":414},[221,1823,1785],{"class":245},[221,1825,1826],{"class":1306},"BuildAsync",[221,1828,1279],{"class":245},[221,1830,1831],{"class":223,"line":420},[221,1832,424],{"emptyLinePlaceholder":423},[221,1834,1835,1837,1840,1842,1845,1847,1850,1852,1854,1857,1860,1862,1864,1866,1868],{"class":223,"line":427},[221,1836,1778],{"class":255},[221,1838,1839],{"class":1372}," Assert",[221,1841,209],{"class":245},[221,1843,1844],{"class":1306},"That",[221,1846,1215],{"class":245},[221,1848,1849],{"class":1372},"district",[221,1851,209],{"class":245},[221,1853,1644],{"class":1372},[221,1855,1856],{"class":245},").",[221,1858,1859],{"class":1306},"IsEqualTo",[221,1861,1215],{"class":245},[221,1863,1162],{"class":1372},[221,1865,209],{"class":245},[221,1867,1644],{"class":1372},[221,1869,1223],{"class":245},[221,1871,1872],{"class":223,"line":439},[221,1873,1431],{"class":245},[221,1875,1876],{"class":223,"line":444},[221,1877,417],{"class":245},[1879,1880,1883],"code-collapse",{"label":1881,"name":1882},"Without Biome","setup",[211,1884,1886],{"className":213,"code":1885,"language":216,"meta":217,"style":217},"public sealed class DistrictTests\n{\n    [Test]\n    public async Task District_starts_in_the_seed_time_zone()\n    {\n        var seed = new SchoolSeed(\"America\u002FChicago\");\n        var now = DateTimeOffset.UtcNow;\n        var district = new District\n        {\n            Id = $\"dist_{Guid.CreateVersion7():N}\",\n            Name = \"Riverside Unified\",\n            TimeZoneId = seed.TimeZoneId,\n            CreatedAtUtc = now,\n            UpdatedAtUtc = now,\n        };\n\n        await Assert.That(district.TimeZoneId).IsEqualTo(seed.TimeZoneId);\n    }\n}\n",[185,1887,1888,1898,1902,1910,1922,1926,1949,1967,1979,1984,2024,2039,2054,2065,2076,2081,2085,2117,2121],{"__ignoreMap":217},[221,1889,1890,1892,1894,1896],{"class":223,"line":224},[221,1891,228],{"class":227},[221,1893,231],{"class":227},[221,1895,235],{"class":234},[221,1897,1740],{"class":238},[221,1899,1900],{"class":223,"line":242},[221,1901,246],{"class":245},[221,1903,1904,1906,1908],{"class":223,"line":249},[221,1905,1749],{"class":245},[221,1907,1752],{"class":238},[221,1909,1492],{"class":245},[221,1911,1912,1914,1916,1918,1920],{"class":223,"line":289},[221,1913,252],{"class":227},[221,1915,1761],{"class":227},[221,1917,1764],{"class":238},[221,1919,1767],{"class":1306},[221,1921,1570],{"class":245},[221,1923,1924],{"class":223,"line":317},[221,1925,1366],{"class":245},[221,1927,1928,1931,1933,1935,1937,1939,1941,1943,1945,1947],{"class":223,"line":345},[221,1929,1930],{"class":234},"        var",[221,1932,1320],{"class":238},[221,1934,279],{"class":255},[221,1936,1276],{"class":255},[221,1938,1212],{"class":238},[221,1940,1215],{"class":245},[221,1942,1385],{"class":282},[221,1944,1389],{"class":1388},[221,1946,1385],{"class":282},[221,1948,1223],{"class":245},[221,1950,1951,1953,1956,1958,1960,1962,1965],{"class":223,"line":369},[221,1952,1930],{"class":234},[221,1954,1955],{"class":238}," now",[221,1957,279],{"class":255},[221,1959,374],{"class":1372},[221,1961,209],{"class":245},[221,1963,1964],{"class":1372},"UtcNow",[221,1966,286],{"class":245},[221,1968,1969,1971,1973,1975,1977],{"class":223,"line":392},[221,1970,1930],{"class":234},[221,1972,1817],{"class":238},[221,1974,279],{"class":255},[221,1976,1276],{"class":255},[221,1978,239],{"class":238},[221,1980,1981],{"class":223,"line":414},[221,1982,1983],{"class":245},"        {\n",[221,1985,1986,1989,1991,1994,1997,2000,2003,2005,2008,2011,2014,2017,2020,2022],{"class":223,"line":420},[221,1987,1988],{"class":1372},"            Id ",[221,1990,1376],{"class":255},[221,1992,1993],{"class":282}," $\"",[221,1995,1996],{"class":1388},"dist_",[221,1998,1999],{"class":282},"{",[221,2001,2002],{"class":1372},"Guid",[221,2004,209],{"class":282},[221,2006,2007],{"class":1306},"CreateVersion7",[221,2009,2010],{"class":282},"()",[221,2012,2013],{"class":255},":",[221,2015,2016],{"class":1372},"N",[221,2018,2019],{"class":282},"}",[221,2021,1385],{"class":282},[221,2023,1323],{"class":245},[221,2025,2026,2029,2031,2033,2035,2037],{"class":223,"line":427},[221,2027,2028],{"class":1372},"            Name ",[221,2030,1376],{"class":255},[221,2032,1617],{"class":282},[221,2034,1620],{"class":1388},[221,2036,1385],{"class":282},[221,2038,1323],{"class":245},[221,2040,2041,2044,2046,2048,2050,2052],{"class":223,"line":439},[221,2042,2043],{"class":1372},"            TimeZoneId ",[221,2045,1376],{"class":255},[221,2047,1320],{"class":1372},[221,2049,209],{"class":245},[221,2051,1644],{"class":1372},[221,2053,1323],{"class":245},[221,2055,2056,2059,2061,2063],{"class":223,"line":444},[221,2057,2058],{"class":1372},"            CreatedAtUtc ",[221,2060,1376],{"class":255},[221,2062,1955],{"class":1372},[221,2064,1323],{"class":245},[221,2066,2067,2070,2072,2074],{"class":223,"line":471},[221,2068,2069],{"class":1372},"            UpdatedAtUtc ",[221,2071,1376],{"class":255},[221,2073,1955],{"class":1372},[221,2075,1323],{"class":245},[221,2077,2078],{"class":223,"line":499},[221,2079,2080],{"class":245},"        };\n",[221,2082,2083],{"class":223,"line":526},[221,2084,424],{"emptyLinePlaceholder":423},[221,2086,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115],{"class":223,"line":554},[221,2088,1778],{"class":255},[221,2090,1839],{"class":1372},[221,2092,209],{"class":245},[221,2094,1844],{"class":1306},[221,2096,1215],{"class":245},[221,2098,1849],{"class":1372},[221,2100,209],{"class":245},[221,2102,1644],{"class":1372},[221,2104,1856],{"class":245},[221,2106,1859],{"class":1306},[221,2108,1215],{"class":245},[221,2110,1162],{"class":1372},[221,2112,209],{"class":245},[221,2114,1644],{"class":1372},[221,2116,1223],{"class":245},[221,2118,2119],{"class":223,"line":575},[221,2120,1431],{"class":245},[221,2122,2123],{"class":223,"line":596},[221,2124,417],{"class":245},[176,2126,2127,2129,2130,2133,2134,2136,2137,2139],{},[185,2128,1808],{}," builds the entity ",[206,2131,2132],{},"immediately",", so ",[185,2135,1849],{}," exists as soon as it returns. ",[185,2138,1826],{}," then saves everything once through the session's store. With no store, that is a no-op.",[2141,2142,2143,2160],"table",{},[2144,2145,2146],"thead",{},[2147,2148,2149,2153,2156],"tr",{},[2150,2151,2152],"th",{},"Shape",[2150,2154,2155],{},"Creates",[2150,2157,2158],{},[185,2159,1792],{},[2161,2162,2163,2179,2193,2207,2221],"tbody",{},[2147,2164,2165,2171,2174],{},[2166,2167,2168],"td",{},[185,2169,2170],{},"AddOne(bp, out var x)",[2166,2172,2173],{},"1 default",[2166,2175,2176],{},[185,2177,2178],{},"T",[2147,2180,2181,2186,2189],{},[2166,2182,2183],{},[185,2184,2185],{},"AddOne(bp, out var x, x => …)",[2166,2187,2188],{},"1 customized",[2166,2190,2191],{},[185,2192,2178],{},[2147,2194,2195,2200,2202],{},[2166,2196,2197],{},[185,2198,2199],{},"Add(bp, out var xs)",[2166,2201,2173],{},[2166,2203,2204],{},[185,2205,2206],{},"T[]",[2147,2208,2209,2214,2217],{},[2166,2210,2211],{},[185,2212,2213],{},"Add(bp, out var xs, 3)",[2166,2215,2216],{},"3 defaults",[2166,2218,2219],{},[185,2220,2206],{},[2147,2222,2223,2228,2231],{},[2166,2224,2225],{},[185,2226,2227],{},"Add(bp, out var xs, x => …, x => …)",[2166,2229,2230],{},"one per customizer",[2166,2232,2233],{},[185,2234,2206],{},[2236,2237,2238],"caution",{},[176,2239,2240,2241,2243,2244,2247,2248,2250],{},"Every Add takes an ",[185,2242,1792],{},". Write ",[185,2245,2246],{},"out _"," when the test doesn't need the value. Calling ",[185,2249,1826],{}," a second time throws.",[1149,2252,2254],{"id":2253},"_4-customize-only-what-the-test-is-about","4. Customize only what the test is about",[176,2256,2257],{},"When the behavior depends on a particular value, set that value at the call site. This keeps the reason for the scenario next to the test that needs it. One test may need an archived district, and a tenant-isolation test needs two districts that differ only by name:",[211,2259,2263],{"className":213,"code":2260,"filename":2261,"highlights":2262,"language":216,"meta":217,"style":217},"await TestBiome\n    .Start(out _)\n    .AddOne(Blueprints.District, out var archived, d => d.IsArchived = true)\n    .Add(\n        Blueprints.District,\n        out var pair,\n        d => d.Name = \"Lakeview\",\n        d => d.Name = \"Hillcrest\"\n    )\n    .BuildAsync();\n","DistrictTests.cs",[249,369,392],[185,2264,2265,2272,2288,2337,2346,2357,2368,2394,2417,2421],{"__ignoreMap":217},[221,2266,2267,2270],{"class":223,"line":224},[221,2268,2269],{"class":255},"await",[221,2271,1242],{"class":1372},[221,2273,2274,2277,2279,2281,2283,2286],{"class":223,"line":242},[221,2275,2276],{"class":245},"    .",[221,2278,1408],{"class":1306},[221,2280,1215],{"class":245},[221,2282,1792],{"class":227},[221,2284,2285],{"class":1372}," _",[221,2287,1800],{"class":245},[221,2289,2291,2293,2296,2298,2300,2302,2304,2306,2309,2311,2314,2316,2319,2322,2324,2326,2329,2331,2335],{"class":2290,"line":249},[223,1202],[221,2292,2276],{"class":245},[221,2294,2295],{"class":1306},"AddOne",[221,2297,1215],{"class":245},[221,2299,36],{"class":1372},[221,2301,209],{"class":245},[221,2303,187],{"class":1372},[221,2305,1299],{"class":245},[221,2307,2308],{"class":227}," out",[221,2310,1795],{"class":234},[221,2312,2313],{"class":238}," archived",[221,2315,1299],{"class":245},[221,2317,2318],{"class":238}," d",[221,2320,2321],{"class":255}," =>",[221,2323,2318],{"class":1372},[221,2325,209],{"class":245},[221,2327,2328],{"class":1372},"IsArchived ",[221,2330,1376],{"class":255},[221,2332,2334],{"class":2333},"syTEX"," true",[221,2336,1800],{"class":245},[221,2338,2339,2341,2344],{"class":223,"line":289},[221,2340,2276],{"class":245},[221,2342,2343],{"class":1306},"Add",[221,2345,1310],{"class":245},[221,2347,2348,2351,2353,2355],{"class":223,"line":317},[221,2349,2350],{"class":1372},"        Blueprints",[221,2352,209],{"class":245},[221,2354,187],{"class":1372},[221,2356,1323],{"class":245},[221,2358,2359,2361,2363,2366],{"class":223,"line":345},[221,2360,1315],{"class":227},[221,2362,1795],{"class":234},[221,2364,2365],{"class":238}," pair",[221,2367,1323],{"class":245},[221,2369,2371,2374,2376,2378,2380,2383,2385,2387,2390,2392],{"class":2370,"line":369},[223,1202],[221,2372,2373],{"class":238},"        d",[221,2375,2321],{"class":255},[221,2377,2318],{"class":1372},[221,2379,209],{"class":245},[221,2381,2382],{"class":1372},"Name ",[221,2384,1376],{"class":255},[221,2386,1617],{"class":282},[221,2388,2389],{"class":1388},"Lakeview",[221,2391,1385],{"class":282},[221,2393,1323],{"class":245},[221,2395,2397,2399,2401,2403,2405,2407,2409,2411,2414],{"class":2396,"line":392},[223,1202],[221,2398,2373],{"class":238},[221,2400,2321],{"class":255},[221,2402,2318],{"class":1372},[221,2404,209],{"class":245},[221,2406,2382],{"class":1372},[221,2408,1376],{"class":255},[221,2410,1617],{"class":282},[221,2412,2413],{"class":1388},"Hillcrest",[221,2415,2416],{"class":282},"\"\n",[221,2418,2419],{"class":223,"line":414},[221,2420,1361],{"class":245},[221,2422,2423,2425,2427],{"class":223,"line":420},[221,2424,2276],{"class":245},[221,2426,1826],{"class":1306},[221,2428,1279],{"class":245},[176,2430,2431,2432,2435,2436,2439,2440,2443,2444,2447],{},"A comma makes ",[206,2433,2434],{},"a new entity",". ",[185,2437,2438],{},"+"," stacks ",[206,2441,2442],{},"traits"," (named ",[185,2445,2446],{},"Action\u003CT>"," values) on the same entity:",[211,2449,2453],{"className":213,"code":2450,"filename":2451,"highlights":2452,"language":216,"meta":217,"style":217},"public static class Districts\n{\n    public static readonly Action\u003CDistrict> Pacific =\n        d => d.TimeZoneId = \"America\u002FLos_Angeles\";\n    public static readonly Action\u003CDistrict> Archived =\n        d => d.IsArchived = true;\n}\n\nawait TestBiome.Start(out _)\n    .Add(Blueprints.District, out var districts,\n        Districts.Archived,                       \u002F\u002F districts[0]: archived\n        \u002F\u002F districts[1]: archived, in the Pacific time zone\n        Districts.Pacific + Districts.Archived)\n    .BuildAsync();\n","Traits.cs",[427,444],[185,2454,2455,2466,2470,2492,2516,2537,2555,2559,2563,2582,2607,2623,2628,2649],{"__ignoreMap":217},[221,2456,2457,2459,2461,2463],{"class":223,"line":224},[221,2458,228],{"class":227},[221,2460,1234],{"class":227},[221,2462,235],{"class":234},[221,2464,2465],{"class":238}," Districts\n",[221,2467,2468],{"class":223,"line":242},[221,2469,246],{"class":245},[221,2471,2472,2474,2476,2478,2481,2483,2485,2487,2490],{"class":223,"line":249},[221,2473,252],{"class":227},[221,2475,1234],{"class":227},[221,2477,1256],{"class":227},[221,2479,2480],{"class":238}," Action",[221,2482,1262],{"class":245},[221,2484,187],{"class":238},[221,2486,1268],{"class":245},[221,2488,2489],{"class":238}," Pacific",[221,2491,1536],{"class":255},[221,2493,2494,2496,2498,2500,2502,2505,2507,2509,2512,2514],{"class":223,"line":289},[221,2495,2373],{"class":238},[221,2497,2321],{"class":255},[221,2499,2318],{"class":1372},[221,2501,209],{"class":245},[221,2503,2504],{"class":1372},"TimeZoneId ",[221,2506,1376],{"class":255},[221,2508,1617],{"class":282},[221,2510,2511],{"class":1388},"America\u002FLos_Angeles",[221,2513,1385],{"class":282},[221,2515,286],{"class":245},[221,2517,2518,2520,2522,2524,2526,2528,2530,2532,2535],{"class":223,"line":317},[221,2519,252],{"class":227},[221,2521,1234],{"class":227},[221,2523,1256],{"class":227},[221,2525,2480],{"class":238},[221,2527,1262],{"class":245},[221,2529,187],{"class":238},[221,2531,1268],{"class":245},[221,2533,2534],{"class":238}," Archived",[221,2536,1536],{"class":255},[221,2538,2539,2541,2543,2545,2547,2549,2551,2553],{"class":223,"line":345},[221,2540,2373],{"class":238},[221,2542,2321],{"class":255},[221,2544,2318],{"class":1372},[221,2546,209],{"class":245},[221,2548,2328],{"class":1372},[221,2550,1376],{"class":255},[221,2552,2334],{"class":2333},[221,2554,286],{"class":245},[221,2556,2557],{"class":223,"line":369},[221,2558,417],{"class":245},[221,2560,2561],{"class":223,"line":392},[221,2562,424],{"emptyLinePlaceholder":423},[221,2564,2565,2567,2570,2572,2574,2576,2578,2580],{"class":223,"line":414},[221,2566,2269],{"class":255},[221,2568,2569],{"class":1372}," TestBiome",[221,2571,209],{"class":245},[221,2573,1408],{"class":1306},[221,2575,1215],{"class":245},[221,2577,1792],{"class":227},[221,2579,2285],{"class":1372},[221,2581,1800],{"class":245},[221,2583,2584,2586,2588,2590,2592,2594,2596,2598,2600,2602,2605],{"class":223,"line":420},[221,2585,2276],{"class":245},[221,2587,2343],{"class":1306},[221,2589,1215],{"class":245},[221,2591,36],{"class":1372},[221,2593,209],{"class":245},[221,2595,187],{"class":1372},[221,2597,1299],{"class":245},[221,2599,2308],{"class":227},[221,2601,1795],{"class":234},[221,2603,2604],{"class":238}," districts",[221,2606,1323],{"class":245},[221,2608,2610,2613,2615,2618,2620],{"class":2609,"line":427},[223,1202],[221,2611,2612],{"class":1372},"        Districts",[221,2614,209],{"class":245},[221,2616,2617],{"class":1372},"Archived",[221,2619,1299],{"class":245},[221,2621,2622],{"class":887},"                       \u002F\u002F districts[0]: archived\n",[221,2624,2625],{"class":223,"line":439},[221,2626,2627],{"class":887},"        \u002F\u002F districts[1]: archived, in the Pacific time zone\n",[221,2629,2631,2633,2635,2638,2640,2643,2645,2647],{"class":2630,"line":444},[223,1202],[221,2632,2612],{"class":1372},[221,2634,209],{"class":245},[221,2636,2637],{"class":1372},"Pacific ",[221,2639,2438],{"class":255},[221,2641,2642],{"class":1372}," Districts",[221,2644,209],{"class":245},[221,2646,2617],{"class":1372},[221,2648,1800],{"class":245},[221,2650,2651,2653,2655],{"class":223,"line":471},[221,2652,2276],{"class":245},[221,2654,1826],{"class":1306},[221,2656,1279],{"class":245},[1149,2658,2660],{"id":2659},"_5-children-chain-branch-fan-out","5. Children: chain, branch, fan out",[176,2662,2663,2664,2667,2668,2435,2671,2674],{},"A school needs the district it belongs to. Passing that district into a ",[206,2665,2666],{},"child blueprint"," keeps the relationship explicit. For a relationship further up the chain, such as the tenant on a class, use ",[185,2669,2670],{},"ctx.Ancestor\u003CT>()",[185,2672,2673],{},"ctx.Index"," is the position within one Add, which is enough for now to give each school a distinct name and code.",[211,2676,2679],{"className":213,"code":2677,"filename":1478,"highlights":2678,"language":216,"meta":217,"style":217},"public static readonly ChildBlueprint\u003CSchoolSeed, District, School> School =\n    Blueprint.ChildOf\u003CSchoolSeed, District, School>(\n        (district, ctx) =>\n            new()\n            {\n                Id = ctx.NewId(\"sch\"),\n                DistrictId = district.Id, \u002F\u002F typed parent\n                Name = $\"School {ctx.Index + 1}\",\n                Code = $\"S{ctx.Index + 1}\",\n                CreatedAtUtc = ctx.Now,\n                UpdatedAtUtc = ctx.Now,\n            }\n    );\n\npublic static readonly ChildBlueprint\u003CSchoolSeed, School, SchoolClass> Class =\n    Blueprint.ChildOf\u003CSchoolSeed, School, SchoolClass>(\n        (school, ctx) =>\n            new()\n            {\n                Id = ctx.NewId(\"cls\"),\n                DistrictId = ctx.Ancestor\u003CDistrict>().Id, \u002F\u002F grandparent\n                SchoolId = school.Id,\n                Name = \"Algebra I\",\n                Capacity = 25,\n                CreatedAtUtc = ctx.Now,\n            }\n    );\n\npublic static readonly ChildBlueprint\u003CSchoolSeed, School, Teacher> Teacher =\n    Blueprint.ChildOf\u003CSchoolSeed, School, Teacher>(\n        (school, ctx) =>\n            new()\n            {\n                Id = ctx.NewId(\"tch\"),\n                DistrictId = school.DistrictId,\n                SchoolId = school.Id,\n                FullName = $\"Teacher {ctx.Index + 1}\",\n                CreatedAtUtc = ctx.Now,\n            }\n    );\n",[369,606],[185,2680,2681,2711,2736,2752,2758,2762,2786,2806,2839,2869,2883,2897,2901,2906,2910,2940,2962,2977,2983,2987,3010,3038,3054,3069,3081,3095,3099,3103,3107,3136,3158,3172,3178,3182,3205,3219,3233,3263,3277,3281],{"__ignoreMap":217},[221,2682,2683,2685,2687,2689,2692,2694,2696,2698,2700,2702,2705,2707,2709],{"class":223,"line":224},[221,2684,228],{"class":227},[221,2686,1234],{"class":227},[221,2688,1256],{"class":227},[221,2690,2691],{"class":238}," ChildBlueprint",[221,2693,1262],{"class":245},[221,2695,1265],{"class":238},[221,2697,1299],{"class":245},[221,2699,1529],{"class":238},[221,2701,1299],{"class":245},[221,2703,2704],{"class":238}," School",[221,2706,1268],{"class":245},[221,2708,2704],{"class":238},[221,2710,1536],{"class":255},[221,2712,2713,2716,2718,2721,2723,2725,2727,2729,2731,2733],{"class":223,"line":242},[221,2714,2715],{"class":1372},"    Blueprint",[221,2717,209],{"class":245},[221,2719,2720],{"class":1306},"ChildOf",[221,2722,1262],{"class":245},[221,2724,1265],{"class":238},[221,2726,1299],{"class":245},[221,2728,1529],{"class":238},[221,2730,1299],{"class":245},[221,2732,2704],{"class":238},[221,2734,2735],{"class":245},">(\n",[221,2737,2738,2741,2743,2745,2747,2750],{"class":223,"line":249},[221,2739,2740],{"class":245},"        (",[221,2742,1849],{"class":238},[221,2744,1299],{"class":245},[221,2746,1586],{"class":238},[221,2748,2749],{"class":245},")",[221,2751,1562],{"class":255},[221,2753,2754,2756],{"class":223,"line":289},[221,2755,1567],{"class":255},[221,2757,1570],{"class":245},[221,2759,2760],{"class":223,"line":317},[221,2761,1576],{"class":245},[221,2763,2764,2766,2768,2770,2772,2774,2776,2778,2781,2783],{"class":223,"line":345},[221,2765,1581],{"class":1372},[221,2767,1376],{"class":255},[221,2769,1586],{"class":1372},[221,2771,209],{"class":245},[221,2773,1591],{"class":1306},[221,2775,1215],{"class":245},[221,2777,1385],{"class":282},[221,2779,2780],{"class":1388},"sch",[221,2782,1385],{"class":282},[221,2784,2785],{"class":245},"),\n",[221,2787,2789,2792,2794,2796,2798,2801,2803],{"class":2788,"line":369},[223,1202],[221,2790,2791],{"class":1372},"                DistrictId ",[221,2793,1376],{"class":255},[221,2795,1817],{"class":1372},[221,2797,209],{"class":245},[221,2799,2800],{"class":1372},"Id",[221,2802,1299],{"class":245},[221,2804,2805],{"class":887}," \u002F\u002F typed parent\n",[221,2807,2808,2810,2812,2814,2817,2819,2821,2823,2826,2829,2833,2835,2837],{"class":223,"line":392},[221,2809,1612],{"class":1372},[221,2811,1376],{"class":255},[221,2813,1993],{"class":282},[221,2815,2816],{"class":1388},"School ",[221,2818,1999],{"class":282},[221,2820,1473],{"class":1372},[221,2822,209],{"class":282},[221,2824,2825],{"class":1372},"Index",[221,2827,2828],{"class":255}," +",[221,2830,2832],{"class":2831},"srdBf"," 1",[221,2834,2019],{"class":282},[221,2836,1385],{"class":282},[221,2838,1323],{"class":245},[221,2840,2841,2844,2846,2848,2851,2853,2855,2857,2859,2861,2863,2865,2867],{"class":223,"line":414},[221,2842,2843],{"class":1372},"                Code ",[221,2845,1376],{"class":255},[221,2847,1993],{"class":282},[221,2849,2850],{"class":1388},"S",[221,2852,1999],{"class":282},[221,2854,1473],{"class":1372},[221,2856,209],{"class":282},[221,2858,2825],{"class":1372},[221,2860,2828],{"class":255},[221,2862,2832],{"class":2831},[221,2864,2019],{"class":282},[221,2866,1385],{"class":282},[221,2868,1323],{"class":245},[221,2870,2871,2873,2875,2877,2879,2881],{"class":223,"line":420},[221,2872,1652],{"class":1372},[221,2874,1376],{"class":255},[221,2876,1586],{"class":1372},[221,2878,209],{"class":245},[221,2880,1661],{"class":1372},[221,2882,1323],{"class":245},[221,2884,2885,2887,2889,2891,2893,2895],{"class":223,"line":427},[221,2886,1671],{"class":1372},[221,2888,1376],{"class":255},[221,2890,1586],{"class":1372},[221,2892,209],{"class":245},[221,2894,1661],{"class":1372},[221,2896,1323],{"class":245},[221,2898,2899],{"class":223,"line":439},[221,2900,1686],{"class":245},[221,2902,2903],{"class":223,"line":444},[221,2904,2905],{"class":245},"    );\n",[221,2907,2908],{"class":223,"line":471},[221,2909,424],{"emptyLinePlaceholder":423},[221,2911,2912,2914,2916,2918,2920,2922,2924,2926,2928,2930,2933,2935,2938],{"class":223,"line":499},[221,2913,228],{"class":227},[221,2915,1234],{"class":227},[221,2917,1256],{"class":227},[221,2919,2691],{"class":238},[221,2921,1262],{"class":245},[221,2923,1265],{"class":238},[221,2925,1299],{"class":245},[221,2927,2704],{"class":238},[221,2929,1299],{"class":245},[221,2931,2932],{"class":238}," SchoolClass",[221,2934,1268],{"class":245},[221,2936,2937],{"class":238}," Class",[221,2939,1536],{"class":255},[221,2941,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960],{"class":223,"line":526},[221,2943,2715],{"class":1372},[221,2945,209],{"class":245},[221,2947,2720],{"class":1306},[221,2949,1262],{"class":245},[221,2951,1265],{"class":238},[221,2953,1299],{"class":245},[221,2955,2704],{"class":238},[221,2957,1299],{"class":245},[221,2959,2932],{"class":238},[221,2961,2735],{"class":245},[221,2963,2964,2966,2969,2971,2973,2975],{"class":223,"line":554},[221,2965,2740],{"class":245},[221,2967,2968],{"class":238},"school",[221,2970,1299],{"class":245},[221,2972,1586],{"class":238},[221,2974,2749],{"class":245},[221,2976,1562],{"class":255},[221,2978,2979,2981],{"class":223,"line":575},[221,2980,1567],{"class":255},[221,2982,1570],{"class":245},[221,2984,2985],{"class":223,"line":596},[221,2986,1576],{"class":245},[221,2988,2989,2991,2993,2995,2997,2999,3001,3003,3006,3008],{"class":223,"line":601},[221,2990,1581],{"class":1372},[221,2992,1376],{"class":255},[221,2994,1586],{"class":1372},[221,2996,209],{"class":245},[221,2998,1591],{"class":1306},[221,3000,1215],{"class":245},[221,3002,1385],{"class":282},[221,3004,3005],{"class":1388},"cls",[221,3007,1385],{"class":282},[221,3009,2785],{"class":245},[221,3011,3013,3015,3017,3019,3021,3024,3026,3028,3031,3033,3035],{"class":3012,"line":606},[223,1202],[221,3014,2791],{"class":1372},[221,3016,1376],{"class":255},[221,3018,1586],{"class":1372},[221,3020,209],{"class":245},[221,3022,3023],{"class":1306},"Ancestor",[221,3025,1262],{"class":245},[221,3027,187],{"class":238},[221,3029,3030],{"class":245},">().",[221,3032,2800],{"class":1372},[221,3034,1299],{"class":245},[221,3036,3037],{"class":887}," \u002F\u002F grandparent\n",[221,3039,3040,3043,3045,3048,3050,3052],{"class":223,"line":618},[221,3041,3042],{"class":1372},"                SchoolId ",[221,3044,1376],{"class":255},[221,3046,3047],{"class":1372}," school",[221,3049,209],{"class":245},[221,3051,2800],{"class":1372},[221,3053,1323],{"class":245},[221,3055,3056,3058,3060,3062,3065,3067],{"class":223,"line":623},[221,3057,1612],{"class":1372},[221,3059,1376],{"class":255},[221,3061,1617],{"class":282},[221,3063,3064],{"class":1388},"Algebra I",[221,3066,1385],{"class":282},[221,3068,1323],{"class":245},[221,3070,3071,3074,3076,3079],{"class":223,"line":650},[221,3072,3073],{"class":1372},"                Capacity ",[221,3075,1376],{"class":255},[221,3077,3078],{"class":2831}," 25",[221,3080,1323],{"class":245},[221,3082,3083,3085,3087,3089,3091,3093],{"class":223,"line":677},[221,3084,1652],{"class":1372},[221,3086,1376],{"class":255},[221,3088,1586],{"class":1372},[221,3090,209],{"class":245},[221,3092,1661],{"class":1372},[221,3094,1323],{"class":245},[221,3096,3097],{"class":223,"line":705},[221,3098,1686],{"class":245},[221,3100,3101],{"class":223,"line":733},[221,3102,2905],{"class":245},[221,3104,3105],{"class":223,"line":754},[221,3106,424],{"emptyLinePlaceholder":423},[221,3108,3109,3111,3113,3115,3117,3119,3121,3123,3125,3127,3130,3132,3134],{"class":223,"line":759},[221,3110,228],{"class":227},[221,3112,1234],{"class":227},[221,3114,1256],{"class":227},[221,3116,2691],{"class":238},[221,3118,1262],{"class":245},[221,3120,1265],{"class":238},[221,3122,1299],{"class":245},[221,3124,2704],{"class":238},[221,3126,1299],{"class":245},[221,3128,3129],{"class":238}," Teacher",[221,3131,1268],{"class":245},[221,3133,3129],{"class":238},[221,3135,1536],{"class":255},[221,3137,3138,3140,3142,3144,3146,3148,3150,3152,3154,3156],{"class":223,"line":764},[221,3139,2715],{"class":1372},[221,3141,209],{"class":245},[221,3143,2720],{"class":1306},[221,3145,1262],{"class":245},[221,3147,1265],{"class":238},[221,3149,1299],{"class":245},[221,3151,2704],{"class":238},[221,3153,1299],{"class":245},[221,3155,3129],{"class":238},[221,3157,2735],{"class":245},[221,3159,3160,3162,3164,3166,3168,3170],{"class":223,"line":776},[221,3161,2740],{"class":245},[221,3163,2968],{"class":238},[221,3165,1299],{"class":245},[221,3167,1586],{"class":238},[221,3169,2749],{"class":245},[221,3171,1562],{"class":255},[221,3173,3174,3176],{"class":223,"line":781},[221,3175,1567],{"class":255},[221,3177,1570],{"class":245},[221,3179,3180],{"class":223,"line":808},[221,3181,1576],{"class":245},[221,3183,3184,3186,3188,3190,3192,3194,3196,3198,3201,3203],{"class":223,"line":835},[221,3185,1581],{"class":1372},[221,3187,1376],{"class":255},[221,3189,1586],{"class":1372},[221,3191,209],{"class":245},[221,3193,1591],{"class":1306},[221,3195,1215],{"class":245},[221,3197,1385],{"class":282},[221,3199,3200],{"class":1388},"tch",[221,3202,1385],{"class":282},[221,3204,2785],{"class":245},[221,3206,3207,3209,3211,3213,3215,3217],{"class":223,"line":862},[221,3208,2791],{"class":1372},[221,3210,1376],{"class":255},[221,3212,3047],{"class":1372},[221,3214,209],{"class":245},[221,3216,1146],{"class":1372},[221,3218,1323],{"class":245},[221,3220,3221,3223,3225,3227,3229,3231],{"class":223,"line":891},[221,3222,3042],{"class":1372},[221,3224,1376],{"class":255},[221,3226,3047],{"class":1372},[221,3228,209],{"class":245},[221,3230,2800],{"class":1372},[221,3232,1323],{"class":245},[221,3234,3235,3238,3240,3242,3245,3247,3249,3251,3253,3255,3257,3259,3261],{"class":223,"line":918},[221,3236,3237],{"class":1372},"                FullName ",[221,3239,1376],{"class":255},[221,3241,1993],{"class":282},[221,3243,3244],{"class":1388},"Teacher ",[221,3246,1999],{"class":282},[221,3248,1473],{"class":1372},[221,3250,209],{"class":282},[221,3252,2825],{"class":1372},[221,3254,2828],{"class":255},[221,3256,2832],{"class":2831},[221,3258,2019],{"class":282},[221,3260,1385],{"class":282},[221,3262,1323],{"class":245},[221,3264,3265,3267,3269,3271,3273,3275],{"class":223,"line":941},[221,3266,1652],{"class":1372},[221,3268,1376],{"class":255},[221,3270,1586],{"class":1372},[221,3272,209],{"class":245},[221,3274,1661],{"class":1372},[221,3276,1323],{"class":245},[221,3278,3279],{"class":223,"line":962},[221,3280,1686],{"class":245},[221,3282,3283],{"class":223,"line":967},[221,3284,2905],{"class":245},[176,3286,3287,3290],{},[206,3288,3289],{},"Every Add re-anchors to its own output",", so a chain reads top to bottom:",[1721,3292,3293,3409],{},[211,3294,3297],{"className":213,"code":3295,"filename":1726,"highlights":3296,"language":216,"meta":217,"style":217},"await TestBiome\n    .Start(out _)\n    .AddOne(Blueprints.District, out var district)\n    .AddOne(Blueprints.School, out var school) \u002F\u002F parent: district\n    .AddOne(Blueprints.Class, out var algebra) \u002F\u002F parent: school\n    .BuildAsync();\n",[289,317],[185,3298,3299,3305,3319,3343,3371,3401],{"__ignoreMap":217},[221,3300,3301,3303],{"class":223,"line":224},[221,3302,2269],{"class":255},[221,3304,1242],{"class":1372},[221,3306,3307,3309,3311,3313,3315,3317],{"class":223,"line":242},[221,3308,2276],{"class":245},[221,3310,1408],{"class":1306},[221,3312,1215],{"class":245},[221,3314,1792],{"class":227},[221,3316,2285],{"class":1372},[221,3318,1800],{"class":245},[221,3320,3321,3323,3325,3327,3329,3331,3333,3335,3337,3339,3341],{"class":223,"line":249},[221,3322,2276],{"class":245},[221,3324,2295],{"class":1306},[221,3326,1215],{"class":245},[221,3328,36],{"class":1372},[221,3330,209],{"class":245},[221,3332,187],{"class":1372},[221,3334,1299],{"class":245},[221,3336,2308],{"class":227},[221,3338,1795],{"class":234},[221,3340,1817],{"class":238},[221,3342,1800],{"class":245},[221,3344,3346,3348,3350,3352,3354,3356,3358,3360,3362,3364,3366,3368],{"class":3345,"line":289},[223,1202],[221,3347,2276],{"class":245},[221,3349,2295],{"class":1306},[221,3351,1215],{"class":245},[221,3353,36],{"class":1372},[221,3355,209],{"class":245},[221,3357,191],{"class":1372},[221,3359,1299],{"class":245},[221,3361,2308],{"class":227},[221,3363,1795],{"class":234},[221,3365,3047],{"class":238},[221,3367,2749],{"class":245},[221,3369,3370],{"class":887}," \u002F\u002F parent: district\n",[221,3372,3374,3376,3378,3380,3382,3384,3387,3389,3391,3393,3396,3398],{"class":3373,"line":317},[223,1202],[221,3375,2276],{"class":245},[221,3377,2295],{"class":1306},[221,3379,1215],{"class":245},[221,3381,36],{"class":1372},[221,3383,209],{"class":245},[221,3385,3386],{"class":1372},"Class",[221,3388,1299],{"class":245},[221,3390,2308],{"class":227},[221,3392,1795],{"class":234},[221,3394,3395],{"class":238}," algebra",[221,3397,2749],{"class":245},[221,3399,3400],{"class":887}," \u002F\u002F parent: school\n",[221,3402,3403,3405,3407],{"class":223,"line":345},[221,3404,2276],{"class":245},[221,3406,1826],{"class":1306},[221,3408,1279],{"class":245},[1879,3410,3411],{"label":1881,"name":1882},[211,3412,3414],{"className":213,"code":3413,"language":216,"meta":217,"style":217},"var now = DateTimeOffset.UtcNow;\n\nvar district = new District\n{\n    Id = $\"dist_{Guid.CreateVersion7():N}\",\n    Name = \"Riverside Unified\",\n    TimeZoneId = \"America\u002FChicago\",\n    CreatedAtUtc = now,\n    UpdatedAtUtc = now,\n};\nvar school = new School\n{\n    Id = $\"sch_{Guid.CreateVersion7():N}\",\n    DistrictId = district.Id,\n    Name = \"School 1\",\n    Code = \"S1\",\n    CreatedAtUtc = now,\n    UpdatedAtUtc = now,\n};\nvar algebra = new SchoolClass\n{\n    Id = $\"cls_{Guid.CreateVersion7():N}\",\n    DistrictId = district.Id,\n    SchoolId = school.Id,\n    Name = \"Algebra I\",\n    Capacity = 25,\n    CreatedAtUtc = now,\n};\n",[185,3415,3416,3433,3437,3449,3453,3484,3499,3514,3525,3536,3541,3553,3557,3588,3603,3618,3634,3644,3654,3658,3670,3674,3705,3719,3734,3748,3759,3769],{"__ignoreMap":217},[221,3417,3418,3421,3423,3425,3427,3429,3431],{"class":223,"line":224},[221,3419,3420],{"class":234},"var",[221,3422,1955],{"class":238},[221,3424,279],{"class":255},[221,3426,374],{"class":1372},[221,3428,209],{"class":245},[221,3430,1964],{"class":1372},[221,3432,286],{"class":245},[221,3434,3435],{"class":223,"line":242},[221,3436,424],{"emptyLinePlaceholder":423},[221,3438,3439,3441,3443,3445,3447],{"class":223,"line":249},[221,3440,3420],{"class":234},[221,3442,1817],{"class":238},[221,3444,279],{"class":255},[221,3446,1276],{"class":255},[221,3448,239],{"class":238},[221,3450,3451],{"class":223,"line":289},[221,3452,246],{"class":245},[221,3454,3455,3458,3460,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482],{"class":223,"line":317},[221,3456,3457],{"class":1372},"    Id ",[221,3459,1376],{"class":255},[221,3461,1993],{"class":282},[221,3463,1996],{"class":1388},[221,3465,1999],{"class":282},[221,3467,2002],{"class":1372},[221,3469,209],{"class":282},[221,3471,2007],{"class":1306},[221,3473,2010],{"class":282},[221,3475,2013],{"class":255},[221,3477,2016],{"class":1372},[221,3479,2019],{"class":282},[221,3481,1385],{"class":282},[221,3483,1323],{"class":245},[221,3485,3486,3489,3491,3493,3495,3497],{"class":223,"line":345},[221,3487,3488],{"class":1372},"    Name ",[221,3490,1376],{"class":255},[221,3492,1617],{"class":282},[221,3494,1620],{"class":1388},[221,3496,1385],{"class":282},[221,3498,1323],{"class":245},[221,3500,3501,3504,3506,3508,3510,3512],{"class":223,"line":369},[221,3502,3503],{"class":1372},"    TimeZoneId ",[221,3505,1376],{"class":255},[221,3507,1617],{"class":282},[221,3509,1389],{"class":1388},[221,3511,1385],{"class":282},[221,3513,1323],{"class":245},[221,3515,3516,3519,3521,3523],{"class":223,"line":392},[221,3517,3518],{"class":1372},"    CreatedAtUtc ",[221,3520,1376],{"class":255},[221,3522,1955],{"class":1372},[221,3524,1323],{"class":245},[221,3526,3527,3530,3532,3534],{"class":223,"line":414},[221,3528,3529],{"class":1372},"    UpdatedAtUtc ",[221,3531,1376],{"class":255},[221,3533,1955],{"class":1372},[221,3535,1323],{"class":245},[221,3537,3538],{"class":223,"line":420},[221,3539,3540],{"class":245},"};\n",[221,3542,3543,3545,3547,3549,3551],{"class":223,"line":427},[221,3544,3420],{"class":234},[221,3546,3047],{"class":238},[221,3548,279],{"class":255},[221,3550,1276],{"class":255},[221,3552,436],{"class":238},[221,3554,3555],{"class":223,"line":439},[221,3556,246],{"class":245},[221,3558,3559,3561,3563,3565,3568,3570,3572,3574,3576,3578,3580,3582,3584,3586],{"class":223,"line":444},[221,3560,3457],{"class":1372},[221,3562,1376],{"class":255},[221,3564,1993],{"class":282},[221,3566,3567],{"class":1388},"sch_",[221,3569,1999],{"class":282},[221,3571,2002],{"class":1372},[221,3573,209],{"class":282},[221,3575,2007],{"class":1306},[221,3577,2010],{"class":282},[221,3579,2013],{"class":255},[221,3581,2016],{"class":1372},[221,3583,2019],{"class":282},[221,3585,1385],{"class":282},[221,3587,1323],{"class":245},[221,3589,3590,3593,3595,3597,3599,3601],{"class":223,"line":471},[221,3591,3592],{"class":1372},"    DistrictId ",[221,3594,1376],{"class":255},[221,3596,1817],{"class":1372},[221,3598,209],{"class":245},[221,3600,2800],{"class":1372},[221,3602,1323],{"class":245},[221,3604,3605,3607,3609,3611,3614,3616],{"class":223,"line":499},[221,3606,3488],{"class":1372},[221,3608,1376],{"class":255},[221,3610,1617],{"class":282},[221,3612,3613],{"class":1388},"School 1",[221,3615,1385],{"class":282},[221,3617,1323],{"class":245},[221,3619,3620,3623,3625,3627,3630,3632],{"class":223,"line":526},[221,3621,3622],{"class":1372},"    Code ",[221,3624,1376],{"class":255},[221,3626,1617],{"class":282},[221,3628,3629],{"class":1388},"S1",[221,3631,1385],{"class":282},[221,3633,1323],{"class":245},[221,3635,3636,3638,3640,3642],{"class":223,"line":554},[221,3637,3518],{"class":1372},[221,3639,1376],{"class":255},[221,3641,1955],{"class":1372},[221,3643,1323],{"class":245},[221,3645,3646,3648,3650,3652],{"class":223,"line":575},[221,3647,3529],{"class":1372},[221,3649,1376],{"class":255},[221,3651,1955],{"class":1372},[221,3653,1323],{"class":245},[221,3655,3656],{"class":223,"line":596},[221,3657,3540],{"class":245},[221,3659,3660,3662,3664,3666,3668],{"class":223,"line":601},[221,3661,3420],{"class":234},[221,3663,3395],{"class":238},[221,3665,279],{"class":255},[221,3667,1276],{"class":255},[221,3669,773],{"class":238},[221,3671,3672],{"class":223,"line":606},[221,3673,246],{"class":245},[221,3675,3676,3678,3680,3682,3685,3687,3689,3691,3693,3695,3697,3699,3701,3703],{"class":223,"line":618},[221,3677,3457],{"class":1372},[221,3679,1376],{"class":255},[221,3681,1993],{"class":282},[221,3683,3684],{"class":1388},"cls_",[221,3686,1999],{"class":282},[221,3688,2002],{"class":1372},[221,3690,209],{"class":282},[221,3692,2007],{"class":1306},[221,3694,2010],{"class":282},[221,3696,2013],{"class":255},[221,3698,2016],{"class":1372},[221,3700,2019],{"class":282},[221,3702,1385],{"class":282},[221,3704,1323],{"class":245},[221,3706,3707,3709,3711,3713,3715,3717],{"class":223,"line":623},[221,3708,3592],{"class":1372},[221,3710,1376],{"class":255},[221,3712,1817],{"class":1372},[221,3714,209],{"class":245},[221,3716,2800],{"class":1372},[221,3718,1323],{"class":245},[221,3720,3721,3724,3726,3728,3730,3732],{"class":223,"line":650},[221,3722,3723],{"class":1372},"    SchoolId ",[221,3725,1376],{"class":255},[221,3727,3047],{"class":1372},[221,3729,209],{"class":245},[221,3731,2800],{"class":1372},[221,3733,1323],{"class":245},[221,3735,3736,3738,3740,3742,3744,3746],{"class":223,"line":677},[221,3737,3488],{"class":1372},[221,3739,1376],{"class":255},[221,3741,1617],{"class":282},[221,3743,3064],{"class":1388},[221,3745,1385],{"class":282},[221,3747,1323],{"class":245},[221,3749,3750,3753,3755,3757],{"class":223,"line":705},[221,3751,3752],{"class":1372},"    Capacity ",[221,3754,1376],{"class":255},[221,3756,3078],{"class":2831},[221,3758,1323],{"class":245},[221,3760,3761,3763,3765,3767],{"class":223,"line":733},[221,3762,3518],{"class":1372},[221,3764,1376],{"class":255},[221,3766,1955],{"class":1372},[221,3768,1323],{"class":245},[221,3770,3771],{"class":223,"line":754},[221,3772,3540],{"class":245},[1446,3774,3775],{},[176,3776,3777,3778,3781,3782,3784],{},"A child Add ",[206,3779,3780],{},"compiles only when the current anchor is its parent type",". Adding a ",[185,3783,3386],{}," straight after a district is a compile error.",[176,3786,3787,3790,3791,3794],{},[185,3788,3789],{},".Under(x)"," jumps back to an earlier output, so one parent can have several kinds of children. Teachers appear here only because this test is about a class with an assigned teacher; most class tests leave ",[185,3792,3793],{},"TeacherId"," empty.",[211,3796,3800],{"className":213,"code":3797,"filename":3798,"highlights":3799,"language":216,"meta":217,"style":217},"await TestBiome\n    .Start(out _)\n    .AddOne(Blueprints.District, out _)\n    .AddOne(Blueprints.School, out var school)\n    .AddOne(Blueprints.Teacher, out var teacher) \u002F\u002F anchor: the teacher\n    .Under(school) \u002F\u002F back to the school\n    .AddOne(Blueprints.Class, out var algebra, c => c.TeacherId = teacher.Id)\n    .BuildAsync();\n","BranchTests.cs",[345,369],[185,3801,3802,3808,3822,3844,3868,3896,3913,3960],{"__ignoreMap":217},[221,3803,3804,3806],{"class":223,"line":224},[221,3805,2269],{"class":255},[221,3807,1242],{"class":1372},[221,3809,3810,3812,3814,3816,3818,3820],{"class":223,"line":242},[221,3811,2276],{"class":245},[221,3813,1408],{"class":1306},[221,3815,1215],{"class":245},[221,3817,1792],{"class":227},[221,3819,2285],{"class":1372},[221,3821,1800],{"class":245},[221,3823,3824,3826,3828,3830,3832,3834,3836,3838,3840,3842],{"class":223,"line":249},[221,3825,2276],{"class":245},[221,3827,2295],{"class":1306},[221,3829,1215],{"class":245},[221,3831,36],{"class":1372},[221,3833,209],{"class":245},[221,3835,187],{"class":1372},[221,3837,1299],{"class":245},[221,3839,2308],{"class":227},[221,3841,2285],{"class":1372},[221,3843,1800],{"class":245},[221,3845,3846,3848,3850,3852,3854,3856,3858,3860,3862,3864,3866],{"class":223,"line":289},[221,3847,2276],{"class":245},[221,3849,2295],{"class":1306},[221,3851,1215],{"class":245},[221,3853,36],{"class":1372},[221,3855,209],{"class":245},[221,3857,191],{"class":1372},[221,3859,1299],{"class":245},[221,3861,2308],{"class":227},[221,3863,1795],{"class":234},[221,3865,3047],{"class":238},[221,3867,1800],{"class":245},[221,3869,3870,3872,3874,3876,3878,3880,3882,3884,3886,3888,3891,3893],{"class":223,"line":317},[221,3871,2276],{"class":245},[221,3873,2295],{"class":1306},[221,3875,1215],{"class":245},[221,3877,36],{"class":1372},[221,3879,209],{"class":245},[221,3881,199],{"class":1372},[221,3883,1299],{"class":245},[221,3885,2308],{"class":227},[221,3887,1795],{"class":234},[221,3889,3890],{"class":238}," teacher",[221,3892,2749],{"class":245},[221,3894,3895],{"class":887}," \u002F\u002F anchor: the teacher\n",[221,3897,3899,3901,3904,3906,3908,3910],{"class":3898,"line":345},[223,1202],[221,3900,2276],{"class":245},[221,3902,3903],{"class":1306},"Under",[221,3905,1215],{"class":245},[221,3907,2968],{"class":1372},[221,3909,2749],{"class":245},[221,3911,3912],{"class":887}," \u002F\u002F back to the school\n",[221,3914,3916,3918,3920,3922,3924,3926,3928,3930,3932,3934,3936,3938,3941,3943,3945,3947,3950,3952,3954,3956,3958],{"class":3915,"line":369},[223,1202],[221,3917,2276],{"class":245},[221,3919,2295],{"class":1306},[221,3921,1215],{"class":245},[221,3923,36],{"class":1372},[221,3925,209],{"class":245},[221,3927,3386],{"class":1372},[221,3929,1299],{"class":245},[221,3931,2308],{"class":227},[221,3933,1795],{"class":234},[221,3935,3395],{"class":238},[221,3937,1299],{"class":245},[221,3939,3940],{"class":238}," c",[221,3942,2321],{"class":255},[221,3944,3940],{"class":1372},[221,3946,209],{"class":245},[221,3948,3949],{"class":1372},"TeacherId ",[221,3951,1376],{"class":255},[221,3953,3890],{"class":1372},[221,3955,209],{"class":245},[221,3957,2800],{"class":1372},[221,3959,1800],{"class":245},[221,3961,3962,3964,3966],{"class":223,"line":392},[221,3963,2276],{"class":245},[221,3965,1826],{"class":1306},[221,3967,1279],{"class":245},[176,3969,3970,3971,3974],{},"Students belong to a class. Here is a student blueprint, then a fan-out. ",[206,3972,3973],{},"Fan-out is per parent",": each customizer or count runs once for every parent.",[211,3976,3979],{"className":213,"code":3977,"filename":1478,"highlights":3978,"language":216,"meta":217,"style":217},"public static readonly ChildBlueprint\u003CSchoolSeed, SchoolClass, Student> Student =\n    Blueprint.ChildOf\u003CSchoolSeed, SchoolClass, Student>(\n        (schoolClass, ctx) =>\n            new()\n            {\n                Id = ctx.NewId(\"stu\"),\n                DistrictId = schoolClass.DistrictId,\n                ClassId = schoolClass.Id,\n                Seat = ctx.Index + 1, \u002F\u002F position within this Add\n                FullName = $\"Student {ctx.Index + 1}\",\n                EnrolledAtUtc = ctx.Now,\n            }\n    );\n",[414],[185,3980,3981,4010,4032,4047,4053,4057,4080,4095,4110,4134,4163,4178,4182],{"__ignoreMap":217},[221,3982,3983,3985,3987,3989,3991,3993,3995,3997,3999,4001,4004,4006,4008],{"class":223,"line":224},[221,3984,228],{"class":227},[221,3986,1234],{"class":227},[221,3988,1256],{"class":227},[221,3990,2691],{"class":238},[221,3992,1262],{"class":245},[221,3994,1265],{"class":238},[221,3996,1299],{"class":245},[221,3998,2932],{"class":238},[221,4000,1299],{"class":245},[221,4002,4003],{"class":238}," Student",[221,4005,1268],{"class":245},[221,4007,4003],{"class":238},[221,4009,1536],{"class":255},[221,4011,4012,4014,4016,4018,4020,4022,4024,4026,4028,4030],{"class":223,"line":242},[221,4013,2715],{"class":1372},[221,4015,209],{"class":245},[221,4017,2720],{"class":1306},[221,4019,1262],{"class":245},[221,4021,1265],{"class":238},[221,4023,1299],{"class":245},[221,4025,2932],{"class":238},[221,4027,1299],{"class":245},[221,4029,4003],{"class":238},[221,4031,2735],{"class":245},[221,4033,4034,4036,4039,4041,4043,4045],{"class":223,"line":249},[221,4035,2740],{"class":245},[221,4037,4038],{"class":238},"schoolClass",[221,4040,1299],{"class":245},[221,4042,1586],{"class":238},[221,4044,2749],{"class":245},[221,4046,1562],{"class":255},[221,4048,4049,4051],{"class":223,"line":289},[221,4050,1567],{"class":255},[221,4052,1570],{"class":245},[221,4054,4055],{"class":223,"line":317},[221,4056,1576],{"class":245},[221,4058,4059,4061,4063,4065,4067,4069,4071,4073,4076,4078],{"class":223,"line":345},[221,4060,1581],{"class":1372},[221,4062,1376],{"class":255},[221,4064,1586],{"class":1372},[221,4066,209],{"class":245},[221,4068,1591],{"class":1306},[221,4070,1215],{"class":245},[221,4072,1385],{"class":282},[221,4074,4075],{"class":1388},"stu",[221,4077,1385],{"class":282},[221,4079,2785],{"class":245},[221,4081,4082,4084,4086,4089,4091,4093],{"class":223,"line":369},[221,4083,2791],{"class":1372},[221,4085,1376],{"class":255},[221,4087,4088],{"class":1372}," schoolClass",[221,4090,209],{"class":245},[221,4092,1146],{"class":1372},[221,4094,1323],{"class":245},[221,4096,4097,4100,4102,4104,4106,4108],{"class":223,"line":392},[221,4098,4099],{"class":1372},"                ClassId ",[221,4101,1376],{"class":255},[221,4103,4088],{"class":1372},[221,4105,209],{"class":245},[221,4107,2800],{"class":1372},[221,4109,1323],{"class":245},[221,4111,4113,4116,4118,4120,4122,4125,4127,4129,4131],{"class":4112,"line":414},[223,1202],[221,4114,4115],{"class":1372},"                Seat ",[221,4117,1376],{"class":255},[221,4119,1586],{"class":1372},[221,4121,209],{"class":245},[221,4123,4124],{"class":1372},"Index ",[221,4126,2438],{"class":255},[221,4128,2832],{"class":2831},[221,4130,1299],{"class":245},[221,4132,4133],{"class":887}," \u002F\u002F position within this Add\n",[221,4135,4136,4138,4140,4142,4145,4147,4149,4151,4153,4155,4157,4159,4161],{"class":223,"line":420},[221,4137,3237],{"class":1372},[221,4139,1376],{"class":255},[221,4141,1993],{"class":282},[221,4143,4144],{"class":1388},"Student ",[221,4146,1999],{"class":282},[221,4148,1473],{"class":1372},[221,4150,209],{"class":282},[221,4152,2825],{"class":1372},[221,4154,2828],{"class":255},[221,4156,2832],{"class":2831},[221,4158,2019],{"class":282},[221,4160,1385],{"class":282},[221,4162,1323],{"class":245},[221,4164,4165,4168,4170,4172,4174,4176],{"class":223,"line":427},[221,4166,4167],{"class":1372},"                EnrolledAtUtc ",[221,4169,1376],{"class":255},[221,4171,1586],{"class":1372},[221,4173,209],{"class":245},[221,4175,1661],{"class":1372},[221,4177,1323],{"class":245},[221,4179,4180],{"class":223,"line":439},[221,4181,1686],{"class":245},[221,4183,4184],{"class":223,"line":444},[221,4185,2905],{"class":245},[211,4187,4191],{"className":213,"code":4188,"filename":4189,"highlights":4190,"language":216,"meta":217,"style":217},"await TestBiome\n    .Start(out _)\n    .AddOne(Blueprints.District, out _)\n    .AddOne(Blueprints.School, out _)\n    .Add(Blueprints.Class, out var classes, 2)\n    \u002F\u002F 3 per class → 6 students, ordered by parent\n    .Add(Blueprints.Student, out var students, 3)\n    .BuildAsync();\n","FanOutTests.cs",[317,369],[185,4192,4193,4199,4213,4235,4257,4288,4293,4324],{"__ignoreMap":217},[221,4194,4195,4197],{"class":223,"line":224},[221,4196,2269],{"class":255},[221,4198,1242],{"class":1372},[221,4200,4201,4203,4205,4207,4209,4211],{"class":223,"line":242},[221,4202,2276],{"class":245},[221,4204,1408],{"class":1306},[221,4206,1215],{"class":245},[221,4208,1792],{"class":227},[221,4210,2285],{"class":1372},[221,4212,1800],{"class":245},[221,4214,4215,4217,4219,4221,4223,4225,4227,4229,4231,4233],{"class":223,"line":249},[221,4216,2276],{"class":245},[221,4218,2295],{"class":1306},[221,4220,1215],{"class":245},[221,4222,36],{"class":1372},[221,4224,209],{"class":245},[221,4226,187],{"class":1372},[221,4228,1299],{"class":245},[221,4230,2308],{"class":227},[221,4232,2285],{"class":1372},[221,4234,1800],{"class":245},[221,4236,4237,4239,4241,4243,4245,4247,4249,4251,4253,4255],{"class":223,"line":289},[221,4238,2276],{"class":245},[221,4240,2295],{"class":1306},[221,4242,1215],{"class":245},[221,4244,36],{"class":1372},[221,4246,209],{"class":245},[221,4248,191],{"class":1372},[221,4250,1299],{"class":245},[221,4252,2308],{"class":227},[221,4254,2285],{"class":1372},[221,4256,1800],{"class":245},[221,4258,4260,4262,4264,4266,4268,4270,4272,4274,4276,4278,4281,4283,4286],{"class":4259,"line":317},[223,1202],[221,4261,2276],{"class":245},[221,4263,2343],{"class":1306},[221,4265,1215],{"class":245},[221,4267,36],{"class":1372},[221,4269,209],{"class":245},[221,4271,3386],{"class":1372},[221,4273,1299],{"class":245},[221,4275,2308],{"class":227},[221,4277,1795],{"class":234},[221,4279,4280],{"class":238}," classes",[221,4282,1299],{"class":245},[221,4284,4285],{"class":2831}," 2",[221,4287,1800],{"class":245},[221,4289,4290],{"class":223,"line":345},[221,4291,4292],{"class":887},"    \u002F\u002F 3 per class → 6 students, ordered by parent\n",[221,4294,4296,4298,4300,4302,4304,4306,4308,4310,4312,4314,4317,4319,4322],{"class":4295,"line":369},[223,1202],[221,4297,2276],{"class":245},[221,4299,2343],{"class":1306},[221,4301,1215],{"class":245},[221,4303,36],{"class":1372},[221,4305,209],{"class":245},[221,4307,203],{"class":1372},[221,4309,1299],{"class":245},[221,4311,2308],{"class":227},[221,4313,1795],{"class":234},[221,4315,4316],{"class":238}," students",[221,4318,1299],{"class":245},[221,4320,4321],{"class":2831}," 3",[221,4323,1800],{"class":245},[221,4325,4326,4328,4330],{"class":223,"line":392},[221,4327,2276],{"class":245},[221,4329,1826],{"class":1306},[221,4331,1279],{"class":245},[1149,4333,4335],{"id":4334},"_6-sequences-then-save","6. Sequences, then save",[176,4337,4338,4339,4342],{},"Numbering by position works for one Add, but restarts when you add more entities later. A class-capacity test might add students in two calls, and the second would repeat seat 1. Declare a ",[206,4340,4341],{},"sequence"," so numbering continues across calls. Its state lives in each session, keeping tests independent. Declare the sequence above the blueprint that uses it, because static fields initialize in order.",[211,4344,4347],{"className":213,"code":4345,"filename":1478,"highlights":4346,"language":216,"meta":217,"style":217},"public static readonly Sequence\u003Cint> Seats = Sequence\n    .Of(1, n => n + 1)\n    .PerParent(); \u002F\u002F restarts for each class\n\npublic static readonly ChildBlueprint\u003CSchoolSeed, SchoolClass, Student> Student =\n    Blueprint\n        .ChildOf\u003CSchoolSeed, SchoolClass, Student>(\n            (schoolClass, ctx) =>\n                new()\n                {\n                    Id = ctx.NewId(\"stu\"),\n                    DistrictId = schoolClass.DistrictId,\n                    ClassId = schoolClass.Id,\n                    EnrolledAtUtc = ctx.Now,\n                }\n        )\n        .Derive(s => s.Seat, Seats)\n        .Derive(s => s.FullName, (s, _) => $\"Student {s.Seat}\");\n",[224,242,249,554,575],[185,4348,4349,4376,4405,4419,4423,4451,4456,4477,4492,4499,4504,4527,4542,4557,4572,4577,4582,4611],{"__ignoreMap":217},[221,4350,4352,4354,4356,4358,4361,4363,4366,4368,4371,4373],{"class":4351,"line":224},[223,1202],[221,4353,228],{"class":227},[221,4355,1234],{"class":227},[221,4357,1256],{"class":227},[221,4359,4360],{"class":238}," Sequence",[221,4362,1262],{"class":245},[221,4364,4365],{"class":255},"int",[221,4367,1268],{"class":245},[221,4369,4370],{"class":238}," Seats",[221,4372,279],{"class":255},[221,4374,4375],{"class":1372}," Sequence\n",[221,4377,4379,4381,4384,4386,4389,4391,4394,4396,4399,4401,4403],{"class":4378,"line":242},[223,1202],[221,4380,2276],{"class":245},[221,4382,4383],{"class":1306},"Of",[221,4385,1215],{"class":245},[221,4387,4388],{"class":2831},"1",[221,4390,1299],{"class":245},[221,4392,4393],{"class":238}," n",[221,4395,2321],{"class":255},[221,4397,4398],{"class":1372}," n ",[221,4400,2438],{"class":255},[221,4402,2832],{"class":2831},[221,4404,1800],{"class":245},[221,4406,4408,4410,4413,4416],{"class":4407,"line":249},[223,1202],[221,4409,2276],{"class":245},[221,4411,4412],{"class":1306},"PerParent",[221,4414,4415],{"class":245},"();",[221,4417,4418],{"class":887}," \u002F\u002F restarts for each class\n",[221,4420,4421],{"class":223,"line":289},[221,4422,424],{"emptyLinePlaceholder":423},[221,4424,4425,4427,4429,4431,4433,4435,4437,4439,4441,4443,4445,4447,4449],{"class":223,"line":317},[221,4426,228],{"class":227},[221,4428,1234],{"class":227},[221,4430,1256],{"class":227},[221,4432,2691],{"class":238},[221,4434,1262],{"class":245},[221,4436,1265],{"class":238},[221,4438,1299],{"class":245},[221,4440,2932],{"class":238},[221,4442,1299],{"class":245},[221,4444,4003],{"class":238},[221,4446,1268],{"class":245},[221,4448,4003],{"class":238},[221,4450,1536],{"class":255},[221,4452,4453],{"class":223,"line":345},[221,4454,4455],{"class":1372},"    Blueprint\n",[221,4457,4458,4461,4463,4465,4467,4469,4471,4473,4475],{"class":223,"line":369},[221,4459,4460],{"class":245},"        .",[221,4462,2720],{"class":1306},[221,4464,1262],{"class":245},[221,4466,1265],{"class":238},[221,4468,1299],{"class":245},[221,4470,2932],{"class":238},[221,4472,1299],{"class":245},[221,4474,4003],{"class":238},[221,4476,2735],{"class":245},[221,4478,4479,4482,4484,4486,4488,4490],{"class":223,"line":392},[221,4480,4481],{"class":245},"            (",[221,4483,4038],{"class":238},[221,4485,1299],{"class":245},[221,4487,1586],{"class":238},[221,4489,2749],{"class":245},[221,4491,1562],{"class":255},[221,4493,4494,4497],{"class":223,"line":414},[221,4495,4496],{"class":255},"                new",[221,4498,1570],{"class":245},[221,4500,4501],{"class":223,"line":420},[221,4502,4503],{"class":245},"                {\n",[221,4505,4506,4509,4511,4513,4515,4517,4519,4521,4523,4525],{"class":223,"line":427},[221,4507,4508],{"class":1372},"                    Id ",[221,4510,1376],{"class":255},[221,4512,1586],{"class":1372},[221,4514,209],{"class":245},[221,4516,1591],{"class":1306},[221,4518,1215],{"class":245},[221,4520,1385],{"class":282},[221,4522,4075],{"class":1388},[221,4524,1385],{"class":282},[221,4526,2785],{"class":245},[221,4528,4529,4532,4534,4536,4538,4540],{"class":223,"line":439},[221,4530,4531],{"class":1372},"                    DistrictId ",[221,4533,1376],{"class":255},[221,4535,4088],{"class":1372},[221,4537,209],{"class":245},[221,4539,1146],{"class":1372},[221,4541,1323],{"class":245},[221,4543,4544,4547,4549,4551,4553,4555],{"class":223,"line":444},[221,4545,4546],{"class":1372},"                    ClassId ",[221,4548,1376],{"class":255},[221,4550,4088],{"class":1372},[221,4552,209],{"class":245},[221,4554,2800],{"class":1372},[221,4556,1323],{"class":245},[221,4558,4559,4562,4564,4566,4568,4570],{"class":223,"line":471},[221,4560,4561],{"class":1372},"                    EnrolledAtUtc ",[221,4563,1376],{"class":255},[221,4565,1586],{"class":1372},[221,4567,209],{"class":245},[221,4569,1661],{"class":1372},[221,4571,1323],{"class":245},[221,4573,4574],{"class":223,"line":499},[221,4575,4576],{"class":245},"                }\n",[221,4578,4579],{"class":223,"line":526},[221,4580,4581],{"class":245},"        )\n",[221,4583,4585,4587,4590,4592,4595,4597,4600,4602,4605,4607,4609],{"class":4584,"line":554},[223,1202],[221,4586,4460],{"class":245},[221,4588,4589],{"class":1306},"Derive",[221,4591,1215],{"class":245},[221,4593,4594],{"class":238},"s",[221,4596,2321],{"class":255},[221,4598,4599],{"class":1372}," s",[221,4601,209],{"class":245},[221,4603,4604],{"class":1372},"Seat",[221,4606,1299],{"class":245},[221,4608,4370],{"class":1372},[221,4610,1800],{"class":245},[221,4612,4614,4616,4618,4620,4622,4624,4626,4628,4631,4633,4636,4638,4640,4642,4644,4646,4648,4650,4652,4654,4656,4658,4660,4662],{"class":4613,"line":575},[223,1202],[221,4615,4460],{"class":245},[221,4617,4589],{"class":1306},[221,4619,1215],{"class":245},[221,4621,4594],{"class":238},[221,4623,2321],{"class":255},[221,4625,4599],{"class":1372},[221,4627,209],{"class":245},[221,4629,4630],{"class":1372},"FullName",[221,4632,1299],{"class":245},[221,4634,4635],{"class":245}," (",[221,4637,4594],{"class":238},[221,4639,1299],{"class":245},[221,4641,2285],{"class":238},[221,4643,2749],{"class":245},[221,4645,2321],{"class":255},[221,4647,1993],{"class":282},[221,4649,4144],{"class":1388},[221,4651,1999],{"class":282},[221,4653,4594],{"class":1372},[221,4655,209],{"class":282},[221,4657,4604],{"class":1372},[221,4659,2019],{"class":282},[221,4661,1385],{"class":282},[221,4663,1223],{"class":245},[176,4665,4666,4668,4669,4672,4673,4675,4676,4679,4680,4683],{},[185,4667,4589],{}," fills a property ",[206,4670,4671],{},"only while it is unset",", so a test that sets ",[185,4674,4604],{}," itself keeps that value. After ",[185,4677,4678],{},"AddStudents"," the anchor is the new students, so use ",[185,4681,4682],{},".Under(...)"," to add more to the same class:",[211,4685,4689],{"className":213,"code":4686,"filename":4687,"highlights":4688,"language":216,"meta":217,"style":217},"await TestBiome\n    .Start(out _)\n    .AddDistrict(out _)\n    .AddSchool(out _)\n    .AddClass(out var schoolClass, c => c.Capacity = 3)\n    .AddStudents(out var first, 2) \u002F\u002F seats 1, 2\n    .Under(schoolClass)\n    .AddStudents(out var last, 1) \u002F\u002F seat 3, not 1\n    .BuildAsync();\n","SeatTests.cs",[369,392],[185,4690,4691,4697,4711,4725,4740,4774,4798,4811,4836],{"__ignoreMap":217},[221,4692,4693,4695],{"class":223,"line":224},[221,4694,2269],{"class":255},[221,4696,1242],{"class":1372},[221,4698,4699,4701,4703,4705,4707,4709],{"class":223,"line":242},[221,4700,2276],{"class":245},[221,4702,1408],{"class":1306},[221,4704,1215],{"class":245},[221,4706,1792],{"class":227},[221,4708,2285],{"class":1372},[221,4710,1800],{"class":245},[221,4712,4713,4715,4717,4719,4721,4723],{"class":223,"line":249},[221,4714,2276],{"class":245},[221,4716,1808],{"class":1306},[221,4718,1215],{"class":245},[221,4720,1792],{"class":227},[221,4722,2285],{"class":1372},[221,4724,1800],{"class":245},[221,4726,4727,4729,4732,4734,4736,4738],{"class":223,"line":289},[221,4728,2276],{"class":245},[221,4730,4731],{"class":1306},"AddSchool",[221,4733,1215],{"class":245},[221,4735,1792],{"class":227},[221,4737,2285],{"class":1372},[221,4739,1800],{"class":245},[221,4741,4742,4744,4747,4749,4751,4753,4755,4757,4759,4761,4763,4765,4768,4770,4772],{"class":223,"line":317},[221,4743,2276],{"class":245},[221,4745,4746],{"class":1306},"AddClass",[221,4748,1215],{"class":245},[221,4750,1792],{"class":227},[221,4752,1795],{"class":234},[221,4754,4088],{"class":238},[221,4756,1299],{"class":245},[221,4758,3940],{"class":238},[221,4760,2321],{"class":255},[221,4762,3940],{"class":1372},[221,4764,209],{"class":245},[221,4766,4767],{"class":1372},"Capacity ",[221,4769,1376],{"class":255},[221,4771,4321],{"class":2831},[221,4773,1800],{"class":245},[221,4775,4776,4778,4780,4782,4784,4786,4789,4791,4793,4795],{"class":223,"line":345},[221,4777,2276],{"class":245},[221,4779,4678],{"class":1306},[221,4781,1215],{"class":245},[221,4783,1792],{"class":227},[221,4785,1795],{"class":234},[221,4787,4788],{"class":238}," first",[221,4790,1299],{"class":245},[221,4792,4285],{"class":2831},[221,4794,2749],{"class":245},[221,4796,4797],{"class":887}," \u002F\u002F seats 1, 2\n",[221,4799,4801,4803,4805,4807,4809],{"class":4800,"line":369},[223,1202],[221,4802,2276],{"class":245},[221,4804,3903],{"class":1306},[221,4806,1215],{"class":245},[221,4808,4038],{"class":1372},[221,4810,1800],{"class":245},[221,4812,4814,4816,4818,4820,4822,4824,4827,4829,4831,4833],{"class":4813,"line":392},[223,1202],[221,4815,2276],{"class":245},[221,4817,4678],{"class":1306},[221,4819,1215],{"class":245},[221,4821,1792],{"class":227},[221,4823,1795],{"class":234},[221,4825,4826],{"class":238}," last",[221,4828,1299],{"class":245},[221,4830,2832],{"class":2831},[221,4832,2749],{"class":245},[221,4834,4835],{"class":887}," \u002F\u002F seat 3, not 1\n",[221,4837,4838,4840,4842],{"class":223,"line":414},[221,4839,2276],{"class":245},[221,4841,1826],{"class":1306},[221,4843,1279],{"class":245},[176,4845,4846,4847,4850,4851,4853,4854,4857,4858,4860,4861,4864],{},"This chain uses ",[206,4848,4849],{},"generated grafts",": short extension methods that name the entity rather than the blueprint. A root such as ",[185,4852,187],{}," generates methods on a generic ",[185,4855,4856],{},"BiomeBuilder\u003CSchoolSeed, TAnchor>",", so it is available from any anchor for this seed. A child such as ",[185,4859,191],{}," generates methods only for ",[185,4862,4863],{},"BiomeBuilder\u003CSchoolSeed, District[]>",", so it appears after a district.",[176,4866,4867,4868,4870,4871,4874,4875,4877,4878,4880,4881,4883,4884,4886,4887,4890],{},"Each eligible blueprint with valid names generates three overloads: singular with an optional ",[185,4869,2446],{}," customizer, plural with a count, and plural with ",[185,4872,4873],{},"params Action\u003CT>[]",". For input blueprints the customizer receives the input type, while ",[185,4876,1792],{}," holds the output. Generated methods always take ",[185,4879,1792],{},". Root grafts work once from the current anchor, with the count or customizer list setting the number of outputs. Child grafts fan out for each parent, and a child count or customizer applies to each parent. Use the core ",[185,4882,2343],{}," \u002F ",[185,4885,2295],{}," API with a blueprint for a one-off context-aware customizer. Handwrite an ",[185,4888,4889],{},"AddX"," extension only for a repeated context overload or another app-specific exception.",[211,4892,4895],{"className":213,"code":4893,"filename":4894,"language":216,"meta":217,"style":217},"await TestBiome.Start(out _)\n    .AddDistrict(out var district)\n    .AddSchool(out var school)\n    .AddClass(out var schoolClass, c => c.Capacity = 3)\n    .BuildAsync();\n","Generated graft calls",[185,4896,4897,4915,4931,4947,4979],{"__ignoreMap":217},[221,4898,4899,4901,4903,4905,4907,4909,4911,4913],{"class":223,"line":224},[221,4900,2269],{"class":255},[221,4902,2569],{"class":1372},[221,4904,209],{"class":245},[221,4906,1408],{"class":1306},[221,4908,1215],{"class":245},[221,4910,1792],{"class":227},[221,4912,2285],{"class":1372},[221,4914,1800],{"class":245},[221,4916,4917,4919,4921,4923,4925,4927,4929],{"class":223,"line":242},[221,4918,2276],{"class":245},[221,4920,1808],{"class":1306},[221,4922,1215],{"class":245},[221,4924,1792],{"class":227},[221,4926,1795],{"class":234},[221,4928,1817],{"class":238},[221,4930,1800],{"class":245},[221,4932,4933,4935,4937,4939,4941,4943,4945],{"class":223,"line":249},[221,4934,2276],{"class":245},[221,4936,4731],{"class":1306},[221,4938,1215],{"class":245},[221,4940,1792],{"class":227},[221,4942,1795],{"class":234},[221,4944,3047],{"class":238},[221,4946,1800],{"class":245},[221,4948,4949,4951,4953,4955,4957,4959,4961,4963,4965,4967,4969,4971,4973,4975,4977],{"class":223,"line":289},[221,4950,2276],{"class":245},[221,4952,4746],{"class":1306},[221,4954,1215],{"class":245},[221,4956,1792],{"class":227},[221,4958,1795],{"class":234},[221,4960,4088],{"class":238},[221,4962,1299],{"class":245},[221,4964,3940],{"class":238},[221,4966,2321],{"class":255},[221,4968,3940],{"class":1372},[221,4970,209],{"class":245},[221,4972,4767],{"class":1372},[221,4974,1376],{"class":255},[221,4976,4321],{"class":2831},[221,4978,1800],{"class":245},[221,4980,4981,4983,4985],{"class":223,"line":317},[221,4982,2276],{"class":245},[221,4984,1826],{"class":1306},[221,4986,1279],{"class":245},[176,4988,4989,4990,4992,4993,4996,4997,5000,5001,2013],{},"Finally, save with EF Core. Add a second ",[185,4991,1408],{}," overload that wraps ",[185,4994,4995],{},"EfCoreStore","; ",[185,4998,4999],{},"_db"," below is your app's ",[185,5002,5003],{},"DbContext",[211,5005,5008],{"className":213,"code":5006,"filename":1174,"highlights":5007,"language":216,"meta":217,"style":217},"using Zeeq.Biome.EntityFrameworkCore;\n\npublic static BiomeBuilder\u003CSchoolSeed, SchoolSeed> Start(\n    DbContext db,\n    out SchoolSeed seed,\n    TimeProvider? time = null\n) => Start(out seed, db.AsBiomeStore(), time);\n",[369],[185,5009,5010,5027,5031,5053,5063,5074,5087],{"__ignoreMap":217},[221,5011,5012,5014,5016,5018,5020,5022,5025],{"class":223,"line":224},[221,5013,1183],{"class":1182},[221,5015,1187],{"class":1186},[221,5017,209],{"class":245},[221,5019,1192],{"class":1186},[221,5021,209],{"class":245},[221,5023,5024],{"class":1186},"EntityFrameworkCore",[221,5026,286],{"class":245},[221,5028,5029],{"class":223,"line":242},[221,5030,424],{"emptyLinePlaceholder":423},[221,5032,5033,5035,5037,5039,5041,5043,5045,5047,5049,5051],{"class":223,"line":249},[221,5034,228],{"class":227},[221,5036,1234],{"class":227},[221,5038,1292],{"class":238},[221,5040,1262],{"class":245},[221,5042,1265],{"class":238},[221,5044,1299],{"class":245},[221,5046,1212],{"class":238},[221,5048,1268],{"class":245},[221,5050,1307],{"class":1306},[221,5052,1310],{"class":245},[221,5054,5055,5058,5061],{"class":223,"line":289},[221,5056,5057],{"class":238},"    DbContext",[221,5059,5060],{"class":238}," db",[221,5062,1323],{"class":245},[221,5064,5065,5068,5070,5072],{"class":223,"line":317},[221,5066,5067],{"class":227},"    out",[221,5069,1212],{"class":238},[221,5071,1320],{"class":238},[221,5073,1323],{"class":245},[221,5075,5076,5079,5081,5083,5085],{"class":223,"line":345},[221,5077,5078],{"class":238},"    TimeProvider",[221,5080,869],{"class":245},[221,5082,1351],{"class":238},[221,5084,279],{"class":255},[221,5086,1356],{"class":1338},[221,5088,5090,5092,5094,5096,5098,5100,5102,5104,5106,5108,5111,5114,5116],{"class":5089,"line":369},[223,1202],[221,5091,2749],{"class":245},[221,5093,2321],{"class":255},[221,5095,1307],{"class":1306},[221,5097,1215],{"class":245},[221,5099,1792],{"class":227},[221,5101,1320],{"class":1372},[221,5103,1299],{"class":245},[221,5105,5060],{"class":1372},[221,5107,209],{"class":245},[221,5109,5110],{"class":1306},"AsBiomeStore",[221,5112,5113],{"class":245},"(),",[221,5115,1351],{"class":1372},[221,5117,1223],{"class":245},[176,5119,5120],{},"A class-capacity test now saves a full class. Both versions create the same rows and write them to the same database:",[1721,5122,5123,5271],{},[211,5124,5127],{"className":213,"code":5125,"filename":1726,"highlights":5126,"language":216,"meta":217,"style":217},"await TestBiome\n    .Start(_db, out _)\n    .AddDistrict(out _)\n    .AddSchool(out _)\n    .AddClass(out var fullClass, c => c.Capacity = 3)\n    .AddStudents(out var students, 3)\n    .BuildAsync(); \u002F\u002F AddRange in order, one SaveChangesAsync\n\n_db.ChangeTracker.Clear(); \u002F\u002F so the code under test reads rows from the database\n",[242,317,345],[185,5128,5129,5135,5154,5168,5182,5216,5237,5248,5252],{"__ignoreMap":217},[221,5130,5131,5133],{"class":223,"line":224},[221,5132,2269],{"class":255},[221,5134,1242],{"class":1372},[221,5136,5138,5140,5142,5144,5146,5148,5150,5152],{"class":5137,"line":242},[223,1202],[221,5139,2276],{"class":245},[221,5141,1408],{"class":1306},[221,5143,1215],{"class":245},[221,5145,4999],{"class":1372},[221,5147,1299],{"class":245},[221,5149,2308],{"class":227},[221,5151,2285],{"class":1372},[221,5153,1800],{"class":245},[221,5155,5156,5158,5160,5162,5164,5166],{"class":223,"line":249},[221,5157,2276],{"class":245},[221,5159,1808],{"class":1306},[221,5161,1215],{"class":245},[221,5163,1792],{"class":227},[221,5165,2285],{"class":1372},[221,5167,1800],{"class":245},[221,5169,5170,5172,5174,5176,5178,5180],{"class":223,"line":289},[221,5171,2276],{"class":245},[221,5173,4731],{"class":1306},[221,5175,1215],{"class":245},[221,5177,1792],{"class":227},[221,5179,2285],{"class":1372},[221,5181,1800],{"class":245},[221,5183,5185,5187,5189,5191,5193,5195,5198,5200,5202,5204,5206,5208,5210,5212,5214],{"class":5184,"line":317},[223,1202],[221,5186,2276],{"class":245},[221,5188,4746],{"class":1306},[221,5190,1215],{"class":245},[221,5192,1792],{"class":227},[221,5194,1795],{"class":234},[221,5196,5197],{"class":238}," fullClass",[221,5199,1299],{"class":245},[221,5201,3940],{"class":238},[221,5203,2321],{"class":255},[221,5205,3940],{"class":1372},[221,5207,209],{"class":245},[221,5209,4767],{"class":1372},[221,5211,1376],{"class":255},[221,5213,4321],{"class":2831},[221,5215,1800],{"class":245},[221,5217,5219,5221,5223,5225,5227,5229,5231,5233,5235],{"class":5218,"line":345},[223,1202],[221,5220,2276],{"class":245},[221,5222,4678],{"class":1306},[221,5224,1215],{"class":245},[221,5226,1792],{"class":227},[221,5228,1795],{"class":234},[221,5230,4316],{"class":238},[221,5232,1299],{"class":245},[221,5234,4321],{"class":2831},[221,5236,1800],{"class":245},[221,5238,5239,5241,5243,5245],{"class":223,"line":369},[221,5240,2276],{"class":245},[221,5242,1826],{"class":1306},[221,5244,4415],{"class":245},[221,5246,5247],{"class":887}," \u002F\u002F AddRange in order, one SaveChangesAsync\n",[221,5249,5250],{"class":223,"line":392},[221,5251,424],{"emptyLinePlaceholder":423},[221,5253,5254,5256,5258,5261,5263,5266,5268],{"class":223,"line":414},[221,5255,4999],{"class":1372},[221,5257,209],{"class":245},[221,5259,5260],{"class":1372},"ChangeTracker",[221,5262,209],{"class":245},[221,5264,5265],{"class":1306},"Clear",[221,5267,4415],{"class":245},[221,5269,5270],{"class":887}," \u002F\u002F so the code under test reads rows from the database\n",[1879,5272,5273],{"label":1881,"name":1882},[211,5274,5276],{"className":213,"code":5275,"language":216,"meta":217,"style":217},"var now = DateTimeOffset.UtcNow;\n\u002F\u002F Match the database's precision (Postgres keeps microseconds).\nnow = new DateTimeOffset(now.Ticks - now.Ticks % 10, TimeSpan.Zero);\n\nvar district = new District\n{\n    Id = $\"dist_{Guid.CreateVersion7():N}\",\n    Name = \"Riverside Unified\",\n    TimeZoneId = \"America\u002FChicago\",\n    CreatedAtUtc = now,\n    UpdatedAtUtc = now,\n};\nvar school = new School\n{\n    Id = $\"sch_{Guid.CreateVersion7():N}\",\n    DistrictId = district.Id,\n    Name = \"School 1\",\n    Code = \"S1\",\n    CreatedAtUtc = now,\n    UpdatedAtUtc = now,\n};\nvar fullClass = new SchoolClass\n{\n    Id = $\"cls_{Guid.CreateVersion7():N}\",\n    DistrictId = district.Id,\n    SchoolId = school.Id,\n    Name = \"Algebra I\",\n    Capacity = 3,\n    CreatedAtUtc = now,\n};\nvar students = Enumerable\n    .Range(1, 3)\n    .Select(seat => new Student\n    {\n        Id = $\"stu_{Guid.CreateVersion7():N}\",\n        DistrictId = district.Id,\n        ClassId = fullClass.Id,\n        Seat = seat,\n        FullName = $\"Student {seat}\",\n        EnrolledAtUtc = now,\n    })\n    .ToArray();\n\n_db.AddRange(district, school, fullClass);\n_db.AddRange(students);\nawait _db.SaveChangesAsync();\n\n_db.ChangeTracker.Clear();\n",[185,5277,5278,5294,5299,5347,5351,5363,5367,5397,5411,5425,5435,5445,5449,5461,5465,5495,5509,5523,5537,5547,5557,5561,5573,5577,5607,5621,5635,5649,5659,5669,5673,5684,5701,5719,5723,5755,5770,5785,5797,5818,5829,5834,5843,5847,5870,5885,5899,5903],{"__ignoreMap":217},[221,5279,5280,5282,5284,5286,5288,5290,5292],{"class":223,"line":224},[221,5281,3420],{"class":234},[221,5283,1955],{"class":238},[221,5285,279],{"class":255},[221,5287,374],{"class":1372},[221,5289,209],{"class":245},[221,5291,1964],{"class":1372},[221,5293,286],{"class":245},[221,5295,5296],{"class":223,"line":242},[221,5297,5298],{"class":887},"\u002F\u002F Match the database's precision (Postgres keeps microseconds).\n",[221,5300,5301,5304,5306,5308,5310,5312,5315,5317,5320,5323,5325,5327,5329,5332,5335,5337,5340,5342,5345],{"class":223,"line":249},[221,5302,5303],{"class":1372},"now ",[221,5305,1376],{"class":255},[221,5307,1276],{"class":255},[221,5309,374],{"class":238},[221,5311,1215],{"class":245},[221,5313,5314],{"class":1372},"now",[221,5316,209],{"class":245},[221,5318,5319],{"class":1372},"Ticks ",[221,5321,5322],{"class":255},"-",[221,5324,1955],{"class":1372},[221,5326,209],{"class":245},[221,5328,5319],{"class":1372},[221,5330,5331],{"class":255},"%",[221,5333,5334],{"class":2831}," 10",[221,5336,1299],{"class":245},[221,5338,5339],{"class":1372}," TimeSpan",[221,5341,209],{"class":245},[221,5343,5344],{"class":1372},"Zero",[221,5346,1223],{"class":245},[221,5348,5349],{"class":223,"line":289},[221,5350,424],{"emptyLinePlaceholder":423},[221,5352,5353,5355,5357,5359,5361],{"class":223,"line":317},[221,5354,3420],{"class":234},[221,5356,1817],{"class":238},[221,5358,279],{"class":255},[221,5360,1276],{"class":255},[221,5362,239],{"class":238},[221,5364,5365],{"class":223,"line":345},[221,5366,246],{"class":245},[221,5368,5369,5371,5373,5375,5377,5379,5381,5383,5385,5387,5389,5391,5393,5395],{"class":223,"line":369},[221,5370,3457],{"class":1372},[221,5372,1376],{"class":255},[221,5374,1993],{"class":282},[221,5376,1996],{"class":1388},[221,5378,1999],{"class":282},[221,5380,2002],{"class":1372},[221,5382,209],{"class":282},[221,5384,2007],{"class":1306},[221,5386,2010],{"class":282},[221,5388,2013],{"class":255},[221,5390,2016],{"class":1372},[221,5392,2019],{"class":282},[221,5394,1385],{"class":282},[221,5396,1323],{"class":245},[221,5398,5399,5401,5403,5405,5407,5409],{"class":223,"line":392},[221,5400,3488],{"class":1372},[221,5402,1376],{"class":255},[221,5404,1617],{"class":282},[221,5406,1620],{"class":1388},[221,5408,1385],{"class":282},[221,5410,1323],{"class":245},[221,5412,5413,5415,5417,5419,5421,5423],{"class":223,"line":414},[221,5414,3503],{"class":1372},[221,5416,1376],{"class":255},[221,5418,1617],{"class":282},[221,5420,1389],{"class":1388},[221,5422,1385],{"class":282},[221,5424,1323],{"class":245},[221,5426,5427,5429,5431,5433],{"class":223,"line":420},[221,5428,3518],{"class":1372},[221,5430,1376],{"class":255},[221,5432,1955],{"class":1372},[221,5434,1323],{"class":245},[221,5436,5437,5439,5441,5443],{"class":223,"line":427},[221,5438,3529],{"class":1372},[221,5440,1376],{"class":255},[221,5442,1955],{"class":1372},[221,5444,1323],{"class":245},[221,5446,5447],{"class":223,"line":439},[221,5448,3540],{"class":245},[221,5450,5451,5453,5455,5457,5459],{"class":223,"line":444},[221,5452,3420],{"class":234},[221,5454,3047],{"class":238},[221,5456,279],{"class":255},[221,5458,1276],{"class":255},[221,5460,436],{"class":238},[221,5462,5463],{"class":223,"line":471},[221,5464,246],{"class":245},[221,5466,5467,5469,5471,5473,5475,5477,5479,5481,5483,5485,5487,5489,5491,5493],{"class":223,"line":499},[221,5468,3457],{"class":1372},[221,5470,1376],{"class":255},[221,5472,1993],{"class":282},[221,5474,3567],{"class":1388},[221,5476,1999],{"class":282},[221,5478,2002],{"class":1372},[221,5480,209],{"class":282},[221,5482,2007],{"class":1306},[221,5484,2010],{"class":282},[221,5486,2013],{"class":255},[221,5488,2016],{"class":1372},[221,5490,2019],{"class":282},[221,5492,1385],{"class":282},[221,5494,1323],{"class":245},[221,5496,5497,5499,5501,5503,5505,5507],{"class":223,"line":526},[221,5498,3592],{"class":1372},[221,5500,1376],{"class":255},[221,5502,1817],{"class":1372},[221,5504,209],{"class":245},[221,5506,2800],{"class":1372},[221,5508,1323],{"class":245},[221,5510,5511,5513,5515,5517,5519,5521],{"class":223,"line":554},[221,5512,3488],{"class":1372},[221,5514,1376],{"class":255},[221,5516,1617],{"class":282},[221,5518,3613],{"class":1388},[221,5520,1385],{"class":282},[221,5522,1323],{"class":245},[221,5524,5525,5527,5529,5531,5533,5535],{"class":223,"line":575},[221,5526,3622],{"class":1372},[221,5528,1376],{"class":255},[221,5530,1617],{"class":282},[221,5532,3629],{"class":1388},[221,5534,1385],{"class":282},[221,5536,1323],{"class":245},[221,5538,5539,5541,5543,5545],{"class":223,"line":596},[221,5540,3518],{"class":1372},[221,5542,1376],{"class":255},[221,5544,1955],{"class":1372},[221,5546,1323],{"class":245},[221,5548,5549,5551,5553,5555],{"class":223,"line":601},[221,5550,3529],{"class":1372},[221,5552,1376],{"class":255},[221,5554,1955],{"class":1372},[221,5556,1323],{"class":245},[221,5558,5559],{"class":223,"line":606},[221,5560,3540],{"class":245},[221,5562,5563,5565,5567,5569,5571],{"class":223,"line":618},[221,5564,3420],{"class":234},[221,5566,5197],{"class":238},[221,5568,279],{"class":255},[221,5570,1276],{"class":255},[221,5572,773],{"class":238},[221,5574,5575],{"class":223,"line":623},[221,5576,246],{"class":245},[221,5578,5579,5581,5583,5585,5587,5589,5591,5593,5595,5597,5599,5601,5603,5605],{"class":223,"line":650},[221,5580,3457],{"class":1372},[221,5582,1376],{"class":255},[221,5584,1993],{"class":282},[221,5586,3684],{"class":1388},[221,5588,1999],{"class":282},[221,5590,2002],{"class":1372},[221,5592,209],{"class":282},[221,5594,2007],{"class":1306},[221,5596,2010],{"class":282},[221,5598,2013],{"class":255},[221,5600,2016],{"class":1372},[221,5602,2019],{"class":282},[221,5604,1385],{"class":282},[221,5606,1323],{"class":245},[221,5608,5609,5611,5613,5615,5617,5619],{"class":223,"line":677},[221,5610,3592],{"class":1372},[221,5612,1376],{"class":255},[221,5614,1817],{"class":1372},[221,5616,209],{"class":245},[221,5618,2800],{"class":1372},[221,5620,1323],{"class":245},[221,5622,5623,5625,5627,5629,5631,5633],{"class":223,"line":705},[221,5624,3723],{"class":1372},[221,5626,1376],{"class":255},[221,5628,3047],{"class":1372},[221,5630,209],{"class":245},[221,5632,2800],{"class":1372},[221,5634,1323],{"class":245},[221,5636,5637,5639,5641,5643,5645,5647],{"class":223,"line":733},[221,5638,3488],{"class":1372},[221,5640,1376],{"class":255},[221,5642,1617],{"class":282},[221,5644,3064],{"class":1388},[221,5646,1385],{"class":282},[221,5648,1323],{"class":245},[221,5650,5651,5653,5655,5657],{"class":223,"line":754},[221,5652,3752],{"class":1372},[221,5654,1376],{"class":255},[221,5656,4321],{"class":2831},[221,5658,1323],{"class":245},[221,5660,5661,5663,5665,5667],{"class":223,"line":759},[221,5662,3518],{"class":1372},[221,5664,1376],{"class":255},[221,5666,1955],{"class":1372},[221,5668,1323],{"class":245},[221,5670,5671],{"class":223,"line":764},[221,5672,3540],{"class":245},[221,5674,5675,5677,5679,5681],{"class":223,"line":776},[221,5676,3420],{"class":234},[221,5678,4316],{"class":238},[221,5680,279],{"class":255},[221,5682,5683],{"class":1372}," Enumerable\n",[221,5685,5686,5688,5691,5693,5695,5697,5699],{"class":223,"line":781},[221,5687,2276],{"class":245},[221,5689,5690],{"class":1306},"Range",[221,5692,1215],{"class":245},[221,5694,4388],{"class":2831},[221,5696,1299],{"class":245},[221,5698,4321],{"class":2831},[221,5700,1800],{"class":245},[221,5702,5703,5705,5708,5710,5713,5715,5717],{"class":223,"line":808},[221,5704,2276],{"class":245},[221,5706,5707],{"class":1306},"Select",[221,5709,1215],{"class":245},[221,5711,5712],{"class":238},"seat",[221,5714,2321],{"class":255},[221,5716,1276],{"class":255},[221,5718,981],{"class":238},[221,5720,5721],{"class":223,"line":835},[221,5722,1366],{"class":245},[221,5724,5725,5728,5730,5732,5735,5737,5739,5741,5743,5745,5747,5749,5751,5753],{"class":223,"line":862},[221,5726,5727],{"class":1372},"        Id ",[221,5729,1376],{"class":255},[221,5731,1993],{"class":282},[221,5733,5734],{"class":1388},"stu_",[221,5736,1999],{"class":282},[221,5738,2002],{"class":1372},[221,5740,209],{"class":282},[221,5742,2007],{"class":1306},[221,5744,2010],{"class":282},[221,5746,2013],{"class":255},[221,5748,2016],{"class":1372},[221,5750,2019],{"class":282},[221,5752,1385],{"class":282},[221,5754,1323],{"class":245},[221,5756,5757,5760,5762,5764,5766,5768],{"class":223,"line":891},[221,5758,5759],{"class":1372},"        DistrictId ",[221,5761,1376],{"class":255},[221,5763,1817],{"class":1372},[221,5765,209],{"class":245},[221,5767,2800],{"class":1372},[221,5769,1323],{"class":245},[221,5771,5772,5775,5777,5779,5781,5783],{"class":223,"line":918},[221,5773,5774],{"class":1372},"        ClassId ",[221,5776,1376],{"class":255},[221,5778,5197],{"class":1372},[221,5780,209],{"class":245},[221,5782,2800],{"class":1372},[221,5784,1323],{"class":245},[221,5786,5787,5790,5792,5795],{"class":223,"line":941},[221,5788,5789],{"class":1372},"        Seat ",[221,5791,1376],{"class":255},[221,5793,5794],{"class":1372}," seat",[221,5796,1323],{"class":245},[221,5798,5799,5802,5804,5806,5808,5810,5812,5814,5816],{"class":223,"line":962},[221,5800,5801],{"class":1372},"        FullName ",[221,5803,1376],{"class":255},[221,5805,1993],{"class":282},[221,5807,4144],{"class":1388},[221,5809,1999],{"class":282},[221,5811,5712],{"class":1372},[221,5813,2019],{"class":282},[221,5815,1385],{"class":282},[221,5817,1323],{"class":245},[221,5819,5820,5823,5825,5827],{"class":223,"line":967},[221,5821,5822],{"class":1372},"        EnrolledAtUtc ",[221,5824,1376],{"class":255},[221,5826,1955],{"class":1372},[221,5828,1323],{"class":245},[221,5830,5831],{"class":223,"line":972},[221,5832,5833],{"class":245},"    })\n",[221,5835,5836,5838,5841],{"class":223,"line":984},[221,5837,2276],{"class":245},[221,5839,5840],{"class":1306},"ToArray",[221,5842,1279],{"class":245},[221,5844,5845],{"class":223,"line":989},[221,5846,424],{"emptyLinePlaceholder":423},[221,5848,5849,5851,5853,5856,5858,5860,5862,5864,5866,5868],{"class":223,"line":1016},[221,5850,4999],{"class":1372},[221,5852,209],{"class":245},[221,5854,5855],{"class":1306},"AddRange",[221,5857,1215],{"class":245},[221,5859,1849],{"class":1372},[221,5861,1299],{"class":245},[221,5863,3047],{"class":1372},[221,5865,1299],{"class":245},[221,5867,5197],{"class":1372},[221,5869,1223],{"class":245},[221,5871,5872,5874,5876,5878,5880,5883],{"class":223,"line":1043},[221,5873,4999],{"class":1372},[221,5875,209],{"class":245},[221,5877,5855],{"class":1306},[221,5879,1215],{"class":245},[221,5881,5882],{"class":1372},"students",[221,5884,1223],{"class":245},[221,5886,5887,5889,5892,5894,5897],{"class":223,"line":1071},[221,5888,2269],{"class":255},[221,5890,5891],{"class":1372}," _db",[221,5893,209],{"class":245},[221,5895,5896],{"class":1306},"SaveChangesAsync",[221,5898,1279],{"class":245},[221,5900,5901],{"class":223,"line":1093},[221,5902,424],{"emptyLinePlaceholder":423},[221,5904,5905,5907,5909,5911,5913,5915],{"class":223,"line":1116},[221,5906,4999],{"class":1372},[221,5908,209],{"class":245},[221,5910,5260],{"class":1372},[221,5912,209],{"class":245},[221,5914,5265],{"class":1306},[221,5916,1279],{"class":245},[176,5918,5919,5920,5923],{},"When a chain repeats across tests, give it a name. A ",[206,5921,5922],{},"scenario helper"," is a chain you write once, offered from the seed, that keeps every construction step visible in its definition. Unlike the regular graft methods, this multi-step helper is app-specific:",[211,5925,5929],{"className":213,"code":5926,"filename":5927,"highlights":5928,"language":216,"meta":217,"style":217},"public static class SchoolScenarioHelpers\n{\n    \u002F\u002F Scenario helper: a whole default chain, offered from the seed only.\n    extension(BiomeBuilder\u003CSchoolSeed, SchoolSeed> b)\n    {\n        public BiomeBuilder\u003CSchoolSeed, Student[]> AddFullClass(\n            out SchoolClass schoolClass,\n            out Student[] students\n        )\n        {\n            var classStep = b.AddDistrict(out _)\n                .AddSchool(out _)\n                .AddClass(out schoolClass, c => c.Capacity = 3);\n            return classStep.AddStudents(out students, 3); \u002F\u002F as many students as seats\n        }\n    }\n}\n","ScenarioHelpers.cs",[345,420,427,439,444],[185,5930,5931,5942,5946,5951,5976,5980,6004,6015,6027,6031,6036,6061,6077,6108,6135,6140,6144],{"__ignoreMap":217},[221,5932,5933,5935,5937,5939],{"class":223,"line":224},[221,5934,228],{"class":227},[221,5936,1234],{"class":227},[221,5938,235],{"class":234},[221,5940,5941],{"class":238}," SchoolScenarioHelpers\n",[221,5943,5944],{"class":223,"line":242},[221,5945,246],{"class":245},[221,5947,5948],{"class":223,"line":249},[221,5949,5950],{"class":887},"    \u002F\u002F Scenario helper: a whole default chain, offered from the seed only.\n",[221,5952,5953,5956,5958,5961,5963,5965,5967,5969,5971,5974],{"class":223,"line":289},[221,5954,5955],{"class":1306},"    extension",[221,5957,1215],{"class":245},[221,5959,5960],{"class":238},"BiomeBuilder",[221,5962,1262],{"class":245},[221,5964,1265],{"class":238},[221,5966,1299],{"class":245},[221,5968,1212],{"class":238},[221,5970,1268],{"class":245},[221,5972,5973],{"class":238}," b",[221,5975,1800],{"class":245},[221,5977,5978],{"class":223,"line":317},[221,5979,1366],{"class":245},[221,5981,5983,5986,5988,5990,5992,5994,5996,5999,6002],{"class":5982,"line":345},[223,1202],[221,5984,5985],{"class":1372},"        public ",[221,5987,5960],{"class":238},[221,5989,1262],{"class":245},[221,5991,1265],{"class":238},[221,5993,1299],{"class":245},[221,5995,4003],{"class":238},[221,5997,5998],{"class":245},"[]>",[221,6000,6001],{"class":1306}," AddFullClass",[221,6003,1310],{"class":245},[221,6005,6006,6009,6011,6013],{"class":223,"line":369},[221,6007,6008],{"class":227},"            out",[221,6010,2932],{"class":238},[221,6012,4088],{"class":238},[221,6014,1323],{"class":245},[221,6016,6017,6019,6021,6024],{"class":223,"line":392},[221,6018,6008],{"class":227},[221,6020,4003],{"class":238},[221,6022,6023],{"class":245},"[]",[221,6025,6026],{"class":238}," students\n",[221,6028,6029],{"class":223,"line":414},[221,6030,4581],{"class":245},[221,6032,6034],{"class":6033,"line":420},[223,1202],[221,6035,1983],{"class":245},[221,6037,6039,6042,6045,6047,6049,6051,6053,6055,6057,6059],{"class":6038,"line":427},[223,1202],[221,6040,6041],{"class":234},"            var",[221,6043,6044],{"class":238}," classStep",[221,6046,279],{"class":255},[221,6048,5973],{"class":1372},[221,6050,209],{"class":245},[221,6052,1808],{"class":1306},[221,6054,1215],{"class":245},[221,6056,1792],{"class":227},[221,6058,2285],{"class":1372},[221,6060,1800],{"class":245},[221,6062,6064,6067,6069,6071,6073,6075],{"class":6063,"line":439},[223,1202],[221,6065,6066],{"class":245},"                .",[221,6068,4731],{"class":1306},[221,6070,1215],{"class":245},[221,6072,1792],{"class":227},[221,6074,2285],{"class":1372},[221,6076,1800],{"class":245},[221,6078,6080,6082,6084,6086,6088,6090,6092,6094,6096,6098,6100,6102,6104,6106],{"class":6079,"line":444},[223,1202],[221,6081,6066],{"class":245},[221,6083,4746],{"class":1306},[221,6085,1215],{"class":245},[221,6087,1792],{"class":227},[221,6089,4088],{"class":1372},[221,6091,1299],{"class":245},[221,6093,3940],{"class":238},[221,6095,2321],{"class":255},[221,6097,3940],{"class":1372},[221,6099,209],{"class":245},[221,6101,4767],{"class":1372},[221,6103,1376],{"class":255},[221,6105,4321],{"class":2831},[221,6107,1223],{"class":245},[221,6109,6110,6113,6115,6117,6119,6121,6123,6125,6127,6129,6132],{"class":223,"line":471},[221,6111,6112],{"class":1399},"            return",[221,6114,6044],{"class":1372},[221,6116,209],{"class":245},[221,6118,4678],{"class":1306},[221,6120,1215],{"class":245},[221,6122,1792],{"class":227},[221,6124,4316],{"class":1372},[221,6126,1299],{"class":245},[221,6128,4321],{"class":2831},[221,6130,6131],{"class":245},");",[221,6133,6134],{"class":887}," \u002F\u002F as many students as seats\n",[221,6136,6137],{"class":223,"line":499},[221,6138,6139],{"class":245},"        }\n",[221,6141,6142],{"class":223,"line":526},[221,6143,1431],{"class":245},[221,6145,6146],{"class":223,"line":554},[221,6147,417],{"class":245},[176,6149,6150,6151,209],{},"A test now names only the class it cares about: ",[185,6152,6153],{},"TestBiome.Start(_db, out _).AddFullClass(out var fullClass, out var students).BuildAsync()",[6155,6156,6157],"tip",{},[176,6158,6159,6160,6162],{},"See ",[180,6161,95],{"href":96}," for the conventions behind both. Biome does not create missing ancestors on its own, so a helper spells them out.",[1149,6164,6166],{"id":6165},"next","Next",[6168,6169,6170,6176,6185],"ul",{},[6171,6172,6173,6175],"li",{},[180,6174,31],{"href":32}," goes deeper on the entry point.",[6171,6177,6178,6181,6182,6184],{},[180,6179,6180],{"href":47},"Parents and children"," and ",[180,6183,56],{"href":57}," cover anchors, fan-out, and numbering in detail.",[6171,6186,6187,6189],{},[180,6188,105],{"href":106}," shows eight complete domains, each with annotated tests.",[6191,6192,6193],"style",{},"html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sG8yY, html code.shiki .sG8yY{--shiki-light:#E2931D;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sw1J6, html code.shiki .sw1J6{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sfCm-, html code.shiki .sfCm-{--shiki-light:#90A4AE;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":217,"searchDepth":224,"depth":242,"links":6195},[6196,6198,6199,6200,6201,6202,6203],{"id":1151,"depth":242,"text":6197},"1. A seed and a TestBiome entry point",{"id":1462,"depth":242,"text":1463},{"id":1715,"depth":242,"text":1716},{"id":2253,"depth":242,"text":2254},{"id":2659,"depth":242,"text":2660},{"id":4334,"depth":242,"text":4335},{"id":6165,"depth":242,"text":6166},"Write a seed, a blueprint, a chain and a saved test in six steps.","md",null,{},{"icon":24},{"title":21,"description":6204},"KxHNVVamfp5fRO0_oZXEXCHVlaPM-utJnfCvgIWzdX4",[6212,6214],{"title":16,"path":17,"stem":18,"description":6213,"icon":19,"children":-1},"Add Zeeq Biome to a .NET 10 test project.",{"title":31,"path":32,"stem":33,"description":6215,"icon":34,"children":-1},"The baseline every test starts from, and the one-call entry point your tests use.",1791831049713]