[{"data":1,"prerenderedAt":468},["ShallowReactive",2],{"fougere:post.list:{}":3,"reference:\u002Freference\u002Ferrors":6,"reference-pages":246},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":237,"extension":238,"file":239,"meta":240,"navigation":241,"path":242,"seo":243,"stem":244,"__hash__":245},"reference\u002Freference\u002F02.errors.md","Error codes",{"type":10,"value":11,"toc":228},"minimark",[12,16,21,149,204,211,217],[13,14,8],"h1",{"id":15},"error-codes",[17,18,20],"h2",{"id":19},"the-codes","The codes",[22,23,24,40],"table",{},[25,26,27],"thead",{},[28,29,30,34,37],"tr",{},[31,32,33],"th",{},"Code",[31,35,36],{},"Meaning",[31,38,39],{},"HTTP projection",[41,42,43,65,78,91,104,123,136],"tbody",{},[28,44,45,52,62],{},[46,47,48],"td",{},[49,50,51],"code",{},"VALIDATION_FAILED",[46,53,54,55,58,59],{},"invalid input — ",[49,56,57],{},"details"," contains per-field ",[49,60,61],{},"{ path, message }",[46,63,64],{},"422",[28,66,67,72,75],{},[46,68,69],{},[49,70,71],{},"UNAUTHORIZED",[46,73,74],{},"no identity",[46,76,77],{},"401",[28,79,80,85,88],{},[46,81,82],{},[49,83,84],{},"FORBIDDEN",[46,86,87],{},"identity present, right absent",[46,89,90],{},"403",[28,92,93,98,101],{},[46,94,95],{},[49,96,97],{},"NOT_FOUND",[46,99,100],{},"designated thing does not exist",[46,102,103],{},"404",[28,105,106,111,120],{},[46,107,108],{},[49,109,110],{},"CONFLICT",[46,112,113,114,119],{},"state refuses the transition (",[115,116,118],"a",{"href":117},"\u002Fdocs\u002Fconcepts\u002Fhandler#a-state-changes-through-an-operation","already published",", slug taken)",[46,121,122],{},"409",[28,124,125,130,133],{},[46,126,127],{},[49,128,129],{},"SERVICE_UNAVAILABLE",[46,131,132],{},"a remote frond is unreachable",[46,134,135],{},"503",[28,137,138,143,146],{},[46,139,140],{},[49,141,142],{},"INTERNAL_ERROR",[46,144,145],{},"anything unexpected",[46,147,148],{},"500",[150,151,152,155,156,159,160,163,164,167,168,171,172,175,176,179,180,183,184,187,188,191,192,195,196,199,200,203],"p",{},[49,153,154],{},"ErrorCode"," carries twelve more, each projecting to the HTTP status of the same name:\n",[49,157,158],{},"BAD_REQUEST"," 400, ",[49,161,162],{},"METHOD_NOT_ALLOWED"," 405, ",[49,165,166],{},"REQUEST_TIMEOUT"," 408, ",[49,169,170],{},"GONE"," 410,\n",[49,173,174],{},"PRECONDITION_FAILED"," 412, ",[49,177,178],{},"PAYLOAD_TOO_LARGE"," 413, ",[49,181,182],{},"UNPROCESSABLE_ENTITY"," 422,\n",[49,185,186],{},"LOCKED"," 423, ",[49,189,190],{},"TOO_MANY_REQUESTS"," 429, ",[49,193,194],{},"NOT_IMPLEMENTED"," 501, ",[49,197,198],{},"BAD_GATEWAY"," 502,\n",[49,201,202],{},"GATEWAY_TIMEOUT"," 504. The seven above are the ones a domain reaches for; these exist so a\nsurface never has to invent a status the vocabulary could carry.",[205,206,208,210],"h3",{"id":207},"internal_error-is-the-one-code-whose-message-never-leaves",[49,209,142],{}," is the one code whose message never leaves",[150,212,213,214,216],{},"The others were written for the caller and travel whole. An ",[49,215,142],{}," was not:\nit may quote a path, a query or a row, so it is replaced by a constant before leaving the\nprocess.",[150,218,219,220,224,225,227],{},"It is ",[221,222,223],"strong",{},"logged in the same place"," — masking and recording live in one function, so the\nsentence exists exactly once, on the server. An operator asking \"why this 500\" finds it in\nthe logs with its cause, its address and its operation; an attacker never sees it. If your\nmessage must reach the caller, then it is not an ",[49,226,142],{},": give it its code.",{"title":229,"searchDepth":230,"depth":230,"links":231},"",2,[232],{"id":19,"depth":230,"text":20,"children":233},[234],{"id":207,"depth":235,"text":236},3,"INTERNAL_ERROR is the one code whose message never leaves","Every code an operation can refuse with, and its HTTP status.","md",null,{},true,"\u002Freference\u002Ferrors",{"title":8,"description":237},"reference\u002F02.errors","8NpGlf6ecNBkWi-s0ZaNcBW06sc7KQxXH4UJpR7DwTA",[247,252,253,258,263,268,273,278,283,288,293,298,303,308,313,318,323,328,333,338,343,348,353,358,363,368,373,378,383,388,393,398,403,408,413,418,423,428,433,438,443,448,453,458,463],{"path":248,"title":249,"description":250,"stem":251},"\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":242,"title":8,"description":237,"stem":244},{"path":254,"title":255,"description":256,"stem":257},"\u002Freference\u002Fconfig","fougere.config.ts","Every key the app config admits, and which package answers each one.","reference\u002F03.config",{"path":259,"title":260,"description":261,"stem":262},"\u002Freference\u002Ffrond-config","frond.config.ts","Every key a frond's own config admits.","reference\u002F04.frond-config",{"path":264,"title":265,"description":266,"stem":267},"\u002Freference\u002Fsources","Source types","Every type an entry of sources: may name, and the keys it admits.","reference\u002F05.sources",{"path":269,"title":270,"description":271,"stem":272},"\u002Freference\u002Fprotocols","Protocols","What protocols: may serve, and what each admits.","reference\u002F06.protocols",{"path":274,"title":275,"description":276,"stem":277},"\u002Freference\u002Fstates","State keepers","How state: may keep a caller's values.","reference\u002F07.states",{"path":279,"title":280,"description":281,"stem":282},"\u002Freference\u002Fforms","Forms","The types a frond is written with — each one read by the scan.","reference\u002F08.forms",{"path":284,"title":285,"description":286,"stem":287},"\u002Freference\u002Fports","Ports Fougere opens","The classes you stand in front of, or extend, to change what the framework does.","reference\u002F09.ports",{"path":289,"title":290,"description":291,"stem":292},"\u002Freference\u002Finterfaces","Interfaces to extend","The empty interfaces a package augments with declare module, and who augments each.","reference\u002F10.interfaces",{"path":294,"title":295,"description":296,"stem":297},"\u002Freference\u002Fdiagnostics","Boot and check diagnostics","Every code a boot, the scan or fougere check can raise, and what it says.","reference\u002F11.diagnostics",{"path":299,"title":300,"description":301,"stem":302},"\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":304,"title":305,"description":306,"stem":307},"\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":309,"title":310,"description":311,"stem":312},"\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":314,"title":315,"description":316,"stem":317},"\u002Freference\u002Fpackages\u002Fadapter-graphql","@fougere\u002Fadapter-graphql","Entity → GraphQL types, inputs and CRUD, through Pothos.","reference\u002Fpackages\u002Fadapter-graphql",{"path":319,"title":320,"description":321,"stem":322},"\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":324,"title":325,"description":326,"stem":327},"\u002Freference\u002Fpackages\u002Fadapter-rest","@fougere\u002Fadapter-rest","Entity → REST routes.","reference\u002Fpackages\u002Fadapter-rest",{"path":329,"title":330,"description":331,"stem":332},"\u002Freference\u002Fpackages\u002Fadapter-sql","@fougere\u002Fadapter-sql","Entity → SQL tables through Kysely (SQLite, PostgreSQL, MySQL, SQL Server).","reference\u002Fpackages\u002Fadapter-sql",{"path":334,"title":335,"description":336,"stem":337},"\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":339,"title":340,"description":341,"stem":342},"\u002Freference\u002Fpackages\u002Fapp","@fougere\u002Fapp","The host-independent half of a Fougere app: boot, call envelope, REST table, form contract.","reference\u002Fpackages\u002Fapp",{"path":344,"title":345,"description":346,"stem":347},"\u002Freference\u002Fpackages\u002Fauth-better","@fougere\u002Fauth-better","Fougere's auth — a translation layer onto better-auth.","reference\u002Fpackages\u002Fauth-better",{"path":349,"title":350,"description":351,"stem":352},"\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":354,"title":355,"description":356,"stem":357},"\u002Freference\u002Fpackages\u002Fcli","@fougere\u002Fcli","The Fougere CLI — compose a workspace, serve a frond, call an operation.","reference\u002Fpackages\u002Fcli",{"path":359,"title":360,"description":361,"stem":362},"\u002Freference\u002Fpackages\u002Fcompiler","@fougere\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":364,"title":365,"description":366,"stem":367},"\u002Freference\u002Fpackages\u002Fcontainer","@fougere\u002Fcontainer","Fougere's DI container: resolution by type, wired from the AST scan. Zero dependencies.","reference\u002Fpackages\u002Fcontainer",{"path":369,"title":370,"description":371,"stem":372},"\u002Freference\u002Fpackages\u002Fcore","@fougere\u002Fcore","The core — scan, call contract, façades, remote stand-ins.","reference\u002Fpackages\u002Fcore",{"path":374,"title":375,"description":376,"stem":377},"\u002Freference\u002Fpackages\u002Fdecorators","@fougere\u002Fdecorators","Configuration sugar (@config) — declarative, never hidden runtime.","reference\u002Fpackages\u002Fdecorators",{"path":379,"title":380,"description":381,"stem":382},"\u002Freference\u002Fpackages\u002Fdefaults","@fougere\u002Fdefaults","The conventional boot of a Fougere app — the one place storage is wired.","reference\u002Fpackages\u002Fdefaults",{"path":384,"title":385,"description":386,"stem":387},"\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":389,"title":390,"description":391,"stem":392},"\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":394,"title":395,"description":396,"stem":397},"\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":399,"title":400,"description":401,"stem":402},"\u002Freference\u002Fpackages\u002Fnext","@fougere\u002Fnext","The Next.js adapter: mounting, and the one import that is genuinely Next.","reference\u002Fpackages\u002Fnext",{"path":404,"title":405,"description":406,"stem":407},"\u002Freference\u002Fpackages\u002Fnuxt","@fougere\u002Fnuxt","The Nuxt module: Fougere's client primitives and server surface.","reference\u002Fpackages\u002Fnuxt",{"path":409,"title":410,"description":411,"stem":412},"\u002Freference\u002Fpackages\u002Fobservability","@fougere\u002Fobservability","Optional observability for Fougere: one span per operation, W3C Trace Context across any transport.","reference\u002Fpackages\u002Fobservability",{"path":414,"title":415,"description":416,"stem":417},"\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":419,"title":420,"description":421,"stem":422},"\u002Freference\u002Fpackages\u002Freact","@fougere\u002Freact","Fougere's four primitives as React hooks — host-independent.","reference\u002Fpackages\u002Freact",{"path":424,"title":425,"description":426,"stem":427},"\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":429,"title":430,"description":431,"stem":432},"\u002Freference\u002Fpackages\u002Fschema","@fougere\u002Fschema","The entity and its 4 axes — shape, role, lifecycle, boundary. Subject-owned judgments, edge-safe.","reference\u002Fpackages\u002Fschema",{"path":434,"title":435,"description":436,"stem":437},"\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":439,"title":440,"description":441,"stem":442},"\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":444,"title":445,"description":446,"stem":447},"\u002Freference\u002Fpackages\u002Fsvelte","@fougere\u002Fsvelte","Fougere's four primitives as Svelte stores — host-independent.","reference\u002Fpackages\u002Fsvelte",{"path":449,"title":450,"description":451,"stem":452},"\u002Freference\u002Fpackages\u002Ftesting","@fougere\u002Ftesting","Tests derived from the declaration — cases, stubs and a gradient of realities.","reference\u002Fpackages\u002Ftesting",{"path":454,"title":455,"description":456,"stem":457},"\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":459,"title":460,"description":461,"stem":462},"\u002Freference\u002Fpackages\u002Fvite","@fougere\u002Fvite","The Vite plugin: what any Vite-built host must know to run a Fougere app.","reference\u002Fpackages\u002Fvite",{"path":464,"title":465,"description":466,"stem":467},"\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",1794396612306]