[{"data":1,"prerenderedAt":876},["ShallowReactive",2],{"docs-nav:en":3,"docs:\u002Fdocs\u002Fconcepts\u002Ffrond":186},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,16,20,24,28,50,75,120,145],{"title":10,"path":6,"stem":11},"What is Fougere","docs\u002Findex",{"title":13,"path":14,"stem":15},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",{"title":17,"path":18,"stem":19},"An app you already have","\u002Fdocs\u002Fexisting-app","docs\u002F02.existing-app",{"title":21,"path":22,"stem":23},"Bring your schema","\u002Fdocs\u002Fbring-your-schema","docs\u002F03.bring-your-schema",{"title":25,"path":26,"stem":27},"The CLI","\u002Fdocs\u002Fcli","docs\u002F04.cli",{"title":29,"path":30,"stem":31,"children":32,"page":49},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F2.concepts",[33,37,41,45],{"title":34,"path":35,"stem":36},"Philosophy","\u002Fdocs\u002Fconcepts\u002Fphilosophy","docs\u002F2.concepts\u002F1.philosophy",{"title":38,"path":39,"stem":40},"The Frond","\u002Fdocs\u002Fconcepts\u002Ffrond","docs\u002F2.concepts\u002F2.frond",{"title":42,"path":43,"stem":44},"The shortest path","\u002Fdocs\u002Fconcepts\u002Fshortest-path","docs\u002F2.concepts\u002F3.shortest-path",{"title":46,"path":47,"stem":48},"The base","\u002Fdocs\u002Fconcepts\u002Fthe-base","docs\u002F2.concepts\u002F4.the-base",false,{"title":51,"path":52,"stem":53,"children":54,"page":49},"Schema","\u002Fdocs\u002Fschema","docs\u002F3.schema",[55,59,63,67,71],{"title":56,"path":57,"stem":58},"Entities","\u002Fdocs\u002Fschema\u002Fentities","docs\u002F3.schema\u002F1.entities",{"title":60,"path":61,"stem":62},"Views","\u002Fdocs\u002Fschema\u002Fviews","docs\u002F3.schema\u002F2.views",{"title":64,"path":65,"stem":66},"The identity card","\u002Fdocs\u002Fschema\u002Fcard","docs\u002F3.schema\u002F3.card",{"title":68,"path":69,"stem":70},"Standard Schema","\u002Fdocs\u002Fschema\u002Fstandard-schema","docs\u002F3.schema\u002F4.standard-schema",{"title":72,"path":73,"stem":74},"How a schema moves","\u002Fdocs\u002Fschema\u002Fevolution","docs\u002F3.schema\u002F5.evolution",{"title":76,"path":77,"stem":78,"children":79,"page":49},"Business","\u002Fdocs\u002Fbusiness","docs\u002F4.business",[80,84,88,92,96,100,104,108,112,116],{"title":81,"path":82,"stem":83},"Handlers","\u002Fdocs\u002Fbusiness\u002Fhandlers","docs\u002F4.business\u002F1.handlers",{"title":85,"path":86,"stem":87},"Ports","\u002Fdocs\u002Fbusiness\u002Fports","docs\u002F4.business\u002F10.ports",{"title":89,"path":90,"stem":91},"Presenters","\u002Fdocs\u002Fbusiness\u002Fpresenters","docs\u002F4.business\u002F2.presenters",{"title":93,"path":94,"stem":95},"Collectors","\u002Fdocs\u002Fbusiness\u002Fcollectors","docs\u002F4.business\u002F3.collectors",{"title":97,"path":98,"stem":99},"Errors","\u002Fdocs\u002Fbusiness\u002Ferrors","docs\u002F4.business\u002F4.errors",{"title":101,"path":102,"stem":103},"Seeds","\u002Fdocs\u002Fbusiness\u002Fseeds","docs\u002F4.business\u002F5.seeds",{"title":105,"path":106,"stem":107},"Facts","\u002Fdocs\u002Fbusiness\u002Ffacts","docs\u002F4.business\u002F6.facts",{"title":109,"path":110,"stem":111},"Storage","\u002Fdocs\u002Fbusiness\u002Fstorage","docs\u002F4.business\u002F7.storage",{"title":113,"path":114,"stem":115},"Writes that stand or fall as one","\u002Fdocs\u002Fbusiness\u002Ftogether","docs\u002F4.business\u002F8.together",{"title":117,"path":118,"stem":119},"Repositories","\u002Fdocs\u002Fbusiness\u002Frepositories","docs\u002F4.business\u002F9.repositories",{"title":121,"path":122,"stem":123,"children":124,"page":49},"Client","\u002Fdocs\u002Fclient","docs\u002F5.client",[125,129,133,137,141],{"title":126,"path":127,"stem":128},"Queries & commands","\u002Fdocs\u002Fclient\u002Fqueries-commands","docs\u002F5.client\u002F1.queries-commands",{"title":130,"path":131,"stem":132},"Forms","\u002Fdocs\u002Fclient\u002Fforms","docs\u002F5.client\u002F2.forms",{"title":134,"path":135,"stem":136},"Session","\u002Fdocs\u002Fclient\u002Fsession","docs\u002F5.client\u002F3.session",{"title":138,"path":139,"stem":140},"invoke","\u002Fdocs\u002Fclient\u002Finvoke","docs\u002F5.client\u002F4.invoke",{"title":142,"path":143,"stem":144},"Back-office","\u002Fdocs\u002Fclient\u002Fadmin","docs\u002F5.client\u002F5.admin",{"title":146,"path":147,"stem":148,"children":149,"page":49},"Infrastructure","\u002Fdocs\u002Finfra","docs\u002F6.infra",[150,154,158,162,166,170,174,178,182],{"title":151,"path":152,"stem":153},"The gradient","\u002Fdocs\u002Finfra\u002Fgradient","docs\u002F6.infra\u002F1.gradient",{"title":155,"path":156,"stem":157},"Surfaces — REST & GraphQL","\u002Fdocs\u002Finfra\u002Fsurfaces","docs\u002F6.infra\u002F2.surfaces",{"title":159,"path":160,"stem":161},"Deployment","\u002Fdocs\u002Finfra\u002Fdeployment","docs\u002F6.infra\u002F3.deployment",{"title":163,"path":164,"stem":165},"Hosts","\u002Fdocs\u002Finfra\u002Fhosts","docs\u002F6.infra\u002F4.hosts",{"title":167,"path":168,"stem":169},"Sources","\u002Fdocs\u002Finfra\u002Fsources","docs\u002F6.infra\u002F5.sources",{"title":171,"path":172,"stem":173},"Lifecycle","\u002Fdocs\u002Finfra\u002Flifecycle","docs\u002F6.infra\u002F6.lifecycle",{"title":175,"path":176,"stem":177},"Identity across Fronds","\u002Fdocs\u002Finfra\u002Fidentity","docs\u002F6.infra\u002F7.identity",{"title":179,"path":180,"stem":181},"Observability","\u002Fdocs\u002Finfra\u002Fobservability","docs\u002F6.infra\u002F8.observability",{"title":183,"path":184,"stem":185},"Testing","\u002Fdocs\u002Finfra\u002Ftesting","docs\u002F6.infra\u002F9.testing",{"id":187,"title":38,"body":188,"description":870,"extension":871,"meta":872,"navigation":873,"path":39,"seo":874,"stem":40,"__hash__":875},"docs_en\u002Fdocs\u002F2.concepts\u002F2.frond.md",{"type":189,"value":190,"toc":862},"minimark",[191,195,204,209,212,268,271,275,278,383,390,394,397,443,446,450,461,480,491,625,647,652,675,680,786,805,824,848,858],[192,193,38],"h1",{"id":194},"the-frond",[196,197,198,199,203],"p",{},"A ",[200,201,202],"strong",{},"Frond"," is a business module that groups the elements responsible for one domain.",[205,206,208],"h2",{"id":207},"the-ownership-boundary","The ownership boundary",[196,210,211],{},"A Frond contains:",[213,214,215,223,234,240,250,256,262],"ul",{},[216,217,218,219,222],"li",{},"its ",[200,220,221],{},"entities"," and schemas,",[216,224,218,225,228,229,233],{},[200,226,227],{},"operations"," — commands and queries (",[230,231,232],"a",{"href":82},"handlers","),",[216,235,218,236,239],{},[200,237,238],{},"policies"," — access rules checked inside operations,",[216,241,218,242,245,246,249],{},[200,243,244],{},"events"," — the ",[230,247,248],{"href":106},"facts"," its commands announce, which nothing subscribes to by default,",[216,251,218,252,255],{},[200,253,254],{},"persistence adapters"," — how its entities are realized,",[216,257,218,258,261],{},[200,259,260],{},"public contracts"," — what other Fronds may call,",[216,263,218,264,267],{},[200,265,266],{},"invalidation rules"," — what a command revalidates.",[196,269,270],{},"A Frond does not import another Frond's internal files. Interactions go through explicit\ncontracts, preferably operations or events. An App composes Fronds and keeps business\nlogic in those modules rather than in its pages, fetches, or stores.",[205,272,274],{"id":273},"the-six-layers","The six layers",[196,276,277],{},"The model follows six steps:",[279,280,281,297],"table",{},[282,283,284],"thead",{},[285,286,287,291,294],"tr",{},[288,289,290],"th",{},"#",[288,292,293],{},"Layer",[288,295,296],{},"What happens",[298,299,300,314,327,340,353,366],"tbody",{},[285,301,302,306,311],{},[303,304,305],"td",{},"1",[303,307,308],{},[200,309,310],{},"Declaration",[303,312,313],{},"the author declares entities, views, operations, events — no HTTP, no SQL here",[285,315,316,319,324],{},[303,317,318],{},"2",[303,320,321],{},[200,322,323],{},"Derivation",[303,325,326],{},"validation, types, io views, adapter-readable metadata derive from it",[285,328,329,332,337],{},[303,330,331],{},"3",[303,333,334],{},[200,335,336],{},"Local capability",[303,338,339],{},"the declaration becomes executable in-process — the reference mode",[285,341,342,345,350],{},[303,343,344],{},"4",[303,346,347],{},[200,348,349],{},"Projection",[303,351,352],{},"façades are generated toward transports: HTTP, GraphQL, CLI, workers",[285,354,355,358,363],{},[303,356,357],{},"5",[303,359,360],{},[200,361,362],{},"Composition",[303,364,365],{},"Fronds are scanned and linked in one runtime — module → contract → interaction",[285,367,368,371,376],{},[303,369,370],{},"6",[303,372,373],{},[200,374,375],{},"Distribution",[303,377,378,379,382],{},"a capability moves out of process; serialization, timeouts, retries appear ",[200,380,381],{},"here",", explicitly",[196,384,385,386,389],{},"The ",[230,387,388],{"href":152},"gradient page"," covers the move from local to remote execution.",[205,391,393],{"id":392},"generated-vs-handwritten","Generated vs handwritten",[196,395,396],{},"The split of responsibilities is:",[279,398,399,409],{},[282,400,401],{},[285,402,403,406],{},[288,404,405],{},"Fougere generates",[288,407,408],{},"You write",[298,410,411,419,427,435],{},[285,412,413,416],{},[303,414,415],{},"validation, derived views, tables\u002Fmetadata",[303,417,418],{},"non-trivial business logic",[285,420,421,424],{},[303,422,423],{},"GraphQL types and inputs, trivial CRUD",[303,425,426],{},"rich invariants, multi-step workflows",[285,428,429,432],{},[303,430,431],{},"projection façades (contract → transport)",[303,433,434],{},"error policies, consistency decisions",[285,436,437,440],{},[303,438,439],{},"typed clients, composition manifests",[303,441,442],{},"sensitive inter-Frond orchestration",[196,444,445],{},"Fougere handles repetitive integrations around a contract. The developer writes\napplication-specific behavior. A service layer remains optional: a handler can contain\nthe logic or delegate it.",[205,447,449],{"id":448},"in-the-file-system","In the file system",[451,452,457],"pre",{"className":453,"code":455,"language":456},[454],"language-text","fronds\u002Fblog\u002F\n  entities\u002F             ← the declarations\n  handlers\u002F             ← the operations   (handlers\u002F\u003Csurface>\u002F = a named audience)\n  presenters\u002F           ← computed fields added to an entity's output\n  collectors\u002F           ← parameter resolution by type\n  services\u002F             ← plain classes, injected by type\n  repositories\u002F         ← the same, under a second name\n  seeds\u002F                ← data created at startup\n  versions\u002F             ← what its shapes used to be (`fougere freeze`)\n","text",[458,459,455],"code",{"__ignoreMap":460},"",[196,462,463,464,467,468,471,472,476,477,479],{},"The scanner recognizes a Frond through these directories. The ",[200,465,466],{},"project root"," can follow\nthe same convention, so a single-domain app does not need a ",[458,469,470],{},"fronds\u002F"," directory\n(",[230,473,475],{"href":474},"\u002Fdocs\u002Fgetting-started#one-domain-no-fronds-at-all","the flat shape","). A second domain can\nlater be added under ",[458,478,470],{}," without moving the first one.",[196,481,482,483,486,487,490],{},"These names are the only place in Fougere where a name IS the declaration, so they are the\nonly ones a project can restate. ",[458,484,485],{},"conventions:"," in ",[458,488,489],{},"fougere.config.ts"," names what differs\nand nothing else:",[451,492,496],{"className":493,"code":494,"language":495,"meta":460,"style":460},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","export default defineFougere({\n  conventions: {\n    scope: '@domains',                        \u002F\u002F default: '@fronds'\n    fronds: 'domains',                        \u002F\u002F default: 'fronds'\n    dirs: { entities: 'models' },             \u002F\u002F the other seven keep their names\n  },\n})\n","ts",[458,497,498,522,535,561,581,610,616],{"__ignoreMap":460},[499,500,503,507,510,514,518],"span",{"class":501,"line":502},"line",1,[499,504,506],{"class":505},"sVHd0","export",[499,508,509],{"class":505}," default",[499,511,513],{"class":512},"sGLFI"," defineFougere",[499,515,517],{"class":516},"su5hD","(",[499,519,521],{"class":520},"sP7_E","{\n",[499,523,525,529,532],{"class":501,"line":524},2,[499,526,528],{"class":527},"skxfh","  conventions",[499,530,531],{"class":520},":",[499,533,534],{"class":520}," {\n",[499,536,538,541,543,547,551,554,557],{"class":501,"line":537},3,[499,539,540],{"class":527},"    scope",[499,542,531],{"class":520},[499,544,546],{"class":545},"sjJ54"," '",[499,548,550],{"class":549},"s_sjI","@domains",[499,552,553],{"class":545},"'",[499,555,556],{"class":520},",",[499,558,560],{"class":559},"sutJx","                        \u002F\u002F default: '@fronds'\n",[499,562,564,567,569,571,574,576,578],{"class":501,"line":563},4,[499,565,566],{"class":527},"    fronds",[499,568,531],{"class":520},[499,570,546],{"class":545},[499,572,573],{"class":549},"domains",[499,575,553],{"class":545},[499,577,556],{"class":520},[499,579,580],{"class":559},"                        \u002F\u002F default: 'fronds'\n",[499,582,584,587,589,592,595,597,599,602,604,607],{"class":501,"line":583},5,[499,585,586],{"class":527},"    dirs",[499,588,531],{"class":520},[499,590,591],{"class":520}," {",[499,593,594],{"class":527}," entities",[499,596,531],{"class":520},[499,598,546],{"class":545},[499,600,601],{"class":549},"models",[499,603,553],{"class":545},[499,605,606],{"class":520}," },",[499,608,609],{"class":559},"             \u002F\u002F the other seven keep their names\n",[499,611,613],{"class":501,"line":612},6,[499,614,615],{"class":520},"  },\n",[499,617,619,622],{"class":501,"line":618},7,[499,620,621],{"class":520},"}",[499,623,624],{"class":516},")\n",[196,626,627,628,631,632,634,635,638,639,642,643,646],{},"It is read ",[200,629,630],{},"before"," the fronds are discovered, which is what lets it name the scope they\nare found under — so nothing in ",[458,633,489],{}," may import ",[458,636,637],{},"@fronds\u002F*",". Everything\ndownstream follows: the scan, the aliases a page resolves, the watcher, and the\n",[458,640,641],{},"package.json"," that ",[458,644,645],{},"fougere sync"," writes into a consumer.",[648,649,651],"h3",{"id":650},"naming-and-importing-a-frond","Naming and importing a Frond",[196,653,654,655,658,659,662,663,666,667,670,671,674],{},"The directory name is the Frond's name, and ",[458,656,657],{},"@fougere\u002Fnuxt"," turns it into an alias:\n",[458,660,661],{},"fronds\u002Fblog\u002F"," gives ",[458,664,665],{},"@fronds\u002Fblog",", so a page writes\n",[458,668,669],{},"import Post from '@fronds\u002Fblog\u002Fentities\u002FPost'"," with no file to add. The name also keys the\nentity registrations and any ",[458,672,673],{},"remotes:"," entry.",[196,676,198,677,679],{},[458,678,641],{}," in the Frond answers the two questions the directory cannot.",[451,681,685],{"className":682,"code":683,"language":684,"meta":460,"style":460},"language-json shiki shiki-themes material-theme-lighter github-light github-dark","{\n  \"name\": \"@fronds\u002Fblog\",\n  \"fougere\": { \"frond\": \"blog\" },\n  \"exports\": { \".\u002Fentities\u002F*\": \".\u002Fentities\u002F*.ts\" }\n}\n","json",[458,686,687,691,716,749,781],{"__ignoreMap":460},[499,688,689],{"class":501,"line":502},[499,690,521],{"class":520},[499,692,693,697,701,704,706,709,711,713],{"class":501,"line":524},[499,694,696],{"class":695},"s39Yj","  \"",[499,698,700],{"class":699},"sseR_","name",[499,702,703],{"class":695},"\"",[499,705,531],{"class":520},[499,707,708],{"class":545}," \"",[499,710,665],{"class":549},[499,712,703],{"class":545},[499,714,715],{"class":520},",\n",[499,717,718,720,723,725,727,729,731,735,737,739,741,744,746],{"class":501,"line":537},[499,719,696],{"class":695},[499,721,722],{"class":699},"fougere",[499,724,703],{"class":695},[499,726,531],{"class":520},[499,728,591],{"class":520},[499,730,708],{"class":695},[499,732,734],{"class":733},"sZMiF","frond",[499,736,703],{"class":695},[499,738,531],{"class":520},[499,740,708],{"class":545},[499,742,743],{"class":549},"blog",[499,745,703],{"class":545},[499,747,748],{"class":520}," },\n",[499,750,751,753,756,758,760,762,764,767,769,771,773,776,778],{"class":501,"line":563},[499,752,696],{"class":695},[499,754,755],{"class":699},"exports",[499,757,703],{"class":695},[499,759,531],{"class":520},[499,761,591],{"class":520},[499,763,708],{"class":695},[499,765,766],{"class":733},".\u002Fentities\u002F*",[499,768,703],{"class":695},[499,770,531],{"class":520},[499,772,708],{"class":545},[499,774,775],{"class":549},".\u002Fentities\u002F*.ts",[499,777,703],{"class":545},[499,779,780],{"class":520}," }\n",[499,782,783],{"class":501,"line":583},[499,784,785],{"class":520},"}\n",[196,787,788,791,792,795,796,798,799,801,802,804],{},[458,789,790],{},"fougere.frond"," allows a name that differs from the directory. For example,\n",[458,793,794],{},"fronds\u002Fblog-v2\u002F"," can remain registered as ",[458,797,743],{},", preserving its entity keys,\n",[458,800,637],{}," imports, and ",[458,803,673],{}," entries. Without this property, Fougere uses the\ndirectory name.",[196,806,807,809,810,812,813,816,817,486,820,823],{},[458,808,700],{}," and ",[458,811,755],{}," make the Frond resolvable ",[200,814,815],{},"outside"," a Nuxt app — a plain Node\nscript, a non-Nuxt consumer — which also needs the Frond declared as a workspace package\n(",[458,818,819],{},"packages: [fronds\u002F*]",[458,821,822],{},"pnpm-workspace.yaml","). Inside a Nuxt app the alias already\ncovers it.",[196,825,826,809,829,832,833,836,837,840,841,844,845,847],{},[458,827,828],{},"services\u002F",[458,830,831],{},"repositories\u002F"," are both scanned as providers, resolved by type. Every\nentity already has a default repository: ",[458,834,835],{},"Crud(Entity)"," receives it automatically, and\nother code asks for ",[458,838,839],{},"RepositoryOf\u003CEntity>"," or a declared ",[458,842,843],{},"\u003CEntity>Repository",". Direct\n",[458,846,109],{}," injection into a handler, presenter or collector is refused at boot. Write a\nrepository when a query deserves a name or several entities form an aggregate; write a\nservice for a source that is not storage at all (an external API or a search index).",[196,849,850,851,854,855,857],{},"When one of those classes extends another, the base becomes a\n",[230,852,853],{"href":86},"port",": the handler declares the base and receives the\nimplementation, and which one answers is a line in ",[458,856,489],{}," — never in the\nFrond.",[859,860,861],"style",{},"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 .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 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 .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sseR_, html code.shiki .sseR_{--shiki-light:#9C3EDA;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":460,"searchDepth":524,"depth":524,"links":863},[864,865,866,867],{"id":207,"depth":524,"text":208},{"id":273,"depth":524,"text":274},{"id":392,"depth":524,"text":393},{"id":448,"depth":524,"text":449,"children":868},[869],{"id":650,"depth":537,"text":651},"What a Frond contains, how it is discovered, and where its boundary lies.","md",{},true,{"title":38,"description":870},"rZ73Wmc2jZekHu_PoytInizpAJ9YQLRT7U0xXRHxwb4",1788560230169]