[{"data":1,"prerenderedAt":552},["ShallowReactive",2],{"fougere:post.list:{}":3,"docs:\u002Fdocs\u002Frun\u002Fdev-panel":6,"docs-uses":239,"docs-nav":414},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":226,"extension":227,"forms":228,"kind":229,"meta":230,"navigation":231,"path":232,"seo":233,"stem":234,"step":235,"uses":236,"__hash__":238},"docs\u002Fdocs\u002F6.run\u002F5.dev-panel.md","The dev panel",{"type":10,"value":11,"toc":223},"minimark",[12,21,31,116,178,193,219],[13,14,15,16,20],"p",{},"While you develop, you want to see every call the app answered — which operation, how long, what it refused, which statements it ran. ",[17,18,19],"code",{},"@fougere\u002Fcalls"," keeps that list.",[13,22,23,25,26,30],{},[17,24,19],{}," ",[27,28,29],"strong",{},"watches"," what this process dispatches, and takes part in none of it:",[32,33,37,66,83,100],"code-group",{"className":34,"sync":36},[35],"managers","pm",[38,39,45],"pre",{"className":40,"code":41,"filename":42,"language":43,"meta":44,"style":44},"language-bash shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","npm install -D @fougere\u002Fcalls\n","npm","bash","",[17,46,47],{"__ignoreMap":44},[48,49,52,55,59,63],"span",{"class":50,"line":51},"line",1,[48,53,42],{"class":54},"sV8pK",[48,56,58],{"class":57},"sN-8n"," install",[48,60,62],{"class":61},"svHQO"," -D",[48,64,65],{"class":57}," @fougere\u002Fcalls\n",[38,67,70],{"className":40,"code":68,"filename":69,"language":43,"meta":44,"style":44},"pnpm add -D @fougere\u002Fcalls\n","pnpm",[17,71,72],{"__ignoreMap":44},[48,73,74,76,79,81],{"class":50,"line":51},[48,75,69],{"class":54},[48,77,78],{"class":57}," add",[48,80,62],{"class":61},[48,82,65],{"class":57},[38,84,87],{"className":40,"code":85,"filename":86,"language":43,"meta":44,"style":44},"bun add -d @fougere\u002Fcalls\n","bun",[17,88,89],{"__ignoreMap":44},[48,90,91,93,95,98],{"class":50,"line":51},[48,92,86],{"class":54},[48,94,78],{"class":57},[48,96,97],{"class":61}," -d",[48,99,65],{"class":57},[38,101,104],{"className":40,"code":102,"filename":103,"language":43,"meta":44,"style":44},"yarn add -D @fougere\u002Fcalls\n","yarn",[17,105,106],{"__ignoreMap":44},[48,107,108,110,112,114],{"class":50,"line":51},[48,109,103],{"class":54},[48,111,78],{"class":57},[48,113,62],{"class":61},[48,115,65],{"class":57},[38,117,121],{"className":118,"code":119,"language":120,"meta":44,"style":44},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","extensions: [calls({ max: 500, panel: true })],\n","ts",[17,122,123],{"__ignoreMap":44},[48,124,125,129,133,137,141,144,147,151,153,157,160,163,165,169,172,175],{"class":50,"line":51},[48,126,128],{"class":127},"sWI7z","extensions",[48,130,132],{"class":131},"s15xx",":",[48,134,136],{"class":135},"srlTG"," [",[48,138,140],{"class":139},"s4mR9","calls",[48,142,143],{"class":135},"(",[48,145,146],{"class":131},"{",[48,148,150],{"class":149},"sHtqg"," max",[48,152,132],{"class":131},[48,154,156],{"class":155},"s3dPA"," 500",[48,158,159],{"class":131},",",[48,161,162],{"class":149}," panel",[48,164,132],{"class":131},[48,166,168],{"class":167},"slmMI"," true",[48,170,171],{"class":131}," }",[48,173,174],{"class":135},")]",[48,176,177],{"class":131},",\n",[13,179,180,181,184,185,188,189,192],{},"It subscribes to ",[17,182,183],{},"app.observe"," — passive, and its own failure is swallowed — so it sees\nwhat a link around calls cannot: a call refused ",[27,186,187],{},"before"," any handler (an unknown route, an\nentity hosted elsewhere, a call arriving while the facade drains), and the route kind of\nevery call, so a local execution and a hop to another process read the same way. Beside\nthe calls it keeps a bounded ring of log lines, of errors, and — when\n",[17,190,191],{},"@fougere\u002Fadapter-sql"," is there — of the statements each call issued.",[13,194,195,196,199,200,203,204,211,212,215,216],{},"Nothing is stored and no port is opened unless ",[17,197,198],{},"panel"," says so. The ring is served as\n",[17,201,202],{},"rpc.calls",", and the reader is ",[205,206,208],"a",{"href":207},"\u002Freference\u002Fcli#fougere-devtools-what-the-running-apps-are-dispatching",[17,209,210],{},"fougere devtools","\nover ",[17,213,214],{},"\u002F_fougere\u002Fcall",", like any other consumer. An app that never installed it answers\n",[17,217,218],{},"Unknown rpc operation 'calls'. It serves discover.",[220,221,222],"style",{},"html pre.shiki code .sV8pK, html code.shiki .sV8pK{--shiki-light:#E2931D;--shiki-default:#C9B6EA;--shiki-dark:#FFCB6B}html pre.shiki code .sN-8n, html code.shiki .sN-8n{--shiki-light:#91B859;--shiki-default:#EE9F6B;--shiki-dark:#C3E88D}html pre.shiki code .svHQO, html code.shiki .svHQO{--shiki-light:#91B859;--shiki-default:#8FCF86;--shiki-dark:#C3E88D}html .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 .sWI7z, html code.shiki .sWI7z{--shiki-light:#E2931D;--shiki-default:#93CFC0;--shiki-dark:#FFCB6B}html pre.shiki code .s15xx, html code.shiki .s15xx{--shiki-light:#39ADB5;--shiki-default:#A3B0A5;--shiki-dark:#89DDFF}html pre.shiki code .srlTG, html code.shiki .srlTG{--shiki-light:#90A4AE;--shiki-default:#A3B0A5;--shiki-dark:#BABED8}html pre.shiki code .s4mR9, html code.shiki .s4mR9{--shiki-light:#6182B8;--shiki-default:#C9B6EA;--shiki-dark:#82AAFF}html pre.shiki code .sHtqg, html code.shiki .sHtqg{--shiki-light:#E53935;--shiki-default:#93CFC0;--shiki-dark:#F07178}html pre.shiki code .s3dPA, html code.shiki .s3dPA{--shiki-light:#F76D47;--shiki-default:#EE9F6B;--shiki-dark:#F78C6C}html pre.shiki code .slmMI, html code.shiki .slmMI{--shiki-light:#FF5370;--shiki-default:#EE9F6B;--shiki-dark:#FF9CAC}",{"title":44,"searchDepth":224,"depth":224,"links":225},2,[],"What this process dispatched, call by call.","md",[19],"task",{},true,"\u002Fdocs\u002Frun\u002Fdev-panel",{"title":8,"description":226},"docs\u002F6.run\u002F5.dev-panel",null,[237],"handler","ndtpefV36Jlrqz5UY5dr5yeO1YYS6EbWMtzo60cjhcs",[240,243,246,249,252,255,258,261,264,270,275,280,284,288,292,296,300,305,309,313,318,322,327,331,335,339,343,347,351,353,357,361,365,369,373,377,381,384,387,390,393,396,399,402,405,408,411],{"path":241,"title":242,"uses":235},"\u002Fdocs\u002Fconcepts\u002Fentity","Entity",{"path":244,"title":245,"uses":235},"\u002Fdocs\u002Fconcepts\u002Fhandler","Handler",{"path":247,"title":248,"uses":235},"\u002Fdocs\u002Fconcepts\u002Frepository","Repository",{"path":250,"title":251,"uses":235},"\u002Fdocs\u002Fconcepts\u002Ffrond","Frond",{"path":253,"title":254,"uses":235},"\u002Fdocs\u002Fconcepts\u002Ffacade","Facade",{"path":256,"title":257,"uses":235},"\u002Fdocs\u002Fconcepts\u002Ffact","Fact",{"path":259,"title":260,"uses":235},"\u002Fdocs\u002Fconcepts\u002Fport","Port",{"path":262,"title":263,"uses":235},"\u002Fdocs\u002Fconcepts\u002Fconfiguration","Configuration",{"path":265,"title":266,"uses":267},"\u002Fdocs\u002Faccess\u002Fauthentication","Authentication",[268,269],"port","frond",{"path":271,"title":272,"uses":273},"\u002Fdocs\u002Faccess\u002Fstate","Keep a caller's state",[274,237],"configuration",{"path":276,"title":277,"uses":278},"\u002Fdocs\u002Fdata\u002Fsql","SQLite or Postgres",[279,274],"entity",{"path":281,"title":282,"uses":283},"\u002Fdocs\u002Fdata\u002Fseveral-databases","Several databases",[274,279],{"path":285,"title":286,"uses":287},"\u002Fdocs\u002Fdata\u002Fcomputed-field","A computed field",[279,268],{"path":289,"title":290,"uses":291},"\u002Fdocs\u002Fdata\u002Fevolve","Evolve a schema",[279],{"path":293,"title":294,"uses":295},"\u002Fdocs\u002Fdata\u002Fseeds","Seed data",[279],{"path":297,"title":298,"uses":299},"\u002Fdocs\u002Fdata\u002Fvalues","Read settings and secrets",[279,274],{"path":301,"title":302,"uses":303},"\u002Fdocs\u002Fdata\u002Fmirror","Mirror a source you cannot query",[304],"repository",{"path":306,"title":307,"uses":308},"\u002Fdocs\u002Fdata\u002Ftogether","Two writes as one",[304],{"path":310,"title":311,"uses":312},"\u002Fdocs\u002Fbehaviour\u002Faround-every-call","Around every call",[268,269],{"path":314,"title":315,"uses":316},"\u002Fdocs\u002Fbehaviour\u002Ffinish-a-fact","Finish a fact",[317],"fact",{"path":319,"title":320,"uses":321},"\u002Fdocs\u002Fserve\u002Frest-graphql","REST, OpenAPI, GraphQL",[237,274],{"path":323,"title":324,"uses":325},"\u002Fdocs\u002Fserve\u002Fpages","Pages: queries and commands",[237,326],"facade",{"path":328,"title":329,"uses":330},"\u002Fdocs\u002Fserve\u002Fforms","A form",[279],{"path":332,"title":333,"uses":334},"\u002Fdocs\u002Fserve\u002Fadmin","An admin panel",[237],{"path":336,"title":337,"uses":338},"\u002Fdocs\u002Frun\u002Fdeploy","Deploy a split",[274,269],{"path":340,"title":341,"uses":342},"\u002Fdocs\u002Frun\u002Fsecure","Secure calls between processes",[274,269],{"path":344,"title":345,"uses":346},"\u002Fdocs\u002Frun\u002Flifecycle","Reload and shut down",[274],{"path":348,"title":349,"uses":350},"\u002Fdocs\u002Frun\u002Fobserve","Observe",[274,237],{"path":232,"title":8,"uses":352},[237],{"path":354,"title":355,"uses":356},"\u002Fdocs\u002Frun\u002Ftest","Test",[279,268],{"path":358,"title":359,"uses":360},"\u002Fdocs\u002Fadopt\u002Fnew-project","Start a project",[269,274],{"path":362,"title":363,"uses":364},"\u002Fdocs\u002Fadopt\u002Fexisting-app","Add Fougere to an existing app",[269,274],{"path":366,"title":367,"uses":368},"\u002Fdocs\u002Fadopt\u002Fbring-your-schema","Bring your schema",[279],{"path":370,"title":371,"uses":372},"\u002Fdocs\u002Fadopt\u002Fhosts","Pick a host",[274],{"path":374,"title":375,"uses":376},"\u002Fdocs\u002Fadopt\u002Fanother-repository","A frond from another repository",[326,269],{"path":378,"title":379,"uses":380},"\u002Fdocs\u002Fadopt\u002Fdemos","Demos",[],{"path":382,"title":383,"uses":235},"\u002Fdocs\u002Fextending\u002Fscan","How the scan reads a project",{"path":385,"title":386,"uses":235},"\u002Fdocs\u002Fextending\u002Fwithout-compiler","Boot without the compiler",{"path":388,"title":389,"uses":235},"\u002Fdocs\u002Fextending\u002Fboot","The boot, step by step",{"path":391,"title":392,"uses":235},"\u002Fdocs\u002Fextending\u002Fcard-and-wire","The card and the wire",{"path":394,"title":395,"uses":235},"\u002Fdocs\u002Fextending\u002Fextension-points","Registries and extension points",{"path":397,"title":398,"uses":235},"\u002Fdocs\u002Fextending\u002Fvocabulary","Teach a word",{"path":400,"title":401,"uses":235},"\u002Fdocs\u002Fextending\u002Fextensions","Run code at boot and shutdown",{"path":403,"title":404,"uses":235},"\u002Fdocs\u002Fextending\u002Fsource-adapter","Write a source adapter",{"path":406,"title":407,"uses":235},"\u002Fdocs\u002Fextending\u002Fsurface","Write a surface",{"path":409,"title":410,"uses":235},"\u002Fdocs\u002Fextending\u002Fforeign-frond","A frond in another language",{"path":412,"title":413,"uses":235},"\u002Fdocs","What is Fougere",[415],{"title":416,"path":412,"stem":417,"children":418,"page":-1},"Docs","docs",[419,421,442,451,472,481,494,510,527],{"title":413,"path":412,"stem":420},"docs\u002Findex",{"title":422,"path":423,"stem":424,"children":425,"page":5},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F1.concepts",[426,428,430,432,434,436,438,440],{"title":242,"path":241,"stem":427},"docs\u002F1.concepts\u002F1.entity",{"title":245,"path":244,"stem":429},"docs\u002F1.concepts\u002F2.handler",{"title":248,"path":247,"stem":431},"docs\u002F1.concepts\u002F3.repository",{"title":251,"path":250,"stem":433},"docs\u002F1.concepts\u002F4.frond",{"title":254,"path":253,"stem":435},"docs\u002F1.concepts\u002F5.facade",{"title":257,"path":256,"stem":437},"docs\u002F1.concepts\u002F6.fact",{"title":260,"path":259,"stem":439},"docs\u002F1.concepts\u002F7.port",{"title":263,"path":262,"stem":441},"docs\u002F1.concepts\u002F8.configuration",{"title":443,"path":444,"stem":445,"children":446,"page":5},"Access","\u002Fdocs\u002Faccess","docs\u002F2.access",[447,449],{"title":266,"path":265,"stem":448},"docs\u002F2.access\u002F1.authentication",{"title":272,"path":271,"stem":450},"docs\u002F2.access\u002F2.state",{"title":452,"path":453,"stem":454,"children":455,"page":5},"Data","\u002Fdocs\u002Fdata","docs\u002F3.data",[456,458,460,462,464,466,468,470],{"title":277,"path":276,"stem":457},"docs\u002F3.data\u002F1.sql",{"title":282,"path":281,"stem":459},"docs\u002F3.data\u002F2.several-databases",{"title":286,"path":285,"stem":461},"docs\u002F3.data\u002F3.computed-field",{"title":290,"path":289,"stem":463},"docs\u002F3.data\u002F4.evolve",{"title":294,"path":293,"stem":465},"docs\u002F3.data\u002F5.seeds",{"title":298,"path":297,"stem":467},"docs\u002F3.data\u002F6.values",{"title":302,"path":301,"stem":469},"docs\u002F3.data\u002F7.mirror",{"title":307,"path":306,"stem":471},"docs\u002F3.data\u002F8.together",{"title":473,"path":474,"stem":475,"children":476,"page":5},"Behaviour","\u002Fdocs\u002Fbehaviour","docs\u002F4.behaviour",[477,479],{"title":311,"path":310,"stem":478},"docs\u002F4.behaviour\u002F1.around-every-call",{"title":315,"path":314,"stem":480},"docs\u002F4.behaviour\u002F2.finish-a-fact",{"title":482,"path":483,"stem":484,"children":485,"page":5},"Serve","\u002Fdocs\u002Fserve","docs\u002F5.serve",[486,488,490,492],{"title":320,"path":319,"stem":487},"docs\u002F5.serve\u002F1.rest-graphql",{"title":324,"path":323,"stem":489},"docs\u002F5.serve\u002F2.pages",{"title":329,"path":328,"stem":491},"docs\u002F5.serve\u002F3.forms",{"title":333,"path":332,"stem":493},"docs\u002F5.serve\u002F4.admin",{"title":495,"path":496,"stem":497,"children":498,"page":5},"Run","\u002Fdocs\u002Frun","docs\u002F6.run",[499,501,503,505,507,508],{"title":337,"path":336,"stem":500},"docs\u002F6.run\u002F1.deploy",{"title":341,"path":340,"stem":502},"docs\u002F6.run\u002F2.secure",{"title":345,"path":344,"stem":504},"docs\u002F6.run\u002F3.lifecycle",{"title":349,"path":348,"stem":506},"docs\u002F6.run\u002F4.observe",{"title":8,"path":232,"stem":234},{"title":355,"path":354,"stem":509},"docs\u002F6.run\u002F6.test",{"title":511,"path":512,"stem":513,"children":514,"page":5},"Adopt","\u002Fdocs\u002Fadopt","docs\u002F7.adopt",[515,517,519,521,523,525],{"title":359,"path":358,"stem":516},"docs\u002F7.adopt\u002F1.new-project",{"title":363,"path":362,"stem":518},"docs\u002F7.adopt\u002F2.existing-app",{"title":367,"path":366,"stem":520},"docs\u002F7.adopt\u002F3.bring-your-schema",{"title":371,"path":370,"stem":522},"docs\u002F7.adopt\u002F4.hosts",{"title":375,"path":374,"stem":524},"docs\u002F7.adopt\u002F5.another-repository",{"title":379,"path":378,"stem":526},"docs\u002F7.adopt\u002F6.demos",{"title":528,"path":529,"stem":530,"children":531,"page":5},"Extending","\u002Fdocs\u002Fextending","docs\u002F8.extending",[532,534,536,538,540,542,544,546,548,550],{"title":383,"path":382,"stem":533},"docs\u002F8.extending\u002F1.scan",{"title":386,"path":385,"stem":535},"docs\u002F8.extending\u002F10.without-compiler",{"title":389,"path":388,"stem":537},"docs\u002F8.extending\u002F2.boot",{"title":392,"path":391,"stem":539},"docs\u002F8.extending\u002F3.card-and-wire",{"title":395,"path":394,"stem":541},"docs\u002F8.extending\u002F4.extension-points",{"title":398,"path":397,"stem":543},"docs\u002F8.extending\u002F5.vocabulary",{"title":401,"path":400,"stem":545},"docs\u002F8.extending\u002F6.extensions",{"title":404,"path":403,"stem":547},"docs\u002F8.extending\u002F7.source-adapter",{"title":407,"path":406,"stem":549},"docs\u002F8.extending\u002F8.surface",{"title":410,"path":409,"stem":551},"docs\u002F8.extending\u002F9.foreign-frond",1794396614893]