[{"data":1,"prerenderedAt":1322},["ShallowReactive",2],{"fougere:post.list:{}":3,"reference:\u002Freference\u002Fdiagnostics":6,"reference-pages":1103},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":1094,"extension":1095,"file":1096,"meta":1097,"navigation":1098,"path":1099,"seo":1100,"stem":1101,"__hash__":1102},"reference\u002Freference\u002F11.diagnostics.md","Boot and check diagnostics",{"type":10,"value":11,"toc":1090},"minimark",[12,16,29],[13,14,8],"h1",{"id":15},"boot-and-check-diagnostics",[17,18,19,20,24,25,28],"p",{},"What does not hold is named, with a code, the file to look at, and one sentence. A ",[21,22,23],"strong",{},"blocking"," one stops the boot; a ",[21,26,27],{},"warning"," is printed and the app starts. 62 codes, read off the code that raises them.",[30,31,32,50],"table",{},[33,34,35],"thead",{},[36,37,38,42,44,47],"tr",{},[39,40,41],"th",{},"code",[39,43],{},[39,45,46],{},"what it says",[39,48,49],{},"raised by",[51,52,53,71,87,103,119,135,151,167,183,200,216,236,252,273,289,305,321,340,356,372,388,404,420,436,452,468,484,500,516,532,548,564,580,596,612,628,644,660,676,692,708,724,744,759,775,791,807,826,845,861,877,893,909,925,941,968,984,1000,1023,1039,1055,1074],"tbody",{},[36,54,55,61,63,66],{},[56,57,58],"td",{},[41,59,60],{},"aggregate-storage-reached",[56,62,23],{},[56,64,65],{},"… asks for …, but … belongs to …. Ask for that instead: constructor(private …: …) {}.",[56,67,68],{},[41,69,70],{},"@fougere\u002Fcore",[36,72,73,78,80,83],{},[56,74,75],{},[41,76,77],{},"collector-in-another-frond",[56,79,27],{},[56,81,82],{},"….… takes … from the request, but the frond '…' has a … collector that '…' cannot see. - To use that collector: move it into '…'. - To keep the request: declare it in …\u002Ffrond.config.ts: operations: { '….…': { binding: [{",[56,84,85],{},[41,86,70],{},[36,88,89,94,96,99],{},[56,90,91],{},[41,92,93],{},"collector-unavailable",[56,95,23],{},[56,97,98],{},"….… takes …: …, and no collector in the frond '…' provides one. Add a class extending Collect\u003C…> in ….",[56,100,101],{},[41,102,70],{},[36,104,105,110,112,115],{},[56,106,107],{},[41,108,109],{},"constructor-arity",[56,111,23],{},[56,113,114],{},"…'s constructor takes … parameter(s), but only … … typed (…). Type each parameter, or the others receive undefined.",[56,116,117],{},[41,118,70],{},[36,120,121,126,128,131],{},[56,122,123],{},[41,124,125],{},"cross-frond-dependency",[56,127,27],{},[56,129,130],{},"… asks for …, which belongs to the frond '…', so '…' cannot see it. Move … into '…', or call '…' through its handler's facade.",[56,132,133],{},[41,134,70],{},[36,136,137,142,144,147],{},[56,138,139],{},[41,140,141],{},"crud-on-owned-entity",[56,143,23],{},[56,145,146],{},"… extends Repository\u003C…>, but … belongs to …. Drop it and ask for the owner: constructor(private …: …) {}.",[56,148,149],{},[41,150,70],{},[36,152,153,158,160,163],{},[56,154,155],{},[41,156,157],{},"dependency-cycle",[56,159,23],{},[56,161,162],{},"…",[56,164,165],{},[41,166,70],{},[36,168,169,174,176,179],{},[56,170,171],{},[41,172,173],{},"dependency-unregistered",[56,175,23],{},[56,177,178],{},"… asks for …, and nothing in the frond '…' provides it. Add a class named … in …, or check the spelling.",[56,180,181],{},[41,182,70],{},[36,184,185,190,192,195],{},[56,186,187],{},[41,188,189],{},"directory-unreadable",[56,191,23],{},[56,193,194],{},"This directory could not be read, so what it declares is missing from the app.",[56,196,197],{},[41,198,199],{},"@fougere\u002Fcompiler",[36,201,202,207,209,212],{},[56,203,204],{},[41,205,206],{},"door-link-unknown-op",[56,208,23],{},[56,210,211],{},"….… names no operation of …, which serves …. Name the method after the operation it stands around.",[56,213,214],{},[41,215,70],{},[36,217,218,223,225,232],{},[56,219,220],{},[41,221,222],{},"emit-await-with-carrier",[56,224,23],{},[56,226,227,228,231],{},"Emit\u003C…, …> waits for answers, but this app sends facts through a carrier (onEmit), which brings no answer back. Give the subscribers' fronds an address in ",[41,229,230],{},"fronds:",", or use Emit\u003C…> without the second type.",[56,233,234],{},[41,235,70],{},[36,237,238,243,245,248],{},[56,239,240],{},[41,241,242],{},"entity-owned-twice",[56,244,23],{},[56,246,247],{},"… is in both … and …. Keep it in one.",[56,249,250],{},[41,251,70],{},[36,253,254,259,261,268],{},[56,255,256],{},[41,257,258],{},"facade-stale",[56,260,27],{},[56,262,263,264,267],{},"@fronds\u002Ffacade is older than the handlers, so pages are checked against old operations. Run ",[41,265,266],{},"fougere build",".",[56,269,270],{},[41,271,272],{},"@fougere\u002Fcli",[36,274,275,280,282,285],{},[56,276,277],{},[41,278,279],{},"fact-contract-ambiguous",[56,281,23],{},[56,283,284],{},"….… listens to …, and a parameter takes one fact. Write one method per fact.",[56,286,287],{},[41,288,199],{},[36,290,291,296,298,301],{},[56,292,293],{},[41,294,295],{},"frond-extends-chain",[56,297,23],{},[56,299,300],{},"The frond '…' extends '…', which extends '…'. A frond can extend only one level. Move what they share into the frond they both extend.",[56,302,303],{},[41,304,70],{},[36,306,307,312,314,317],{},[56,308,309],{},[41,310,311],{},"frond-family-split",[56,313,23],{},[56,315,316],{},"The frond '…' extends '…', which this process leaves out. Run the two in the same process, or remove extends: '…'.",[56,318,319],{},[41,320,70],{},[36,322,323,328,330,336],{},[56,324,325],{},[41,326,327],{},"frond-holds-several-domains",[56,329,27],{},[56,331,332,333,267],{},"The frond '…' has … groups of entities with no relation between them (…). A ref() is missing, or they are separate fronds — see ",[41,334,335],{},"fougere graph",[56,337,338],{},[41,339,272],{},[36,341,342,347,349,352],{},[56,343,344],{},[41,345,346],{},"frond-key-taken",[56,348,23],{},[56,350,351],{},"The fronds '…' and '…' both have a … answering …, the other in …. Rename one, or leave one frond out of this process (only:).",[56,353,354],{},[41,355,70],{},[36,357,358,363,365,368],{},[56,359,360],{},[41,361,362],{},"frond-parent-entities",[56,364,23],{},[56,366,367],{},"The frond '…' is extended by …, so it cannot have entities (…). Move them into one of them, and import them from there: import X from '…\u002F…\u002FX.js'.",[56,369,370],{},[41,371,70],{},[36,373,374,379,381,384],{},[56,375,376],{},[41,377,378],{},"frond-parent-remote",[56,380,23],{},[56,382,383],{},"The frond '…' is extended by …, so it cannot have an address (…). Give the address to one of them instead.",[56,385,386],{},[41,387,70],{},[36,389,390,395,397,400],{},[56,391,392],{},[41,393,394],{},"frond-parent-serves",[56,396,23],{},[56,398,399],{},"The frond '…' is extended by …, so it cannot have handlers (…). Move its handlers into one of them.",[56,401,402],{},[41,403,70],{},[36,405,406,411,413,416],{},[56,407,408],{},[41,409,410],{},"frond-unknown",[56,412,23],{},[56,414,415],{},"No frond is named '…'. This project has: ….",[56,417,418],{},[41,419,70],{},[36,421,422,427,429,432],{},[56,423,424],{},[41,425,426],{},"handler-of-another-frond",[56,428,23],{},[56,430,431],{},"… asks for …, a handler of the frond '…'. A handler is handed only inside its own frond: from another one, ask for its facade — Facade\u003C…> — which validates, runs the middlewares and crosses a process when the frond moves",[56,433,434],{},[41,435,70],{},[36,437,438,443,445,448],{},[56,439,440],{},[41,441,442],{},"handler-parse-failed",[56,444,23],{},[56,446,447],{},"This handler could not be parsed, so its operations are served without checking their input.",[56,449,450],{},[41,451,199],{},[36,453,454,459,461,464],{},[56,455,456],{},[41,457,458],{},"handler-unstated",[56,460,27],{},[56,462,463],{},"… is in the code of the frond '…' but not in fronds.ts, so the app starts without it.",[56,465,466],{},[41,467,272],{},[36,469,470,475,477,480],{},[56,471,472],{},[41,473,474],{},"heritage-unresolved",[56,476,27],{},[56,478,479],{},"Cannot read the class … this handler extends, so its operations are missing. List them in frond.config.ts under operations:.",[56,481,482],{},[41,483,199],{},[36,485,486,491,493,496],{},[56,487,488],{},[41,489,490],{},"input-contract-ambiguous",[56,492,23],{},[56,494,495],{},"Fougere cannot tell which parameter of … is its input: …. Declare it in frond.config.ts: operations: { '…': { input } }.",[56,497,498],{},[41,499,199],{},[36,501,502,507,509,512],{},[56,503,504],{},[41,505,506],{},"many-without-reference",[56,508,23],{},[56,510,511],{},"….… is many(…), but no field of … points back to …. Add one on …: ref(…).",[56,513,514],{},[41,515,70],{},[36,517,518,523,525,528],{},[56,519,520],{},[41,521,522],{},"on-delete-null-refused",[56,524,23],{},[56,526,527],{},"….… has onDelete: 'set null', but it cannot be null. Wrap it in optional(), or use onDelete: 'cascade'.",[56,529,530],{},[41,531,70],{},[36,533,534,539,541,544],{},[56,535,536],{},[41,537,538],{},"operation-binding-invalid",[56,540,23],{},[56,542,543],{},"The binding of ….… must name each parameter once. ……",[56,545,546],{},[41,547,70],{},[36,549,550,555,557,560],{},[56,551,552],{},[41,553,554],{},"operation-method-unresolved",[56,556,23],{},[56,558,559],{},"….… points to ….…, which does not exist.",[56,561,562],{},[41,563,70],{},[36,565,566,571,573,576],{},[56,567,568],{},[41,569,570],{},"operation-output-not-data",[56,572,23],{},[56,574,575],{},"…() returns …, which has methods, and an operation returns plain data. Return an entity, or the plain values you need.",[56,577,578],{},[41,579,70],{},[36,581,582,587,589,592],{},[56,583,584],{},[41,585,586],{},"operation-override-unaddressed",[56,588,23],{},[56,590,591],{},"—",[56,593,594],{},[41,595,70],{},[36,597,598,603,605,608],{},[56,599,600],{},[41,601,602],{},"operation-unbound",[56,604,23],{},[56,606,607],{},"….… takes … parameter(s), and nothing says where each comes from. Give it a binding.",[56,609,610],{},[41,611,70],{},[36,613,614,619,621,624],{},[56,615,616],{},[41,617,618],{},"operation-unstated",[56,620,27],{},[56,622,623],{},"….… is public but not in fronds.ts, so the app starts without it. Add it: operations: { …: { params: { … }, output: … } }, or make the method private.",[56,625,626],{},[41,627,272],{},[36,629,630,635,637,640],{},[56,631,632],{},[41,633,634],{},"operation-without-method",[56,636,23],{},[56,638,639],{},"….… is listed as an operation, but … has no method ….",[56,641,642],{},[41,643,70],{},[36,645,646,651,653,656],{},[56,647,648],{},[41,649,650],{},"output-contract-ambiguous",[56,652,23],{},[56,654,655],{},"Fougere cannot tell which view … answers through: …. Write one operation per type, or declare it in frond.config.ts: operations: { '…': { output } }.",[56,657,658],{},[41,659,199],{},[36,661,662,667,669,672],{},[56,663,664],{},[41,665,666],{},"parameter-binding-ambiguous",[56,668,23],{},[56,670,671],{},"Several parameters of ….… could take the request body: …. Give it a binding that says which.",[56,673,674],{},[41,675,70],{},[36,677,678,683,685,688],{},[56,679,680],{},[41,681,682],{},"parameter-binding-unknown",[56,684,23],{},[56,686,687],{},"Fougere cannot tell where …: … of ….… comes from. Type it as an entity or a view of one, a primitive, a Fact\u003C…>, or a type a collector of this frond provides.",[56,689,690],{},[41,691,70],{},[36,693,694,699,701,704],{},[56,695,696],{},[41,697,698],{},"pipes-not-owned",[56,700,23],{},[56,702,703],{},"The frond '…' gives an order for …, but … is declared in another frond. Move pipes: to the frond.config.ts of that frond.",[56,705,706],{},[41,707,70],{},[36,709,710,715,717,720],{},[56,711,712],{},[41,713,714],{},"pipes-unlisted",[56,716,23],{},[56,718,719],{},"… … …, but pipes: for … lists only …. Add … to pipes:, or make it take Fact\u003C…> if it only reads.",[56,721,722],{},[41,723,70],{},[36,725,726,731,733,740],{},[56,727,728],{},[41,729,730],{},"pipes-unordered",[56,732,23],{},[56,734,735,736,739],{},"… … change …, in no set order. Give the order in frond.config.ts of the frond that owns …: pipes: { …: ",[737,738,162],"span",{}," }. Or, if only one of them changes it, make the others take Fact\u003C…> instead.",[56,741,742],{},[41,743,70],{},[36,745,746,751,753,755],{},[56,747,748],{},[41,749,750],{},"port-implemented-not-extended",[56,752,27],{},[56,754,162],{},[56,756,757],{},[41,758,199],{},[36,760,761,766,768,771],{},[56,762,763],{},[41,764,765],{},"port-implemented-twice",[56,767,23],{},[56,769,770],{},"… both extend …. Pick one in fougere.config.ts: ports: { …: '…' }.",[56,772,773],{},[41,774,70],{},[36,776,777,782,784,787],{},[56,778,779],{},[41,780,781],{},"port-key-taken",[56,783,23],{},[56,785,786],{},"… answers … in every frond, so no class of the frond may be called that. Rename the class.",[56,788,789],{},[41,790,70],{},[36,792,793,798,800,803],{},[56,794,795],{},[41,796,797],{},"port-not-extended",[56,799,23],{},[56,801,802],{},"No class … extends or implements …. These do: ….",[56,804,805],{},[41,806,70],{},[36,808,809,814,816,822],{},[56,810,811],{},[41,812,813],{},"port-wrapped-twice",[56,815,23],{},[56,817,818,819,821],{},"… both wrap …. Give the order in fougere.config.ts, outermost first: ports: { …: ",[737,820,162],{}," }.",[56,823,824],{},[41,825,70],{},[36,827,828,833,835,841],{},[56,829,830],{},[41,831,832],{},"presenter-field-not-page",[56,834,23],{},[56,836,837,838,840],{},"…(…) is a computed field: it receives all the rows of a page and returns one value per row. Declare …(…: …",[737,839],{},") and return an array of the same length.",[56,842,843],{},[41,844,199],{},[36,846,847,852,854,857],{},[56,848,849],{},[41,850,851],{},"presenter-field-twice",[56,853,23],{},[56,855,856],{},"… and … both compute … for …. Keep it in one of them.",[56,858,859],{},[41,860,70],{},[36,862,863,868,870,873],{},[56,864,865],{},[41,866,867],{},"provider-name-taken",[56,869,23],{},[56,871,872],{},"Two classes are named …, here and in …. Rename one.",[56,874,875],{},[41,876,70],{},[36,878,879,884,886,889],{},[56,880,881],{},[41,882,883],{},"repository-twice",[56,885,23],{},[56,887,888],{},"… both extend the repository … answers, and one key has one answer. Keep one; the other may ask for it.",[56,890,891],{},[41,892,70],{},[36,894,895,900,902,905],{},[56,896,897],{},[41,898,899],{},"rows-as-value",[56,901,23],{},[56,903,904],{},"… asks for … as one value, and … is held as rows. Ask for its repository, or list '…' in the values: of a source.",[56,906,907],{},[41,908,70],{},[36,910,911,916,918,921],{},[56,912,913],{},[41,914,915],{},"seam-not-wrapped",[56,917,23],{},[56,919,920],{},"… extends … but takes no …. To wrap it, take it: constructor(private inner: …). To keep rows somewhere new, register a source type instead (Sources.register).",[56,922,923],{},[41,924,70],{},[36,926,927,932,934,937],{},[56,928,929],{},[41,930,931],{},"source-missing",[56,933,23],{},[56,935,936],{},"… lives in no source: every entry of sources: lists its rows, so none holds the rest. Add '…' to the rows: of one, or give one source no rows: list.",[56,938,939],{},[41,940,70],{},[36,942,943,948,950,964],{},[56,944,945],{},[41,946,947],{},"state-without-async-context",[56,949,27],{},[56,951,952,955,956,959,960,963],{},[41,953,954],{},"state:"," keeps what callers write, and this Worker has no ",[41,957,958],{},"nodejs_compat",", so every ",[41,961,962],{},"state.set"," is refused. Add \"nodejs_compat\" to compatibility_flags.",[56,965,966],{},[41,967,272],{},[36,969,970,975,977,980],{},[56,971,972],{},[41,973,974],{},"stated-binding-drifted",[56,976,27],{},[56,978,979],{},"frond.config.ts binds … on ….…, which has no such parameter (it has …). Fix the names in frond.config.ts.",[56,981,982],{},[41,983,70],{},[36,985,986,991,993,996],{},[56,987,988],{},[41,989,990],{},"storage-outside-repository",[56,992,23],{},[56,994,995],{},"… asks for …. Ask for the repository instead: constructor(private …: Repository\u003C…>) {}.",[56,997,998],{},[41,999,70],{},[36,1001,1002,1007,1009,1019],{},[56,1003,1004],{},[41,1005,1006],{},"super-linear-pattern",[56,1008,27],{},[56,1010,1011,1012,1015,1016,267],{},"has ",[41,1013,1014],{},"pattern: …",", a nested repetition that can take seconds to check on some inputs and block the server. Rewrite the repeated group, or limit the field with ",[41,1017,1018],{},"max",[56,1020,1021],{},[41,1022,272],{},[36,1024,1025,1030,1032,1035],{},[56,1026,1027],{},[41,1028,1029],{},"table-contradicted",[56,1031,23],{},[56,1033,1034],{},"The fronds '…' and '…' both declare ….…, differently. They are two views of one table, and one column has one shape: declare … the same way in both, or leave it out of one.",[56,1036,1037],{},[41,1038,70],{},[36,1040,1041,1046,1048,1051],{},[56,1042,1043],{},[41,1044,1045],{},"term-missing",[56,1047,23],{},[56,1049,1050],{},"….… uses the … '…', which is not defined. Export it from ….",[56,1052,1053],{},[41,1054,70],{},[36,1056,1057,1062,1064,1070],{},[56,1058,1059],{},[41,1060,1061],{},"unknown-adapter",[56,1063,27],{},[56,1065,1011,1066,1069],{},[41,1067,1068],{},"adapters: { … }",", but no installed adapter is named … (installed: …). Check the spelling, or add the dependency.",[56,1071,1072],{},[41,1073,272],{},[36,1075,1076,1081,1083,1086],{},[56,1077,1078],{},[41,1079,1080],{},"value-as-rows",[56,1082,23],{},[56,1084,1085],{},"… reaches … as rows, and … is held as one value. Ask for the value itself: constructor(private …: …) {}.",[56,1087,1088],{},[41,1089,70],{},{"title":1091,"searchDepth":1092,"depth":1092,"links":1093},"",2,[],"Every code a boot, the scan or fougere check can raise, and what it says.","md",null,{},true,"\u002Freference\u002Fdiagnostics",{"title":8,"description":1094},"reference\u002F11.diagnostics","8yVmpMuiHyiagwGq27yeh5JU5ZfscEa4mgIHza3qYa8",[1104,1109,1114,1119,1124,1129,1134,1139,1144,1149,1154,1155,1160,1165,1170,1175,1180,1185,1190,1195,1200,1205,1210,1214,1218,1223,1227,1232,1237,1242,1247,1252,1257,1262,1267,1272,1277,1282,1287,1292,1297,1302,1307,1312,1317],{"path":1105,"title":1106,"description":1107,"stem":1108},"\u002Freference\u002Fcli","CLI","fougere new, serve, call, sync, graph — composing a workspace, hosting one frond, invoking an operation from a shell.","reference\u002F01.cli",{"path":1110,"title":1111,"description":1112,"stem":1113},"\u002Freference\u002Ferrors","Error codes","Every code an operation can refuse with, and its HTTP status.","reference\u002F02.errors",{"path":1115,"title":1116,"description":1117,"stem":1118},"\u002Freference\u002Fconfig","fougere.config.ts","Every key the app config admits, and which package answers each one.","reference\u002F03.config",{"path":1120,"title":1121,"description":1122,"stem":1123},"\u002Freference\u002Ffrond-config","frond.config.ts","Every key a frond's own config admits.","reference\u002F04.frond-config",{"path":1125,"title":1126,"description":1127,"stem":1128},"\u002Freference\u002Fsources","Source types","Every type an entry of sources: may name, and the keys it admits.","reference\u002F05.sources",{"path":1130,"title":1131,"description":1132,"stem":1133},"\u002Freference\u002Fprotocols","Protocols","What protocols: may serve, and what each admits.","reference\u002F06.protocols",{"path":1135,"title":1136,"description":1137,"stem":1138},"\u002Freference\u002Fstates","State keepers","How state: may keep a caller's values.","reference\u002F07.states",{"path":1140,"title":1141,"description":1142,"stem":1143},"\u002Freference\u002Fforms","Forms","The types a frond is written with — each one read by the scan.","reference\u002F08.forms",{"path":1145,"title":1146,"description":1147,"stem":1148},"\u002Freference\u002Fports","Ports Fougere opens","The classes you stand in front of, or extend, to change what the framework does.","reference\u002F09.ports",{"path":1150,"title":1151,"description":1152,"stem":1153},"\u002Freference\u002Finterfaces","Interfaces to extend","The empty interfaces a package augments with declare module, and who augments each.","reference\u002F10.interfaces",{"path":1099,"title":8,"description":1094,"stem":1101},{"path":1156,"title":1157,"description":1158,"stem":1159},"\u002Freference\u002Fpackages\u002Fadapter-duckdb","@fougere\u002Fadapter-duckdb","Read across an app's sources — one SQL query over what DuckDB can attach.","reference\u002Fpackages\u002Fadapter-duckdb",{"path":1161,"title":1162,"description":1163,"stem":1164},"\u002Freference\u002Fpackages\u002Fadapter-env","@fougere\u002Fadapter-env","The process environment as a source — MEILI_URL read as Meili's url, judged at boot.","reference\u002Fpackages\u002Fadapter-env",{"path":1166,"title":1167,"description":1168,"stem":1169},"\u002Freference\u002Fpackages\u002Fadapter-file","@fougere\u002Fadapter-file","Rows as files — one JSON or YAML file per row, in a directory per entity.","reference\u002Fpackages\u002Fadapter-file",{"path":1171,"title":1172,"description":1173,"stem":1174},"\u002Freference\u002Fpackages\u002Fadapter-graphql","@fougere\u002Fadapter-graphql","Entity → GraphQL types, inputs and CRUD, through Pothos.","reference\u002Fpackages\u002Fadapter-graphql",{"path":1176,"title":1177,"description":1178,"stem":1179},"\u002Freference\u002Fpackages\u002Fadapter-memory","@fougere\u002Fadapter-memory","Rows in a Map — the source a first run meets, and the one that ships no driver.","reference\u002Fpackages\u002Fadapter-memory",{"path":1181,"title":1182,"description":1183,"stem":1184},"\u002Freference\u002Fpackages\u002Fadapter-rest","@fougere\u002Fadapter-rest","Entity → REST routes.","reference\u002Fpackages\u002Fadapter-rest",{"path":1186,"title":1187,"description":1188,"stem":1189},"\u002Freference\u002Fpackages\u002Fadapter-sql","@fougere\u002Fadapter-sql","Entity → SQL tables through Kysely (SQLite, PostgreSQL, MySQL, SQL Server).","reference\u002Fpackages\u002Fadapter-sql",{"path":1191,"title":1192,"description":1193,"stem":1194},"\u002Freference\u002Fpackages\u002Fadmin","@fougere\u002Fadmin","A back-office derived from what the app already says it hosts — a react-admin DataProvider over the Fougere wire.","reference\u002Fpackages\u002Fadmin",{"path":1196,"title":1197,"description":1198,"stem":1199},"\u002Freference\u002Fpackages\u002Fapp","@fougere\u002Fapp","The host-independent half of a Fougere app: boot, call envelope, REST table, form contract.","reference\u002Fpackages\u002Fapp",{"path":1201,"title":1202,"description":1203,"stem":1204},"\u002Freference\u002Fpackages\u002Fauth-better","@fougere\u002Fauth-better","Fougere's auth — a translation layer onto better-auth.","reference\u002Fpackages\u002Fauth-better",{"path":1206,"title":1207,"description":1208,"stem":1209},"\u002Freference\u002Fpackages\u002Fcalls","@fougere\u002Fcalls","Optional call log for Fougere: a bounded ring of every dispatch, served as an rpc operation. Read it with `fougere devtools`.","reference\u002Fpackages\u002Fcalls",{"path":1211,"title":272,"description":1212,"stem":1213},"\u002Freference\u002Fpackages\u002Fcli","The Fougere CLI — compose a workspace, serve a frond, call an operation.","reference\u002Fpackages\u002Fcli",{"path":1215,"title":199,"description":1216,"stem":1217},"\u002Freference\u002Fpackages\u002Fcompiler","The scan: Fougere reading a project's source to produce the descriptors core boots from. Needs a filesystem and a TypeScript program.","reference\u002Fpackages\u002Fcompiler",{"path":1219,"title":1220,"description":1221,"stem":1222},"\u002Freference\u002Fpackages\u002Fcontainer","@fougere\u002Fcontainer","Fougere's DI container: resolution by type, wired from the AST scan. Zero dependencies.","reference\u002Fpackages\u002Fcontainer",{"path":1224,"title":70,"description":1225,"stem":1226},"\u002Freference\u002Fpackages\u002Fcore","The core — scan, call contract, façades, remote stand-ins.","reference\u002Fpackages\u002Fcore",{"path":1228,"title":1229,"description":1230,"stem":1231},"\u002Freference\u002Fpackages\u002Fdecorators","@fougere\u002Fdecorators","Configuration sugar (@config) — declarative, never hidden runtime.","reference\u002Fpackages\u002Fdecorators",{"path":1233,"title":1234,"description":1235,"stem":1236},"\u002Freference\u002Fpackages\u002Fdefaults","@fougere\u002Fdefaults","The conventional boot of a Fougere app — the one place storage is wired.","reference\u002Fpackages\u002Fdefaults",{"path":1238,"title":1239,"description":1240,"stem":1241},"\u002Freference\u002Fpackages\u002Fgraph","@fougere\u002Fgraph","Fougere's graph: a labelled directed multigraph, and the four questions asked of it — order, cycles, components, reach. Zero dependencies.","reference\u002Fpackages\u002Fgraph",{"path":1243,"title":1244,"description":1245,"stem":1246},"\u002Freference\u002Fpackages\u002Fhttp","@fougere\u002Fhttp","The words every HTTP door speaks — a method, an answer, the headers a state travels in.","reference\u002Fpackages\u002Fhttp",{"path":1248,"title":1249,"description":1250,"stem":1251},"\u002Freference\u002Fpackages\u002Flog","@fougere\u002Flog","Logging for Fougere: two lines for every call, in every process, and a file destination for the lines.","reference\u002Fpackages\u002Flog",{"path":1253,"title":1254,"description":1255,"stem":1256},"\u002Freference\u002Fpackages\u002Fnext","@fougere\u002Fnext","The Next.js adapter: mounting, and the one import that is genuinely Next.","reference\u002Fpackages\u002Fnext",{"path":1258,"title":1259,"description":1260,"stem":1261},"\u002Freference\u002Fpackages\u002Fnuxt","@fougere\u002Fnuxt","The Nuxt module: Fougere's client primitives and server surface.","reference\u002Fpackages\u002Fnuxt",{"path":1263,"title":1264,"description":1265,"stem":1266},"\u002Freference\u002Fpackages\u002Fobservability","@fougere\u002Fobservability","Optional observability for Fougere: one span per operation, W3C Trace Context across any transport.","reference\u002Fpackages\u002Fobservability",{"path":1268,"title":1269,"description":1270,"stem":1271},"\u002Freference\u002Fpackages\u002Foclif","@fougere\u002Foclif","A frond's operations, as a terminal: topics, flags and help derived from what it declares.","reference\u002Fpackages\u002Foclif",{"path":1273,"title":1274,"description":1275,"stem":1276},"\u002Freference\u002Fpackages\u002Freact","@fougere\u002Freact","Fougere's four primitives as React hooks — host-independent.","reference\u002Fpackages\u002Freact",{"path":1278,"title":1279,"description":1280,"stem":1281},"\u002Freference\u002Fpackages\u002Fregistry","@fougere\u002Fregistry","Fougere's registry: one answer per name, refused when a second one arrives, and a reload that says it replaces. Zero dependencies.","reference\u002Fpackages\u002Fregistry",{"path":1283,"title":1284,"description":1285,"stem":1286},"\u002Freference\u002Fpackages\u002Fschema","@fougere\u002Fschema","The entity and its 4 axes — shape, role, lifecycle, boundary. Subject-owned judgments, edge-safe.","reference\u002Fpackages\u002Fschema",{"path":1288,"title":1289,"description":1290,"stem":1291},"\u002Freference\u002Fpackages\u002Fstate-cookie","@fougere\u002Fstate-cookie","A caller's state kept in a cookie — what `state: { cart: { cookie: {} } }` names, signed by core, carried by every HTTP door.","reference\u002Fpackages\u002Fstate-cookie",{"path":1293,"title":1294,"description":1295,"stem":1296},"\u002Freference\u002Fpackages\u002Fstate-session","@fougere\u002Fstate-session","A caller's state kept in a session — what `state: { cart: { session: {} } }` names: one cookie holds a reference, the values a row in a source.","reference\u002Fpackages\u002Fstate-session",{"path":1298,"title":1299,"description":1300,"stem":1301},"\u002Freference\u002Fpackages\u002Fsvelte","@fougere\u002Fsvelte","Fougere's four primitives as Svelte stores — host-independent.","reference\u002Fpackages\u002Fsvelte",{"path":1303,"title":1304,"description":1305,"stem":1306},"\u002Freference\u002Fpackages\u002Ftesting","@fougere\u002Ftesting","Tests derived from the declaration — cases, stubs and a gradient of realities.","reference\u002Fpackages\u002Ftesting",{"path":1308,"title":1309,"description":1310,"stem":1311},"\u002Freference\u002Fpackages\u002Ftransport-http","@fougere\u002Ftransport-http","The call contract on the wire, in JSON-RPC 2.0 (server + client).","reference\u002Fpackages\u002Ftransport-http",{"path":1313,"title":1314,"description":1315,"stem":1316},"\u002Freference\u002Fpackages\u002Fvite","@fougere\u002Fvite","The Vite plugin: what any Vite-built host must know to run a Fougere app.","reference\u002Fpackages\u002Fvite",{"path":1318,"title":1319,"description":1320,"stem":1321},"\u002Freference\u002Fpackages\u002Fworkflow","@fougere\u002Fworkflow","A release that goes to the end: the journal is three entities, the sweep is an operation, and a shared journal is one line of remotes:.","reference\u002Fpackages\u002Fworkflow",1794396612360]