[{"data":1,"prerenderedAt":2828},["ShallowReactive",2],{"navigation":3,"\u002Fexamples\u002Fcode-reviews":170,"\u002Fexamples\u002Fcode-reviews-surround":2823},[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":112,"body":172,"description":2816,"extension":2817,"links":2818,"meta":2819,"navigation":2820,"path":113,"seo":2821,"stem":114,"__hash__":2822},"docs\u002F3.examples\u002F2.code-reviews.md",{"type":173,"value":174,"toc":2808},"minimark",[175,179,207,212,976,980,983,1748,1759,1763,1778,2009,2013,2020,2194,2204,2208,2320,2323,2439,2443,2454,2788,2804],[176,177,178],"p",{},"A lock test needs a valid chain of related rows before it can check the lock itself. This example shows how to keep that repeated branch in a helper while leaving numbering and time predictable.",[176,180,181,182,186,187,186,190,186,193,196,197,206],{},"Mirrors a real code-review app: the seed is an organization and an owner, and the graph is ",[183,184,185],"code",{},"CodeRepository"," → ",[183,188,189],{},"PullRequestRecord",[183,191,192],{},"CodeReviewRecord",[183,194,195],{},"ActiveCodeReviewLock",". Source: ",[198,199,203],"a",{"href":200,"rel":201},"https:\u002F\u002Fgithub.com\u002Fzeeq-ai\u002Fzeeq-biome\u002Ftree\u002Fmain\u002Ftests\u002FZeeq.Biome.Tests\u002FCodeReviews",[202],"nofollow",[183,204,205],{},"tests\u002FZeeq.Biome.Tests\u002FCodeReviews",".",[208,209,211],"h2",{"id":210},"the-blueprints","The blueprints",[213,214,226],"pre",{"className":215,"code":216,"filename":217,"highlights":218,"language":224,"meta":225,"style":225},"language-csharp shiki shiki-themes material-theme-lighter github-light github-dark","\u002F\u002F Scope is declared on the sequence: Under(repo) and\n\u002F\u002F blueprint variants share its progression.\ninternal static readonly Sequence\u003Cint> Numbers = Sequence\n    .Of(1, n => n + 1)\n    .Per\u003CCodeRepository>();\n\ninternal static readonly Blueprint\u003CCodeReviewSeed, CodeRepository> Repository =\n    Blueprint.For\u003CCodeReviewSeed, CodeRepository>(ctx =>\n        new()\n        {\n            Id = ctx.NewId(\"repo\"),\n            Organization = ctx.Seed.Organization,\n            CreatedAt = ctx.Now,\n        }\n    );\n\n\u002F\u002F Leave Number unset; derive it first, then Title and Branch from its final value.\ninternal static readonly ChildBlueprint\u003C\n    CodeReviewSeed,\n    CodeRepository,\n    PullRequestRecord\n> PullRequest = Blueprint\n    .ChildOf\u003CCodeReviewSeed, CodeRepository, PullRequestRecord>(\n        (repo, ctx) => new() { Id = ctx.NewId(\"pr\"), Repository = repo }\n    )\n    .Derive(pr => pr.Number, Numbers)\n    .Derive(pr => pr.Title, (pr, _) => $\"PR {pr.Number}\")\n    .Derive(pr => pr.Branch, (pr, _) => $\"feature\u002F{pr.Number}\");\n\n\u002F\u002F Wire the typed PR parent and walk recorded ancestors to the repository.\ninternal static readonly ChildBlueprint\u003C\n    CodeReviewSeed,\n    PullRequestRecord,\n    CodeReviewRecord\n> Review = Blueprint.ChildOf\u003C\n    CodeReviewSeed,\n    PullRequestRecord,\n    CodeReviewRecord\n>(\n    (pr, ctx) =>\n        new()\n        {\n            Id = ctx.NewId(\"review\"),\n            PullRequest = pr,\n            Repository = ctx.Ancestor\u003CCodeRepository>(),\n            CreatedAt = ctx.Now,\n        }\n);\n","CodeReviews\u002FDomain.cs",[219,220,221,222,223],3,4,5,26,45,"csharp","",[183,227,228,237,243,282,320,335,342,372,400,409,415,447,470,487,493,499,504,510,525,531,537,543,556,580,640,646,674,732,786,791,797,810,815,821,827,842,847,852,857,865,881,888,893,917,929,951,966,971],{"__ignoreMap":225},[229,230,233],"span",{"class":231,"line":232},"line",1,[229,234,236],{"class":235},"sutJx","\u002F\u002F Scope is declared on the sequence: Under(repo) and\n",[229,238,240],{"class":231,"line":239},2,[229,241,242],{"class":235},"\u002F\u002F blueprint variants share its progression.\n",[229,244,247,251,254,257,261,265,269,272,275,278],{"class":245,"line":219},[231,246],"highlight",[229,248,250],{"class":249},"sbsja","internal",[229,252,253],{"class":249}," static",[229,255,256],{"class":249}," readonly",[229,258,260],{"class":259},"sbgvK"," Sequence",[229,262,264],{"class":263},"sP7_E","\u003C",[229,266,268],{"class":267},"smGrS","int",[229,270,271],{"class":263},">",[229,273,274],{"class":259}," Numbers",[229,276,277],{"class":267}," =",[229,279,281],{"class":280},"su5hD"," Sequence\n",[229,283,285,288,292,295,299,302,305,308,311,314,317],{"class":284,"line":220},[231,246],[229,286,287],{"class":263},"    .",[229,289,291],{"class":290},"sGLFI","Of",[229,293,294],{"class":263},"(",[229,296,298],{"class":297},"srdBf","1",[229,300,301],{"class":263},",",[229,303,304],{"class":259}," n",[229,306,307],{"class":267}," =>",[229,309,310],{"class":280}," n ",[229,312,313],{"class":267},"+",[229,315,316],{"class":297}," 1",[229,318,319],{"class":263},")\n",[229,321,323,325,328,330,332],{"class":322,"line":221},[231,246],[229,324,287],{"class":263},[229,326,327],{"class":290},"Per",[229,329,264],{"class":263},[229,331,185],{"class":259},[229,333,334],{"class":263},">();\n",[229,336,338],{"class":231,"line":337},6,[229,339,341],{"emptyLinePlaceholder":340},true,"\n",[229,343,345,347,349,351,354,356,359,361,364,366,369],{"class":231,"line":344},7,[229,346,250],{"class":249},[229,348,253],{"class":249},[229,350,256],{"class":249},[229,352,353],{"class":259}," Blueprint",[229,355,264],{"class":263},[229,357,358],{"class":259},"CodeReviewSeed",[229,360,301],{"class":263},[229,362,363],{"class":259}," CodeRepository",[229,365,271],{"class":263},[229,367,368],{"class":259}," Repository",[229,370,371],{"class":267}," =\n",[229,373,375,378,380,383,385,387,389,391,394,397],{"class":231,"line":374},8,[229,376,377],{"class":280},"    Blueprint",[229,379,206],{"class":263},[229,381,382],{"class":290},"For",[229,384,264],{"class":263},[229,386,358],{"class":259},[229,388,301],{"class":263},[229,390,363],{"class":259},[229,392,393],{"class":263},">(",[229,395,396],{"class":259},"ctx",[229,398,399],{"class":267}," =>\n",[229,401,403,406],{"class":231,"line":402},9,[229,404,405],{"class":267},"        new",[229,407,408],{"class":263},"()\n",[229,410,412],{"class":231,"line":411},10,[229,413,414],{"class":263},"        {\n",[229,416,418,421,424,427,429,432,434,438,442,444],{"class":231,"line":417},11,[229,419,420],{"class":280},"            Id ",[229,422,423],{"class":267},"=",[229,425,426],{"class":280}," ctx",[229,428,206],{"class":263},[229,430,431],{"class":290},"NewId",[229,433,294],{"class":263},[229,435,437],{"class":436},"sjJ54","\"",[229,439,441],{"class":440},"s_sjI","repo",[229,443,437],{"class":436},[229,445,446],{"class":263},"),\n",[229,448,450,453,455,457,459,462,464,467],{"class":231,"line":449},12,[229,451,452],{"class":280},"            Organization ",[229,454,423],{"class":267},[229,456,426],{"class":280},[229,458,206],{"class":263},[229,460,461],{"class":280},"Seed",[229,463,206],{"class":263},[229,465,466],{"class":280},"Organization",[229,468,469],{"class":263},",\n",[229,471,473,476,478,480,482,485],{"class":231,"line":472},13,[229,474,475],{"class":280},"            CreatedAt ",[229,477,423],{"class":267},[229,479,426],{"class":280},[229,481,206],{"class":263},[229,483,484],{"class":280},"Now",[229,486,469],{"class":263},[229,488,490],{"class":231,"line":489},14,[229,491,492],{"class":263},"        }\n",[229,494,496],{"class":231,"line":495},15,[229,497,498],{"class":263},"    );\n",[229,500,502],{"class":231,"line":501},16,[229,503,341],{"emptyLinePlaceholder":340},[229,505,507],{"class":231,"line":506},17,[229,508,509],{"class":235},"\u002F\u002F Leave Number unset; derive it first, then Title and Branch from its final value.\n",[229,511,513,515,517,519,522],{"class":231,"line":512},18,[229,514,250],{"class":249},[229,516,253],{"class":249},[229,518,256],{"class":249},[229,520,521],{"class":280}," ChildBlueprint",[229,523,524],{"class":267},"\u003C\n",[229,526,528],{"class":231,"line":527},19,[229,529,530],{"class":280},"    CodeReviewSeed,\n",[229,532,534],{"class":231,"line":533},20,[229,535,536],{"class":280},"    CodeRepository,\n",[229,538,540],{"class":231,"line":539},21,[229,541,542],{"class":280},"    PullRequestRecord\n",[229,544,546,548,551,553],{"class":231,"line":545},22,[229,547,271],{"class":267},[229,549,550],{"class":280}," PullRequest ",[229,552,423],{"class":267},[229,554,555],{"class":280}," Blueprint\n",[229,557,559,561,564,566,568,570,572,574,577],{"class":231,"line":558},23,[229,560,287],{"class":263},[229,562,563],{"class":290},"ChildOf",[229,565,264],{"class":263},[229,567,358],{"class":259},[229,569,301],{"class":263},[229,571,363],{"class":259},[229,573,301],{"class":263},[229,575,576],{"class":259}," PullRequestRecord",[229,578,579],{"class":263},">(\n",[229,581,583,586,588,590,592,595,597,600,603,606,609,611,613,615,617,619,621,624,626,629,632,634,637],{"class":231,"line":582},24,[229,584,585],{"class":263},"        (",[229,587,441],{"class":259},[229,589,301],{"class":263},[229,591,426],{"class":259},[229,593,594],{"class":263},")",[229,596,307],{"class":267},[229,598,599],{"class":267}," new",[229,601,602],{"class":263},"()",[229,604,605],{"class":263}," {",[229,607,608],{"class":280}," Id ",[229,610,423],{"class":267},[229,612,426],{"class":280},[229,614,206],{"class":263},[229,616,431],{"class":290},[229,618,294],{"class":263},[229,620,437],{"class":436},[229,622,623],{"class":440},"pr",[229,625,437],{"class":436},[229,627,628],{"class":263},"),",[229,630,631],{"class":280}," Repository ",[229,633,423],{"class":267},[229,635,636],{"class":280}," repo ",[229,638,639],{"class":263},"}\n",[229,641,643],{"class":231,"line":642},25,[229,644,645],{"class":263},"    )\n",[229,647,649,651,654,656,658,660,663,665,668,670,672],{"class":648,"line":222},[231,246],[229,650,287],{"class":263},[229,652,653],{"class":290},"Derive",[229,655,294],{"class":263},[229,657,623],{"class":259},[229,659,307],{"class":267},[229,661,662],{"class":280}," pr",[229,664,206],{"class":263},[229,666,667],{"class":280},"Number",[229,669,301],{"class":263},[229,671,274],{"class":280},[229,673,319],{"class":263},[229,675,677,679,681,683,685,687,689,691,694,696,699,701,703,706,708,710,713,716,719,721,723,725,728,730],{"class":231,"line":676},27,[229,678,287],{"class":263},[229,680,653],{"class":290},[229,682,294],{"class":263},[229,684,623],{"class":259},[229,686,307],{"class":267},[229,688,662],{"class":280},[229,690,206],{"class":263},[229,692,693],{"class":280},"Title",[229,695,301],{"class":263},[229,697,698],{"class":263}," (",[229,700,623],{"class":259},[229,702,301],{"class":263},[229,704,705],{"class":259}," _",[229,707,594],{"class":263},[229,709,307],{"class":267},[229,711,712],{"class":436}," $\"",[229,714,715],{"class":440},"PR ",[229,717,718],{"class":436},"{",[229,720,623],{"class":280},[229,722,206],{"class":436},[229,724,667],{"class":280},[229,726,727],{"class":436},"}",[229,729,437],{"class":436},[229,731,319],{"class":263},[229,733,735,737,739,741,743,745,747,749,752,754,756,758,760,762,764,766,768,771,773,775,777,779,781,783],{"class":231,"line":734},28,[229,736,287],{"class":263},[229,738,653],{"class":290},[229,740,294],{"class":263},[229,742,623],{"class":259},[229,744,307],{"class":267},[229,746,662],{"class":280},[229,748,206],{"class":263},[229,750,751],{"class":280},"Branch",[229,753,301],{"class":263},[229,755,698],{"class":263},[229,757,623],{"class":259},[229,759,301],{"class":263},[229,761,705],{"class":259},[229,763,594],{"class":263},[229,765,307],{"class":267},[229,767,712],{"class":436},[229,769,770],{"class":440},"feature\u002F",[229,772,718],{"class":436},[229,774,623],{"class":280},[229,776,206],{"class":436},[229,778,667],{"class":280},[229,780,727],{"class":436},[229,782,437],{"class":436},[229,784,785],{"class":263},");\n",[229,787,789],{"class":231,"line":788},29,[229,790,341],{"emptyLinePlaceholder":340},[229,792,794],{"class":231,"line":793},30,[229,795,796],{"class":235},"\u002F\u002F Wire the typed PR parent and walk recorded ancestors to the repository.\n",[229,798,800,802,804,806,808],{"class":231,"line":799},31,[229,801,250],{"class":249},[229,803,253],{"class":249},[229,805,256],{"class":249},[229,807,521],{"class":280},[229,809,524],{"class":267},[229,811,813],{"class":231,"line":812},32,[229,814,530],{"class":280},[229,816,818],{"class":231,"line":817},33,[229,819,820],{"class":280},"    PullRequestRecord,\n",[229,822,824],{"class":231,"line":823},34,[229,825,826],{"class":280},"    CodeReviewRecord\n",[229,828,830,832,835,837,840],{"class":231,"line":829},35,[229,831,271],{"class":267},[229,833,834],{"class":280}," Review ",[229,836,423],{"class":267},[229,838,839],{"class":280}," Blueprint.ChildOf",[229,841,524],{"class":267},[229,843,845],{"class":231,"line":844},36,[229,846,530],{"class":280},[229,848,850],{"class":231,"line":849},37,[229,851,820],{"class":280},[229,853,855],{"class":231,"line":854},38,[229,856,826],{"class":280},[229,858,860,862],{"class":231,"line":859},39,[229,861,271],{"class":267},[229,863,864],{"class":263},"(\n",[229,866,868,871,873,875,877,879],{"class":231,"line":867},40,[229,869,870],{"class":263},"    (",[229,872,623],{"class":259},[229,874,301],{"class":263},[229,876,426],{"class":259},[229,878,594],{"class":263},[229,880,399],{"class":267},[229,882,884,886],{"class":231,"line":883},41,[229,885,405],{"class":267},[229,887,408],{"class":263},[229,889,891],{"class":231,"line":890},42,[229,892,414],{"class":263},[229,894,896,898,900,902,904,906,908,910,913,915],{"class":231,"line":895},43,[229,897,420],{"class":280},[229,899,423],{"class":267},[229,901,426],{"class":280},[229,903,206],{"class":263},[229,905,431],{"class":290},[229,907,294],{"class":263},[229,909,437],{"class":436},[229,911,912],{"class":440},"review",[229,914,437],{"class":436},[229,916,446],{"class":263},[229,918,920,923,925,927],{"class":231,"line":919},44,[229,921,922],{"class":280},"            PullRequest ",[229,924,423],{"class":267},[229,926,662],{"class":280},[229,928,469],{"class":263},[229,930,932,935,937,939,941,944,946,948],{"class":931,"line":223},[231,246],[229,933,934],{"class":280},"            Repository ",[229,936,423],{"class":267},[229,938,426],{"class":280},[229,940,206],{"class":263},[229,942,943],{"class":290},"Ancestor",[229,945,264],{"class":263},[229,947,185],{"class":259},[229,949,950],{"class":263},">(),\n",[229,952,954,956,958,960,962,964],{"class":231,"line":953},46,[229,955,475],{"class":280},[229,957,423],{"class":267},[229,959,426],{"class":280},[229,961,206],{"class":263},[229,963,484],{"class":280},[229,965,469],{"class":263},[229,967,969],{"class":231,"line":968},47,[229,970,492],{"class":263},[229,972,974],{"class":231,"line":973},48,[229,975,785],{"class":263},[208,977,979],{"id":978},"a-locked-review-in-one-line","A locked review in one line",[176,981,982],{},"The scenario helper builds the four-level default chain. The test asserts on the lock and the row order in the store.",[984,985,986,1180],"code-group",{},[213,987,991],{"className":215,"code":988,"filename":989,"highlights":990,"language":224,"meta":225,"style":225},"var store = new RecordingStore();\nvar biome = TestBiome.Start(out var seed, store);\n\nawait biome.AddLockedReview(out var activeLock).BuildAsync();\n\n\u002F\u002F The leaf references its ancestors; seed rows precede the four created rows.\nawait Assert\n    .That(activeLock.Repository)\n    .IsSameReferenceAs(activeLock.Review.PullRequest.Repository);\nawait Assert.That(store.Entities.Count).IsEqualTo(6);\n","With Biome",[220],[183,992,993,1012,1046,1050,1080,1084,1089,1096,1115,1142],{"__ignoreMap":225},[229,994,995,999,1002,1004,1006,1009],{"class":231,"line":232},[229,996,998],{"class":997},"sG8yY","var",[229,1000,1001],{"class":259}," store",[229,1003,277],{"class":267},[229,1005,599],{"class":267},[229,1007,1008],{"class":259}," RecordingStore",[229,1010,1011],{"class":263},"();\n",[229,1013,1014,1016,1019,1021,1024,1026,1029,1031,1034,1037,1040,1042,1044],{"class":231,"line":239},[229,1015,998],{"class":997},[229,1017,1018],{"class":259}," biome",[229,1020,277],{"class":267},[229,1022,1023],{"class":280}," TestBiome",[229,1025,206],{"class":263},[229,1027,1028],{"class":290},"Start",[229,1030,294],{"class":263},[229,1032,1033],{"class":249},"out",[229,1035,1036],{"class":997}," var",[229,1038,1039],{"class":259}," seed",[229,1041,301],{"class":263},[229,1043,1001],{"class":280},[229,1045,785],{"class":263},[229,1047,1048],{"class":231,"line":219},[229,1049,341],{"emptyLinePlaceholder":340},[229,1051,1053,1056,1058,1060,1063,1065,1067,1069,1072,1075,1078],{"class":1052,"line":220},[231,246],[229,1054,1055],{"class":267},"await",[229,1057,1018],{"class":280},[229,1059,206],{"class":263},[229,1061,1062],{"class":290},"AddLockedReview",[229,1064,294],{"class":263},[229,1066,1033],{"class":249},[229,1068,1036],{"class":997},[229,1070,1071],{"class":259}," activeLock",[229,1073,1074],{"class":263},").",[229,1076,1077],{"class":290},"BuildAsync",[229,1079,1011],{"class":263},[229,1081,1082],{"class":231,"line":221},[229,1083,341],{"emptyLinePlaceholder":340},[229,1085,1086],{"class":231,"line":337},[229,1087,1088],{"class":235},"\u002F\u002F The leaf references its ancestors; seed rows precede the four created rows.\n",[229,1090,1091,1093],{"class":231,"line":344},[229,1092,1055],{"class":267},[229,1094,1095],{"class":280}," Assert\n",[229,1097,1098,1100,1103,1105,1108,1110,1113],{"class":231,"line":374},[229,1099,287],{"class":263},[229,1101,1102],{"class":290},"That",[229,1104,294],{"class":263},[229,1106,1107],{"class":280},"activeLock",[229,1109,206],{"class":263},[229,1111,1112],{"class":280},"Repository",[229,1114,319],{"class":263},[229,1116,1117,1119,1122,1124,1126,1128,1131,1133,1136,1138,1140],{"class":231,"line":402},[229,1118,287],{"class":263},[229,1120,1121],{"class":290},"IsSameReferenceAs",[229,1123,294],{"class":263},[229,1125,1107],{"class":280},[229,1127,206],{"class":263},[229,1129,1130],{"class":280},"Review",[229,1132,206],{"class":263},[229,1134,1135],{"class":280},"PullRequest",[229,1137,206],{"class":263},[229,1139,1112],{"class":280},[229,1141,785],{"class":263},[229,1143,1144,1146,1149,1151,1153,1155,1158,1160,1163,1165,1168,1170,1173,1175,1178],{"class":231,"line":411},[229,1145,1055],{"class":267},[229,1147,1148],{"class":280}," Assert",[229,1150,206],{"class":263},[229,1152,1102],{"class":290},[229,1154,294],{"class":263},[229,1156,1157],{"class":280},"store",[229,1159,206],{"class":263},[229,1161,1162],{"class":280},"Entities",[229,1164,206],{"class":263},[229,1166,1167],{"class":280},"Count",[229,1169,1074],{"class":263},[229,1171,1172],{"class":290},"IsEqualTo",[229,1174,294],{"class":263},[229,1176,1177],{"class":297},"6",[229,1179,785],{"class":263},[1181,1182,1185],"code-collapse",{"label":1183,"name":1184},"Without Biome","setup",[213,1186,1188],{"className":215,"code":1187,"language":224,"meta":225,"style":225},"var seed = new CodeReviewSeed(new Organization(), new User());\nvar now = DateTimeOffset.UtcNow;\nnow = new DateTimeOffset(now.Ticks - now.Ticks % 10, TimeSpan.Zero);\n\nvar repo = new CodeRepository\n{\n    Id = $\"repo_{Guid.CreateVersion7():N}\",\n    Organization = seed.Organization,\n    CreatedAt = now,\n};\nvar pr = new PullRequestRecord\n{\n    Id = $\"pr_{Guid.CreateVersion7():N}\",\n    Repository = repo,\n    Number = 1,\n    Title = \"PR 1\",\n    Branch = \"feature\u002F1\",\n};\nvar review = new CodeReviewRecord\n{\n    Id = $\"review_{Guid.CreateVersion7():N}\",\n    PullRequest = pr,\n    Repository = repo,\n    CreatedAt = now,\n};\nvar activeLock = new ActiveCodeReviewLock\n{\n    Review = review,\n    Repository = repo,\n    ExpiresAt = now.AddMinutes(5),\n};\n\ndb.AddRange(seed.Owner, seed.Organization, repo, pr, review, activeLock);\nawait db.SaveChangesAsync();\n\nawait Assert\n    .That(activeLock.Repository)\n    .IsSameReferenceAs(activeLock.Review.PullRequest.Repository);\n",[183,1189,1190,1222,1242,1290,1294,1308,1313,1349,1364,1375,1380,1393,1397,1428,1439,1450,1467,1483,1487,1501,1505,1536,1547,1557,1567,1571,1584,1588,1599,1609,1630,1634,1638,1684,1698,1702,1708,1724],{"__ignoreMap":225},[229,1191,1192,1194,1196,1198,1200,1203,1205,1208,1211,1214,1216,1219],{"class":231,"line":232},[229,1193,998],{"class":997},[229,1195,1039],{"class":259},[229,1197,277],{"class":267},[229,1199,599],{"class":267},[229,1201,1202],{"class":259}," CodeReviewSeed",[229,1204,294],{"class":263},[229,1206,1207],{"class":267},"new",[229,1209,1210],{"class":259}," Organization",[229,1212,1213],{"class":263},"(),",[229,1215,599],{"class":267},[229,1217,1218],{"class":259}," User",[229,1220,1221],{"class":263},"());\n",[229,1223,1224,1226,1229,1231,1234,1236,1239],{"class":231,"line":239},[229,1225,998],{"class":997},[229,1227,1228],{"class":259}," now",[229,1230,277],{"class":267},[229,1232,1233],{"class":280}," DateTimeOffset",[229,1235,206],{"class":263},[229,1237,1238],{"class":280},"UtcNow",[229,1240,1241],{"class":263},";\n",[229,1243,1244,1247,1249,1251,1253,1255,1258,1260,1263,1266,1268,1270,1272,1275,1278,1280,1283,1285,1288],{"class":231,"line":219},[229,1245,1246],{"class":280},"now ",[229,1248,423],{"class":267},[229,1250,599],{"class":267},[229,1252,1233],{"class":259},[229,1254,294],{"class":263},[229,1256,1257],{"class":280},"now",[229,1259,206],{"class":263},[229,1261,1262],{"class":280},"Ticks ",[229,1264,1265],{"class":267},"-",[229,1267,1228],{"class":280},[229,1269,206],{"class":263},[229,1271,1262],{"class":280},[229,1273,1274],{"class":267},"%",[229,1276,1277],{"class":297}," 10",[229,1279,301],{"class":263},[229,1281,1282],{"class":280}," TimeSpan",[229,1284,206],{"class":263},[229,1286,1287],{"class":280},"Zero",[229,1289,785],{"class":263},[229,1291,1292],{"class":231,"line":220},[229,1293,341],{"emptyLinePlaceholder":340},[229,1295,1296,1298,1301,1303,1305],{"class":231,"line":221},[229,1297,998],{"class":997},[229,1299,1300],{"class":259}," repo",[229,1302,277],{"class":267},[229,1304,599],{"class":267},[229,1306,1307],{"class":259}," CodeRepository\n",[229,1309,1310],{"class":231,"line":337},[229,1311,1312],{"class":263},"{\n",[229,1314,1315,1318,1320,1322,1325,1327,1330,1332,1335,1337,1340,1343,1345,1347],{"class":231,"line":344},[229,1316,1317],{"class":280},"    Id ",[229,1319,423],{"class":267},[229,1321,712],{"class":436},[229,1323,1324],{"class":440},"repo_",[229,1326,718],{"class":436},[229,1328,1329],{"class":280},"Guid",[229,1331,206],{"class":436},[229,1333,1334],{"class":290},"CreateVersion7",[229,1336,602],{"class":436},[229,1338,1339],{"class":267},":",[229,1341,1342],{"class":280},"N",[229,1344,727],{"class":436},[229,1346,437],{"class":436},[229,1348,469],{"class":263},[229,1350,1351,1354,1356,1358,1360,1362],{"class":231,"line":374},[229,1352,1353],{"class":280},"    Organization ",[229,1355,423],{"class":267},[229,1357,1039],{"class":280},[229,1359,206],{"class":263},[229,1361,466],{"class":280},[229,1363,469],{"class":263},[229,1365,1366,1369,1371,1373],{"class":231,"line":402},[229,1367,1368],{"class":280},"    CreatedAt ",[229,1370,423],{"class":267},[229,1372,1228],{"class":280},[229,1374,469],{"class":263},[229,1376,1377],{"class":231,"line":411},[229,1378,1379],{"class":263},"};\n",[229,1381,1382,1384,1386,1388,1390],{"class":231,"line":417},[229,1383,998],{"class":997},[229,1385,662],{"class":259},[229,1387,277],{"class":267},[229,1389,599],{"class":267},[229,1391,1392],{"class":259}," PullRequestRecord\n",[229,1394,1395],{"class":231,"line":449},[229,1396,1312],{"class":263},[229,1398,1399,1401,1403,1405,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426],{"class":231,"line":472},[229,1400,1317],{"class":280},[229,1402,423],{"class":267},[229,1404,712],{"class":436},[229,1406,1407],{"class":440},"pr_",[229,1409,718],{"class":436},[229,1411,1329],{"class":280},[229,1413,206],{"class":436},[229,1415,1334],{"class":290},[229,1417,602],{"class":436},[229,1419,1339],{"class":267},[229,1421,1342],{"class":280},[229,1423,727],{"class":436},[229,1425,437],{"class":436},[229,1427,469],{"class":263},[229,1429,1430,1433,1435,1437],{"class":231,"line":489},[229,1431,1432],{"class":280},"    Repository ",[229,1434,423],{"class":267},[229,1436,1300],{"class":280},[229,1438,469],{"class":263},[229,1440,1441,1444,1446,1448],{"class":231,"line":495},[229,1442,1443],{"class":280},"    Number ",[229,1445,423],{"class":267},[229,1447,316],{"class":297},[229,1449,469],{"class":263},[229,1451,1452,1455,1457,1460,1463,1465],{"class":231,"line":501},[229,1453,1454],{"class":280},"    Title ",[229,1456,423],{"class":267},[229,1458,1459],{"class":436}," \"",[229,1461,1462],{"class":440},"PR 1",[229,1464,437],{"class":436},[229,1466,469],{"class":263},[229,1468,1469,1472,1474,1476,1479,1481],{"class":231,"line":506},[229,1470,1471],{"class":280},"    Branch ",[229,1473,423],{"class":267},[229,1475,1459],{"class":436},[229,1477,1478],{"class":440},"feature\u002F1",[229,1480,437],{"class":436},[229,1482,469],{"class":263},[229,1484,1485],{"class":231,"line":512},[229,1486,1379],{"class":263},[229,1488,1489,1491,1494,1496,1498],{"class":231,"line":527},[229,1490,998],{"class":997},[229,1492,1493],{"class":259}," review",[229,1495,277],{"class":267},[229,1497,599],{"class":267},[229,1499,1500],{"class":259}," CodeReviewRecord\n",[229,1502,1503],{"class":231,"line":533},[229,1504,1312],{"class":263},[229,1506,1507,1509,1511,1513,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534],{"class":231,"line":539},[229,1508,1317],{"class":280},[229,1510,423],{"class":267},[229,1512,712],{"class":436},[229,1514,1515],{"class":440},"review_",[229,1517,718],{"class":436},[229,1519,1329],{"class":280},[229,1521,206],{"class":436},[229,1523,1334],{"class":290},[229,1525,602],{"class":436},[229,1527,1339],{"class":267},[229,1529,1342],{"class":280},[229,1531,727],{"class":436},[229,1533,437],{"class":436},[229,1535,469],{"class":263},[229,1537,1538,1541,1543,1545],{"class":231,"line":545},[229,1539,1540],{"class":280},"    PullRequest ",[229,1542,423],{"class":267},[229,1544,662],{"class":280},[229,1546,469],{"class":263},[229,1548,1549,1551,1553,1555],{"class":231,"line":558},[229,1550,1432],{"class":280},[229,1552,423],{"class":267},[229,1554,1300],{"class":280},[229,1556,469],{"class":263},[229,1558,1559,1561,1563,1565],{"class":231,"line":582},[229,1560,1368],{"class":280},[229,1562,423],{"class":267},[229,1564,1228],{"class":280},[229,1566,469],{"class":263},[229,1568,1569],{"class":231,"line":642},[229,1570,1379],{"class":263},[229,1572,1573,1575,1577,1579,1581],{"class":231,"line":222},[229,1574,998],{"class":997},[229,1576,1071],{"class":259},[229,1578,277],{"class":267},[229,1580,599],{"class":267},[229,1582,1583],{"class":259}," ActiveCodeReviewLock\n",[229,1585,1586],{"class":231,"line":676},[229,1587,1312],{"class":263},[229,1589,1590,1593,1595,1597],{"class":231,"line":734},[229,1591,1592],{"class":280},"    Review ",[229,1594,423],{"class":267},[229,1596,1493],{"class":280},[229,1598,469],{"class":263},[229,1600,1601,1603,1605,1607],{"class":231,"line":788},[229,1602,1432],{"class":280},[229,1604,423],{"class":267},[229,1606,1300],{"class":280},[229,1608,469],{"class":263},[229,1610,1611,1614,1616,1618,1620,1623,1625,1628],{"class":231,"line":793},[229,1612,1613],{"class":280},"    ExpiresAt ",[229,1615,423],{"class":267},[229,1617,1228],{"class":280},[229,1619,206],{"class":263},[229,1621,1622],{"class":290},"AddMinutes",[229,1624,294],{"class":263},[229,1626,1627],{"class":297},"5",[229,1629,446],{"class":263},[229,1631,1632],{"class":231,"line":799},[229,1633,1379],{"class":263},[229,1635,1636],{"class":231,"line":812},[229,1637,341],{"emptyLinePlaceholder":340},[229,1639,1640,1643,1645,1648,1650,1653,1655,1658,1660,1662,1664,1666,1668,1670,1672,1674,1676,1678,1680,1682],{"class":231,"line":817},[229,1641,1642],{"class":280},"db",[229,1644,206],{"class":263},[229,1646,1647],{"class":290},"AddRange",[229,1649,294],{"class":263},[229,1651,1652],{"class":280},"seed",[229,1654,206],{"class":263},[229,1656,1657],{"class":280},"Owner",[229,1659,301],{"class":263},[229,1661,1039],{"class":280},[229,1663,206],{"class":263},[229,1665,466],{"class":280},[229,1667,301],{"class":263},[229,1669,1300],{"class":280},[229,1671,301],{"class":263},[229,1673,662],{"class":280},[229,1675,301],{"class":263},[229,1677,1493],{"class":280},[229,1679,301],{"class":263},[229,1681,1071],{"class":280},[229,1683,785],{"class":263},[229,1685,1686,1688,1691,1693,1696],{"class":231,"line":823},[229,1687,1055],{"class":267},[229,1689,1690],{"class":280}," db",[229,1692,206],{"class":263},[229,1694,1695],{"class":290},"SaveChangesAsync",[229,1697,1011],{"class":263},[229,1699,1700],{"class":231,"line":829},[229,1701,341],{"emptyLinePlaceholder":340},[229,1703,1704,1706],{"class":231,"line":844},[229,1705,1055],{"class":267},[229,1707,1095],{"class":280},[229,1709,1710,1712,1714,1716,1718,1720,1722],{"class":231,"line":849},[229,1711,287],{"class":263},[229,1713,1102],{"class":290},[229,1715,294],{"class":263},[229,1717,1107],{"class":280},[229,1719,206],{"class":263},[229,1721,1112],{"class":280},[229,1723,319],{"class":263},[229,1725,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746],{"class":231,"line":854},[229,1727,287],{"class":263},[229,1729,1121],{"class":290},[229,1731,294],{"class":263},[229,1733,1107],{"class":280},[229,1735,206],{"class":263},[229,1737,1130],{"class":280},[229,1739,206],{"class":263},[229,1741,1135],{"class":280},[229,1743,206],{"class":263},[229,1745,1112],{"class":280},[229,1747,785],{"class":263},[1749,1750,1751],"note",{},[176,1752,1753,1754,1758],{},"The setup shrinks from ",[1755,1756,1757],"strong",{},"26 lines to 3",", but the more useful change is where the relationships are defined. The lock, review, and pull request need the same repository instance. Keeping that wiring in blueprints avoids repeating it in each test.",[208,1760,1762],{"id":1761},"numbers-resume-across-calls-and-variants","Numbers resume across calls and variants",[176,1764,1765,1766,1769,1770,1773,1774,1777],{},"The same ",[183,1767,1768],{},"Numbers"," sequence is shared by the ",[183,1771,1772],{},"closed"," variant, and ",[183,1775,1776],{},".Under(repos)"," fans out across both repositories.",[213,1779,1783],{"className":215,"code":1780,"filename":1781,"highlights":1782,"language":224,"meta":225,"style":225},"var biome = TestBiome.Start(out _);\nvar closed = Blueprints.PullRequest.With(PullRequests.Closed);\n\nawait biome\n    .AddCodeRepositories(out var repos, 2)\n    .AddPullRequests(out var first, 2)\n    .Under(repos)\n    .Add(closed, out var second, count: 2)\n    .Under(repos[0])\n    .AddPullRequest(out var fifth)\n    .BuildAsync();\n\n\u002F\u002F first:  1, 2, 1, 2    (numbering restarts per repository)\n\u002F\u002F second: 3, 4, 3, 4    (the variant resumes the same sequence)\n\u002F\u002F fifth:  5, Title \"PR 5\", Branch \"feature\u002F5\"\n","CodeReviewTests.cs",[239,344,374],[183,1784,1785,1807,1841,1845,1852,1875,1897,1912,1945,1964,1982,1990,1994,1999,2004],{"__ignoreMap":225},[229,1786,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805],{"class":231,"line":232},[229,1788,998],{"class":997},[229,1790,1018],{"class":259},[229,1792,277],{"class":267},[229,1794,1023],{"class":280},[229,1796,206],{"class":263},[229,1798,1028],{"class":290},[229,1800,294],{"class":263},[229,1802,1033],{"class":249},[229,1804,705],{"class":280},[229,1806,785],{"class":263},[229,1808,1810,1812,1815,1817,1820,1822,1824,1826,1829,1831,1834,1836,1839],{"class":1809,"line":239},[231,246],[229,1811,998],{"class":997},[229,1813,1814],{"class":259}," closed",[229,1816,277],{"class":267},[229,1818,1819],{"class":280}," Blueprints",[229,1821,206],{"class":263},[229,1823,1135],{"class":280},[229,1825,206],{"class":263},[229,1827,1828],{"class":290},"With",[229,1830,294],{"class":263},[229,1832,1833],{"class":280},"PullRequests",[229,1835,206],{"class":263},[229,1837,1838],{"class":280},"Closed",[229,1840,785],{"class":263},[229,1842,1843],{"class":231,"line":219},[229,1844,341],{"emptyLinePlaceholder":340},[229,1846,1847,1849],{"class":231,"line":220},[229,1848,1055],{"class":267},[229,1850,1851],{"class":280}," biome\n",[229,1853,1854,1856,1859,1861,1863,1865,1868,1870,1873],{"class":231,"line":221},[229,1855,287],{"class":263},[229,1857,1858],{"class":290},"AddCodeRepositories",[229,1860,294],{"class":263},[229,1862,1033],{"class":249},[229,1864,1036],{"class":997},[229,1866,1867],{"class":259}," repos",[229,1869,301],{"class":263},[229,1871,1872],{"class":297}," 2",[229,1874,319],{"class":263},[229,1876,1877,1879,1882,1884,1886,1888,1891,1893,1895],{"class":231,"line":337},[229,1878,287],{"class":263},[229,1880,1881],{"class":290},"AddPullRequests",[229,1883,294],{"class":263},[229,1885,1033],{"class":249},[229,1887,1036],{"class":997},[229,1889,1890],{"class":259}," first",[229,1892,301],{"class":263},[229,1894,1872],{"class":297},[229,1896,319],{"class":263},[229,1898,1900,1902,1905,1907,1910],{"class":1899,"line":344},[231,246],[229,1901,287],{"class":263},[229,1903,1904],{"class":290},"Under",[229,1906,294],{"class":263},[229,1908,1909],{"class":280},"repos",[229,1911,319],{"class":263},[229,1913,1915,1917,1920,1922,1924,1926,1929,1931,1934,1936,1939,1941,1943],{"class":1914,"line":374},[231,246],[229,1916,287],{"class":263},[229,1918,1919],{"class":290},"Add",[229,1921,294],{"class":263},[229,1923,1772],{"class":280},[229,1925,301],{"class":263},[229,1927,1928],{"class":249}," out",[229,1930,1036],{"class":997},[229,1932,1933],{"class":259}," second",[229,1935,301],{"class":263},[229,1937,1938],{"class":259}," count",[229,1940,1339],{"class":263},[229,1942,1872],{"class":297},[229,1944,319],{"class":263},[229,1946,1947,1949,1951,1953,1955,1958,1961],{"class":231,"line":402},[229,1948,287],{"class":263},[229,1950,1904],{"class":290},[229,1952,294],{"class":263},[229,1954,1909],{"class":280},[229,1956,1957],{"class":263},"[",[229,1959,1960],{"class":297},"0",[229,1962,1963],{"class":263},"])\n",[229,1965,1966,1968,1971,1973,1975,1977,1980],{"class":231,"line":411},[229,1967,287],{"class":263},[229,1969,1970],{"class":290},"AddPullRequest",[229,1972,294],{"class":263},[229,1974,1033],{"class":249},[229,1976,1036],{"class":997},[229,1978,1979],{"class":259}," fifth",[229,1981,319],{"class":263},[229,1983,1984,1986,1988],{"class":231,"line":417},[229,1985,287],{"class":263},[229,1987,1077],{"class":290},[229,1989,1011],{"class":263},[229,1991,1992],{"class":231,"line":449},[229,1993,341],{"emptyLinePlaceholder":340},[229,1995,1996],{"class":231,"line":472},[229,1997,1998],{"class":235},"\u002F\u002F first:  1, 2, 1, 2    (numbering restarts per repository)\n",[229,2000,2001],{"class":231,"line":489},[229,2002,2003],{"class":235},"\u002F\u002F second: 3, 4, 3, 4    (the variant resumes the same sequence)\n",[229,2005,2006],{"class":231,"line":495},[229,2007,2008],{"class":235},"\u002F\u002F fifth:  5, Title \"PR 5\", Branch \"feature\u002F5\"\n",[208,2010,2012],{"id":2011},"explicit-values-are-reserved-first","Explicit values are reserved first",[176,2014,2015,2016,1339],{},"Explicit numbers are skipped by the sequence, even when they come ",[2017,2018,2019],"em",{},"later in the same step",[213,2021,2024],{"className":215,"code":2022,"filename":1781,"highlights":2023,"language":224,"meta":225,"style":225},"await TestBiome\n    .Start(out _)\n    .AddCodeRepository(out var repo)\n    .AddPullRequests(\n        out var prs,\n        _ => { },\n        pr => pr.Number = 1,\n        pr => pr.Number = 3,\n        _ => { }\n    )\n    .Under(repo)\n    .AddPullRequest(out var next)\n    .BuildAsync();\n\u002F\u002F prs: 2, 1, 3, 4   next: 5\n",[344,374],[183,2025,2026,2033,2047,2064,2072,2084,2096,2117,2137,2148,2152,2164,2181,2189],{"__ignoreMap":225},[229,2027,2028,2030],{"class":231,"line":232},[229,2029,1055],{"class":267},[229,2031,2032],{"class":280}," TestBiome\n",[229,2034,2035,2037,2039,2041,2043,2045],{"class":231,"line":239},[229,2036,287],{"class":263},[229,2038,1028],{"class":290},[229,2040,294],{"class":263},[229,2042,1033],{"class":249},[229,2044,705],{"class":280},[229,2046,319],{"class":263},[229,2048,2049,2051,2054,2056,2058,2060,2062],{"class":231,"line":219},[229,2050,287],{"class":263},[229,2052,2053],{"class":290},"AddCodeRepository",[229,2055,294],{"class":263},[229,2057,1033],{"class":249},[229,2059,1036],{"class":997},[229,2061,1300],{"class":259},[229,2063,319],{"class":263},[229,2065,2066,2068,2070],{"class":231,"line":220},[229,2067,287],{"class":263},[229,2069,1881],{"class":290},[229,2071,864],{"class":263},[229,2073,2074,2077,2079,2082],{"class":231,"line":221},[229,2075,2076],{"class":249},"        out",[229,2078,1036],{"class":997},[229,2080,2081],{"class":259}," prs",[229,2083,469],{"class":263},[229,2085,2086,2089,2091,2093],{"class":231,"line":337},[229,2087,2088],{"class":259},"        _",[229,2090,307],{"class":267},[229,2092,605],{"class":263},[229,2094,2095],{"class":263}," },\n",[229,2097,2099,2102,2104,2106,2108,2111,2113,2115],{"class":2098,"line":344},[231,246],[229,2100,2101],{"class":259},"        pr",[229,2103,307],{"class":267},[229,2105,662],{"class":280},[229,2107,206],{"class":263},[229,2109,2110],{"class":280},"Number ",[229,2112,423],{"class":267},[229,2114,316],{"class":297},[229,2116,469],{"class":263},[229,2118,2120,2122,2124,2126,2128,2130,2132,2135],{"class":2119,"line":374},[231,246],[229,2121,2101],{"class":259},[229,2123,307],{"class":267},[229,2125,662],{"class":280},[229,2127,206],{"class":263},[229,2129,2110],{"class":280},[229,2131,423],{"class":267},[229,2133,2134],{"class":297}," 3",[229,2136,469],{"class":263},[229,2138,2139,2141,2143,2145],{"class":231,"line":402},[229,2140,2088],{"class":259},[229,2142,307],{"class":267},[229,2144,605],{"class":263},[229,2146,2147],{"class":263}," }\n",[229,2149,2150],{"class":231,"line":411},[229,2151,645],{"class":263},[229,2153,2154,2156,2158,2160,2162],{"class":231,"line":417},[229,2155,287],{"class":263},[229,2157,1904],{"class":290},[229,2159,294],{"class":263},[229,2161,441],{"class":280},[229,2163,319],{"class":263},[229,2165,2166,2168,2170,2172,2174,2176,2179],{"class":231,"line":449},[229,2167,287],{"class":263},[229,2169,1970],{"class":290},[229,2171,294],{"class":263},[229,2173,1033],{"class":249},[229,2175,1036],{"class":997},[229,2177,2178],{"class":259}," next",[229,2180,319],{"class":263},[229,2182,2183,2185,2187],{"class":231,"line":472},[229,2184,287],{"class":263},[229,2186,1077],{"class":290},[229,2188,1011],{"class":263},[229,2190,2191],{"class":231,"line":489},[229,2192,2193],{"class":235},"\u002F\u002F prs: 2, 1, 3, 4   next: 5\n",[2195,2196,2197],"caution",{},[176,2198,2199,2200,2203],{},"Set explicit numbers in the ",[1755,2201,2202],{},"same step"," as the defaults, or an earlier one. A later step can't retroactively fix numbers that are already assigned.",[208,2205,2207],{"id":2206},"commas-plus-and-transients","Commas, plus, and transients",[213,2209,2212],{"className":215,"code":2210,"filename":1781,"highlights":2211,"language":224,"meta":225,"style":225},"await TestBiome\n    .Start(out _)\n    .AddCodeRepository(out _)\n    .AddPullRequests(\n        out var prs,\n        PullRequests.Closed,\n        PullRequests.Closed + PullRequests.Merged\n    ) \u002F\u002F one PR with both traits\n    .BuildAsync();\n\u002F\u002F prs.Length == 2; only prs[1].Merged is true\n",[337,344,374],[183,2213,2214,2220,2234,2248,2256,2266,2278,2298,2307,2315],{"__ignoreMap":225},[229,2215,2216,2218],{"class":231,"line":232},[229,2217,1055],{"class":267},[229,2219,2032],{"class":280},[229,2221,2222,2224,2226,2228,2230,2232],{"class":231,"line":239},[229,2223,287],{"class":263},[229,2225,1028],{"class":290},[229,2227,294],{"class":263},[229,2229,1033],{"class":249},[229,2231,705],{"class":280},[229,2233,319],{"class":263},[229,2235,2236,2238,2240,2242,2244,2246],{"class":231,"line":219},[229,2237,287],{"class":263},[229,2239,2053],{"class":290},[229,2241,294],{"class":263},[229,2243,1033],{"class":249},[229,2245,705],{"class":280},[229,2247,319],{"class":263},[229,2249,2250,2252,2254],{"class":231,"line":220},[229,2251,287],{"class":263},[229,2253,1881],{"class":290},[229,2255,864],{"class":263},[229,2257,2258,2260,2262,2264],{"class":231,"line":221},[229,2259,2076],{"class":249},[229,2261,1036],{"class":997},[229,2263,2081],{"class":259},[229,2265,469],{"class":263},[229,2267,2269,2272,2274,2276],{"class":2268,"line":337},[231,246],[229,2270,2271],{"class":280},"        PullRequests",[229,2273,206],{"class":263},[229,2275,1838],{"class":280},[229,2277,469],{"class":263},[229,2279,2281,2283,2285,2288,2290,2293,2295],{"class":2280,"line":344},[231,246],[229,2282,2271],{"class":280},[229,2284,206],{"class":263},[229,2286,2287],{"class":280},"Closed ",[229,2289,313],{"class":267},[229,2291,2292],{"class":280}," PullRequests",[229,2294,206],{"class":263},[229,2296,2297],{"class":280},"Merged\n",[229,2299,2301,2304],{"class":2300,"line":374},[231,246],[229,2302,2303],{"class":263},"    )",[229,2305,2306],{"class":235}," \u002F\u002F one PR with both traits\n",[229,2308,2309,2311,2313],{"class":231,"line":402},[229,2310,287],{"class":263},[229,2312,1077],{"class":290},[229,2314,1011],{"class":263},[229,2316,2317],{"class":231,"line":411},[229,2318,2319],{"class":235},"\u002F\u002F prs.Length == 2; only prs[1].Merged is true\n",[176,2321,2322],{},"Transient inputs stay inspectable but are not saved:",[213,2324,2327],{"className":215,"code":2325,"filename":1781,"highlights":2326,"language":224,"meta":225,"style":225},"var store = new RecordingStore();\nvar biome = TestBiome.Start(out _, store);\n\nbiome.AddCodeRepository(out _).AddPullRequests(out var prs, 2);\n\u002F\u002F marks the most recent Add step, whichever builder you call it on\nawait biome.Transient().BuildAsync();\n\n\u002F\u002F biome.All\u003CPullRequestRecord>().Count == 2, but the store holds none\n",[337],[183,2328,2329,2343,2369,2373,2406,2411,2430,2434],{"__ignoreMap":225},[229,2330,2331,2333,2335,2337,2339,2341],{"class":231,"line":232},[229,2332,998],{"class":997},[229,2334,1001],{"class":259},[229,2336,277],{"class":267},[229,2338,599],{"class":267},[229,2340,1008],{"class":259},[229,2342,1011],{"class":263},[229,2344,2345,2347,2349,2351,2353,2355,2357,2359,2361,2363,2365,2367],{"class":231,"line":239},[229,2346,998],{"class":997},[229,2348,1018],{"class":259},[229,2350,277],{"class":267},[229,2352,1023],{"class":280},[229,2354,206],{"class":263},[229,2356,1028],{"class":290},[229,2358,294],{"class":263},[229,2360,1033],{"class":249},[229,2362,705],{"class":280},[229,2364,301],{"class":263},[229,2366,1001],{"class":280},[229,2368,785],{"class":263},[229,2370,2371],{"class":231,"line":219},[229,2372,341],{"emptyLinePlaceholder":340},[229,2374,2375,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404],{"class":231,"line":220},[229,2376,2377],{"class":280},"biome",[229,2379,206],{"class":263},[229,2381,2053],{"class":290},[229,2383,294],{"class":263},[229,2385,1033],{"class":249},[229,2387,705],{"class":280},[229,2389,1074],{"class":263},[229,2391,1881],{"class":290},[229,2393,294],{"class":263},[229,2395,1033],{"class":249},[229,2397,1036],{"class":997},[229,2399,2081],{"class":259},[229,2401,301],{"class":263},[229,2403,1872],{"class":297},[229,2405,785],{"class":263},[229,2407,2408],{"class":231,"line":221},[229,2409,2410],{"class":235},"\u002F\u002F marks the most recent Add step, whichever builder you call it on\n",[229,2412,2414,2416,2418,2420,2423,2426,2428],{"class":2413,"line":337},[231,246],[229,2415,1055],{"class":267},[229,2417,1018],{"class":280},[229,2419,206],{"class":263},[229,2421,2422],{"class":290},"Transient",[229,2424,2425],{"class":263},"().",[229,2427,1077],{"class":290},[229,2429,1011],{"class":263},[229,2431,2432],{"class":231,"line":344},[229,2433,341],{"emptyLinePlaceholder":340},[229,2435,2436],{"class":231,"line":374},[229,2437,2438],{"class":235},"\u002F\u002F biome.All\u003CPullRequestRecord>().Count == 2, but the store holds none\n",[208,2440,2442],{"id":2441},"time","Time",[176,2444,2445,2446,2449,2450,2453],{},"A shared ",[183,2447,2448],{},"FakeTimeProvider"," is read ",[1755,2451,2452],{},"live",", and every source of now is rounded to 1 µs:",[213,2455,2458],{"className":215,"code":2456,"filename":1781,"highlights":2457,"language":224,"meta":225,"style":225},"var instant = new DateTimeOffset(2026, 10, 11, 12, 0, 0, TimeSpan.Zero).AddTicks(\n    17\n);\nvar time = new FakeTimeProvider(instant);\nvar biome = TestBiome.Start(out _, time: time);\n\nbiome.AddCodeRepository(out var first);\ntime.Advance(TimeSpan.FromHours(1));\nawait biome\n    .AddOne(\n        Blueprints.Repository,\n        out var second,\n        (repo, ctx) => repo.CreatedAt = ctx.Ago(TimeSpan.FromMinutes(5))\n    )\n    .AddPullRequest(out _)\n    .AddCodeReview(out _)\n    .AddActiveLock(out var activeLock)\n    .BuildAsync();\n\n\u002F\u002F first.CreatedAt   == instant.AddTicks(-7)                      (rounded to 1 µs)\n\u002F\u002F second.CreatedAt  == instant.AddTicks(-7).AddMinutes(55)\n\u002F\u002F activeLock.ExpiresAt == instant.AddTicks(-7).AddMinutes(65)\n",[220,221,374,472,489],[183,2459,2460,2516,2521,2525,2547,2578,2582,2600,2627,2633,2642,2653,2663,2710,2715,2729,2744,2761,2769,2773,2778,2783],{"__ignoreMap":225},[229,2461,2462,2464,2467,2469,2471,2473,2475,2478,2480,2482,2484,2487,2489,2492,2494,2497,2499,2501,2503,2505,2507,2509,2511,2514],{"class":231,"line":232},[229,2463,998],{"class":997},[229,2465,2466],{"class":259}," instant",[229,2468,277],{"class":267},[229,2470,599],{"class":267},[229,2472,1233],{"class":259},[229,2474,294],{"class":263},[229,2476,2477],{"class":297},"2026",[229,2479,301],{"class":263},[229,2481,1277],{"class":297},[229,2483,301],{"class":263},[229,2485,2486],{"class":297}," 11",[229,2488,301],{"class":263},[229,2490,2491],{"class":297}," 12",[229,2493,301],{"class":263},[229,2495,2496],{"class":297}," 0",[229,2498,301],{"class":263},[229,2500,2496],{"class":297},[229,2502,301],{"class":263},[229,2504,1282],{"class":280},[229,2506,206],{"class":263},[229,2508,1287],{"class":280},[229,2510,1074],{"class":263},[229,2512,2513],{"class":290},"AddTicks",[229,2515,864],{"class":263},[229,2517,2518],{"class":231,"line":239},[229,2519,2520],{"class":297},"    17\n",[229,2522,2523],{"class":231,"line":219},[229,2524,785],{"class":263},[229,2526,2528,2530,2533,2535,2537,2540,2542,2545],{"class":2527,"line":220},[231,246],[229,2529,998],{"class":997},[229,2531,2532],{"class":259}," time",[229,2534,277],{"class":267},[229,2536,599],{"class":267},[229,2538,2539],{"class":259}," FakeTimeProvider",[229,2541,294],{"class":263},[229,2543,2544],{"class":280},"instant",[229,2546,785],{"class":263},[229,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570,2572,2574,2576],{"class":2549,"line":221},[231,246],[229,2551,998],{"class":997},[229,2553,1018],{"class":259},[229,2555,277],{"class":267},[229,2557,1023],{"class":280},[229,2559,206],{"class":263},[229,2561,1028],{"class":290},[229,2563,294],{"class":263},[229,2565,1033],{"class":249},[229,2567,705],{"class":280},[229,2569,301],{"class":263},[229,2571,2532],{"class":259},[229,2573,1339],{"class":263},[229,2575,2532],{"class":280},[229,2577,785],{"class":263},[229,2579,2580],{"class":231,"line":337},[229,2581,341],{"emptyLinePlaceholder":340},[229,2583,2584,2586,2588,2590,2592,2594,2596,2598],{"class":231,"line":344},[229,2585,2377],{"class":280},[229,2587,206],{"class":263},[229,2589,2053],{"class":290},[229,2591,294],{"class":263},[229,2593,1033],{"class":249},[229,2595,1036],{"class":997},[229,2597,1890],{"class":259},[229,2599,785],{"class":263},[229,2601,2603,2605,2607,2610,2612,2615,2617,2620,2622,2624],{"class":2602,"line":374},[231,246],[229,2604,2441],{"class":280},[229,2606,206],{"class":263},[229,2608,2609],{"class":290},"Advance",[229,2611,294],{"class":263},[229,2613,2614],{"class":280},"TimeSpan",[229,2616,206],{"class":263},[229,2618,2619],{"class":290},"FromHours",[229,2621,294],{"class":263},[229,2623,298],{"class":297},[229,2625,2626],{"class":263},"));\n",[229,2628,2629,2631],{"class":231,"line":402},[229,2630,1055],{"class":267},[229,2632,1851],{"class":280},[229,2634,2635,2637,2640],{"class":231,"line":411},[229,2636,287],{"class":263},[229,2638,2639],{"class":290},"AddOne",[229,2641,864],{"class":263},[229,2643,2644,2647,2649,2651],{"class":231,"line":417},[229,2645,2646],{"class":280},"        Blueprints",[229,2648,206],{"class":263},[229,2650,1112],{"class":280},[229,2652,469],{"class":263},[229,2654,2655,2657,2659,2661],{"class":231,"line":449},[229,2656,2076],{"class":249},[229,2658,1036],{"class":997},[229,2660,1933],{"class":259},[229,2662,469],{"class":263},[229,2664,2666,2668,2670,2672,2674,2676,2678,2680,2682,2685,2687,2689,2691,2694,2696,2698,2700,2703,2705,2707],{"class":2665,"line":472},[231,246],[229,2667,585],{"class":263},[229,2669,441],{"class":259},[229,2671,301],{"class":263},[229,2673,426],{"class":259},[229,2675,594],{"class":263},[229,2677,307],{"class":267},[229,2679,1300],{"class":280},[229,2681,206],{"class":263},[229,2683,2684],{"class":280},"CreatedAt ",[229,2686,423],{"class":267},[229,2688,426],{"class":280},[229,2690,206],{"class":263},[229,2692,2693],{"class":290},"Ago",[229,2695,294],{"class":263},[229,2697,2614],{"class":280},[229,2699,206],{"class":263},[229,2701,2702],{"class":290},"FromMinutes",[229,2704,294],{"class":263},[229,2706,1627],{"class":297},[229,2708,2709],{"class":263},"))\n",[229,2711,2713],{"class":2712,"line":489},[231,246],[229,2714,645],{"class":263},[229,2716,2717,2719,2721,2723,2725,2727],{"class":231,"line":495},[229,2718,287],{"class":263},[229,2720,1970],{"class":290},[229,2722,294],{"class":263},[229,2724,1033],{"class":249},[229,2726,705],{"class":280},[229,2728,319],{"class":263},[229,2730,2731,2733,2736,2738,2740,2742],{"class":231,"line":501},[229,2732,287],{"class":263},[229,2734,2735],{"class":290},"AddCodeReview",[229,2737,294],{"class":263},[229,2739,1033],{"class":249},[229,2741,705],{"class":280},[229,2743,319],{"class":263},[229,2745,2746,2748,2751,2753,2755,2757,2759],{"class":231,"line":506},[229,2747,287],{"class":263},[229,2749,2750],{"class":290},"AddActiveLock",[229,2752,294],{"class":263},[229,2754,1033],{"class":249},[229,2756,1036],{"class":997},[229,2758,1071],{"class":259},[229,2760,319],{"class":263},[229,2762,2763,2765,2767],{"class":231,"line":512},[229,2764,287],{"class":263},[229,2766,1077],{"class":290},[229,2768,1011],{"class":263},[229,2770,2771],{"class":231,"line":527},[229,2772,341],{"emptyLinePlaceholder":340},[229,2774,2775],{"class":231,"line":533},[229,2776,2777],{"class":235},"\u002F\u002F first.CreatedAt   == instant.AddTicks(-7)                      (rounded to 1 µs)\n",[229,2779,2780],{"class":231,"line":539},[229,2781,2782],{"class":235},"\u002F\u002F second.CreatedAt  == instant.AddTicks(-7).AddMinutes(55)\n",[229,2784,2785],{"class":231,"line":545},[229,2786,2787],{"class":235},"\u002F\u002F activeLock.ExpiresAt == instant.AddTicks(-7).AddMinutes(65)\n",[2789,2790,2791],"tip",{},[176,2792,2793,2795,2796,2799,2800,2803],{},[183,2794,2693],{}," and ",[183,2797,2798],{},"FromNow"," derive from the ",[1755,2801,2802],{},"rounded"," now, so a value read back from Postgres equals the value in memory.",[2805,2806,2807],"style",{},"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 pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--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 .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sG8yY, html code.shiki .sG8yY{--shiki-light:#E2931D;--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":225,"searchDepth":232,"depth":239,"links":2809},[2810,2811,2812,2813,2814,2815],{"id":210,"depth":239,"text":211},{"id":978,"depth":239,"text":979},{"id":1761,"depth":239,"text":1762},{"id":2011,"depth":239,"text":2012},{"id":2206,"depth":239,"text":2207},{"id":2441,"depth":239,"text":2442},"Repository, pull request, review and lock - the library's reference domain.","md",null,{},{"icon":115},{"title":112,"description":2816},"wTqxUI7fsO6r3RdoIlFROW96ZCcB_YNYnZyAVVnmYJ4",[2824,2826],{"title":105,"path":106,"stem":107,"description":2825,"icon":110,"children":-1},"Eight complete example domains from the library's own test suite, each with annotated tests.",{"title":117,"path":118,"stem":119,"description":2827,"icon":120,"children":-1},"Users, aliases, invitations and organizations - fan-out per parent, fill-only derives and an aggregate.",1791831050381]