[{"data":1,"prerenderedAt":11694},["ShallowReactive",2],{"fougere:post.list:{}":3,"docs:\u002Fdocs\u002Frun\u002Fobserve":6,"docs-uses":1812,"docs-nav":1982,"demo:observability":2120},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":1799,"extension":1800,"forms":1801,"kind":1802,"meta":1803,"navigation":143,"path":1804,"seo":1805,"stem":1806,"step":1807,"uses":1808,"__hash__":1811},"docs\u002Fdocs\u002F6.run\u002F4.observe.md","Observe",{"type":10,"value":11,"toc":1784},"minimark",[12,20,94,99,226,237,314,322,406,417,424,493,497,649,657,661,668,676,687,691,701,704,709,715,724,806,812,816,819,870,876,879,883,893,925,944,948,963,1067,1082,1086,1104,1128,1132,1135,1227,1260,1276,1291,1295,1298,1347,1350,1353,1457,1468,1493,1497,1500,1768,1780],[13,14,15,19],"p",{},[16,17,18],"code",{},"@fougere\u002Fobservability"," gives every operation a span, carries the trace across processes, turns\nthe spans into metrics and log lines into the same trace, and sends all three over OTLP. Core holds\nnone of it: an app that does not install the package pays nothing.",[21,22,26,51,66,80],"code-group",{"className":23,"sync":25},[24],"managers","pm",[27,28,34],"pre",{"className":29,"code":30,"filename":31,"language":32,"meta":33,"style":33},"language-bash shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","npm install @fougere\u002Fobservability\n","npm","bash","",[16,35,36],{"__ignoreMap":33},[37,38,41,44,48],"span",{"class":39,"line":40},"line",1,[37,42,31],{"class":43},"sV8pK",[37,45,47],{"class":46},"sN-8n"," install",[37,49,50],{"class":46}," @fougere\u002Fobservability\n",[27,52,55],{"className":29,"code":53,"filename":54,"language":32,"meta":33,"style":33},"pnpm add @fougere\u002Fobservability\n","pnpm",[16,56,57],{"__ignoreMap":33},[37,58,59,61,64],{"class":39,"line":40},[37,60,54],{"class":43},[37,62,63],{"class":46}," add",[37,65,50],{"class":46},[27,67,70],{"className":29,"code":68,"filename":69,"language":32,"meta":33,"style":33},"bun add @fougere\u002Fobservability\n","bun",[16,71,72],{"__ignoreMap":33},[37,73,74,76,78],{"class":39,"line":40},[37,75,69],{"class":43},[37,77,63],{"class":46},[37,79,50],{"class":46},[27,81,84],{"className":29,"code":82,"filename":83,"language":32,"meta":33,"style":33},"yarn add @fougere\u002Fobservability\n","yarn",[16,85,86],{"__ignoreMap":33},[37,87,88,90,92],{"class":39,"line":40},[37,89,83],{"class":43},[37,91,63],{"class":46},[37,93,50],{"class":46},[95,96,98],"h2",{"id":97},"one-line","One line",[27,100,104],{"className":101,"code":102,"language":103,"meta":33,"style":33},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","import { observability } from '@fougere\u002Fobservability';\n\ncreateApp({\n  extensions: [observability({ service: 'blog', otlp: 'http:\u002F\u002Flocalhost:4318' })],\n});\n","ts",[16,105,106,138,145,159,215],{"__ignoreMap":33},[37,107,108,112,116,120,123,126,130,132,135],{"class":39,"line":40},[37,109,111],{"class":110},"sK6XW","import",[37,113,115],{"class":114},"s15xx"," {",[37,117,119],{"class":118},"sPEhv"," observability",[37,121,122],{"class":114}," }",[37,124,125],{"class":110}," from",[37,127,129],{"class":128},"sDDC1"," '",[37,131,18],{"class":46},[37,133,134],{"class":128},"'",[37,136,137],{"class":114},";\n",[37,139,141],{"class":39,"line":140},2,[37,142,144],{"emptyLinePlaceholder":143},true,"\n",[37,146,148,152,156],{"class":39,"line":147},3,[37,149,151],{"class":150},"s4mR9","createApp",[37,153,155],{"class":154},"srlTG","(",[37,157,158],{"class":114},"{\n",[37,160,162,166,169,172,175,177,180,183,185,187,190,192,195,198,200,202,205,207,209,212],{"class":39,"line":161},4,[37,163,165],{"class":164},"sHtqg","  extensions",[37,167,168],{"class":114},":",[37,170,171],{"class":154}," [",[37,173,174],{"class":150},"observability",[37,176,155],{"class":154},[37,178,179],{"class":114},"{",[37,181,182],{"class":164}," service",[37,184,168],{"class":114},[37,186,129],{"class":128},[37,188,189],{"class":46},"blog",[37,191,134],{"class":128},[37,193,194],{"class":114},",",[37,196,197],{"class":164}," otlp",[37,199,168],{"class":114},[37,201,129],{"class":128},[37,203,204],{"class":46},"http:\u002F\u002Flocalhost:4318",[37,206,134],{"class":128},[37,208,122],{"class":114},[37,210,211],{"class":154},")]",[37,213,214],{"class":114},",\n",[37,216,218,221,224],{"class":39,"line":217},5,[37,219,220],{"class":114},"}",[37,222,223],{"class":154},")",[37,225,137],{"class":114},[13,227,228,229,232,233,236],{},"A frond that runs in its own process carries its half of the trace with it: put the extension in\nthe frond's ",[16,230,231],{},"extensions\u002F"," directory, and it rises on whichever process serves that frond —\n",[16,234,235],{},"fougere serve blog"," included.",[27,238,240],{"className":101,"code":239,"language":103,"meta":33,"style":33},"\u002F\u002F fronds\u002Fblog\u002Fextensions\u002Fobserve.ts\nimport { observability } from '@fougere\u002Fobservability';\n\nexport default observability({ service: 'blog', otlp: 'http:\u002F\u002Flocalhost:4318' });\n",[16,241,242,248,268,272],{"__ignoreMap":33},[37,243,244],{"class":39,"line":40},[37,245,247],{"class":246},"skXKP","\u002F\u002F fronds\u002Fblog\u002Fextensions\u002Fobserve.ts\n",[37,249,250,252,254,256,258,260,262,264,266],{"class":39,"line":140},[37,251,111],{"class":110},[37,253,115],{"class":114},[37,255,119],{"class":118},[37,257,122],{"class":114},[37,259,125],{"class":110},[37,261,129],{"class":128},[37,263,18],{"class":46},[37,265,134],{"class":128},[37,267,137],{"class":114},[37,269,270],{"class":39,"line":147},[37,271,144],{"emptyLinePlaceholder":143},[37,273,274,277,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312],{"class":39,"line":161},[37,275,276],{"class":110},"export",[37,278,279],{"class":110}," default",[37,281,119],{"class":150},[37,283,155],{"class":154},[37,285,179],{"class":114},[37,287,182],{"class":164},[37,289,168],{"class":114},[37,291,129],{"class":128},[37,293,189],{"class":46},[37,295,134],{"class":128},[37,297,194],{"class":114},[37,299,197],{"class":164},[37,301,168],{"class":114},[37,303,129],{"class":128},[37,305,204],{"class":46},[37,307,134],{"class":128},[37,309,122],{"class":114},[37,311,223],{"class":154},[37,313,137],{"class":114},[13,315,316,317,321],{},"Under a host that writes its boot file itself, the extension is ",[318,319,320],"strong",{},"named"," with its options, since\na function cannot be written into a file:",[27,323,325],{"className":101,"code":324,"language":103,"meta":33,"style":33},"\u002F\u002F nuxt.config.ts\nfougere: {\n  observability: { service: 'blog', otlp: 'http:\u002F\u002Flocalhost:4318' },\n  calls: { panel: true },        \u002F\u002F `false` turns a key off; absent is the same\n}\n",[16,326,327,332,343,377,401],{"__ignoreMap":33},[37,328,329],{"class":39,"line":40},[37,330,331],{"class":246},"\u002F\u002F nuxt.config.ts\n",[37,333,334,338,340],{"class":39,"line":140},[37,335,337],{"class":336},"sWI7z","fougere",[37,339,168],{"class":114},[37,341,342],{"class":114}," {\n",[37,344,345,348,350,352,354,356,358,360,362,364,366,368,370,372,374],{"class":39,"line":147},[37,346,347],{"class":336},"  observability",[37,349,168],{"class":114},[37,351,115],{"class":114},[37,353,182],{"class":336},[37,355,168],{"class":114},[37,357,129],{"class":128},[37,359,189],{"class":46},[37,361,134],{"class":128},[37,363,194],{"class":114},[37,365,197],{"class":336},[37,367,168],{"class":114},[37,369,129],{"class":128},[37,371,204],{"class":46},[37,373,134],{"class":128},[37,375,376],{"class":114}," },\n",[37,378,379,382,384,386,389,391,395,398],{"class":39,"line":161},[37,380,381],{"class":336},"  calls",[37,383,168],{"class":114},[37,385,115],{"class":114},[37,387,388],{"class":336}," panel",[37,390,168],{"class":114},[37,392,394],{"class":393},"slmMI"," true",[37,396,397],{"class":114}," },",[37,399,400],{"class":246},"        \u002F\u002F `false` turns a key off; absent is the same\n",[37,402,403],{"class":39,"line":217},[37,404,405],{"class":114},"}\n",[13,407,408,409,412,413,416],{},"Each key is the name of an extension package and of its export — ",[16,410,411],{},"calls"," is\n",[16,414,415],{},"import { calls } from '@fougere\u002Fcalls'"," — so a misspelled key is refused rather than ignored.",[13,418,419,420,423],{},"Without ",[16,421,422],{},"otlp",", nothing leaves the process; the spans, the metrics and the topology still answer.",[425,426,427,440],"table",{},[428,429,430],"thead",{},[431,432,433,437],"tr",{},[434,435,436],"th",{},"Option",[434,438,439],{},"What it decides",[441,442,443,454,463,473,483],"tbody",{},[431,444,445,451],{},[446,447,448],"td",{},[16,449,450],{},"service",[446,452,453],{},"the service name every signal carries",[431,455,456,460],{},[446,457,458],{},[16,459,422],{},[446,461,462],{},"where traces, metrics and logs are sent",[431,464,465,470],{},[446,466,467],{},[16,468,469],{},"sample",[446,471,472],{},"the share of traces kept — 1 by default; an operation that crosses a process is always kept",[431,474,475,480],{},[446,476,477],{},[16,478,479],{},"bounds",[446,481,482],{},"the histogram buckets, in seconds — one list for every operation",[431,484,485,490],{},[446,486,487],{},[16,488,489],{},"spanPerStatement",[446,491,492],{},"a span for each SQL statement — off by default",[95,494,496],{"id":495},"what-a-span-holds","What a span holds",[425,498,499,507],{},[428,500,501],{},[431,502,503,505],{},[434,504],{},[434,506],{},[441,508,509,526,536,549,566,583,595,605,615,625,635],{},[431,510,511,523],{},[446,512,513,516,517,516,520],{},[16,514,515],{},"traceId"," \u002F ",[16,518,519],{},"spanId",[16,521,522],{},"parentId",[446,524,525],{},"where this step sits in the tree",[431,527,528,533],{},[446,529,530],{},[16,531,532],{},"frond",[446,534,535],{},"which frond owned the operation — the first thing to group by",[431,537,538,543],{},[446,539,540],{},[16,541,542],{},"callerFrond",[446,544,545,546],{},"the frond of the step it ran inside, when it is a different one — an edge ",[16,547,548],{},"shop → catalog",[431,550,551,556],{},[446,552,553],{},[16,554,555],{},"kind",[446,557,558,561,562,565],{},[16,559,560],{},"operation"," — a call with an address — or ",[16,563,564],{},"statement",", which ran under one",[431,567,568,573],{},[446,569,570],{},[16,571,572],{},"crossing",[446,574,575,578,579,582],{},[16,576,577],{},"sent"," or ",[16,580,581],{},"received"," when the call crossed a process",[431,584,585,592],{},[446,586,587,516,590],{},[16,588,589],{},"address",[16,591,560],{},[446,593,594],{},"what was called; for a statement, the table and the verb",[431,596,597,602],{},[446,598,599],{},[16,600,601],{},"startedAt",[446,603,604],{},"when it started, in epoch milliseconds",[431,606,607,612],{},[446,608,609],{},[16,610,611],{},"ms",[446,613,614],{},"how long it took",[431,616,617,622],{},[446,618,619],{},[16,620,621],{},"selfMs",[446,623,624],{},"how long, minus what its observed children took",[431,626,627,632],{},[446,628,629],{},[16,630,631],{},"statements",[446,633,634],{},"how many SQL statements ran under it",[431,636,637,642],{},[446,638,639],{},[16,640,641],{},"error",[446,643,644,645,648],{},"the ",[16,646,647],{},"FougereError"," code when it refused, absent when it answered",[13,650,651,653,654,656],{},[16,652,601],{}," comes from the wall clock, so two processes land on one timeline; ",[16,655,611],{}," from the\nmonotonic clock, so a clock correction during a call does not move it.",[95,658,660],{"id":659},"the-trace-crosses-the-wire","The trace crosses the wire",[13,662,663,664,667],{},"The parent span travels in the ",[318,665,666],{},"invocation",", not in an HTTP header, so it crosses whatever\ntransport carries the call. The format is W3C Trace Context, which any collector reads:",[27,669,674],{"className":670,"code":672,"language":673},[671],"language-text","app                     post.list        traceId a3f… spanId 01\n  └─ blog (split)       post.list        traceId a3f… spanId 02, parent 01\n","text",[16,675,672],{"__ignoreMap":33},[13,677,678,679,682,683,686],{},"Both sides of a split record the call — where it leaves and where it arrives — so ",[318,680,681],{},"the gap\nbetween the two spans is what the wire cost",". A handler that calls another frond starts a new\ninvocation; its parent is found in the context the first call still runs in (",[16,684,685],{},"currentSpan()",").",[95,688,690],{"id":689},"metrics","Metrics",[13,692,693,694,697,698,686],{},"Rate, errors and duration are ",[318,695,696],{},"one"," metric: a histogram of durations, split by operation and by\nwhether it refused. Its count is the rate, its split is the error rate, its buckets are the\nlatency. The fourth signal, saturation, counts the calls that have not finished yet\n(",[16,699,700],{},"activeCalls()",[13,702,703],{},"Cardinality is bounded by construction: frond × entity × operation × {ok, error}, plus the error\ncode — all declared in the code. No id, user or trace ever becomes a dimension.",[705,706,708],"h3",{"id":707},"working-or-waiting","Working or waiting",[13,710,711,712,714],{},"A span's ",[16,713,621],{}," is its duration minus what its observed children took. An operation that calls\ntwo other fronds reports milliseconds and almost no self time: it is not slow, it is waiting — a\ncolumn of durations cannot tell the two apart.",[13,716,717,718,720,721,723],{},"For that to be true, what runs under an operation is observed too: each SQL statement is charged\nto the operation that issued it. Its time comes out of ",[16,719,621],{},", and ",[16,722,631],{}," counts it.",[27,725,727],{"className":101,"code":726,"language":103,"meta":33,"style":33},"{ kind: 'operation', address: 'cart', operation: 'checkout', ms: 31.0, selfMs: 0.2, statements: 40 }\n",[16,728,729],{"__ignoreMap":33},[37,730,731,733,736,738,740,742,744,746,749,751,753,756,758,760,763,765,767,770,772,774,777,779,783,785,788,790,793,795,798,800,803],{"class":39,"line":40},[37,732,179],{"class":114},[37,734,735],{"class":336}," kind",[37,737,168],{"class":114},[37,739,129],{"class":128},[37,741,560],{"class":46},[37,743,134],{"class":128},[37,745,194],{"class":114},[37,747,748],{"class":336}," address",[37,750,168],{"class":114},[37,752,129],{"class":128},[37,754,755],{"class":46},"cart",[37,757,134],{"class":128},[37,759,194],{"class":114},[37,761,762],{"class":336}," operation",[37,764,168],{"class":114},[37,766,129],{"class":128},[37,768,769],{"class":46},"checkout",[37,771,134],{"class":128},[37,773,194],{"class":114},[37,775,776],{"class":336}," ms",[37,778,168],{"class":114},[37,780,782],{"class":781},"s3dPA"," 31.0",[37,784,194],{"class":114},[37,786,787],{"class":336}," selfMs",[37,789,168],{"class":114},[37,791,792],{"class":781}," 0.2",[37,794,194],{"class":114},[37,796,797],{"class":336}," statements",[37,799,168],{"class":114},[37,801,802],{"class":781}," 40",[37,804,805],{"class":114}," }\n",[13,807,808,809,811],{},"One statement per row is what an N+1 looks like, and that line says it without opening a trace.\nDivided by the call count, ",[16,810,631],{}," is statements per call.",[705,813,815],{"id":814},"which-statements-ran","Which statements ran",[13,817,818],{},"The count is always on. The detail — one span per statement — is off by default:",[27,820,822],{"className":101,"code":821,"language":103,"meta":33,"style":33},"observability({ service: 'shop', otlp: '…', spanPerStatement: true })\n",[16,823,824],{"__ignoreMap":33},[37,825,826,828,830,832,834,836,838,841,843,845,847,849,851,854,856,858,861,863,865,867],{"class":39,"line":40},[37,827,174],{"class":150},[37,829,155],{"class":154},[37,831,179],{"class":114},[37,833,182],{"class":164},[37,835,168],{"class":114},[37,837,129],{"class":128},[37,839,840],{"class":46},"shop",[37,842,134],{"class":128},[37,844,194],{"class":114},[37,846,197],{"class":164},[37,848,168],{"class":114},[37,850,129],{"class":128},[37,852,853],{"class":46},"…",[37,855,134],{"class":128},[37,857,194],{"class":114},[37,859,860],{"class":164}," spanPerStatement",[37,862,168],{"class":114},[37,864,394],{"class":393},[37,866,122],{"class":114},[37,868,869],{"class":154},")\n",[27,871,874],{"className":872,"code":873,"language":673},[671],"item.listOneByOne   [0.54ms, self 0.47ms, 4 statements]     ← by default, one span\n\nitem.listOneByOne   [0.54ms, self 0.47ms, 4 statements]     ← with it, five\n  items.select      [0.01ms]\n  items.select      [0.01ms]\n  items.select      [0.01ms]\n  items.select      [0.01ms]\n",[16,875,873],{"__ignoreMap":33},[13,877,878],{},"The count finds the slow operation; the detail explains it, and is turned on over that operation\nonly. What decides is not CPU — a statement span costs well under a microsecond, against about\n14 µs for the fastest SQLite select — but volume: a backend charges per span, and a page of forty\nrows would export forty.",[705,880,882],{"id":881},"where-an-operations-work-goes","Where an operation's work goes",[13,884,885,888,889,892],{},[16,886,887],{},"placement"," says where an operation answers; ",[16,890,891],{},"reach"," says where its work goes:",[27,894,896],{"className":29,"code":895,"language":32,"meta":33,"style":33},"fougere explain CommandeHandler.servable --root .\n# Placement: commande \u002F local\n# Reach:     stock — 1 hop(s)\n",[16,897,898,915,920],{"__ignoreMap":33},[37,899,900,902,905,908,912],{"class":39,"line":40},[37,901,337],{"class":43},[37,903,904],{"class":46}," explain",[37,906,907],{"class":46}," CommandeHandler.servable",[37,909,911],{"class":910},"svHQO"," --root",[37,913,914],{"class":46}," .\n",[37,916,917],{"class":39,"line":140},[37,918,919],{"class":246},"# Placement: commande \u002F local\n",[37,921,922],{"class":39,"line":147},[37,923,924],{"class":246},"# Reach:     stock — 1 hop(s)\n",[13,926,927,928,931,932,935,936,939,940,943],{},"Comment the ",[16,929,930],{},"fronds:"," line out and the same operation reports ",[16,933,934],{},"0 hop(s)",". Reach is read from the\nhandler's constructor, so every operation of a handler reaches the same fronds. It is what keeps\nevery crossing trace sampled, and what ",[16,937,938],{},"fougere load"," sets each threshold from:\n",[16,941,942],{},"base + hops × perHop",".",[95,945,947],{"id":946},"logs-on-the-trace","Logs on the trace",[13,949,950,951,954,955,958,959,962],{},"A log line is an announced fact, ",[16,952,953],{},"LogLine",", and a destination is a handler that accepts it — no\nregistration. ",[16,956,957],{},"observability()"," brings an OTLP destination with it, so ",[16,960,961],{},"otlp:"," is the whole wiring.\nYour own destination is a handler in one of your fronds:",[27,964,966],{"className":101,"code":965,"language":103,"meta":33,"style":33},"import type { Fact, LogLine } from '@fougere\u002Fcore';\n\nexport default class KeepHandler {\n  async record(line: Fact\u003CLogLine>): Promise\u003Cvoid> { … }\n}\n",[16,967,968,998,1002,1018,1063],{"__ignoreMap":33},[37,969,970,972,975,977,980,982,985,987,989,991,994,996],{"class":39,"line":40},[37,971,111],{"class":110},[37,973,974],{"class":110}," type",[37,976,115],{"class":114},[37,978,979],{"class":118}," Fact",[37,981,194],{"class":114},[37,983,984],{"class":118}," LogLine",[37,986,122],{"class":114},[37,988,125],{"class":110},[37,990,129],{"class":128},[37,992,993],{"class":46},"@fougere\u002Fcore",[37,995,134],{"class":128},[37,997,137],{"class":114},[37,999,1000],{"class":39,"line":140},[37,1001,144],{"emptyLinePlaceholder":143},[37,1003,1004,1006,1008,1012,1016],{"class":39,"line":147},[37,1005,276],{"class":110},[37,1007,279],{"class":110},[37,1009,1011],{"class":1010},"s76I7"," class",[37,1013,1015],{"class":1014},"sBZYL"," KeepHandler",[37,1017,342],{"class":114},[37,1019,1020,1023,1027,1029,1032,1034,1036,1039,1041,1044,1047,1049,1052,1055,1057,1061],{"class":39,"line":161},[37,1021,1022],{"class":1010},"  async",[37,1024,1026],{"class":1025},"shDkW"," record",[37,1028,155],{"class":114},[37,1030,39],{"class":1031},"shDUQ",[37,1033,168],{"class":114},[37,1035,979],{"class":1014},[37,1037,1038],{"class":114},"\u003C",[37,1040,953],{"class":1014},[37,1042,1043],{"class":114},">):",[37,1045,1046],{"class":1014}," Promise",[37,1048,1038],{"class":114},[37,1050,1051],{"class":1014},"void",[37,1053,1054],{"class":114},">",[37,1056,115],{"class":114},[37,1058,1060],{"class":1059},"ssXpW"," … ",[37,1062,405],{"class":114},[37,1064,1065],{"class":39,"line":217},[37,1066,405],{"class":114},[13,1068,1069,1070,1073,1074,1073,1077,1073,1080,686],{},"A line takes the trace id of the call it was written in, read when it is written. A line written\noutside any call — at boot, at shutdown — has no trace id, rather than a zero that would gather\nevery process's startup into one trace. The console keeps its line, a destination that throws costs\nnobody theirs, and the log level filters first, so a line that is not printed is not shipped. Each\nlevel uses its own console method (",[16,1071,1072],{},"debug",", ",[16,1075,1076],{},"info",[16,1078,1079],{},"warn",[16,1081,641],{},[95,1083,1085],{"id":1084},"sending-it","Sending it",[13,1087,1088,1089,1073,1092,1095,1096,1099,1100,1103],{},"OTLP over HTTP, batched every second, in JSON — no protobuf, no dependency. The three signals go to\n",[16,1090,1091],{},"\u002Fv1\u002Ftraces",[16,1093,1094],{},"\u002Fv1\u002Fmetrics"," and ",[16,1097,1098],{},"\u002Fv1\u002Flogs"," of the address given; name ",[16,1101,1102],{},"metricsUrl"," when metrics go\nto another engine.",[1105,1106,1107,1111,1114,1121],"ul",{},[1108,1109,1110],"li",{},"A metric with no data points makes Prometheus reject the whole batch, so a process with no edges\npublishes no edge metric rather than an empty one.",[1108,1112,1113],{},"Metrics go out on every beat, even when no span finished: a gauge that stops being published\nreads as gone, not idle.",[1108,1115,1116,1117,1120],{},"An export that fails is reported to ",[16,1118,1119],{},"onError",", silent by default: a trace never breaks a call.",[1108,1122,1123,1124,1127],{},"Before a process exits, ",[16,1125,1126],{},"flush()"," sends what is buffered.",[95,1129,1131],{"id":1130},"the-shape-of-the-system","The shape of the system",[13,1133,1134],{},"An app can be asked what shape it is in:",[27,1136,1138],{"className":101,"code":1137,"language":103,"meta":33,"style":33},"await call({ address: 'rpc', op: 'topology' });\n\u002F\u002F { fronds:   [{ frond: 'shop', placement: 'local', entities: 2, facades: 2 },\n\u002F\u002F              { frond: 'catalog', placement: 'remote', entities: 0, facades: 0 }],\n\u002F\u002F   edges:    [{ from: 'shop', to: 'catalog', count: 12, errors: 1 }],\n\u002F\u002F   declared: { fronds: [{ frond: 'shop', placement: 'local' },\n\u002F\u002F                        { frond: 'catalog',  placement: 'remote', at: 'http:\u002F\u002F127.0.0.1:4100' },\n\u002F\u002F                        { frond: 'shipping', placement: 'remote', at: 'http:\u002F\u002F127.0.0.1:4300' }],\n\u002F\u002F               edges:  [{ from: 'shop', to: 'catalog' }, { from: 'shop', to: 'shipping' }] },\n\u002F\u002F   active: 0, since: 1755861234567 }\n",[16,1139,1140,1183,1188,1193,1198,1203,1209,1215,1221],{"__ignoreMap":33},[37,1141,1142,1145,1148,1150,1152,1154,1156,1158,1161,1163,1165,1168,1170,1172,1175,1177,1179,1181],{"class":39,"line":40},[37,1143,1144],{"class":110},"await",[37,1146,1147],{"class":150}," call",[37,1149,155],{"class":154},[37,1151,179],{"class":114},[37,1153,748],{"class":164},[37,1155,168],{"class":114},[37,1157,129],{"class":128},[37,1159,1160],{"class":46},"rpc",[37,1162,134],{"class":128},[37,1164,194],{"class":114},[37,1166,1167],{"class":164}," op",[37,1169,168],{"class":114},[37,1171,129],{"class":128},[37,1173,1174],{"class":46},"topology",[37,1176,134],{"class":128},[37,1178,122],{"class":114},[37,1180,223],{"class":154},[37,1182,137],{"class":114},[37,1184,1185],{"class":39,"line":140},[37,1186,1187],{"class":246},"\u002F\u002F { fronds:   [{ frond: 'shop', placement: 'local', entities: 2, facades: 2 },\n",[37,1189,1190],{"class":39,"line":147},[37,1191,1192],{"class":246},"\u002F\u002F              { frond: 'catalog', placement: 'remote', entities: 0, facades: 0 }],\n",[37,1194,1195],{"class":39,"line":161},[37,1196,1197],{"class":246},"\u002F\u002F   edges:    [{ from: 'shop', to: 'catalog', count: 12, errors: 1 }],\n",[37,1199,1200],{"class":39,"line":217},[37,1201,1202],{"class":246},"\u002F\u002F   declared: { fronds: [{ frond: 'shop', placement: 'local' },\n",[37,1204,1206],{"class":39,"line":1205},6,[37,1207,1208],{"class":246},"\u002F\u002F                        { frond: 'catalog',  placement: 'remote', at: 'http:\u002F\u002F127.0.0.1:4100' },\n",[37,1210,1212],{"class":39,"line":1211},7,[37,1213,1214],{"class":246},"\u002F\u002F                        { frond: 'shipping', placement: 'remote', at: 'http:\u002F\u002F127.0.0.1:4300' }],\n",[37,1216,1218],{"class":39,"line":1217},8,[37,1219,1220],{"class":246},"\u002F\u002F               edges:  [{ from: 'shop', to: 'catalog' }, { from: 'shop', to: 'shipping' }] },\n",[37,1222,1224],{"class":39,"line":1223},9,[37,1225,1226],{"class":246},"\u002F\u002F   active: 0, since: 1755861234567 }\n",[13,1228,1229,1095,1232,1235,1236,1239,1240,1243,1244,1247,1248,1251,1252,1255,1256,1259],{},[16,1230,1231],{},"fronds",[16,1233,1234],{},"edges"," are what this process ",[318,1237,1238],{},"saw",": a frond is ",[16,1241,1242],{},"local"," because it is here, ",[16,1245,1246],{},"remote","\nbecause it answered a call. ",[16,1249,1250],{},"declared"," is what the config ",[318,1253,1254],{},"says",". Kept apart, they disagree\nexactly when something is wrong: ",[16,1257,1258],{},"shipping"," above is declared and has never answered — a dead edge,\nvisible, instead of a smaller system that looks healthy. An address is cut to its host and port,\nsince a declared one may carry credentials.",[13,1261,1262,1265,1266,1271,1272,1275],{},[16,1263,1264],{},"rpc.topology"," comes with this package; an app without it refuses the operation by name. The\n",[1267,1268,1270],"a",{"href":1269},"\u002Fdocs\u002Fserve\u002Fadmin","admin"," draws it on its ",[318,1273,1274],{},"Topology"," page.",[13,1277,1278,1279,1282,1283,1287,1288,1290],{},"When a receiver verifies the caller of a split call, ",[16,1280,1281],{},"invocation.caller"," names the frond that\nsigned (",[1267,1284,1286],{"href":1285},"\u002Fdocs\u002Frun\u002Fsecure","Secure calls","). Spans do not read it: ",[16,1289,542],{}," is the frond of the\nparent step in this process, not a verified caller.",[95,1292,1294],{"id":1293},"on-a-dashboard","On a dashboard",[13,1296,1297],{},"Anything that speaks OTLP reads this as it is. Moving between Jaeger with Prometheus and SigNoz\nchanges two URLs and nothing else.",[27,1299,1301],{"className":29,"code":1300,"language":32,"meta":33,"style":33},"pnpm -C demos\u002Fobservability dev      # three fronds, three processes\npnpm -C demos\u002Fobservability load     # k6, in stages\npnpm -C demos\u002Fobservability signoz   # a collector, OTLP on 4318, UI on 8080\n",[16,1302,1303,1319,1333],{"__ignoreMap":33},[37,1304,1305,1307,1310,1313,1316],{"class":39,"line":40},[37,1306,54],{"class":43},[37,1308,1309],{"class":910}," -C",[37,1311,1312],{"class":46}," demos\u002Fobservability",[37,1314,1315],{"class":46}," dev",[37,1317,1318],{"class":246},"      # three fronds, three processes\n",[37,1320,1321,1323,1325,1327,1330],{"class":39,"line":140},[37,1322,54],{"class":43},[37,1324,1309],{"class":910},[37,1326,1312],{"class":46},[37,1328,1329],{"class":46}," load",[37,1331,1332],{"class":246},"     # k6, in stages\n",[37,1334,1335,1337,1339,1341,1344],{"class":39,"line":147},[37,1336,54],{"class":43},[37,1338,1309],{"class":910},[37,1340,1312],{"class":46},[37,1342,1343],{"class":46}," signoz",[37,1345,1346],{"class":246},"   # a collector, OTLP on 4318, UI on 8080\n",[1348,1349],"demo",{"name":174},[13,1351,1352],{},"The panels worth building, in the order you need them:",[425,1354,1355,1365],{},[428,1356,1357],{},[431,1358,1359,1362],{},[434,1360,1361],{},"Panel",[434,1363,1364],{},"Query",[441,1366,1367,1377,1389,1399,1409,1419,1429,1440],{},[431,1368,1369,1372],{},[446,1370,1371],{},"Throughput",[446,1373,1374],{},[16,1375,1376],{},"sum(rate(fougere_operation_duration_seconds_count[1m]))",[431,1378,1379,1382],{},[446,1380,1381],{},"Error rate",[446,1383,1384,1385,1388],{},"the same, over ",[16,1386,1387],{},"fougere_outcome=\"error\"",", divided by the total",[431,1390,1391,1394],{},[446,1392,1393],{},"Latency p95",[446,1395,1396],{},[16,1397,1398],{},"histogram_quantile(0.95, sum by (le) (rate(…_bucket[1m])))",[431,1400,1401,1404],{},[446,1402,1403],{},"Saturation",[446,1405,1406],{},[16,1407,1408],{},"fougere_operations_active",[431,1410,1411,1414],{},[446,1412,1413],{},"Working vs waiting",[446,1415,1416],{},[16,1417,1418],{},"fougere_operation_self_seconds_sum \u002F fougere_operation_duration_seconds_sum",[431,1420,1421,1424],{},[446,1422,1423],{},"Statements per call",[446,1425,1426],{},[16,1427,1428],{},"rate(fougere_operation_statements_total[1m]) \u002F rate(fougere_operation_duration_seconds_count[1m])",[431,1430,1431,1434],{},[446,1432,1433],{},"Per frond",[446,1435,1436,1437],{},"any of the above, ",[16,1438,1439],{},"sum by (fougere_frond)",[431,1441,1442,1445],{},[446,1443,1444],{},"Service graph",[446,1446,1447,1450,1451,516,1454],{},[16,1448,1449],{},"fougere_calls_total"," by ",[16,1452,1453],{},"fougere_from",[16,1455,1456],{},"fougere_to",[13,1458,1459,1460,1463,1464,1467],{},"The two middle rows name a culprit rather than a symptom. Beyond them, a ",[318,1461,1462],{},"heatmap"," of the\nbuckets shows a two-humped latency a p95 hides, and a ",[318,1465,1466],{},"table of operations sorted by p95"," shows\nwhich one drags the global figure.",[1469,1470,1471],"note",{},[13,1472,1473,1474,1477,1478,720,1481,1484,1485,1488,1489,1492],{},"Prometheus renames OTLP metrics as it ingests them: ",[16,1475,1476],{},"fougere.operation.duration"," in seconds becomes\n",[16,1479,1480],{},"fougere_operation_duration_seconds",[16,1482,1483],{},"fougere.frond"," becomes the label ",[16,1486,1487],{},"fougere_frond",". Read\nthe names off ",[16,1490,1491],{},"\u002Fapi\u002Fv1\u002Flabel\u002F__name__\u002Fvalues"," rather than guessing them.",[95,1494,1496],{"id":1495},"wiring-it-by-hand","Wiring it by hand",[13,1498,1499],{},"The extension does this for you; without it, the parts are public:",[27,1501,1503],{"className":101,"code":1502,"language":103,"meta":33,"style":33},"import { tracing, metrics, otlp, type SpanSink } from '@fougere\u002Fobservability';\n\nconst spans: SpanSink[] = [];             \u002F\u002F who receives the spans — this app's list\nconst tracer = tracing(spans);\napp.use(tracer.middleware);               \u002F\u002F every operation\napp.use('post', tracer.middleware);       \u002F\u002F or one entity's\n\nconst measured = metrics(app);\nspans.push(measured.sink);\n\nconst exporter = otlp({ service: 'blog', metrics: measured });\nspans.push(exporter.sink);\n",[16,1504,1505,1542,1546,1573,1594,1622,1655,1659,1678,1701,1706,1746],{"__ignoreMap":33},[37,1506,1507,1509,1511,1514,1516,1519,1521,1523,1525,1527,1530,1532,1534,1536,1538,1540],{"class":39,"line":40},[37,1508,111],{"class":110},[37,1510,115],{"class":114},[37,1512,1513],{"class":118}," tracing",[37,1515,194],{"class":114},[37,1517,1518],{"class":118}," metrics",[37,1520,194],{"class":114},[37,1522,197],{"class":118},[37,1524,194],{"class":114},[37,1526,974],{"class":110},[37,1528,1529],{"class":118}," SpanSink",[37,1531,122],{"class":114},[37,1533,125],{"class":110},[37,1535,129],{"class":128},[37,1537,18],{"class":46},[37,1539,134],{"class":128},[37,1541,137],{"class":114},[37,1543,1544],{"class":39,"line":140},[37,1545,144],{"emptyLinePlaceholder":143},[37,1547,1548,1551,1554,1556,1558,1561,1564,1567,1570],{"class":39,"line":147},[37,1549,1550],{"class":1010},"const",[37,1552,1553],{"class":118}," spans",[37,1555,168],{"class":114},[37,1557,1529],{"class":1014},[37,1559,1560],{"class":154},"[]",[37,1562,1563],{"class":114}," =",[37,1565,1566],{"class":154}," []",[37,1568,1569],{"class":114},";",[37,1571,1572],{"class":246},"             \u002F\u002F who receives the spans — this app's list\n",[37,1574,1575,1577,1580,1583,1585,1587,1590,1592],{"class":39,"line":161},[37,1576,1550],{"class":1010},[37,1578,1579],{"class":118}," tracer ",[37,1581,1582],{"class":114},"=",[37,1584,1513],{"class":150},[37,1586,155],{"class":154},[37,1588,1589],{"class":118},"spans",[37,1591,223],{"class":154},[37,1593,137],{"class":114},[37,1595,1596,1599,1601,1604,1606,1609,1611,1615,1617,1619],{"class":39,"line":217},[37,1597,1598],{"class":118},"app",[37,1600,943],{"class":114},[37,1602,1603],{"class":150},"use",[37,1605,155],{"class":154},[37,1607,1608],{"class":118},"tracer",[37,1610,943],{"class":114},[37,1612,1614],{"class":1613},"sy9f4","middleware",[37,1616,223],{"class":154},[37,1618,1569],{"class":114},[37,1620,1621],{"class":246},"               \u002F\u002F every operation\n",[37,1623,1624,1626,1628,1630,1632,1634,1637,1639,1641,1644,1646,1648,1650,1652],{"class":39,"line":1205},[37,1625,1598],{"class":118},[37,1627,943],{"class":114},[37,1629,1603],{"class":150},[37,1631,155],{"class":154},[37,1633,134],{"class":128},[37,1635,1636],{"class":46},"post",[37,1638,134],{"class":128},[37,1640,194],{"class":114},[37,1642,1643],{"class":118}," tracer",[37,1645,943],{"class":114},[37,1647,1614],{"class":1613},[37,1649,223],{"class":154},[37,1651,1569],{"class":114},[37,1653,1654],{"class":246},"       \u002F\u002F or one entity's\n",[37,1656,1657],{"class":39,"line":1211},[37,1658,144],{"emptyLinePlaceholder":143},[37,1660,1661,1663,1666,1668,1670,1672,1674,1676],{"class":39,"line":1217},[37,1662,1550],{"class":1010},[37,1664,1665],{"class":118}," measured ",[37,1667,1582],{"class":114},[37,1669,1518],{"class":150},[37,1671,155],{"class":154},[37,1673,1598],{"class":118},[37,1675,223],{"class":154},[37,1677,137],{"class":114},[37,1679,1680,1682,1684,1687,1689,1692,1694,1697,1699],{"class":39,"line":1223},[37,1681,1589],{"class":118},[37,1683,943],{"class":114},[37,1685,1686],{"class":150},"push",[37,1688,155],{"class":154},[37,1690,1691],{"class":118},"measured",[37,1693,943],{"class":114},[37,1695,1696],{"class":1613},"sink",[37,1698,223],{"class":154},[37,1700,137],{"class":114},[37,1702,1704],{"class":39,"line":1703},10,[37,1705,144],{"emptyLinePlaceholder":143},[37,1707,1709,1711,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744],{"class":39,"line":1708},11,[37,1710,1550],{"class":1010},[37,1712,1713],{"class":118}," exporter ",[37,1715,1582],{"class":114},[37,1717,197],{"class":150},[37,1719,155],{"class":154},[37,1721,179],{"class":114},[37,1723,182],{"class":164},[37,1725,168],{"class":114},[37,1727,129],{"class":128},[37,1729,189],{"class":46},[37,1731,134],{"class":128},[37,1733,194],{"class":114},[37,1735,1518],{"class":164},[37,1737,168],{"class":114},[37,1739,1665],{"class":118},[37,1741,220],{"class":114},[37,1743,223],{"class":154},[37,1745,137],{"class":114},[37,1747,1749,1751,1753,1755,1757,1760,1762,1764,1766],{"class":39,"line":1748},12,[37,1750,1589],{"class":118},[37,1752,943],{"class":114},[37,1754,1686],{"class":150},[37,1756,155],{"class":154},[37,1758,1759],{"class":118},"exporter",[37,1761,943],{"class":114},[37,1763,1696],{"class":1613},[37,1765,223],{"class":154},[37,1767,137],{"class":114},[13,1769,1770,1771,1774,1775,1779],{},"The order matters: ",[16,1772,1773],{},"tracing()"," opens the span every log line of the call will carry. Nothing is\nopened while the list is empty. The list belongs to the app, so an app replaced by a\n",[1267,1776,1778],{"href":1777},"\u002Fdocs\u002Frun\u002Flifecycle","reload"," stops feeding the metrics of the one that replaced it.",[1781,1782,1783],"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 .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 .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 .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 .sHtqg, html code.shiki .sHtqg{--shiki-light:#E53935;--shiki-default:#93CFC0;--shiki-dark:#F07178}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 pre.shiki code .sWI7z, html code.shiki .sWI7z{--shiki-light:#E2931D;--shiki-default:#93CFC0;--shiki-dark:#FFCB6B}html pre.shiki code .slmMI, html code.shiki .slmMI{--shiki-light:#FF5370;--shiki-default:#EE9F6B;--shiki-dark:#FF9CAC}html pre.shiki code .s3dPA, html code.shiki .s3dPA{--shiki-light:#F76D47;--shiki-default:#EE9F6B;--shiki-dark:#F78C6C}html pre.shiki code .svHQO, html code.shiki .svHQO{--shiki-light:#91B859;--shiki-default:#8FCF86;--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 .sBZYL, html code.shiki .sBZYL{--shiki-light:#E2931D;--shiki-default:#EFCD8F;--shiki-dark:#FFCB6B}html pre.shiki code .shDkW, html code.shiki .shDkW{--shiki-light:#E53935;--shiki-default:#C9B6EA;--shiki-dark:#F07178}html pre.shiki code .shDUQ, html code.shiki .shDUQ{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#DDE5DA;--shiki-default-font-style:inherit;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .ssXpW, html code.shiki .ssXpW{--shiki-light:#E53935;--shiki-default:#DDE5DA;--shiki-dark:#F07178}html pre.shiki code .sy9f4, html code.shiki .sy9f4{--shiki-light:#90A4AE;--shiki-default:#93CFC0;--shiki-dark:#BABED8}",{"title":33,"searchDepth":140,"depth":140,"links":1785},[1786,1787,1788,1789,1794,1795,1796,1797,1798],{"id":97,"depth":140,"text":98},{"id":495,"depth":140,"text":496},{"id":659,"depth":140,"text":660},{"id":689,"depth":140,"text":690,"children":1790},[1791,1792,1793],{"id":707,"depth":147,"text":708},{"id":814,"depth":147,"text":815},{"id":881,"depth":147,"text":882},{"id":946,"depth":140,"text":947},{"id":1084,"depth":140,"text":1085},{"id":1130,"depth":140,"text":1131},{"id":1293,"depth":140,"text":1294},{"id":1495,"depth":140,"text":1496},"A span per operation, one trace across processes, and what each step costs.","md",[18],"task",{},"\u002Fdocs\u002Frun\u002Fobserve",{"title":8,"description":1799},"docs\u002F6.run\u002F4.observe",null,[1809,1810],"configuration","handler","_oFdv-SUGaQ-8VJf7_kggJ_aljKQcwP582b6OXhOisY",[1813,1816,1819,1822,1825,1828,1831,1834,1837,1842,1846,1851,1855,1859,1863,1867,1871,1876,1880,1884,1889,1893,1898,1902,1905,1909,1912,1915,1917,1921,1925,1929,1933,1937,1941,1945,1949,1952,1955,1958,1961,1964,1967,1970,1973,1976,1979],{"path":1814,"title":1815,"uses":1807},"\u002Fdocs\u002Fconcepts\u002Fentity","Entity",{"path":1817,"title":1818,"uses":1807},"\u002Fdocs\u002Fconcepts\u002Fhandler","Handler",{"path":1820,"title":1821,"uses":1807},"\u002Fdocs\u002Fconcepts\u002Frepository","Repository",{"path":1823,"title":1824,"uses":1807},"\u002Fdocs\u002Fconcepts\u002Ffrond","Frond",{"path":1826,"title":1827,"uses":1807},"\u002Fdocs\u002Fconcepts\u002Ffacade","Facade",{"path":1829,"title":1830,"uses":1807},"\u002Fdocs\u002Fconcepts\u002Ffact","Fact",{"path":1832,"title":1833,"uses":1807},"\u002Fdocs\u002Fconcepts\u002Fport","Port",{"path":1835,"title":1836,"uses":1807},"\u002Fdocs\u002Fconcepts\u002Fconfiguration","Configuration",{"path":1838,"title":1839,"uses":1840},"\u002Fdocs\u002Faccess\u002Fauthentication","Authentication",[1841,532],"port",{"path":1843,"title":1844,"uses":1845},"\u002Fdocs\u002Faccess\u002Fstate","Keep a caller's state",[1809,1810],{"path":1847,"title":1848,"uses":1849},"\u002Fdocs\u002Fdata\u002Fsql","SQLite or Postgres",[1850,1809],"entity",{"path":1852,"title":1853,"uses":1854},"\u002Fdocs\u002Fdata\u002Fseveral-databases","Several databases",[1809,1850],{"path":1856,"title":1857,"uses":1858},"\u002Fdocs\u002Fdata\u002Fcomputed-field","A computed field",[1850,1841],{"path":1860,"title":1861,"uses":1862},"\u002Fdocs\u002Fdata\u002Fevolve","Evolve a schema",[1850],{"path":1864,"title":1865,"uses":1866},"\u002Fdocs\u002Fdata\u002Fseeds","Seed data",[1850],{"path":1868,"title":1869,"uses":1870},"\u002Fdocs\u002Fdata\u002Fvalues","Read settings and secrets",[1850,1809],{"path":1872,"title":1873,"uses":1874},"\u002Fdocs\u002Fdata\u002Fmirror","Mirror a source you cannot query",[1875],"repository",{"path":1877,"title":1878,"uses":1879},"\u002Fdocs\u002Fdata\u002Ftogether","Two writes as one",[1875],{"path":1881,"title":1882,"uses":1883},"\u002Fdocs\u002Fbehaviour\u002Faround-every-call","Around every call",[1841,532],{"path":1885,"title":1886,"uses":1887},"\u002Fdocs\u002Fbehaviour\u002Ffinish-a-fact","Finish a fact",[1888],"fact",{"path":1890,"title":1891,"uses":1892},"\u002Fdocs\u002Fserve\u002Frest-graphql","REST, OpenAPI, GraphQL",[1810,1809],{"path":1894,"title":1895,"uses":1896},"\u002Fdocs\u002Fserve\u002Fpages","Pages: queries and commands",[1810,1897],"facade",{"path":1899,"title":1900,"uses":1901},"\u002Fdocs\u002Fserve\u002Fforms","A form",[1850],{"path":1269,"title":1903,"uses":1904},"An admin panel",[1810],{"path":1906,"title":1907,"uses":1908},"\u002Fdocs\u002Frun\u002Fdeploy","Deploy a split",[1809,532],{"path":1285,"title":1910,"uses":1911},"Secure calls between processes",[1809,532],{"path":1777,"title":1913,"uses":1914},"Reload and shut down",[1809],{"path":1804,"title":8,"uses":1916},[1809,1810],{"path":1918,"title":1919,"uses":1920},"\u002Fdocs\u002Frun\u002Fdev-panel","The dev panel",[1810],{"path":1922,"title":1923,"uses":1924},"\u002Fdocs\u002Frun\u002Ftest","Test",[1850,1841],{"path":1926,"title":1927,"uses":1928},"\u002Fdocs\u002Fadopt\u002Fnew-project","Start a project",[532,1809],{"path":1930,"title":1931,"uses":1932},"\u002Fdocs\u002Fadopt\u002Fexisting-app","Add Fougere to an existing app",[532,1809],{"path":1934,"title":1935,"uses":1936},"\u002Fdocs\u002Fadopt\u002Fbring-your-schema","Bring your schema",[1850],{"path":1938,"title":1939,"uses":1940},"\u002Fdocs\u002Fadopt\u002Fhosts","Pick a host",[1809],{"path":1942,"title":1943,"uses":1944},"\u002Fdocs\u002Fadopt\u002Fanother-repository","A frond from another repository",[1897,532],{"path":1946,"title":1947,"uses":1948},"\u002Fdocs\u002Fadopt\u002Fdemos","Demos",[],{"path":1950,"title":1951,"uses":1807},"\u002Fdocs\u002Fextending\u002Fscan","How the scan reads a project",{"path":1953,"title":1954,"uses":1807},"\u002Fdocs\u002Fextending\u002Fwithout-compiler","Boot without the compiler",{"path":1956,"title":1957,"uses":1807},"\u002Fdocs\u002Fextending\u002Fboot","The boot, step by step",{"path":1959,"title":1960,"uses":1807},"\u002Fdocs\u002Fextending\u002Fcard-and-wire","The card and the wire",{"path":1962,"title":1963,"uses":1807},"\u002Fdocs\u002Fextending\u002Fextension-points","Registries and extension points",{"path":1965,"title":1966,"uses":1807},"\u002Fdocs\u002Fextending\u002Fvocabulary","Teach a word",{"path":1968,"title":1969,"uses":1807},"\u002Fdocs\u002Fextending\u002Fextensions","Run code at boot and shutdown",{"path":1971,"title":1972,"uses":1807},"\u002Fdocs\u002Fextending\u002Fsource-adapter","Write a source adapter",{"path":1974,"title":1975,"uses":1807},"\u002Fdocs\u002Fextending\u002Fsurface","Write a surface",{"path":1977,"title":1978,"uses":1807},"\u002Fdocs\u002Fextending\u002Fforeign-frond","A frond in another language",{"path":1980,"title":1981,"uses":1807},"\u002Fdocs","What is Fougere",[1983],{"title":1984,"path":1980,"stem":1985,"children":1986,"page":-1},"Docs","docs",[1987,1989,2010,2019,2040,2049,2062,2078,2095],{"title":1981,"path":1980,"stem":1988},"docs\u002Findex",{"title":1990,"path":1991,"stem":1992,"children":1993,"page":5},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F1.concepts",[1994,1996,1998,2000,2002,2004,2006,2008],{"title":1815,"path":1814,"stem":1995},"docs\u002F1.concepts\u002F1.entity",{"title":1818,"path":1817,"stem":1997},"docs\u002F1.concepts\u002F2.handler",{"title":1821,"path":1820,"stem":1999},"docs\u002F1.concepts\u002F3.repository",{"title":1824,"path":1823,"stem":2001},"docs\u002F1.concepts\u002F4.frond",{"title":1827,"path":1826,"stem":2003},"docs\u002F1.concepts\u002F5.facade",{"title":1830,"path":1829,"stem":2005},"docs\u002F1.concepts\u002F6.fact",{"title":1833,"path":1832,"stem":2007},"docs\u002F1.concepts\u002F7.port",{"title":1836,"path":1835,"stem":2009},"docs\u002F1.concepts\u002F8.configuration",{"title":2011,"path":2012,"stem":2013,"children":2014,"page":5},"Access","\u002Fdocs\u002Faccess","docs\u002F2.access",[2015,2017],{"title":1839,"path":1838,"stem":2016},"docs\u002F2.access\u002F1.authentication",{"title":1844,"path":1843,"stem":2018},"docs\u002F2.access\u002F2.state",{"title":2020,"path":2021,"stem":2022,"children":2023,"page":5},"Data","\u002Fdocs\u002Fdata","docs\u002F3.data",[2024,2026,2028,2030,2032,2034,2036,2038],{"title":1848,"path":1847,"stem":2025},"docs\u002F3.data\u002F1.sql",{"title":1853,"path":1852,"stem":2027},"docs\u002F3.data\u002F2.several-databases",{"title":1857,"path":1856,"stem":2029},"docs\u002F3.data\u002F3.computed-field",{"title":1861,"path":1860,"stem":2031},"docs\u002F3.data\u002F4.evolve",{"title":1865,"path":1864,"stem":2033},"docs\u002F3.data\u002F5.seeds",{"title":1869,"path":1868,"stem":2035},"docs\u002F3.data\u002F6.values",{"title":1873,"path":1872,"stem":2037},"docs\u002F3.data\u002F7.mirror",{"title":1878,"path":1877,"stem":2039},"docs\u002F3.data\u002F8.together",{"title":2041,"path":2042,"stem":2043,"children":2044,"page":5},"Behaviour","\u002Fdocs\u002Fbehaviour","docs\u002F4.behaviour",[2045,2047],{"title":1882,"path":1881,"stem":2046},"docs\u002F4.behaviour\u002F1.around-every-call",{"title":1886,"path":1885,"stem":2048},"docs\u002F4.behaviour\u002F2.finish-a-fact",{"title":2050,"path":2051,"stem":2052,"children":2053,"page":5},"Serve","\u002Fdocs\u002Fserve","docs\u002F5.serve",[2054,2056,2058,2060],{"title":1891,"path":1890,"stem":2055},"docs\u002F5.serve\u002F1.rest-graphql",{"title":1895,"path":1894,"stem":2057},"docs\u002F5.serve\u002F2.pages",{"title":1900,"path":1899,"stem":2059},"docs\u002F5.serve\u002F3.forms",{"title":1903,"path":1269,"stem":2061},"docs\u002F5.serve\u002F4.admin",{"title":2063,"path":2064,"stem":2065,"children":2066,"page":5},"Run","\u002Fdocs\u002Frun","docs\u002F6.run",[2067,2069,2071,2073,2074,2076],{"title":1907,"path":1906,"stem":2068},"docs\u002F6.run\u002F1.deploy",{"title":1910,"path":1285,"stem":2070},"docs\u002F6.run\u002F2.secure",{"title":1913,"path":1777,"stem":2072},"docs\u002F6.run\u002F3.lifecycle",{"title":8,"path":1804,"stem":1806},{"title":1919,"path":1918,"stem":2075},"docs\u002F6.run\u002F5.dev-panel",{"title":1923,"path":1922,"stem":2077},"docs\u002F6.run\u002F6.test",{"title":2079,"path":2080,"stem":2081,"children":2082,"page":5},"Adopt","\u002Fdocs\u002Fadopt","docs\u002F7.adopt",[2083,2085,2087,2089,2091,2093],{"title":1927,"path":1926,"stem":2084},"docs\u002F7.adopt\u002F1.new-project",{"title":1931,"path":1930,"stem":2086},"docs\u002F7.adopt\u002F2.existing-app",{"title":1935,"path":1934,"stem":2088},"docs\u002F7.adopt\u002F3.bring-your-schema",{"title":1939,"path":1938,"stem":2090},"docs\u002F7.adopt\u002F4.hosts",{"title":1943,"path":1942,"stem":2092},"docs\u002F7.adopt\u002F5.another-repository",{"title":1947,"path":1946,"stem":2094},"docs\u002F7.adopt\u002F6.demos",{"title":2096,"path":2097,"stem":2098,"children":2099,"page":5},"Extending","\u002Fdocs\u002Fextending","docs\u002F8.extending",[2100,2102,2104,2106,2108,2110,2112,2114,2116,2118],{"title":1951,"path":1950,"stem":2101},"docs\u002F8.extending\u002F1.scan",{"title":1954,"path":1953,"stem":2103},"docs\u002F8.extending\u002F10.without-compiler",{"title":1957,"path":1956,"stem":2105},"docs\u002F8.extending\u002F2.boot",{"title":1960,"path":1959,"stem":2107},"docs\u002F8.extending\u002F3.card-and-wire",{"title":1963,"path":1962,"stem":2109},"docs\u002F8.extending\u002F4.extension-points",{"title":1966,"path":1965,"stem":2111},"docs\u002F8.extending\u002F5.vocabulary",{"title":1969,"path":1968,"stem":2113},"docs\u002F8.extending\u002F6.extensions",{"title":1972,"path":1971,"stem":2115},"docs\u002F8.extending\u002F7.source-adapter",{"title":1975,"path":1974,"stem":2117},"docs\u002F8.extending\u002F8.surface",{"title":1978,"path":1977,"stem":2119},"docs\u002F8.extending\u002F9.foreign-frond",{"id":2121,"title":174,"body":2122,"count":2242,"description":33,"entry":2127,"extension":1800,"meta":11689,"name":174,"navigation":143,"path":11690,"runnable":143,"seo":11691,"stem":11692,"__hash__":11693},"demo\u002Fdemo\u002Fobservability.md",{"type":10,"value":2123,"toc":11687},[2124,11684],[2125,2126,2128,4580,5558,5699,5998,6157,7319,7742,8034,8173,8286,8709,8848,8953,11076,11590],"code-tree",{"default-value":2127},"catalog\u002Ffronds\u002Fcatalog\u002Fentities\u002FProduct.ts",[27,2129,2133],{"className":2130,"code":2131,"filename":2132,"language":1800,"meta":33,"style":33},"language-md shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","# fougere-demo-observability\n\n## 0.0.3-alpha.13\n\n### Patch Changes\n\n- @fougere\u002Fcalls@0.30.0-alpha.5\n- @fougere\u002Fcompiler@0.30.0-alpha.5\n- @fougere\u002Fcontainer@0.30.0-alpha.5\n- @fougere\u002Fcore@0.30.0-alpha.5\n- @fougere\u002Fdefaults@0.30.0-alpha.5\n- @fougere\u002Flog@0.30.0-alpha.5\n- @fougere\u002Fobservability@0.30.0-alpha.5\n- @fougere\u002Fschema@0.30.0-alpha.5\n- @fougere\u002Ftransport-http@0.30.0-alpha.5\n\n## 0.0.3-alpha.12\n\n### Patch Changes\n\n- @fougere\u002Fcalls@0.30.0-alpha.4\n- @fougere\u002Fcompiler@0.30.0-alpha.4\n- @fougere\u002Fcontainer@0.30.0-alpha.4\n- @fougere\u002Fcore@0.30.0-alpha.4\n- @fougere\u002Fdefaults@0.30.0-alpha.4\n- @fougere\u002Flog@0.30.0-alpha.4\n- @fougere\u002Fobservability@0.30.0-alpha.4\n- @fougere\u002Fschema@0.30.0-alpha.4\n- @fougere\u002Ftransport-http@0.30.0-alpha.4\n\n## 0.0.3-alpha.11\n\n### Patch Changes\n\n- Updated dependencies [e9a8641]\n  - @fougere\u002Fcore@0.30.0-alpha.3\n  - @fougere\u002Fdefaults@0.30.0-alpha.3\n  - @fougere\u002Fcalls@0.30.0-alpha.3\n  - @fougere\u002Fcompiler@0.30.0-alpha.3\n  - @fougere\u002Flog@0.30.0-alpha.3\n  - @fougere\u002Fobservability@0.30.0-alpha.3\n  - @fougere\u002Ftransport-http@0.30.0-alpha.3\n  - @fougere\u002Fcontainer@0.30.0-alpha.3\n  - @fougere\u002Fschema@0.30.0-alpha.3\n\n## 0.0.3-alpha.10\n\n### Patch Changes\n\n- Updated dependencies [8044dcd]\n- Updated dependencies [d179658]\n- Updated dependencies [28e9ba0]\n- Updated dependencies [1835e30]\n  - @fougere\u002Fcore@0.30.0-alpha.2\n  - @fougere\u002Fdefaults@0.30.0-alpha.2\n  - @fougere\u002Fcalls@0.30.0-alpha.2\n  - @fougere\u002Fobservability@0.30.0-alpha.2\n  - @fougere\u002Ftransport-http@0.30.0-alpha.2\n  - @fougere\u002Fcompiler@0.30.0-alpha.2\n  - @fougere\u002Flog@0.30.0-alpha.2\n  - @fougere\u002Fcontainer@0.30.0-alpha.2\n  - @fougere\u002Fschema@0.30.0-alpha.2\n\n## 0.0.3-alpha.9\n\n### Patch Changes\n\n- @fougere\u002Flog@0.30.0-alpha.1\n- @fougere\u002Fcalls@0.30.0-alpha.1\n- @fougere\u002Fcompiler@0.30.0-alpha.1\n- @fougere\u002Fcontainer@0.30.0-alpha.1\n- @fougere\u002Fcore@0.30.0-alpha.1\n- @fougere\u002Fdefaults@0.30.0-alpha.1\n- @fougere\u002Fobservability@0.30.0-alpha.1\n- @fougere\u002Fschema@0.30.0-alpha.1\n- @fougere\u002Ftransport-http@0.30.0-alpha.1\n\n## 0.0.3-alpha.8\n\n### Patch Changes\n\n- Updated dependencies [4c0ebd2]\n- Updated dependencies [aa2be0c]\n- Updated dependencies [565ca0f]\n- Updated dependencies [50e1b8d]\n- Updated dependencies [85aff54]\n- Updated dependencies [2d67956]\n- Updated dependencies [c5c3105]\n- Updated dependencies [2d67956]\n- Updated dependencies [85aff54]\n  - @fougere\u002Fschema@0.30.0-alpha.0\n  - @fougere\u002Fcore@0.30.0-alpha.0\n  - @fougere\u002Fcompiler@0.30.0-alpha.0\n  - @fougere\u002Fcalls@0.30.0-alpha.0\n  - @fougere\u002Fdefaults@0.30.0-alpha.0\n  - @fougere\u002Flog@0.30.0-alpha.0\n  - @fougere\u002Fobservability@0.30.0-alpha.0\n  - @fougere\u002Ftransport-http@0.30.0-alpha.0\n  - @fougere\u002Fcontainer@0.30.0-alpha.0\n\n## 0.0.3-alpha.7\n\n### Patch Changes\n\n- Updated dependencies\n- Updated dependencies\n- Updated dependencies\n- Updated dependencies\n  - @fougere\u002Fschema@0.29.0-alpha.3\n  - @fougere\u002Fdefaults@0.29.0-alpha.3\n  - @fougere\u002Fcore@0.29.0-alpha.3\n  - @fougere\u002Fcalls@0.29.0-alpha.3\n  - @fougere\u002Fcompiler@0.29.0-alpha.3\n  - @fougere\u002Flog@0.29.0-alpha.3\n  - @fougere\u002Fobservability@0.29.0-alpha.3\n  - @fougere\u002Ftransport-http@0.29.0-alpha.3\n  - @fougere\u002Fcontainer@0.29.0-alpha.3\n\n## 0.0.3-alpha.6\n\n### Patch Changes\n\n- @fougere\u002Fcalls@0.29.0-alpha.2\n- @fougere\u002Fcompiler@0.29.0-alpha.2\n- @fougere\u002Fcontainer@0.29.0-alpha.2\n- @fougere\u002Fcore@0.29.0-alpha.2\n- @fougere\u002Fdefaults@0.29.0-alpha.2\n- @fougere\u002Flog@0.29.0-alpha.2\n- @fougere\u002Fobservability@0.29.0-alpha.2\n- @fougere\u002Fschema@0.29.0-alpha.2\n- @fougere\u002Ftransport-http@0.29.0-alpha.2\n\n## 0.0.3-alpha.5\n\n### Patch Changes\n\n- Updated dependencies [081f171]\n  - @fougere\u002Fcore@0.29.0-alpha.1\n  - @fougere\u002Fcalls@0.29.0-alpha.0\n  - @fougere\u002Fcompiler@0.29.0-alpha.0\n  - @fougere\u002Fdefaults@0.29.0-alpha.1\n  - @fougere\u002Flog@0.29.0-alpha.0\n  - @fougere\u002Fobservability@0.29.0-alpha.0\n  - @fougere\u002Ftransport-http@0.29.0-alpha.1\n\n## 0.0.3-alpha.4\n\n### Patch Changes\n\n- Updated dependencies [f1d2704]\n- Updated dependencies [aea7c71]\n- Updated dependencies [5f1c3ca]\n- Updated dependencies [5b1ad11]\n- Updated dependencies [5f1c3ca]\n- Updated dependencies [10df4b0]\n- Updated dependencies [9d69fcd]\n- Updated dependencies [4da370e]\n- Updated dependencies [5f1c3ca]\n- Updated dependencies [00b592c]\n- Updated dependencies [97fbc58]\n- Updated dependencies [08c7bc1]\n- Updated dependencies [1ea472e]\n- Updated dependencies [49cbfde]\n- Updated dependencies [6d694d1]\n- Updated dependencies [5f1c3ca]\n- Updated dependencies [2a6116c]\n- Updated dependencies [5f1c3ca]\n- Updated dependencies [d7cde0c]\n- Updated dependencies [57ddbb7]\n- Updated dependencies [9e17181]\n- Updated dependencies [d4eab03]\n- Updated dependencies [6b84cec]\n- Updated dependencies [87a261d]\n- Updated dependencies [f7ccbed]\n  - @fougere\u002Fcore@1.0.0-alpha.1\n  - @fougere\u002Fcompiler@1.0.0-alpha.1\n  - @fougere\u002Fdefaults@1.0.0-alpha.1\n  - @fougere\u002Fschema@0.28.0-alpha.1\n  - @fougere\u002Ftransport-http@0.28.0-alpha.1\n  - @fougere\u002Fcalls@1.0.0-alpha.1\n  - @fougere\u002Flog@1.0.0-alpha.1\n  - @fougere\u002Fobservability@1.0.0-alpha.1\n\n## 0.0.3-alpha.3\n\n### Patch Changes\n\n- Updated dependencies [26f7987]\n- Updated dependencies\n- Updated dependencies\n- Updated dependencies\n- Updated dependencies [32923e6]\n- Updated dependencies\n- Updated dependencies\n- Updated dependencies [771e703]\n  - @fougere\u002Fschema@0.9.0-alpha.1\n  - @fougere\u002Fcore@0.9.0-alpha.1\n  - @fougere\u002Fcontainer@0.8.3-alpha.1\n  - @fougere\u002Fcompiler@1.0.0-alpha.1\n  - @fougere\u002Fcalls@1.0.0-alpha.1\n  - @fougere\u002Fobservability@1.0.0-alpha.1\n  - @fougere\u002Ftransport-http@0.8.3-alpha.1\n\n## 0.0.3-alpha.2\n\n### Patch Changes\n\n- Updated dependencies [9d24851]\n  - @fougere\u002Fcore@0.8.0-alpha.1\n  - @fougere\u002Fcalls@0.8.0-alpha.0\n  - @fougere\u002Fobservability@0.8.0-alpha.0\n  - @fougere\u002Ftransport-http@0.8.0-alpha.1\n\n## 0.0.3-alpha.1\n\n### Patch Changes\n\n- Updated dependencies [6ec8e59]\n- Updated dependencies [2478927]\n- Updated dependencies [525b53e]\n- Updated dependencies [34fbd31]\n- Updated dependencies [089ebb9]\n- Updated dependencies [f9b5837]\n- Updated dependencies [ae49d25]\n- Updated dependencies [6d9034d]\n- Updated dependencies [c5f5791]\n- Updated dependencies [4287ac9]\n  - @fougere\u002Fcore@0.7.0-alpha.1\n  - @fougere\u002Fcalls@0.7.0-alpha.0\n  - @fougere\u002Fobservability@0.7.0-alpha.0\n  - @fougere\u002Ftransport-http@0.7.0-alpha.1\n\n## 0.0.3-alpha.0\n\n### Patch Changes\n\n- Updated dependencies\n- Updated dependencies\n- Updated dependencies\n- Updated dependencies\n- Updated dependencies [7376ae7]\n- Updated dependencies\n- Updated dependencies\n- Updated dependencies\n- Updated dependencies [47513d2]\n  - @fougere\u002Fschema@0.6.0-alpha.1\n  - @fougere\u002Fcore@0.6.0-alpha.1\n  - @fougere\u002Fcalls@0.6.0-alpha.0\n  - @fougere\u002Fobservability@0.6.0-alpha.0\n  - @fougere\u002Ftransport-http@0.6.0-alpha.1\n\n## 0.0.2\n\n### Patch Changes\n\n- Updated dependencies [8f390d0]\n- Updated dependencies [b1e1133]\n- Updated dependencies [5076973]\n- Updated dependencies [cf5b52e]\n- Updated dependencies [8f21270]\n- Updated dependencies [6f08e19]\n- Updated dependencies [934d74d]\n  - @fougere\u002Fcore@0.5.0\n  - @fougere\u002Fcontainer@0.5.0\n  - @fougere\u002Fschema@0.5.0\n  - @fougere\u002Ftransport-http@0.5.0\n  - @fougere\u002Fobservability@0.5.0\n  - @fougere\u002Fcalls@0.5.0\n\n## 0.0.2-alpha.4\n\n### Patch Changes\n\n- Updated dependencies\n- Updated dependencies [934d74d]\n  - @fougere\u002Fcore@0.5.0-alpha.1\n  - @fougere\u002Fcontainer@0.5.0-alpha.1\n  - @fougere\u002Fobservability@0.5.0-alpha.1\n  - @fougere\u002Fschema@0.5.0-alpha.1\n  - @fougere\u002Ftransport-http@0.5.0-alpha.1\n  - @fougere\u002Fcalls@0.5.0-alpha.0\n\n","CHANGELOG.md",[16,2134,2135,2145,2149,2157,2161,2169,2173,2181,2188,2195,2202,2209,2216,2224,2232,2240,2245,2253,2258,2265,2270,2278,2286,2294,2302,2310,2318,2326,2334,2342,2347,2355,2360,2367,2372,2389,2398,2406,2414,2422,2430,2438,2446,2454,2462,2467,2475,2480,2487,2492,2506,2520,2534,2548,2556,2564,2572,2580,2588,2596,2604,2612,2620,2625,2633,2638,2645,2650,2658,2666,2674,2682,2690,2698,2706,2714,2722,2727,2735,2740,2747,2752,2766,2780,2794,2808,2822,2836,2850,2863,2876,2884,2892,2900,2908,2916,2924,2932,2940,2948,2953,2961,2966,2973,2978,2986,2993,3000,3007,3015,3023,3031,3039,3047,3055,3063,3071,3079,3084,3092,3097,3104,3109,3117,3125,3133,3141,3149,3157,3165,3173,3181,3186,3194,3199,3206,3211,3225,3233,3241,3249,3257,3265,3273,3281,3286,3294,3299,3306,3311,3325,3339,3353,3367,3380,3394,3408,3422,3435,3449,3463,3477,3491,3505,3519,3532,3546,3559,3573,3587,3601,3615,3629,3643,3657,3665,3673,3681,3689,3697,3705,3713,3721,3726,3734,3739,3746,3751,3765,3772,3779,3786,3800,3807,3814,3828,3836,3844,3852,3859,3866,3873,3881,3886,3894,3899,3906,3911,3925,3933,3941,3949,3957,3962,3970,3975,3982,3987,4001,4015,4029,4043,4057,4071,4085,4099,4113,4127,4135,4143,4151,4159,4164,4172,4177,4184,4189,4196,4203,4210,4217,4231,4238,4245,4252,4266,4274,4282,4290,4298,4306,4311,4319,4324,4331,4336,4350,4364,4378,4392,4406,4420,4434,4442,4450,4458,4466,4474,4482,4487,4495,4500,4507,4512,4519,4532,4540,4548,4556,4564,4572],{"__ignoreMap":33},[37,2136,2137,2141],{"class":39,"line":40},[37,2138,2140],{"class":2139},"sd7zb","#",[37,2142,2144],{"class":2143},"sLf9K"," fougere-demo-observability\n",[37,2146,2147],{"class":39,"line":140},[37,2148,144],{"emptyLinePlaceholder":143},[37,2150,2151,2154],{"class":39,"line":147},[37,2152,2153],{"class":2139},"##",[37,2155,2156],{"class":2143}," 0.0.3-alpha.13\n",[37,2158,2159],{"class":39,"line":161},[37,2160,144],{"emptyLinePlaceholder":143},[37,2162,2163,2166],{"class":39,"line":217},[37,2164,2165],{"class":2139},"###",[37,2167,2168],{"class":2143}," Patch Changes\n",[37,2170,2171],{"class":39,"line":1205},[37,2172,144],{"emptyLinePlaceholder":143},[37,2174,2175,2178],{"class":39,"line":1211},[37,2176,2177],{"class":114},"-",[37,2179,2180],{"class":118}," @fougere\u002Fcalls@0.30.0-alpha.5\n",[37,2182,2183,2185],{"class":39,"line":1217},[37,2184,2177],{"class":114},[37,2186,2187],{"class":118}," @fougere\u002Fcompiler@0.30.0-alpha.5\n",[37,2189,2190,2192],{"class":39,"line":1223},[37,2191,2177],{"class":114},[37,2193,2194],{"class":118}," @fougere\u002Fcontainer@0.30.0-alpha.5\n",[37,2196,2197,2199],{"class":39,"line":1703},[37,2198,2177],{"class":114},[37,2200,2201],{"class":118}," @fougere\u002Fcore@0.30.0-alpha.5\n",[37,2203,2204,2206],{"class":39,"line":1708},[37,2205,2177],{"class":114},[37,2207,2208],{"class":118}," @fougere\u002Fdefaults@0.30.0-alpha.5\n",[37,2210,2211,2213],{"class":39,"line":1748},[37,2212,2177],{"class":114},[37,2214,2215],{"class":118}," @fougere\u002Flog@0.30.0-alpha.5\n",[37,2217,2219,2221],{"class":39,"line":2218},13,[37,2220,2177],{"class":114},[37,2222,2223],{"class":118}," @fougere\u002Fobservability@0.30.0-alpha.5\n",[37,2225,2227,2229],{"class":39,"line":2226},14,[37,2228,2177],{"class":114},[37,2230,2231],{"class":118}," @fougere\u002Fschema@0.30.0-alpha.5\n",[37,2233,2235,2237],{"class":39,"line":2234},15,[37,2236,2177],{"class":114},[37,2238,2239],{"class":118}," @fougere\u002Ftransport-http@0.30.0-alpha.5\n",[37,2241,2243],{"class":39,"line":2242},16,[37,2244,144],{"emptyLinePlaceholder":143},[37,2246,2248,2250],{"class":39,"line":2247},17,[37,2249,2153],{"class":2139},[37,2251,2252],{"class":2143}," 0.0.3-alpha.12\n",[37,2254,2256],{"class":39,"line":2255},18,[37,2257,144],{"emptyLinePlaceholder":143},[37,2259,2261,2263],{"class":39,"line":2260},19,[37,2262,2165],{"class":2139},[37,2264,2168],{"class":2143},[37,2266,2268],{"class":39,"line":2267},20,[37,2269,144],{"emptyLinePlaceholder":143},[37,2271,2273,2275],{"class":39,"line":2272},21,[37,2274,2177],{"class":114},[37,2276,2277],{"class":118}," @fougere\u002Fcalls@0.30.0-alpha.4\n",[37,2279,2281,2283],{"class":39,"line":2280},22,[37,2282,2177],{"class":114},[37,2284,2285],{"class":118}," @fougere\u002Fcompiler@0.30.0-alpha.4\n",[37,2287,2289,2291],{"class":39,"line":2288},23,[37,2290,2177],{"class":114},[37,2292,2293],{"class":118}," @fougere\u002Fcontainer@0.30.0-alpha.4\n",[37,2295,2297,2299],{"class":39,"line":2296},24,[37,2298,2177],{"class":114},[37,2300,2301],{"class":118}," @fougere\u002Fcore@0.30.0-alpha.4\n",[37,2303,2305,2307],{"class":39,"line":2304},25,[37,2306,2177],{"class":114},[37,2308,2309],{"class":118}," @fougere\u002Fdefaults@0.30.0-alpha.4\n",[37,2311,2313,2315],{"class":39,"line":2312},26,[37,2314,2177],{"class":114},[37,2316,2317],{"class":118}," @fougere\u002Flog@0.30.0-alpha.4\n",[37,2319,2321,2323],{"class":39,"line":2320},27,[37,2322,2177],{"class":114},[37,2324,2325],{"class":118}," @fougere\u002Fobservability@0.30.0-alpha.4\n",[37,2327,2329,2331],{"class":39,"line":2328},28,[37,2330,2177],{"class":114},[37,2332,2333],{"class":118}," @fougere\u002Fschema@0.30.0-alpha.4\n",[37,2335,2337,2339],{"class":39,"line":2336},29,[37,2338,2177],{"class":114},[37,2340,2341],{"class":118}," @fougere\u002Ftransport-http@0.30.0-alpha.4\n",[37,2343,2345],{"class":39,"line":2344},30,[37,2346,144],{"emptyLinePlaceholder":143},[37,2348,2350,2352],{"class":39,"line":2349},31,[37,2351,2153],{"class":2139},[37,2353,2354],{"class":2143}," 0.0.3-alpha.11\n",[37,2356,2358],{"class":39,"line":2357},32,[37,2359,144],{"emptyLinePlaceholder":143},[37,2361,2363,2365],{"class":39,"line":2362},33,[37,2364,2165],{"class":2139},[37,2366,2168],{"class":2143},[37,2368,2370],{"class":39,"line":2369},34,[37,2371,144],{"emptyLinePlaceholder":143},[37,2373,2375,2377,2380,2383,2386],{"class":39,"line":2374},35,[37,2376,2177],{"class":114},[37,2378,2379],{"class":118}," Updated dependencies ",[37,2381,2382],{"class":114},"[",[37,2384,2385],{"class":46},"e9a8641",[37,2387,2388],{"class":114},"]\n",[37,2390,2392,2395],{"class":39,"line":2391},36,[37,2393,2394],{"class":114},"  -",[37,2396,2397],{"class":118}," @fougere\u002Fcore@0.30.0-alpha.3\n",[37,2399,2401,2403],{"class":39,"line":2400},37,[37,2402,2394],{"class":114},[37,2404,2405],{"class":118}," @fougere\u002Fdefaults@0.30.0-alpha.3\n",[37,2407,2409,2411],{"class":39,"line":2408},38,[37,2410,2394],{"class":114},[37,2412,2413],{"class":118}," @fougere\u002Fcalls@0.30.0-alpha.3\n",[37,2415,2417,2419],{"class":39,"line":2416},39,[37,2418,2394],{"class":114},[37,2420,2421],{"class":118}," @fougere\u002Fcompiler@0.30.0-alpha.3\n",[37,2423,2425,2427],{"class":39,"line":2424},40,[37,2426,2394],{"class":114},[37,2428,2429],{"class":118}," @fougere\u002Flog@0.30.0-alpha.3\n",[37,2431,2433,2435],{"class":39,"line":2432},41,[37,2434,2394],{"class":114},[37,2436,2437],{"class":118}," @fougere\u002Fobservability@0.30.0-alpha.3\n",[37,2439,2441,2443],{"class":39,"line":2440},42,[37,2442,2394],{"class":114},[37,2444,2445],{"class":118}," @fougere\u002Ftransport-http@0.30.0-alpha.3\n",[37,2447,2449,2451],{"class":39,"line":2448},43,[37,2450,2394],{"class":114},[37,2452,2453],{"class":118}," @fougere\u002Fcontainer@0.30.0-alpha.3\n",[37,2455,2457,2459],{"class":39,"line":2456},44,[37,2458,2394],{"class":114},[37,2460,2461],{"class":118}," @fougere\u002Fschema@0.30.0-alpha.3\n",[37,2463,2465],{"class":39,"line":2464},45,[37,2466,144],{"emptyLinePlaceholder":143},[37,2468,2470,2472],{"class":39,"line":2469},46,[37,2471,2153],{"class":2139},[37,2473,2474],{"class":2143}," 0.0.3-alpha.10\n",[37,2476,2478],{"class":39,"line":2477},47,[37,2479,144],{"emptyLinePlaceholder":143},[37,2481,2483,2485],{"class":39,"line":2482},48,[37,2484,2165],{"class":2139},[37,2486,2168],{"class":2143},[37,2488,2490],{"class":39,"line":2489},49,[37,2491,144],{"emptyLinePlaceholder":143},[37,2493,2495,2497,2499,2501,2504],{"class":39,"line":2494},50,[37,2496,2177],{"class":114},[37,2498,2379],{"class":118},[37,2500,2382],{"class":114},[37,2502,2503],{"class":46},"8044dcd",[37,2505,2388],{"class":114},[37,2507,2509,2511,2513,2515,2518],{"class":39,"line":2508},51,[37,2510,2177],{"class":114},[37,2512,2379],{"class":118},[37,2514,2382],{"class":114},[37,2516,2517],{"class":46},"d179658",[37,2519,2388],{"class":114},[37,2521,2523,2525,2527,2529,2532],{"class":39,"line":2522},52,[37,2524,2177],{"class":114},[37,2526,2379],{"class":118},[37,2528,2382],{"class":114},[37,2530,2531],{"class":46},"28e9ba0",[37,2533,2388],{"class":114},[37,2535,2537,2539,2541,2543,2546],{"class":39,"line":2536},53,[37,2538,2177],{"class":114},[37,2540,2379],{"class":118},[37,2542,2382],{"class":114},[37,2544,2545],{"class":46},"1835e30",[37,2547,2388],{"class":114},[37,2549,2551,2553],{"class":39,"line":2550},54,[37,2552,2394],{"class":114},[37,2554,2555],{"class":118}," @fougere\u002Fcore@0.30.0-alpha.2\n",[37,2557,2559,2561],{"class":39,"line":2558},55,[37,2560,2394],{"class":114},[37,2562,2563],{"class":118}," @fougere\u002Fdefaults@0.30.0-alpha.2\n",[37,2565,2567,2569],{"class":39,"line":2566},56,[37,2568,2394],{"class":114},[37,2570,2571],{"class":118}," @fougere\u002Fcalls@0.30.0-alpha.2\n",[37,2573,2575,2577],{"class":39,"line":2574},57,[37,2576,2394],{"class":114},[37,2578,2579],{"class":118}," @fougere\u002Fobservability@0.30.0-alpha.2\n",[37,2581,2583,2585],{"class":39,"line":2582},58,[37,2584,2394],{"class":114},[37,2586,2587],{"class":118}," @fougere\u002Ftransport-http@0.30.0-alpha.2\n",[37,2589,2591,2593],{"class":39,"line":2590},59,[37,2592,2394],{"class":114},[37,2594,2595],{"class":118}," @fougere\u002Fcompiler@0.30.0-alpha.2\n",[37,2597,2599,2601],{"class":39,"line":2598},60,[37,2600,2394],{"class":114},[37,2602,2603],{"class":118}," @fougere\u002Flog@0.30.0-alpha.2\n",[37,2605,2607,2609],{"class":39,"line":2606},61,[37,2608,2394],{"class":114},[37,2610,2611],{"class":118}," @fougere\u002Fcontainer@0.30.0-alpha.2\n",[37,2613,2615,2617],{"class":39,"line":2614},62,[37,2616,2394],{"class":114},[37,2618,2619],{"class":118}," @fougere\u002Fschema@0.30.0-alpha.2\n",[37,2621,2623],{"class":39,"line":2622},63,[37,2624,144],{"emptyLinePlaceholder":143},[37,2626,2628,2630],{"class":39,"line":2627},64,[37,2629,2153],{"class":2139},[37,2631,2632],{"class":2143}," 0.0.3-alpha.9\n",[37,2634,2636],{"class":39,"line":2635},65,[37,2637,144],{"emptyLinePlaceholder":143},[37,2639,2641,2643],{"class":39,"line":2640},66,[37,2642,2165],{"class":2139},[37,2644,2168],{"class":2143},[37,2646,2648],{"class":39,"line":2647},67,[37,2649,144],{"emptyLinePlaceholder":143},[37,2651,2653,2655],{"class":39,"line":2652},68,[37,2654,2177],{"class":114},[37,2656,2657],{"class":118}," @fougere\u002Flog@0.30.0-alpha.1\n",[37,2659,2661,2663],{"class":39,"line":2660},69,[37,2662,2177],{"class":114},[37,2664,2665],{"class":118}," @fougere\u002Fcalls@0.30.0-alpha.1\n",[37,2667,2669,2671],{"class":39,"line":2668},70,[37,2670,2177],{"class":114},[37,2672,2673],{"class":118}," @fougere\u002Fcompiler@0.30.0-alpha.1\n",[37,2675,2677,2679],{"class":39,"line":2676},71,[37,2678,2177],{"class":114},[37,2680,2681],{"class":118}," @fougere\u002Fcontainer@0.30.0-alpha.1\n",[37,2683,2685,2687],{"class":39,"line":2684},72,[37,2686,2177],{"class":114},[37,2688,2689],{"class":118}," @fougere\u002Fcore@0.30.0-alpha.1\n",[37,2691,2693,2695],{"class":39,"line":2692},73,[37,2694,2177],{"class":114},[37,2696,2697],{"class":118}," @fougere\u002Fdefaults@0.30.0-alpha.1\n",[37,2699,2701,2703],{"class":39,"line":2700},74,[37,2702,2177],{"class":114},[37,2704,2705],{"class":118}," @fougere\u002Fobservability@0.30.0-alpha.1\n",[37,2707,2709,2711],{"class":39,"line":2708},75,[37,2710,2177],{"class":114},[37,2712,2713],{"class":118}," @fougere\u002Fschema@0.30.0-alpha.1\n",[37,2715,2717,2719],{"class":39,"line":2716},76,[37,2718,2177],{"class":114},[37,2720,2721],{"class":118}," @fougere\u002Ftransport-http@0.30.0-alpha.1\n",[37,2723,2725],{"class":39,"line":2724},77,[37,2726,144],{"emptyLinePlaceholder":143},[37,2728,2730,2732],{"class":39,"line":2729},78,[37,2731,2153],{"class":2139},[37,2733,2734],{"class":2143}," 0.0.3-alpha.8\n",[37,2736,2738],{"class":39,"line":2737},79,[37,2739,144],{"emptyLinePlaceholder":143},[37,2741,2743,2745],{"class":39,"line":2742},80,[37,2744,2165],{"class":2139},[37,2746,2168],{"class":2143},[37,2748,2750],{"class":39,"line":2749},81,[37,2751,144],{"emptyLinePlaceholder":143},[37,2753,2755,2757,2759,2761,2764],{"class":39,"line":2754},82,[37,2756,2177],{"class":114},[37,2758,2379],{"class":118},[37,2760,2382],{"class":114},[37,2762,2763],{"class":46},"4c0ebd2",[37,2765,2388],{"class":114},[37,2767,2769,2771,2773,2775,2778],{"class":39,"line":2768},83,[37,2770,2177],{"class":114},[37,2772,2379],{"class":118},[37,2774,2382],{"class":114},[37,2776,2777],{"class":46},"aa2be0c",[37,2779,2388],{"class":114},[37,2781,2783,2785,2787,2789,2792],{"class":39,"line":2782},84,[37,2784,2177],{"class":114},[37,2786,2379],{"class":118},[37,2788,2382],{"class":114},[37,2790,2791],{"class":46},"565ca0f",[37,2793,2388],{"class":114},[37,2795,2797,2799,2801,2803,2806],{"class":39,"line":2796},85,[37,2798,2177],{"class":114},[37,2800,2379],{"class":118},[37,2802,2382],{"class":114},[37,2804,2805],{"class":46},"50e1b8d",[37,2807,2388],{"class":114},[37,2809,2811,2813,2815,2817,2820],{"class":39,"line":2810},86,[37,2812,2177],{"class":114},[37,2814,2379],{"class":118},[37,2816,2382],{"class":114},[37,2818,2819],{"class":46},"85aff54",[37,2821,2388],{"class":114},[37,2823,2825,2827,2829,2831,2834],{"class":39,"line":2824},87,[37,2826,2177],{"class":114},[37,2828,2379],{"class":118},[37,2830,2382],{"class":114},[37,2832,2833],{"class":46},"2d67956",[37,2835,2388],{"class":114},[37,2837,2839,2841,2843,2845,2848],{"class":39,"line":2838},88,[37,2840,2177],{"class":114},[37,2842,2379],{"class":118},[37,2844,2382],{"class":114},[37,2846,2847],{"class":46},"c5c3105",[37,2849,2388],{"class":114},[37,2851,2853,2855,2857,2859,2861],{"class":39,"line":2852},89,[37,2854,2177],{"class":114},[37,2856,2379],{"class":118},[37,2858,2382],{"class":114},[37,2860,2833],{"class":46},[37,2862,2388],{"class":114},[37,2864,2866,2868,2870,2872,2874],{"class":39,"line":2865},90,[37,2867,2177],{"class":114},[37,2869,2379],{"class":118},[37,2871,2382],{"class":114},[37,2873,2819],{"class":46},[37,2875,2388],{"class":114},[37,2877,2879,2881],{"class":39,"line":2878},91,[37,2880,2394],{"class":114},[37,2882,2883],{"class":118}," @fougere\u002Fschema@0.30.0-alpha.0\n",[37,2885,2887,2889],{"class":39,"line":2886},92,[37,2888,2394],{"class":114},[37,2890,2891],{"class":118}," @fougere\u002Fcore@0.30.0-alpha.0\n",[37,2893,2895,2897],{"class":39,"line":2894},93,[37,2896,2394],{"class":114},[37,2898,2899],{"class":118}," @fougere\u002Fcompiler@0.30.0-alpha.0\n",[37,2901,2903,2905],{"class":39,"line":2902},94,[37,2904,2394],{"class":114},[37,2906,2907],{"class":118}," @fougere\u002Fcalls@0.30.0-alpha.0\n",[37,2909,2911,2913],{"class":39,"line":2910},95,[37,2912,2394],{"class":114},[37,2914,2915],{"class":118}," @fougere\u002Fdefaults@0.30.0-alpha.0\n",[37,2917,2919,2921],{"class":39,"line":2918},96,[37,2920,2394],{"class":114},[37,2922,2923],{"class":118}," @fougere\u002Flog@0.30.0-alpha.0\n",[37,2925,2927,2929],{"class":39,"line":2926},97,[37,2928,2394],{"class":114},[37,2930,2931],{"class":118}," @fougere\u002Fobservability@0.30.0-alpha.0\n",[37,2933,2935,2937],{"class":39,"line":2934},98,[37,2936,2394],{"class":114},[37,2938,2939],{"class":118}," @fougere\u002Ftransport-http@0.30.0-alpha.0\n",[37,2941,2943,2945],{"class":39,"line":2942},99,[37,2944,2394],{"class":114},[37,2946,2947],{"class":118}," @fougere\u002Fcontainer@0.30.0-alpha.0\n",[37,2949,2951],{"class":39,"line":2950},100,[37,2952,144],{"emptyLinePlaceholder":143},[37,2954,2956,2958],{"class":39,"line":2955},101,[37,2957,2153],{"class":2139},[37,2959,2960],{"class":2143}," 0.0.3-alpha.7\n",[37,2962,2964],{"class":39,"line":2963},102,[37,2965,144],{"emptyLinePlaceholder":143},[37,2967,2969,2971],{"class":39,"line":2968},103,[37,2970,2165],{"class":2139},[37,2972,2168],{"class":2143},[37,2974,2976],{"class":39,"line":2975},104,[37,2977,144],{"emptyLinePlaceholder":143},[37,2979,2981,2983],{"class":39,"line":2980},105,[37,2982,2177],{"class":114},[37,2984,2985],{"class":118}," Updated dependencies\n",[37,2987,2989,2991],{"class":39,"line":2988},106,[37,2990,2177],{"class":114},[37,2992,2985],{"class":118},[37,2994,2996,2998],{"class":39,"line":2995},107,[37,2997,2177],{"class":114},[37,2999,2985],{"class":118},[37,3001,3003,3005],{"class":39,"line":3002},108,[37,3004,2177],{"class":114},[37,3006,2985],{"class":118},[37,3008,3010,3012],{"class":39,"line":3009},109,[37,3011,2394],{"class":114},[37,3013,3014],{"class":118}," @fougere\u002Fschema@0.29.0-alpha.3\n",[37,3016,3018,3020],{"class":39,"line":3017},110,[37,3019,2394],{"class":114},[37,3021,3022],{"class":118}," @fougere\u002Fdefaults@0.29.0-alpha.3\n",[37,3024,3026,3028],{"class":39,"line":3025},111,[37,3027,2394],{"class":114},[37,3029,3030],{"class":118}," @fougere\u002Fcore@0.29.0-alpha.3\n",[37,3032,3034,3036],{"class":39,"line":3033},112,[37,3035,2394],{"class":114},[37,3037,3038],{"class":118}," @fougere\u002Fcalls@0.29.0-alpha.3\n",[37,3040,3042,3044],{"class":39,"line":3041},113,[37,3043,2394],{"class":114},[37,3045,3046],{"class":118}," @fougere\u002Fcompiler@0.29.0-alpha.3\n",[37,3048,3050,3052],{"class":39,"line":3049},114,[37,3051,2394],{"class":114},[37,3053,3054],{"class":118}," @fougere\u002Flog@0.29.0-alpha.3\n",[37,3056,3058,3060],{"class":39,"line":3057},115,[37,3059,2394],{"class":114},[37,3061,3062],{"class":118}," @fougere\u002Fobservability@0.29.0-alpha.3\n",[37,3064,3066,3068],{"class":39,"line":3065},116,[37,3067,2394],{"class":114},[37,3069,3070],{"class":118}," @fougere\u002Ftransport-http@0.29.0-alpha.3\n",[37,3072,3074,3076],{"class":39,"line":3073},117,[37,3075,2394],{"class":114},[37,3077,3078],{"class":118}," @fougere\u002Fcontainer@0.29.0-alpha.3\n",[37,3080,3082],{"class":39,"line":3081},118,[37,3083,144],{"emptyLinePlaceholder":143},[37,3085,3087,3089],{"class":39,"line":3086},119,[37,3088,2153],{"class":2139},[37,3090,3091],{"class":2143}," 0.0.3-alpha.6\n",[37,3093,3095],{"class":39,"line":3094},120,[37,3096,144],{"emptyLinePlaceholder":143},[37,3098,3100,3102],{"class":39,"line":3099},121,[37,3101,2165],{"class":2139},[37,3103,2168],{"class":2143},[37,3105,3107],{"class":39,"line":3106},122,[37,3108,144],{"emptyLinePlaceholder":143},[37,3110,3112,3114],{"class":39,"line":3111},123,[37,3113,2177],{"class":114},[37,3115,3116],{"class":118}," @fougere\u002Fcalls@0.29.0-alpha.2\n",[37,3118,3120,3122],{"class":39,"line":3119},124,[37,3121,2177],{"class":114},[37,3123,3124],{"class":118}," @fougere\u002Fcompiler@0.29.0-alpha.2\n",[37,3126,3128,3130],{"class":39,"line":3127},125,[37,3129,2177],{"class":114},[37,3131,3132],{"class":118}," @fougere\u002Fcontainer@0.29.0-alpha.2\n",[37,3134,3136,3138],{"class":39,"line":3135},126,[37,3137,2177],{"class":114},[37,3139,3140],{"class":118}," @fougere\u002Fcore@0.29.0-alpha.2\n",[37,3142,3144,3146],{"class":39,"line":3143},127,[37,3145,2177],{"class":114},[37,3147,3148],{"class":118}," @fougere\u002Fdefaults@0.29.0-alpha.2\n",[37,3150,3152,3154],{"class":39,"line":3151},128,[37,3153,2177],{"class":114},[37,3155,3156],{"class":118}," @fougere\u002Flog@0.29.0-alpha.2\n",[37,3158,3160,3162],{"class":39,"line":3159},129,[37,3161,2177],{"class":114},[37,3163,3164],{"class":118}," @fougere\u002Fobservability@0.29.0-alpha.2\n",[37,3166,3168,3170],{"class":39,"line":3167},130,[37,3169,2177],{"class":114},[37,3171,3172],{"class":118}," @fougere\u002Fschema@0.29.0-alpha.2\n",[37,3174,3176,3178],{"class":39,"line":3175},131,[37,3177,2177],{"class":114},[37,3179,3180],{"class":118}," @fougere\u002Ftransport-http@0.29.0-alpha.2\n",[37,3182,3184],{"class":39,"line":3183},132,[37,3185,144],{"emptyLinePlaceholder":143},[37,3187,3189,3191],{"class":39,"line":3188},133,[37,3190,2153],{"class":2139},[37,3192,3193],{"class":2143}," 0.0.3-alpha.5\n",[37,3195,3197],{"class":39,"line":3196},134,[37,3198,144],{"emptyLinePlaceholder":143},[37,3200,3202,3204],{"class":39,"line":3201},135,[37,3203,2165],{"class":2139},[37,3205,2168],{"class":2143},[37,3207,3209],{"class":39,"line":3208},136,[37,3210,144],{"emptyLinePlaceholder":143},[37,3212,3214,3216,3218,3220,3223],{"class":39,"line":3213},137,[37,3215,2177],{"class":114},[37,3217,2379],{"class":118},[37,3219,2382],{"class":114},[37,3221,3222],{"class":46},"081f171",[37,3224,2388],{"class":114},[37,3226,3228,3230],{"class":39,"line":3227},138,[37,3229,2394],{"class":114},[37,3231,3232],{"class":118}," @fougere\u002Fcore@0.29.0-alpha.1\n",[37,3234,3236,3238],{"class":39,"line":3235},139,[37,3237,2394],{"class":114},[37,3239,3240],{"class":118}," @fougere\u002Fcalls@0.29.0-alpha.0\n",[37,3242,3244,3246],{"class":39,"line":3243},140,[37,3245,2394],{"class":114},[37,3247,3248],{"class":118}," @fougere\u002Fcompiler@0.29.0-alpha.0\n",[37,3250,3252,3254],{"class":39,"line":3251},141,[37,3253,2394],{"class":114},[37,3255,3256],{"class":118}," @fougere\u002Fdefaults@0.29.0-alpha.1\n",[37,3258,3260,3262],{"class":39,"line":3259},142,[37,3261,2394],{"class":114},[37,3263,3264],{"class":118}," @fougere\u002Flog@0.29.0-alpha.0\n",[37,3266,3268,3270],{"class":39,"line":3267},143,[37,3269,2394],{"class":114},[37,3271,3272],{"class":118}," @fougere\u002Fobservability@0.29.0-alpha.0\n",[37,3274,3276,3278],{"class":39,"line":3275},144,[37,3277,2394],{"class":114},[37,3279,3280],{"class":118}," @fougere\u002Ftransport-http@0.29.0-alpha.1\n",[37,3282,3284],{"class":39,"line":3283},145,[37,3285,144],{"emptyLinePlaceholder":143},[37,3287,3289,3291],{"class":39,"line":3288},146,[37,3290,2153],{"class":2139},[37,3292,3293],{"class":2143}," 0.0.3-alpha.4\n",[37,3295,3297],{"class":39,"line":3296},147,[37,3298,144],{"emptyLinePlaceholder":143},[37,3300,3302,3304],{"class":39,"line":3301},148,[37,3303,2165],{"class":2139},[37,3305,2168],{"class":2143},[37,3307,3309],{"class":39,"line":3308},149,[37,3310,144],{"emptyLinePlaceholder":143},[37,3312,3314,3316,3318,3320,3323],{"class":39,"line":3313},150,[37,3315,2177],{"class":114},[37,3317,2379],{"class":118},[37,3319,2382],{"class":114},[37,3321,3322],{"class":46},"f1d2704",[37,3324,2388],{"class":114},[37,3326,3328,3330,3332,3334,3337],{"class":39,"line":3327},151,[37,3329,2177],{"class":114},[37,3331,2379],{"class":118},[37,3333,2382],{"class":114},[37,3335,3336],{"class":46},"aea7c71",[37,3338,2388],{"class":114},[37,3340,3342,3344,3346,3348,3351],{"class":39,"line":3341},152,[37,3343,2177],{"class":114},[37,3345,2379],{"class":118},[37,3347,2382],{"class":114},[37,3349,3350],{"class":46},"5f1c3ca",[37,3352,2388],{"class":114},[37,3354,3356,3358,3360,3362,3365],{"class":39,"line":3355},153,[37,3357,2177],{"class":114},[37,3359,2379],{"class":118},[37,3361,2382],{"class":114},[37,3363,3364],{"class":46},"5b1ad11",[37,3366,2388],{"class":114},[37,3368,3370,3372,3374,3376,3378],{"class":39,"line":3369},154,[37,3371,2177],{"class":114},[37,3373,2379],{"class":118},[37,3375,2382],{"class":114},[37,3377,3350],{"class":46},[37,3379,2388],{"class":114},[37,3381,3383,3385,3387,3389,3392],{"class":39,"line":3382},155,[37,3384,2177],{"class":114},[37,3386,2379],{"class":118},[37,3388,2382],{"class":114},[37,3390,3391],{"class":46},"10df4b0",[37,3393,2388],{"class":114},[37,3395,3397,3399,3401,3403,3406],{"class":39,"line":3396},156,[37,3398,2177],{"class":114},[37,3400,2379],{"class":118},[37,3402,2382],{"class":114},[37,3404,3405],{"class":46},"9d69fcd",[37,3407,2388],{"class":114},[37,3409,3411,3413,3415,3417,3420],{"class":39,"line":3410},157,[37,3412,2177],{"class":114},[37,3414,2379],{"class":118},[37,3416,2382],{"class":114},[37,3418,3419],{"class":46},"4da370e",[37,3421,2388],{"class":114},[37,3423,3425,3427,3429,3431,3433],{"class":39,"line":3424},158,[37,3426,2177],{"class":114},[37,3428,2379],{"class":118},[37,3430,2382],{"class":114},[37,3432,3350],{"class":46},[37,3434,2388],{"class":114},[37,3436,3438,3440,3442,3444,3447],{"class":39,"line":3437},159,[37,3439,2177],{"class":114},[37,3441,2379],{"class":118},[37,3443,2382],{"class":114},[37,3445,3446],{"class":46},"00b592c",[37,3448,2388],{"class":114},[37,3450,3452,3454,3456,3458,3461],{"class":39,"line":3451},160,[37,3453,2177],{"class":114},[37,3455,2379],{"class":118},[37,3457,2382],{"class":114},[37,3459,3460],{"class":46},"97fbc58",[37,3462,2388],{"class":114},[37,3464,3466,3468,3470,3472,3475],{"class":39,"line":3465},161,[37,3467,2177],{"class":114},[37,3469,2379],{"class":118},[37,3471,2382],{"class":114},[37,3473,3474],{"class":46},"08c7bc1",[37,3476,2388],{"class":114},[37,3478,3480,3482,3484,3486,3489],{"class":39,"line":3479},162,[37,3481,2177],{"class":114},[37,3483,2379],{"class":118},[37,3485,2382],{"class":114},[37,3487,3488],{"class":46},"1ea472e",[37,3490,2388],{"class":114},[37,3492,3494,3496,3498,3500,3503],{"class":39,"line":3493},163,[37,3495,2177],{"class":114},[37,3497,2379],{"class":118},[37,3499,2382],{"class":114},[37,3501,3502],{"class":46},"49cbfde",[37,3504,2388],{"class":114},[37,3506,3508,3510,3512,3514,3517],{"class":39,"line":3507},164,[37,3509,2177],{"class":114},[37,3511,2379],{"class":118},[37,3513,2382],{"class":114},[37,3515,3516],{"class":46},"6d694d1",[37,3518,2388],{"class":114},[37,3520,3522,3524,3526,3528,3530],{"class":39,"line":3521},165,[37,3523,2177],{"class":114},[37,3525,2379],{"class":118},[37,3527,2382],{"class":114},[37,3529,3350],{"class":46},[37,3531,2388],{"class":114},[37,3533,3535,3537,3539,3541,3544],{"class":39,"line":3534},166,[37,3536,2177],{"class":114},[37,3538,2379],{"class":118},[37,3540,2382],{"class":114},[37,3542,3543],{"class":46},"2a6116c",[37,3545,2388],{"class":114},[37,3547,3549,3551,3553,3555,3557],{"class":39,"line":3548},167,[37,3550,2177],{"class":114},[37,3552,2379],{"class":118},[37,3554,2382],{"class":114},[37,3556,3350],{"class":46},[37,3558,2388],{"class":114},[37,3560,3562,3564,3566,3568,3571],{"class":39,"line":3561},168,[37,3563,2177],{"class":114},[37,3565,2379],{"class":118},[37,3567,2382],{"class":114},[37,3569,3570],{"class":46},"d7cde0c",[37,3572,2388],{"class":114},[37,3574,3576,3578,3580,3582,3585],{"class":39,"line":3575},169,[37,3577,2177],{"class":114},[37,3579,2379],{"class":118},[37,3581,2382],{"class":114},[37,3583,3584],{"class":46},"57ddbb7",[37,3586,2388],{"class":114},[37,3588,3590,3592,3594,3596,3599],{"class":39,"line":3589},170,[37,3591,2177],{"class":114},[37,3593,2379],{"class":118},[37,3595,2382],{"class":114},[37,3597,3598],{"class":46},"9e17181",[37,3600,2388],{"class":114},[37,3602,3604,3606,3608,3610,3613],{"class":39,"line":3603},171,[37,3605,2177],{"class":114},[37,3607,2379],{"class":118},[37,3609,2382],{"class":114},[37,3611,3612],{"class":46},"d4eab03",[37,3614,2388],{"class":114},[37,3616,3618,3620,3622,3624,3627],{"class":39,"line":3617},172,[37,3619,2177],{"class":114},[37,3621,2379],{"class":118},[37,3623,2382],{"class":114},[37,3625,3626],{"class":46},"6b84cec",[37,3628,2388],{"class":114},[37,3630,3632,3634,3636,3638,3641],{"class":39,"line":3631},173,[37,3633,2177],{"class":114},[37,3635,2379],{"class":118},[37,3637,2382],{"class":114},[37,3639,3640],{"class":46},"87a261d",[37,3642,2388],{"class":114},[37,3644,3646,3648,3650,3652,3655],{"class":39,"line":3645},174,[37,3647,2177],{"class":114},[37,3649,2379],{"class":118},[37,3651,2382],{"class":114},[37,3653,3654],{"class":46},"f7ccbed",[37,3656,2388],{"class":114},[37,3658,3660,3662],{"class":39,"line":3659},175,[37,3661,2394],{"class":114},[37,3663,3664],{"class":118}," @fougere\u002Fcore@1.0.0-alpha.1\n",[37,3666,3668,3670],{"class":39,"line":3667},176,[37,3669,2394],{"class":114},[37,3671,3672],{"class":118}," @fougere\u002Fcompiler@1.0.0-alpha.1\n",[37,3674,3676,3678],{"class":39,"line":3675},177,[37,3677,2394],{"class":114},[37,3679,3680],{"class":118}," @fougere\u002Fdefaults@1.0.0-alpha.1\n",[37,3682,3684,3686],{"class":39,"line":3683},178,[37,3685,2394],{"class":114},[37,3687,3688],{"class":118}," @fougere\u002Fschema@0.28.0-alpha.1\n",[37,3690,3692,3694],{"class":39,"line":3691},179,[37,3693,2394],{"class":114},[37,3695,3696],{"class":118}," @fougere\u002Ftransport-http@0.28.0-alpha.1\n",[37,3698,3700,3702],{"class":39,"line":3699},180,[37,3701,2394],{"class":114},[37,3703,3704],{"class":118}," @fougere\u002Fcalls@1.0.0-alpha.1\n",[37,3706,3708,3710],{"class":39,"line":3707},181,[37,3709,2394],{"class":114},[37,3711,3712],{"class":118}," @fougere\u002Flog@1.0.0-alpha.1\n",[37,3714,3716,3718],{"class":39,"line":3715},182,[37,3717,2394],{"class":114},[37,3719,3720],{"class":118}," @fougere\u002Fobservability@1.0.0-alpha.1\n",[37,3722,3724],{"class":39,"line":3723},183,[37,3725,144],{"emptyLinePlaceholder":143},[37,3727,3729,3731],{"class":39,"line":3728},184,[37,3730,2153],{"class":2139},[37,3732,3733],{"class":2143}," 0.0.3-alpha.3\n",[37,3735,3737],{"class":39,"line":3736},185,[37,3738,144],{"emptyLinePlaceholder":143},[37,3740,3742,3744],{"class":39,"line":3741},186,[37,3743,2165],{"class":2139},[37,3745,2168],{"class":2143},[37,3747,3749],{"class":39,"line":3748},187,[37,3750,144],{"emptyLinePlaceholder":143},[37,3752,3754,3756,3758,3760,3763],{"class":39,"line":3753},188,[37,3755,2177],{"class":114},[37,3757,2379],{"class":118},[37,3759,2382],{"class":114},[37,3761,3762],{"class":46},"26f7987",[37,3764,2388],{"class":114},[37,3766,3768,3770],{"class":39,"line":3767},189,[37,3769,2177],{"class":114},[37,3771,2985],{"class":118},[37,3773,3775,3777],{"class":39,"line":3774},190,[37,3776,2177],{"class":114},[37,3778,2985],{"class":118},[37,3780,3782,3784],{"class":39,"line":3781},191,[37,3783,2177],{"class":114},[37,3785,2985],{"class":118},[37,3787,3789,3791,3793,3795,3798],{"class":39,"line":3788},192,[37,3790,2177],{"class":114},[37,3792,2379],{"class":118},[37,3794,2382],{"class":114},[37,3796,3797],{"class":46},"32923e6",[37,3799,2388],{"class":114},[37,3801,3803,3805],{"class":39,"line":3802},193,[37,3804,2177],{"class":114},[37,3806,2985],{"class":118},[37,3808,3810,3812],{"class":39,"line":3809},194,[37,3811,2177],{"class":114},[37,3813,2985],{"class":118},[37,3815,3817,3819,3821,3823,3826],{"class":39,"line":3816},195,[37,3818,2177],{"class":114},[37,3820,2379],{"class":118},[37,3822,2382],{"class":114},[37,3824,3825],{"class":46},"771e703",[37,3827,2388],{"class":114},[37,3829,3831,3833],{"class":39,"line":3830},196,[37,3832,2394],{"class":114},[37,3834,3835],{"class":118}," @fougere\u002Fschema@0.9.0-alpha.1\n",[37,3837,3839,3841],{"class":39,"line":3838},197,[37,3840,2394],{"class":114},[37,3842,3843],{"class":118}," @fougere\u002Fcore@0.9.0-alpha.1\n",[37,3845,3847,3849],{"class":39,"line":3846},198,[37,3848,2394],{"class":114},[37,3850,3851],{"class":118}," @fougere\u002Fcontainer@0.8.3-alpha.1\n",[37,3853,3855,3857],{"class":39,"line":3854},199,[37,3856,2394],{"class":114},[37,3858,3672],{"class":118},[37,3860,3862,3864],{"class":39,"line":3861},200,[37,3863,2394],{"class":114},[37,3865,3704],{"class":118},[37,3867,3869,3871],{"class":39,"line":3868},201,[37,3870,2394],{"class":114},[37,3872,3720],{"class":118},[37,3874,3876,3878],{"class":39,"line":3875},202,[37,3877,2394],{"class":114},[37,3879,3880],{"class":118}," @fougere\u002Ftransport-http@0.8.3-alpha.1\n",[37,3882,3884],{"class":39,"line":3883},203,[37,3885,144],{"emptyLinePlaceholder":143},[37,3887,3889,3891],{"class":39,"line":3888},204,[37,3890,2153],{"class":2139},[37,3892,3893],{"class":2143}," 0.0.3-alpha.2\n",[37,3895,3897],{"class":39,"line":3896},205,[37,3898,144],{"emptyLinePlaceholder":143},[37,3900,3902,3904],{"class":39,"line":3901},206,[37,3903,2165],{"class":2139},[37,3905,2168],{"class":2143},[37,3907,3909],{"class":39,"line":3908},207,[37,3910,144],{"emptyLinePlaceholder":143},[37,3912,3914,3916,3918,3920,3923],{"class":39,"line":3913},208,[37,3915,2177],{"class":114},[37,3917,2379],{"class":118},[37,3919,2382],{"class":114},[37,3921,3922],{"class":46},"9d24851",[37,3924,2388],{"class":114},[37,3926,3928,3930],{"class":39,"line":3927},209,[37,3929,2394],{"class":114},[37,3931,3932],{"class":118}," @fougere\u002Fcore@0.8.0-alpha.1\n",[37,3934,3936,3938],{"class":39,"line":3935},210,[37,3937,2394],{"class":114},[37,3939,3940],{"class":118}," @fougere\u002Fcalls@0.8.0-alpha.0\n",[37,3942,3944,3946],{"class":39,"line":3943},211,[37,3945,2394],{"class":114},[37,3947,3948],{"class":118}," @fougere\u002Fobservability@0.8.0-alpha.0\n",[37,3950,3952,3954],{"class":39,"line":3951},212,[37,3953,2394],{"class":114},[37,3955,3956],{"class":118}," @fougere\u002Ftransport-http@0.8.0-alpha.1\n",[37,3958,3960],{"class":39,"line":3959},213,[37,3961,144],{"emptyLinePlaceholder":143},[37,3963,3965,3967],{"class":39,"line":3964},214,[37,3966,2153],{"class":2139},[37,3968,3969],{"class":2143}," 0.0.3-alpha.1\n",[37,3971,3973],{"class":39,"line":3972},215,[37,3974,144],{"emptyLinePlaceholder":143},[37,3976,3978,3980],{"class":39,"line":3977},216,[37,3979,2165],{"class":2139},[37,3981,2168],{"class":2143},[37,3983,3985],{"class":39,"line":3984},217,[37,3986,144],{"emptyLinePlaceholder":143},[37,3988,3990,3992,3994,3996,3999],{"class":39,"line":3989},218,[37,3991,2177],{"class":114},[37,3993,2379],{"class":118},[37,3995,2382],{"class":114},[37,3997,3998],{"class":46},"6ec8e59",[37,4000,2388],{"class":114},[37,4002,4004,4006,4008,4010,4013],{"class":39,"line":4003},219,[37,4005,2177],{"class":114},[37,4007,2379],{"class":118},[37,4009,2382],{"class":114},[37,4011,4012],{"class":46},"2478927",[37,4014,2388],{"class":114},[37,4016,4018,4020,4022,4024,4027],{"class":39,"line":4017},220,[37,4019,2177],{"class":114},[37,4021,2379],{"class":118},[37,4023,2382],{"class":114},[37,4025,4026],{"class":46},"525b53e",[37,4028,2388],{"class":114},[37,4030,4032,4034,4036,4038,4041],{"class":39,"line":4031},221,[37,4033,2177],{"class":114},[37,4035,2379],{"class":118},[37,4037,2382],{"class":114},[37,4039,4040],{"class":46},"34fbd31",[37,4042,2388],{"class":114},[37,4044,4046,4048,4050,4052,4055],{"class":39,"line":4045},222,[37,4047,2177],{"class":114},[37,4049,2379],{"class":118},[37,4051,2382],{"class":114},[37,4053,4054],{"class":46},"089ebb9",[37,4056,2388],{"class":114},[37,4058,4060,4062,4064,4066,4069],{"class":39,"line":4059},223,[37,4061,2177],{"class":114},[37,4063,2379],{"class":118},[37,4065,2382],{"class":114},[37,4067,4068],{"class":46},"f9b5837",[37,4070,2388],{"class":114},[37,4072,4074,4076,4078,4080,4083],{"class":39,"line":4073},224,[37,4075,2177],{"class":114},[37,4077,2379],{"class":118},[37,4079,2382],{"class":114},[37,4081,4082],{"class":46},"ae49d25",[37,4084,2388],{"class":114},[37,4086,4088,4090,4092,4094,4097],{"class":39,"line":4087},225,[37,4089,2177],{"class":114},[37,4091,2379],{"class":118},[37,4093,2382],{"class":114},[37,4095,4096],{"class":46},"6d9034d",[37,4098,2388],{"class":114},[37,4100,4102,4104,4106,4108,4111],{"class":39,"line":4101},226,[37,4103,2177],{"class":114},[37,4105,2379],{"class":118},[37,4107,2382],{"class":114},[37,4109,4110],{"class":46},"c5f5791",[37,4112,2388],{"class":114},[37,4114,4116,4118,4120,4122,4125],{"class":39,"line":4115},227,[37,4117,2177],{"class":114},[37,4119,2379],{"class":118},[37,4121,2382],{"class":114},[37,4123,4124],{"class":46},"4287ac9",[37,4126,2388],{"class":114},[37,4128,4130,4132],{"class":39,"line":4129},228,[37,4131,2394],{"class":114},[37,4133,4134],{"class":118}," @fougere\u002Fcore@0.7.0-alpha.1\n",[37,4136,4138,4140],{"class":39,"line":4137},229,[37,4139,2394],{"class":114},[37,4141,4142],{"class":118}," @fougere\u002Fcalls@0.7.0-alpha.0\n",[37,4144,4146,4148],{"class":39,"line":4145},230,[37,4147,2394],{"class":114},[37,4149,4150],{"class":118}," @fougere\u002Fobservability@0.7.0-alpha.0\n",[37,4152,4154,4156],{"class":39,"line":4153},231,[37,4155,2394],{"class":114},[37,4157,4158],{"class":118}," @fougere\u002Ftransport-http@0.7.0-alpha.1\n",[37,4160,4162],{"class":39,"line":4161},232,[37,4163,144],{"emptyLinePlaceholder":143},[37,4165,4167,4169],{"class":39,"line":4166},233,[37,4168,2153],{"class":2139},[37,4170,4171],{"class":2143}," 0.0.3-alpha.0\n",[37,4173,4175],{"class":39,"line":4174},234,[37,4176,144],{"emptyLinePlaceholder":143},[37,4178,4180,4182],{"class":39,"line":4179},235,[37,4181,2165],{"class":2139},[37,4183,2168],{"class":2143},[37,4185,4187],{"class":39,"line":4186},236,[37,4188,144],{"emptyLinePlaceholder":143},[37,4190,4192,4194],{"class":39,"line":4191},237,[37,4193,2177],{"class":114},[37,4195,2985],{"class":118},[37,4197,4199,4201],{"class":39,"line":4198},238,[37,4200,2177],{"class":114},[37,4202,2985],{"class":118},[37,4204,4206,4208],{"class":39,"line":4205},239,[37,4207,2177],{"class":114},[37,4209,2985],{"class":118},[37,4211,4213,4215],{"class":39,"line":4212},240,[37,4214,2177],{"class":114},[37,4216,2985],{"class":118},[37,4218,4220,4222,4224,4226,4229],{"class":39,"line":4219},241,[37,4221,2177],{"class":114},[37,4223,2379],{"class":118},[37,4225,2382],{"class":114},[37,4227,4228],{"class":46},"7376ae7",[37,4230,2388],{"class":114},[37,4232,4234,4236],{"class":39,"line":4233},242,[37,4235,2177],{"class":114},[37,4237,2985],{"class":118},[37,4239,4241,4243],{"class":39,"line":4240},243,[37,4242,2177],{"class":114},[37,4244,2985],{"class":118},[37,4246,4248,4250],{"class":39,"line":4247},244,[37,4249,2177],{"class":114},[37,4251,2985],{"class":118},[37,4253,4255,4257,4259,4261,4264],{"class":39,"line":4254},245,[37,4256,2177],{"class":114},[37,4258,2379],{"class":118},[37,4260,2382],{"class":114},[37,4262,4263],{"class":46},"47513d2",[37,4265,2388],{"class":114},[37,4267,4269,4271],{"class":39,"line":4268},246,[37,4270,2394],{"class":114},[37,4272,4273],{"class":118}," @fougere\u002Fschema@0.6.0-alpha.1\n",[37,4275,4277,4279],{"class":39,"line":4276},247,[37,4278,2394],{"class":114},[37,4280,4281],{"class":118}," @fougere\u002Fcore@0.6.0-alpha.1\n",[37,4283,4285,4287],{"class":39,"line":4284},248,[37,4286,2394],{"class":114},[37,4288,4289],{"class":118}," @fougere\u002Fcalls@0.6.0-alpha.0\n",[37,4291,4293,4295],{"class":39,"line":4292},249,[37,4294,2394],{"class":114},[37,4296,4297],{"class":118}," @fougere\u002Fobservability@0.6.0-alpha.0\n",[37,4299,4301,4303],{"class":39,"line":4300},250,[37,4302,2394],{"class":114},[37,4304,4305],{"class":118}," @fougere\u002Ftransport-http@0.6.0-alpha.1\n",[37,4307,4309],{"class":39,"line":4308},251,[37,4310,144],{"emptyLinePlaceholder":143},[37,4312,4314,4316],{"class":39,"line":4313},252,[37,4315,2153],{"class":2139},[37,4317,4318],{"class":2143}," 0.0.2\n",[37,4320,4322],{"class":39,"line":4321},253,[37,4323,144],{"emptyLinePlaceholder":143},[37,4325,4327,4329],{"class":39,"line":4326},254,[37,4328,2165],{"class":2139},[37,4330,2168],{"class":2143},[37,4332,4334],{"class":39,"line":4333},255,[37,4335,144],{"emptyLinePlaceholder":143},[37,4337,4339,4341,4343,4345,4348],{"class":39,"line":4338},256,[37,4340,2177],{"class":114},[37,4342,2379],{"class":118},[37,4344,2382],{"class":114},[37,4346,4347],{"class":46},"8f390d0",[37,4349,2388],{"class":114},[37,4351,4353,4355,4357,4359,4362],{"class":39,"line":4352},257,[37,4354,2177],{"class":114},[37,4356,2379],{"class":118},[37,4358,2382],{"class":114},[37,4360,4361],{"class":46},"b1e1133",[37,4363,2388],{"class":114},[37,4365,4367,4369,4371,4373,4376],{"class":39,"line":4366},258,[37,4368,2177],{"class":114},[37,4370,2379],{"class":118},[37,4372,2382],{"class":114},[37,4374,4375],{"class":46},"5076973",[37,4377,2388],{"class":114},[37,4379,4381,4383,4385,4387,4390],{"class":39,"line":4380},259,[37,4382,2177],{"class":114},[37,4384,2379],{"class":118},[37,4386,2382],{"class":114},[37,4388,4389],{"class":46},"cf5b52e",[37,4391,2388],{"class":114},[37,4393,4395,4397,4399,4401,4404],{"class":39,"line":4394},260,[37,4396,2177],{"class":114},[37,4398,2379],{"class":118},[37,4400,2382],{"class":114},[37,4402,4403],{"class":46},"8f21270",[37,4405,2388],{"class":114},[37,4407,4409,4411,4413,4415,4418],{"class":39,"line":4408},261,[37,4410,2177],{"class":114},[37,4412,2379],{"class":118},[37,4414,2382],{"class":114},[37,4416,4417],{"class":46},"6f08e19",[37,4419,2388],{"class":114},[37,4421,4423,4425,4427,4429,4432],{"class":39,"line":4422},262,[37,4424,2177],{"class":114},[37,4426,2379],{"class":118},[37,4428,2382],{"class":114},[37,4430,4431],{"class":46},"934d74d",[37,4433,2388],{"class":114},[37,4435,4437,4439],{"class":39,"line":4436},263,[37,4438,2394],{"class":114},[37,4440,4441],{"class":118}," @fougere\u002Fcore@0.5.0\n",[37,4443,4445,4447],{"class":39,"line":4444},264,[37,4446,2394],{"class":114},[37,4448,4449],{"class":118}," @fougere\u002Fcontainer@0.5.0\n",[37,4451,4453,4455],{"class":39,"line":4452},265,[37,4454,2394],{"class":114},[37,4456,4457],{"class":118}," @fougere\u002Fschema@0.5.0\n",[37,4459,4461,4463],{"class":39,"line":4460},266,[37,4462,2394],{"class":114},[37,4464,4465],{"class":118}," @fougere\u002Ftransport-http@0.5.0\n",[37,4467,4469,4471],{"class":39,"line":4468},267,[37,4470,2394],{"class":114},[37,4472,4473],{"class":118}," @fougere\u002Fobservability@0.5.0\n",[37,4475,4477,4479],{"class":39,"line":4476},268,[37,4478,2394],{"class":114},[37,4480,4481],{"class":118}," @fougere\u002Fcalls@0.5.0\n",[37,4483,4485],{"class":39,"line":4484},269,[37,4486,144],{"emptyLinePlaceholder":143},[37,4488,4490,4492],{"class":39,"line":4489},270,[37,4491,2153],{"class":2139},[37,4493,4494],{"class":2143}," 0.0.2-alpha.4\n",[37,4496,4498],{"class":39,"line":4497},271,[37,4499,144],{"emptyLinePlaceholder":143},[37,4501,4503,4505],{"class":39,"line":4502},272,[37,4504,2165],{"class":2139},[37,4506,2168],{"class":2143},[37,4508,4510],{"class":39,"line":4509},273,[37,4511,144],{"emptyLinePlaceholder":143},[37,4513,4515,4517],{"class":39,"line":4514},274,[37,4516,2177],{"class":114},[37,4518,2985],{"class":118},[37,4520,4522,4524,4526,4528,4530],{"class":39,"line":4521},275,[37,4523,2177],{"class":114},[37,4525,2379],{"class":118},[37,4527,2382],{"class":114},[37,4529,4431],{"class":46},[37,4531,2388],{"class":114},[37,4533,4535,4537],{"class":39,"line":4534},276,[37,4536,2394],{"class":114},[37,4538,4539],{"class":118}," @fougere\u002Fcore@0.5.0-alpha.1\n",[37,4541,4543,4545],{"class":39,"line":4542},277,[37,4544,2394],{"class":114},[37,4546,4547],{"class":118}," @fougere\u002Fcontainer@0.5.0-alpha.1\n",[37,4549,4551,4553],{"class":39,"line":4550},278,[37,4552,2394],{"class":114},[37,4554,4555],{"class":118}," @fougere\u002Fobservability@0.5.0-alpha.1\n",[37,4557,4559,4561],{"class":39,"line":4558},279,[37,4560,2394],{"class":114},[37,4562,4563],{"class":118}," @fougere\u002Fschema@0.5.0-alpha.1\n",[37,4565,4567,4569],{"class":39,"line":4566},280,[37,4568,2394],{"class":114},[37,4570,4571],{"class":118}," @fougere\u002Ftransport-http@0.5.0-alpha.1\n",[37,4573,4575,4577],{"class":39,"line":4574},281,[37,4576,2394],{"class":114},[37,4578,4579],{"class":118}," @fougere\u002Fcalls@0.5.0-alpha.0\n",[27,4581,4584],{"className":2130,"code":4582,"filename":4583,"language":1800,"meta":33,"style":33},"# observability — three Fronds, three processes, one trace\n\n```\nload ──▶ shop :4200 ──▶ catalog  :4100\n                    └─▶ shipping :4300\n```\n\n```bash\npnpm dev      # the three processes\npnpm load     # k6 against the shop, in stages\npnpm signoz   # a collector, to see any of it\n```\n\n## What the domain code says about being observed\n\nNothing. `CartHandler` asks for its two neighbours by type:\n\n```ts\nconstructor(\n  private productHandler: ProductHandler,\n  private shipmentHandler: ShipmentHandler,\n) {}\n```\n\nNo address, no client, no span, no metric. Comment out `remotes:` in `src\u002Fmain.ts` and the\nsame file runs against local Fronds — one span instead of three, and nothing else changes.\n\nThe whole wiring is `src\u002Fobserve.ts`, the same eleven lines in each process, differing only\nby a service name. `shipping` carries **no entity at all**: operations about no stored row\nare ordinary, and its identity card publishes a facade with no schema.\n\n## What comes out\n\nA `cart.checkout` produces five spans across three processes:\n\n```\nshop:cart.checkout\n  ├─ shop:product.list      →  catalog:product.list\n  └─ shop:shipment.quote    →  shipping:shipment.quote\n```\n\nThe caller's span **contains** the receiver's, so the difference between the two is what\nthe wire cost — a number neither process can measure alone. That subtraction is now the\nspan's own: `selfMs` is its duration minus what its observed children account for, so\n`shop:cart.checkout` reports several milliseconds and almost no self. It is not slow. It is\nwaiting, and a column of durations cannot tell the two apart.\n\nEvery operation also says how many statements ran under it, and their time is taken out of\nits own. That much runs always. What does **not** is a span per query:\n\n```bash\nSPAN_PER_STATEMENT=1 pnpm dev\n```\n\n```\nitem.listOneByOne   [0.54ms, self 0.47ms, 4 statements]     ← the default, one span\n\nitem.listOneByOne   [0.54ms, self 0.47ms, 4 statements]     ← and with it, five\n  items.select      [0.01ms]\n  items.select      [0.01ms]\n  items.select      [0.01ms]\n  items.select      [0.01ms]\n```\n\nThe count **detects** — it is in the metrics, it costs one span, and one query per row shows\nup in it as surely as in a trace. The detail **explains**, and it is turned on over the\noperation the count named. A backend charges per span, and a page of forty rows is forty of\nthem; what decides is the volume, not the CPU, which is 658 ns against a 14 µs query.\n\n| signal | what to look at |\n|---|---|\n| traces | the tree above, its statements, and every log line it produced |\n| metrics | `fougere_operation_duration_seconds` — rate, errors and latency in one histogram |\n| | `fougere_operation_self_seconds` — the same, with what it waited for taken out |\n| | `fougere_operation_statements_total` — against the call count, statements per call |\n| | `fougere_operations_active` — saturation |\n| | `fougere_fronds` \u002F `fougere_calls_total` — the service graph, discovered |\n| logs | every line carries the trace of the call it was written inside |\n\nOne query per row is what an N+1 looks like in that last one, and `statementsOf`\n(`@fougere\u002Ftesting`) is the same count in a test, where it can be refused before it ships.\n\nThe `fronds` and `edges` of `rpc.topology` are **observed, never declared**: a Frond this\nprocess scanned and hosts runs here, a Frond it called runs elsewhere. `remotes:` is not read\nfor either — a config key states an intent, a Frond that answered a call is a fact.\n\nIts `declared` half is the other question, and it counts nothing. Ask the shop **before any\nload** and the observed half knows one Frond, because nothing has answered yet; `declared`\nalready names catalog and shipping. Kill `shipping` and the difference is the whole point —\nobserved drops it, declared keeps it, so a node that is down is a dead edge instead of an\nabsence.\n\n## Why the load comes in stages\n\n`load.js` ramps to 5 users, holds, spikes to 30, holds, drains. A flat rate draws flat lines\nand there is nothing to read in them; the spike is what makes latency, saturation and error\nrate say something.\n\nAbout 5 % of the load calls `product.reserve`, which refuses on purpose — a dashboard needs a\nreal error rate. `cart.report` sleeps unevenly, so the latency histogram has two clouds\ninstead of one bump: a p95 hides that, a heatmap cannot.\n\n## The collector\n\nAny OTLP backend reads this as-is. `pnpm signoz` brings one up through Foundry (UI on\n`:8080`, OTLP on `:4318`); install `foundryctl` first:\n\n```bash\ncurl -fsSL https:\u002F\u002Fsignoz.io\u002Ffoundry.sh | bash\n```\n\nJaeger, Tempo, Datadog, Honeycomb all take the same payload. Switching between two of them\nwhile this demo was being written changed **two URL strings** — no instrumentation, no span\nfield, no metric. Point `OTLP_URL` at yours.\n\nWithout a collector the demo still runs; it says so once and carries on.\n\n","README.md",[16,4585,4586,4593,4597,4603,4609,4614,4618,4622,4630,4635,4640,4645,4649,4653,4660,4664,4680,4684,4691,4699,4706,4713,4720,4724,4728,4753,4758,4762,4777,4804,4809,4813,4820,4824,4839,4843,4847,4852,4857,4862,4866,4870,4885,4890,4904,4916,4921,4925,4930,4945,4949,4955,4960,4964,4968,4972,4977,4981,4986,4991,4995,4999,5003,5007,5011,5026,5041,5046,5051,5055,5071,5076,5090,5111,5130,5148,5165,5191,5205,5209,5222,5236,5240,5281,5295,5300,5304,5318,5329,5343,5348,5353,5357,5364,5368,5380,5385,5390,5394,5409,5424,5429,5433,5440,5444,5459,5491,5495,5501,5506,5510,5514,5519,5534,5549,5553],{"__ignoreMap":33},[37,4587,4588,4590],{"class":39,"line":40},[37,4589,2140],{"class":2139},[37,4591,4592],{"class":2143}," observability — three Fronds, three processes, one trace\n",[37,4594,4595],{"class":39,"line":140},[37,4596,144],{"emptyLinePlaceholder":143},[37,4598,4599],{"class":39,"line":147},[37,4600,4602],{"class":4601},"siB6D","```\n",[37,4604,4605],{"class":39,"line":161},[37,4606,4608],{"class":4607},"sYNOY","load ──▶ shop :4200 ──▶ catalog  :4100\n",[37,4610,4611],{"class":39,"line":217},[37,4612,4613],{"class":4607},"                    └─▶ shipping :4300\n",[37,4615,4616],{"class":39,"line":1205},[37,4617,4602],{"class":4601},[37,4619,4620],{"class":39,"line":1211},[37,4621,144],{"emptyLinePlaceholder":143},[37,4623,4624,4627],{"class":39,"line":1217},[37,4625,4626],{"class":4601},"```",[37,4628,4629],{"class":4607},"bash\n",[37,4631,4632],{"class":39,"line":1223},[37,4633,4634],{"class":4607},"pnpm dev      # the three processes\n",[37,4636,4637],{"class":39,"line":1703},[37,4638,4639],{"class":4607},"pnpm load     # k6 against the shop, in stages\n",[37,4641,4642],{"class":39,"line":1708},[37,4643,4644],{"class":4607},"pnpm signoz   # a collector, to see any of it\n",[37,4646,4647],{"class":39,"line":1748},[37,4648,4602],{"class":4601},[37,4650,4651],{"class":39,"line":2218},[37,4652,144],{"emptyLinePlaceholder":143},[37,4654,4655,4657],{"class":39,"line":2226},[37,4656,2153],{"class":2139},[37,4658,4659],{"class":2143}," What the domain code says about being observed\n",[37,4661,4662],{"class":39,"line":2234},[37,4663,144],{"emptyLinePlaceholder":143},[37,4665,4666,4669,4672,4675,4677],{"class":39,"line":2242},[37,4667,4668],{"class":118},"Nothing. ",[37,4670,4671],{"class":114},"`",[37,4673,4674],{"class":46},"CartHandler",[37,4676,4671],{"class":114},[37,4678,4679],{"class":118}," asks for its two neighbours by type:\n",[37,4681,4682],{"class":39,"line":2247},[37,4683,144],{"emptyLinePlaceholder":143},[37,4685,4686,4688],{"class":39,"line":2255},[37,4687,4626],{"class":4601},[37,4689,4690],{"class":4607},"ts\n",[37,4692,4693,4696],{"class":39,"line":2260},[37,4694,4695],{"class":150},"constructor",[37,4697,4698],{"class":154},"(\n",[37,4700,4701,4704],{"class":39,"line":2267},[37,4702,4703],{"class":118},"  private productHandler: ProductHandler",[37,4705,214],{"class":114},[37,4707,4708,4711],{"class":39,"line":2272},[37,4709,4710],{"class":118},"  private shipmentHandler: ShipmentHandler",[37,4712,214],{"class":114},[37,4714,4715,4717],{"class":39,"line":2280},[37,4716,223],{"class":154},[37,4718,4719],{"class":114}," {}\n",[37,4721,4722],{"class":39,"line":2288},[37,4723,4602],{"class":4601},[37,4725,4726],{"class":39,"line":2296},[37,4727,144],{"emptyLinePlaceholder":143},[37,4729,4730,4733,4735,4738,4740,4743,4745,4748,4750],{"class":39,"line":2304},[37,4731,4732],{"class":118},"No address, no client, no span, no metric. Comment out ",[37,4734,4671],{"class":114},[37,4736,4737],{"class":46},"remotes:",[37,4739,4671],{"class":114},[37,4741,4742],{"class":118}," in ",[37,4744,4671],{"class":114},[37,4746,4747],{"class":46},"src\u002Fmain.ts",[37,4749,4671],{"class":114},[37,4751,4752],{"class":118}," and the\n",[37,4754,4755],{"class":39,"line":2312},[37,4756,4757],{"class":118},"same file runs against local Fronds — one span instead of three, and nothing else changes.\n",[37,4759,4760],{"class":39,"line":2320},[37,4761,144],{"emptyLinePlaceholder":143},[37,4763,4764,4767,4769,4772,4774],{"class":39,"line":2328},[37,4765,4766],{"class":118},"The whole wiring is ",[37,4768,4671],{"class":114},[37,4770,4771],{"class":46},"src\u002Fobserve.ts",[37,4773,4671],{"class":114},[37,4775,4776],{"class":118},", the same eleven lines in each process, differing only\n",[37,4778,4779,4782,4784,4786,4788,4791,4795,4799,4801],{"class":39,"line":2336},[37,4780,4781],{"class":118},"by a service name. ",[37,4783,4671],{"class":114},[37,4785,1258],{"class":46},[37,4787,4671],{"class":114},[37,4789,4790],{"class":118}," carries ",[37,4792,4794],{"class":4793},"sHaeK","**",[37,4796,4798],{"class":4797},"s7rwI","no entity at all",[37,4800,4794],{"class":4793},[37,4802,4803],{"class":118},": operations about no stored row\n",[37,4805,4806],{"class":39,"line":2344},[37,4807,4808],{"class":118},"are ordinary, and its identity card publishes a facade with no schema.\n",[37,4810,4811],{"class":39,"line":2349},[37,4812,144],{"emptyLinePlaceholder":143},[37,4814,4815,4817],{"class":39,"line":2357},[37,4816,2153],{"class":2139},[37,4818,4819],{"class":2143}," What comes out\n",[37,4821,4822],{"class":39,"line":2362},[37,4823,144],{"emptyLinePlaceholder":143},[37,4825,4826,4829,4831,4834,4836],{"class":39,"line":2369},[37,4827,4828],{"class":118},"A ",[37,4830,4671],{"class":114},[37,4832,4833],{"class":46},"cart.checkout",[37,4835,4671],{"class":114},[37,4837,4838],{"class":118}," produces five spans across three processes:\n",[37,4840,4841],{"class":39,"line":2374},[37,4842,144],{"emptyLinePlaceholder":143},[37,4844,4845],{"class":39,"line":2391},[37,4846,4602],{"class":4601},[37,4848,4849],{"class":39,"line":2400},[37,4850,4851],{"class":4607},"shop:cart.checkout\n",[37,4853,4854],{"class":39,"line":2408},[37,4855,4856],{"class":4607},"  ├─ shop:product.list      →  catalog:product.list\n",[37,4858,4859],{"class":39,"line":2416},[37,4860,4861],{"class":4607},"  └─ shop:shipment.quote    →  shipping:shipment.quote\n",[37,4863,4864],{"class":39,"line":2424},[37,4865,4602],{"class":4601},[37,4867,4868],{"class":39,"line":2432},[37,4869,144],{"emptyLinePlaceholder":143},[37,4871,4872,4875,4877,4880,4882],{"class":39,"line":2440},[37,4873,4874],{"class":118},"The caller's span ",[37,4876,4794],{"class":4793},[37,4878,4879],{"class":4797},"contains",[37,4881,4794],{"class":4793},[37,4883,4884],{"class":118}," the receiver's, so the difference between the two is what\n",[37,4886,4887],{"class":39,"line":2448},[37,4888,4889],{"class":118},"the wire cost — a number neither process can measure alone. That subtraction is now the\n",[37,4891,4892,4895,4897,4899,4901],{"class":39,"line":2456},[37,4893,4894],{"class":118},"span's own: ",[37,4896,4671],{"class":114},[37,4898,621],{"class":46},[37,4900,4671],{"class":114},[37,4902,4903],{"class":118}," is its duration minus what its observed children account for, so\n",[37,4905,4906,4908,4911,4913],{"class":39,"line":2464},[37,4907,4671],{"class":114},[37,4909,4910],{"class":46},"shop:cart.checkout",[37,4912,4671],{"class":114},[37,4914,4915],{"class":118}," reports several milliseconds and almost no self. It is not slow. It is\n",[37,4917,4918],{"class":39,"line":2469},[37,4919,4920],{"class":118},"waiting, and a column of durations cannot tell the two apart.\n",[37,4922,4923],{"class":39,"line":2477},[37,4924,144],{"emptyLinePlaceholder":143},[37,4926,4927],{"class":39,"line":2482},[37,4928,4929],{"class":118},"Every operation also says how many statements ran under it, and their time is taken out of\n",[37,4931,4932,4935,4937,4940,4942],{"class":39,"line":2489},[37,4933,4934],{"class":118},"its own. That much runs always. What does ",[37,4936,4794],{"class":4793},[37,4938,4939],{"class":4797},"not",[37,4941,4794],{"class":4793},[37,4943,4944],{"class":118}," is a span per query:\n",[37,4946,4947],{"class":39,"line":2494},[37,4948,144],{"emptyLinePlaceholder":143},[37,4950,4951,4953],{"class":39,"line":2508},[37,4952,4626],{"class":4601},[37,4954,4629],{"class":4607},[37,4956,4957],{"class":39,"line":2522},[37,4958,4959],{"class":4607},"SPAN_PER_STATEMENT=1 pnpm dev\n",[37,4961,4962],{"class":39,"line":2536},[37,4963,4602],{"class":4601},[37,4965,4966],{"class":39,"line":2550},[37,4967,144],{"emptyLinePlaceholder":143},[37,4969,4970],{"class":39,"line":2558},[37,4971,4602],{"class":4601},[37,4973,4974],{"class":39,"line":2566},[37,4975,4976],{"class":4607},"item.listOneByOne   [0.54ms, self 0.47ms, 4 statements]     ← the default, one span\n",[37,4978,4979],{"class":39,"line":2574},[37,4980,144],{"emptyLinePlaceholder":143},[37,4982,4983],{"class":39,"line":2582},[37,4984,4985],{"class":4607},"item.listOneByOne   [0.54ms, self 0.47ms, 4 statements]     ← and with it, five\n",[37,4987,4988],{"class":39,"line":2590},[37,4989,4990],{"class":4607},"  items.select      [0.01ms]\n",[37,4992,4993],{"class":39,"line":2598},[37,4994,4990],{"class":4607},[37,4996,4997],{"class":39,"line":2606},[37,4998,4990],{"class":4607},[37,5000,5001],{"class":39,"line":2614},[37,5002,4990],{"class":4607},[37,5004,5005],{"class":39,"line":2622},[37,5006,4602],{"class":4601},[37,5008,5009],{"class":39,"line":2627},[37,5010,144],{"emptyLinePlaceholder":143},[37,5012,5013,5016,5018,5021,5023],{"class":39,"line":2635},[37,5014,5015],{"class":118},"The count ",[37,5017,4794],{"class":4793},[37,5019,5020],{"class":4797},"detects",[37,5022,4794],{"class":4793},[37,5024,5025],{"class":118}," — it is in the metrics, it costs one span, and one query per row shows\n",[37,5027,5028,5031,5033,5036,5038],{"class":39,"line":2640},[37,5029,5030],{"class":118},"up in it as surely as in a trace. The detail ",[37,5032,4794],{"class":4793},[37,5034,5035],{"class":4797},"explains",[37,5037,4794],{"class":4793},[37,5039,5040],{"class":118},", and it is turned on over the\n",[37,5042,5043],{"class":39,"line":2647},[37,5044,5045],{"class":118},"operation the count named. A backend charges per span, and a page of forty rows is forty of\n",[37,5047,5048],{"class":39,"line":2652},[37,5049,5050],{"class":118},"them; what decides is the volume, not the CPU, which is 658 ns against a 14 µs query.\n",[37,5052,5053],{"class":39,"line":2660},[37,5054,144],{"emptyLinePlaceholder":143},[37,5056,5057,5060,5063,5065,5068],{"class":39,"line":2668},[37,5058,5059],{"class":114},"|",[37,5061,5062],{"class":118}," signal ",[37,5064,5059],{"class":114},[37,5066,5067],{"class":118}," what to look at ",[37,5069,5070],{"class":114},"|\n",[37,5072,5073],{"class":39,"line":2676},[37,5074,5075],{"class":114},"|---|---|\n",[37,5077,5078,5080,5083,5085,5088],{"class":39,"line":2684},[37,5079,5059],{"class":114},[37,5081,5082],{"class":118}," traces ",[37,5084,5059],{"class":114},[37,5086,5087],{"class":118}," the tree above, its statements, and every log line it produced ",[37,5089,5070],{"class":114},[37,5091,5092,5094,5097,5099,5102,5104,5106,5109],{"class":39,"line":2692},[37,5093,5059],{"class":114},[37,5095,5096],{"class":118}," metrics ",[37,5098,5059],{"class":114},[37,5100,5101],{"class":114}," `",[37,5103,1480],{"class":46},[37,5105,4671],{"class":114},[37,5107,5108],{"class":118}," — rate, errors and latency in one histogram ",[37,5110,5070],{"class":114},[37,5112,5113,5115,5118,5120,5123,5125,5128],{"class":39,"line":2700},[37,5114,5059],{"class":114},[37,5116,5117],{"class":114}," |",[37,5119,5101],{"class":114},[37,5121,5122],{"class":46},"fougere_operation_self_seconds",[37,5124,4671],{"class":114},[37,5126,5127],{"class":118}," — the same, with what it waited for taken out ",[37,5129,5070],{"class":114},[37,5131,5132,5134,5136,5138,5141,5143,5146],{"class":39,"line":2708},[37,5133,5059],{"class":114},[37,5135,5117],{"class":114},[37,5137,5101],{"class":114},[37,5139,5140],{"class":46},"fougere_operation_statements_total",[37,5142,4671],{"class":114},[37,5144,5145],{"class":118}," — against the call count, statements per call ",[37,5147,5070],{"class":114},[37,5149,5150,5152,5154,5156,5158,5160,5163],{"class":39,"line":2716},[37,5151,5059],{"class":114},[37,5153,5117],{"class":114},[37,5155,5101],{"class":114},[37,5157,1408],{"class":46},[37,5159,4671],{"class":114},[37,5161,5162],{"class":118}," — saturation ",[37,5164,5070],{"class":114},[37,5166,5167,5169,5171,5173,5176,5178,5180,5182,5184,5186,5189],{"class":39,"line":2724},[37,5168,5059],{"class":114},[37,5170,5117],{"class":114},[37,5172,5101],{"class":114},[37,5174,5175],{"class":46},"fougere_fronds",[37,5177,4671],{"class":114},[37,5179,516],{"class":118},[37,5181,4671],{"class":114},[37,5183,1449],{"class":46},[37,5185,4671],{"class":114},[37,5187,5188],{"class":118}," — the service graph, discovered ",[37,5190,5070],{"class":114},[37,5192,5193,5195,5198,5200,5203],{"class":39,"line":2729},[37,5194,5059],{"class":114},[37,5196,5197],{"class":118}," logs ",[37,5199,5059],{"class":114},[37,5201,5202],{"class":118}," every line carries the trace of the call it was written inside ",[37,5204,5070],{"class":114},[37,5206,5207],{"class":39,"line":2737},[37,5208,144],{"emptyLinePlaceholder":143},[37,5210,5211,5214,5216,5219],{"class":39,"line":2742},[37,5212,5213],{"class":118},"One query per row is what an N+1 looks like in that last one, and ",[37,5215,4671],{"class":114},[37,5217,5218],{"class":46},"statementsOf",[37,5220,5221],{"class":114},"`\n",[37,5223,5224,5226,5228,5231,5233],{"class":39,"line":2749},[37,5225,155],{"class":118},[37,5227,4671],{"class":114},[37,5229,5230],{"class":46},"@fougere\u002Ftesting",[37,5232,4671],{"class":114},[37,5234,5235],{"class":118},") is the same count in a test, where it can be refused before it ships.\n",[37,5237,5238],{"class":39,"line":2754},[37,5239,144],{"emptyLinePlaceholder":143},[37,5241,5242,5245,5247,5249,5251,5253,5255,5257,5259,5262,5264,5266,5268,5271,5273,5276,5278],{"class":39,"line":2768},[37,5243,5244],{"class":118},"The ",[37,5246,4671],{"class":114},[37,5248,1231],{"class":46},[37,5250,4671],{"class":114},[37,5252,1095],{"class":118},[37,5254,4671],{"class":114},[37,5256,1234],{"class":46},[37,5258,4671],{"class":114},[37,5260,5261],{"class":118}," of ",[37,5263,4671],{"class":114},[37,5265,1264],{"class":46},[37,5267,4671],{"class":114},[37,5269,5270],{"class":118}," are ",[37,5272,4794],{"class":4793},[37,5274,5275],{"class":4797},"observed, never declared",[37,5277,4794],{"class":4793},[37,5279,5280],{"class":118},": a Frond this\n",[37,5282,5283,5286,5288,5290,5292],{"class":39,"line":2782},[37,5284,5285],{"class":118},"process scanned and hosts runs here, a Frond it called runs elsewhere. ",[37,5287,4671],{"class":114},[37,5289,4737],{"class":46},[37,5291,4671],{"class":114},[37,5293,5294],{"class":118}," is not read\n",[37,5296,5297],{"class":39,"line":2796},[37,5298,5299],{"class":118},"for either — a config key states an intent, a Frond that answered a call is a fact.\n",[37,5301,5302],{"class":39,"line":2810},[37,5303,144],{"emptyLinePlaceholder":143},[37,5305,5306,5309,5311,5313,5315],{"class":39,"line":2824},[37,5307,5308],{"class":118},"Its ",[37,5310,4671],{"class":114},[37,5312,1250],{"class":46},[37,5314,4671],{"class":114},[37,5316,5317],{"class":118}," half is the other question, and it counts nothing. Ask the shop **before any\n",[37,5319,5320,5323,5325,5327],{"class":39,"line":2838},[37,5321,5322],{"class":118},"load** and the observed half knows one Frond, because nothing has answered yet; ",[37,5324,4671],{"class":114},[37,5326,1250],{"class":46},[37,5328,5221],{"class":114},[37,5330,5331,5334,5336,5338,5340],{"class":39,"line":2852},[37,5332,5333],{"class":118},"already names catalog and shipping. Kill ",[37,5335,4671],{"class":114},[37,5337,1258],{"class":46},[37,5339,4671],{"class":114},[37,5341,5342],{"class":118}," and the difference is the whole point —\n",[37,5344,5345],{"class":39,"line":2865},[37,5346,5347],{"class":118},"observed drops it, declared keeps it, so a node that is down is a dead edge instead of an\n",[37,5349,5350],{"class":39,"line":2878},[37,5351,5352],{"class":118},"absence.\n",[37,5354,5355],{"class":39,"line":2886},[37,5356,144],{"emptyLinePlaceholder":143},[37,5358,5359,5361],{"class":39,"line":2894},[37,5360,2153],{"class":2139},[37,5362,5363],{"class":2143}," Why the load comes in stages\n",[37,5365,5366],{"class":39,"line":2902},[37,5367,144],{"emptyLinePlaceholder":143},[37,5369,5370,5372,5375,5377],{"class":39,"line":2910},[37,5371,4671],{"class":114},[37,5373,5374],{"class":46},"load.js",[37,5376,4671],{"class":114},[37,5378,5379],{"class":118}," ramps to 5 users, holds, spikes to 30, holds, drains. A flat rate draws flat lines\n",[37,5381,5382],{"class":39,"line":2918},[37,5383,5384],{"class":118},"and there is nothing to read in them; the spike is what makes latency, saturation and error\n",[37,5386,5387],{"class":39,"line":2926},[37,5388,5389],{"class":118},"rate say something.\n",[37,5391,5392],{"class":39,"line":2934},[37,5393,144],{"emptyLinePlaceholder":143},[37,5395,5396,5399,5401,5404,5406],{"class":39,"line":2942},[37,5397,5398],{"class":118},"About 5 % of the load calls ",[37,5400,4671],{"class":114},[37,5402,5403],{"class":46},"product.reserve",[37,5405,4671],{"class":114},[37,5407,5408],{"class":118},", which refuses on purpose — a dashboard needs a\n",[37,5410,5411,5414,5416,5419,5421],{"class":39,"line":2950},[37,5412,5413],{"class":118},"real error rate. ",[37,5415,4671],{"class":114},[37,5417,5418],{"class":46},"cart.report",[37,5420,4671],{"class":114},[37,5422,5423],{"class":118}," sleeps unevenly, so the latency histogram has two clouds\n",[37,5425,5426],{"class":39,"line":2955},[37,5427,5428],{"class":118},"instead of one bump: a p95 hides that, a heatmap cannot.\n",[37,5430,5431],{"class":39,"line":2963},[37,5432,144],{"emptyLinePlaceholder":143},[37,5434,5435,5437],{"class":39,"line":2968},[37,5436,2153],{"class":2139},[37,5438,5439],{"class":2143}," The collector\n",[37,5441,5442],{"class":39,"line":2975},[37,5443,144],{"emptyLinePlaceholder":143},[37,5445,5446,5449,5451,5454,5456],{"class":39,"line":2980},[37,5447,5448],{"class":118},"Any OTLP backend reads this as-is. ",[37,5450,4671],{"class":114},[37,5452,5453],{"class":46},"pnpm signoz",[37,5455,4671],{"class":114},[37,5457,5458],{"class":118}," brings one up through Foundry (UI on\n",[37,5460,5461,5463,5466,5468,5471,5473,5476,5478,5481,5483,5486,5488],{"class":39,"line":2988},[37,5462,4671],{"class":114},[37,5464,5465],{"class":46},":8080",[37,5467,4671],{"class":114},[37,5469,5470],{"class":118},", OTLP on ",[37,5472,4671],{"class":114},[37,5474,5475],{"class":46},":4318",[37,5477,4671],{"class":114},[37,5479,5480],{"class":118},"); install ",[37,5482,4671],{"class":114},[37,5484,5485],{"class":46},"foundryctl",[37,5487,4671],{"class":114},[37,5489,5490],{"class":118}," first:\n",[37,5492,5493],{"class":39,"line":2995},[37,5494,144],{"emptyLinePlaceholder":143},[37,5496,5497,5499],{"class":39,"line":3002},[37,5498,4626],{"class":4601},[37,5500,4629],{"class":4607},[37,5502,5503],{"class":39,"line":3009},[37,5504,5505],{"class":4607},"curl -fsSL https:\u002F\u002Fsignoz.io\u002Ffoundry.sh | bash\n",[37,5507,5508],{"class":39,"line":3017},[37,5509,4602],{"class":4601},[37,5511,5512],{"class":39,"line":3025},[37,5513,144],{"emptyLinePlaceholder":143},[37,5515,5516],{"class":39,"line":3033},[37,5517,5518],{"class":118},"Jaeger, Tempo, Datadog, Honeycomb all take the same payload. Switching between two of them\n",[37,5520,5521,5524,5526,5529,5531],{"class":39,"line":3041},[37,5522,5523],{"class":118},"while this demo was being written changed ",[37,5525,4794],{"class":4793},[37,5527,5528],{"class":4797},"two URL strings",[37,5530,4794],{"class":4793},[37,5532,5533],{"class":118}," — no instrumentation, no span\n",[37,5535,5536,5539,5541,5544,5546],{"class":39,"line":3049},[37,5537,5538],{"class":118},"field, no metric. Point ",[37,5540,4671],{"class":114},[37,5542,5543],{"class":46},"OTLP_URL",[37,5545,4671],{"class":114},[37,5547,5548],{"class":118}," at yours.\n",[37,5550,5551],{"class":39,"line":3057},[37,5552,144],{"emptyLinePlaceholder":143},[37,5554,5555],{"class":39,"line":3065},[37,5556,5557],{"class":118},"Without a collector the demo still runs; it says so once and carries on.\n",[27,5559,5561],{"className":101,"code":5560,"filename":2127,"language":103,"meta":33,"style":33},"import { entity, primary, text, number } from '@fougere\u002Fschema';\n\nexport default class Product extends entity({\n  id: primary(),\n  title: text({ min: 1 }),\n  stock: number({ min: 0 }),\n}) {}\n\n",[16,5562,5563,5600,5604,5624,5638,5665,5691],{"__ignoreMap":33},[37,5564,5565,5567,5569,5572,5574,5577,5579,5582,5584,5587,5589,5591,5593,5596,5598],{"class":39,"line":40},[37,5566,111],{"class":110},[37,5568,115],{"class":114},[37,5570,5571],{"class":118}," entity",[37,5573,194],{"class":114},[37,5575,5576],{"class":118}," primary",[37,5578,194],{"class":114},[37,5580,5581],{"class":118}," text",[37,5583,194],{"class":114},[37,5585,5586],{"class":118}," number",[37,5588,122],{"class":114},[37,5590,125],{"class":110},[37,5592,129],{"class":128},[37,5594,5595],{"class":46},"@fougere\u002Fschema",[37,5597,134],{"class":128},[37,5599,137],{"class":114},[37,5601,5602],{"class":39,"line":140},[37,5603,144],{"emptyLinePlaceholder":143},[37,5605,5606,5608,5610,5612,5615,5618,5620,5622],{"class":39,"line":147},[37,5607,276],{"class":110},[37,5609,279],{"class":110},[37,5611,1011],{"class":1010},[37,5613,5614],{"class":1014}," Product",[37,5616,5617],{"class":1010}," extends",[37,5619,5571],{"class":150},[37,5621,155],{"class":154},[37,5623,158],{"class":114},[37,5625,5626,5629,5631,5633,5636],{"class":39,"line":161},[37,5627,5628],{"class":164},"  id",[37,5630,168],{"class":114},[37,5632,5576],{"class":150},[37,5634,5635],{"class":154},"()",[37,5637,214],{"class":114},[37,5639,5640,5643,5645,5647,5649,5651,5654,5656,5659,5661,5663],{"class":39,"line":217},[37,5641,5642],{"class":164},"  title",[37,5644,168],{"class":114},[37,5646,5581],{"class":150},[37,5648,155],{"class":154},[37,5650,179],{"class":114},[37,5652,5653],{"class":164}," min",[37,5655,168],{"class":114},[37,5657,5658],{"class":781}," 1",[37,5660,122],{"class":114},[37,5662,223],{"class":154},[37,5664,214],{"class":114},[37,5666,5667,5670,5672,5674,5676,5678,5680,5682,5685,5687,5689],{"class":39,"line":1205},[37,5668,5669],{"class":164},"  stock",[37,5671,168],{"class":114},[37,5673,5586],{"class":150},[37,5675,155],{"class":154},[37,5677,179],{"class":114},[37,5679,5653],{"class":164},[37,5681,168],{"class":114},[37,5683,5684],{"class":781}," 0",[37,5686,122],{"class":114},[37,5688,223],{"class":154},[37,5690,214],{"class":114},[37,5692,5693,5695,5697],{"class":39,"line":1211},[37,5694,220],{"class":114},[37,5696,223],{"class":154},[37,5698,4719],{"class":114},[27,5700,5703],{"className":101,"code":5701,"filename":5702,"language":103,"meta":33,"style":33},"import { FougereError, ErrorCode, type Repository } from '@fougere\u002Fcore';\nimport type Product from '..\u002Fentities\u002FProduct.js';\n\n\u002F** The catalog's facade. Nothing here knows it is called from another process. *\u002F\nexport default class ProductHandler {\n  constructor(private products: Repository\u003CProduct>) {}\n\n  async list() {\n    return this.products.list();\n  }\n\n  async findById(id: string) {\n    return this.products.findById(id);\n  }\n\n  \u002F** Deliberately refuses — a dashboard needs a real error rate, not a simulated one. *\u002F\n  async reserve(): Promise\u003Cnever> {\n    throw new FougereError({\n      code: ErrorCode.CONFLICT,\n      message: 'stock already held',\n    });\n  }\n}\n\n","catalog\u002Ffronds\u002Fcatalog\u002Fhandlers\u002FProductHandler.ts",[16,5704,5705,5738,5759,5763,5768,5781,5808,5812,5823,5847,5852,5856,5877,5900,5904,5908,5913,5934,5949,5965,5981,5990,5994],{"__ignoreMap":33},[37,5706,5707,5709,5711,5714,5716,5719,5721,5723,5726,5728,5730,5732,5734,5736],{"class":39,"line":40},[37,5708,111],{"class":110},[37,5710,115],{"class":114},[37,5712,5713],{"class":118}," FougereError",[37,5715,194],{"class":114},[37,5717,5718],{"class":118}," ErrorCode",[37,5720,194],{"class":114},[37,5722,974],{"class":110},[37,5724,5725],{"class":118}," Repository",[37,5727,122],{"class":114},[37,5729,125],{"class":110},[37,5731,129],{"class":128},[37,5733,993],{"class":46},[37,5735,134],{"class":128},[37,5737,137],{"class":114},[37,5739,5740,5742,5744,5747,5750,5752,5755,5757],{"class":39,"line":140},[37,5741,111],{"class":110},[37,5743,974],{"class":110},[37,5745,5746],{"class":118}," Product ",[37,5748,5749],{"class":110},"from",[37,5751,129],{"class":128},[37,5753,5754],{"class":46},"..\u002Fentities\u002FProduct.js",[37,5756,134],{"class":128},[37,5758,137],{"class":114},[37,5760,5761],{"class":39,"line":147},[37,5762,144],{"emptyLinePlaceholder":143},[37,5764,5765],{"class":39,"line":161},[37,5766,5767],{"class":246},"\u002F** The catalog's facade. Nothing here knows it is called from another process. *\u002F\n",[37,5769,5770,5772,5774,5776,5779],{"class":39,"line":217},[37,5771,276],{"class":110},[37,5773,279],{"class":110},[37,5775,1011],{"class":1010},[37,5777,5778],{"class":1014}," ProductHandler",[37,5780,342],{"class":114},[37,5782,5783,5786,5788,5791,5794,5796,5798,5800,5803,5806],{"class":39,"line":1205},[37,5784,5785],{"class":1010},"  constructor",[37,5787,155],{"class":114},[37,5789,5790],{"class":1010},"private",[37,5792,5793],{"class":1031}," products",[37,5795,168],{"class":114},[37,5797,5725],{"class":1014},[37,5799,1038],{"class":114},[37,5801,5802],{"class":1014},"Product",[37,5804,5805],{"class":114},">)",[37,5807,4719],{"class":114},[37,5809,5810],{"class":39,"line":1211},[37,5811,144],{"emptyLinePlaceholder":143},[37,5813,5814,5816,5819,5821],{"class":39,"line":1217},[37,5815,1022],{"class":1010},[37,5817,5818],{"class":1025}," list",[37,5820,5635],{"class":114},[37,5822,342],{"class":114},[37,5824,5825,5828,5832,5834,5837,5839,5842,5845],{"class":39,"line":1223},[37,5826,5827],{"class":110},"    return",[37,5829,5831],{"class":5830},"sxG60"," this",[37,5833,943],{"class":114},[37,5835,5836],{"class":1613},"products",[37,5838,943],{"class":114},[37,5840,5841],{"class":150},"list",[37,5843,5635],{"class":5844},"spAFX",[37,5846,137],{"class":114},[37,5848,5849],{"class":39,"line":1703},[37,5850,5851],{"class":114},"  }\n",[37,5853,5854],{"class":39,"line":1708},[37,5855,144],{"emptyLinePlaceholder":143},[37,5857,5858,5860,5863,5865,5868,5870,5873,5875],{"class":39,"line":1748},[37,5859,1022],{"class":1010},[37,5861,5862],{"class":1025}," findById",[37,5864,155],{"class":114},[37,5866,5867],{"class":1031},"id",[37,5869,168],{"class":114},[37,5871,5872],{"class":1014}," string",[37,5874,223],{"class":114},[37,5876,342],{"class":114},[37,5878,5879,5881,5883,5885,5887,5889,5892,5894,5896,5898],{"class":39,"line":2218},[37,5880,5827],{"class":110},[37,5882,5831],{"class":5830},[37,5884,943],{"class":114},[37,5886,5836],{"class":1613},[37,5888,943],{"class":114},[37,5890,5891],{"class":150},"findById",[37,5893,155],{"class":5844},[37,5895,5867],{"class":118},[37,5897,223],{"class":5844},[37,5899,137],{"class":114},[37,5901,5902],{"class":39,"line":2226},[37,5903,5851],{"class":114},[37,5905,5906],{"class":39,"line":2234},[37,5907,144],{"emptyLinePlaceholder":143},[37,5909,5910],{"class":39,"line":2242},[37,5911,5912],{"class":246},"  \u002F** Deliberately refuses — a dashboard needs a real error rate, not a simulated one. *\u002F\n",[37,5914,5915,5917,5920,5923,5925,5927,5930,5932],{"class":39,"line":2247},[37,5916,1022],{"class":1010},[37,5918,5919],{"class":1025}," reserve",[37,5921,5922],{"class":114},"():",[37,5924,1046],{"class":1014},[37,5926,1038],{"class":114},[37,5928,5929],{"class":1014},"never",[37,5931,1054],{"class":114},[37,5933,342],{"class":114},[37,5935,5936,5939,5942,5945,5947],{"class":39,"line":2255},[37,5937,5938],{"class":110},"    throw",[37,5940,5941],{"class":114}," new",[37,5943,5713],{"class":5944},"sgjsB",[37,5946,155],{"class":5844},[37,5948,158],{"class":114},[37,5950,5951,5954,5956,5958,5960,5963],{"class":39,"line":2260},[37,5952,5953],{"class":164},"      code",[37,5955,168],{"class":114},[37,5957,5718],{"class":118},[37,5959,943],{"class":114},[37,5961,5962],{"class":1613},"CONFLICT",[37,5964,214],{"class":114},[37,5966,5967,5970,5972,5974,5977,5979],{"class":39,"line":2267},[37,5968,5969],{"class":164},"      message",[37,5971,168],{"class":114},[37,5973,129],{"class":128},[37,5975,5976],{"class":46},"stock already held",[37,5978,134],{"class":128},[37,5980,214],{"class":114},[37,5982,5983,5986,5988],{"class":39,"line":2272},[37,5984,5985],{"class":114},"    }",[37,5987,223],{"class":5844},[37,5989,137],{"class":114},[37,5991,5992],{"class":39,"line":2280},[37,5993,5851],{"class":114},[37,5995,5996],{"class":39,"line":2288},[37,5997,405],{"class":114},[27,5999,6004],{"className":6000,"code":6001,"filename":6002,"language":6003,"meta":33,"style":33},"language-json shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","{\n  \"extends\": \"..\u002F..\u002F..\u002Ftsconfig.base.json\",\n  \"compilerOptions\": {\n    \"noEmit\": true,\n    \"rootDir\": \".\",\n    \"declaration\": false,\n    \"declarationMap\": false,\n    \"sourceMap\": false\n  },\n  \"include\": [\"fronds\"]\n}\n\n","catalog\u002Ftsconfig.json","json",[16,6005,6006,6010,6034,6047,6063,6082,6098,6113,6127,6132,6153],{"__ignoreMap":33},[37,6007,6008],{"class":39,"line":40},[37,6009,158],{"class":114},[37,6011,6012,6015,6019,6022,6024,6027,6030,6032],{"class":39,"line":140},[37,6013,6014],{"class":114},"  \"",[37,6016,6018],{"class":6017},"s8ClO","extends",[37,6020,6021],{"class":114},"\"",[37,6023,168],{"class":114},[37,6025,6026],{"class":128}," \"",[37,6028,6029],{"class":46},"..\u002F..\u002F..\u002Ftsconfig.base.json",[37,6031,6021],{"class":128},[37,6033,214],{"class":114},[37,6035,6036,6038,6041,6043,6045],{"class":39,"line":147},[37,6037,6014],{"class":114},[37,6039,6040],{"class":6017},"compilerOptions",[37,6042,6021],{"class":114},[37,6044,168],{"class":114},[37,6046,342],{"class":114},[37,6048,6049,6052,6055,6057,6059,6061],{"class":39,"line":161},[37,6050,6051],{"class":114},"    \"",[37,6053,6054],{"class":336},"noEmit",[37,6056,6021],{"class":114},[37,6058,168],{"class":114},[37,6060,394],{"class":128},[37,6062,214],{"class":114},[37,6064,6065,6067,6070,6072,6074,6076,6078,6080],{"class":39,"line":217},[37,6066,6051],{"class":114},[37,6068,6069],{"class":336},"rootDir",[37,6071,6021],{"class":114},[37,6073,168],{"class":114},[37,6075,6026],{"class":128},[37,6077,943],{"class":46},[37,6079,6021],{"class":128},[37,6081,214],{"class":114},[37,6083,6084,6086,6089,6091,6093,6096],{"class":39,"line":1205},[37,6085,6051],{"class":114},[37,6087,6088],{"class":336},"declaration",[37,6090,6021],{"class":114},[37,6092,168],{"class":114},[37,6094,6095],{"class":128}," false",[37,6097,214],{"class":114},[37,6099,6100,6102,6105,6107,6109,6111],{"class":39,"line":1211},[37,6101,6051],{"class":114},[37,6103,6104],{"class":336},"declarationMap",[37,6106,6021],{"class":114},[37,6108,168],{"class":114},[37,6110,6095],{"class":128},[37,6112,214],{"class":114},[37,6114,6115,6117,6120,6122,6124],{"class":39,"line":1217},[37,6116,6051],{"class":114},[37,6118,6119],{"class":336},"sourceMap",[37,6121,6021],{"class":114},[37,6123,168],{"class":114},[37,6125,6126],{"class":128}," false\n",[37,6128,6129],{"class":39,"line":1223},[37,6130,6131],{"class":114},"  },\n",[37,6133,6134,6136,6139,6141,6143,6145,6147,6149,6151],{"class":39,"line":1703},[37,6135,6014],{"class":114},[37,6137,6138],{"class":6017},"include",[37,6140,6021],{"class":114},[37,6142,168],{"class":114},[37,6144,171],{"class":114},[37,6146,6021],{"class":128},[37,6148,1231],{"class":46},[37,6150,6021],{"class":128},[37,6152,2388],{"class":114},[37,6154,6155],{"class":39,"line":1708},[37,6156,405],{"class":114},[27,6158,6162],{"className":6159,"code":6160,"filename":5374,"language":6161,"meta":33,"style":33},"language-js shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","\u002F**\n * k6 against the shop's JSON-RPC door.\n *\n * Staged on purpose: a flat rate draws flat lines and there is nothing to read in them.\n * The ramp, the plateau, the spike and the drain are what make latency, saturation and\n * error rate say something on a dashboard.\n *\n *   k6 run load.js\n *\u002F\nimport http from 'k6\u002Fhttp';\nimport { check, sleep } from 'k6';\nimport { Trend } from 'k6\u002Fmetrics';\n\nconst SHOP = 'http:\u002F\u002F127.0.0.1:4200\u002F_fougere\u002Fcall';\n\nconst checkoutTime = new Trend('fougere_checkout', true);\nconst reportTime = new Trend('fougere_report', true);\n\nexport const options = {\n  stages: [\n    { duration: '30s', target: 5 },    \u002F\u002F ramp — the system wakes up\n    { duration: '45s', target: 5 },    \u002F\u002F plateau — this is what \"normal\" looks like\n    { duration: '15s', target: 30 },   \u002F\u002F spike — six times the load, in fifteen seconds\n    { duration: '45s', target: 30 },   \u002F\u002F held — does latency hold or does it bend\n    { duration: '30s', target: 0 },    \u002F\u002F drain — saturation should return to zero\n  ],\n  thresholds: {\n    \u002F\u002F A refusal is not a failure: `reserve` is meant to refuse. Only transport errors count.\n    http_req_failed: ['rate\u003C0.01'],\n    'fougere_checkout': ['p(95)\u003C500'],\n  },\n};\n\nlet id = 0;\n\nfunction call(method, params = {}) {\n  return http.post(\n    SHOP,\n    JSON.stringify({ jsonrpc: '2.0', id: ++id, method, params: { params: {}, query: {}, input: undefined, state: {}, ...params } }),\n    { headers: { 'content-type': 'application\u002Fjson' }, tags: { op: method } },\n  );\n}\n\nexport default function () {\n  const roll = Math.random();\n\n  if (roll \u003C 0.7) {\n    const res = call('cart.checkout');\n    checkoutTime.add(res.timings.duration);\n    check(res, { 'checkout answered': (r) => r.status === 200 && !JSON.parse(r.body).error });\n  } else if (roll \u003C 0.93) {\n    const res = call('cart.report');\n    reportTime.add(res.timings.duration);\n    check(res, { 'report answered': (r) => r.status === 200 && !JSON.parse(r.body).error });\n  } else {\n    \u002F\u002F Deliberately refused by the catalog — this is what feeds the error rate.\n    const res = call('product.reserve');\n    check(res, { 'reserve refused as designed': (r) => r.status === 200 && JSON.parse(r.body).error !== undefined });\n  }\n\n  sleep(0.2 + Math.random() * 0.4);\n}\n\n","js",[16,6163,6164,6169,6174,6179,6184,6189,6194,6198,6203,6208,6226,6253,6275,6279,6297,6301,6331,6361,6365,6379,6389,6421,6449,6478,6505,6532,6539,6548,6553,6574,6599,6603,6608,6612,6626,6630,6654,6668,6675,6771,6817,6824,6828,6832,6846,6868,6872,6893,6917,6946,7028,7052,7074,7099,7168,7176,7181,7203,7276,7280,7284,7315],{"__ignoreMap":33},[37,6165,6166],{"class":39,"line":40},[37,6167,6168],{"class":246},"\u002F**\n",[37,6170,6171],{"class":39,"line":140},[37,6172,6173],{"class":246}," * k6 against the shop's JSON-RPC door.\n",[37,6175,6176],{"class":39,"line":147},[37,6177,6178],{"class":246}," *\n",[37,6180,6181],{"class":39,"line":161},[37,6182,6183],{"class":246}," * Staged on purpose: a flat rate draws flat lines and there is nothing to read in them.\n",[37,6185,6186],{"class":39,"line":217},[37,6187,6188],{"class":246}," * The ramp, the plateau, the spike and the drain are what make latency, saturation and\n",[37,6190,6191],{"class":39,"line":1205},[37,6192,6193],{"class":246}," * error rate say something on a dashboard.\n",[37,6195,6196],{"class":39,"line":1211},[37,6197,6178],{"class":246},[37,6199,6200],{"class":39,"line":1217},[37,6201,6202],{"class":246}," *   k6 run load.js\n",[37,6204,6205],{"class":39,"line":1223},[37,6206,6207],{"class":246}," *\u002F\n",[37,6209,6210,6212,6215,6217,6219,6222,6224],{"class":39,"line":1703},[37,6211,111],{"class":110},[37,6213,6214],{"class":118}," http ",[37,6216,5749],{"class":110},[37,6218,129],{"class":128},[37,6220,6221],{"class":46},"k6\u002Fhttp",[37,6223,134],{"class":128},[37,6225,137],{"class":114},[37,6227,6228,6230,6232,6235,6237,6240,6242,6244,6246,6249,6251],{"class":39,"line":1708},[37,6229,111],{"class":110},[37,6231,115],{"class":114},[37,6233,6234],{"class":118}," check",[37,6236,194],{"class":114},[37,6238,6239],{"class":118}," sleep",[37,6241,122],{"class":114},[37,6243,125],{"class":110},[37,6245,129],{"class":128},[37,6247,6248],{"class":46},"k6",[37,6250,134],{"class":128},[37,6252,137],{"class":114},[37,6254,6255,6257,6259,6262,6264,6266,6268,6271,6273],{"class":39,"line":1748},[37,6256,111],{"class":110},[37,6258,115],{"class":114},[37,6260,6261],{"class":118}," Trend",[37,6263,122],{"class":114},[37,6265,125],{"class":110},[37,6267,129],{"class":128},[37,6269,6270],{"class":46},"k6\u002Fmetrics",[37,6272,134],{"class":128},[37,6274,137],{"class":114},[37,6276,6277],{"class":39,"line":2218},[37,6278,144],{"emptyLinePlaceholder":143},[37,6280,6281,6283,6286,6288,6290,6293,6295],{"class":39,"line":2226},[37,6282,1550],{"class":1010},[37,6284,6285],{"class":118}," SHOP ",[37,6287,1582],{"class":114},[37,6289,129],{"class":128},[37,6291,6292],{"class":46},"http:\u002F\u002F127.0.0.1:4200\u002F_fougere\u002Fcall",[37,6294,134],{"class":128},[37,6296,137],{"class":114},[37,6298,6299],{"class":39,"line":2234},[37,6300,144],{"emptyLinePlaceholder":143},[37,6302,6303,6305,6308,6310,6312,6314,6316,6318,6321,6323,6325,6327,6329],{"class":39,"line":2242},[37,6304,1550],{"class":1010},[37,6306,6307],{"class":118}," checkoutTime ",[37,6309,1582],{"class":114},[37,6311,5941],{"class":114},[37,6313,6261],{"class":5944},[37,6315,155],{"class":154},[37,6317,134],{"class":128},[37,6319,6320],{"class":46},"fougere_checkout",[37,6322,134],{"class":128},[37,6324,194],{"class":114},[37,6326,394],{"class":393},[37,6328,223],{"class":154},[37,6330,137],{"class":114},[37,6332,6333,6335,6338,6340,6342,6344,6346,6348,6351,6353,6355,6357,6359],{"class":39,"line":2247},[37,6334,1550],{"class":1010},[37,6336,6337],{"class":118}," reportTime ",[37,6339,1582],{"class":114},[37,6341,5941],{"class":114},[37,6343,6261],{"class":5944},[37,6345,155],{"class":154},[37,6347,134],{"class":128},[37,6349,6350],{"class":46},"fougere_report",[37,6352,134],{"class":128},[37,6354,194],{"class":114},[37,6356,394],{"class":393},[37,6358,223],{"class":154},[37,6360,137],{"class":114},[37,6362,6363],{"class":39,"line":2255},[37,6364,144],{"emptyLinePlaceholder":143},[37,6366,6367,6369,6372,6375,6377],{"class":39,"line":2260},[37,6368,276],{"class":110},[37,6370,6371],{"class":1010}," const",[37,6373,6374],{"class":118}," options ",[37,6376,1582],{"class":114},[37,6378,342],{"class":114},[37,6380,6381,6384,6386],{"class":39,"line":2267},[37,6382,6383],{"class":164},"  stages",[37,6385,168],{"class":114},[37,6387,6388],{"class":154}," [\n",[37,6390,6391,6394,6397,6399,6401,6404,6406,6408,6411,6413,6416,6418],{"class":39,"line":2272},[37,6392,6393],{"class":114},"    {",[37,6395,6396],{"class":164}," duration",[37,6398,168],{"class":114},[37,6400,129],{"class":128},[37,6402,6403],{"class":46},"30s",[37,6405,134],{"class":128},[37,6407,194],{"class":114},[37,6409,6410],{"class":164}," target",[37,6412,168],{"class":114},[37,6414,6415],{"class":781}," 5",[37,6417,397],{"class":114},[37,6419,6420],{"class":246},"    \u002F\u002F ramp — the system wakes up\n",[37,6422,6423,6425,6427,6429,6431,6434,6436,6438,6440,6442,6444,6446],{"class":39,"line":2280},[37,6424,6393],{"class":114},[37,6426,6396],{"class":164},[37,6428,168],{"class":114},[37,6430,129],{"class":128},[37,6432,6433],{"class":46},"45s",[37,6435,134],{"class":128},[37,6437,194],{"class":114},[37,6439,6410],{"class":164},[37,6441,168],{"class":114},[37,6443,6415],{"class":781},[37,6445,397],{"class":114},[37,6447,6448],{"class":246},"    \u002F\u002F plateau — this is what \"normal\" looks like\n",[37,6450,6451,6453,6455,6457,6459,6462,6464,6466,6468,6470,6473,6475],{"class":39,"line":2288},[37,6452,6393],{"class":114},[37,6454,6396],{"class":164},[37,6456,168],{"class":114},[37,6458,129],{"class":128},[37,6460,6461],{"class":46},"15s",[37,6463,134],{"class":128},[37,6465,194],{"class":114},[37,6467,6410],{"class":164},[37,6469,168],{"class":114},[37,6471,6472],{"class":781}," 30",[37,6474,397],{"class":114},[37,6476,6477],{"class":246},"   \u002F\u002F spike — six times the load, in fifteen seconds\n",[37,6479,6480,6482,6484,6486,6488,6490,6492,6494,6496,6498,6500,6502],{"class":39,"line":2296},[37,6481,6393],{"class":114},[37,6483,6396],{"class":164},[37,6485,168],{"class":114},[37,6487,129],{"class":128},[37,6489,6433],{"class":46},[37,6491,134],{"class":128},[37,6493,194],{"class":114},[37,6495,6410],{"class":164},[37,6497,168],{"class":114},[37,6499,6472],{"class":781},[37,6501,397],{"class":114},[37,6503,6504],{"class":246},"   \u002F\u002F held — does latency hold or does it bend\n",[37,6506,6507,6509,6511,6513,6515,6517,6519,6521,6523,6525,6527,6529],{"class":39,"line":2304},[37,6508,6393],{"class":114},[37,6510,6396],{"class":164},[37,6512,168],{"class":114},[37,6514,129],{"class":128},[37,6516,6403],{"class":46},[37,6518,134],{"class":128},[37,6520,194],{"class":114},[37,6522,6410],{"class":164},[37,6524,168],{"class":114},[37,6526,5684],{"class":781},[37,6528,397],{"class":114},[37,6530,6531],{"class":246},"    \u002F\u002F drain — saturation should return to zero\n",[37,6533,6534,6537],{"class":39,"line":2312},[37,6535,6536],{"class":154},"  ]",[37,6538,214],{"class":114},[37,6540,6541,6544,6546],{"class":39,"line":2320},[37,6542,6543],{"class":164},"  thresholds",[37,6545,168],{"class":114},[37,6547,342],{"class":114},[37,6549,6550],{"class":39,"line":2328},[37,6551,6552],{"class":246},"    \u002F\u002F A refusal is not a failure: `reserve` is meant to refuse. Only transport errors count.\n",[37,6554,6555,6558,6560,6562,6564,6567,6569,6572],{"class":39,"line":2336},[37,6556,6557],{"class":164},"    http_req_failed",[37,6559,168],{"class":114},[37,6561,171],{"class":154},[37,6563,134],{"class":128},[37,6565,6566],{"class":46},"rate\u003C0.01",[37,6568,134],{"class":128},[37,6570,6571],{"class":154},"]",[37,6573,214],{"class":114},[37,6575,6576,6579,6582,6584,6586,6588,6590,6593,6595,6597],{"class":39,"line":2344},[37,6577,6578],{"class":128},"    '",[37,6580,6320],{"class":6581},"sK7Y8",[37,6583,134],{"class":128},[37,6585,168],{"class":114},[37,6587,171],{"class":154},[37,6589,134],{"class":128},[37,6591,6592],{"class":46},"p(95)\u003C500",[37,6594,134],{"class":128},[37,6596,6571],{"class":154},[37,6598,214],{"class":114},[37,6600,6601],{"class":39,"line":2349},[37,6602,6131],{"class":114},[37,6604,6605],{"class":39,"line":2357},[37,6606,6607],{"class":114},"};\n",[37,6609,6610],{"class":39,"line":2362},[37,6611,144],{"emptyLinePlaceholder":143},[37,6613,6614,6617,6620,6622,6624],{"class":39,"line":2369},[37,6615,6616],{"class":1010},"let",[37,6618,6619],{"class":118}," id ",[37,6621,1582],{"class":114},[37,6623,5684],{"class":781},[37,6625,137],{"class":114},[37,6627,6628],{"class":39,"line":2374},[37,6629,144],{"emptyLinePlaceholder":143},[37,6631,6632,6635,6637,6639,6642,6644,6647,6649,6652],{"class":39,"line":2391},[37,6633,6634],{"class":1010},"function",[37,6636,1147],{"class":150},[37,6638,155],{"class":114},[37,6640,6641],{"class":1031},"method",[37,6643,194],{"class":114},[37,6645,6646],{"class":1031}," params",[37,6648,1563],{"class":114},[37,6650,6651],{"class":114}," {})",[37,6653,342],{"class":114},[37,6655,6656,6659,6662,6664,6666],{"class":39,"line":2400},[37,6657,6658],{"class":110},"  return",[37,6660,6661],{"class":118}," http",[37,6663,943],{"class":114},[37,6665,1636],{"class":150},[37,6667,4698],{"class":5844},[37,6669,6670,6673],{"class":39,"line":2408},[37,6671,6672],{"class":118},"    SHOP",[37,6674,214],{"class":114},[37,6676,6677,6680,6682,6685,6687,6689,6692,6694,6696,6699,6701,6703,6706,6708,6711,6713,6715,6718,6720,6722,6724,6726,6728,6730,6733,6736,6738,6740,6743,6745,6748,6750,6753,6755,6757,6760,6763,6765,6767,6769],{"class":39,"line":2416},[37,6678,6679],{"class":118},"    JSON",[37,6681,943],{"class":114},[37,6683,6684],{"class":150},"stringify",[37,6686,155],{"class":5844},[37,6688,179],{"class":114},[37,6690,6691],{"class":164}," jsonrpc",[37,6693,168],{"class":114},[37,6695,129],{"class":128},[37,6697,6698],{"class":46},"2.0",[37,6700,134],{"class":128},[37,6702,194],{"class":114},[37,6704,6705],{"class":164}," id",[37,6707,168],{"class":114},[37,6709,6710],{"class":114}," ++",[37,6712,5867],{"class":118},[37,6714,194],{"class":114},[37,6716,6717],{"class":118}," method",[37,6719,194],{"class":114},[37,6721,6646],{"class":164},[37,6723,168],{"class":114},[37,6725,115],{"class":114},[37,6727,6646],{"class":164},[37,6729,168],{"class":114},[37,6731,6732],{"class":114}," {},",[37,6734,6735],{"class":164}," query",[37,6737,168],{"class":114},[37,6739,6732],{"class":114},[37,6741,6742],{"class":164}," input",[37,6744,168],{"class":114},[37,6746,6747],{"class":128}," undefined",[37,6749,194],{"class":114},[37,6751,6752],{"class":164}," state",[37,6754,168],{"class":114},[37,6756,6732],{"class":114},[37,6758,6759],{"class":114}," ...",[37,6761,6762],{"class":118},"params",[37,6764,122],{"class":114},[37,6766,122],{"class":114},[37,6768,223],{"class":5844},[37,6770,214],{"class":114},[37,6772,6773,6775,6778,6780,6782,6784,6787,6789,6791,6793,6796,6798,6800,6803,6805,6807,6809,6811,6813,6815],{"class":39,"line":2424},[37,6774,6393],{"class":114},[37,6776,6777],{"class":164}," headers",[37,6779,168],{"class":114},[37,6781,115],{"class":114},[37,6783,129],{"class":128},[37,6785,6786],{"class":6581},"content-type",[37,6788,134],{"class":128},[37,6790,168],{"class":114},[37,6792,129],{"class":128},[37,6794,6795],{"class":46},"application\u002Fjson",[37,6797,134],{"class":128},[37,6799,397],{"class":114},[37,6801,6802],{"class":164}," tags",[37,6804,168],{"class":114},[37,6806,115],{"class":114},[37,6808,1167],{"class":164},[37,6810,168],{"class":114},[37,6812,6717],{"class":118},[37,6814,122],{"class":114},[37,6816,376],{"class":114},[37,6818,6819,6822],{"class":39,"line":2432},[37,6820,6821],{"class":5844},"  )",[37,6823,137],{"class":114},[37,6825,6826],{"class":39,"line":2440},[37,6827,405],{"class":114},[37,6829,6830],{"class":39,"line":2448},[37,6831,144],{"emptyLinePlaceholder":143},[37,6833,6834,6836,6838,6841,6844],{"class":39,"line":2456},[37,6835,276],{"class":110},[37,6837,279],{"class":110},[37,6839,6840],{"class":1010}," function",[37,6842,6843],{"class":114}," ()",[37,6845,342],{"class":114},[37,6847,6848,6851,6854,6856,6859,6861,6864,6866],{"class":39,"line":2464},[37,6849,6850],{"class":1010},"  const",[37,6852,6853],{"class":118}," roll",[37,6855,1563],{"class":114},[37,6857,6858],{"class":118}," Math",[37,6860,943],{"class":114},[37,6862,6863],{"class":150},"random",[37,6865,5635],{"class":5844},[37,6867,137],{"class":114},[37,6869,6870],{"class":39,"line":2469},[37,6871,144],{"emptyLinePlaceholder":143},[37,6873,6874,6877,6880,6883,6886,6889,6891],{"class":39,"line":2477},[37,6875,6876],{"class":110},"  if",[37,6878,6879],{"class":5844}," (",[37,6881,6882],{"class":118},"roll",[37,6884,6885],{"class":114}," \u003C",[37,6887,6888],{"class":781}," 0.7",[37,6890,223],{"class":5844},[37,6892,342],{"class":114},[37,6894,6895,6898,6901,6903,6905,6907,6909,6911,6913,6915],{"class":39,"line":2482},[37,6896,6897],{"class":1010},"    const",[37,6899,6900],{"class":118}," res",[37,6902,1563],{"class":114},[37,6904,1147],{"class":150},[37,6906,155],{"class":5844},[37,6908,134],{"class":128},[37,6910,4833],{"class":46},[37,6912,134],{"class":128},[37,6914,223],{"class":5844},[37,6916,137],{"class":114},[37,6918,6919,6922,6924,6927,6929,6932,6934,6937,6939,6942,6944],{"class":39,"line":2489},[37,6920,6921],{"class":118},"    checkoutTime",[37,6923,943],{"class":114},[37,6925,6926],{"class":150},"add",[37,6928,155],{"class":5844},[37,6930,6931],{"class":118},"res",[37,6933,943],{"class":114},[37,6935,6936],{"class":1613},"timings",[37,6938,943],{"class":114},[37,6940,6941],{"class":1613},"duration",[37,6943,223],{"class":5844},[37,6945,137],{"class":114},[37,6947,6948,6951,6953,6955,6957,6959,6961,6964,6966,6968,6970,6973,6975,6979,6982,6984,6987,6990,6993,6996,6999,7002,7004,7007,7009,7011,7013,7016,7018,7020,7022,7024,7026],{"class":39,"line":2494},[37,6949,6950],{"class":150},"    check",[37,6952,155],{"class":5844},[37,6954,6931],{"class":118},[37,6956,194],{"class":114},[37,6958,115],{"class":114},[37,6960,129],{"class":128},[37,6962,6963],{"class":6581},"checkout answered",[37,6965,134],{"class":128},[37,6967,168],{"class":114},[37,6969,6879],{"class":114},[37,6971,6972],{"class":1031},"r",[37,6974,223],{"class":114},[37,6976,6978],{"class":6977},"scTuO"," =>",[37,6980,6981],{"class":118}," r",[37,6983,943],{"class":114},[37,6985,6986],{"class":1613},"status",[37,6988,6989],{"class":114}," ===",[37,6991,6992],{"class":781}," 200",[37,6994,6995],{"class":114}," &&",[37,6997,6998],{"class":114}," !",[37,7000,7001],{"class":118},"JSON",[37,7003,943],{"class":114},[37,7005,7006],{"class":150},"parse",[37,7008,155],{"class":5844},[37,7010,6972],{"class":118},[37,7012,943],{"class":114},[37,7014,7015],{"class":1613},"body",[37,7017,223],{"class":5844},[37,7019,943],{"class":114},[37,7021,641],{"class":1613},[37,7023,122],{"class":114},[37,7025,223],{"class":5844},[37,7027,137],{"class":114},[37,7029,7030,7033,7036,7039,7041,7043,7045,7048,7050],{"class":39,"line":2508},[37,7031,7032],{"class":114},"  }",[37,7034,7035],{"class":110}," else",[37,7037,7038],{"class":110}," if",[37,7040,6879],{"class":5844},[37,7042,6882],{"class":118},[37,7044,6885],{"class":114},[37,7046,7047],{"class":781}," 0.93",[37,7049,223],{"class":5844},[37,7051,342],{"class":114},[37,7053,7054,7056,7058,7060,7062,7064,7066,7068,7070,7072],{"class":39,"line":2522},[37,7055,6897],{"class":1010},[37,7057,6900],{"class":118},[37,7059,1563],{"class":114},[37,7061,1147],{"class":150},[37,7063,155],{"class":5844},[37,7065,134],{"class":128},[37,7067,5418],{"class":46},[37,7069,134],{"class":128},[37,7071,223],{"class":5844},[37,7073,137],{"class":114},[37,7075,7076,7079,7081,7083,7085,7087,7089,7091,7093,7095,7097],{"class":39,"line":2536},[37,7077,7078],{"class":118},"    reportTime",[37,7080,943],{"class":114},[37,7082,6926],{"class":150},[37,7084,155],{"class":5844},[37,7086,6931],{"class":118},[37,7088,943],{"class":114},[37,7090,6936],{"class":1613},[37,7092,943],{"class":114},[37,7094,6941],{"class":1613},[37,7096,223],{"class":5844},[37,7098,137],{"class":114},[37,7100,7101,7103,7105,7107,7109,7111,7113,7116,7118,7120,7122,7124,7126,7128,7130,7132,7134,7136,7138,7140,7142,7144,7146,7148,7150,7152,7154,7156,7158,7160,7162,7164,7166],{"class":39,"line":2550},[37,7102,6950],{"class":150},[37,7104,155],{"class":5844},[37,7106,6931],{"class":118},[37,7108,194],{"class":114},[37,7110,115],{"class":114},[37,7112,129],{"class":128},[37,7114,7115],{"class":6581},"report answered",[37,7117,134],{"class":128},[37,7119,168],{"class":114},[37,7121,6879],{"class":114},[37,7123,6972],{"class":1031},[37,7125,223],{"class":114},[37,7127,6978],{"class":6977},[37,7129,6981],{"class":118},[37,7131,943],{"class":114},[37,7133,6986],{"class":1613},[37,7135,6989],{"class":114},[37,7137,6992],{"class":781},[37,7139,6995],{"class":114},[37,7141,6998],{"class":114},[37,7143,7001],{"class":118},[37,7145,943],{"class":114},[37,7147,7006],{"class":150},[37,7149,155],{"class":5844},[37,7151,6972],{"class":118},[37,7153,943],{"class":114},[37,7155,7015],{"class":1613},[37,7157,223],{"class":5844},[37,7159,943],{"class":114},[37,7161,641],{"class":1613},[37,7163,122],{"class":114},[37,7165,223],{"class":5844},[37,7167,137],{"class":114},[37,7169,7170,7172,7174],{"class":39,"line":2558},[37,7171,7032],{"class":114},[37,7173,7035],{"class":110},[37,7175,342],{"class":114},[37,7177,7178],{"class":39,"line":2566},[37,7179,7180],{"class":246},"    \u002F\u002F Deliberately refused by the catalog — this is what feeds the error rate.\n",[37,7182,7183,7185,7187,7189,7191,7193,7195,7197,7199,7201],{"class":39,"line":2574},[37,7184,6897],{"class":1010},[37,7186,6900],{"class":118},[37,7188,1563],{"class":114},[37,7190,1147],{"class":150},[37,7192,155],{"class":5844},[37,7194,134],{"class":128},[37,7196,5403],{"class":46},[37,7198,134],{"class":128},[37,7200,223],{"class":5844},[37,7202,137],{"class":114},[37,7204,7205,7207,7209,7211,7213,7215,7217,7220,7222,7224,7226,7228,7230,7232,7234,7236,7238,7240,7242,7244,7247,7249,7251,7253,7255,7257,7259,7261,7263,7265,7268,7270,7272,7274],{"class":39,"line":2582},[37,7206,6950],{"class":150},[37,7208,155],{"class":5844},[37,7210,6931],{"class":118},[37,7212,194],{"class":114},[37,7214,115],{"class":114},[37,7216,129],{"class":128},[37,7218,7219],{"class":6581},"reserve refused as designed",[37,7221,134],{"class":128},[37,7223,168],{"class":114},[37,7225,6879],{"class":114},[37,7227,6972],{"class":1031},[37,7229,223],{"class":114},[37,7231,6978],{"class":6977},[37,7233,6981],{"class":118},[37,7235,943],{"class":114},[37,7237,6986],{"class":1613},[37,7239,6989],{"class":114},[37,7241,6992],{"class":781},[37,7243,6995],{"class":114},[37,7245,7246],{"class":118}," JSON",[37,7248,943],{"class":114},[37,7250,7006],{"class":150},[37,7252,155],{"class":5844},[37,7254,6972],{"class":118},[37,7256,943],{"class":114},[37,7258,7015],{"class":1613},[37,7260,223],{"class":5844},[37,7262,943],{"class":114},[37,7264,641],{"class":1613},[37,7266,7267],{"class":114}," !==",[37,7269,6747],{"class":128},[37,7271,122],{"class":114},[37,7273,223],{"class":5844},[37,7275,137],{"class":114},[37,7277,7278],{"class":39,"line":2590},[37,7279,5851],{"class":114},[37,7281,7282],{"class":39,"line":2598},[37,7283,144],{"emptyLinePlaceholder":143},[37,7285,7286,7289,7291,7294,7297,7299,7301,7303,7305,7308,7311,7313],{"class":39,"line":2606},[37,7287,7288],{"class":150},"  sleep",[37,7290,155],{"class":5844},[37,7292,7293],{"class":781},"0.2",[37,7295,7296],{"class":114}," +",[37,7298,6858],{"class":118},[37,7300,943],{"class":114},[37,7302,6863],{"class":150},[37,7304,5635],{"class":5844},[37,7306,7307],{"class":114}," *",[37,7309,7310],{"class":781}," 0.4",[37,7312,223],{"class":5844},[37,7314,137],{"class":114},[37,7316,7317],{"class":39,"line":2614},[37,7318,405],{"class":114},[27,7320,7323],{"className":6000,"code":7321,"filename":7322,"language":6003,"meta":33,"style":33},"{\n  \"name\": \"fougere-demo-observability\",\n  \"version\": \"0.0.3-alpha.13\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"tsx src\u002Fmain.ts\",\n    \"load\": \"k6 run load.js\",\n    \"signoz\": \"cd signoz && foundryctl cast -f casting.yaml\",\n    \"typecheck\": \"tsc -p . && tsc -p catalog && tsc -p shipping && tsc -p shop\"\n  },\n  \"dependencies\": {\n    \"@fougere\u002Fdefaults\": \"^0.30.0-alpha.5\",\n    \"@fougere\u002Fcalls\": \"^0.30.0-alpha.5\",\n    \"@fougere\u002Fcontainer\": \"^0.30.0-alpha.5\",\n    \"@fougere\u002Fcore\": \"^0.30.0-alpha.5\",\n    \"@fougere\u002Flog\": \"^0.30.0-alpha.5\",\n    \"@fougere\u002Fobservability\": \"^0.30.0-alpha.5\",\n    \"@fougere\u002Fschema\": \"^0.30.0-alpha.5\",\n    \"@fougere\u002Ftransport-http\": \"^0.30.0-alpha.5\",\n    \"jiti\": \"^2.0.0\",\n    \"@fougere\u002Fcompiler\": \"^0.30.0-alpha.5\"\n  },\n  \"devDependencies\": {\n    \"tsx\": \"^4.21.0\"\n  }\n}\n\n","package.json",[16,7324,7325,7329,7349,7369,7383,7403,7416,7436,7456,7476,7495,7499,7512,7532,7551,7570,7588,7607,7625,7643,7662,7682,7699,7703,7716,7734,7738],{"__ignoreMap":33},[37,7326,7327],{"class":39,"line":40},[37,7328,158],{"class":114},[37,7330,7331,7333,7336,7338,7340,7342,7345,7347],{"class":39,"line":140},[37,7332,6014],{"class":114},[37,7334,7335],{"class":6017},"name",[37,7337,6021],{"class":114},[37,7339,168],{"class":114},[37,7341,6026],{"class":128},[37,7343,7344],{"class":46},"fougere-demo-observability",[37,7346,6021],{"class":128},[37,7348,214],{"class":114},[37,7350,7351,7353,7356,7358,7360,7362,7365,7367],{"class":39,"line":147},[37,7352,6014],{"class":114},[37,7354,7355],{"class":6017},"version",[37,7357,6021],{"class":114},[37,7359,168],{"class":114},[37,7361,6026],{"class":128},[37,7363,7364],{"class":46},"0.0.3-alpha.13",[37,7366,6021],{"class":128},[37,7368,214],{"class":114},[37,7370,7371,7373,7375,7377,7379,7381],{"class":39,"line":161},[37,7372,6014],{"class":114},[37,7374,5790],{"class":6017},[37,7376,6021],{"class":114},[37,7378,168],{"class":114},[37,7380,394],{"class":128},[37,7382,214],{"class":114},[37,7384,7385,7387,7390,7392,7394,7396,7399,7401],{"class":39,"line":217},[37,7386,6014],{"class":114},[37,7388,7389],{"class":6017},"type",[37,7391,6021],{"class":114},[37,7393,168],{"class":114},[37,7395,6026],{"class":128},[37,7397,7398],{"class":46},"module",[37,7400,6021],{"class":128},[37,7402,214],{"class":114},[37,7404,7405,7407,7410,7412,7414],{"class":39,"line":1205},[37,7406,6014],{"class":114},[37,7408,7409],{"class":6017},"scripts",[37,7411,6021],{"class":114},[37,7413,168],{"class":114},[37,7415,342],{"class":114},[37,7417,7418,7420,7423,7425,7427,7429,7432,7434],{"class":39,"line":1211},[37,7419,6051],{"class":114},[37,7421,7422],{"class":336},"dev",[37,7424,6021],{"class":114},[37,7426,168],{"class":114},[37,7428,6026],{"class":128},[37,7430,7431],{"class":46},"tsx src\u002Fmain.ts",[37,7433,6021],{"class":128},[37,7435,214],{"class":114},[37,7437,7438,7440,7443,7445,7447,7449,7452,7454],{"class":39,"line":1217},[37,7439,6051],{"class":114},[37,7441,7442],{"class":336},"load",[37,7444,6021],{"class":114},[37,7446,168],{"class":114},[37,7448,6026],{"class":128},[37,7450,7451],{"class":46},"k6 run load.js",[37,7453,6021],{"class":128},[37,7455,214],{"class":114},[37,7457,7458,7460,7463,7465,7467,7469,7472,7474],{"class":39,"line":1223},[37,7459,6051],{"class":114},[37,7461,7462],{"class":336},"signoz",[37,7464,6021],{"class":114},[37,7466,168],{"class":114},[37,7468,6026],{"class":128},[37,7470,7471],{"class":46},"cd signoz && foundryctl cast -f casting.yaml",[37,7473,6021],{"class":128},[37,7475,214],{"class":114},[37,7477,7478,7480,7483,7485,7487,7489,7492],{"class":39,"line":1703},[37,7479,6051],{"class":114},[37,7481,7482],{"class":336},"typecheck",[37,7484,6021],{"class":114},[37,7486,168],{"class":114},[37,7488,6026],{"class":128},[37,7490,7491],{"class":46},"tsc -p . && tsc -p catalog && tsc -p shipping && tsc -p shop",[37,7493,7494],{"class":128},"\"\n",[37,7496,7497],{"class":39,"line":1708},[37,7498,6131],{"class":114},[37,7500,7501,7503,7506,7508,7510],{"class":39,"line":1748},[37,7502,6014],{"class":114},[37,7504,7505],{"class":6017},"dependencies",[37,7507,6021],{"class":114},[37,7509,168],{"class":114},[37,7511,342],{"class":114},[37,7513,7514,7516,7519,7521,7523,7525,7528,7530],{"class":39,"line":2218},[37,7515,6051],{"class":114},[37,7517,7518],{"class":336},"@fougere\u002Fdefaults",[37,7520,6021],{"class":114},[37,7522,168],{"class":114},[37,7524,6026],{"class":128},[37,7526,7527],{"class":46},"^0.30.0-alpha.5",[37,7529,6021],{"class":128},[37,7531,214],{"class":114},[37,7533,7534,7536,7539,7541,7543,7545,7547,7549],{"class":39,"line":2226},[37,7535,6051],{"class":114},[37,7537,7538],{"class":336},"@fougere\u002Fcalls",[37,7540,6021],{"class":114},[37,7542,168],{"class":114},[37,7544,6026],{"class":128},[37,7546,7527],{"class":46},[37,7548,6021],{"class":128},[37,7550,214],{"class":114},[37,7552,7553,7555,7558,7560,7562,7564,7566,7568],{"class":39,"line":2234},[37,7554,6051],{"class":114},[37,7556,7557],{"class":336},"@fougere\u002Fcontainer",[37,7559,6021],{"class":114},[37,7561,168],{"class":114},[37,7563,6026],{"class":128},[37,7565,7527],{"class":46},[37,7567,6021],{"class":128},[37,7569,214],{"class":114},[37,7571,7572,7574,7576,7578,7580,7582,7584,7586],{"class":39,"line":2242},[37,7573,6051],{"class":114},[37,7575,993],{"class":336},[37,7577,6021],{"class":114},[37,7579,168],{"class":114},[37,7581,6026],{"class":128},[37,7583,7527],{"class":46},[37,7585,6021],{"class":128},[37,7587,214],{"class":114},[37,7589,7590,7592,7595,7597,7599,7601,7603,7605],{"class":39,"line":2247},[37,7591,6051],{"class":114},[37,7593,7594],{"class":336},"@fougere\u002Flog",[37,7596,6021],{"class":114},[37,7598,168],{"class":114},[37,7600,6026],{"class":128},[37,7602,7527],{"class":46},[37,7604,6021],{"class":128},[37,7606,214],{"class":114},[37,7608,7609,7611,7613,7615,7617,7619,7621,7623],{"class":39,"line":2255},[37,7610,6051],{"class":114},[37,7612,18],{"class":336},[37,7614,6021],{"class":114},[37,7616,168],{"class":114},[37,7618,6026],{"class":128},[37,7620,7527],{"class":46},[37,7622,6021],{"class":128},[37,7624,214],{"class":114},[37,7626,7627,7629,7631,7633,7635,7637,7639,7641],{"class":39,"line":2260},[37,7628,6051],{"class":114},[37,7630,5595],{"class":336},[37,7632,6021],{"class":114},[37,7634,168],{"class":114},[37,7636,6026],{"class":128},[37,7638,7527],{"class":46},[37,7640,6021],{"class":128},[37,7642,214],{"class":114},[37,7644,7645,7647,7650,7652,7654,7656,7658,7660],{"class":39,"line":2267},[37,7646,6051],{"class":114},[37,7648,7649],{"class":336},"@fougere\u002Ftransport-http",[37,7651,6021],{"class":114},[37,7653,168],{"class":114},[37,7655,6026],{"class":128},[37,7657,7527],{"class":46},[37,7659,6021],{"class":128},[37,7661,214],{"class":114},[37,7663,7664,7666,7669,7671,7673,7675,7678,7680],{"class":39,"line":2272},[37,7665,6051],{"class":114},[37,7667,7668],{"class":336},"jiti",[37,7670,6021],{"class":114},[37,7672,168],{"class":114},[37,7674,6026],{"class":128},[37,7676,7677],{"class":46},"^2.0.0",[37,7679,6021],{"class":128},[37,7681,214],{"class":114},[37,7683,7684,7686,7689,7691,7693,7695,7697],{"class":39,"line":2280},[37,7685,6051],{"class":114},[37,7687,7688],{"class":336},"@fougere\u002Fcompiler",[37,7690,6021],{"class":114},[37,7692,168],{"class":114},[37,7694,6026],{"class":128},[37,7696,7527],{"class":46},[37,7698,7494],{"class":128},[37,7700,7701],{"class":39,"line":2288},[37,7702,6131],{"class":114},[37,7704,7705,7707,7710,7712,7714],{"class":39,"line":2296},[37,7706,6014],{"class":114},[37,7708,7709],{"class":6017},"devDependencies",[37,7711,6021],{"class":114},[37,7713,168],{"class":114},[37,7715,342],{"class":114},[37,7717,7718,7720,7723,7725,7727,7729,7732],{"class":39,"line":2304},[37,7719,6051],{"class":114},[37,7721,7722],{"class":336},"tsx",[37,7724,6021],{"class":114},[37,7726,168],{"class":114},[37,7728,6026],{"class":128},[37,7730,7731],{"class":46},"^4.21.0",[37,7733,7494],{"class":128},[37,7735,7736],{"class":39,"line":2312},[37,7737,5851],{"class":114},[37,7739,7740],{"class":39,"line":2320},[37,7741,405],{"class":114},[27,7743,7746],{"className":101,"code":7744,"filename":7745,"language":103,"meta":33,"style":33},"\u002F**\n * A Frond with no entity at all — an operation about no stored row is ordinary,\n * and its identity card publishes a facade with no schema.\n *\u002F\nexport default class ShipmentHandler {\n  \u002F** What shipping this basket would cost. *\u002F\n  async quote() {\n    \u002F\u002F Carriers are slow and uneven; that is the whole point of quoting one.\n    await new Promise((resolve) => setTimeout(resolve, 8 + Math.floor(Math.random() * 45)));\n\n    return { carrier: 'colissimo', cents: 490 + Math.floor(Math.random() * 300) };\n  }\n\n  \u002F** Where a parcel is. *\u002F\n  async track() {\n    await new Promise((resolve) => setTimeout(resolve, 4 + Math.floor(Math.random() * 20)));\n\n    return { status: 'in_transit' };\n  }\n}\n\n","shipping\u002Ffronds\u002Fshipping\u002Fhandlers\u002FShipmentHandler.ts",[16,7747,7748,7752,7757,7762,7766,7779,7784,7795,7800,7862,7866,7922,7926,7930,7935,7946,8002,8006,8026,8030],{"__ignoreMap":33},[37,7749,7750],{"class":39,"line":40},[37,7751,6168],{"class":246},[37,7753,7754],{"class":39,"line":140},[37,7755,7756],{"class":246}," * A Frond with no entity at all — an operation about no stored row is ordinary,\n",[37,7758,7759],{"class":39,"line":147},[37,7760,7761],{"class":246}," * and its identity card publishes a facade with no schema.\n",[37,7763,7764],{"class":39,"line":161},[37,7765,6207],{"class":246},[37,7767,7768,7770,7772,7774,7777],{"class":39,"line":217},[37,7769,276],{"class":110},[37,7771,279],{"class":110},[37,7773,1011],{"class":1010},[37,7775,7776],{"class":1014}," ShipmentHandler",[37,7778,342],{"class":114},[37,7780,7781],{"class":39,"line":1205},[37,7782,7783],{"class":246},"  \u002F** What shipping this basket would cost. *\u002F\n",[37,7785,7786,7788,7791,7793],{"class":39,"line":1211},[37,7787,1022],{"class":1010},[37,7789,7790],{"class":1025}," quote",[37,7792,5635],{"class":114},[37,7794,342],{"class":114},[37,7796,7797],{"class":39,"line":1217},[37,7798,7799],{"class":246},"    \u002F\u002F Carriers are slow and uneven; that is the whole point of quoting one.\n",[37,7801,7802,7805,7807,7809,7811,7813,7816,7818,7820,7823,7825,7827,7829,7832,7834,7836,7838,7841,7843,7846,7848,7850,7852,7854,7857,7860],{"class":39,"line":1223},[37,7803,7804],{"class":110},"    await",[37,7806,5941],{"class":114},[37,7808,1046],{"class":1014},[37,7810,155],{"class":5844},[37,7812,155],{"class":114},[37,7814,7815],{"class":1031},"resolve",[37,7817,223],{"class":114},[37,7819,6978],{"class":6977},[37,7821,7822],{"class":5944}," setTimeout",[37,7824,155],{"class":5844},[37,7826,7815],{"class":118},[37,7828,194],{"class":114},[37,7830,7831],{"class":781}," 8",[37,7833,7296],{"class":114},[37,7835,6858],{"class":118},[37,7837,943],{"class":114},[37,7839,7840],{"class":5944},"floor",[37,7842,155],{"class":5844},[37,7844,7845],{"class":118},"Math",[37,7847,943],{"class":114},[37,7849,6863],{"class":5944},[37,7851,5635],{"class":5844},[37,7853,7307],{"class":114},[37,7855,7856],{"class":781}," 45",[37,7858,7859],{"class":5844},")))",[37,7861,137],{"class":114},[37,7863,7864],{"class":39,"line":1703},[37,7865,144],{"emptyLinePlaceholder":143},[37,7867,7868,7870,7872,7875,7877,7879,7882,7884,7886,7889,7891,7894,7896,7898,7900,7902,7904,7906,7908,7910,7912,7914,7917,7919],{"class":39,"line":1708},[37,7869,5827],{"class":110},[37,7871,115],{"class":114},[37,7873,7874],{"class":164}," carrier",[37,7876,168],{"class":114},[37,7878,129],{"class":128},[37,7880,7881],{"class":46},"colissimo",[37,7883,134],{"class":128},[37,7885,194],{"class":114},[37,7887,7888],{"class":164}," cents",[37,7890,168],{"class":114},[37,7892,7893],{"class":781}," 490",[37,7895,7296],{"class":114},[37,7897,6858],{"class":118},[37,7899,943],{"class":114},[37,7901,7840],{"class":150},[37,7903,155],{"class":5844},[37,7905,7845],{"class":118},[37,7907,943],{"class":114},[37,7909,6863],{"class":150},[37,7911,5635],{"class":5844},[37,7913,7307],{"class":114},[37,7915,7916],{"class":781}," 300",[37,7918,223],{"class":5844},[37,7920,7921],{"class":114}," };\n",[37,7923,7924],{"class":39,"line":1748},[37,7925,5851],{"class":114},[37,7927,7928],{"class":39,"line":2218},[37,7929,144],{"emptyLinePlaceholder":143},[37,7931,7932],{"class":39,"line":2226},[37,7933,7934],{"class":246},"  \u002F** Where a parcel is. *\u002F\n",[37,7936,7937,7939,7942,7944],{"class":39,"line":2234},[37,7938,1022],{"class":1010},[37,7940,7941],{"class":1025}," track",[37,7943,5635],{"class":114},[37,7945,342],{"class":114},[37,7947,7948,7950,7952,7954,7956,7958,7960,7962,7964,7966,7968,7970,7972,7975,7977,7979,7981,7983,7985,7987,7989,7991,7993,7995,7998,8000],{"class":39,"line":2242},[37,7949,7804],{"class":110},[37,7951,5941],{"class":114},[37,7953,1046],{"class":1014},[37,7955,155],{"class":5844},[37,7957,155],{"class":114},[37,7959,7815],{"class":1031},[37,7961,223],{"class":114},[37,7963,6978],{"class":6977},[37,7965,7822],{"class":5944},[37,7967,155],{"class":5844},[37,7969,7815],{"class":118},[37,7971,194],{"class":114},[37,7973,7974],{"class":781}," 4",[37,7976,7296],{"class":114},[37,7978,6858],{"class":118},[37,7980,943],{"class":114},[37,7982,7840],{"class":5944},[37,7984,155],{"class":5844},[37,7986,7845],{"class":118},[37,7988,943],{"class":114},[37,7990,6863],{"class":5944},[37,7992,5635],{"class":5844},[37,7994,7307],{"class":114},[37,7996,7997],{"class":781}," 20",[37,7999,7859],{"class":5844},[37,8001,137],{"class":114},[37,8003,8004],{"class":39,"line":2247},[37,8005,144],{"emptyLinePlaceholder":143},[37,8007,8008,8010,8012,8015,8017,8019,8022,8024],{"class":39,"line":2255},[37,8009,5827],{"class":110},[37,8011,115],{"class":114},[37,8013,8014],{"class":164}," status",[37,8016,168],{"class":114},[37,8018,129],{"class":128},[37,8020,8021],{"class":46},"in_transit",[37,8023,134],{"class":128},[37,8025,7921],{"class":114},[37,8027,8028],{"class":39,"line":2260},[37,8029,5851],{"class":114},[37,8031,8032],{"class":39,"line":2267},[37,8033,405],{"class":114},[27,8035,8037],{"className":6000,"code":6001,"filename":8036,"language":6003,"meta":33,"style":33},"shipping\u002Ftsconfig.json",[16,8038,8039,8043,8061,8073,8087,8105,8119,8133,8145,8149,8169],{"__ignoreMap":33},[37,8040,8041],{"class":39,"line":40},[37,8042,158],{"class":114},[37,8044,8045,8047,8049,8051,8053,8055,8057,8059],{"class":39,"line":140},[37,8046,6014],{"class":114},[37,8048,6018],{"class":6017},[37,8050,6021],{"class":114},[37,8052,168],{"class":114},[37,8054,6026],{"class":128},[37,8056,6029],{"class":46},[37,8058,6021],{"class":128},[37,8060,214],{"class":114},[37,8062,8063,8065,8067,8069,8071],{"class":39,"line":147},[37,8064,6014],{"class":114},[37,8066,6040],{"class":6017},[37,8068,6021],{"class":114},[37,8070,168],{"class":114},[37,8072,342],{"class":114},[37,8074,8075,8077,8079,8081,8083,8085],{"class":39,"line":161},[37,8076,6051],{"class":114},[37,8078,6054],{"class":336},[37,8080,6021],{"class":114},[37,8082,168],{"class":114},[37,8084,394],{"class":128},[37,8086,214],{"class":114},[37,8088,8089,8091,8093,8095,8097,8099,8101,8103],{"class":39,"line":217},[37,8090,6051],{"class":114},[37,8092,6069],{"class":336},[37,8094,6021],{"class":114},[37,8096,168],{"class":114},[37,8098,6026],{"class":128},[37,8100,943],{"class":46},[37,8102,6021],{"class":128},[37,8104,214],{"class":114},[37,8106,8107,8109,8111,8113,8115,8117],{"class":39,"line":1205},[37,8108,6051],{"class":114},[37,8110,6088],{"class":336},[37,8112,6021],{"class":114},[37,8114,168],{"class":114},[37,8116,6095],{"class":128},[37,8118,214],{"class":114},[37,8120,8121,8123,8125,8127,8129,8131],{"class":39,"line":1211},[37,8122,6051],{"class":114},[37,8124,6104],{"class":336},[37,8126,6021],{"class":114},[37,8128,168],{"class":114},[37,8130,6095],{"class":128},[37,8132,214],{"class":114},[37,8134,8135,8137,8139,8141,8143],{"class":39,"line":1217},[37,8136,6051],{"class":114},[37,8138,6119],{"class":336},[37,8140,6021],{"class":114},[37,8142,168],{"class":114},[37,8144,6126],{"class":128},[37,8146,8147],{"class":39,"line":1223},[37,8148,6131],{"class":114},[37,8150,8151,8153,8155,8157,8159,8161,8163,8165,8167],{"class":39,"line":1703},[37,8152,6014],{"class":114},[37,8154,6138],{"class":6017},[37,8156,6021],{"class":114},[37,8158,168],{"class":114},[37,8160,171],{"class":114},[37,8162,6021],{"class":128},[37,8164,1231],{"class":46},[37,8166,6021],{"class":128},[37,8168,2388],{"class":114},[37,8170,8171],{"class":39,"line":1708},[37,8172,405],{"class":114},[27,8174,8177],{"className":101,"code":8175,"filename":8176,"language":103,"meta":33,"style":33},"import { defineFrond } from '@fougere\u002Fcore\u002Fnode';\n\n\u002F**\n * `report` leads with no known verb, and the demo wants the name — a report is what a\n * dashboard reads. Config is the third producer of an operation contract, and this is\n * the whole declaration needed: the kind the verb list could not derive.\n *\u002F\nexport default defineFrond({\n  operations: {\n    'cart.report': { kind: 'query' },\n  },\n});\n\n","shop\u002Ffronds\u002Fshop\u002Ffrond.config.ts",[16,8178,8179,8201,8205,8209,8214,8219,8224,8228,8240,8249,8274,8278],{"__ignoreMap":33},[37,8180,8181,8183,8185,8188,8190,8192,8194,8197,8199],{"class":39,"line":40},[37,8182,111],{"class":110},[37,8184,115],{"class":114},[37,8186,8187],{"class":118}," defineFrond",[37,8189,122],{"class":114},[37,8191,125],{"class":110},[37,8193,129],{"class":128},[37,8195,8196],{"class":46},"@fougere\u002Fcore\u002Fnode",[37,8198,134],{"class":128},[37,8200,137],{"class":114},[37,8202,8203],{"class":39,"line":140},[37,8204,144],{"emptyLinePlaceholder":143},[37,8206,8207],{"class":39,"line":147},[37,8208,6168],{"class":246},[37,8210,8211],{"class":39,"line":161},[37,8212,8213],{"class":246}," * `report` leads with no known verb, and the demo wants the name — a report is what a\n",[37,8215,8216],{"class":39,"line":217},[37,8217,8218],{"class":246}," * dashboard reads. Config is the third producer of an operation contract, and this is\n",[37,8220,8221],{"class":39,"line":1205},[37,8222,8223],{"class":246}," * the whole declaration needed: the kind the verb list could not derive.\n",[37,8225,8226],{"class":39,"line":1211},[37,8227,6207],{"class":246},[37,8229,8230,8232,8234,8236,8238],{"class":39,"line":1217},[37,8231,276],{"class":110},[37,8233,279],{"class":110},[37,8235,8187],{"class":150},[37,8237,155],{"class":154},[37,8239,158],{"class":114},[37,8241,8242,8245,8247],{"class":39,"line":1223},[37,8243,8244],{"class":164},"  operations",[37,8246,168],{"class":114},[37,8248,342],{"class":114},[37,8250,8251,8253,8255,8257,8259,8261,8263,8265,8267,8270,8272],{"class":39,"line":1703},[37,8252,6578],{"class":128},[37,8254,5418],{"class":6581},[37,8256,134],{"class":128},[37,8258,168],{"class":114},[37,8260,115],{"class":114},[37,8262,735],{"class":164},[37,8264,168],{"class":114},[37,8266,129],{"class":128},[37,8268,8269],{"class":46},"query",[37,8271,134],{"class":128},[37,8273,376],{"class":114},[37,8275,8276],{"class":39,"line":1708},[37,8277,6131],{"class":114},[37,8279,8280,8282,8284],{"class":39,"line":1748},[37,8281,220],{"class":114},[37,8283,223],{"class":154},[37,8285,137],{"class":114},[27,8287,8290],{"className":101,"code":8288,"filename":8289,"language":103,"meta":33,"style":33},"import type { Facade } from '@fougere\u002Fcore';\n\n\u002F\u002F Two neighbours, both reached through their facade. Nothing in this file says either one runs in\n\u002F\u002F another process — that is stated once, in `remotes:`, and nowhere else.\ndeclare class ProductHandler {\n  list(): Promise\u003Cunknown[]>;\n}\ndeclare class ShipmentHandler {\n  quote(): Promise\u003C{ cents: number }>;\n}\n\nexport default class CartHandler {\n  constructor(\n    private productHandler: Facade\u003CProductHandler>,\n    private shipmentHandler: Facade\u003CShipmentHandler>,\n  ) {}\n\n  \u002F** What is in the cart, priced by the catalog and quoted by shipping. *\u002F\n  async checkout() {\n    const products = await this.productHandler.list();\n    const shipping = await this.shipmentHandler.quote();\n\n    return { items: products.length, shipping: shipping.cents };\n  }\n\n  \u002F** The monthly roll-up — deliberately uneven, so a histogram has a shape to show. *\u002F\n  async report() {\n    const products = await this.productHandler.list();\n    await new Promise((resolve) => setTimeout(resolve, 5 + Math.floor(Math.random() * 180)));\n\n    return { lines: products.length };\n  }\n}\n\n","shop\u002Ffronds\u002Fshop\u002Fhandlers\u002FCartHandler.ts",[16,8291,8292,8315,8319,8324,8329,8340,8359,8363,8373,8394,8398,8402,8415,8421,8441,8459,8465,8469,8474,8485,8511,8538,8542,8575,8579,8583,8588,8599,8623,8678,8682,8701,8705],{"__ignoreMap":33},[37,8293,8294,8296,8298,8300,8303,8305,8307,8309,8311,8313],{"class":39,"line":40},[37,8295,111],{"class":110},[37,8297,974],{"class":110},[37,8299,115],{"class":114},[37,8301,8302],{"class":118}," Facade",[37,8304,122],{"class":114},[37,8306,125],{"class":110},[37,8308,129],{"class":128},[37,8310,993],{"class":46},[37,8312,134],{"class":128},[37,8314,137],{"class":114},[37,8316,8317],{"class":39,"line":140},[37,8318,144],{"emptyLinePlaceholder":143},[37,8320,8321],{"class":39,"line":147},[37,8322,8323],{"class":246},"\u002F\u002F Two neighbours, both reached through their facade. Nothing in this file says either one runs in\n",[37,8325,8326],{"class":39,"line":161},[37,8327,8328],{"class":246},"\u002F\u002F another process — that is stated once, in `remotes:`, and nowhere else.\n",[37,8330,8331,8334,8336,8338],{"class":39,"line":217},[37,8332,8333],{"class":1010},"declare",[37,8335,1011],{"class":1010},[37,8337,5778],{"class":1014},[37,8339,342],{"class":114},[37,8341,8342,8345,8347,8349,8351,8354,8356],{"class":39,"line":1205},[37,8343,8344],{"class":1025},"  list",[37,8346,5922],{"class":114},[37,8348,1046],{"class":1014},[37,8350,1038],{"class":114},[37,8352,8353],{"class":1014},"unknown",[37,8355,1560],{"class":154},[37,8357,8358],{"class":114},">;\n",[37,8360,8361],{"class":39,"line":1211},[37,8362,405],{"class":114},[37,8364,8365,8367,8369,8371],{"class":39,"line":1217},[37,8366,8333],{"class":1010},[37,8368,1011],{"class":1010},[37,8370,7776],{"class":1014},[37,8372,342],{"class":114},[37,8374,8375,8378,8380,8382,8385,8387,8389,8391],{"class":39,"line":1223},[37,8376,8377],{"class":1025},"  quote",[37,8379,5922],{"class":114},[37,8381,1046],{"class":1014},[37,8383,8384],{"class":114},"\u003C{",[37,8386,7888],{"class":164},[37,8388,168],{"class":114},[37,8390,5586],{"class":1014},[37,8392,8393],{"class":114}," }>;\n",[37,8395,8396],{"class":39,"line":1703},[37,8397,405],{"class":114},[37,8399,8400],{"class":39,"line":1708},[37,8401,144],{"emptyLinePlaceholder":143},[37,8403,8404,8406,8408,8410,8413],{"class":39,"line":1748},[37,8405,276],{"class":110},[37,8407,279],{"class":110},[37,8409,1011],{"class":1010},[37,8411,8412],{"class":1014}," CartHandler",[37,8414,342],{"class":114},[37,8416,8417,8419],{"class":39,"line":2218},[37,8418,5785],{"class":1010},[37,8420,4698],{"class":114},[37,8422,8423,8426,8429,8431,8433,8435,8438],{"class":39,"line":2226},[37,8424,8425],{"class":1010},"    private",[37,8427,8428],{"class":1031}," productHandler",[37,8430,168],{"class":114},[37,8432,8302],{"class":1014},[37,8434,1038],{"class":114},[37,8436,8437],{"class":1014},"ProductHandler",[37,8439,8440],{"class":114},">,\n",[37,8442,8443,8445,8448,8450,8452,8454,8457],{"class":39,"line":2234},[37,8444,8425],{"class":1010},[37,8446,8447],{"class":1031}," shipmentHandler",[37,8449,168],{"class":114},[37,8451,8302],{"class":1014},[37,8453,1038],{"class":114},[37,8455,8456],{"class":1014},"ShipmentHandler",[37,8458,8440],{"class":114},[37,8460,8461,8463],{"class":39,"line":2242},[37,8462,6821],{"class":114},[37,8464,4719],{"class":114},[37,8466,8467],{"class":39,"line":2247},[37,8468,144],{"emptyLinePlaceholder":143},[37,8470,8471],{"class":39,"line":2255},[37,8472,8473],{"class":246},"  \u002F** What is in the cart, priced by the catalog and quoted by shipping. *\u002F\n",[37,8475,8476,8478,8481,8483],{"class":39,"line":2260},[37,8477,1022],{"class":1010},[37,8479,8480],{"class":1025}," checkout",[37,8482,5635],{"class":114},[37,8484,342],{"class":114},[37,8486,8487,8489,8491,8493,8496,8498,8500,8503,8505,8507,8509],{"class":39,"line":2267},[37,8488,6897],{"class":1010},[37,8490,5793],{"class":118},[37,8492,1563],{"class":114},[37,8494,8495],{"class":110}," await",[37,8497,5831],{"class":5830},[37,8499,943],{"class":114},[37,8501,8502],{"class":1613},"productHandler",[37,8504,943],{"class":114},[37,8506,5841],{"class":150},[37,8508,5635],{"class":5844},[37,8510,137],{"class":114},[37,8512,8513,8515,8518,8520,8522,8524,8526,8529,8531,8534,8536],{"class":39,"line":2272},[37,8514,6897],{"class":1010},[37,8516,8517],{"class":118}," shipping",[37,8519,1563],{"class":114},[37,8521,8495],{"class":110},[37,8523,5831],{"class":5830},[37,8525,943],{"class":114},[37,8527,8528],{"class":1613},"shipmentHandler",[37,8530,943],{"class":114},[37,8532,8533],{"class":150},"quote",[37,8535,5635],{"class":5844},[37,8537,137],{"class":114},[37,8539,8540],{"class":39,"line":2280},[37,8541,144],{"emptyLinePlaceholder":143},[37,8543,8544,8546,8548,8551,8553,8555,8557,8560,8562,8564,8566,8568,8570,8573],{"class":39,"line":2288},[37,8545,5827],{"class":110},[37,8547,115],{"class":114},[37,8549,8550],{"class":164}," items",[37,8552,168],{"class":114},[37,8554,5793],{"class":118},[37,8556,943],{"class":114},[37,8558,8559],{"class":1613},"length",[37,8561,194],{"class":114},[37,8563,8517],{"class":164},[37,8565,168],{"class":114},[37,8567,8517],{"class":118},[37,8569,943],{"class":114},[37,8571,8572],{"class":1613},"cents",[37,8574,7921],{"class":114},[37,8576,8577],{"class":39,"line":2296},[37,8578,5851],{"class":114},[37,8580,8581],{"class":39,"line":2304},[37,8582,144],{"emptyLinePlaceholder":143},[37,8584,8585],{"class":39,"line":2312},[37,8586,8587],{"class":246},"  \u002F** The monthly roll-up — deliberately uneven, so a histogram has a shape to show. *\u002F\n",[37,8589,8590,8592,8595,8597],{"class":39,"line":2320},[37,8591,1022],{"class":1010},[37,8593,8594],{"class":1025}," report",[37,8596,5635],{"class":114},[37,8598,342],{"class":114},[37,8600,8601,8603,8605,8607,8609,8611,8613,8615,8617,8619,8621],{"class":39,"line":2328},[37,8602,6897],{"class":1010},[37,8604,5793],{"class":118},[37,8606,1563],{"class":114},[37,8608,8495],{"class":110},[37,8610,5831],{"class":5830},[37,8612,943],{"class":114},[37,8614,8502],{"class":1613},[37,8616,943],{"class":114},[37,8618,5841],{"class":150},[37,8620,5635],{"class":5844},[37,8622,137],{"class":114},[37,8624,8625,8627,8629,8631,8633,8635,8637,8639,8641,8643,8645,8647,8649,8651,8653,8655,8657,8659,8661,8663,8665,8667,8669,8671,8674,8676],{"class":39,"line":2336},[37,8626,7804],{"class":110},[37,8628,5941],{"class":114},[37,8630,1046],{"class":1014},[37,8632,155],{"class":5844},[37,8634,155],{"class":114},[37,8636,7815],{"class":1031},[37,8638,223],{"class":114},[37,8640,6978],{"class":6977},[37,8642,7822],{"class":5944},[37,8644,155],{"class":5844},[37,8646,7815],{"class":118},[37,8648,194],{"class":114},[37,8650,6415],{"class":781},[37,8652,7296],{"class":114},[37,8654,6858],{"class":118},[37,8656,943],{"class":114},[37,8658,7840],{"class":5944},[37,8660,155],{"class":5844},[37,8662,7845],{"class":118},[37,8664,943],{"class":114},[37,8666,6863],{"class":5944},[37,8668,5635],{"class":5844},[37,8670,7307],{"class":114},[37,8672,8673],{"class":781}," 180",[37,8675,7859],{"class":5844},[37,8677,137],{"class":114},[37,8679,8680],{"class":39,"line":2344},[37,8681,144],{"emptyLinePlaceholder":143},[37,8683,8684,8686,8688,8691,8693,8695,8697,8699],{"class":39,"line":2349},[37,8685,5827],{"class":110},[37,8687,115],{"class":114},[37,8689,8690],{"class":164}," lines",[37,8692,168],{"class":114},[37,8694,5793],{"class":118},[37,8696,943],{"class":114},[37,8698,8559],{"class":1613},[37,8700,7921],{"class":114},[37,8702,8703],{"class":39,"line":2357},[37,8704,5851],{"class":114},[37,8706,8707],{"class":39,"line":2362},[37,8708,405],{"class":114},[27,8710,8712],{"className":6000,"code":6001,"filename":8711,"language":6003,"meta":33,"style":33},"shop\u002Ftsconfig.json",[16,8713,8714,8718,8736,8748,8762,8780,8794,8808,8820,8824,8844],{"__ignoreMap":33},[37,8715,8716],{"class":39,"line":40},[37,8717,158],{"class":114},[37,8719,8720,8722,8724,8726,8728,8730,8732,8734],{"class":39,"line":140},[37,8721,6014],{"class":114},[37,8723,6018],{"class":6017},[37,8725,6021],{"class":114},[37,8727,168],{"class":114},[37,8729,6026],{"class":128},[37,8731,6029],{"class":46},[37,8733,6021],{"class":128},[37,8735,214],{"class":114},[37,8737,8738,8740,8742,8744,8746],{"class":39,"line":147},[37,8739,6014],{"class":114},[37,8741,6040],{"class":6017},[37,8743,6021],{"class":114},[37,8745,168],{"class":114},[37,8747,342],{"class":114},[37,8749,8750,8752,8754,8756,8758,8760],{"class":39,"line":161},[37,8751,6051],{"class":114},[37,8753,6054],{"class":336},[37,8755,6021],{"class":114},[37,8757,168],{"class":114},[37,8759,394],{"class":128},[37,8761,214],{"class":114},[37,8763,8764,8766,8768,8770,8772,8774,8776,8778],{"class":39,"line":217},[37,8765,6051],{"class":114},[37,8767,6069],{"class":336},[37,8769,6021],{"class":114},[37,8771,168],{"class":114},[37,8773,6026],{"class":128},[37,8775,943],{"class":46},[37,8777,6021],{"class":128},[37,8779,214],{"class":114},[37,8781,8782,8784,8786,8788,8790,8792],{"class":39,"line":1205},[37,8783,6051],{"class":114},[37,8785,6088],{"class":336},[37,8787,6021],{"class":114},[37,8789,168],{"class":114},[37,8791,6095],{"class":128},[37,8793,214],{"class":114},[37,8795,8796,8798,8800,8802,8804,8806],{"class":39,"line":1211},[37,8797,6051],{"class":114},[37,8799,6104],{"class":336},[37,8801,6021],{"class":114},[37,8803,168],{"class":114},[37,8805,6095],{"class":128},[37,8807,214],{"class":114},[37,8809,8810,8812,8814,8816,8818],{"class":39,"line":1217},[37,8811,6051],{"class":114},[37,8813,6119],{"class":336},[37,8815,6021],{"class":114},[37,8817,168],{"class":114},[37,8819,6126],{"class":128},[37,8821,8822],{"class":39,"line":1223},[37,8823,6131],{"class":114},[37,8825,8826,8828,8830,8832,8834,8836,8838,8840,8842],{"class":39,"line":1703},[37,8827,6014],{"class":114},[37,8829,6138],{"class":6017},[37,8831,6021],{"class":114},[37,8833,168],{"class":114},[37,8835,171],{"class":114},[37,8837,6021],{"class":128},[37,8839,1231],{"class":46},[37,8841,6021],{"class":128},[37,8843,2388],{"class":114},[37,8845,8846],{"class":39,"line":1708},[37,8847,405],{"class":114},[27,8849,8854],{"className":8850,"code":8851,"filename":8852,"language":8853,"meta":33,"style":33},"language-yaml shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","# SigNoz on Docker, via Foundry — `foundryctl cast -f casting.yaml`.\n# Install foundryctl first: curl -fsSL https:\u002F\u002Fsignoz.io\u002Ffoundry.sh | bash\n#\n# Brings up ClickHouse, its keeper, Postgres, the OTLP ingester and the UI.\n# UI on :8080, OTLP on :4318 — which is what `observe.ts` targets by default.\napiVersion: v1alpha1\nkind: Installation\nmetadata:\n  name: signoz\nspec:\n  deployment:\n    flavor: compose\n    mode: docker\n\n","signoz\u002Fcasting.yaml","yaml",[16,8855,8856,8861,8866,8871,8876,8881,8892,8901,8909,8919,8926,8933,8943],{"__ignoreMap":33},[37,8857,8858],{"class":39,"line":40},[37,8859,8860],{"class":246},"# SigNoz on Docker, via Foundry — `foundryctl cast -f casting.yaml`.\n",[37,8862,8863],{"class":39,"line":140},[37,8864,8865],{"class":246},"# Install foundryctl first: curl -fsSL https:\u002F\u002Fsignoz.io\u002Ffoundry.sh | bash\n",[37,8867,8868],{"class":39,"line":147},[37,8869,8870],{"class":246},"#\n",[37,8872,8873],{"class":39,"line":161},[37,8874,8875],{"class":246},"# Brings up ClickHouse, its keeper, Postgres, the OTLP ingester and the UI.\n",[37,8877,8878],{"class":39,"line":217},[37,8879,8880],{"class":246},"# UI on :8080, OTLP on :4318 — which is what `observe.ts` targets by default.\n",[37,8882,8883,8887,8889],{"class":39,"line":1205},[37,8884,8886],{"class":8885},"s687E","apiVersion",[37,8888,168],{"class":114},[37,8890,8891],{"class":46}," v1alpha1\n",[37,8893,8894,8896,8898],{"class":39,"line":1211},[37,8895,555],{"class":8885},[37,8897,168],{"class":114},[37,8899,8900],{"class":46}," Installation\n",[37,8902,8903,8906],{"class":39,"line":1217},[37,8904,8905],{"class":8885},"metadata",[37,8907,8908],{"class":114},":\n",[37,8910,8911,8914,8916],{"class":39,"line":1223},[37,8912,8913],{"class":8885},"  name",[37,8915,168],{"class":114},[37,8917,8918],{"class":46}," signoz\n",[37,8920,8921,8924],{"class":39,"line":1703},[37,8922,8923],{"class":8885},"spec",[37,8925,8908],{"class":114},[37,8927,8928,8931],{"class":39,"line":1708},[37,8929,8930],{"class":8885},"  deployment",[37,8932,8908],{"class":114},[37,8934,8935,8938,8940],{"class":39,"line":1748},[37,8936,8937],{"class":8885},"    flavor",[37,8939,168],{"class":114},[37,8941,8942],{"class":46}," compose\n",[37,8944,8945,8948,8950],{"class":39,"line":2218},[37,8946,8947],{"class":8885},"    mode",[37,8949,168],{"class":114},[37,8951,8952],{"class":46}," docker\n",[27,8954,8956],{"className":101,"code":8955,"filename":4747,"language":103,"meta":33,"style":33},"\u002F**\n * Three Fronds, three processes, one trace.\n *\n *   load ──▶ shop :4200 ──▶ catalog  :4100\n *                       └─▶ shipping :4300\n *\n * Everything here is topology and hosting. The domain code — `catalog\u002Ffronds`,\n * `shipping\u002Ffronds`, `shop\u002Ffronds` — mentions none of it: `CartHandler` asks for its two\n * neighbours by TYPE, and would run identically with all three Fronds in one process.\n *\n *   pnpm dev              # start the three\n *   pnpm load             # k6 against the shop, in stages\n *   pnpm signoz           # a collector, if you want to see it\n *\u002F\nimport { createApp, createLocalRunner, type Storage } from '@fougere\u002Fcore';\nimport { appOptionsOf } from '@fougere\u002Fdefaults';\nimport { frondAliases, setModuleLoader } from '@fougere\u002Fcore\u002Fnode';\nimport { createContainer } from '@fougere\u002Fcontainer';\nimport { serve } from '@fougere\u002Ftransport-http';\nimport { createJiti } from 'jiti';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { activeCalls } from '@fougere\u002Fobservability';\nimport { observed } from '.\u002Fobserve.js';\nimport { log } from '@fougere\u002Flog';\nimport { calls } from '@fougere\u002Fcalls';\n\nconst here = dirname(fileURLToPath(import.meta.url));\nconst root = join(here, '..');\n\nconst CATALOG = 4100;\nconst SHOP = 4200;\nconst SHIPPING = 4300;\n\nconst jiti = createJiti(import.meta.url, {\n  interopDefault: true,\n  alias: await frondAliases(root),\n});\nsetModuleLoader((filePath) => jiti.import(filePath) as Promise\u003CRecord\u003Cstring, unknown>>);\n\n\u002F**\n * Held in memory — this demo is about what is observed, not about where data lives.\n * A real app hands `resolveStorage()` here and changes nothing else.\n *\u002F\nconst PRODUCTS = [\n  { id: 'p1', title: 'Fern', stock: 3 },\n  { id: 'p2', title: 'Moss', stock: 0 },\n];\n\nconst memoryStorage = () => ({\n  async list() { return PRODUCTS.map((p) => ({ ...p })); },\n  async findById(id: string) { return PRODUCTS.find((p) => p.id === id); },\n  async create(input: Record\u003Cstring, unknown>) { return { id: 'created', ...input }; },\n  async update() { throw new Error('not exercised'); },\n  async delete() { return false; },\n  output() { return this; },\n}) as unknown as Storage;\n\nconst stopping: (() => Promise\u003Cvoid>)[] = [];\n\n\u002F\u002F The depth a finished span cannot carry: by the time one is exported, the pile-up it\n\u002F\u002F belonged to is over. Measured where a span CLOSES — a poll landing between two peaks\n\u002F\u002F reports neither — and reported once a second, which is what a gauge is. Declared WITH\n\u002F\u002F each app, so it is released with it rather than left registered on a dead one.\nlet peak = 0;\nconst deepest = () => { peak = Math.max(peak, activeCalls()); };\n\n\u002F\u002F ── catalog — holds Product, answers about it ───\n\u002F\u002F Observing is declared with the app, not wired onto it after the fact — so `dispose()`\n\u002F\u002F flushes the telemetry and this file no longer owes a `stop()` it could forget.\nconst catalog = await createApp({ ...(await appOptionsOf(join(root, 'catalog'))), createContainer, storageFactory: memoryStorage, extensions: [observed('catalog', deepest), log(), calls()] });\nconst catalogReceiver = await serve(createLocalRunner(catalog), { port: CATALOG });\nstopping.push(async () => { await catalogReceiver.close(); await catalog.dispose(); });\n\n\u002F\u002F ── shipping — a Frond with no entity at all ────\nconst shipping = await createApp({ ...(await appOptionsOf(join(root, 'shipping'))), createContainer, extensions: [observed('shipping', deepest), log(), calls()] });\nconst shippingReceiver = await serve(createLocalRunner(shipping), { port: SHIPPING });\nstopping.push(async () => { await shippingReceiver.close(); await shipping.dispose(); });\n\n\u002F\u002F ── shop — owns neither, calls both ─────────────\n\u002F\u002F This is the entire topology statement. Comment it out and the same CartHandler runs\n\u002F\u002F against local Fronds, with one span instead of three.\nconst shop = await createApp({\n  ...(await appOptionsOf(join(root, 'shop'))),\n  createContainer,\n  remotes: {\n    catalog: `http:\u002F\u002F127.0.0.1:${CATALOG}`,\n    shipping: `http:\u002F\u002F127.0.0.1:${SHIPPING}`,\n  },\n  extensions: [observed('shop', deepest), log(), calls({ panel: 4401 })],\n});\nconst shopReceiver = await serve(createLocalRunner(shop), { port: SHOP });\nstopping.push(async () => { await shopReceiver.close(); await shop.dispose(); });\n\nconsole.log(`\n  catalog   :${CATALOG}   product.list · product.findById · product.reserve\n  shipping  :${SHIPPING}   shipment.quote · shipment.track\n  shop      :${SHOP}   cart.checkout · cart.report        ← send load here\n\n  curl -s localhost:${SHOP}\u002F_fougere\u002Fcall -H 'content-type: application\u002Fjson' \\\\\n    -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"cart.checkout\",\"params\":{}}'\n\n  pnpm load    # k6, in stages — a flat rate draws flat lines\n`);\n\nconst reporting = setInterval(() => {\n  if (peak === 0) return;\n  console.log(`  deepest pile-up this second: ${peak} call(s) in flight`);\n  peak = 0;\n}, 1_000);\n\nconst shutdown = async () => {\n  clearInterval(reporting);\n  \u002F\u002F Reverse of construction. Telemetry flushes inside `dispose()` now — a span held in a\n  \u002F\u002F buffer at exit is a span nobody will ever see, and that is the extension's `down`.\n  for (const stop of stopping.reverse()) await stop();\n  process.exit(0);\n};\nprocess.on('SIGINT', shutdown);\nprocess.on('SIGTERM', shutdown);\n\n",[16,8957,8958,8962,8967,8971,8976,8981,8985,8990,8995,9000,9004,9009,9014,9019,9023,9056,9077,9103,9124,9145,9166,9193,9215,9236,9258,9279,9300,9304,9339,9368,9372,9386,9399,9413,9417,9444,9455,9475,9483,9539,9543,9547,9552,9557,9561,9572,9614,9652,9658,9662,9680,9727,9781,9836,9870,9889,9906,9922,9926,9958,9962,9967,9972,9977,9982,9995,10038,10042,10047,10052,10057,10160,10201,10255,10259,10264,10353,10392,10441,10445,10450,10455,10460,10477,10508,10515,10524,10548,10570,10574,10625,10633,10672,10722,10726,10740,10754,10768,10783,10787,10805,10810,10814,10819,10827,10831,10851,10869,10900,10911,10923,10927,10945,10959,10964,10969,11001,11020,11024,11051],{"__ignoreMap":33},[37,8959,8960],{"class":39,"line":40},[37,8961,6168],{"class":246},[37,8963,8964],{"class":39,"line":140},[37,8965,8966],{"class":246}," * Three Fronds, three processes, one trace.\n",[37,8968,8969],{"class":39,"line":147},[37,8970,6178],{"class":246},[37,8972,8973],{"class":39,"line":161},[37,8974,8975],{"class":246}," *   load ──▶ shop :4200 ──▶ catalog  :4100\n",[37,8977,8978],{"class":39,"line":217},[37,8979,8980],{"class":246}," *                       └─▶ shipping :4300\n",[37,8982,8983],{"class":39,"line":1205},[37,8984,6178],{"class":246},[37,8986,8987],{"class":39,"line":1211},[37,8988,8989],{"class":246}," * Everything here is topology and hosting. The domain code — `catalog\u002Ffronds`,\n",[37,8991,8992],{"class":39,"line":1217},[37,8993,8994],{"class":246}," * `shipping\u002Ffronds`, `shop\u002Ffronds` — mentions none of it: `CartHandler` asks for its two\n",[37,8996,8997],{"class":39,"line":1223},[37,8998,8999],{"class":246}," * neighbours by TYPE, and would run identically with all three Fronds in one process.\n",[37,9001,9002],{"class":39,"line":1703},[37,9003,6178],{"class":246},[37,9005,9006],{"class":39,"line":1708},[37,9007,9008],{"class":246}," *   pnpm dev              # start the three\n",[37,9010,9011],{"class":39,"line":1748},[37,9012,9013],{"class":246}," *   pnpm load             # k6 against the shop, in stages\n",[37,9015,9016],{"class":39,"line":2218},[37,9017,9018],{"class":246}," *   pnpm signoz           # a collector, if you want to see it\n",[37,9020,9021],{"class":39,"line":2226},[37,9022,6207],{"class":246},[37,9024,9025,9027,9029,9032,9034,9037,9039,9041,9044,9046,9048,9050,9052,9054],{"class":39,"line":2234},[37,9026,111],{"class":110},[37,9028,115],{"class":114},[37,9030,9031],{"class":118}," createApp",[37,9033,194],{"class":114},[37,9035,9036],{"class":118}," createLocalRunner",[37,9038,194],{"class":114},[37,9040,974],{"class":110},[37,9042,9043],{"class":118}," Storage",[37,9045,122],{"class":114},[37,9047,125],{"class":110},[37,9049,129],{"class":128},[37,9051,993],{"class":46},[37,9053,134],{"class":128},[37,9055,137],{"class":114},[37,9057,9058,9060,9062,9065,9067,9069,9071,9073,9075],{"class":39,"line":2242},[37,9059,111],{"class":110},[37,9061,115],{"class":114},[37,9063,9064],{"class":118}," appOptionsOf",[37,9066,122],{"class":114},[37,9068,125],{"class":110},[37,9070,129],{"class":128},[37,9072,7518],{"class":46},[37,9074,134],{"class":128},[37,9076,137],{"class":114},[37,9078,9079,9081,9083,9086,9088,9091,9093,9095,9097,9099,9101],{"class":39,"line":2247},[37,9080,111],{"class":110},[37,9082,115],{"class":114},[37,9084,9085],{"class":118}," frondAliases",[37,9087,194],{"class":114},[37,9089,9090],{"class":118}," setModuleLoader",[37,9092,122],{"class":114},[37,9094,125],{"class":110},[37,9096,129],{"class":128},[37,9098,8196],{"class":46},[37,9100,134],{"class":128},[37,9102,137],{"class":114},[37,9104,9105,9107,9109,9112,9114,9116,9118,9120,9122],{"class":39,"line":2255},[37,9106,111],{"class":110},[37,9108,115],{"class":114},[37,9110,9111],{"class":118}," createContainer",[37,9113,122],{"class":114},[37,9115,125],{"class":110},[37,9117,129],{"class":128},[37,9119,7557],{"class":46},[37,9121,134],{"class":128},[37,9123,137],{"class":114},[37,9125,9126,9128,9130,9133,9135,9137,9139,9141,9143],{"class":39,"line":2260},[37,9127,111],{"class":110},[37,9129,115],{"class":114},[37,9131,9132],{"class":118}," serve",[37,9134,122],{"class":114},[37,9136,125],{"class":110},[37,9138,129],{"class":128},[37,9140,7649],{"class":46},[37,9142,134],{"class":128},[37,9144,137],{"class":114},[37,9146,9147,9149,9151,9154,9156,9158,9160,9162,9164],{"class":39,"line":2267},[37,9148,111],{"class":110},[37,9150,115],{"class":114},[37,9152,9153],{"class":118}," createJiti",[37,9155,122],{"class":114},[37,9157,125],{"class":110},[37,9159,129],{"class":128},[37,9161,7668],{"class":46},[37,9163,134],{"class":128},[37,9165,137],{"class":114},[37,9167,9168,9170,9172,9175,9177,9180,9182,9184,9186,9189,9191],{"class":39,"line":2272},[37,9169,111],{"class":110},[37,9171,115],{"class":114},[37,9173,9174],{"class":118}," dirname",[37,9176,194],{"class":114},[37,9178,9179],{"class":118}," join",[37,9181,122],{"class":114},[37,9183,125],{"class":110},[37,9185,129],{"class":128},[37,9187,9188],{"class":46},"node:path",[37,9190,134],{"class":128},[37,9192,137],{"class":114},[37,9194,9195,9197,9199,9202,9204,9206,9208,9211,9213],{"class":39,"line":2280},[37,9196,111],{"class":110},[37,9198,115],{"class":114},[37,9200,9201],{"class":118}," fileURLToPath",[37,9203,122],{"class":114},[37,9205,125],{"class":110},[37,9207,129],{"class":128},[37,9209,9210],{"class":46},"node:url",[37,9212,134],{"class":128},[37,9214,137],{"class":114},[37,9216,9217,9219,9221,9224,9226,9228,9230,9232,9234],{"class":39,"line":2288},[37,9218,111],{"class":110},[37,9220,115],{"class":114},[37,9222,9223],{"class":118}," activeCalls",[37,9225,122],{"class":114},[37,9227,125],{"class":110},[37,9229,129],{"class":128},[37,9231,18],{"class":46},[37,9233,134],{"class":128},[37,9235,137],{"class":114},[37,9237,9238,9240,9242,9245,9247,9249,9251,9254,9256],{"class":39,"line":2296},[37,9239,111],{"class":110},[37,9241,115],{"class":114},[37,9243,9244],{"class":118}," observed",[37,9246,122],{"class":114},[37,9248,125],{"class":110},[37,9250,129],{"class":128},[37,9252,9253],{"class":46},".\u002Fobserve.js",[37,9255,134],{"class":128},[37,9257,137],{"class":114},[37,9259,9260,9262,9264,9267,9269,9271,9273,9275,9277],{"class":39,"line":2304},[37,9261,111],{"class":110},[37,9263,115],{"class":114},[37,9265,9266],{"class":118}," log",[37,9268,122],{"class":114},[37,9270,125],{"class":110},[37,9272,129],{"class":128},[37,9274,7594],{"class":46},[37,9276,134],{"class":128},[37,9278,137],{"class":114},[37,9280,9281,9283,9285,9288,9290,9292,9294,9296,9298],{"class":39,"line":2312},[37,9282,111],{"class":110},[37,9284,115],{"class":114},[37,9286,9287],{"class":118}," calls",[37,9289,122],{"class":114},[37,9291,125],{"class":110},[37,9293,129],{"class":128},[37,9295,7538],{"class":46},[37,9297,134],{"class":128},[37,9299,137],{"class":114},[37,9301,9302],{"class":39,"line":2320},[37,9303,144],{"emptyLinePlaceholder":143},[37,9305,9306,9308,9311,9313,9315,9317,9320,9322,9324,9326,9329,9331,9334,9337],{"class":39,"line":2328},[37,9307,1550],{"class":1010},[37,9309,9310],{"class":118}," here ",[37,9312,1582],{"class":114},[37,9314,9174],{"class":150},[37,9316,155],{"class":154},[37,9318,9319],{"class":150},"fileURLToPath",[37,9321,155],{"class":154},[37,9323,111],{"class":110},[37,9325,943],{"class":114},[37,9327,9328],{"class":1613},"meta",[37,9330,943],{"class":114},[37,9332,9333],{"class":1613},"url",[37,9335,9336],{"class":154},"))",[37,9338,137],{"class":114},[37,9340,9341,9343,9346,9348,9350,9352,9355,9357,9359,9362,9364,9366],{"class":39,"line":2336},[37,9342,1550],{"class":1010},[37,9344,9345],{"class":118}," root ",[37,9347,1582],{"class":114},[37,9349,9179],{"class":150},[37,9351,155],{"class":154},[37,9353,9354],{"class":118},"here",[37,9356,194],{"class":114},[37,9358,129],{"class":128},[37,9360,9361],{"class":46},"..",[37,9363,134],{"class":128},[37,9365,223],{"class":154},[37,9367,137],{"class":114},[37,9369,9370],{"class":39,"line":2344},[37,9371,144],{"emptyLinePlaceholder":143},[37,9373,9374,9376,9379,9381,9384],{"class":39,"line":2349},[37,9375,1550],{"class":1010},[37,9377,9378],{"class":118}," CATALOG ",[37,9380,1582],{"class":114},[37,9382,9383],{"class":781}," 4100",[37,9385,137],{"class":114},[37,9387,9388,9390,9392,9394,9397],{"class":39,"line":2357},[37,9389,1550],{"class":1010},[37,9391,6285],{"class":118},[37,9393,1582],{"class":114},[37,9395,9396],{"class":781}," 4200",[37,9398,137],{"class":114},[37,9400,9401,9403,9406,9408,9411],{"class":39,"line":2362},[37,9402,1550],{"class":1010},[37,9404,9405],{"class":118}," SHIPPING ",[37,9407,1582],{"class":114},[37,9409,9410],{"class":781}," 4300",[37,9412,137],{"class":114},[37,9414,9415],{"class":39,"line":2369},[37,9416,144],{"emptyLinePlaceholder":143},[37,9418,9419,9421,9424,9426,9428,9430,9432,9434,9436,9438,9440,9442],{"class":39,"line":2374},[37,9420,1550],{"class":1010},[37,9422,9423],{"class":118}," jiti ",[37,9425,1582],{"class":114},[37,9427,9153],{"class":150},[37,9429,155],{"class":154},[37,9431,111],{"class":110},[37,9433,943],{"class":114},[37,9435,9328],{"class":1613},[37,9437,943],{"class":114},[37,9439,9333],{"class":1613},[37,9441,194],{"class":114},[37,9443,342],{"class":114},[37,9445,9446,9449,9451,9453],{"class":39,"line":2391},[37,9447,9448],{"class":164},"  interopDefault",[37,9450,168],{"class":114},[37,9452,394],{"class":393},[37,9454,214],{"class":114},[37,9456,9457,9460,9462,9464,9466,9468,9471,9473],{"class":39,"line":2400},[37,9458,9459],{"class":164},"  alias",[37,9461,168],{"class":114},[37,9463,8495],{"class":110},[37,9465,9085],{"class":150},[37,9467,155],{"class":154},[37,9469,9470],{"class":118},"root",[37,9472,223],{"class":154},[37,9474,214],{"class":114},[37,9476,9477,9479,9481],{"class":39,"line":2408},[37,9478,220],{"class":114},[37,9480,223],{"class":154},[37,9482,137],{"class":114},[37,9484,9485,9488,9490,9492,9495,9497,9499,9502,9504,9506,9508,9510,9512,9515,9517,9519,9522,9524,9527,9529,9532,9535,9537],{"class":39,"line":2416},[37,9486,9487],{"class":150},"setModuleLoader",[37,9489,155],{"class":154},[37,9491,155],{"class":114},[37,9493,9494],{"class":1031},"filePath",[37,9496,223],{"class":114},[37,9498,6978],{"class":6977},[37,9500,9501],{"class":118}," jiti",[37,9503,943],{"class":114},[37,9505,111],{"class":150},[37,9507,155],{"class":154},[37,9509,9494],{"class":118},[37,9511,223],{"class":154},[37,9513,9514],{"class":110}," as",[37,9516,1046],{"class":1014},[37,9518,1038],{"class":114},[37,9520,9521],{"class":1014},"Record",[37,9523,1038],{"class":114},[37,9525,9526],{"class":1014},"string",[37,9528,194],{"class":114},[37,9530,9531],{"class":1014}," unknown",[37,9533,9534],{"class":114},">>",[37,9536,223],{"class":154},[37,9538,137],{"class":114},[37,9540,9541],{"class":39,"line":2424},[37,9542,144],{"emptyLinePlaceholder":143},[37,9544,9545],{"class":39,"line":2432},[37,9546,6168],{"class":246},[37,9548,9549],{"class":39,"line":2440},[37,9550,9551],{"class":246}," * Held in memory — this demo is about what is observed, not about where data lives.\n",[37,9553,9554],{"class":39,"line":2448},[37,9555,9556],{"class":246}," * A real app hands `resolveStorage()` here and changes nothing else.\n",[37,9558,9559],{"class":39,"line":2456},[37,9560,6207],{"class":246},[37,9562,9563,9565,9568,9570],{"class":39,"line":2464},[37,9564,1550],{"class":1010},[37,9566,9567],{"class":118}," PRODUCTS ",[37,9569,1582],{"class":114},[37,9571,6388],{"class":154},[37,9573,9574,9577,9579,9581,9583,9586,9588,9590,9593,9595,9597,9600,9602,9604,9607,9609,9612],{"class":39,"line":2469},[37,9575,9576],{"class":114},"  {",[37,9578,6705],{"class":164},[37,9580,168],{"class":114},[37,9582,129],{"class":128},[37,9584,9585],{"class":46},"p1",[37,9587,134],{"class":128},[37,9589,194],{"class":114},[37,9591,9592],{"class":164}," title",[37,9594,168],{"class":114},[37,9596,129],{"class":128},[37,9598,9599],{"class":46},"Fern",[37,9601,134],{"class":128},[37,9603,194],{"class":114},[37,9605,9606],{"class":164}," stock",[37,9608,168],{"class":114},[37,9610,9611],{"class":781}," 3",[37,9613,376],{"class":114},[37,9615,9616,9618,9620,9622,9624,9627,9629,9631,9633,9635,9637,9640,9642,9644,9646,9648,9650],{"class":39,"line":2477},[37,9617,9576],{"class":114},[37,9619,6705],{"class":164},[37,9621,168],{"class":114},[37,9623,129],{"class":128},[37,9625,9626],{"class":46},"p2",[37,9628,134],{"class":128},[37,9630,194],{"class":114},[37,9632,9592],{"class":164},[37,9634,168],{"class":114},[37,9636,129],{"class":128},[37,9638,9639],{"class":46},"Moss",[37,9641,134],{"class":128},[37,9643,194],{"class":114},[37,9645,9606],{"class":164},[37,9647,168],{"class":114},[37,9649,5684],{"class":781},[37,9651,376],{"class":114},[37,9653,9654,9656],{"class":39,"line":2482},[37,9655,6571],{"class":154},[37,9657,137],{"class":114},[37,9659,9660],{"class":39,"line":2489},[37,9661,144],{"emptyLinePlaceholder":143},[37,9663,9664,9666,9670,9672,9674,9676,9678],{"class":39,"line":2494},[37,9665,1550],{"class":1010},[37,9667,9669],{"class":9668},"slP7D"," memoryStorage",[37,9671,1563],{"class":114},[37,9673,6843],{"class":114},[37,9675,6978],{"class":6977},[37,9677,6879],{"class":154},[37,9679,158],{"class":114},[37,9681,9682,9684,9686,9688,9690,9693,9696,9698,9701,9703,9705,9707,9709,9711,9713,9715,9717,9719,9721,9723,9725],{"class":39,"line":2508},[37,9683,1022],{"class":1010},[37,9685,5818],{"class":1025},[37,9687,5635],{"class":114},[37,9689,115],{"class":114},[37,9691,9692],{"class":110}," return",[37,9694,9695],{"class":118}," PRODUCTS",[37,9697,943],{"class":114},[37,9699,9700],{"class":150},"map",[37,9702,155],{"class":5844},[37,9704,155],{"class":114},[37,9706,13],{"class":1031},[37,9708,223],{"class":114},[37,9710,6978],{"class":6977},[37,9712,6879],{"class":5844},[37,9714,179],{"class":114},[37,9716,6759],{"class":114},[37,9718,13],{"class":118},[37,9720,122],{"class":114},[37,9722,9336],{"class":5844},[37,9724,1569],{"class":114},[37,9726,376],{"class":114},[37,9728,9729,9731,9733,9735,9737,9739,9741,9743,9745,9747,9749,9751,9754,9756,9758,9760,9762,9764,9767,9769,9771,9773,9775,9777,9779],{"class":39,"line":2522},[37,9730,1022],{"class":1010},[37,9732,5862],{"class":1025},[37,9734,155],{"class":114},[37,9736,5867],{"class":1031},[37,9738,168],{"class":114},[37,9740,5872],{"class":1014},[37,9742,223],{"class":114},[37,9744,115],{"class":114},[37,9746,9692],{"class":110},[37,9748,9695],{"class":118},[37,9750,943],{"class":114},[37,9752,9753],{"class":150},"find",[37,9755,155],{"class":5844},[37,9757,155],{"class":114},[37,9759,13],{"class":1031},[37,9761,223],{"class":114},[37,9763,6978],{"class":6977},[37,9765,9766],{"class":118}," p",[37,9768,943],{"class":114},[37,9770,5867],{"class":1613},[37,9772,6989],{"class":114},[37,9774,6705],{"class":118},[37,9776,223],{"class":5844},[37,9778,1569],{"class":114},[37,9780,376],{"class":114},[37,9782,9783,9785,9788,9790,9793,9795,9798,9800,9802,9804,9806,9808,9810,9812,9814,9816,9818,9820,9823,9825,9827,9829,9831,9834],{"class":39,"line":2536},[37,9784,1022],{"class":1010},[37,9786,9787],{"class":1025}," create",[37,9789,155],{"class":114},[37,9791,9792],{"class":1031},"input",[37,9794,168],{"class":114},[37,9796,9797],{"class":1014}," Record",[37,9799,1038],{"class":114},[37,9801,9526],{"class":1014},[37,9803,194],{"class":114},[37,9805,9531],{"class":1014},[37,9807,5805],{"class":114},[37,9809,115],{"class":114},[37,9811,9692],{"class":110},[37,9813,115],{"class":114},[37,9815,6705],{"class":164},[37,9817,168],{"class":114},[37,9819,129],{"class":128},[37,9821,9822],{"class":46},"created",[37,9824,134],{"class":128},[37,9826,194],{"class":114},[37,9828,6759],{"class":114},[37,9830,9792],{"class":118},[37,9832,9833],{"class":114}," };",[37,9835,376],{"class":114},[37,9837,9838,9840,9843,9845,9847,9850,9852,9855,9857,9859,9862,9864,9866,9868],{"class":39,"line":2550},[37,9839,1022],{"class":1010},[37,9841,9842],{"class":1025}," update",[37,9844,5635],{"class":114},[37,9846,115],{"class":114},[37,9848,9849],{"class":110}," throw",[37,9851,5941],{"class":114},[37,9853,9854],{"class":5944}," Error",[37,9856,155],{"class":5844},[37,9858,134],{"class":128},[37,9860,9861],{"class":46},"not exercised",[37,9863,134],{"class":128},[37,9865,223],{"class":5844},[37,9867,1569],{"class":114},[37,9869,376],{"class":114},[37,9871,9872,9874,9877,9879,9881,9883,9885,9887],{"class":39,"line":2558},[37,9873,1022],{"class":1010},[37,9875,9876],{"class":1025}," delete",[37,9878,5635],{"class":114},[37,9880,115],{"class":114},[37,9882,9692],{"class":110},[37,9884,6095],{"class":393},[37,9886,1569],{"class":114},[37,9888,376],{"class":114},[37,9890,9891,9894,9896,9898,9900,9902,9904],{"class":39,"line":2566},[37,9892,9893],{"class":1025},"  output",[37,9895,5635],{"class":114},[37,9897,115],{"class":114},[37,9899,9692],{"class":110},[37,9901,5831],{"class":5830},[37,9903,1569],{"class":114},[37,9905,376],{"class":114},[37,9907,9908,9910,9912,9914,9916,9918,9920],{"class":39,"line":2574},[37,9909,220],{"class":114},[37,9911,223],{"class":154},[37,9913,9514],{"class":110},[37,9915,9531],{"class":1014},[37,9917,9514],{"class":110},[37,9919,9043],{"class":1014},[37,9921,137],{"class":114},[37,9923,9924],{"class":39,"line":2582},[37,9925,144],{"emptyLinePlaceholder":143},[37,9927,9928,9930,9933,9935,9937,9939,9941,9943,9945,9947,9949,9952,9954,9956],{"class":39,"line":2590},[37,9929,1550],{"class":1010},[37,9931,9932],{"class":118}," stopping",[37,9934,168],{"class":114},[37,9936,6879],{"class":154},[37,9938,5635],{"class":114},[37,9940,6978],{"class":6977},[37,9942,1046],{"class":1014},[37,9944,1038],{"class":114},[37,9946,1051],{"class":1014},[37,9948,1054],{"class":114},[37,9950,9951],{"class":154},")[]",[37,9953,1563],{"class":114},[37,9955,1566],{"class":154},[37,9957,137],{"class":114},[37,9959,9960],{"class":39,"line":2598},[37,9961,144],{"emptyLinePlaceholder":143},[37,9963,9964],{"class":39,"line":2606},[37,9965,9966],{"class":246},"\u002F\u002F The depth a finished span cannot carry: by the time one is exported, the pile-up it\n",[37,9968,9969],{"class":39,"line":2614},[37,9970,9971],{"class":246},"\u002F\u002F belonged to is over. Measured where a span CLOSES — a poll landing between two peaks\n",[37,9973,9974],{"class":39,"line":2622},[37,9975,9976],{"class":246},"\u002F\u002F reports neither — and reported once a second, which is what a gauge is. Declared WITH\n",[37,9978,9979],{"class":39,"line":2627},[37,9980,9981],{"class":246},"\u002F\u002F each app, so it is released with it rather than left registered on a dead one.\n",[37,9983,9984,9986,9989,9991,9993],{"class":39,"line":2635},[37,9985,6616],{"class":1010},[37,9987,9988],{"class":118}," peak ",[37,9990,1582],{"class":114},[37,9992,5684],{"class":781},[37,9994,137],{"class":114},[37,9996,9997,9999,10002,10004,10006,10008,10010,10013,10015,10017,10019,10022,10024,10027,10029,10031,10034,10036],{"class":39,"line":2640},[37,9998,1550],{"class":1010},[37,10000,10001],{"class":9668}," deepest",[37,10003,1563],{"class":114},[37,10005,6843],{"class":114},[37,10007,6978],{"class":6977},[37,10009,115],{"class":114},[37,10011,10012],{"class":118}," peak",[37,10014,1563],{"class":114},[37,10016,6858],{"class":118},[37,10018,943],{"class":114},[37,10020,10021],{"class":150},"max",[37,10023,155],{"class":5844},[37,10025,10026],{"class":118},"peak",[37,10028,194],{"class":114},[37,10030,9223],{"class":150},[37,10032,10033],{"class":5844},"())",[37,10035,1569],{"class":114},[37,10037,7921],{"class":114},[37,10039,10040],{"class":39,"line":2647},[37,10041,144],{"emptyLinePlaceholder":143},[37,10043,10044],{"class":39,"line":2652},[37,10045,10046],{"class":246},"\u002F\u002F ── catalog — holds Product, answers about it ───\n",[37,10048,10049],{"class":39,"line":2660},[37,10050,10051],{"class":246},"\u002F\u002F Observing is declared with the app, not wired onto it after the fact — so `dispose()`\n",[37,10053,10054],{"class":39,"line":2668},[37,10055,10056],{"class":246},"\u002F\u002F flushes the telemetry and this file no longer owes a `stop()` it could forget.\n",[37,10058,10059,10061,10064,10066,10068,10070,10072,10074,10076,10078,10080,10082,10084,10087,10089,10091,10093,10095,10098,10100,10102,10104,10106,10108,10111,10113,10115,10117,10120,10122,10124,10127,10129,10131,10133,10135,10137,10139,10141,10143,10145,10147,10149,10151,10154,10156,10158],{"class":39,"line":2676},[37,10060,1550],{"class":1010},[37,10062,10063],{"class":118}," catalog ",[37,10065,1582],{"class":114},[37,10067,8495],{"class":110},[37,10069,9031],{"class":150},[37,10071,155],{"class":154},[37,10073,179],{"class":114},[37,10075,6759],{"class":114},[37,10077,155],{"class":154},[37,10079,1144],{"class":110},[37,10081,9064],{"class":150},[37,10083,155],{"class":154},[37,10085,10086],{"class":150},"join",[37,10088,155],{"class":154},[37,10090,9470],{"class":118},[37,10092,194],{"class":114},[37,10094,129],{"class":128},[37,10096,10097],{"class":46},"catalog",[37,10099,134],{"class":128},[37,10101,7859],{"class":154},[37,10103,194],{"class":114},[37,10105,9111],{"class":118},[37,10107,194],{"class":114},[37,10109,10110],{"class":164}," storageFactory",[37,10112,168],{"class":114},[37,10114,9669],{"class":118},[37,10116,194],{"class":114},[37,10118,10119],{"class":164}," extensions",[37,10121,168],{"class":114},[37,10123,171],{"class":154},[37,10125,10126],{"class":150},"observed",[37,10128,155],{"class":154},[37,10130,134],{"class":128},[37,10132,10097],{"class":46},[37,10134,134],{"class":128},[37,10136,194],{"class":114},[37,10138,10001],{"class":118},[37,10140,223],{"class":154},[37,10142,194],{"class":114},[37,10144,9266],{"class":150},[37,10146,5635],{"class":154},[37,10148,194],{"class":114},[37,10150,9287],{"class":150},[37,10152,10153],{"class":154},"()]",[37,10155,122],{"class":114},[37,10157,223],{"class":154},[37,10159,137],{"class":114},[37,10161,10162,10164,10167,10169,10171,10173,10175,10178,10180,10182,10184,10186,10188,10191,10193,10195,10197,10199],{"class":39,"line":2684},[37,10163,1550],{"class":1010},[37,10165,10166],{"class":118}," catalogReceiver ",[37,10168,1582],{"class":114},[37,10170,8495],{"class":110},[37,10172,9132],{"class":150},[37,10174,155],{"class":154},[37,10176,10177],{"class":150},"createLocalRunner",[37,10179,155],{"class":154},[37,10181,10097],{"class":118},[37,10183,223],{"class":154},[37,10185,194],{"class":114},[37,10187,115],{"class":114},[37,10189,10190],{"class":164}," port",[37,10192,168],{"class":114},[37,10194,9378],{"class":118},[37,10196,220],{"class":114},[37,10198,223],{"class":154},[37,10200,137],{"class":114},[37,10202,10203,10206,10208,10210,10212,10215,10217,10219,10221,10223,10226,10228,10231,10233,10235,10237,10240,10242,10245,10247,10249,10251,10253],{"class":39,"line":2692},[37,10204,10205],{"class":118},"stopping",[37,10207,943],{"class":114},[37,10209,1686],{"class":150},[37,10211,155],{"class":154},[37,10213,10214],{"class":1010},"async",[37,10216,6843],{"class":114},[37,10218,6978],{"class":6977},[37,10220,115],{"class":114},[37,10222,8495],{"class":110},[37,10224,10225],{"class":118}," catalogReceiver",[37,10227,943],{"class":114},[37,10229,10230],{"class":150},"close",[37,10232,5635],{"class":5844},[37,10234,1569],{"class":114},[37,10236,8495],{"class":110},[37,10238,10239],{"class":118}," catalog",[37,10241,943],{"class":114},[37,10243,10244],{"class":150},"dispose",[37,10246,5635],{"class":5844},[37,10248,1569],{"class":114},[37,10250,122],{"class":114},[37,10252,223],{"class":154},[37,10254,137],{"class":114},[37,10256,10257],{"class":39,"line":2700},[37,10258,144],{"emptyLinePlaceholder":143},[37,10260,10261],{"class":39,"line":2708},[37,10262,10263],{"class":246},"\u002F\u002F ── shipping — a Frond with no entity at all ────\n",[37,10265,10266,10268,10271,10273,10275,10277,10279,10281,10283,10285,10287,10289,10291,10293,10295,10297,10299,10301,10303,10305,10307,10309,10311,10313,10315,10317,10319,10321,10323,10325,10327,10329,10331,10333,10335,10337,10339,10341,10343,10345,10347,10349,10351],{"class":39,"line":2716},[37,10267,1550],{"class":1010},[37,10269,10270],{"class":118}," shipping ",[37,10272,1582],{"class":114},[37,10274,8495],{"class":110},[37,10276,9031],{"class":150},[37,10278,155],{"class":154},[37,10280,179],{"class":114},[37,10282,6759],{"class":114},[37,10284,155],{"class":154},[37,10286,1144],{"class":110},[37,10288,9064],{"class":150},[37,10290,155],{"class":154},[37,10292,10086],{"class":150},[37,10294,155],{"class":154},[37,10296,9470],{"class":118},[37,10298,194],{"class":114},[37,10300,129],{"class":128},[37,10302,1258],{"class":46},[37,10304,134],{"class":128},[37,10306,7859],{"class":154},[37,10308,194],{"class":114},[37,10310,9111],{"class":118},[37,10312,194],{"class":114},[37,10314,10119],{"class":164},[37,10316,168],{"class":114},[37,10318,171],{"class":154},[37,10320,10126],{"class":150},[37,10322,155],{"class":154},[37,10324,134],{"class":128},[37,10326,1258],{"class":46},[37,10328,134],{"class":128},[37,10330,194],{"class":114},[37,10332,10001],{"class":118},[37,10334,223],{"class":154},[37,10336,194],{"class":114},[37,10338,9266],{"class":150},[37,10340,5635],{"class":154},[37,10342,194],{"class":114},[37,10344,9287],{"class":150},[37,10346,10153],{"class":154},[37,10348,122],{"class":114},[37,10350,223],{"class":154},[37,10352,137],{"class":114},[37,10354,10355,10357,10360,10362,10364,10366,10368,10370,10372,10374,10376,10378,10380,10382,10384,10386,10388,10390],{"class":39,"line":2724},[37,10356,1550],{"class":1010},[37,10358,10359],{"class":118}," shippingReceiver ",[37,10361,1582],{"class":114},[37,10363,8495],{"class":110},[37,10365,9132],{"class":150},[37,10367,155],{"class":154},[37,10369,10177],{"class":150},[37,10371,155],{"class":154},[37,10373,1258],{"class":118},[37,10375,223],{"class":154},[37,10377,194],{"class":114},[37,10379,115],{"class":114},[37,10381,10190],{"class":164},[37,10383,168],{"class":114},[37,10385,9405],{"class":118},[37,10387,220],{"class":114},[37,10389,223],{"class":154},[37,10391,137],{"class":114},[37,10393,10394,10396,10398,10400,10402,10404,10406,10408,10410,10412,10415,10417,10419,10421,10423,10425,10427,10429,10431,10433,10435,10437,10439],{"class":39,"line":2729},[37,10395,10205],{"class":118},[37,10397,943],{"class":114},[37,10399,1686],{"class":150},[37,10401,155],{"class":154},[37,10403,10214],{"class":1010},[37,10405,6843],{"class":114},[37,10407,6978],{"class":6977},[37,10409,115],{"class":114},[37,10411,8495],{"class":110},[37,10413,10414],{"class":118}," shippingReceiver",[37,10416,943],{"class":114},[37,10418,10230],{"class":150},[37,10420,5635],{"class":5844},[37,10422,1569],{"class":114},[37,10424,8495],{"class":110},[37,10426,8517],{"class":118},[37,10428,943],{"class":114},[37,10430,10244],{"class":150},[37,10432,5635],{"class":5844},[37,10434,1569],{"class":114},[37,10436,122],{"class":114},[37,10438,223],{"class":154},[37,10440,137],{"class":114},[37,10442,10443],{"class":39,"line":2737},[37,10444,144],{"emptyLinePlaceholder":143},[37,10446,10447],{"class":39,"line":2742},[37,10448,10449],{"class":246},"\u002F\u002F ── shop — owns neither, calls both ─────────────\n",[37,10451,10452],{"class":39,"line":2749},[37,10453,10454],{"class":246},"\u002F\u002F This is the entire topology statement. Comment it out and the same CartHandler runs\n",[37,10456,10457],{"class":39,"line":2754},[37,10458,10459],{"class":246},"\u002F\u002F against local Fronds, with one span instead of three.\n",[37,10461,10462,10464,10467,10469,10471,10473,10475],{"class":39,"line":2768},[37,10463,1550],{"class":1010},[37,10465,10466],{"class":118}," shop ",[37,10468,1582],{"class":114},[37,10470,8495],{"class":110},[37,10472,9031],{"class":150},[37,10474,155],{"class":154},[37,10476,158],{"class":114},[37,10478,10479,10482,10484,10486,10488,10490,10492,10494,10496,10498,10500,10502,10504,10506],{"class":39,"line":2782},[37,10480,10481],{"class":114},"  ...",[37,10483,155],{"class":154},[37,10485,1144],{"class":110},[37,10487,9064],{"class":150},[37,10489,155],{"class":154},[37,10491,10086],{"class":150},[37,10493,155],{"class":154},[37,10495,9470],{"class":118},[37,10497,194],{"class":114},[37,10499,129],{"class":128},[37,10501,840],{"class":46},[37,10503,134],{"class":128},[37,10505,7859],{"class":154},[37,10507,214],{"class":114},[37,10509,10510,10513],{"class":39,"line":2796},[37,10511,10512],{"class":118},"  createContainer",[37,10514,214],{"class":114},[37,10516,10517,10520,10522],{"class":39,"line":2810},[37,10518,10519],{"class":164},"  remotes",[37,10521,168],{"class":114},[37,10523,342],{"class":114},[37,10525,10526,10529,10531,10533,10536,10539,10542,10544,10546],{"class":39,"line":2824},[37,10527,10528],{"class":164},"    catalog",[37,10530,168],{"class":114},[37,10532,5101],{"class":128},[37,10534,10535],{"class":46},"http:\u002F\u002F127.0.0.1:",[37,10537,10538],{"class":114},"${",[37,10540,10541],{"class":118},"CATALOG",[37,10543,220],{"class":114},[37,10545,4671],{"class":128},[37,10547,214],{"class":114},[37,10549,10550,10553,10555,10557,10559,10561,10564,10566,10568],{"class":39,"line":2838},[37,10551,10552],{"class":164},"    shipping",[37,10554,168],{"class":114},[37,10556,5101],{"class":128},[37,10558,10535],{"class":46},[37,10560,10538],{"class":114},[37,10562,10563],{"class":118},"SHIPPING",[37,10565,220],{"class":114},[37,10567,4671],{"class":128},[37,10569,214],{"class":114},[37,10571,10572],{"class":39,"line":2852},[37,10573,6131],{"class":114},[37,10575,10576,10578,10580,10582,10584,10586,10588,10590,10592,10594,10596,10598,10600,10602,10604,10606,10608,10610,10612,10614,10616,10619,10621,10623],{"class":39,"line":2865},[37,10577,165],{"class":164},[37,10579,168],{"class":114},[37,10581,171],{"class":154},[37,10583,10126],{"class":150},[37,10585,155],{"class":154},[37,10587,134],{"class":128},[37,10589,840],{"class":46},[37,10591,134],{"class":128},[37,10593,194],{"class":114},[37,10595,10001],{"class":118},[37,10597,223],{"class":154},[37,10599,194],{"class":114},[37,10601,9266],{"class":150},[37,10603,5635],{"class":154},[37,10605,194],{"class":114},[37,10607,9287],{"class":150},[37,10609,155],{"class":154},[37,10611,179],{"class":114},[37,10613,388],{"class":164},[37,10615,168],{"class":114},[37,10617,10618],{"class":781}," 4401",[37,10620,122],{"class":114},[37,10622,211],{"class":154},[37,10624,214],{"class":114},[37,10626,10627,10629,10631],{"class":39,"line":2878},[37,10628,220],{"class":114},[37,10630,223],{"class":154},[37,10632,137],{"class":114},[37,10634,10635,10637,10640,10642,10644,10646,10648,10650,10652,10654,10656,10658,10660,10662,10664,10666,10668,10670],{"class":39,"line":2886},[37,10636,1550],{"class":1010},[37,10638,10639],{"class":118}," shopReceiver ",[37,10641,1582],{"class":114},[37,10643,8495],{"class":110},[37,10645,9132],{"class":150},[37,10647,155],{"class":154},[37,10649,10177],{"class":150},[37,10651,155],{"class":154},[37,10653,840],{"class":118},[37,10655,223],{"class":154},[37,10657,194],{"class":114},[37,10659,115],{"class":114},[37,10661,10190],{"class":164},[37,10663,168],{"class":114},[37,10665,6285],{"class":118},[37,10667,220],{"class":114},[37,10669,223],{"class":154},[37,10671,137],{"class":114},[37,10673,10674,10676,10678,10680,10682,10684,10686,10688,10690,10692,10695,10697,10699,10701,10703,10705,10708,10710,10712,10714,10716,10718,10720],{"class":39,"line":2894},[37,10675,10205],{"class":118},[37,10677,943],{"class":114},[37,10679,1686],{"class":150},[37,10681,155],{"class":154},[37,10683,10214],{"class":1010},[37,10685,6843],{"class":114},[37,10687,6978],{"class":6977},[37,10689,115],{"class":114},[37,10691,8495],{"class":110},[37,10693,10694],{"class":118}," shopReceiver",[37,10696,943],{"class":114},[37,10698,10230],{"class":150},[37,10700,5635],{"class":5844},[37,10702,1569],{"class":114},[37,10704,8495],{"class":110},[37,10706,10707],{"class":118}," shop",[37,10709,943],{"class":114},[37,10711,10244],{"class":150},[37,10713,5635],{"class":5844},[37,10715,1569],{"class":114},[37,10717,122],{"class":114},[37,10719,223],{"class":154},[37,10721,137],{"class":114},[37,10723,10724],{"class":39,"line":2902},[37,10725,144],{"emptyLinePlaceholder":143},[37,10727,10728,10731,10733,10736,10738],{"class":39,"line":2910},[37,10729,10730],{"class":118},"console",[37,10732,943],{"class":114},[37,10734,10735],{"class":150},"log",[37,10737,155],{"class":154},[37,10739,5221],{"class":128},[37,10741,10742,10745,10747,10749,10751],{"class":39,"line":2918},[37,10743,10744],{"class":46},"  catalog   :",[37,10746,10538],{"class":114},[37,10748,10541],{"class":118},[37,10750,220],{"class":114},[37,10752,10753],{"class":46},"   product.list · product.findById · product.reserve\n",[37,10755,10756,10759,10761,10763,10765],{"class":39,"line":2926},[37,10757,10758],{"class":46},"  shipping  :",[37,10760,10538],{"class":114},[37,10762,10563],{"class":118},[37,10764,220],{"class":114},[37,10766,10767],{"class":46},"   shipment.quote · shipment.track\n",[37,10769,10770,10773,10775,10778,10780],{"class":39,"line":2934},[37,10771,10772],{"class":46},"  shop      :",[37,10774,10538],{"class":114},[37,10776,10777],{"class":118},"SHOP",[37,10779,220],{"class":114},[37,10781,10782],{"class":46},"   cart.checkout · cart.report        ← send load here\n",[37,10784,10785],{"class":39,"line":2942},[37,10786,144],{"emptyLinePlaceholder":143},[37,10788,10789,10792,10794,10796,10798,10801],{"class":39,"line":2950},[37,10790,10791],{"class":46},"  curl -s localhost:",[37,10793,10538],{"class":114},[37,10795,10777],{"class":118},[37,10797,220],{"class":114},[37,10799,10800],{"class":46},"\u002F_fougere\u002Fcall -H 'content-type: application\u002Fjson' ",[37,10802,10804],{"class":10803},"sfnqo","\\\\\n",[37,10806,10807],{"class":39,"line":2955},[37,10808,10809],{"class":46},"    -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"cart.checkout\",\"params\":{}}'\n",[37,10811,10812],{"class":39,"line":2963},[37,10813,144],{"emptyLinePlaceholder":143},[37,10815,10816],{"class":39,"line":2968},[37,10817,10818],{"class":46},"  pnpm load    # k6, in stages — a flat rate draws flat lines\n",[37,10820,10821,10823,10825],{"class":39,"line":2975},[37,10822,4671],{"class":128},[37,10824,223],{"class":154},[37,10826,137],{"class":114},[37,10828,10829],{"class":39,"line":2980},[37,10830,144],{"emptyLinePlaceholder":143},[37,10832,10833,10835,10838,10840,10843,10845,10847,10849],{"class":39,"line":2988},[37,10834,1550],{"class":1010},[37,10836,10837],{"class":118}," reporting ",[37,10839,1582],{"class":114},[37,10841,10842],{"class":150}," setInterval",[37,10844,155],{"class":154},[37,10846,5635],{"class":114},[37,10848,6978],{"class":6977},[37,10850,342],{"class":114},[37,10852,10853,10855,10857,10859,10861,10863,10865,10867],{"class":39,"line":2995},[37,10854,6876],{"class":110},[37,10856,6879],{"class":5844},[37,10858,10026],{"class":118},[37,10860,6989],{"class":114},[37,10862,5684],{"class":781},[37,10864,223],{"class":5844},[37,10866,9692],{"class":110},[37,10868,137],{"class":114},[37,10870,10871,10874,10876,10878,10880,10882,10885,10887,10889,10891,10894,10896,10898],{"class":39,"line":3002},[37,10872,10873],{"class":118},"  console",[37,10875,943],{"class":114},[37,10877,10735],{"class":150},[37,10879,155],{"class":5844},[37,10881,4671],{"class":128},[37,10883,10884],{"class":46},"  deepest pile-up this second: ",[37,10886,10538],{"class":114},[37,10888,10026],{"class":118},[37,10890,220],{"class":114},[37,10892,10893],{"class":46}," call(s) in flight",[37,10895,4671],{"class":128},[37,10897,223],{"class":5844},[37,10899,137],{"class":114},[37,10901,10902,10905,10907,10909],{"class":39,"line":3009},[37,10903,10904],{"class":118},"  peak",[37,10906,1563],{"class":114},[37,10908,5684],{"class":781},[37,10910,137],{"class":114},[37,10912,10913,10916,10919,10921],{"class":39,"line":3017},[37,10914,10915],{"class":114},"},",[37,10917,10918],{"class":781}," 1_000",[37,10920,223],{"class":154},[37,10922,137],{"class":114},[37,10924,10925],{"class":39,"line":3025},[37,10926,144],{"emptyLinePlaceholder":143},[37,10928,10929,10931,10934,10936,10939,10941,10943],{"class":39,"line":3033},[37,10930,1550],{"class":1010},[37,10932,10933],{"class":9668}," shutdown",[37,10935,1563],{"class":114},[37,10937,10938],{"class":1010}," async",[37,10940,6843],{"class":114},[37,10942,6978],{"class":6977},[37,10944,342],{"class":114},[37,10946,10947,10950,10952,10955,10957],{"class":39,"line":3041},[37,10948,10949],{"class":150},"  clearInterval",[37,10951,155],{"class":5844},[37,10953,10954],{"class":118},"reporting",[37,10956,223],{"class":5844},[37,10958,137],{"class":114},[37,10960,10961],{"class":39,"line":3049},[37,10962,10963],{"class":246},"  \u002F\u002F Reverse of construction. Telemetry flushes inside `dispose()` now — a span held in a\n",[37,10965,10966],{"class":39,"line":3057},[37,10967,10968],{"class":246},"  \u002F\u002F buffer at exit is a span nobody will ever see, and that is the extension's `down`.\n",[37,10970,10971,10974,10976,10978,10981,10984,10986,10988,10991,10993,10995,10997,10999],{"class":39,"line":3065},[37,10972,10973],{"class":110},"  for",[37,10975,6879],{"class":5844},[37,10977,1550],{"class":1010},[37,10979,10980],{"class":118}," stop",[37,10982,10983],{"class":114}," of",[37,10985,9932],{"class":118},[37,10987,943],{"class":114},[37,10989,10990],{"class":150},"reverse",[37,10992,10033],{"class":5844},[37,10994,8495],{"class":110},[37,10996,10980],{"class":150},[37,10998,5635],{"class":5844},[37,11000,137],{"class":114},[37,11002,11003,11006,11008,11011,11013,11016,11018],{"class":39,"line":3073},[37,11004,11005],{"class":118},"  process",[37,11007,943],{"class":114},[37,11009,11010],{"class":150},"exit",[37,11012,155],{"class":5844},[37,11014,11015],{"class":781},"0",[37,11017,223],{"class":5844},[37,11019,137],{"class":114},[37,11021,11022],{"class":39,"line":3081},[37,11023,6607],{"class":114},[37,11025,11026,11029,11031,11034,11036,11038,11041,11043,11045,11047,11049],{"class":39,"line":3086},[37,11027,11028],{"class":118},"process",[37,11030,943],{"class":114},[37,11032,11033],{"class":150},"on",[37,11035,155],{"class":154},[37,11037,134],{"class":128},[37,11039,11040],{"class":46},"SIGINT",[37,11042,134],{"class":128},[37,11044,194],{"class":114},[37,11046,10933],{"class":118},[37,11048,223],{"class":154},[37,11050,137],{"class":114},[37,11052,11053,11055,11057,11059,11061,11063,11066,11068,11070,11072,11074],{"class":39,"line":3094},[37,11054,11028],{"class":118},[37,11056,943],{"class":114},[37,11058,11033],{"class":150},[37,11060,155],{"class":154},[37,11062,134],{"class":128},[37,11064,11065],{"class":46},"SIGTERM",[37,11067,134],{"class":128},[37,11069,194],{"class":114},[37,11071,10933],{"class":118},[37,11073,223],{"class":154},[37,11075,137],{"class":114},[27,11077,11079],{"className":101,"code":11078,"filename":4771,"language":103,"meta":33,"style":33},"\u002F**\n * The whole observability wiring, which is now one line — and that is the point.\n *\n * It used to be four gestures in a fixed order plus a hand-rolled `stop()`: the order was\n * this file's to know, and the release was this file's to remember. `observability()` is\n * the same pair declared once, in the package that owns it, so a Frond still knows nothing\n * about being observed and a host knows nothing about how.\n *\u002F\nimport { observability, type SpanSink } from '@fougere\u002Fobservability';\nimport type { Extension } from '@fougere\u002Fcore';\n\n\u002F** Where an OTLP collector listens by convention. SigNoz, Jaeger, Tempo — all the same. *\u002F\nconst COLLECTOR = process.env.OTLP_URL ?? 'http:\u002F\u002Flocalhost:4318';\n\n\u002F**\n * Say it once for the whole process. An unreachable collector says the same thing every two\n * seconds, per signal, per Frond — which buries the app's own output. The first line carries\n * the remedy; the rest carry nothing.\n *\u002F\nlet complained = false;\n\nfunction complain(err: unknown): void {\n  if (complained) return;\n  complained = true;\n  console.warn(\n    `no OTLP collector on ${COLLECTOR} (${(err as Error)?.message ?? err}) — `\n    + 'run `pnpm signoz`, or set OTLP_URL. The app runs fine without one.',\n  );\n}\n\n\u002F**\n * `service` is what a dashboard groups by, and it is the only thing that differs between\n * the three processes here.\n *\n * Handed to `createApp({ extensions })`: the release comes with it, so the process no\n * longer owes a `stop()` call it could forget.\n *\u002F\nexport function observed(service: string, onSpan?: SpanSink): Extension {\n  return observability({\n    service,\n    otlp: COLLECTOR,\n    flushMs: 2_000,\n    onError: complain,\n    \u002F\u002F Off by default HERE TOO, and the env var is the real gesture: every operation already\n    \u002F\u002F reports what it waited for and how many statements it took, so this is turned on over\n    \u002F\u002F the one the count named. A page of forty rows is forty more spans to store.\n    spanPerStatement: process.env.SPAN_PER_STATEMENT === '1',\n    ...(onSpan ? { onSpan } : {}),\n  });\n}\n\n",[16,11080,11081,11085,11090,11094,11099,11104,11109,11114,11118,11144,11167,11171,11176,11208,11212,11216,11221,11226,11231,11235,11248,11252,11276,11291,11302,11312,11361,11375,11381,11385,11389,11393,11398,11403,11407,11412,11417,11421,11453,11463,11470,11482,11494,11505,11510,11515,11520,11549,11578,11586],{"__ignoreMap":33},[37,11082,11083],{"class":39,"line":40},[37,11084,6168],{"class":246},[37,11086,11087],{"class":39,"line":140},[37,11088,11089],{"class":246}," * The whole observability wiring, which is now one line — and that is the point.\n",[37,11091,11092],{"class":39,"line":147},[37,11093,6178],{"class":246},[37,11095,11096],{"class":39,"line":161},[37,11097,11098],{"class":246}," * It used to be four gestures in a fixed order plus a hand-rolled `stop()`: the order was\n",[37,11100,11101],{"class":39,"line":217},[37,11102,11103],{"class":246}," * this file's to know, and the release was this file's to remember. `observability()` is\n",[37,11105,11106],{"class":39,"line":1205},[37,11107,11108],{"class":246}," * the same pair declared once, in the package that owns it, so a Frond still knows nothing\n",[37,11110,11111],{"class":39,"line":1211},[37,11112,11113],{"class":246}," * about being observed and a host knows nothing about how.\n",[37,11115,11116],{"class":39,"line":1217},[37,11117,6207],{"class":246},[37,11119,11120,11122,11124,11126,11128,11130,11132,11134,11136,11138,11140,11142],{"class":39,"line":1223},[37,11121,111],{"class":110},[37,11123,115],{"class":114},[37,11125,119],{"class":118},[37,11127,194],{"class":114},[37,11129,974],{"class":110},[37,11131,1529],{"class":118},[37,11133,122],{"class":114},[37,11135,125],{"class":110},[37,11137,129],{"class":128},[37,11139,18],{"class":46},[37,11141,134],{"class":128},[37,11143,137],{"class":114},[37,11145,11146,11148,11150,11152,11155,11157,11159,11161,11163,11165],{"class":39,"line":1703},[37,11147,111],{"class":110},[37,11149,974],{"class":110},[37,11151,115],{"class":114},[37,11153,11154],{"class":118}," Extension",[37,11156,122],{"class":114},[37,11158,125],{"class":110},[37,11160,129],{"class":128},[37,11162,993],{"class":46},[37,11164,134],{"class":128},[37,11166,137],{"class":114},[37,11168,11169],{"class":39,"line":1708},[37,11170,144],{"emptyLinePlaceholder":143},[37,11172,11173],{"class":39,"line":1748},[37,11174,11175],{"class":246},"\u002F** Where an OTLP collector listens by convention. SigNoz, Jaeger, Tempo — all the same. *\u002F\n",[37,11177,11178,11180,11183,11185,11188,11190,11193,11195,11197,11200,11202,11204,11206],{"class":39,"line":2218},[37,11179,1550],{"class":1010},[37,11181,11182],{"class":118}," COLLECTOR ",[37,11184,1582],{"class":114},[37,11186,11187],{"class":118}," process",[37,11189,943],{"class":114},[37,11191,11192],{"class":1613},"env",[37,11194,943],{"class":114},[37,11196,5543],{"class":1613},[37,11198,11199],{"class":114}," ??",[37,11201,129],{"class":128},[37,11203,204],{"class":46},[37,11205,134],{"class":128},[37,11207,137],{"class":114},[37,11209,11210],{"class":39,"line":2226},[37,11211,144],{"emptyLinePlaceholder":143},[37,11213,11214],{"class":39,"line":2234},[37,11215,6168],{"class":246},[37,11217,11218],{"class":39,"line":2242},[37,11219,11220],{"class":246}," * Say it once for the whole process. An unreachable collector says the same thing every two\n",[37,11222,11223],{"class":39,"line":2247},[37,11224,11225],{"class":246}," * seconds, per signal, per Frond — which buries the app's own output. The first line carries\n",[37,11227,11228],{"class":39,"line":2255},[37,11229,11230],{"class":246}," * the remedy; the rest carry nothing.\n",[37,11232,11233],{"class":39,"line":2260},[37,11234,6207],{"class":246},[37,11236,11237,11239,11242,11244,11246],{"class":39,"line":2267},[37,11238,6616],{"class":1010},[37,11240,11241],{"class":118}," complained ",[37,11243,1582],{"class":114},[37,11245,6095],{"class":393},[37,11247,137],{"class":114},[37,11249,11250],{"class":39,"line":2272},[37,11251,144],{"emptyLinePlaceholder":143},[37,11253,11254,11256,11259,11261,11264,11266,11268,11271,11274],{"class":39,"line":2280},[37,11255,6634],{"class":1010},[37,11257,11258],{"class":150}," complain",[37,11260,155],{"class":114},[37,11262,11263],{"class":1031},"err",[37,11265,168],{"class":114},[37,11267,9531],{"class":1014},[37,11269,11270],{"class":114},"):",[37,11272,11273],{"class":1014}," void",[37,11275,342],{"class":114},[37,11277,11278,11280,11282,11285,11287,11289],{"class":39,"line":2288},[37,11279,6876],{"class":110},[37,11281,6879],{"class":5844},[37,11283,11284],{"class":118},"complained",[37,11286,223],{"class":5844},[37,11288,9692],{"class":110},[37,11290,137],{"class":114},[37,11292,11293,11296,11298,11300],{"class":39,"line":2296},[37,11294,11295],{"class":118},"  complained",[37,11297,1563],{"class":114},[37,11299,394],{"class":393},[37,11301,137],{"class":114},[37,11303,11304,11306,11308,11310],{"class":39,"line":2304},[37,11305,10873],{"class":118},[37,11307,943],{"class":114},[37,11309,1079],{"class":150},[37,11311,4698],{"class":5844},[37,11313,11314,11317,11320,11322,11325,11327,11329,11331,11333,11336,11339,11341,11343,11346,11349,11351,11354,11356,11359],{"class":39,"line":2312},[37,11315,11316],{"class":128},"    `",[37,11318,11319],{"class":46},"no OTLP collector on ",[37,11321,10538],{"class":114},[37,11323,11324],{"class":118},"COLLECTOR",[37,11326,220],{"class":114},[37,11328,6879],{"class":46},[37,11330,10538],{"class":114},[37,11332,155],{"class":154},[37,11334,11335],{"class":118},"err ",[37,11337,11338],{"class":110},"as",[37,11340,9854],{"class":1014},[37,11342,223],{"class":154},[37,11344,11345],{"class":114},"?.",[37,11347,11348],{"class":1613},"message",[37,11350,11199],{"class":114},[37,11352,11353],{"class":118}," err",[37,11355,220],{"class":114},[37,11357,11358],{"class":46},") — ",[37,11360,5221],{"class":128},[37,11362,11363,11366,11368,11371,11373],{"class":39,"line":2320},[37,11364,11365],{"class":114},"    +",[37,11367,129],{"class":128},[37,11369,11370],{"class":46},"run `pnpm signoz`, or set OTLP_URL. The app runs fine without one.",[37,11372,134],{"class":128},[37,11374,214],{"class":114},[37,11376,11377,11379],{"class":39,"line":2328},[37,11378,6821],{"class":5844},[37,11380,137],{"class":114},[37,11382,11383],{"class":39,"line":2336},[37,11384,405],{"class":114},[37,11386,11387],{"class":39,"line":2344},[37,11388,144],{"emptyLinePlaceholder":143},[37,11390,11391],{"class":39,"line":2349},[37,11392,6168],{"class":246},[37,11394,11395],{"class":39,"line":2357},[37,11396,11397],{"class":246}," * `service` is what a dashboard groups by, and it is the only thing that differs between\n",[37,11399,11400],{"class":39,"line":2362},[37,11401,11402],{"class":246}," * the three processes here.\n",[37,11404,11405],{"class":39,"line":2369},[37,11406,6178],{"class":246},[37,11408,11409],{"class":39,"line":2374},[37,11410,11411],{"class":246}," * Handed to `createApp({ extensions })`: the release comes with it, so the process no\n",[37,11413,11414],{"class":39,"line":2391},[37,11415,11416],{"class":246}," * longer owes a `stop()` call it could forget.\n",[37,11418,11419],{"class":39,"line":2400},[37,11420,6207],{"class":246},[37,11422,11423,11425,11427,11429,11431,11433,11435,11437,11439,11442,11445,11447,11449,11451],{"class":39,"line":2408},[37,11424,276],{"class":110},[37,11426,6840],{"class":1010},[37,11428,9244],{"class":150},[37,11430,155],{"class":114},[37,11432,450],{"class":1031},[37,11434,168],{"class":114},[37,11436,5872],{"class":1014},[37,11438,194],{"class":114},[37,11440,11441],{"class":1031}," onSpan",[37,11443,11444],{"class":114},"?:",[37,11446,1529],{"class":1014},[37,11448,11270],{"class":114},[37,11450,11154],{"class":1014},[37,11452,342],{"class":114},[37,11454,11455,11457,11459,11461],{"class":39,"line":2416},[37,11456,6658],{"class":110},[37,11458,119],{"class":150},[37,11460,155],{"class":5844},[37,11462,158],{"class":114},[37,11464,11465,11468],{"class":39,"line":2424},[37,11466,11467],{"class":118},"    service",[37,11469,214],{"class":114},[37,11471,11472,11475,11477,11480],{"class":39,"line":2432},[37,11473,11474],{"class":164},"    otlp",[37,11476,168],{"class":114},[37,11478,11479],{"class":118}," COLLECTOR",[37,11481,214],{"class":114},[37,11483,11484,11487,11489,11492],{"class":39,"line":2440},[37,11485,11486],{"class":164},"    flushMs",[37,11488,168],{"class":114},[37,11490,11491],{"class":781}," 2_000",[37,11493,214],{"class":114},[37,11495,11496,11499,11501,11503],{"class":39,"line":2448},[37,11497,11498],{"class":164},"    onError",[37,11500,168],{"class":114},[37,11502,11258],{"class":118},[37,11504,214],{"class":114},[37,11506,11507],{"class":39,"line":2456},[37,11508,11509],{"class":246},"    \u002F\u002F Off by default HERE TOO, and the env var is the real gesture: every operation already\n",[37,11511,11512],{"class":39,"line":2464},[37,11513,11514],{"class":246},"    \u002F\u002F reports what it waited for and how many statements it took, so this is turned on over\n",[37,11516,11517],{"class":39,"line":2469},[37,11518,11519],{"class":246},"    \u002F\u002F the one the count named. A page of forty rows is forty more spans to store.\n",[37,11521,11522,11525,11527,11529,11531,11533,11535,11538,11540,11542,11545,11547],{"class":39,"line":2477},[37,11523,11524],{"class":164},"    spanPerStatement",[37,11526,168],{"class":114},[37,11528,11187],{"class":118},[37,11530,943],{"class":114},[37,11532,11192],{"class":1613},[37,11534,943],{"class":114},[37,11536,11537],{"class":1613},"SPAN_PER_STATEMENT",[37,11539,6989],{"class":114},[37,11541,129],{"class":128},[37,11543,11544],{"class":46},"1",[37,11546,134],{"class":128},[37,11548,214],{"class":114},[37,11550,11551,11554,11556,11559,11562,11564,11566,11568,11571,11574,11576],{"class":39,"line":2482},[37,11552,11553],{"class":114},"    ...",[37,11555,155],{"class":5844},[37,11557,11558],{"class":118},"onSpan",[37,11560,11561],{"class":114}," ?",[37,11563,115],{"class":114},[37,11565,11441],{"class":118},[37,11567,122],{"class":114},[37,11569,11570],{"class":114}," :",[37,11572,11573],{"class":114}," {}",[37,11575,223],{"class":5844},[37,11577,214],{"class":114},[37,11579,11580,11582,11584],{"class":39,"line":2489},[37,11581,7032],{"class":114},[37,11583,223],{"class":5844},[37,11585,137],{"class":114},[37,11587,11588],{"class":39,"line":2494},[37,11589,405],{"class":114},[27,11591,11594],{"className":6000,"code":11592,"filename":11593,"language":6003,"meta":33,"style":33},"{\n  \"extends\": \"..\u002F..\u002Ftsconfig.base.json\",\n  \"compilerOptions\": { \"noEmit\": true, \"rootDir\": \".\" },\n  \"include\": [\"src\"]\n}\n\n","tsconfig.json",[16,11595,11596,11600,11619,11659,11680],{"__ignoreMap":33},[37,11597,11598],{"class":39,"line":40},[37,11599,158],{"class":114},[37,11601,11602,11604,11606,11608,11610,11612,11615,11617],{"class":39,"line":140},[37,11603,6014],{"class":114},[37,11605,6018],{"class":6017},[37,11607,6021],{"class":114},[37,11609,168],{"class":114},[37,11611,6026],{"class":128},[37,11613,11614],{"class":46},"..\u002F..\u002Ftsconfig.base.json",[37,11616,6021],{"class":128},[37,11618,214],{"class":114},[37,11620,11621,11623,11625,11627,11629,11631,11633,11635,11637,11639,11641,11643,11645,11647,11649,11651,11653,11655,11657],{"class":39,"line":147},[37,11622,6014],{"class":114},[37,11624,6040],{"class":6017},[37,11626,6021],{"class":114},[37,11628,168],{"class":114},[37,11630,115],{"class":114},[37,11632,6026],{"class":114},[37,11634,6054],{"class":336},[37,11636,6021],{"class":114},[37,11638,168],{"class":114},[37,11640,394],{"class":128},[37,11642,194],{"class":114},[37,11644,6026],{"class":114},[37,11646,6069],{"class":336},[37,11648,6021],{"class":114},[37,11650,168],{"class":114},[37,11652,6026],{"class":128},[37,11654,943],{"class":46},[37,11656,6021],{"class":128},[37,11658,376],{"class":114},[37,11660,11661,11663,11665,11667,11669,11671,11673,11676,11678],{"class":39,"line":161},[37,11662,6014],{"class":114},[37,11664,6138],{"class":6017},[37,11666,6021],{"class":114},[37,11668,168],{"class":114},[37,11670,171],{"class":114},[37,11672,6021],{"class":128},[37,11674,11675],{"class":46},"src",[37,11677,6021],{"class":128},[37,11679,2388],{"class":114},[37,11681,11682],{"class":39,"line":217},[37,11683,405],{"class":114},[1781,11685,11686],{},"html pre.shiki code .sd7zb, html code.shiki .sd7zb{--shiki-light:#39ADB5;--shiki-light-font-weight:inherit;--shiki-default:#A3B0A5;--shiki-default-font-weight:bold;--shiki-dark:#89DDFF;--shiki-dark-font-weight:inherit}html pre.shiki code .sLf9K, html code.shiki .sLf9K{--shiki-light:#E2931D;--shiki-light-font-weight:inherit;--shiki-default:#8FCF86;--shiki-default-font-weight:bold;--shiki-dark:#FFCB6B;--shiki-dark-font-weight:inherit}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 .sN-8n, html code.shiki .sN-8n{--shiki-light:#91B859;--shiki-default:#EE9F6B;--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 .siB6D, html code.shiki .siB6D{--shiki-light:#91B859;--shiki-default:#A3B0A5;--shiki-dark:#C3E88D}html pre.shiki code .sYNOY, html code.shiki .sYNOY{--shiki-light:#90A4AE90;--shiki-default:#DDE5DA;--shiki-dark:#BABED890}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 .sHaeK, html code.shiki .sHaeK{--shiki-light:#39ADB5;--shiki-light-font-weight:bold;--shiki-default:#A3B0A5;--shiki-default-font-weight:inherit;--shiki-dark:#89DDFF;--shiki-dark-font-weight:bold}html pre.shiki code .s7rwI, html code.shiki .s7rwI{--shiki-light:#E53935;--shiki-light-font-weight:bold;--shiki-default:#DDE5DA;--shiki-default-font-weight:inherit;--shiki-dark:#F07178;--shiki-dark-font-weight:bold}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 .sDDC1, html code.shiki .sDDC1{--shiki-light:#39ADB5;--shiki-default:#EE9F6B;--shiki-dark:#89DDFF}html pre.shiki code .s76I7, html code.shiki .s76I7{--shiki-light:#9C3EDA;--shiki-default:#8FCF86;--shiki-dark:#C792EA}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 .s3dPA, html code.shiki .s3dPA{--shiki-light:#F76D47;--shiki-default:#EE9F6B;--shiki-dark:#F78C6C}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 pre.shiki code .shDUQ, html code.shiki .shDUQ{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#DDE5DA;--shiki-default-font-style:inherit;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .shDkW, html code.shiki .shDkW{--shiki-light:#E53935;--shiki-default:#C9B6EA;--shiki-dark:#F07178}html pre.shiki code .sxG60, html code.shiki .sxG60{--shiki-light:#39ADB5;--shiki-light-font-style:inherit;--shiki-default:#8FCF86;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:inherit}html pre.shiki code .sy9f4, html code.shiki .sy9f4{--shiki-light:#90A4AE;--shiki-default:#93CFC0;--shiki-dark:#BABED8}html pre.shiki code .spAFX, html code.shiki .spAFX{--shiki-light:#E53935;--shiki-default:#A3B0A5;--shiki-dark:#F07178}html pre.shiki code .sgjsB, html code.shiki .sgjsB{--shiki-light:#6182B8;--shiki-default:#EFCD8F;--shiki-dark:#82AAFF}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 .slmMI, html code.shiki .slmMI{--shiki-light:#FF5370;--shiki-default:#EE9F6B;--shiki-dark:#FF9CAC}html pre.shiki code .sK7Y8, html code.shiki .sK7Y8{--shiki-light:#E53935;--shiki-default:#EE9F6B;--shiki-dark:#F07178}html pre.shiki code .scTuO, html code.shiki .scTuO{--shiki-light:#9C3EDA;--shiki-default:#A3B0A5;--shiki-dark:#C792EA}html pre.shiki code .slP7D, html code.shiki .slP7D{--shiki-light:#90A4AE;--shiki-default:#C9B6EA;--shiki-dark:#BABED8}html pre.shiki code .sfnqo, html code.shiki .sfnqo{--shiki-light:#90A4AE;--shiki-default:#EE9F6B;--shiki-dark:#BABED8}html pre.shiki code .s687E, html code.shiki .s687E{--shiki-light:#E53935;--shiki-default:#8FCF86;--shiki-dark:#F07178}",{"title":33,"searchDepth":140,"depth":140,"links":11688},[],{},"\u002Fdemo\u002Fobservability",{"title":174,"description":33},"demo\u002Fobservability","p8KSXYbO6I_8O1RuFj4JLSFvfq-gpYo3QUEyei-YoNE",1794396614826]