[{"data":1,"prerenderedAt":1869},["ShallowReactive",2],{"markdown-demo-sample":3,"tux-codeblock:md:github-light:l3cz07":1867,"tux-codeblock:md:github-light:e8ce4b":1868},{"data":4,"body":9,"toc":1862},{"title":5,"description":6,"date":7,"author":8},"How the agent watcher works","Landscape's file watcher is the long-running process on each agent host\nthat detects file events (create \u002F modify \u002F delete \u002F move) and ships\nthem to the central index.","2026-04-22","R. Chen",{"type":10,"children":11},"root",[12,20,25,36,43,48,145,162,168,277,282,386,404,410,965,970,1827,1856],{"type":13,"tag":14,"props":15,"children":17},"element","h1",{"id":16},"how-the-agent-watcher-works",[18],{"type":19,"value":5},"text",{"type":13,"tag":21,"props":22,"children":23},"p",{},[24],{"type":19,"value":6},{"type":13,"tag":26,"props":27,"children":30},"tux-alert",{"title":28,"variant":29},"ITAR-tagged paths","compliance",[31],{"type":13,"tag":21,"props":32,"children":33},{},[34],{"type":19,"value":35},"This watcher must run with a tier-3 token when watching corpora that\ncontain ITAR-marked records. The default agent token is tier-1 and\nwill refuse the scope.",{"type":13,"tag":37,"props":38,"children":40},"h2",{"id":39},"event-types",[41],{"type":19,"value":42},"Event types",{"type":13,"tag":21,"props":44,"children":45},{},[46],{"type":19,"value":47},"The watcher emits four event types upstream:",{"type":13,"tag":49,"props":50,"children":51},"table",{},[52,71],{"type":13,"tag":53,"props":54,"children":55},"thead",{},[56],{"type":13,"tag":57,"props":58,"children":59},"tr",{},[60,66],{"type":13,"tag":61,"props":62,"children":63},"th",{},[64],{"type":19,"value":65},"Type",{"type":13,"tag":61,"props":67,"children":68},{},[69],{"type":19,"value":70},"Triggers when…",{"type":13,"tag":72,"props":73,"children":74},"tbody",{},[75,94,111,128],{"type":13,"tag":57,"props":76,"children":77},{},[78,89],{"type":13,"tag":79,"props":80,"children":81},"td",{},[82],{"type":13,"tag":83,"props":84,"children":86},"code",{"className":85},[],[87],{"type":19,"value":88},"create",{"type":13,"tag":79,"props":90,"children":91},{},[92],{"type":19,"value":93},"A new inode appears in a watched root",{"type":13,"tag":57,"props":95,"children":96},{},[97,106],{"type":13,"tag":79,"props":98,"children":99},{},[100],{"type":13,"tag":83,"props":101,"children":103},{"className":102},[],[104],{"type":19,"value":105},"modify",{"type":13,"tag":79,"props":107,"children":108},{},[109],{"type":19,"value":110},"An existing inode's content or mtime changes",{"type":13,"tag":57,"props":112,"children":113},{},[114,123],{"type":13,"tag":79,"props":115,"children":116},{},[117],{"type":13,"tag":83,"props":118,"children":120},{"className":119},[],[121],{"type":19,"value":122},"delete",{"type":13,"tag":79,"props":124,"children":125},{},[126],{"type":19,"value":127},"An inode disappears (soft-delete with 30d retention)",{"type":13,"tag":57,"props":129,"children":130},{},[131,140],{"type":13,"tag":79,"props":132,"children":133},{},[134],{"type":13,"tag":83,"props":135,"children":137},{"className":136},[],[138],{"type":19,"value":139},"move",{"type":13,"tag":79,"props":141,"children":142},{},[143],{"type":19,"value":144},"An inode's path changes — single event, never delete+create",{"type":13,"tag":146,"props":147,"children":149},"tux-callout",{"kind":148},"stat",[150],{"type":13,"tag":21,"props":151,"children":152},{},[153,155,160],{"type":19,"value":154},"Move detection uses inode tracking on POSIX and SHA-256 correlation\non Windows. Either way, a single ",{"type":13,"tag":83,"props":156,"children":158},{"className":157},[],[159],{"type":19,"value":139},{"type":19,"value":161}," event is emitted upstream\nrather than a delete+create pair.",{"type":13,"tag":37,"props":163,"children":165},{"id":164},"implementation-note",[166],{"type":19,"value":167},"Implementation note",{"type":13,"tag":169,"props":170,"children":175},"pre",{"className":171,"code":172,"language":173,"meta":174,"style":174},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","\u002F\u002F Coalesce events over a 250ms window to avoid shipping every\n\u002F\u002F keystroke during text-editor saves.\nconst debounced = debounce(events, { window: 250 });\n","ts","",[176],{"type":13,"tag":83,"props":177,"children":178},{"__ignoreMap":174},[179,191,200],{"type":13,"tag":180,"props":181,"children":184},"span",{"class":182,"line":183},"line",1,[185],{"type":13,"tag":180,"props":186,"children":188},{"style":187},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit",[189],{"type":19,"value":190},"\u002F\u002F Coalesce events over a 250ms window to avoid shipping every\n",{"type":13,"tag":180,"props":192,"children":194},{"class":182,"line":193},2,[195],{"type":13,"tag":180,"props":196,"children":197},{"style":187},[198],{"type":19,"value":199},"\u002F\u002F keystroke during text-editor saves.\n",{"type":13,"tag":180,"props":201,"children":203},{"class":182,"line":202},3,[204,210,216,222,228,234,240,245,251,256,262,267,272],{"type":13,"tag":180,"props":205,"children":207},{"style":206},"--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583",[208],{"type":19,"value":209},"const",{"type":13,"tag":180,"props":211,"children":213},{"style":212},"--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF",[214],{"type":19,"value":215}," debounced",{"type":13,"tag":180,"props":217,"children":219},{"style":218},"--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583",[220],{"type":19,"value":221}," =",{"type":13,"tag":180,"props":223,"children":225},{"style":224},"--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0",[226],{"type":19,"value":227}," debounce",{"type":13,"tag":180,"props":229,"children":231},{"style":230},"--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8",[232],{"type":19,"value":233},"(events",{"type":13,"tag":180,"props":235,"children":237},{"style":236},"--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8",[238],{"type":19,"value":239},",",{"type":13,"tag":180,"props":241,"children":242},{"style":236},[243],{"type":19,"value":244}," {",{"type":13,"tag":180,"props":246,"children":248},{"style":247},"--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8",[249],{"type":19,"value":250}," window",{"type":13,"tag":180,"props":252,"children":253},{"style":236},[254],{"type":19,"value":255},":",{"type":13,"tag":180,"props":257,"children":259},{"style":258},"--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF",[260],{"type":19,"value":261}," 250",{"type":13,"tag":180,"props":263,"children":264},{"style":236},[265],{"type":19,"value":266}," }",{"type":13,"tag":180,"props":268,"children":269},{"style":230},[270],{"type":19,"value":271},")",{"type":13,"tag":180,"props":273,"children":274},{"style":236},[275],{"type":19,"value":276},";\n",{"type":13,"tag":21,"props":278,"children":279},{},[280],{"type":19,"value":281},"Run it locally:",{"type":13,"tag":169,"props":283,"children":287},{"className":284,"code":285,"language":286,"meta":174,"style":174},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","$ landscape agent watch \u002Fresearch\u002Fgrants --root=local\n[12:14:08] watcher: 4 paths registered\n[12:14:09] heartbeat: ok (latency 38ms)\n","bash",[288],{"type":13,"tag":83,"props":289,"children":290},{"__ignoreMap":174},[291,327,350],{"type":13,"tag":180,"props":292,"children":293},{"class":182,"line":183},[294,300,306,311,316,321],{"type":13,"tag":180,"props":295,"children":297},{"style":296},"--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0",[298],{"type":19,"value":299},"$",{"type":13,"tag":180,"props":301,"children":303},{"style":302},"--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF",[304],{"type":19,"value":305}," landscape",{"type":13,"tag":180,"props":307,"children":308},{"style":302},[309],{"type":19,"value":310}," agent",{"type":13,"tag":180,"props":312,"children":313},{"style":302},[314],{"type":19,"value":315}," watch",{"type":13,"tag":180,"props":317,"children":318},{"style":302},[319],{"type":19,"value":320}," \u002Fresearch\u002Fgrants",{"type":13,"tag":180,"props":322,"children":324},{"style":323},"--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF",[325],{"type":19,"value":326}," --root=local\n",{"type":13,"tag":180,"props":328,"children":329},{"class":182,"line":193},[330,335,340,345],{"type":13,"tag":180,"props":331,"children":332},{"style":236},[333],{"type":19,"value":334},"[",{"type":13,"tag":180,"props":336,"children":337},{"style":230},[338],{"type":19,"value":339},"12:14:08",{"type":13,"tag":180,"props":341,"children":342},{"style":236},[343],{"type":19,"value":344},"]",{"type":13,"tag":180,"props":346,"children":347},{"style":230},[348],{"type":19,"value":349}," watcher: 4 paths registered\n",{"type":13,"tag":180,"props":351,"children":352},{"class":182,"line":202},[353,357,362,366,371,376,381],{"type":13,"tag":180,"props":354,"children":355},{"style":236},[356],{"type":19,"value":334},{"type":13,"tag":180,"props":358,"children":359},{"style":230},[360],{"type":19,"value":361},"12:14:09",{"type":13,"tag":180,"props":363,"children":364},{"style":236},[365],{"type":19,"value":344},{"type":13,"tag":180,"props":367,"children":368},{"style":230},[369],{"type":19,"value":370}," heartbeat: ok (",{"type":13,"tag":180,"props":372,"children":373},{"style":296},[374],{"type":19,"value":375},"latency",{"type":13,"tag":180,"props":377,"children":378},{"style":302},[379],{"type":19,"value":380}," 38ms",{"type":13,"tag":180,"props":382,"children":383},{"style":230},[384],{"type":19,"value":385},")\n",{"type":13,"tag":26,"props":387,"children":390},{"title":388,"variant":389},"Heartbeat cadence","tip",[391],{"type":13,"tag":21,"props":392,"children":393},{},[394,396,402],{"type":19,"value":395},"The default heartbeat is every 60 seconds. Override with\n",{"type":13,"tag":83,"props":397,"children":399},{"className":398},[],[400],{"type":19,"value":401},"--heartbeat=30s",{"type":19,"value":403}," for tighter monitoring during a deploy or rolling\nrestart.",{"type":13,"tag":37,"props":405,"children":407},{"id":406},"math",[408],{"type":19,"value":409},"Math",{"type":13,"tag":21,"props":411,"children":412},{},[413,415,705,707,843,845,963],{"type":19,"value":414},"Inline equations flow with surrounding prose — the watcher's\ndetection-latency budget is bounded by ",{"type":13,"tag":180,"props":416,"children":419},{"className":417},[418],"katex",[420,501],{"type":13,"tag":180,"props":421,"children":424},{"className":422},[423],"katex-mathml",[425],{"type":13,"tag":406,"props":426,"children":428},{"xmlns":427},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[429],{"type":13,"tag":430,"props":431,"children":432},"semantics",{},[433,494],{"type":13,"tag":434,"props":435,"children":436},"mrow",{},[437,468,474],{"type":13,"tag":438,"props":439,"children":440},"msub",{},[441,447],{"type":13,"tag":442,"props":443,"children":444},"mi",{},[445],{"type":19,"value":446},"T",{"type":13,"tag":434,"props":448,"children":449},{},[450,454,459,464],{"type":13,"tag":442,"props":451,"children":452},{},[453],{"type":19,"value":21},{"type":13,"tag":442,"props":455,"children":456},{},[457],{"type":19,"value":458},"o",{"type":13,"tag":442,"props":460,"children":461},{},[462],{"type":19,"value":463},"l",{"type":13,"tag":442,"props":465,"children":466},{},[467],{"type":19,"value":463},{"type":13,"tag":469,"props":470,"children":471},"mo",{},[472],{"type":19,"value":473},"+",{"type":13,"tag":438,"props":475,"children":476},{},[477,481],{"type":13,"tag":442,"props":478,"children":479},{},[480],{"type":19,"value":446},{"type":13,"tag":434,"props":482,"children":483},{},[484,489],{"type":13,"tag":442,"props":485,"children":486},{},[487],{"type":19,"value":488},"f",{"type":13,"tag":442,"props":490,"children":491},{},[492],{"type":19,"value":493},"s",{"type":13,"tag":495,"props":496,"children":498},"annotation",{"encoding":497},"application\u002Fx-tex",[499],{"type":19,"value":500},"T_{poll} + T_{fs}",{"type":13,"tag":180,"props":502,"children":506},{"className":503,"ariaHidden":505},[504],"katex-html","true",[507,630],{"type":13,"tag":180,"props":508,"children":511},{"className":509},[510],"base",[512,518,614,620,626],{"type":13,"tag":180,"props":513,"children":517},{"className":514,"style":516},[515],"strut","height:0.9694em;vertical-align:-0.2861em;",[],{"type":13,"tag":180,"props":519,"children":522},{"className":520},[521],"mord",[523,530],{"type":13,"tag":180,"props":524,"children":528},{"className":525,"style":527},[521,526],"mathnormal","margin-right:0.1389em;",[529],{"type":19,"value":446},{"type":13,"tag":180,"props":531,"children":534},{"className":532},[533],"msupsub",[535],{"type":13,"tag":180,"props":536,"children":540},{"className":537},[538,539],"vlist-t","vlist-t2",[541,602],{"type":13,"tag":180,"props":542,"children":545},{"className":543},[544],"vlist-r",[546,595],{"type":13,"tag":180,"props":547,"children":551},{"className":548,"style":550},[549],"vlist","height:0.3361em;",[552],{"type":13,"tag":180,"props":553,"children":555},{"style":554},"top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;",[556,562],{"type":13,"tag":180,"props":557,"children":561},{"className":558,"style":560},[559],"pstrut","height:2.7em;",[],{"type":13,"tag":180,"props":563,"children":569},{"className":564},[565,566,567,568],"sizing","reset-size6","size3","mtight",[570],{"type":13,"tag":180,"props":571,"children":573},{"className":572},[521,568],[574,579,584,590],{"type":13,"tag":180,"props":575,"children":577},{"className":576},[521,526,568],[578],{"type":19,"value":21},{"type":13,"tag":180,"props":580,"children":582},{"className":581},[521,526,568],[583],{"type":19,"value":458},{"type":13,"tag":180,"props":585,"children":588},{"className":586,"style":587},[521,526,568],"margin-right:0.0197em;",[589],{"type":19,"value":463},{"type":13,"tag":180,"props":591,"children":593},{"className":592,"style":587},[521,526,568],[594],{"type":19,"value":463},{"type":13,"tag":180,"props":596,"children":599},{"className":597},[598],"vlist-s",[600],{"type":19,"value":601},"​",{"type":13,"tag":180,"props":603,"children":605},{"className":604},[544],[606],{"type":13,"tag":180,"props":607,"children":610},{"className":608,"style":609},[549],"height:0.2861em;",[611],{"type":13,"tag":180,"props":612,"children":613},{},[],{"type":13,"tag":180,"props":615,"children":619},{"className":616,"style":618},[617],"mspace","margin-right:0.2222em;",[],{"type":13,"tag":180,"props":621,"children":624},{"className":622},[623],"mbin",[625],{"type":19,"value":473},{"type":13,"tag":180,"props":627,"children":629},{"className":628,"style":618},[617],[],{"type":13,"tag":180,"props":631,"children":633},{"className":632},[510],[634,638],{"type":13,"tag":180,"props":635,"children":637},{"className":636,"style":516},[515],[],{"type":13,"tag":180,"props":639,"children":641},{"className":640},[521],[642,647],{"type":13,"tag":180,"props":643,"children":645},{"className":644,"style":527},[521,526],[646],{"type":19,"value":446},{"type":13,"tag":180,"props":648,"children":650},{"className":649},[533],[651],{"type":13,"tag":180,"props":652,"children":654},{"className":653},[538,539],[655,694],{"type":13,"tag":180,"props":656,"children":658},{"className":657},[544],[659,689],{"type":13,"tag":180,"props":660,"children":662},{"className":661,"style":550},[549],[663],{"type":13,"tag":180,"props":664,"children":665},{"style":554},[666,670],{"type":13,"tag":180,"props":667,"children":669},{"className":668,"style":560},[559],[],{"type":13,"tag":180,"props":671,"children":673},{"className":672},[565,566,567,568],[674],{"type":13,"tag":180,"props":675,"children":677},{"className":676},[521,568],[678,684],{"type":13,"tag":180,"props":679,"children":682},{"className":680,"style":681},[521,526,568],"margin-right:0.1076em;",[683],{"type":19,"value":488},{"type":13,"tag":180,"props":685,"children":687},{"className":686},[521,526,568],[688],{"type":19,"value":493},{"type":13,"tag":180,"props":690,"children":692},{"className":691},[598],[693],{"type":19,"value":601},{"type":13,"tag":180,"props":695,"children":697},{"className":696},[544],[698],{"type":13,"tag":180,"props":699,"children":701},{"className":700,"style":609},[549],[702],{"type":13,"tag":180,"props":703,"children":704},{},[],{"type":19,"value":706},", where\n",{"type":13,"tag":180,"props":708,"children":710},{"className":709},[418],[711,755],{"type":13,"tag":180,"props":712,"children":714},{"className":713},[423],[715],{"type":13,"tag":406,"props":716,"children":717},{"xmlns":427},[718],{"type":13,"tag":430,"props":719,"children":720},{},[721,750],{"type":13,"tag":434,"props":722,"children":723},{},[724],{"type":13,"tag":438,"props":725,"children":726},{},[727,731],{"type":13,"tag":442,"props":728,"children":729},{},[730],{"type":19,"value":446},{"type":13,"tag":434,"props":732,"children":733},{},[734,738,742,746],{"type":13,"tag":442,"props":735,"children":736},{},[737],{"type":19,"value":21},{"type":13,"tag":442,"props":739,"children":740},{},[741],{"type":19,"value":458},{"type":13,"tag":442,"props":743,"children":744},{},[745],{"type":19,"value":463},{"type":13,"tag":442,"props":747,"children":748},{},[749],{"type":19,"value":463},{"type":13,"tag":495,"props":751,"children":752},{"encoding":497},[753],{"type":19,"value":754},"T_{poll}",{"type":13,"tag":180,"props":756,"children":758},{"className":757,"ariaHidden":505},[504],[759],{"type":13,"tag":180,"props":760,"children":762},{"className":761},[510],[763,767],{"type":13,"tag":180,"props":764,"children":766},{"className":765,"style":516},[515],[],{"type":13,"tag":180,"props":768,"children":770},{"className":769},[521],[771,776],{"type":13,"tag":180,"props":772,"children":774},{"className":773,"style":527},[521,526],[775],{"type":19,"value":446},{"type":13,"tag":180,"props":777,"children":779},{"className":778},[533],[780],{"type":13,"tag":180,"props":781,"children":783},{"className":782},[538,539],[784,832],{"type":13,"tag":180,"props":785,"children":787},{"className":786},[544],[788,827],{"type":13,"tag":180,"props":789,"children":791},{"className":790,"style":550},[549],[792],{"type":13,"tag":180,"props":793,"children":794},{"style":554},[795,799],{"type":13,"tag":180,"props":796,"children":798},{"className":797,"style":560},[559],[],{"type":13,"tag":180,"props":800,"children":802},{"className":801},[565,566,567,568],[803],{"type":13,"tag":180,"props":804,"children":806},{"className":805},[521,568],[807,812,817,822],{"type":13,"tag":180,"props":808,"children":810},{"className":809},[521,526,568],[811],{"type":19,"value":21},{"type":13,"tag":180,"props":813,"children":815},{"className":814},[521,526,568],[816],{"type":19,"value":458},{"type":13,"tag":180,"props":818,"children":820},{"className":819,"style":587},[521,526,568],[821],{"type":19,"value":463},{"type":13,"tag":180,"props":823,"children":825},{"className":824,"style":587},[521,526,568],[826],{"type":19,"value":463},{"type":13,"tag":180,"props":828,"children":830},{"className":829},[598],[831],{"type":19,"value":601},{"type":13,"tag":180,"props":833,"children":835},{"className":834},[544],[836],{"type":13,"tag":180,"props":837,"children":839},{"className":838,"style":609},[549],[840],{"type":13,"tag":180,"props":841,"children":842},{},[],{"type":19,"value":844}," is the kernel poll interval and ",{"type":13,"tag":180,"props":846,"children":848},{"className":847},[418],[849,885],{"type":13,"tag":180,"props":850,"children":852},{"className":851},[423],[853],{"type":13,"tag":406,"props":854,"children":855},{"xmlns":427},[856],{"type":13,"tag":430,"props":857,"children":858},{},[859,880],{"type":13,"tag":434,"props":860,"children":861},{},[862],{"type":13,"tag":438,"props":863,"children":864},{},[865,869],{"type":13,"tag":442,"props":866,"children":867},{},[868],{"type":19,"value":446},{"type":13,"tag":434,"props":870,"children":871},{},[872,876],{"type":13,"tag":442,"props":873,"children":874},{},[875],{"type":19,"value":488},{"type":13,"tag":442,"props":877,"children":878},{},[879],{"type":19,"value":493},{"type":13,"tag":495,"props":881,"children":882},{"encoding":497},[883],{"type":19,"value":884},"T_{fs}",{"type":13,"tag":180,"props":886,"children":888},{"className":887,"ariaHidden":505},[504],[889],{"type":13,"tag":180,"props":890,"children":892},{"className":891},[510],[893,897],{"type":13,"tag":180,"props":894,"children":896},{"className":895,"style":516},[515],[],{"type":13,"tag":180,"props":898,"children":900},{"className":899},[521],[901,906],{"type":13,"tag":180,"props":902,"children":904},{"className":903,"style":527},[521,526],[905],{"type":19,"value":446},{"type":13,"tag":180,"props":907,"children":909},{"className":908},[533],[910],{"type":13,"tag":180,"props":911,"children":913},{"className":912},[538,539],[914,952],{"type":13,"tag":180,"props":915,"children":917},{"className":916},[544],[918,947],{"type":13,"tag":180,"props":919,"children":921},{"className":920,"style":550},[549],[922],{"type":13,"tag":180,"props":923,"children":924},{"style":554},[925,929],{"type":13,"tag":180,"props":926,"children":928},{"className":927,"style":560},[559],[],{"type":13,"tag":180,"props":930,"children":932},{"className":931},[565,566,567,568],[933],{"type":13,"tag":180,"props":934,"children":936},{"className":935},[521,568],[937,942],{"type":13,"tag":180,"props":938,"children":940},{"className":939,"style":681},[521,526,568],[941],{"type":19,"value":488},{"type":13,"tag":180,"props":943,"children":945},{"className":944},[521,526,568],[946],{"type":19,"value":493},{"type":13,"tag":180,"props":948,"children":950},{"className":949},[598],[951],{"type":19,"value":601},{"type":13,"tag":180,"props":953,"children":955},{"className":954},[544],[956],{"type":13,"tag":180,"props":957,"children":959},{"className":958,"style":609},[549],[960],{"type":13,"tag":180,"props":961,"children":962},{},[],{"type":19,"value":964}," is the filesystem\nevent-emission delay.",{"type":13,"tag":21,"props":966,"children":967},{},[968],{"type":19,"value":969},"Display equations get their own block:",{"type":13,"tag":180,"props":971,"children":974},{"className":972},[973],"katex-display",[975],{"type":13,"tag":180,"props":976,"children":978},{"className":977},[418],[979,1207],{"type":13,"tag":180,"props":980,"children":982},{"className":981},[423],[983],{"type":13,"tag":406,"props":984,"children":986},{"xmlns":427,"display":985},"block",[987],{"type":13,"tag":430,"props":988,"children":989},{},[990,1202],{"type":13,"tag":434,"props":991,"children":992},{},[993,1031,1036,1041,1046,1052,1078,1082,1100,1104,1108,1123,1152],{"type":13,"tag":438,"props":994,"children":995},{},[996,1000],{"type":13,"tag":442,"props":997,"children":998},{},[999],{"type":19,"value":446},{"type":13,"tag":434,"props":1001,"children":1002},{},[1003,1008,1013,1018,1022,1027],{"type":13,"tag":442,"props":1004,"children":1005},{},[1006],{"type":19,"value":1007},"d",{"type":13,"tag":442,"props":1009,"children":1010},{},[1011],{"type":19,"value":1012},"e",{"type":13,"tag":442,"props":1014,"children":1015},{},[1016],{"type":19,"value":1017},"t",{"type":13,"tag":442,"props":1019,"children":1020},{},[1021],{"type":19,"value":1012},{"type":13,"tag":442,"props":1023,"children":1024},{},[1025],{"type":19,"value":1026},"c",{"type":13,"tag":442,"props":1028,"children":1029},{},[1030],{"type":19,"value":1017},{"type":13,"tag":469,"props":1032,"children":1033},{},[1034],{"type":19,"value":1035},"=",{"type":13,"tag":442,"props":1037,"children":1038},{},[1039],{"type":19,"value":1040},"max",{"type":13,"tag":469,"props":1042,"children":1043},{},[1044],{"type":19,"value":1045},"⁡",{"type":13,"tag":469,"props":1047,"children":1049},{"stretchy":1048},"false",[1050],{"type":19,"value":1051},"(",{"type":13,"tag":438,"props":1053,"children":1054},{},[1055,1059],{"type":13,"tag":442,"props":1056,"children":1057},{},[1058],{"type":19,"value":446},{"type":13,"tag":434,"props":1060,"children":1061},{},[1062,1066,1070,1074],{"type":13,"tag":442,"props":1063,"children":1064},{},[1065],{"type":19,"value":21},{"type":13,"tag":442,"props":1067,"children":1068},{},[1069],{"type":19,"value":458},{"type":13,"tag":442,"props":1071,"children":1072},{},[1073],{"type":19,"value":463},{"type":13,"tag":442,"props":1075,"children":1076},{},[1077],{"type":19,"value":463},{"type":13,"tag":469,"props":1079,"children":1080},{"separator":505},[1081],{"type":19,"value":239},{"type":13,"tag":438,"props":1083,"children":1084},{},[1085,1089],{"type":13,"tag":442,"props":1086,"children":1087},{},[1088],{"type":19,"value":446},{"type":13,"tag":434,"props":1090,"children":1091},{},[1092,1096],{"type":13,"tag":442,"props":1093,"children":1094},{},[1095],{"type":19,"value":488},{"type":13,"tag":442,"props":1097,"children":1098},{},[1099],{"type":19,"value":493},{"type":13,"tag":469,"props":1101,"children":1102},{"stretchy":1048},[1103],{"type":19,"value":271},{"type":13,"tag":469,"props":1105,"children":1106},{},[1107],{"type":19,"value":473},{"type":13,"tag":1109,"props":1110,"children":1111},"mfrac",{},[1112,1118],{"type":13,"tag":1113,"props":1114,"children":1115},"mn",{},[1116],{"type":19,"value":1117},"1",{"type":13,"tag":442,"props":1119,"children":1120},{},[1121],{"type":19,"value":1122},"N",{"type":13,"tag":1124,"props":1125,"children":1126},"munderover",{},[1127,1132,1148],{"type":13,"tag":469,"props":1128,"children":1129},{},[1130],{"type":19,"value":1131},"∑",{"type":13,"tag":434,"props":1133,"children":1134},{},[1135,1140,1144],{"type":13,"tag":442,"props":1136,"children":1137},{},[1138],{"type":19,"value":1139},"i",{"type":13,"tag":469,"props":1141,"children":1142},{},[1143],{"type":19,"value":1035},{"type":13,"tag":1113,"props":1145,"children":1146},{},[1147],{"type":19,"value":1117},{"type":13,"tag":442,"props":1149,"children":1150},{},[1151],{"type":19,"value":1122},{"type":13,"tag":438,"props":1153,"children":1154},{},[1155,1159],{"type":13,"tag":442,"props":1156,"children":1157},{},[1158],{"type":19,"value":446},{"type":13,"tag":434,"props":1160,"children":1161},{},[1162,1167,1171,1175,1180,1184,1189,1194,1198],{"type":13,"tag":442,"props":1163,"children":1164},{},[1165],{"type":19,"value":1166},"n",{"type":13,"tag":442,"props":1168,"children":1169},{},[1170],{"type":19,"value":1012},{"type":13,"tag":442,"props":1172,"children":1173},{},[1174],{"type":19,"value":1017},{"type":13,"tag":442,"props":1176,"children":1177},{},[1178],{"type":19,"value":1179},"w",{"type":13,"tag":442,"props":1181,"children":1182},{},[1183],{"type":19,"value":458},{"type":13,"tag":442,"props":1185,"children":1186},{},[1187],{"type":19,"value":1188},"r",{"type":13,"tag":442,"props":1190,"children":1191},{},[1192],{"type":19,"value":1193},"k",{"type":13,"tag":469,"props":1195,"children":1196},{"separator":505},[1197],{"type":19,"value":239},{"type":13,"tag":442,"props":1199,"children":1200},{},[1201],{"type":19,"value":1139},{"type":13,"tag":495,"props":1203,"children":1204},{"encoding":497},[1205],{"type":19,"value":1206},"T_{detect} = \\max(T_{poll}, T_{fs}) + \\frac{1}{N}\\sum_{i=1}^{N} T_{network,i}",{"type":13,"tag":180,"props":1208,"children":1210},{"className":1209,"ariaHidden":505},[504],[1211,1318,1511],{"type":13,"tag":180,"props":1212,"children":1214},{"className":1213},[510],[1215,1220,1303,1308,1314],{"type":13,"tag":180,"props":1216,"children":1219},{"className":1217,"style":1218},[515],"height:0.8333em;vertical-align:-0.15em;",[],{"type":13,"tag":180,"props":1221,"children":1223},{"className":1222},[521],[1224,1229],{"type":13,"tag":180,"props":1225,"children":1227},{"className":1226,"style":527},[521,526],[1228],{"type":19,"value":446},{"type":13,"tag":180,"props":1230,"children":1232},{"className":1231},[533],[1233],{"type":13,"tag":180,"props":1234,"children":1236},{"className":1235},[538,539],[1237,1291],{"type":13,"tag":180,"props":1238,"children":1240},{"className":1239},[544],[1241,1286],{"type":13,"tag":180,"props":1242,"children":1244},{"className":1243,"style":550},[549],[1245],{"type":13,"tag":180,"props":1246,"children":1247},{"style":554},[1248,1252],{"type":13,"tag":180,"props":1249,"children":1251},{"className":1250,"style":560},[559],[],{"type":13,"tag":180,"props":1253,"children":1255},{"className":1254},[565,566,567,568],[1256],{"type":13,"tag":180,"props":1257,"children":1259},{"className":1258},[521,568],[1260,1265,1270,1275,1281],{"type":13,"tag":180,"props":1261,"children":1263},{"className":1262},[521,526,568],[1264],{"type":19,"value":1007},{"type":13,"tag":180,"props":1266,"children":1268},{"className":1267},[521,526,568],[1269],{"type":19,"value":1012},{"type":13,"tag":180,"props":1271,"children":1273},{"className":1272},[521,526,568],[1274],{"type":19,"value":1017},{"type":13,"tag":180,"props":1276,"children":1278},{"className":1277},[521,526,568],[1279],{"type":19,"value":1280},"ec",{"type":13,"tag":180,"props":1282,"children":1284},{"className":1283},[521,526,568],[1285],{"type":19,"value":1017},{"type":13,"tag":180,"props":1287,"children":1289},{"className":1288},[598],[1290],{"type":19,"value":601},{"type":13,"tag":180,"props":1292,"children":1294},{"className":1293},[544],[1295],{"type":13,"tag":180,"props":1296,"children":1299},{"className":1297,"style":1298},[549],"height:0.15em;",[1300],{"type":13,"tag":180,"props":1301,"children":1302},{},[],{"type":13,"tag":180,"props":1304,"children":1307},{"className":1305,"style":1306},[617],"margin-right:0.2778em;",[],{"type":13,"tag":180,"props":1309,"children":1312},{"className":1310},[1311],"mrel",[1313],{"type":19,"value":1035},{"type":13,"tag":180,"props":1315,"children":1317},{"className":1316,"style":1306},[617],[],{"type":13,"tag":180,"props":1319,"children":1321},{"className":1320},[510],[1322,1327,1333,1339,1415,1421,1426,1492,1498,1502,1507],{"type":13,"tag":180,"props":1323,"children":1326},{"className":1324,"style":1325},[515],"height:1.0361em;vertical-align:-0.2861em;",[],{"type":13,"tag":180,"props":1328,"children":1331},{"className":1329},[1330],"mop",[1332],{"type":19,"value":1040},{"type":13,"tag":180,"props":1334,"children":1337},{"className":1335},[1336],"mopen",[1338],{"type":19,"value":1051},{"type":13,"tag":180,"props":1340,"children":1342},{"className":1341},[521],[1343,1348],{"type":13,"tag":180,"props":1344,"children":1346},{"className":1345,"style":527},[521,526],[1347],{"type":19,"value":446},{"type":13,"tag":180,"props":1349,"children":1351},{"className":1350},[533],[1352],{"type":13,"tag":180,"props":1353,"children":1355},{"className":1354},[538,539],[1356,1404],{"type":13,"tag":180,"props":1357,"children":1359},{"className":1358},[544],[1360,1399],{"type":13,"tag":180,"props":1361,"children":1363},{"className":1362,"style":550},[549],[1364],{"type":13,"tag":180,"props":1365,"children":1366},{"style":554},[1367,1371],{"type":13,"tag":180,"props":1368,"children":1370},{"className":1369,"style":560},[559],[],{"type":13,"tag":180,"props":1372,"children":1374},{"className":1373},[565,566,567,568],[1375],{"type":13,"tag":180,"props":1376,"children":1378},{"className":1377},[521,568],[1379,1384,1389,1394],{"type":13,"tag":180,"props":1380,"children":1382},{"className":1381},[521,526,568],[1383],{"type":19,"value":21},{"type":13,"tag":180,"props":1385,"children":1387},{"className":1386},[521,526,568],[1388],{"type":19,"value":458},{"type":13,"tag":180,"props":1390,"children":1392},{"className":1391,"style":587},[521,526,568],[1393],{"type":19,"value":463},{"type":13,"tag":180,"props":1395,"children":1397},{"className":1396,"style":587},[521,526,568],[1398],{"type":19,"value":463},{"type":13,"tag":180,"props":1400,"children":1402},{"className":1401},[598],[1403],{"type":19,"value":601},{"type":13,"tag":180,"props":1405,"children":1407},{"className":1406},[544],[1408],{"type":13,"tag":180,"props":1409,"children":1411},{"className":1410,"style":609},[549],[1412],{"type":13,"tag":180,"props":1413,"children":1414},{},[],{"type":13,"tag":180,"props":1416,"children":1419},{"className":1417},[1418],"mpunct",[1420],{"type":19,"value":239},{"type":13,"tag":180,"props":1422,"children":1425},{"className":1423,"style":1424},[617],"margin-right:0.1667em;",[],{"type":13,"tag":180,"props":1427,"children":1429},{"className":1428},[521],[1430,1435],{"type":13,"tag":180,"props":1431,"children":1433},{"className":1432,"style":527},[521,526],[1434],{"type":19,"value":446},{"type":13,"tag":180,"props":1436,"children":1438},{"className":1437},[533],[1439],{"type":13,"tag":180,"props":1440,"children":1442},{"className":1441},[538,539],[1443,1481],{"type":13,"tag":180,"props":1444,"children":1446},{"className":1445},[544],[1447,1476],{"type":13,"tag":180,"props":1448,"children":1450},{"className":1449,"style":550},[549],[1451],{"type":13,"tag":180,"props":1452,"children":1453},{"style":554},[1454,1458],{"type":13,"tag":180,"props":1455,"children":1457},{"className":1456,"style":560},[559],[],{"type":13,"tag":180,"props":1459,"children":1461},{"className":1460},[565,566,567,568],[1462],{"type":13,"tag":180,"props":1463,"children":1465},{"className":1464},[521,568],[1466,1471],{"type":13,"tag":180,"props":1467,"children":1469},{"className":1468,"style":681},[521,526,568],[1470],{"type":19,"value":488},{"type":13,"tag":180,"props":1472,"children":1474},{"className":1473},[521,526,568],[1475],{"type":19,"value":493},{"type":13,"tag":180,"props":1477,"children":1479},{"className":1478},[598],[1480],{"type":19,"value":601},{"type":13,"tag":180,"props":1482,"children":1484},{"className":1483},[544],[1485],{"type":13,"tag":180,"props":1486,"children":1488},{"className":1487,"style":609},[549],[1489],{"type":13,"tag":180,"props":1490,"children":1491},{},[],{"type":13,"tag":180,"props":1493,"children":1496},{"className":1494},[1495],"mclose",[1497],{"type":19,"value":271},{"type":13,"tag":180,"props":1499,"children":1501},{"className":1500,"style":618},[617],[],{"type":13,"tag":180,"props":1503,"children":1505},{"className":1504},[623],[1506],{"type":19,"value":473},{"type":13,"tag":180,"props":1508,"children":1510},{"className":1509,"style":618},[617],[],{"type":13,"tag":180,"props":1512,"children":1514},{"className":1513},[510],[1515,1520,1617,1621,1727,1731],{"type":13,"tag":180,"props":1516,"children":1519},{"className":1517,"style":1518},[515],"height:3.106em;vertical-align:-1.2777em;",[],{"type":13,"tag":180,"props":1521,"children":1523},{"className":1522},[521],[1524,1529,1613],{"type":13,"tag":180,"props":1525,"children":1528},{"className":1526},[1336,1527],"nulldelimiter",[],{"type":13,"tag":180,"props":1530,"children":1532},{"className":1531},[1109],[1533],{"type":13,"tag":180,"props":1534,"children":1536},{"className":1535},[538,539],[1537,1601],{"type":13,"tag":180,"props":1538,"children":1540},{"className":1539},[544],[1541,1596],{"type":13,"tag":180,"props":1542,"children":1545},{"className":1543,"style":1544},[549],"height:1.3214em;",[1546,1565,1579],{"type":13,"tag":180,"props":1547,"children":1549},{"style":1548},"top:-2.314em;",[1550,1555],{"type":13,"tag":180,"props":1551,"children":1554},{"className":1552,"style":1553},[559],"height:3em;",[],{"type":13,"tag":180,"props":1556,"children":1558},{"className":1557},[521],[1559],{"type":13,"tag":180,"props":1560,"children":1563},{"className":1561,"style":1562},[521,526],"margin-right:0.109em;",[1564],{"type":19,"value":1122},{"type":13,"tag":180,"props":1566,"children":1568},{"style":1567},"top:-3.23em;",[1569,1573],{"type":13,"tag":180,"props":1570,"children":1572},{"className":1571,"style":1553},[559],[],{"type":13,"tag":180,"props":1574,"children":1578},{"className":1575,"style":1577},[1576],"frac-line","border-bottom-width:0.04em;",[],{"type":13,"tag":180,"props":1580,"children":1582},{"style":1581},"top:-3.677em;",[1583,1587],{"type":13,"tag":180,"props":1584,"children":1586},{"className":1585,"style":1553},[559],[],{"type":13,"tag":180,"props":1588,"children":1590},{"className":1589},[521],[1591],{"type":13,"tag":180,"props":1592,"children":1594},{"className":1593},[521],[1595],{"type":19,"value":1117},{"type":13,"tag":180,"props":1597,"children":1599},{"className":1598},[598],[1600],{"type":19,"value":601},{"type":13,"tag":180,"props":1602,"children":1604},{"className":1603},[544],[1605],{"type":13,"tag":180,"props":1606,"children":1609},{"className":1607,"style":1608},[549],"height:0.686em;",[1610],{"type":13,"tag":180,"props":1611,"children":1612},{},[],{"type":13,"tag":180,"props":1614,"children":1616},{"className":1615},[1495,1527],[],{"type":13,"tag":180,"props":1618,"children":1620},{"className":1619,"style":1424},[617],[],{"type":13,"tag":180,"props":1622,"children":1625},{"className":1623},[1330,1624],"op-limits",[1626],{"type":13,"tag":180,"props":1627,"children":1629},{"className":1628},[538,539],[1630,1715],{"type":13,"tag":180,"props":1631,"children":1633},{"className":1632},[544],[1634,1710],{"type":13,"tag":180,"props":1635,"children":1638},{"className":1636,"style":1637},[549],"height:1.8283em;",[1639,1671,1689],{"type":13,"tag":180,"props":1640,"children":1642},{"style":1641},"top:-1.8723em;margin-left:0em;",[1643,1648],{"type":13,"tag":180,"props":1644,"children":1647},{"className":1645,"style":1646},[559],"height:3.05em;",[],{"type":13,"tag":180,"props":1649,"children":1651},{"className":1650},[565,566,567,568],[1652],{"type":13,"tag":180,"props":1653,"children":1655},{"className":1654},[521,568],[1656,1661,1666],{"type":13,"tag":180,"props":1657,"children":1659},{"className":1658},[521,526,568],[1660],{"type":19,"value":1139},{"type":13,"tag":180,"props":1662,"children":1664},{"className":1663},[1311,568],[1665],{"type":19,"value":1035},{"type":13,"tag":180,"props":1667,"children":1669},{"className":1668},[521,568],[1670],{"type":19,"value":1117},{"type":13,"tag":180,"props":1672,"children":1674},{"style":1673},"top:-3.05em;",[1675,1679],{"type":13,"tag":180,"props":1676,"children":1678},{"className":1677,"style":1646},[559],[],{"type":13,"tag":180,"props":1680,"children":1681},{},[1682],{"type":13,"tag":180,"props":1683,"children":1687},{"className":1684},[1330,1685,1686],"op-symbol","large-op",[1688],{"type":19,"value":1131},{"type":13,"tag":180,"props":1690,"children":1692},{"style":1691},"top:-4.3em;margin-left:0em;",[1693,1697],{"type":13,"tag":180,"props":1694,"children":1696},{"className":1695,"style":1646},[559],[],{"type":13,"tag":180,"props":1698,"children":1700},{"className":1699},[565,566,567,568],[1701],{"type":13,"tag":180,"props":1702,"children":1704},{"className":1703},[521,568],[1705],{"type":13,"tag":180,"props":1706,"children":1708},{"className":1707,"style":1562},[521,526,568],[1709],{"type":19,"value":1122},{"type":13,"tag":180,"props":1711,"children":1713},{"className":1712},[598],[1714],{"type":19,"value":601},{"type":13,"tag":180,"props":1716,"children":1718},{"className":1717},[544],[1719],{"type":13,"tag":180,"props":1720,"children":1723},{"className":1721,"style":1722},[549],"height:1.2777em;",[1724],{"type":13,"tag":180,"props":1725,"children":1726},{},[],{"type":13,"tag":180,"props":1728,"children":1730},{"className":1729,"style":1424},[617],[],{"type":13,"tag":180,"props":1732,"children":1734},{"className":1733},[521],[1735,1740],{"type":13,"tag":180,"props":1736,"children":1738},{"className":1737,"style":527},[521,526],[1739],{"type":19,"value":446},{"type":13,"tag":180,"props":1741,"children":1743},{"className":1742},[533],[1744],{"type":13,"tag":180,"props":1745,"children":1747},{"className":1746},[538,539],[1748,1816],{"type":13,"tag":180,"props":1749,"children":1751},{"className":1750},[544],[1752,1811],{"type":13,"tag":180,"props":1753,"children":1755},{"className":1754,"style":550},[549],[1756],{"type":13,"tag":180,"props":1757,"children":1758},{"style":554},[1759,1763],{"type":13,"tag":180,"props":1760,"children":1762},{"className":1761,"style":560},[559],[],{"type":13,"tag":180,"props":1764,"children":1766},{"className":1765},[565,566,567,568],[1767],{"type":13,"tag":180,"props":1768,"children":1770},{"className":1769},[521,568],[1771,1776,1781,1788,1795,1801,1806],{"type":13,"tag":180,"props":1772,"children":1774},{"className":1773},[521,526,568],[1775],{"type":19,"value":1166},{"type":13,"tag":180,"props":1777,"children":1779},{"className":1778},[521,526,568],[1780],{"type":19,"value":1012},{"type":13,"tag":180,"props":1782,"children":1785},{"className":1783,"style":1784},[521,526,568],"margin-right:0.0269em;",[1786],{"type":19,"value":1787},"tw",{"type":13,"tag":180,"props":1789,"children":1792},{"className":1790,"style":1791},[521,526,568],"margin-right:0.0278em;",[1793],{"type":19,"value":1794},"or",{"type":13,"tag":180,"props":1796,"children":1799},{"className":1797,"style":1798},[521,526,568],"margin-right:0.0315em;",[1800],{"type":19,"value":1193},{"type":13,"tag":180,"props":1802,"children":1804},{"className":1803},[1418,568],[1805],{"type":19,"value":239},{"type":13,"tag":180,"props":1807,"children":1809},{"className":1808},[521,526,568],[1810],{"type":19,"value":1139},{"type":13,"tag":180,"props":1812,"children":1814},{"className":1813},[598],[1815],{"type":19,"value":601},{"type":13,"tag":180,"props":1817,"children":1819},{"className":1818},[544],[1820],{"type":13,"tag":180,"props":1821,"children":1823},{"className":1822,"style":609},[549],[1824],{"type":13,"tag":180,"props":1825,"children":1826},{},[],{"type":13,"tag":21,"props":1828,"children":1829},{},[1830,1832,1838,1840,1846,1848,1854],{"type":19,"value":1831},"Math renders via ",{"type":13,"tag":83,"props":1833,"children":1835},{"className":1834},[],[1836],{"type":19,"value":1837},"remark-math",{"type":19,"value":1839}," + ",{"type":13,"tag":83,"props":1841,"children":1843},{"className":1842},[],[1844],{"type":19,"value":1845},"rehype-katex",{"type":19,"value":1847}," in the MDC\npipeline; KaTeX CSS is imported globally in ",{"type":13,"tag":83,"props":1849,"children":1851},{"className":1850},[],[1852],{"type":19,"value":1853},"globals.css",{"type":19,"value":1855},".",{"type":13,"tag":1857,"props":1858,"children":1859},"style",{},[1860],{"type":19,"value":1861},"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);}",{"title":174,"searchDepth":193,"depth":193,"links":1863},[1864,1865,1866],{"id":39,"depth":193,"text":42},{"id":164,"depth":193,"text":167},{"id":406,"depth":193,"text":409},"\u003Cpre class=\"shiki github-light\" style=\"background-color:#fff;color:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">---\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A\">title\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62\">How the agent watcher works\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A\">date\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\">: \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5\">2026-04-22\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A\">author\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62\">R. Chen\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">---\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;font-weight:bold\"># How the agent watcher works\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">Landscape's file watcher is the long-running process on each agent host\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">that detects file events (create \u002F modify \u002F delete \u002F move) and ships\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">them to the central index.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::tux-alert{variant=\"compliance\" title=\"ITAR-tagged paths\"}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">This watcher must run with a tier-3 token when watching corpora that\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">contain ITAR-marked records. The default agent token is tier-1 and\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">will refuse the scope.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;font-weight:bold\">## Event types\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">The watcher emits four event types upstream:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">| Type | Triggers when… |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">|---|---|\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">| \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5\">`create`\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\"> | A new inode appears in a watched root |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">| \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5\">`modify`\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\"> | An existing inode's content or mtime changes |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">| \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5\">`delete`\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\"> | An inode disappears (soft-delete with 30d retention) |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">| \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5\">`move`\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\">  | An inode's path changes — single event, never delete+create |\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::tux-callout{kind=\"stat\"}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">Move detection uses inode tracking on POSIX and SHA-256 correlation\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">on Windows. Either way, a single \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5\">`move`\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\"> event is emitted upstream\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">rather than a delete+create pair.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;font-weight:bold\">## Implementation note\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">```ts\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F Coalesce events over a 250ms window to avoid shipping every\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">\u002F\u002F keystroke during text-editor saves.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49\">const\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5\"> debounced\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1\"> debounce\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\">(events, { window: \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5\">250\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\"> });\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">```\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">Run it locally:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">```bash\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1\">$\u003C\u002Fspan>\u003Cspan style=\"color:#032F62\"> landscape\u003C\u002Fspan>\u003Cspan style=\"color:#032F62\"> agent\u003C\u002Fspan>\u003Cspan style=\"color:#032F62\"> watch\u003C\u002Fspan>\u003Cspan style=\"color:#032F62\"> \u002Fresearch\u002Fgrants\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5\"> --root=local\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">[12:14:08] watcher: 4 paths registered\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">[12:14:09] heartbeat: ok (\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1\">latency\u003C\u002Fspan>\u003Cspan style=\"color:#032F62\"> 38ms\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">```\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::tux-alert{variant=\"tip\" title=\"Heartbeat cadence\"}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">The default heartbeat is every 60 seconds. Override with\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5\">`--heartbeat=30s`\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\"> for tighter monitoring during a deploy or rolling\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">restart.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;font-weight:bold\">## Math\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">Inline equations flow with surrounding prose — the watcher's\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">detection-latency budget is bounded by $T_{poll} + T_{fs}$, where\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">$T_{poll}$ is the kernel poll interval and $T_{fs}$ is the filesystem\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">event-emission delay.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">Display equations get their own block:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">$$\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">T_{detect} = \\max(T_{poll}, T_{fs}) + \\frac{1}{N}\\sum_{i=1}^{N} T_{network,i}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">$$\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">Math renders via \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5\">`remark-math`\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\"> + \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5\">`rehype-katex`\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\"> in the MDC\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">pipeline; KaTeX CSS is imported globally in \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5\">`globals.css`\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\">.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki github-light\" style=\"background-color:#fff;color:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;font-weight:bold\"># Inline component (default slot)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::tux-alert{variant=\"warning\" title=\"Be careful\"}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">Body content goes here.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;font-weight:bold\"># With a named slot\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::tux-cta{tone=\"maroon\" title=\"Ship it\" dek=\"Two clicks.\"}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">  ::tux-button{intent=\"primary\"}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">  Start scan\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">  ::\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;font-weight:bold\"># Self-closing (no body)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::tux-section-header\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">Storage overview\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;font-weight:bold\"># Inline span (one-line components)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">A :badge[\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;text-decoration:underline\">ITAR\u003C\u002Fspan>\u003Cspan style=\"color:#24292E\">]{kind=\"tag\"} flag here.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;font-weight:bold\"># Booleans + numbers — note the colon prefix\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::tux-pagination{:total=\"412\" :page-size=\"20\" :show-status=\"true\"}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">::\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",1788285290651]