[{"data":1,"prerenderedAt":919},["ShallowReactive",2],{"fougere:post.list:{}":3,"docs:\u002Fdocs\u002Fdata\u002Fevolve":6,"docs-uses":608,"docs-nav":781},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":595,"extension":596,"forms":597,"kind":598,"meta":599,"navigation":600,"path":601,"seo":602,"stem":603,"step":604,"uses":605,"__hash__":607},"docs\u002Fdocs\u002F3.data\u002F4.evolve.md","Evolve a schema",{"type":10,"value":11,"toc":588},"minimark",[12,26,85,96,101,109,121,124,128,143,146,266,285,291,297,302,308,312,321,328,404,411,418,486,493,497,512,519,523,529,535,548,570,584],[13,14,15,16,20,21,25],"p",{},"You changed a field and the database must follow — on your machine, then on every database you\nshare. An entity describes itself as it is today; ",[17,18,19],"code",{},"fougere freeze"," records what it ",[22,23,24],"em",{},"was",", so the\ndifference between two moments becomes something a migration can act on.",[27,28,33],"pre",{"className":29,"code":30,"language":31,"meta":32,"style":32},"language-bash shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","fougere migrate --latest --apply  # your database, while you iterate\nfougere freeze v2                 # fronds\u002Fblog\u002Fversions\u002Fv2\u002F — in the change that moves an entity\nfougere migrate --apply           # every other database: what was frozen, and nothing else\n","bash","",[17,34,35,59,73],{"__ignoreMap":32},[36,37,40,44,48,52,55],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"sV8pK","fougere",[36,45,47],{"class":46},"sN-8n"," migrate",[36,49,51],{"class":50},"svHQO"," --latest",[36,53,54],{"class":50}," --apply",[36,56,58],{"class":57},"skXKP","  # your database, while you iterate\n",[36,60,62,64,67,70],{"class":38,"line":61},2,[36,63,43],{"class":42},[36,65,66],{"class":46}," freeze",[36,68,69],{"class":46}," v2",[36,71,72],{"class":57},"                 # fronds\u002Fblog\u002Fversions\u002Fv2\u002F — in the change that moves an entity\n",[36,74,76,78,80,82],{"class":38,"line":75},3,[36,77,43],{"class":42},[36,79,47],{"class":46},[36,81,54],{"class":50},[36,83,84],{"class":57},"           # every other database: what was frozen, and nothing else\n",[13,86,87,88,91,92,95],{},"A database someone else shares receives a version, never what happens to be on disk: without\n",[17,89,90],{},"--latest",", ",[17,93,94],{},"fougere migrate"," refuses a frond never frozen, or whose entities moved since its\nlast version, and names it.",[97,98,100],"h2",{"id":99},"one-artefact-several-readers","One artefact, several readers",[27,102,107],{"className":103,"code":105,"language":106},[104],"language-text","fronds\u002Fblog\u002Fversions\u002F\n  v1\u002F  shape.json                  what the shapes WERE\n  v2\u002F  shape.json  from.json       …and the step that leads here\n","text",[17,108,105],{"__ignoreMap":32},[13,110,111,112,116,117,120],{},"Both are written, and neither replaces the other. ",[113,114,115],"strong",{},"A snapshot alone loses the intent"," — a\nfield gone plus a field appeared cannot be told from a rename. ",[113,118,119],{},"A step alone corrupts in\nsilence"," — nothing checks it against anything. Together they carry an invariant: replaying\nthe step over the previous snapshot must reproduce this one.",[13,122,123],{},"A migration reads the step once, against the rows. The step is kept as a file rather than run\nas code so that it stays one comparison, readable again — by the next migration, and by anything\nelse that needs to know how one shape became another.",[97,125,127],{"id":126},"a-rename-is-declared-never-guessed","A rename is declared, never guessed",[13,129,130,131,134,135,138,139,142],{},"Fougere will not decide that ",[17,132,133],{},"body"," became ",[17,136,137],{},"content",", even when it is the only possibility.\nThe two readings produce ",[113,140,141],{},"opposite"," DDL — one keeps a column of live data, the other throws\nit away — and no pair of shapes holds the intent.",[13,144,145],{},"The entity says it, beside the field:",[27,147,151],{"className":148,"code":149,"language":150,"meta":32,"style":32},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","export default class Post extends entity(\n  { id: primary(), title: text(), content: text() },\n  { previous: { content: 'body' } },\n) {}\n","ts",[17,152,153,181,227,257],{"__ignoreMap":32},[36,154,155,159,162,166,170,173,177],{"class":38,"line":39},[36,156,158],{"class":157},"sK6XW","export",[36,160,161],{"class":157}," default",[36,163,165],{"class":164},"s76I7"," class",[36,167,169],{"class":168},"sBZYL"," Post",[36,171,172],{"class":164}," extends",[36,174,176],{"class":175},"s4mR9"," entity",[36,178,180],{"class":179},"srlTG","(\n",[36,182,183,187,191,194,197,200,203,206,208,211,213,215,218,220,222,224],{"class":38,"line":61},[36,184,186],{"class":185},"s15xx","  {",[36,188,190],{"class":189},"sHtqg"," id",[36,192,193],{"class":185},":",[36,195,196],{"class":175}," primary",[36,198,199],{"class":179},"()",[36,201,202],{"class":185},",",[36,204,205],{"class":189}," title",[36,207,193],{"class":185},[36,209,210],{"class":175}," text",[36,212,199],{"class":179},[36,214,202],{"class":185},[36,216,217],{"class":189}," content",[36,219,193],{"class":185},[36,221,210],{"class":175},[36,223,199],{"class":179},[36,225,226],{"class":185}," },\n",[36,228,229,231,234,236,239,241,243,247,249,252,255],{"class":38,"line":75},[36,230,186],{"class":185},[36,232,233],{"class":189}," previous",[36,235,193],{"class":185},[36,237,238],{"class":185}," {",[36,240,217],{"class":189},[36,242,193],{"class":185},[36,244,246],{"class":245},"sDDC1"," '",[36,248,133],{"class":46},[36,250,251],{"class":245},"'",[36,253,254],{"class":185}," }",[36,256,226],{"class":185},[36,258,260,263],{"class":38,"line":259},4,[36,261,262],{"class":179},")",[36,264,265],{"class":185}," {}\n",[13,267,268,270,271,274,275,278,279,281,282,284],{},[17,269,19],{}," reads it as the answer to its question, and records the rename in the version.\nOn your own database, ",[17,272,273],{},"fougere migrate --latest"," reads it against the ",[113,276,277],{},"live table",": ",[17,280,133],{}," is\nthere and ",[17,283,137],{}," is not, so the column is renamed and the rows follow. Once frozen, the\ndeclaration has done its work and can go — the version carries it to every other database.",[13,286,287,288,290],{},"A table that keeps a column no field declares while it gains a new one is what an undeclared\nrename looks like, and ",[17,289,94],{}," says so before anything runs:",[27,292,295],{"className":293,"code":294,"language":106},[104],"▲  posts keeps body, which no field declares, while content is added —\n   if one replaces the other, declare it on the entity: previous: { content: 'body' }\n",[17,296,294],{"__ignoreMap":32},[13,298,299,301],{},[17,300,19],{}," asks the same question when it cuts a version, and writes nothing until it\nis settled:",[27,303,306],{"className":304,"code":305,"language":106},[104],"◆  post.body — what happened to it?\n   ❯ renamed to content    the data moves with it\n     dropped               the column goes, and what it held goes with it\n",[17,307,305],{"__ignoreMap":32},[97,309,311],{"id":310},"what-a-migration-realises","What a migration realises",[13,313,314,316,317,320],{},[17,315,94],{}," does two things, in this order: what touches live data — a rename, a drop —\nand then the ",[113,318,319],{},"additive"," half, which creates a missing table and adds a missing column. The\norder matters: renamed first, a column is moved rather than added empty beside the old one.",[13,322,323,324,327],{},"The half that touches live data does only what a step — or a ",[17,325,326],{},"previous:"," — actually says:",[329,330,331,344],"table",{},[332,333,334],"thead",{},[335,336,337,341],"tr",{},[338,339,340],"th",{},"The step says",[338,342,343],{},"The database does",[345,346,347,361,373,384,392],"tbody",{},[335,348,349,355],{},[350,351,352],"td",{},[17,353,354],{},"renamed",[350,356,357,360],{},[17,358,359],{},"ALTER TABLE … RENAME COLUMN"," — the data follows",[335,362,363,368],{},[350,364,365],{},[17,366,367],{},"removed",[350,369,370],{},[17,371,372],{},"DROP COLUMN",[335,374,375,381],{},[350,376,377,380],{},[17,378,379],{},"added",", optional",[350,382,383],{},"nothing; the additive half covers it",[335,385,386,389],{},[350,387,388],{},"an index that appeared",[350,390,391],{},"nothing; the additive half proposes every declared index",[335,393,394,401],{},[350,395,396,397,400],{},"a ",[17,398,399],{},"boundary"," that moved",[350,402,403],{},"nothing — who may read a field is not something a column holds",[13,405,406,407,410],{},"A comparison reads all ",[113,408,409],{},"four axes",", not the shape alone: an index, a unique group, a relation,\na lifecycle and a boundary are differences too.",[13,412,413,414,417],{},"Everything else is refused ",[113,415,416],{},"by name",", in one run rather than one at a time:",[419,420,421,436,442,448,458,464,470,480],"ul",{},[422,423,424,427,428,431,432,435],"li",{},[113,425,426],{},"a required field with no default"," — existing rows have nothing to hold. Declare\n",[17,429,430],{},"text({ default: … })",", the same answer a migration gives when adding a ",[17,433,434],{},"NOT NULL"," column\nto a table that already has rows.",[422,437,438,441],{},[113,439,440],{},"a field that became required"," — same reason, from the other direction.",[422,443,444,447],{},[113,445,446],{},"a type that moved"," — no conversion is derivable from two shapes.",[422,449,450,453,454,457],{},[113,451,452],{},"bounds that tightened"," — the facade still enforces them; the table keeps its old ",[17,455,456],{},"CHECK","\nuntil you migrate it yourself.",[422,459,460,463],{},[113,461,462],{},"a unique group that moved"," — rows already stored may contradict it, so adding the\nconstraint is a decision about the rows and not about the DDL.",[422,465,466,469],{},[113,467,468],{},"a relation that moved"," — a foreign key is a constraint, and nothing here alters one.",[422,471,472,475,476,479],{},[113,473,474],{},"a default that moved"," — the table keeps the old one; nothing here alters a ",[17,477,478],{},"DEFAULT",".",[422,481,482,485],{},[113,483,484],{},"an index that went"," — nothing drops an index today, so the table keeps it.",[13,487,488,489,492],{},"A plan carrying a single refusal runs ",[113,490,491],{},"nothing",". Half a rename is worse than none: the data\nends up in a column nothing knows the name of any more.",[97,494,496],{"id":495},"replaying-is-safe","Replaying is safe",[13,498,499,500,503,504,507,508,511],{},"Run ",[17,501,502],{},"migrate"," twice and the second run answers ",[22,505,506],{},"up to date",". There is no ledger of applied\nmigrations — a change is skipped because the ",[113,509,510],{},"columns themselves"," say it happened: a rename whose old name is gone has run, and a table that is not there yet is created at its final shape.",[13,513,514,515,518],{},"That is why the chain is read whole and ",[113,516,517],{},"composed"," into one step rather than replayed a\nstep at a time: a field renamed twice is followed to the name it ends on, which is the only\none the tables can answer for. An intermediate name they never held is not a question they\ncan be asked. Nothing has to know which version the database sits at, and a column someone\nrenamed by hand is seen rather than contradicted. A ledger would be a second record of a\nfact the columns already carry, and the two would disagree the day they diverged.",[97,520,522],{"id":521},"the-boot-reads-and-never-writes","The boot reads, and never writes",[13,524,525,528],{},[113,526,527],{},"Nothing is migrated at boot."," A boot compares the database with the entities and refuses\nwhen it is behind, naming what is missing:",[27,530,533],{"className":531,"code":532,"language":106},[104],"Fougere boot refused: the database is missing 2 change(s) from the entities:\n  products — no table\n  orders.total — no column\n  On your machine: fougere migrate --latest --apply\n  On a shared database: fougere freeze, then fougere migrate --apply\n",[17,534,532],{"__ignoreMap":32},[13,536,537,538,541,542,547],{},"Every step of a boot checks and refuses; none writes. A boot that wrote the schema would let\ntwo replicas race over it, and could start green on an empty database beside the real one.\nWriting the schema is a step you run — in development ",[17,539,540],{},"npm run migrate",", in a\ndeployment ",[543,544,546],"a",{"href":545},"\u002Fdocs\u002Frun\u002Fdeploy","a release step"," before the servers start.",[13,549,550,551,554,555,558,559,562,563,566,567,479],{},"A process whose database is born with it — ",[17,552,553],{},"path: ':memory:'",", a test — has nobody else to\nmigrate it, so it says it writes its own: ",[17,556,557],{},"extensions: [migrating(storage.migrate)]",", or\n",[17,560,561],{},"migrates: true"," for ",[17,564,565],{},"bootApp"," and ",[17,568,569],{},"configureFougere",[13,571,572,575,576,580,581,583],{},[113,573,574],{},"A freeze is not a build artefact."," It is committed, because it records a past that no\ncurrent code can regenerate — unlike ",[543,577,579],{"href":578},"\u002Fdocs\u002Fextending\u002Fcard-and-wire","the identity card",", which is derived\nfrom today's entities and re-derivable at any time. It is cut in every change that moves an\nentity, because it is what a deployment applies: a database behind by three versions follows\nthe whole chain, renames and drops included, long after ",[17,582,326],{}," left the entity.",[585,586,587],"style",{},"html pre.shiki code .sV8pK, html code.shiki .sV8pK{--shiki-light:#E2931D;--shiki-default:#C9B6EA;--shiki-dark:#FFCB6B}html pre.shiki code .sN-8n, html code.shiki .sN-8n{--shiki-light:#91B859;--shiki-default:#EE9F6B;--shiki-dark:#C3E88D}html pre.shiki code .svHQO, html code.shiki .svHQO{--shiki-light:#91B859;--shiki-default:#8FCF86;--shiki-dark:#C3E88D}html pre.shiki code .skXKP, html code.shiki .skXKP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#7D8C80;--shiki-default-font-style:inherit;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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 .sK6XW, html code.shiki .sK6XW{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#8FCF86;--shiki-default-font-style:inherit;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s76I7, html code.shiki .s76I7{--shiki-light:#9C3EDA;--shiki-default:#8FCF86;--shiki-dark:#C792EA}html pre.shiki code .sBZYL, html code.shiki .sBZYL{--shiki-light:#E2931D;--shiki-default:#EFCD8F;--shiki-dark:#FFCB6B}html pre.shiki code .s4mR9, html code.shiki .s4mR9{--shiki-light:#6182B8;--shiki-default:#C9B6EA;--shiki-dark:#82AAFF}html pre.shiki code .srlTG, html code.shiki .srlTG{--shiki-light:#90A4AE;--shiki-default:#A3B0A5;--shiki-dark:#BABED8}html pre.shiki code .s15xx, html code.shiki .s15xx{--shiki-light:#39ADB5;--shiki-default:#A3B0A5;--shiki-dark:#89DDFF}html pre.shiki code .sHtqg, html code.shiki .sHtqg{--shiki-light:#E53935;--shiki-default:#93CFC0;--shiki-dark:#F07178}html pre.shiki code .sDDC1, html code.shiki .sDDC1{--shiki-light:#39ADB5;--shiki-default:#EE9F6B;--shiki-dark:#89DDFF}",{"title":32,"searchDepth":61,"depth":61,"links":589},[590,591,592,593,594],{"id":99,"depth":61,"text":100},{"id":126,"depth":61,"text":127},{"id":310,"depth":61,"text":311},{"id":495,"depth":61,"text":496},{"id":521,"depth":61,"text":522},"A renamed field whose rows follow, frozen before it ships.","md",[326,19,94],"task",{},true,"\u002Fdocs\u002Fdata\u002Fevolve",{"title":8,"description":595},"docs\u002F3.data\u002F4.evolve",null,[606],"entity","GWWBA67AjRjsVYaadb36dvWGY6BUt8J65n9iA2HNRtw",[609,612,615,618,621,624,627,630,633,639,645,649,653,657,659,663,667,672,676,680,685,689,694,698,702,705,709,713,717,721,725,729,733,737,741,745,749,752,755,758,760,763,766,769,772,775,778],{"path":610,"title":611,"uses":604},"\u002Fdocs\u002Fconcepts\u002Fentity","Entity",{"path":613,"title":614,"uses":604},"\u002Fdocs\u002Fconcepts\u002Fhandler","Handler",{"path":616,"title":617,"uses":604},"\u002Fdocs\u002Fconcepts\u002Frepository","Repository",{"path":619,"title":620,"uses":604},"\u002Fdocs\u002Fconcepts\u002Ffrond","Frond",{"path":622,"title":623,"uses":604},"\u002Fdocs\u002Fconcepts\u002Ffacade","Facade",{"path":625,"title":626,"uses":604},"\u002Fdocs\u002Fconcepts\u002Ffact","Fact",{"path":628,"title":629,"uses":604},"\u002Fdocs\u002Fconcepts\u002Fport","Port",{"path":631,"title":632,"uses":604},"\u002Fdocs\u002Fconcepts\u002Fconfiguration","Configuration",{"path":634,"title":635,"uses":636},"\u002Fdocs\u002Faccess\u002Fauthentication","Authentication",[637,638],"port","frond",{"path":640,"title":641,"uses":642},"\u002Fdocs\u002Faccess\u002Fstate","Keep a caller's state",[643,644],"configuration","handler",{"path":646,"title":647,"uses":648},"\u002Fdocs\u002Fdata\u002Fsql","SQLite or Postgres",[606,643],{"path":650,"title":651,"uses":652},"\u002Fdocs\u002Fdata\u002Fseveral-databases","Several databases",[643,606],{"path":654,"title":655,"uses":656},"\u002Fdocs\u002Fdata\u002Fcomputed-field","A computed field",[606,637],{"path":601,"title":8,"uses":658},[606],{"path":660,"title":661,"uses":662},"\u002Fdocs\u002Fdata\u002Fseeds","Seed data",[606],{"path":664,"title":665,"uses":666},"\u002Fdocs\u002Fdata\u002Fvalues","Read settings and secrets",[606,643],{"path":668,"title":669,"uses":670},"\u002Fdocs\u002Fdata\u002Fmirror","Mirror a source you cannot query",[671],"repository",{"path":673,"title":674,"uses":675},"\u002Fdocs\u002Fdata\u002Ftogether","Two writes as one",[671],{"path":677,"title":678,"uses":679},"\u002Fdocs\u002Fbehaviour\u002Faround-every-call","Around every call",[637,638],{"path":681,"title":682,"uses":683},"\u002Fdocs\u002Fbehaviour\u002Ffinish-a-fact","Finish a fact",[684],"fact",{"path":686,"title":687,"uses":688},"\u002Fdocs\u002Fserve\u002Frest-graphql","REST, OpenAPI, GraphQL",[644,643],{"path":690,"title":691,"uses":692},"\u002Fdocs\u002Fserve\u002Fpages","Pages: queries and commands",[644,693],"facade",{"path":695,"title":696,"uses":697},"\u002Fdocs\u002Fserve\u002Fforms","A form",[606],{"path":699,"title":700,"uses":701},"\u002Fdocs\u002Fserve\u002Fadmin","An admin panel",[644],{"path":545,"title":703,"uses":704},"Deploy a split",[643,638],{"path":706,"title":707,"uses":708},"\u002Fdocs\u002Frun\u002Fsecure","Secure calls between processes",[643,638],{"path":710,"title":711,"uses":712},"\u002Fdocs\u002Frun\u002Flifecycle","Reload and shut down",[643],{"path":714,"title":715,"uses":716},"\u002Fdocs\u002Frun\u002Fobserve","Observe",[643,644],{"path":718,"title":719,"uses":720},"\u002Fdocs\u002Frun\u002Fdev-panel","The dev panel",[644],{"path":722,"title":723,"uses":724},"\u002Fdocs\u002Frun\u002Ftest","Test",[606,637],{"path":726,"title":727,"uses":728},"\u002Fdocs\u002Fadopt\u002Fnew-project","Start a project",[638,643],{"path":730,"title":731,"uses":732},"\u002Fdocs\u002Fadopt\u002Fexisting-app","Add Fougere to an existing app",[638,643],{"path":734,"title":735,"uses":736},"\u002Fdocs\u002Fadopt\u002Fbring-your-schema","Bring your schema",[606],{"path":738,"title":739,"uses":740},"\u002Fdocs\u002Fadopt\u002Fhosts","Pick a host",[643],{"path":742,"title":743,"uses":744},"\u002Fdocs\u002Fadopt\u002Fanother-repository","A frond from another repository",[693,638],{"path":746,"title":747,"uses":748},"\u002Fdocs\u002Fadopt\u002Fdemos","Demos",[],{"path":750,"title":751,"uses":604},"\u002Fdocs\u002Fextending\u002Fscan","How the scan reads a project",{"path":753,"title":754,"uses":604},"\u002Fdocs\u002Fextending\u002Fwithout-compiler","Boot without the compiler",{"path":756,"title":757,"uses":604},"\u002Fdocs\u002Fextending\u002Fboot","The boot, step by step",{"path":578,"title":759,"uses":604},"The card and the wire",{"path":761,"title":762,"uses":604},"\u002Fdocs\u002Fextending\u002Fextension-points","Registries and extension points",{"path":764,"title":765,"uses":604},"\u002Fdocs\u002Fextending\u002Fvocabulary","Teach a word",{"path":767,"title":768,"uses":604},"\u002Fdocs\u002Fextending\u002Fextensions","Run code at boot and shutdown",{"path":770,"title":771,"uses":604},"\u002Fdocs\u002Fextending\u002Fsource-adapter","Write a source adapter",{"path":773,"title":774,"uses":604},"\u002Fdocs\u002Fextending\u002Fsurface","Write a surface",{"path":776,"title":777,"uses":604},"\u002Fdocs\u002Fextending\u002Fforeign-frond","A frond in another language",{"path":779,"title":780,"uses":604},"\u002Fdocs","What is Fougere",[782],{"title":783,"path":779,"stem":784,"children":785,"page":-1},"Docs","docs",[786,788,809,818,838,847,860,877,894],{"title":780,"path":779,"stem":787},"docs\u002Findex",{"title":789,"path":790,"stem":791,"children":792,"page":5},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F1.concepts",[793,795,797,799,801,803,805,807],{"title":611,"path":610,"stem":794},"docs\u002F1.concepts\u002F1.entity",{"title":614,"path":613,"stem":796},"docs\u002F1.concepts\u002F2.handler",{"title":617,"path":616,"stem":798},"docs\u002F1.concepts\u002F3.repository",{"title":620,"path":619,"stem":800},"docs\u002F1.concepts\u002F4.frond",{"title":623,"path":622,"stem":802},"docs\u002F1.concepts\u002F5.facade",{"title":626,"path":625,"stem":804},"docs\u002F1.concepts\u002F6.fact",{"title":629,"path":628,"stem":806},"docs\u002F1.concepts\u002F7.port",{"title":632,"path":631,"stem":808},"docs\u002F1.concepts\u002F8.configuration",{"title":810,"path":811,"stem":812,"children":813,"page":5},"Access","\u002Fdocs\u002Faccess","docs\u002F2.access",[814,816],{"title":635,"path":634,"stem":815},"docs\u002F2.access\u002F1.authentication",{"title":641,"path":640,"stem":817},"docs\u002F2.access\u002F2.state",{"title":819,"path":820,"stem":821,"children":822,"page":5},"Data","\u002Fdocs\u002Fdata","docs\u002F3.data",[823,825,827,829,830,832,834,836],{"title":647,"path":646,"stem":824},"docs\u002F3.data\u002F1.sql",{"title":651,"path":650,"stem":826},"docs\u002F3.data\u002F2.several-databases",{"title":655,"path":654,"stem":828},"docs\u002F3.data\u002F3.computed-field",{"title":8,"path":601,"stem":603},{"title":661,"path":660,"stem":831},"docs\u002F3.data\u002F5.seeds",{"title":665,"path":664,"stem":833},"docs\u002F3.data\u002F6.values",{"title":669,"path":668,"stem":835},"docs\u002F3.data\u002F7.mirror",{"title":674,"path":673,"stem":837},"docs\u002F3.data\u002F8.together",{"title":839,"path":840,"stem":841,"children":842,"page":5},"Behaviour","\u002Fdocs\u002Fbehaviour","docs\u002F4.behaviour",[843,845],{"title":678,"path":677,"stem":844},"docs\u002F4.behaviour\u002F1.around-every-call",{"title":682,"path":681,"stem":846},"docs\u002F4.behaviour\u002F2.finish-a-fact",{"title":848,"path":849,"stem":850,"children":851,"page":5},"Serve","\u002Fdocs\u002Fserve","docs\u002F5.serve",[852,854,856,858],{"title":687,"path":686,"stem":853},"docs\u002F5.serve\u002F1.rest-graphql",{"title":691,"path":690,"stem":855},"docs\u002F5.serve\u002F2.pages",{"title":696,"path":695,"stem":857},"docs\u002F5.serve\u002F3.forms",{"title":700,"path":699,"stem":859},"docs\u002F5.serve\u002F4.admin",{"title":861,"path":862,"stem":863,"children":864,"page":5},"Run","\u002Fdocs\u002Frun","docs\u002F6.run",[865,867,869,871,873,875],{"title":703,"path":545,"stem":866},"docs\u002F6.run\u002F1.deploy",{"title":707,"path":706,"stem":868},"docs\u002F6.run\u002F2.secure",{"title":711,"path":710,"stem":870},"docs\u002F6.run\u002F3.lifecycle",{"title":715,"path":714,"stem":872},"docs\u002F6.run\u002F4.observe",{"title":719,"path":718,"stem":874},"docs\u002F6.run\u002F5.dev-panel",{"title":723,"path":722,"stem":876},"docs\u002F6.run\u002F6.test",{"title":878,"path":879,"stem":880,"children":881,"page":5},"Adopt","\u002Fdocs\u002Fadopt","docs\u002F7.adopt",[882,884,886,888,890,892],{"title":727,"path":726,"stem":883},"docs\u002F7.adopt\u002F1.new-project",{"title":731,"path":730,"stem":885},"docs\u002F7.adopt\u002F2.existing-app",{"title":735,"path":734,"stem":887},"docs\u002F7.adopt\u002F3.bring-your-schema",{"title":739,"path":738,"stem":889},"docs\u002F7.adopt\u002F4.hosts",{"title":743,"path":742,"stem":891},"docs\u002F7.adopt\u002F5.another-repository",{"title":747,"path":746,"stem":893},"docs\u002F7.adopt\u002F6.demos",{"title":895,"path":896,"stem":897,"children":898,"page":5},"Extending","\u002Fdocs\u002Fextending","docs\u002F8.extending",[899,901,903,905,907,909,911,913,915,917],{"title":751,"path":750,"stem":900},"docs\u002F8.extending\u002F1.scan",{"title":754,"path":753,"stem":902},"docs\u002F8.extending\u002F10.without-compiler",{"title":757,"path":756,"stem":904},"docs\u002F8.extending\u002F2.boot",{"title":759,"path":578,"stem":906},"docs\u002F8.extending\u002F3.card-and-wire",{"title":762,"path":761,"stem":908},"docs\u002F8.extending\u002F4.extension-points",{"title":765,"path":764,"stem":910},"docs\u002F8.extending\u002F5.vocabulary",{"title":768,"path":767,"stem":912},"docs\u002F8.extending\u002F6.extensions",{"title":771,"path":770,"stem":914},"docs\u002F8.extending\u002F7.source-adapter",{"title":774,"path":773,"stem":916},"docs\u002F8.extending\u002F8.surface",{"title":777,"path":776,"stem":918},"docs\u002F8.extending\u002F9.foreign-frond",1794396613813]