[{"data":1,"prerenderedAt":1020},["ShallowReactive",2],{"docs-nav:en":3,"docs:\u002Fdocs\u002Fbusiness\u002Ffacts":134},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,16,20,24,42,63,92,113],{"title":10,"path":6,"stem":11},"What is Fougere","docs\u002Findex",{"title":13,"path":14,"stem":15},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",{"title":17,"path":18,"stem":19},"Existing Nuxt app","\u002Fdocs\u002Fexisting-app","docs\u002F02.existing-app",{"title":21,"path":22,"stem":23},"The CLI","\u002Fdocs\u002Fcli","docs\u002F03.cli",{"title":25,"path":26,"stem":27,"children":28,"page":41},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F2.concepts",[29,33,37],{"title":30,"path":31,"stem":32},"Philosophy","\u002Fdocs\u002Fconcepts\u002Fphilosophy","docs\u002F2.concepts\u002F1.philosophy",{"title":34,"path":35,"stem":36},"The Frond","\u002Fdocs\u002Fconcepts\u002Ffrond","docs\u002F2.concepts\u002F2.frond",{"title":38,"path":39,"stem":40},"The shortest path","\u002Fdocs\u002Fconcepts\u002Fshortest-path","docs\u002F2.concepts\u002F3.shortest-path",false,{"title":43,"path":44,"stem":45,"children":46,"page":41},"Schema","\u002Fdocs\u002Fschema","docs\u002F3.schema",[47,51,55,59],{"title":48,"path":49,"stem":50},"Entities","\u002Fdocs\u002Fschema\u002Fentities","docs\u002F3.schema\u002F1.entities",{"title":52,"path":53,"stem":54},"Views","\u002Fdocs\u002Fschema\u002Fviews","docs\u002F3.schema\u002F2.views",{"title":56,"path":57,"stem":58},"The identity card","\u002Fdocs\u002Fschema\u002Fcard","docs\u002F3.schema\u002F3.card",{"title":60,"path":61,"stem":62},"Standard Schema","\u002Fdocs\u002Fschema\u002Fstandard-schema","docs\u002F3.schema\u002F4.standard-schema",{"title":64,"path":65,"stem":66,"children":67,"page":41},"Business","\u002Fdocs\u002Fbusiness","docs\u002F4.business",[68,72,76,80,84,88],{"title":69,"path":70,"stem":71},"Handlers","\u002Fdocs\u002Fbusiness\u002Fhandlers","docs\u002F4.business\u002F1.handlers",{"title":73,"path":74,"stem":75},"Presenters","\u002Fdocs\u002Fbusiness\u002Fpresenters","docs\u002F4.business\u002F2.presenters",{"title":77,"path":78,"stem":79},"Collectors","\u002Fdocs\u002Fbusiness\u002Fcollectors","docs\u002F4.business\u002F3.collectors",{"title":81,"path":82,"stem":83},"Errors","\u002Fdocs\u002Fbusiness\u002Ferrors","docs\u002F4.business\u002F4.errors",{"title":85,"path":86,"stem":87},"Seeds","\u002Fdocs\u002Fbusiness\u002Fseeds","docs\u002F4.business\u002F5.seeds",{"title":89,"path":90,"stem":91},"Facts","\u002Fdocs\u002Fbusiness\u002Ffacts","docs\u002F4.business\u002F6.facts",{"title":93,"path":94,"stem":95,"children":96,"page":41},"Client","\u002Fdocs\u002Fclient","docs\u002F5.client",[97,101,105,109],{"title":98,"path":99,"stem":100},"Queries & commands","\u002Fdocs\u002Fclient\u002Fqueries-commands","docs\u002F5.client\u002F1.queries-commands",{"title":102,"path":103,"stem":104},"Forms","\u002Fdocs\u002Fclient\u002Fforms","docs\u002F5.client\u002F2.forms",{"title":106,"path":107,"stem":108},"Session","\u002Fdocs\u002Fclient\u002Fsession","docs\u002F5.client\u002F3.session",{"title":110,"path":111,"stem":112},"invoke","\u002Fdocs\u002Fclient\u002Finvoke","docs\u002F5.client\u002F4.invoke",{"title":114,"path":115,"stem":116,"children":117,"page":41},"Infrastructure","\u002Fdocs\u002Finfra","docs\u002F6.infra",[118,122,126,130],{"title":119,"path":120,"stem":121},"The gradient","\u002Fdocs\u002Finfra\u002Fgradient","docs\u002F6.infra\u002F1.gradient",{"title":123,"path":124,"stem":125},"Surfaces — REST & GraphQL","\u002Fdocs\u002Finfra\u002Fsurfaces","docs\u002F6.infra\u002F2.surfaces",{"title":127,"path":128,"stem":129},"Deployment","\u002Fdocs\u002Finfra\u002Fdeployment","docs\u002F6.infra\u002F3.deployment",{"title":131,"path":132,"stem":133},"Hosts","\u002Fdocs\u002Finfra\u002Fhosts","docs\u002F6.infra\u002F4.hosts",{"id":135,"title":89,"body":136,"description":1015,"extension":1016,"meta":1017,"navigation":328,"path":90,"seo":1018,"stem":91,"__hash__":1019},"docs_en\u002Fdocs\u002F4.business\u002F6.facts.md",{"type":137,"value":138,"toc":1005},"minimark",[139,143,173,178,181,291,404,448,462,476,484,491,549,560,564,576,641,645,651,663,667,672,682,844,860,866,870,881,888,896,899,905,908,918,969,976,995,1001],[140,141,89],"h1",{"id":142},"facts",[144,145,146,147,151,152,156,157,164,165,168,169,172],"p",{},"Every other call names ",[148,149,150],"strong",{},"one"," recipient: ",[153,154,155],"code",{},"remotes"," one address per Frond,\n",[158,159,161],"a",{"href":160},"\u002Fdocs\u002Fbusiness\u002Fhandlers#reaching-another-frond",[153,162,163],{},"Facade\u003CT>"," one door. ",[153,166,167],{},"Emit\u003CT>"," names a\n",[148,170,171],{},"subject"," instead, and the number of readers is not the emitter's business.",[174,175,177],"h2",{"id":176},"announcing-a-fact","Announcing a fact",[144,179,180],{},"A fact is an entity, usually derived from the one it is about:",[182,183,188],"pre",{"className":184,"code":185,"language":186,"meta":187,"style":187},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","\u002F\u002F fronds\u002Fblog\u002Fentities\u002FPostPublished.ts\nexport default class PostPublished extends Post.pick('id', 'title').extend({ at: created() }) {}\n","ts","",[153,189,190,199],{"__ignoreMap":187},[191,192,195],"span",{"class":193,"line":194},"line",1,[191,196,198],{"class":197},"sutJx","\u002F\u002F fronds\u002Fblog\u002Fentities\u002FPostPublished.ts\n",[191,200,202,206,209,213,217,220,224,228,232,235,239,243,245,248,251,254,256,259,261,264,266,269,273,276,279,282,285,288],{"class":193,"line":201},2,[191,203,205],{"class":204},"sVHd0","export",[191,207,208],{"class":204}," default",[191,210,212],{"class":211},"sbsja"," class",[191,214,216],{"class":215},"sbgvK"," PostPublished",[191,218,219],{"class":211}," extends",[191,221,223],{"class":222},"su5hD"," Post",[191,225,227],{"class":226},"sP7_E",".",[191,229,231],{"class":230},"sGLFI","pick",[191,233,234],{"class":222},"(",[191,236,238],{"class":237},"sjJ54","'",[191,240,242],{"class":241},"s_sjI","id",[191,244,238],{"class":237},[191,246,247],{"class":226},",",[191,249,250],{"class":237}," '",[191,252,253],{"class":241},"title",[191,255,238],{"class":237},[191,257,258],{"class":222},")",[191,260,227],{"class":226},[191,262,263],{"class":230},"extend",[191,265,234],{"class":222},[191,267,268],{"class":226},"{",[191,270,272],{"class":271},"skxfh"," at",[191,274,275],{"class":226},":",[191,277,278],{"class":230}," created",[191,280,281],{"class":222},"() ",[191,283,284],{"class":226},"}",[191,286,287],{"class":222},") ",[191,289,290],{"class":226},"{}\n",[182,292,294],{"className":184,"code":293,"language":186,"meta":187,"style":187},"\u002F\u002F fronds\u002Fblog\u002Fhandlers\u002FPostHandler.ts — the emitter\nconstructor(private published: Emit\u003CPostPublished>) {}\n\nasync publish(id: string, title: string) {\n  await this.published({ id, title, at: new Date() });\n}\n",[153,295,296,301,323,330,350,398],{"__ignoreMap":187},[191,297,298],{"class":193,"line":194},[191,299,300],{"class":197},"\u002F\u002F fronds\u002Fblog\u002Fhandlers\u002FPostHandler.ts — the emitter\n",[191,302,303,306,309,313,316,319,321],{"class":193,"line":201},[191,304,305],{"class":230},"constructor",[191,307,308],{"class":222},"(private published: Emit",[191,310,312],{"class":311},"smGrS","\u003C",[191,314,315],{"class":222},"PostPublished",[191,317,318],{"class":311},">",[191,320,287],{"class":222},[191,322,290],{"class":226},[191,324,326],{"class":193,"line":325},3,[191,327,329],{"emptyLinePlaceholder":328},true,"\n",[191,331,333,336,339,342,344,347],{"class":193,"line":332},4,[191,334,335],{"class":222},"async ",[191,337,338],{"class":230},"publish",[191,340,341],{"class":222},"(id: string",[191,343,247],{"class":226},[191,345,346],{"class":222}," title: string) ",[191,348,349],{"class":226},"{\n",[191,351,353,356,360,362,365,367,369,372,374,377,379,381,383,386,389,391,393,395],{"class":193,"line":352},5,[191,354,355],{"class":204},"  await",[191,357,359],{"class":358},"s39Yj"," this",[191,361,227],{"class":226},[191,363,364],{"class":230},"published",[191,366,234],{"class":271},[191,368,268],{"class":226},[191,370,371],{"class":222}," id",[191,373,247],{"class":226},[191,375,376],{"class":222}," title",[191,378,247],{"class":226},[191,380,272],{"class":271},[191,382,275],{"class":226},[191,384,385],{"class":311}," new",[191,387,388],{"class":230}," Date",[191,390,281],{"class":271},[191,392,284],{"class":226},[191,394,258],{"class":271},[191,396,397],{"class":226},";\n",[191,399,401],{"class":193,"line":400},6,[191,402,403],{"class":226},"}\n",[182,405,407],{"className":184,"code":406,"language":186,"meta":187,"style":187},"\u002F\u002F fronds\u002Fsearch\u002Fhandlers\u002FIndexHandler.ts — another Frond entirely\nasync reindex(fact: Fact\u003CPostPublished>): Promise\u003Cvoid> { … }\n",[153,408,409,414],{"__ignoreMap":187},[191,410,411],{"class":193,"line":194},[191,412,413],{"class":197},"\u002F\u002F fronds\u002Fsearch\u002Fhandlers\u002FIndexHandler.ts — another Frond entirely\n",[191,415,416,418,421,424,426,428,430,433,437,440,443,446],{"class":193,"line":201},[191,417,335],{"class":222},[191,419,420],{"class":230},"reindex",[191,422,423],{"class":222},"(fact: Fact",[191,425,312],{"class":311},[191,427,315],{"class":222},[191,429,318],{"class":311},[191,431,432],{"class":222},"): ",[191,434,436],{"class":435},"sZMiF","Promise",[191,438,439],{"class":311},"\u003Cvoid>",[191,441,442],{"class":226}," {",[191,444,445],{"class":222}," … ",[191,447,403],{"class":226},[144,449,450,451,458,459,227],{},"There is no topic, no subscribe call, no listener list. ",[148,452,453,454,457],{},"Accepting a ",[153,455,456],{},"Fact\u003CT>"," IS the\nsubscription"," — the scan reads the signature, and that is the whole mechanism. A fourth\nlistener does not reopen ",[153,460,461],{},"PostHandler",[144,463,464,465,467,468,471,472,475],{},"Nothing marks ",[153,466,315],{}," as a fact either: it becomes one because somebody writes\n",[153,469,470],{},"Emit\u003CPostPublished>"," or ",[153,473,474],{},"Fact\u003CPostPublished>"," about it. Either end alone is enough, so\nremoving the emitter does not quietly unsubscribe anybody.",[477,478,480,481,483],"h3",{"id":479},"what-factt-promises","What ",[153,482,456],{}," promises",[144,485,486,487,490],{},"Not merely \"I subscribe\". Push is the ",[148,488,489],{},"strict"," mode and pull is a special case of it: an\nop written for push is correct when called directly, the reverse is false. So the wrapper\ncommits the operation to three things no type can check:",[492,493,494,509],"table",{},[495,496,497],"thead",{},[498,499,500,503,506],"tr",{},[501,502],"th",{},[501,504,505],{},"pull",[501,507,508],{},"push",[510,511,512,524,535],"tbody",{},[498,513,514,518,521],{},[515,516,517],"td",{},"its return",[515,519,520],{},"somebody reads it",[515,522,523],{},"nobody",[498,525,526,529,532],{},[515,527,528],{},"an exception",[515,530,531],{},"reaches the client",[515,533,534],{},"reaches a log",[498,536,537,540,543],{},[515,538,539],{},"how many times",[515,541,542],{},"once per request",[515,544,545,546],{},"at least once — ",[148,547,548],{},"replayable",[144,550,551,552,555,556,559],{},"A subscriber is an ordinary operation. It keeps its door, its judge and its middlewares,\nbecause an emission and a direct call ",[148,553,554],{},"are the same call"," — which is also why it appears\nin your public surface. Put it under ",[153,557,558],{},"handlers\u002F\u003Caudience>\u002F"," to keep it out of a client one.",[477,561,563],{"id":562},"it-is-a-resolver-not-a-channel","It is a resolver, not a channel",[144,565,566,567,571,572,575],{},"A bus moves messages: a queue, an envelope, a delivery semantic. This has none of that. It\nanswers ",[568,569,570],"em",{},"who",", then hands over to the door that already exists — ",[153,573,574],{},"resolve"," returning N\nthings instead of one. Consequences, stated rather than discovered:",[577,578,579,590,608],"ul",{},[580,581,582,585,586,589],"li",{},[148,583,584],{},"Dispatch is not delivery."," ",[153,587,588],{},"await this.published(...)"," returns once every subscriber\nhas been handed the fact, never once any of them is done. A subscriber's failure reaches\na log; a publication is never hostage to its own indexer.",[580,591,592,595,596,599,600,603,604,607],{},[148,593,594],{},"A fact cannot cause itself."," A ring (",[153,597,598],{},"A → B → A",") is refused and the message names it;\na diamond (",[153,601,602],{},"A → B → D",", ",[153,605,606],{},"A → C → D",") stays legal.",[580,609,610,613,614,617,618,621,622,625,626,629,630,633,634,640],{},[148,611,612],{},"Nothing is durable, and nothing here will be."," Kill the listener's process and the\nfact is lost. At-least-once means putting a real channel ",[568,615,616],{},"under"," the dispatch — a log, a\ncursor per subscriber, an ack — and none of that belongs to a resolver.",[619,620],"br",{},"What Fougere owes such a channel is the ability to answer ",[568,623,624],{},"did it land?",", and that is\n",[153,627,628],{},"app.deliver()",": it waits for every local listener and ",[148,631,632],{},"rejects"," if one refused, so a\ncarrier can ack, retry or dead-letter. It is the exact opposite of announcing, on\npurpose — \"dispatch is not delivery\" protects the emitter, and a carrier is not the\nemitter. See ",[158,635,639],{"href":636,"rel":637},"https:\u002F\u002Fgithub.com\u002Fchok\u002Ffougere\u002Ftree\u002Fmain\u002Fdemos\u002Femit-multirepo",[638],"nofollow","emit-multirepo",",\nwhere the eighty-line broker holds the queue and the Frond holds none of it.",[477,642,644],{"id":643},"across-processes","Across processes",[144,646,647,650],{},[153,648,649],{},"remotes:"," is the only line that changes. The listener's Frond stays on disk either way: it\nis scanned, so the emitter knows its signature; declaring it remote only says it is not\nhosted here, and its door resolves to a stand-in that sends the call.",[144,652,653,654,659,660,662],{},"See ",[158,655,658],{"href":656,"rel":657},"https:\u002F\u002Fgithub.com\u002Fchok\u002Ffougere\u002Ftree\u002Fmain\u002Fdemos\u002Femit-split",[638],"emit-split"," — the same\n",[153,661,461],{},", published twice, and the pid in the output says which process indexed.",[477,664,666],{"id":665},"across-repositories","Across repositories",[144,668,669,670,227],{},"Two things stop at a repository boundary, and only one of them is ",[153,671,649],{},[144,673,674,677,678,681],{},[148,675,676],{},"Finding the listeners."," The dispatch reads their code, and another team's Frond is not on\nthis disk. So a carrier goes under the emission — ",[153,679,680],{},"onEmit"," hands the fact to a name, and the\nfar side subscribes to that same name from its own code. Neither reads the other; they meet\non a string derived on both sides.",[182,683,685],{"className":184,"code":684,"language":186,"meta":187,"style":187},"const app = await createApp({\n  root: import.meta.dirname,\n  createContainer,\n  onEmit: (fact, payload) => publishToYourBroker(fact, payload),   \u002F\u002F out\n});\n\n\u002F\u002F in — the same local dispatch, judge and middlewares included\nawait app.deliver(fact, payload);\n\u002F\u002F and what to subscribe to, read off your own signatures\napp.listensTo();                                                   \u002F\u002F ['postPublished']\n",[153,686,687,709,732,739,779,787,791,797,818,824],{"__ignoreMap":187},[191,688,689,692,696,699,702,705,707],{"class":193,"line":194},[191,690,691],{"class":211},"const",[191,693,695],{"class":694},"s_hVV"," app",[191,697,698],{"class":311}," =",[191,700,701],{"class":204}," await",[191,703,704],{"class":230}," createApp",[191,706,234],{"class":222},[191,708,349],{"class":226},[191,710,711,714,716,719,721,724,726,729],{"class":193,"line":201},[191,712,713],{"class":271},"  root",[191,715,275],{"class":226},[191,717,718],{"class":204}," import",[191,720,227],{"class":226},[191,722,723],{"class":694},"meta",[191,725,227],{"class":226},[191,727,728],{"class":222},"dirname",[191,730,731],{"class":226},",\n",[191,733,734,737],{"class":193,"line":325},[191,735,736],{"class":222},"  createContainer",[191,738,731],{"class":226},[191,740,741,744,746,749,753,755,758,760,763,766,769,771,774,776],{"class":193,"line":332},[191,742,743],{"class":230},"  onEmit",[191,745,275],{"class":226},[191,747,748],{"class":226}," (",[191,750,752],{"class":751},"s99_P","fact",[191,754,247],{"class":226},[191,756,757],{"class":751}," payload",[191,759,258],{"class":226},[191,761,762],{"class":211}," =>",[191,764,765],{"class":230}," publishToYourBroker",[191,767,768],{"class":222},"(fact",[191,770,247],{"class":226},[191,772,773],{"class":222}," payload)",[191,775,247],{"class":226},[191,777,778],{"class":197},"   \u002F\u002F out\n",[191,780,781,783,785],{"class":193,"line":352},[191,782,284],{"class":226},[191,784,258],{"class":222},[191,786,397],{"class":226},[191,788,789],{"class":193,"line":400},[191,790,329],{"emptyLinePlaceholder":328},[191,792,794],{"class":193,"line":793},7,[191,795,796],{"class":197},"\u002F\u002F in — the same local dispatch, judge and middlewares included\n",[191,798,800,803,805,807,810,812,814,816],{"class":193,"line":799},8,[191,801,802],{"class":204},"await",[191,804,695],{"class":222},[191,806,227],{"class":226},[191,808,809],{"class":230},"deliver",[191,811,768],{"class":222},[191,813,247],{"class":226},[191,815,773],{"class":222},[191,817,397],{"class":226},[191,819,821],{"class":193,"line":820},9,[191,822,823],{"class":197},"\u002F\u002F and what to subscribe to, read off your own signatures\n",[191,825,827,830,832,835,838,841],{"class":193,"line":826},10,[191,828,829],{"class":222},"app",[191,831,227],{"class":226},[191,833,834],{"class":230},"listensTo",[191,836,837],{"class":222},"()",[191,839,840],{"class":226},";",[191,842,843],{"class":197},"                                                   \u002F\u002F ['postPublished']\n",[144,845,846,849,850,852,853,855,856,859],{},[148,847,848],{},"Knowing the shape."," The card publishes it: a frond's ",[153,851,142],{}," list carries every\n",[153,854,167],{}," its handlers inject, so ",[153,857,858],{},"fougere sync"," writes the class instead of a subscriber\ncopying the fields by hand. Re-export it into one of your fronds and an arriving fact is\njudged against the emitter's own declaration.",[144,861,653,862,865],{},[158,863,639],{"href":636,"rel":864},[638]," — two\nprojects, one fact, and the first publication lost on purpose to show what a carrier buys.",[477,867,869],{"id":868},"changing-a-fact","Changing a fact",[144,871,872,873,876,877,880],{},"A fact meets the ",[148,874,875],{},"same judge"," as any other input: a key outside the contract is\n",[153,878,879],{},"Unknown field",", and that is deliberate. Tolerating it would mean a reader silently\nignoring a field it was meant to handle — the failure you find six months later.",[144,882,883,884,887],{},"So ",[148,885,886],{},"adding a field to a fact breaks every reader still carrying the older copy",". The\nrefusal reaches the reader's log and never the sender, because dispatch is not delivery —\nso that line is the whole of the evidence, and it says what to do:",[182,889,894],{"className":890,"code":892,"language":893},[891],"language-text","ERR [blog] postPublished → indexHandler.reindex refused the shape — author: Unknown field.\n    If 'postPublished' gained a field, this copy is older than the sender's:\n    re-run `fougere sync`.\n","text",[153,895,892],{"__ignoreMap":187},[144,897,898],{},"The order is therefore part of the change:",[182,900,903],{"className":901,"code":902,"language":893},[891],"1. sender declares the new field\n2. every reader: `fougere sync`, then deploy      ← first\n3. sender deploys                                 ← last\n",[153,904,902],{"__ignoreMap":187},[144,906,907],{},"Removing a field is breaking in the same way, and no amount of tolerance would have\nhelped: the data a reader needs is simply not there.",[144,909,910,911,914,915,917],{},"When you do not control step 2 — another team, a fleet, anything you cannot deploy in\norder — ",[148,912,913],{},"announce a second fact instead of changing the first",". It costs one class and\none ",[153,916,167],{},", both facts run in parallel, and readers move when they move:",[182,919,921],{"className":184,"code":920,"language":186,"meta":187,"style":187},"constructor(\n  private published: Emit\u003CPostPublished>,        \u002F\u002F the old readers, untouched\n  private publishedV2: Emit\u003CPostPublishedFull>,  \u002F\u002F the new shape\n) {}\n",[153,922,923,930,946,963],{"__ignoreMap":187},[191,924,925,927],{"class":193,"line":194},[191,926,305],{"class":230},[191,928,929],{"class":222},"(\n",[191,931,932,935,937,939,941,943],{"class":193,"line":201},[191,933,934],{"class":222},"  private published: Emit",[191,936,312],{"class":311},[191,938,315],{"class":222},[191,940,318],{"class":311},[191,942,247],{"class":226},[191,944,945],{"class":197},"        \u002F\u002F the old readers, untouched\n",[191,947,948,951,953,956,958,960],{"class":193,"line":325},[191,949,950],{"class":222},"  private publishedV2: Emit",[191,952,312],{"class":311},[191,954,955],{"class":222},"PostPublishedFull",[191,957,318],{"class":311},[191,959,247],{"class":226},[191,961,962],{"class":197},"  \u002F\u002F the new shape\n",[191,964,965,967],{"class":193,"line":332},[191,966,287],{"class":222},[191,968,290],{"class":226},[144,970,971,972,975],{},"Nothing registers a fact, so a second one adds nothing to unregister later. Delete the\nfirst ",[153,973,974],{},"Emit"," when its last reader is gone.",[977,978,980],"alert",{"type":979},"info",[144,981,982,983,986,987,990,991,994],{},"An ",[153,984,985],{},"EventBus"," used to sit here and was removed rather than published. It resolved by\n",[148,988,989],{},"string"," — the one place that did not resolve by type, so a misspelled event name raised\nnothing — carried an ",[153,992,993],{},"unknown"," payload, and awaited every listener while handing their\nfailures back to the emitter.",[144,996,997,998,1000],{},"Next: ",[158,999,73],{"href":74}," — computed fields added to an entity's output.",[1002,1003,1004],"style",{},"html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}",{"title":187,"searchDepth":201,"depth":201,"links":1006},[1007],{"id":176,"depth":201,"text":177,"children":1008},[1009,1011,1012,1013,1014],{"id":479,"depth":325,"text":1010},"What Fact\u003CT> promises",{"id":562,"depth":325,"text":563},{"id":643,"depth":325,"text":644},{"id":665,"depth":325,"text":666},{"id":868,"depth":325,"text":869},"Emit\u003CT> names a subject instead of a recipient, and accepting a Fact\u003CT> IS the subscription.","md",{},{"title":89,"description":1015},"pBpdSIf37-md4hmpi0gg86tMZ1mdGKUBQF2jPMvGRlE",1786637819489]