[{"data":1,"prerenderedAt":3049},["ShallowReactive",2],{"fougere:post.list:{}":3,"docs:\u002Fdocs\u002Fextending\u002Fcard-and-wire":6,"docs-uses":2742,"docs-nav":2911},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":2733,"extension":2734,"forms":2735,"kind":2736,"meta":2737,"navigation":87,"path":2738,"seo":2739,"stem":2740,"step":2735,"uses":2735,"__hash__":2741},"docs\u002Fdocs\u002F8.extending\u002F3.card-and-wire.md","The card and the wire",{"type":10,"value":11,"toc":2715},"minimark",[12,30,170,180,243,248,255,868,884,889,897,1010,1031,1037,1208,1225,1229,1239,1361,1374,1380,1403,1407,1421,1500,1515,1519,1522,1549,1556,1562,2105,2119,2201,2210,2215,2218,2235,2241,2245,2255,2272,2277,2281,2287,2689,2704,2711],[13,14,15,16,20,21,29],"p",{},"A class cannot travel between processes. Its ",[17,18,19],"strong",{},"card"," can: a JSON document that describes the\nentity, from which another process — or another language — rebuilds the same rules.\n",[22,23,25],"a",{"href":24},"\u002Fdocs\u002Fadopt\u002Fbring-your-schema",[26,27,28],"code",{},"~standard"," hands the live validator to a library in the same\nprocess; the card is what you send when the reader is somewhere else.",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","import { Bundle, Card } from '@fougere\u002Fschema';\n\nconst descriptor = Card.fromSchema(Post).descriptor;       \u002F\u002F schema to JSON document\nconst Rebuilt = Card.fromDescriptor(descriptor).toSchema(); \u002F\u002F document to living schema\n","ts","",[26,38,39,82,89,134],{"__ignoreMap":36},[40,41,44,48,52,56,59,62,65,68,72,76,79],"span",{"class":42,"line":43},"line",1,[40,45,47],{"class":46},"sK6XW","import",[40,49,51],{"class":50},"s15xx"," {",[40,53,55],{"class":54},"sPEhv"," Bundle",[40,57,58],{"class":50},",",[40,60,61],{"class":54}," Card",[40,63,64],{"class":50}," }",[40,66,67],{"class":46}," from",[40,69,71],{"class":70},"sDDC1"," '",[40,73,75],{"class":74},"sN-8n","@fougere\u002Fschema",[40,77,78],{"class":70},"'",[40,80,81],{"class":50},";\n",[40,83,85],{"class":42,"line":84},2,[40,86,88],{"emptyLinePlaceholder":87},true,"\n",[40,90,92,96,99,102,104,107,111,115,118,121,123,127,130],{"class":42,"line":91},3,[40,93,95],{"class":94},"s76I7","const",[40,97,98],{"class":54}," descriptor ",[40,100,101],{"class":50},"=",[40,103,61],{"class":54},[40,105,106],{"class":50},".",[40,108,110],{"class":109},"s4mR9","fromSchema",[40,112,114],{"class":113},"srlTG","(",[40,116,117],{"class":54},"Post",[40,119,120],{"class":113},")",[40,122,106],{"class":50},[40,124,126],{"class":125},"sy9f4","descriptor",[40,128,129],{"class":50},";",[40,131,133],{"class":132},"skXKP","       \u002F\u002F schema to JSON document\n",[40,135,137,139,142,144,146,148,151,153,155,157,159,162,165,167],{"class":42,"line":136},4,[40,138,95],{"class":94},[40,140,141],{"class":54}," Rebuilt ",[40,143,101],{"class":50},[40,145,61],{"class":54},[40,147,106],{"class":50},[40,149,150],{"class":109},"fromDescriptor",[40,152,114],{"class":113},[40,154,126],{"class":54},[40,156,120],{"class":113},[40,158,106],{"class":50},[40,160,161],{"class":109},"toSchema",[40,163,164],{"class":113},"()",[40,166,129],{"class":50},[40,168,169],{"class":132}," \u002F\u002F document to living schema\n",[13,171,172,173,179],{},"The rebuilt schema validates locally. Give it the type of a row and it is a class like any entity\n— one name for the validator and the type. That is what\n",[22,174,176],{"href":175},"\u002Freference\u002Fcli#fougere-sync-consume-a-remote-frond",[26,177,178],{},"fougere sync"," writes:",[31,181,183],{"className":33,"code":182,"language":35,"meta":36,"style":36},"class Post extends Card.fromDescriptor\u003C{ id: string; title: string }>(descriptor).toSchema() {}\n",[26,184,185],{"__ignoreMap":36},[40,186,187,190,194,197,199,201,203,206,210,213,216,218,221,223,225,228,230,232,234,236,238,240],{"class":42,"line":43},[40,188,189],{"class":94},"class",[40,191,193],{"class":192},"sBZYL"," Post",[40,195,196],{"class":94}," extends",[40,198,61],{"class":54},[40,200,106],{"class":50},[40,202,150],{"class":109},[40,204,205],{"class":50},"\u003C{",[40,207,209],{"class":208},"sHtqg"," id",[40,211,212],{"class":50},":",[40,214,215],{"class":192}," string",[40,217,129],{"class":50},[40,219,220],{"class":208}," title",[40,222,212],{"class":50},[40,224,215],{"class":192},[40,226,227],{"class":50}," }>",[40,229,114],{"class":113},[40,231,126],{"class":54},[40,233,120],{"class":113},[40,235,106],{"class":50},[40,237,161],{"class":109},[40,239,164],{"class":113},[40,241,242],{"class":50}," {}\n",[244,245,247],"h2",{"id":246},"the-structure","The structure",[13,249,250,251,254],{},"A card is a valid JSON Schema document. A field's shape is written in JSON Schema's own keywords;\nits three other axes sit under the ",[26,252,253],{},"x-fougere"," key.",[31,256,260],{"className":257,"code":258,"language":259,"meta":36,"style":36},"language-jsonc shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","{\n  \"title\": \"Post\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"x-fougere\": {\n        \"role\": { \"primary\": true },\n        \"lifecycle\": { \"create\": { \"generate\": \"uuidv7\" }, \"update\": \"forbidden\" }\n      }\n    },\n    \"title\": { \"type\": \"string\", \"minLength\": 3, \"maxLength\": 120 },\n    \"status\": { \"type\": \"string\", \"enum\": [\"draft\", \"published\"] },\n    \"publishedAt\": {\n      \"type\": [\"string\", \"null\"],\n      \"format\": \"date-time\",\n      \"x-fougere\": { \"lifecycle\": { \"update\": \"forbidden\" } }\n    },\n    \"secret\": { \"type\": \"string\", \"x-fougere\": { \"boundary\": { \"out\": \"closed\" } } }\n  },\n  \"required\": [\"title\", \"status\"],\n  \"x-fougere-version\": 1,\n  \"x-fougere-vendor\": \"fougere\"\n}\n","jsonc",[26,261,262,267,291,311,325,341,363,376,407,471,477,483,541,604,618,649,670,711,716,789,795,825,842,862],{"__ignoreMap":36},[40,263,264],{"class":42,"line":43},[40,265,266],{"class":50},"{\n",[40,268,269,272,276,279,281,284,286,288],{"class":42,"line":84},[40,270,271],{"class":50},"  \"",[40,273,275],{"class":274},"s8ClO","title",[40,277,278],{"class":50},"\"",[40,280,212],{"class":50},[40,282,283],{"class":70}," \"",[40,285,117],{"class":74},[40,287,278],{"class":70},[40,289,290],{"class":50},",\n",[40,292,293,295,298,300,302,304,307,309],{"class":42,"line":91},[40,294,271],{"class":50},[40,296,297],{"class":274},"type",[40,299,278],{"class":50},[40,301,212],{"class":50},[40,303,283],{"class":70},[40,305,306],{"class":74},"object",[40,308,278],{"class":70},[40,310,290],{"class":50},[40,312,313,315,318,320,322],{"class":42,"line":136},[40,314,271],{"class":50},[40,316,317],{"class":274},"properties",[40,319,278],{"class":50},[40,321,212],{"class":50},[40,323,324],{"class":50}," {\n",[40,326,328,331,335,337,339],{"class":42,"line":327},5,[40,329,330],{"class":50},"    \"",[40,332,334],{"class":333},"sWI7z","id",[40,336,278],{"class":50},[40,338,212],{"class":50},[40,340,324],{"class":50},[40,342,344,347,350,352,354,356,359,361],{"class":42,"line":343},6,[40,345,346],{"class":50},"      \"",[40,348,297],{"class":349},"sgzKs",[40,351,278],{"class":50},[40,353,212],{"class":50},[40,355,283],{"class":70},[40,357,358],{"class":74},"string",[40,360,278],{"class":70},[40,362,290],{"class":50},[40,364,366,368,370,372,374],{"class":42,"line":365},7,[40,367,346],{"class":50},[40,369,253],{"class":349},[40,371,278],{"class":50},[40,373,212],{"class":50},[40,375,324],{"class":50},[40,377,379,382,385,387,389,391,393,397,399,401,404],{"class":42,"line":378},8,[40,380,381],{"class":50},"        \"",[40,383,384],{"class":208},"role",[40,386,278],{"class":50},[40,388,212],{"class":50},[40,390,51],{"class":50},[40,392,283],{"class":50},[40,394,396],{"class":395},"sLLcL","primary",[40,398,278],{"class":50},[40,400,212],{"class":50},[40,402,403],{"class":70}," true",[40,405,406],{"class":50}," },\n",[40,408,410,412,415,417,419,421,423,426,428,430,432,434,438,440,442,444,447,449,452,454,457,459,461,463,466,468],{"class":42,"line":409},9,[40,411,381],{"class":50},[40,413,414],{"class":208},"lifecycle",[40,416,278],{"class":50},[40,418,212],{"class":50},[40,420,51],{"class":50},[40,422,283],{"class":50},[40,424,425],{"class":395},"create",[40,427,278],{"class":50},[40,429,212],{"class":50},[40,431,51],{"class":50},[40,433,283],{"class":50},[40,435,437],{"class":436},"sqrf7","generate",[40,439,278],{"class":50},[40,441,212],{"class":50},[40,443,283],{"class":70},[40,445,446],{"class":74},"uuidv7",[40,448,278],{"class":70},[40,450,451],{"class":50}," },",[40,453,283],{"class":50},[40,455,456],{"class":395},"update",[40,458,278],{"class":50},[40,460,212],{"class":50},[40,462,283],{"class":70},[40,464,465],{"class":74},"forbidden",[40,467,278],{"class":70},[40,469,470],{"class":50}," }\n",[40,472,474],{"class":42,"line":473},10,[40,475,476],{"class":50},"      }\n",[40,478,480],{"class":42,"line":479},11,[40,481,482],{"class":50},"    },\n",[40,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,514,517,519,521,525,527,529,532,534,536,539],{"class":42,"line":485},12,[40,487,330],{"class":50},[40,489,275],{"class":333},[40,491,278],{"class":50},[40,493,212],{"class":50},[40,495,51],{"class":50},[40,497,283],{"class":50},[40,499,297],{"class":349},[40,501,278],{"class":50},[40,503,212],{"class":50},[40,505,283],{"class":70},[40,507,358],{"class":74},[40,509,278],{"class":70},[40,511,58],{"class":50},[40,513,283],{"class":50},[40,515,516],{"class":349},"minLength",[40,518,278],{"class":50},[40,520,212],{"class":50},[40,522,524],{"class":523},"s3dPA"," 3",[40,526,58],{"class":50},[40,528,283],{"class":50},[40,530,531],{"class":349},"maxLength",[40,533,278],{"class":50},[40,535,212],{"class":50},[40,537,538],{"class":523}," 120",[40,540,406],{"class":50},[40,542,544,546,549,551,553,555,557,559,561,563,565,567,569,571,573,576,578,580,583,585,588,590,592,594,597,599,602],{"class":42,"line":543},13,[40,545,330],{"class":50},[40,547,548],{"class":333},"status",[40,550,278],{"class":50},[40,552,212],{"class":50},[40,554,51],{"class":50},[40,556,283],{"class":50},[40,558,297],{"class":349},[40,560,278],{"class":50},[40,562,212],{"class":50},[40,564,283],{"class":70},[40,566,358],{"class":74},[40,568,278],{"class":70},[40,570,58],{"class":50},[40,572,283],{"class":50},[40,574,575],{"class":349},"enum",[40,577,278],{"class":50},[40,579,212],{"class":50},[40,581,582],{"class":50}," [",[40,584,278],{"class":70},[40,586,587],{"class":74},"draft",[40,589,278],{"class":70},[40,591,58],{"class":50},[40,593,283],{"class":70},[40,595,596],{"class":74},"published",[40,598,278],{"class":70},[40,600,601],{"class":50},"]",[40,603,406],{"class":50},[40,605,607,609,612,614,616],{"class":42,"line":606},14,[40,608,330],{"class":50},[40,610,611],{"class":333},"publishedAt",[40,613,278],{"class":50},[40,615,212],{"class":50},[40,617,324],{"class":50},[40,619,621,623,625,627,629,631,633,635,637,639,641,644,646],{"class":42,"line":620},15,[40,622,346],{"class":50},[40,624,297],{"class":349},[40,626,278],{"class":50},[40,628,212],{"class":50},[40,630,582],{"class":50},[40,632,278],{"class":70},[40,634,358],{"class":74},[40,636,278],{"class":70},[40,638,58],{"class":50},[40,640,283],{"class":70},[40,642,643],{"class":74},"null",[40,645,278],{"class":70},[40,647,648],{"class":50},"],\n",[40,650,652,654,657,659,661,663,666,668],{"class":42,"line":651},16,[40,653,346],{"class":50},[40,655,656],{"class":349},"format",[40,658,278],{"class":50},[40,660,212],{"class":50},[40,662,283],{"class":70},[40,664,665],{"class":74},"date-time",[40,667,278],{"class":70},[40,669,290],{"class":50},[40,671,673,675,677,679,681,683,685,687,689,691,693,695,697,699,701,703,705,707,709],{"class":42,"line":672},17,[40,674,346],{"class":50},[40,676,253],{"class":349},[40,678,278],{"class":50},[40,680,212],{"class":50},[40,682,51],{"class":50},[40,684,283],{"class":50},[40,686,414],{"class":208},[40,688,278],{"class":50},[40,690,212],{"class":50},[40,692,51],{"class":50},[40,694,283],{"class":50},[40,696,456],{"class":395},[40,698,278],{"class":50},[40,700,212],{"class":50},[40,702,283],{"class":70},[40,704,465],{"class":74},[40,706,278],{"class":70},[40,708,64],{"class":50},[40,710,470],{"class":50},[40,712,714],{"class":42,"line":713},18,[40,715,482],{"class":50},[40,717,719,721,724,726,728,730,732,734,736,738,740,742,744,746,748,750,752,754,756,758,761,763,765,767,769,772,774,776,778,781,783,785,787],{"class":42,"line":718},19,[40,720,330],{"class":50},[40,722,723],{"class":333},"secret",[40,725,278],{"class":50},[40,727,212],{"class":50},[40,729,51],{"class":50},[40,731,283],{"class":50},[40,733,297],{"class":349},[40,735,278],{"class":50},[40,737,212],{"class":50},[40,739,283],{"class":70},[40,741,358],{"class":74},[40,743,278],{"class":70},[40,745,58],{"class":50},[40,747,283],{"class":50},[40,749,253],{"class":349},[40,751,278],{"class":50},[40,753,212],{"class":50},[40,755,51],{"class":50},[40,757,283],{"class":50},[40,759,760],{"class":208},"boundary",[40,762,278],{"class":50},[40,764,212],{"class":50},[40,766,51],{"class":50},[40,768,283],{"class":50},[40,770,771],{"class":395},"out",[40,773,278],{"class":50},[40,775,212],{"class":50},[40,777,283],{"class":70},[40,779,780],{"class":74},"closed",[40,782,278],{"class":70},[40,784,64],{"class":50},[40,786,64],{"class":50},[40,788,470],{"class":50},[40,790,792],{"class":42,"line":791},20,[40,793,794],{"class":50},"  },\n",[40,796,798,800,803,805,807,809,811,813,815,817,819,821,823],{"class":42,"line":797},21,[40,799,271],{"class":50},[40,801,802],{"class":274},"required",[40,804,278],{"class":50},[40,806,212],{"class":50},[40,808,582],{"class":50},[40,810,278],{"class":70},[40,812,275],{"class":74},[40,814,278],{"class":70},[40,816,58],{"class":50},[40,818,283],{"class":70},[40,820,548],{"class":74},[40,822,278],{"class":70},[40,824,648],{"class":50},[40,826,828,830,833,835,837,840],{"class":42,"line":827},22,[40,829,271],{"class":50},[40,831,832],{"class":274},"x-fougere-version",[40,834,278],{"class":50},[40,836,212],{"class":50},[40,838,839],{"class":523}," 1",[40,841,290],{"class":50},[40,843,845,847,850,852,854,856,859],{"class":42,"line":844},23,[40,846,271],{"class":50},[40,848,849],{"class":274},"x-fougere-vendor",[40,851,278],{"class":50},[40,853,212],{"class":50},[40,855,283],{"class":70},[40,857,858],{"class":74},"fougere",[40,860,861],{"class":70},"\"\n",[40,863,865],{"class":42,"line":864},24,[40,866,867],{"class":50},"}\n",[13,869,870,871,874,875,878,879,881,882,106],{},"A nullable field is the union ",[26,872,873],{},"type: [\"T\", \"null\"]",", plain JSON Schema. An embedded object\n(",[26,876,877],{},"json(Entity)",") carries its own ",[26,880,317],{}," and ",[26,883,802],{},[885,886,888],"h3",{"id":887},"a-view-says-what-it-is-a-view-of","A view says what it is a view of",[13,890,891,892,896],{},"The card of a ",[22,893,895],{"href":894},"\u002Fdocs\u002Fconcepts\u002Fentity","view"," carries one more key:",[31,898,900],{"className":257,"code":899,"language":259,"meta":36,"style":36},"\"x-fougere-derived\": {\n  \"from\": \"Post\",\n  \"nameOf\": { \"id\": \"id\", \"title\": \"title\", \"body\": null, \"status\": null }\n}\n",[26,901,902,916,935,1006],{"__ignoreMap":36},[40,903,904,906,909,911,914],{"class":42,"line":43},[40,905,278],{"class":70},[40,907,908],{"class":74},"x-fougere-derived",[40,910,278],{"class":70},[40,912,913],{"class":54},": ",[40,915,266],{"class":50},[40,917,918,920,923,925,927,929,931,933],{"class":42,"line":84},[40,919,271],{"class":50},[40,921,922],{"class":274},"from",[40,924,278],{"class":50},[40,926,212],{"class":50},[40,928,283],{"class":70},[40,930,117],{"class":74},[40,932,278],{"class":70},[40,934,290],{"class":50},[40,936,937,939,942,944,946,948,950,952,954,956,958,960,962,964,966,968,970,972,974,976,978,980,982,985,987,989,992,994,996,998,1000,1002,1004],{"class":42,"line":91},[40,938,271],{"class":50},[40,940,941],{"class":274},"nameOf",[40,943,278],{"class":50},[40,945,212],{"class":50},[40,947,51],{"class":50},[40,949,283],{"class":50},[40,951,334],{"class":333},[40,953,278],{"class":50},[40,955,212],{"class":50},[40,957,283],{"class":70},[40,959,334],{"class":74},[40,961,278],{"class":70},[40,963,58],{"class":50},[40,965,283],{"class":50},[40,967,275],{"class":333},[40,969,278],{"class":50},[40,971,212],{"class":50},[40,973,283],{"class":70},[40,975,275],{"class":74},[40,977,278],{"class":70},[40,979,58],{"class":50},[40,981,283],{"class":50},[40,983,984],{"class":333},"body",[40,986,278],{"class":50},[40,988,212],{"class":50},[40,990,991],{"class":70}," null",[40,993,58],{"class":50},[40,995,283],{"class":50},[40,997,548],{"class":333},[40,999,278],{"class":50},[40,1001,212],{"class":50},[40,1003,991],{"class":70},[40,1005,470],{"class":50},[40,1007,1008],{"class":42,"line":136},[40,1009,867],{"class":50},[13,1011,1012,1014,1015,1017,1018,1020,1021,1027,1028,1030],{},[26,1013,922],{}," names the entity the view was cut from, and ",[26,1016,941],{}," says what the cut kept, keyed by the\nentity's field names — a dropped field is there, as ",[26,1019,643],{},". A reader can tell ",[1022,1023,1024,1025],"em",{},"a Post without\n",[26,1026,984],{}," from a Post, and ",[26,1029,178],{}," writes the view as a view.",[244,1032,1034,1035],{"id":1033},"the-three-axes-under-x-fougere","The three axes under ",[26,1036,253],{},[1038,1039,1040,1056],"table",{},[1041,1042,1043],"thead",{},[1044,1045,1046,1050,1053],"tr",{},[1047,1048,1049],"th",{},"key",[1047,1051,1052],{},"values",[1047,1054,1055],{},"what it states",[1057,1058,1059,1075,1090,1109,1131,1156,1173,1191],"tbody",{},[1044,1060,1061,1067,1072],{},[1062,1063,1064],"td",{},[26,1065,1066],{},"role.primary",[1062,1068,1069],{},[26,1070,1071],{},"true",[1062,1073,1074],{},"identity — the system owns it",[1044,1076,1077,1082,1087],{},[1062,1078,1079],{},[26,1080,1081],{},"role.unique",[1062,1083,1084],{},[26,1085,1086],{},"[[\"slug\"], [\"listId\",\"docId\"]]",[1062,1088,1089],{},"the unique constraints this field is a member of — one member list each, members named. A lone field is the degenerate case: a constraint of one. The DDL emits them",[1044,1091,1092,1097,1102],{},[1062,1093,1094],{},[26,1095,1096],{},"role.index",[1062,1098,1099],{},[26,1100,1101],{},"[[\"title\"], [\"slug\",\"title\"]]",[1062,1103,1104,1105,1108],{},"the indexes this field is a member of, listed like ",[26,1106,1107],{},"unique"," — the DDL emits them",[1044,1110,1111,1116,1121],{},[1062,1112,1113],{},[26,1114,1115],{},"role.relation",[1062,1117,1118],{},[26,1119,1120],{},"{ to, kind: 'one'|'many', onDelete? }",[1062,1122,1123,1126,1127,1130],{},[26,1124,1125],{},"to"," is a ",[17,1128,1129],{},"name",", not an inlined schema",[1044,1132,1133,1138,1153],{},[1062,1134,1135],{},[26,1136,1137],{},"lifecycle.create",[1062,1139,1140,1143,1144,1143,1147,1143,1150],{},[26,1141,1142],{},"{ value }"," | ",[26,1145,1146],{},"'now'",[26,1148,1149],{},"{ generate }",[26,1151,1152],{},"'optional'",[1062,1154,1155],{},"who writes at creation, and when",[1044,1157,1158,1163,1170],{},[1062,1159,1160],{},[26,1161,1162],{},"lifecycle.update",[1062,1164,1165,1143,1167],{},[26,1166,1146],{},[26,1168,1169],{},"'forbidden'",[1062,1171,1172],{},"who writes on update",[1044,1174,1175,1180,1188],{},[1062,1176,1177],{},[26,1178,1179],{},"boundary.in",[1062,1181,1182,1143,1185],{},[26,1183,1184],{},"'closed'",[26,1186,1187],{},"{ decode }",[1062,1189,1190],{},"read-only, or a named inbound conversion",[1044,1192,1193,1198,1205],{},[1062,1194,1195],{},[26,1196,1197],{},"boundary.out",[1062,1199,1200,1143,1202],{},[26,1201,1184],{},[26,1203,1204],{},"{ encode }",[1062,1206,1207],{},"write-only, or a named outbound conversion",[13,1209,1210,1211,1213,1214,1216,1217,1220,1221,1224],{},"A missing key means open: no ",[26,1212,1137],{}," means the caller supplies the value; no ",[26,1215,760],{},"\nmeans the value goes in and out as it is. Only a declared boundary is written: decoding a\n",[26,1218,1219],{},"format: date-time"," field into a ",[26,1222,1223],{},"Date"," follows from the shape, and the reader derives it again.",[244,1226,1228],{"id":1227},"a-rule-about-several-fields","A rule about several fields",[13,1230,1231,1232,1234,1235,1238],{},"A reader sees one field at a time, so a ",[26,1233,1107],{}," group is written whole on each of its members, a\ngroup of one included (",[26,1236,1237],{},"[[\"slug\"]]","). That is what lets the group be rebuilt from the card alone:",[31,1240,1242],{"className":257,"code":1241,"language":259,"meta":36,"style":36},"\u002F\u002F the card of ListBook — the role.unique of each member\n\"listId\": { \"role\": { \"unique\": [[\"listId\", \"docId\"]] } },\n\"docId\":  { \"role\": { \"unique\": [[\"listId\", \"docId\"]] } }\n",[26,1243,1244,1249,1308],{"__ignoreMap":36},[40,1245,1246],{"class":42,"line":43},[40,1247,1248],{"class":132},"\u002F\u002F the card of ListBook — the role.unique of each member\n",[40,1250,1251,1253,1256,1258,1260,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1284,1286,1288,1290,1292,1294,1297,1299,1302,1304,1306],{"class":42,"line":84},[40,1252,278],{"class":70},[40,1254,1255],{"class":74},"listId",[40,1257,278],{"class":70},[40,1259,913],{"class":54},[40,1261,1262],{"class":50},"{",[40,1264,283],{"class":50},[40,1266,384],{"class":274},[40,1268,278],{"class":50},[40,1270,212],{"class":50},[40,1272,51],{"class":50},[40,1274,283],{"class":50},[40,1276,1107],{"class":333},[40,1278,278],{"class":50},[40,1280,212],{"class":50},[40,1282,1283],{"class":50}," [[",[40,1285,278],{"class":70},[40,1287,1255],{"class":74},[40,1289,278],{"class":70},[40,1291,58],{"class":50},[40,1293,283],{"class":70},[40,1295,1296],{"class":74},"docId",[40,1298,278],{"class":70},[40,1300,1301],{"class":50},"]]",[40,1303,64],{"class":50},[40,1305,64],{"class":50},[40,1307,290],{"class":54},[40,1309,1310,1312,1314,1316,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359],{"class":42,"line":91},[40,1311,278],{"class":70},[40,1313,1296],{"class":74},[40,1315,278],{"class":70},[40,1317,1318],{"class":54},":  ",[40,1320,1262],{"class":50},[40,1322,283],{"class":50},[40,1324,384],{"class":274},[40,1326,278],{"class":50},[40,1328,212],{"class":50},[40,1330,51],{"class":50},[40,1332,283],{"class":50},[40,1334,1107],{"class":333},[40,1336,278],{"class":50},[40,1338,212],{"class":50},[40,1340,1283],{"class":50},[40,1342,278],{"class":70},[40,1344,1255],{"class":74},[40,1346,278],{"class":70},[40,1348,58],{"class":50},[40,1350,283],{"class":70},[40,1352,1296],{"class":74},[40,1354,278],{"class":70},[40,1356,1301],{"class":50},[40,1358,64],{"class":50},[40,1360,470],{"class":50},[13,1362,1363,1364,1366,1367,1370,1371,106],{},"A field in two groups carries two entries. In TypeScript, a field's own ",[26,1365,1107],{}," is read with\n",[26,1368,1369],{},"Role.of(field).isUnique()",", and a group of several with the schema's ",[26,1372,1373],{},"getUnique()",[244,1375,1377,1379],{"id":1376},"required-semantics",[26,1378,802],{}," semantics",[13,1381,1382,1384,1385,1388,1389,1391,1392,1395,1396,1399,1400,1402],{},[26,1383,802],{}," lists ",[17,1386,1387],{},"the fields a caller must send at creation",": those no ",[26,1390,1137],{}," fills,\nand that are not a ",[26,1393,1394],{},"many"," relation (absent means ",[26,1397,1398],{},"[]","). A nullable field stays required — the caller\nmay send ",[26,1401,643],{},", not leave the key out.",[244,1404,1406],{"id":1405},"the-bundle-several-entities-relations-included","The bundle — several entities, relations included",[13,1408,1409,1412,1413,1416,1417,1420],{},[26,1410,1411],{},"Bundle.fromSchemas"," writes one document with every entity under ",[26,1414,1415],{},"$defs",", each under its lowercased\nname — the name ",[26,1418,1419],{},"relation.to"," carries.",[31,1422,1424],{"className":33,"code":1423,"language":35,"meta":36,"style":36},"const bundle = Bundle.fromSchemas({ post: Post, author: Author });\nconst { post, author } = bundle.toSchemas();\n",[26,1425,1426,1470],{"__ignoreMap":36},[40,1427,1428,1430,1433,1435,1437,1439,1442,1444,1446,1449,1451,1453,1455,1458,1460,1463,1466,1468],{"class":42,"line":43},[40,1429,95],{"class":94},[40,1431,1432],{"class":54}," bundle ",[40,1434,101],{"class":50},[40,1436,55],{"class":54},[40,1438,106],{"class":50},[40,1440,1441],{"class":109},"fromSchemas",[40,1443,114],{"class":113},[40,1445,1262],{"class":50},[40,1447,1448],{"class":208}," post",[40,1450,212],{"class":50},[40,1452,193],{"class":54},[40,1454,58],{"class":50},[40,1456,1457],{"class":208}," author",[40,1459,212],{"class":50},[40,1461,1462],{"class":54}," Author ",[40,1464,1465],{"class":50},"}",[40,1467,120],{"class":113},[40,1469,81],{"class":50},[40,1471,1472,1474,1476,1478,1480,1483,1485,1488,1491,1493,1496,1498],{"class":42,"line":84},[40,1473,95],{"class":94},[40,1475,51],{"class":50},[40,1477,1448],{"class":54},[40,1479,58],{"class":50},[40,1481,1482],{"class":54}," author ",[40,1484,1465],{"class":50},[40,1486,1487],{"class":50}," =",[40,1489,1490],{"class":54}," bundle",[40,1492,106],{"class":50},[40,1494,1495],{"class":109},"toSchemas",[40,1497,164],{"class":113},[40,1499,81],{"class":50},[13,1501,1502,1503,1506,1507,1510,1511,1514],{},"A relation is a name, never a nested schema, so ",[26,1504,1505],{},"Post → Author → Post"," is two references and no\nloop. ",[26,1508,1509],{},"Card.toSchema"," keeps the names; ",[26,1512,1513],{},"Bundle.toSchemas"," turns them back into the entities.",[244,1516,1518],{"id":1517},"serialization-limits","Serialization limits",[13,1520,1521],{},"A card holds data only, never a function:",[1523,1524,1525,1540],"ul",{},[1526,1527,1528,1531,1532,1535,1536,1539],"li",{},[17,1529,1530],{},"a relation is a name"," — ",[26,1533,1534],{},"() => Author"," becomes ",[26,1537,1538],{},"\"author\"",", resolved inside a bundle;",[1526,1541,1542,1545,1546,106],{},[17,1543,1544],{},"a generator or a conversion is a name"," too, looked up in the reader's registry. A name the\nreader does not know is refused there: ",[26,1547,1548],{},"unknown generator",[244,1550,1552,1555],{"id":1551},"rpcdiscover-a-whole-apps-card",[26,1553,1554],{},"rpc.discover"," — a whole app's card",[13,1557,1558,1559,1561],{},"Every app answers the reserved operation ",[26,1560,1554],{}," with its card: per frond, the entities its\noperations use, the operations you may call, and the facts it announces.",[31,1563,1565],{"className":257,"code":1564,"language":259,"meta":36,"style":36},"{\n  \"fronds\": [{\n    \"name\": \"blog\",\n    \"entities\": [\n      { \"name\": \"post\", \"schema\": { \u002F* a card *\u002F } }\n    ],\n    \"facades\": [{\n      \"name\": \"post\",\n      \"ops\": [\n        { \"name\": \"list\",     \"kind\": \"query\",   \"output\": { \"title\": \"Post\", \u002F* … *\u002F } },\n        { \"name\": \"findById\", \"kind\": \"query\",   \"output\": { \"title\": \"Post\", \u002F* … *\u002F } },\n        { \"name\": \"create\",   \"kind\": \"command\", \"input\": { \u002F* a card *\u002F },\n                                                 \"output\": { \"title\": \"Post\", \u002F* … *\u002F } },\n        { \"name\": \"delete\",   \"kind\": \"command\" },\n        { \"name\": \"publish\",  \"kind\": \"command\", \"description\": \"Make the post public.\" }\n      ]\n    }],\n    \"facts\": [\n      { \"name\": \"postPublished\", \"schema\": { \u002F* a card *\u002F } }\n    ]\n  }]\n}\n",[26,1566,1567,1571,1585,1604,1618,1658,1663,1676,1694,1707,1783,1852,1904,1939,1976,2031,2036,2041,2054,2091,2096,2101],{"__ignoreMap":36},[40,1568,1569],{"class":42,"line":43},[40,1570,266],{"class":50},[40,1572,1573,1575,1578,1580,1582],{"class":42,"line":84},[40,1574,271],{"class":50},[40,1576,1577],{"class":274},"fronds",[40,1579,278],{"class":50},[40,1581,212],{"class":50},[40,1583,1584],{"class":50}," [{\n",[40,1586,1587,1589,1591,1593,1595,1597,1600,1602],{"class":42,"line":91},[40,1588,330],{"class":50},[40,1590,1129],{"class":333},[40,1592,278],{"class":50},[40,1594,212],{"class":50},[40,1596,283],{"class":70},[40,1598,1599],{"class":74},"blog",[40,1601,278],{"class":70},[40,1603,290],{"class":50},[40,1605,1606,1608,1611,1613,1615],{"class":42,"line":136},[40,1607,330],{"class":50},[40,1609,1610],{"class":333},"entities",[40,1612,278],{"class":50},[40,1614,212],{"class":50},[40,1616,1617],{"class":50}," [\n",[40,1619,1620,1623,1625,1627,1629,1631,1633,1636,1638,1640,1642,1645,1647,1649,1651,1654,1656],{"class":42,"line":327},[40,1621,1622],{"class":50},"      {",[40,1624,283],{"class":50},[40,1626,1129],{"class":349},[40,1628,278],{"class":50},[40,1630,212],{"class":50},[40,1632,283],{"class":70},[40,1634,1635],{"class":74},"post",[40,1637,278],{"class":70},[40,1639,58],{"class":50},[40,1641,283],{"class":50},[40,1643,1644],{"class":349},"schema",[40,1646,278],{"class":50},[40,1648,212],{"class":50},[40,1650,51],{"class":50},[40,1652,1653],{"class":132}," \u002F* a card *\u002F",[40,1655,64],{"class":50},[40,1657,470],{"class":50},[40,1659,1660],{"class":42,"line":343},[40,1661,1662],{"class":50},"    ],\n",[40,1664,1665,1667,1670,1672,1674],{"class":42,"line":365},[40,1666,330],{"class":50},[40,1668,1669],{"class":333},"facades",[40,1671,278],{"class":50},[40,1673,212],{"class":50},[40,1675,1584],{"class":50},[40,1677,1678,1680,1682,1684,1686,1688,1690,1692],{"class":42,"line":378},[40,1679,346],{"class":50},[40,1681,1129],{"class":349},[40,1683,278],{"class":50},[40,1685,212],{"class":50},[40,1687,283],{"class":70},[40,1689,1635],{"class":74},[40,1691,278],{"class":70},[40,1693,290],{"class":50},[40,1695,1696,1698,1701,1703,1705],{"class":42,"line":409},[40,1697,346],{"class":50},[40,1699,1700],{"class":349},"ops",[40,1702,278],{"class":50},[40,1704,212],{"class":50},[40,1706,1617],{"class":50},[40,1708,1709,1712,1714,1716,1718,1720,1722,1725,1727,1729,1732,1735,1737,1739,1741,1744,1746,1748,1751,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1779,1781],{"class":42,"line":473},[40,1710,1711],{"class":50},"        {",[40,1713,283],{"class":50},[40,1715,1129],{"class":208},[40,1717,278],{"class":50},[40,1719,212],{"class":50},[40,1721,283],{"class":70},[40,1723,1724],{"class":74},"list",[40,1726,278],{"class":70},[40,1728,58],{"class":50},[40,1730,1731],{"class":50},"     \"",[40,1733,1734],{"class":208},"kind",[40,1736,278],{"class":50},[40,1738,212],{"class":50},[40,1740,283],{"class":70},[40,1742,1743],{"class":74},"query",[40,1745,278],{"class":70},[40,1747,58],{"class":50},[40,1749,1750],{"class":50},"   \"",[40,1752,1753],{"class":208},"output",[40,1755,278],{"class":50},[40,1757,212],{"class":50},[40,1759,51],{"class":50},[40,1761,283],{"class":50},[40,1763,275],{"class":395},[40,1765,278],{"class":50},[40,1767,212],{"class":50},[40,1769,283],{"class":70},[40,1771,117],{"class":74},[40,1773,278],{"class":70},[40,1775,58],{"class":50},[40,1777,1778],{"class":132}," \u002F* … *\u002F",[40,1780,64],{"class":50},[40,1782,406],{"class":50},[40,1784,1785,1787,1789,1791,1793,1795,1797,1800,1802,1804,1806,1808,1810,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850],{"class":42,"line":479},[40,1786,1711],{"class":50},[40,1788,283],{"class":50},[40,1790,1129],{"class":208},[40,1792,278],{"class":50},[40,1794,212],{"class":50},[40,1796,283],{"class":70},[40,1798,1799],{"class":74},"findById",[40,1801,278],{"class":70},[40,1803,58],{"class":50},[40,1805,283],{"class":50},[40,1807,1734],{"class":208},[40,1809,278],{"class":50},[40,1811,212],{"class":50},[40,1813,283],{"class":70},[40,1815,1743],{"class":74},[40,1817,278],{"class":70},[40,1819,58],{"class":50},[40,1821,1750],{"class":50},[40,1823,1753],{"class":208},[40,1825,278],{"class":50},[40,1827,212],{"class":50},[40,1829,51],{"class":50},[40,1831,283],{"class":50},[40,1833,275],{"class":395},[40,1835,278],{"class":50},[40,1837,212],{"class":50},[40,1839,283],{"class":70},[40,1841,117],{"class":74},[40,1843,278],{"class":70},[40,1845,58],{"class":50},[40,1847,1778],{"class":132},[40,1849,64],{"class":50},[40,1851,406],{"class":50},[40,1853,1854,1856,1858,1860,1862,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1885,1887,1889,1891,1894,1896,1898,1900,1902],{"class":42,"line":485},[40,1855,1711],{"class":50},[40,1857,283],{"class":50},[40,1859,1129],{"class":208},[40,1861,278],{"class":50},[40,1863,212],{"class":50},[40,1865,283],{"class":70},[40,1867,425],{"class":74},[40,1869,278],{"class":70},[40,1871,58],{"class":50},[40,1873,1750],{"class":50},[40,1875,1734],{"class":208},[40,1877,278],{"class":50},[40,1879,212],{"class":50},[40,1881,283],{"class":70},[40,1883,1884],{"class":74},"command",[40,1886,278],{"class":70},[40,1888,58],{"class":50},[40,1890,283],{"class":50},[40,1892,1893],{"class":208},"input",[40,1895,278],{"class":50},[40,1897,212],{"class":50},[40,1899,51],{"class":50},[40,1901,1653],{"class":132},[40,1903,406],{"class":50},[40,1905,1906,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927,1929,1931,1933,1935,1937],{"class":42,"line":543},[40,1907,1908],{"class":50},"                                                 \"",[40,1910,1753],{"class":208},[40,1912,278],{"class":50},[40,1914,212],{"class":50},[40,1916,51],{"class":50},[40,1918,283],{"class":50},[40,1920,275],{"class":395},[40,1922,278],{"class":50},[40,1924,212],{"class":50},[40,1926,283],{"class":70},[40,1928,117],{"class":74},[40,1930,278],{"class":70},[40,1932,58],{"class":50},[40,1934,1778],{"class":132},[40,1936,64],{"class":50},[40,1938,406],{"class":50},[40,1940,1941,1943,1945,1947,1949,1951,1953,1956,1958,1960,1962,1964,1966,1968,1970,1972,1974],{"class":42,"line":606},[40,1942,1711],{"class":50},[40,1944,283],{"class":50},[40,1946,1129],{"class":208},[40,1948,278],{"class":50},[40,1950,212],{"class":50},[40,1952,283],{"class":70},[40,1954,1955],{"class":74},"delete",[40,1957,278],{"class":70},[40,1959,58],{"class":50},[40,1961,1750],{"class":50},[40,1963,1734],{"class":208},[40,1965,278],{"class":50},[40,1967,212],{"class":50},[40,1969,283],{"class":70},[40,1971,1884],{"class":74},[40,1973,278],{"class":70},[40,1975,406],{"class":50},[40,1977,1978,1980,1982,1984,1986,1988,1990,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2018,2020,2022,2024,2027,2029],{"class":42,"line":620},[40,1979,1711],{"class":50},[40,1981,283],{"class":50},[40,1983,1129],{"class":208},[40,1985,278],{"class":50},[40,1987,212],{"class":50},[40,1989,283],{"class":70},[40,1991,1992],{"class":74},"publish",[40,1994,278],{"class":70},[40,1996,58],{"class":50},[40,1998,271],{"class":50},[40,2000,1734],{"class":208},[40,2002,278],{"class":50},[40,2004,212],{"class":50},[40,2006,283],{"class":70},[40,2008,1884],{"class":74},[40,2010,278],{"class":70},[40,2012,58],{"class":50},[40,2014,283],{"class":50},[40,2016,2017],{"class":208},"description",[40,2019,278],{"class":50},[40,2021,212],{"class":50},[40,2023,283],{"class":70},[40,2025,2026],{"class":74},"Make the post public.",[40,2028,278],{"class":70},[40,2030,470],{"class":50},[40,2032,2033],{"class":42,"line":651},[40,2034,2035],{"class":50},"      ]\n",[40,2037,2038],{"class":42,"line":672},[40,2039,2040],{"class":50},"    }],\n",[40,2042,2043,2045,2048,2050,2052],{"class":42,"line":713},[40,2044,330],{"class":50},[40,2046,2047],{"class":333},"facts",[40,2049,278],{"class":50},[40,2051,212],{"class":50},[40,2053,1617],{"class":50},[40,2055,2056,2058,2060,2062,2064,2066,2068,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089],{"class":42,"line":718},[40,2057,1622],{"class":50},[40,2059,283],{"class":50},[40,2061,1129],{"class":349},[40,2063,278],{"class":50},[40,2065,212],{"class":50},[40,2067,283],{"class":70},[40,2069,2070],{"class":74},"postPublished",[40,2072,278],{"class":70},[40,2074,58],{"class":50},[40,2076,283],{"class":50},[40,2078,1644],{"class":349},[40,2080,278],{"class":50},[40,2082,212],{"class":50},[40,2084,51],{"class":50},[40,2086,1653],{"class":132},[40,2088,64],{"class":50},[40,2090,470],{"class":50},[40,2092,2093],{"class":42,"line":791},[40,2094,2095],{"class":50},"    ]\n",[40,2097,2098],{"class":42,"line":797},[40,2099,2100],{"class":50},"  }]\n",[40,2102,2103],{"class":42,"line":827},[40,2104,867],{"class":50},[13,2106,2107,2108,2110,2111,1531,2113,2115,2116,2118],{},"An operation always gives its ",[26,2109,1129],{}," and its ",[26,2112,1734],{},[26,2114,1743],{}," reads, ",[26,2117,1884],{}," writes. The rest\nappears when there is something to say:",[1038,2120,2121,2131],{},[1041,2122,2123],{},[1044,2124,2125,2128],{},[1047,2126,2127],{},"Key",[1047,2129,2130],{},"When",[1057,2132,2133,2148,2157,2167,2191],{},[1044,2134,2135,2142],{},[1062,2136,2137,2139,2140],{},[26,2138,1893],{},", ",[26,2141,1753],{},[1062,2143,2144,2145,2147],{},"the operation takes or answers a shape — ",[26,2146,1955],{}," answers a boolean, so neither",[1044,2149,2150,2154],{},[1062,2151,2152],{},[26,2153,2017],{},[1062,2155,2156],{},"the method has a doc sentence",[1044,2158,2159,2164],{},[1062,2160,2161],{},[26,2162,2163],{},"errors",[1062,2165,2166],{},"the codes it can refuse",[1044,2168,2169,2174],{},[1062,2170,2171],{},[26,2172,2173],{},"cardinality",[1062,2175,2176,2177,2139,2180,2139,2183,2139,2185,2139,2188],{},"how much it answers: ",[26,2178,2179],{},"one",[26,2181,2182],{},"maybe",[26,2184,1394],{},[26,2186,2187],{},"page",[26,2189,2190],{},"none",[1044,2192,2193,2198],{},[1062,2194,2195],{},[26,2196,2197],{},"listens",[1062,2199,2200],{},"the fact it is handed — nobody calls it, an announcement does",[13,2202,2203,2204,2206,2207,2209],{},"An ",[26,2205,1753],{}," that is an entity carries the entity's name as its ",[26,2208,275],{},": that is how a reader ties an\noperation to its rows, whatever the address. A facade may hold no entity at all — a health check, a\ncomputation.",[13,2211,2212,2214],{},[26,2213,1610],{}," lists what an operation takes or answers, and nothing else. A table no operation\nreaches — the auth tables, typically — stays off the card.",[885,2216,2217],{"id":2047},"Facts",[13,2219,2220,2221,2225,2226,2229,2230,2234],{},"A ",[22,2222,2224],{"href":2223},"\u002Fdocs\u002Fconcepts\u002Ffact","fact"," is reached by no operation, but its frond wrote that it leaves\n(",[26,2227,2228],{},"Emit\u003CPostPublished>","), so its shape is published. That is what lets a listener in\n",[22,2231,2233],{"href":2232},"\u002Fdocs\u002Fadopt\u002Fanother-repository","another repository"," read it without copying the announcer's code.",[13,2236,2237,2238,2240],{},"A remote caller reads ",[26,2239,1669],{}," to know which process answers which address. A fact is not called:\nit arrives.",[244,2242,2244],{"id":2243},"the-call-contract","The call contract",[13,2246,2247,2248,2251,2252,106],{},"A call is a value: ",[26,2249,2250],{},"(address, operation, invocation)"," with\n",[26,2253,2254],{},"invocation = { params, query, input, state }",[1523,2256,2257,2263,2269],{},[1526,2258,2259,2262],{},[26,2260,2261],{},"createLocalRunner"," executes strictly locally;",[1526,2264,2265,2268],{},[26,2266,2267],{},"createAppRunner"," follows the topology — local facades, remote stand-ins;",[1526,2270,2271],{},"a transport carries this value as it is.",[2273,2274],"d2-figure",{"caption":2275,"name":2276},"One call, both topologies. The hop is inserted; the facade that validates, binds, presents and projects is the same one on either side.","call-path",[244,2278,2280],{"id":2279},"the-wire-format","The wire format",[13,2282,2283,2284,212],{},"Process-to-process is JSON-RPC 2.0 on ",[26,2285,2286],{},"POST \u002F_fougere\u002Fcall",[31,2288,2290],{"className":257,"code":2289,"language":259,"meta":36,"style":36},"\u002F\u002F → request\n{ \"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"post.publish\",\n  \"params\": { \"params\": { \"id\": \"…\" }, \"query\": {}, \"input\": null, \"state\": { \"user\": { … } } } }\n\n\u002F\u002F ← success\n{ \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"id\": \"…\", \"status\": \"published\", … } }\n\n\u002F\u002F ← domain failure — revived as FougereError on the calling side\n{ \"jsonrpc\": \"2.0\", \"id\": 1, \"error\": { \"code\": -32000,\n    \"data\": { \"code\": \"CONFLICT\", \"message\": \"Already published\",\n              \"address\": \"post\", \"operation\": \"publish\" } } }\n",[26,2291,2292,2297,2349,2445,2449,2454,2535,2539,2544,2600,2648],{"__ignoreMap":36},[40,2293,2294],{"class":42,"line":43},[40,2295,2296],{"class":132},"\u002F\u002F → request\n",[40,2298,2299,2301,2303,2306,2308,2310,2312,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2336,2338,2340,2342,2345,2347],{"class":42,"line":84},[40,2300,1262],{"class":50},[40,2302,283],{"class":50},[40,2304,2305],{"class":274},"jsonrpc",[40,2307,278],{"class":50},[40,2309,212],{"class":50},[40,2311,283],{"class":70},[40,2313,2314],{"class":74},"2.0",[40,2316,278],{"class":70},[40,2318,58],{"class":50},[40,2320,283],{"class":50},[40,2322,334],{"class":274},[40,2324,278],{"class":50},[40,2326,212],{"class":50},[40,2328,839],{"class":523},[40,2330,58],{"class":50},[40,2332,283],{"class":50},[40,2334,2335],{"class":274},"method",[40,2337,278],{"class":50},[40,2339,212],{"class":50},[40,2341,283],{"class":70},[40,2343,2344],{"class":74},"post.publish",[40,2346,278],{"class":70},[40,2348,290],{"class":50},[40,2350,2351,2353,2356,2358,2360,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2385,2387,2389,2391,2393,2395,2397,2400,2402,2404,2406,2408,2410,2412,2414,2417,2419,2421,2423,2425,2428,2430,2432,2434,2437,2439,2441,2443],{"class":42,"line":91},[40,2352,271],{"class":50},[40,2354,2355],{"class":274},"params",[40,2357,278],{"class":50},[40,2359,212],{"class":50},[40,2361,51],{"class":50},[40,2363,283],{"class":50},[40,2365,2355],{"class":333},[40,2367,278],{"class":50},[40,2369,212],{"class":50},[40,2371,51],{"class":50},[40,2373,283],{"class":50},[40,2375,334],{"class":349},[40,2377,278],{"class":50},[40,2379,212],{"class":50},[40,2381,283],{"class":70},[40,2383,2384],{"class":74},"…",[40,2386,278],{"class":70},[40,2388,451],{"class":50},[40,2390,283],{"class":50},[40,2392,1743],{"class":333},[40,2394,278],{"class":50},[40,2396,212],{"class":50},[40,2398,2399],{"class":50}," {},",[40,2401,283],{"class":50},[40,2403,1893],{"class":333},[40,2405,278],{"class":50},[40,2407,212],{"class":50},[40,2409,991],{"class":70},[40,2411,58],{"class":50},[40,2413,283],{"class":50},[40,2415,2416],{"class":333},"state",[40,2418,278],{"class":50},[40,2420,212],{"class":50},[40,2422,51],{"class":50},[40,2424,283],{"class":50},[40,2426,2427],{"class":349},"user",[40,2429,278],{"class":50},[40,2431,212],{"class":50},[40,2433,51],{"class":50},[40,2435,2436],{"class":54}," … ",[40,2438,1465],{"class":50},[40,2440,64],{"class":50},[40,2442,64],{"class":50},[40,2444,470],{"class":50},[40,2446,2447],{"class":42,"line":136},[40,2448,88],{"emptyLinePlaceholder":87},[40,2450,2451],{"class":42,"line":327},[40,2452,2453],{"class":132},"\u002F\u002F ← success\n",[40,2455,2456,2458,2460,2462,2464,2466,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486,2488,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515,2517,2519,2521,2523,2525,2527,2529,2531,2533],{"class":42,"line":343},[40,2457,1262],{"class":50},[40,2459,283],{"class":50},[40,2461,2305],{"class":274},[40,2463,278],{"class":50},[40,2465,212],{"class":50},[40,2467,283],{"class":70},[40,2469,2314],{"class":74},[40,2471,278],{"class":70},[40,2473,58],{"class":50},[40,2475,283],{"class":50},[40,2477,334],{"class":274},[40,2479,278],{"class":50},[40,2481,212],{"class":50},[40,2483,839],{"class":523},[40,2485,58],{"class":50},[40,2487,283],{"class":50},[40,2489,2490],{"class":274},"result",[40,2492,278],{"class":50},[40,2494,212],{"class":50},[40,2496,51],{"class":50},[40,2498,283],{"class":50},[40,2500,334],{"class":333},[40,2502,278],{"class":50},[40,2504,212],{"class":50},[40,2506,283],{"class":70},[40,2508,2384],{"class":74},[40,2510,278],{"class":70},[40,2512,58],{"class":50},[40,2514,283],{"class":50},[40,2516,548],{"class":333},[40,2518,278],{"class":50},[40,2520,212],{"class":50},[40,2522,283],{"class":70},[40,2524,596],{"class":74},[40,2526,278],{"class":70},[40,2528,58],{"class":50},[40,2530,2436],{"class":54},[40,2532,1465],{"class":50},[40,2534,470],{"class":50},[40,2536,2537],{"class":42,"line":365},[40,2538,88],{"emptyLinePlaceholder":87},[40,2540,2541],{"class":42,"line":378},[40,2542,2543],{"class":132},"\u002F\u002F ← domain failure — revived as FougereError on the calling side\n",[40,2545,2546,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570,2572,2574,2576,2578,2581,2583,2585,2587,2589,2591,2593,2595,2598],{"class":42,"line":409},[40,2547,1262],{"class":50},[40,2549,283],{"class":50},[40,2551,2305],{"class":274},[40,2553,278],{"class":50},[40,2555,212],{"class":50},[40,2557,283],{"class":70},[40,2559,2314],{"class":74},[40,2561,278],{"class":70},[40,2563,58],{"class":50},[40,2565,283],{"class":50},[40,2567,334],{"class":274},[40,2569,278],{"class":50},[40,2571,212],{"class":50},[40,2573,839],{"class":523},[40,2575,58],{"class":50},[40,2577,283],{"class":50},[40,2579,2580],{"class":274},"error",[40,2582,278],{"class":50},[40,2584,212],{"class":50},[40,2586,51],{"class":50},[40,2588,283],{"class":50},[40,2590,26],{"class":333},[40,2592,278],{"class":50},[40,2594,212],{"class":50},[40,2596,2597],{"class":523}," -32000",[40,2599,290],{"class":50},[40,2601,2602,2604,2607,2609,2611,2613,2615,2617,2619,2621,2623,2626,2628,2630,2632,2635,2637,2639,2641,2644,2646],{"class":42,"line":473},[40,2603,330],{"class":50},[40,2605,2606],{"class":333},"data",[40,2608,278],{"class":50},[40,2610,212],{"class":50},[40,2612,51],{"class":50},[40,2614,283],{"class":50},[40,2616,26],{"class":349},[40,2618,278],{"class":50},[40,2620,212],{"class":50},[40,2622,283],{"class":70},[40,2624,2625],{"class":74},"CONFLICT",[40,2627,278],{"class":70},[40,2629,58],{"class":50},[40,2631,283],{"class":50},[40,2633,2634],{"class":349},"message",[40,2636,278],{"class":50},[40,2638,212],{"class":50},[40,2640,283],{"class":70},[40,2642,2643],{"class":74},"Already published",[40,2645,278],{"class":70},[40,2647,290],{"class":50},[40,2649,2650,2653,2656,2658,2660,2662,2664,2666,2668,2670,2673,2675,2677,2679,2681,2683,2685,2687],{"class":42,"line":479},[40,2651,2652],{"class":50},"              \"",[40,2654,2655],{"class":349},"address",[40,2657,278],{"class":50},[40,2659,212],{"class":50},[40,2661,283],{"class":70},[40,2663,1635],{"class":74},[40,2665,278],{"class":70},[40,2667,58],{"class":50},[40,2669,283],{"class":50},[40,2671,2672],{"class":349},"operation",[40,2674,278],{"class":50},[40,2676,212],{"class":50},[40,2678,283],{"class":70},[40,2680,1992],{"class":74},[40,2682,278],{"class":70},[40,2684,64],{"class":50},[40,2686,64],{"class":50},[40,2688,470],{"class":50},[13,2690,2691,2693,2694,2697,2698,2700,2701,2703],{},[26,2692,2335],{}," is ",[26,2695,2696],{},"address.op",", and ",[26,2699,2355],{}," holds the invocation. A browser sends the same frame, but the\nserver ignores its ",[26,2702,2416],{}," and builds its own from the request.",[13,2705,2706,2707,106],{},"The card and this frame are all a process must honour to answer as a frond — in any language: see\n",[22,2708,2710],{"href":2709},"\u002Fdocs\u002Fextending\u002Fforeign-frond","A frond in another language",[2712,2713,2714],"style",{},"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 .s15xx, html code.shiki .s15xx{--shiki-light:#39ADB5;--shiki-default:#A3B0A5;--shiki-dark:#89DDFF}html pre.shiki code .sPEhv, html code.shiki .sPEhv{--shiki-light:#90A4AE;--shiki-default:#DDE5DA;--shiki-dark:#BABED8}html pre.shiki code .sDDC1, html code.shiki .sDDC1{--shiki-light:#39ADB5;--shiki-default:#EE9F6B;--shiki-dark:#89DDFF}html pre.shiki code .sN-8n, html code.shiki .sN-8n{--shiki-light:#91B859;--shiki-default:#EE9F6B;--shiki-dark:#C3E88D}html pre.shiki code .s76I7, html code.shiki .s76I7{--shiki-light:#9C3EDA;--shiki-default:#8FCF86;--shiki-dark:#C792EA}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 .sy9f4, html code.shiki .sy9f4{--shiki-light:#90A4AE;--shiki-default:#93CFC0;--shiki-dark:#BABED8}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 .sBZYL, html code.shiki .sBZYL{--shiki-light:#E2931D;--shiki-default:#EFCD8F;--shiki-dark:#FFCB6B}html pre.shiki code .sHtqg, html code.shiki .sHtqg{--shiki-light:#E53935;--shiki-default:#93CFC0;--shiki-dark:#F07178}html pre.shiki code .s8ClO, html code.shiki .s8ClO{--shiki-light:#9C3EDA;--shiki-default:#93CFC0;--shiki-dark:#C792EA}html pre.shiki code .sWI7z, html code.shiki .sWI7z{--shiki-light:#E2931D;--shiki-default:#93CFC0;--shiki-dark:#FFCB6B}html pre.shiki code .sgzKs, html code.shiki .sgzKs{--shiki-light:#F76D47;--shiki-default:#93CFC0;--shiki-dark:#F78C6C}html pre.shiki code .sLLcL, html code.shiki .sLLcL{--shiki-light:#916B53;--shiki-default:#93CFC0;--shiki-dark:#916B53}html pre.shiki code .sqrf7, html code.shiki .sqrf7{--shiki-light:#6182B8;--shiki-default:#93CFC0;--shiki-dark:#82AAFF}html pre.shiki code .s3dPA, html code.shiki .s3dPA{--shiki-light:#F76D47;--shiki-default:#EE9F6B;--shiki-dark:#F78C6C}",{"title":36,"searchDepth":84,"depth":84,"links":2716},[2717,2720,2722,2723,2725,2726,2727,2731,2732],{"id":246,"depth":84,"text":247,"children":2718},[2719],{"id":887,"depth":91,"text":888},{"id":1033,"depth":84,"text":2721},"The three axes under x-fougere",{"id":1227,"depth":84,"text":1228},{"id":1376,"depth":84,"text":2724},"required semantics",{"id":1405,"depth":84,"text":1406},{"id":1517,"depth":84,"text":1518},{"id":1551,"depth":84,"text":2728,"children":2729},"rpc.discover — a whole app's card",[2730],{"id":2047,"depth":91,"text":2217},{"id":2243,"depth":84,"text":2244},{"id":2279,"depth":84,"text":2280},"What a process publishes about itself, and the frame between processes.","md",null,"extending",{},"\u002Fdocs\u002Fextending\u002Fcard-and-wire",{"title":8,"description":2733},"docs\u002F8.extending\u002F3.card-and-wire","O9mOh5V8jgTvf0Ubr91wZqchtVg6nfCxKT_28SNgvSg",[2743,2745,2748,2751,2754,2757,2759,2762,2765,2771,2777,2782,2786,2790,2794,2798,2802,2807,2811,2815,2819,2823,2828,2832,2836,2840,2844,2848,2852,2856,2860,2864,2868,2871,2875,2878,2882,2885,2888,2891,2892,2895,2898,2901,2904,2907,2908],{"path":894,"title":2744,"uses":2735},"Entity",{"path":2746,"title":2747,"uses":2735},"\u002Fdocs\u002Fconcepts\u002Fhandler","Handler",{"path":2749,"title":2750,"uses":2735},"\u002Fdocs\u002Fconcepts\u002Frepository","Repository",{"path":2752,"title":2753,"uses":2735},"\u002Fdocs\u002Fconcepts\u002Ffrond","Frond",{"path":2755,"title":2756,"uses":2735},"\u002Fdocs\u002Fconcepts\u002Ffacade","Facade",{"path":2223,"title":2758,"uses":2735},"Fact",{"path":2760,"title":2761,"uses":2735},"\u002Fdocs\u002Fconcepts\u002Fport","Port",{"path":2763,"title":2764,"uses":2735},"\u002Fdocs\u002Fconcepts\u002Fconfiguration","Configuration",{"path":2766,"title":2767,"uses":2768},"\u002Fdocs\u002Faccess\u002Fauthentication","Authentication",[2769,2770],"port","frond",{"path":2772,"title":2773,"uses":2774},"\u002Fdocs\u002Faccess\u002Fstate","Keep a caller's state",[2775,2776],"configuration","handler",{"path":2778,"title":2779,"uses":2780},"\u002Fdocs\u002Fdata\u002Fsql","SQLite or Postgres",[2781,2775],"entity",{"path":2783,"title":2784,"uses":2785},"\u002Fdocs\u002Fdata\u002Fseveral-databases","Several databases",[2775,2781],{"path":2787,"title":2788,"uses":2789},"\u002Fdocs\u002Fdata\u002Fcomputed-field","A computed field",[2781,2769],{"path":2791,"title":2792,"uses":2793},"\u002Fdocs\u002Fdata\u002Fevolve","Evolve a schema",[2781],{"path":2795,"title":2796,"uses":2797},"\u002Fdocs\u002Fdata\u002Fseeds","Seed data",[2781],{"path":2799,"title":2800,"uses":2801},"\u002Fdocs\u002Fdata\u002Fvalues","Read settings and secrets",[2781,2775],{"path":2803,"title":2804,"uses":2805},"\u002Fdocs\u002Fdata\u002Fmirror","Mirror a source you cannot query",[2806],"repository",{"path":2808,"title":2809,"uses":2810},"\u002Fdocs\u002Fdata\u002Ftogether","Two writes as one",[2806],{"path":2812,"title":2813,"uses":2814},"\u002Fdocs\u002Fbehaviour\u002Faround-every-call","Around every call",[2769,2770],{"path":2816,"title":2817,"uses":2818},"\u002Fdocs\u002Fbehaviour\u002Ffinish-a-fact","Finish a fact",[2224],{"path":2820,"title":2821,"uses":2822},"\u002Fdocs\u002Fserve\u002Frest-graphql","REST, OpenAPI, GraphQL",[2776,2775],{"path":2824,"title":2825,"uses":2826},"\u002Fdocs\u002Fserve\u002Fpages","Pages: queries and commands",[2776,2827],"facade",{"path":2829,"title":2830,"uses":2831},"\u002Fdocs\u002Fserve\u002Fforms","A form",[2781],{"path":2833,"title":2834,"uses":2835},"\u002Fdocs\u002Fserve\u002Fadmin","An admin panel",[2776],{"path":2837,"title":2838,"uses":2839},"\u002Fdocs\u002Frun\u002Fdeploy","Deploy a split",[2775,2770],{"path":2841,"title":2842,"uses":2843},"\u002Fdocs\u002Frun\u002Fsecure","Secure calls between processes",[2775,2770],{"path":2845,"title":2846,"uses":2847},"\u002Fdocs\u002Frun\u002Flifecycle","Reload and shut down",[2775],{"path":2849,"title":2850,"uses":2851},"\u002Fdocs\u002Frun\u002Fobserve","Observe",[2775,2776],{"path":2853,"title":2854,"uses":2855},"\u002Fdocs\u002Frun\u002Fdev-panel","The dev panel",[2776],{"path":2857,"title":2858,"uses":2859},"\u002Fdocs\u002Frun\u002Ftest","Test",[2781,2769],{"path":2861,"title":2862,"uses":2863},"\u002Fdocs\u002Fadopt\u002Fnew-project","Start a project",[2770,2775],{"path":2865,"title":2866,"uses":2867},"\u002Fdocs\u002Fadopt\u002Fexisting-app","Add Fougere to an existing app",[2770,2775],{"path":24,"title":2869,"uses":2870},"Bring your schema",[2781],{"path":2872,"title":2873,"uses":2874},"\u002Fdocs\u002Fadopt\u002Fhosts","Pick a host",[2775],{"path":2232,"title":2876,"uses":2877},"A frond from another repository",[2827,2770],{"path":2879,"title":2880,"uses":2881},"\u002Fdocs\u002Fadopt\u002Fdemos","Demos",[],{"path":2883,"title":2884,"uses":2735},"\u002Fdocs\u002Fextending\u002Fscan","How the scan reads a project",{"path":2886,"title":2887,"uses":2735},"\u002Fdocs\u002Fextending\u002Fwithout-compiler","Boot without the compiler",{"path":2889,"title":2890,"uses":2735},"\u002Fdocs\u002Fextending\u002Fboot","The boot, step by step",{"path":2738,"title":8,"uses":2735},{"path":2893,"title":2894,"uses":2735},"\u002Fdocs\u002Fextending\u002Fextension-points","Registries and extension points",{"path":2896,"title":2897,"uses":2735},"\u002Fdocs\u002Fextending\u002Fvocabulary","Teach a word",{"path":2899,"title":2900,"uses":2735},"\u002Fdocs\u002Fextending\u002Fextensions","Run code at boot and shutdown",{"path":2902,"title":2903,"uses":2735},"\u002Fdocs\u002Fextending\u002Fsource-adapter","Write a source adapter",{"path":2905,"title":2906,"uses":2735},"\u002Fdocs\u002Fextending\u002Fsurface","Write a surface",{"path":2709,"title":2710,"uses":2735},{"path":2909,"title":2910,"uses":2735},"\u002Fdocs","What is Fougere",[2912],{"title":2913,"path":2909,"stem":2914,"children":2915,"page":-1},"Docs","docs",[2916,2918,2939,2948,2969,2978,2991,3008,3025],{"title":2910,"path":2909,"stem":2917},"docs\u002Findex",{"title":2919,"path":2920,"stem":2921,"children":2922,"page":5},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F1.concepts",[2923,2925,2927,2929,2931,2933,2935,2937],{"title":2744,"path":894,"stem":2924},"docs\u002F1.concepts\u002F1.entity",{"title":2747,"path":2746,"stem":2926},"docs\u002F1.concepts\u002F2.handler",{"title":2750,"path":2749,"stem":2928},"docs\u002F1.concepts\u002F3.repository",{"title":2753,"path":2752,"stem":2930},"docs\u002F1.concepts\u002F4.frond",{"title":2756,"path":2755,"stem":2932},"docs\u002F1.concepts\u002F5.facade",{"title":2758,"path":2223,"stem":2934},"docs\u002F1.concepts\u002F6.fact",{"title":2761,"path":2760,"stem":2936},"docs\u002F1.concepts\u002F7.port",{"title":2764,"path":2763,"stem":2938},"docs\u002F1.concepts\u002F8.configuration",{"title":2940,"path":2941,"stem":2942,"children":2943,"page":5},"Access","\u002Fdocs\u002Faccess","docs\u002F2.access",[2944,2946],{"title":2767,"path":2766,"stem":2945},"docs\u002F2.access\u002F1.authentication",{"title":2773,"path":2772,"stem":2947},"docs\u002F2.access\u002F2.state",{"title":2949,"path":2950,"stem":2951,"children":2952,"page":5},"Data","\u002Fdocs\u002Fdata","docs\u002F3.data",[2953,2955,2957,2959,2961,2963,2965,2967],{"title":2779,"path":2778,"stem":2954},"docs\u002F3.data\u002F1.sql",{"title":2784,"path":2783,"stem":2956},"docs\u002F3.data\u002F2.several-databases",{"title":2788,"path":2787,"stem":2958},"docs\u002F3.data\u002F3.computed-field",{"title":2792,"path":2791,"stem":2960},"docs\u002F3.data\u002F4.evolve",{"title":2796,"path":2795,"stem":2962},"docs\u002F3.data\u002F5.seeds",{"title":2800,"path":2799,"stem":2964},"docs\u002F3.data\u002F6.values",{"title":2804,"path":2803,"stem":2966},"docs\u002F3.data\u002F7.mirror",{"title":2809,"path":2808,"stem":2968},"docs\u002F3.data\u002F8.together",{"title":2970,"path":2971,"stem":2972,"children":2973,"page":5},"Behaviour","\u002Fdocs\u002Fbehaviour","docs\u002F4.behaviour",[2974,2976],{"title":2813,"path":2812,"stem":2975},"docs\u002F4.behaviour\u002F1.around-every-call",{"title":2817,"path":2816,"stem":2977},"docs\u002F4.behaviour\u002F2.finish-a-fact",{"title":2979,"path":2980,"stem":2981,"children":2982,"page":5},"Serve","\u002Fdocs\u002Fserve","docs\u002F5.serve",[2983,2985,2987,2989],{"title":2821,"path":2820,"stem":2984},"docs\u002F5.serve\u002F1.rest-graphql",{"title":2825,"path":2824,"stem":2986},"docs\u002F5.serve\u002F2.pages",{"title":2830,"path":2829,"stem":2988},"docs\u002F5.serve\u002F3.forms",{"title":2834,"path":2833,"stem":2990},"docs\u002F5.serve\u002F4.admin",{"title":2992,"path":2993,"stem":2994,"children":2995,"page":5},"Run","\u002Fdocs\u002Frun","docs\u002F6.run",[2996,2998,3000,3002,3004,3006],{"title":2838,"path":2837,"stem":2997},"docs\u002F6.run\u002F1.deploy",{"title":2842,"path":2841,"stem":2999},"docs\u002F6.run\u002F2.secure",{"title":2846,"path":2845,"stem":3001},"docs\u002F6.run\u002F3.lifecycle",{"title":2850,"path":2849,"stem":3003},"docs\u002F6.run\u002F4.observe",{"title":2854,"path":2853,"stem":3005},"docs\u002F6.run\u002F5.dev-panel",{"title":2858,"path":2857,"stem":3007},"docs\u002F6.run\u002F6.test",{"title":3009,"path":3010,"stem":3011,"children":3012,"page":5},"Adopt","\u002Fdocs\u002Fadopt","docs\u002F7.adopt",[3013,3015,3017,3019,3021,3023],{"title":2862,"path":2861,"stem":3014},"docs\u002F7.adopt\u002F1.new-project",{"title":2866,"path":2865,"stem":3016},"docs\u002F7.adopt\u002F2.existing-app",{"title":2869,"path":24,"stem":3018},"docs\u002F7.adopt\u002F3.bring-your-schema",{"title":2873,"path":2872,"stem":3020},"docs\u002F7.adopt\u002F4.hosts",{"title":2876,"path":2232,"stem":3022},"docs\u002F7.adopt\u002F5.another-repository",{"title":2880,"path":2879,"stem":3024},"docs\u002F7.adopt\u002F6.demos",{"title":3026,"path":3027,"stem":3028,"children":3029,"page":5},"Extending","\u002Fdocs\u002Fextending","docs\u002F8.extending",[3030,3032,3034,3036,3037,3039,3041,3043,3045,3047],{"title":2884,"path":2883,"stem":3031},"docs\u002F8.extending\u002F1.scan",{"title":2887,"path":2886,"stem":3033},"docs\u002F8.extending\u002F10.without-compiler",{"title":2890,"path":2889,"stem":3035},"docs\u002F8.extending\u002F2.boot",{"title":8,"path":2738,"stem":2740},{"title":2894,"path":2893,"stem":3038},"docs\u002F8.extending\u002F4.extension-points",{"title":2897,"path":2896,"stem":3040},"docs\u002F8.extending\u002F5.vocabulary",{"title":2900,"path":2899,"stem":3042},"docs\u002F8.extending\u002F6.extensions",{"title":2903,"path":2902,"stem":3044},"docs\u002F8.extending\u002F7.source-adapter",{"title":2906,"path":2905,"stem":3046},"docs\u002F8.extending\u002F8.surface",{"title":2710,"path":2709,"stem":3048},"docs\u002F8.extending\u002F9.foreign-frond",1794396613613]