[{"data":1,"prerenderedAt":961},["ShallowReactive",2],{"navigation_docs":3,"-monorepos-orphan-detection":302,"-monorepos-orphan-detection-surround":958},[4,18,32,53,74,103,120,133,147,156],{"title":5,"path":6,"stem":7,"children":8,"page":17},"Introduction","\u002Fintroduction","1.introduction",[9,13],{"title":10,"path":11,"stem":12},"Why the-i18n-kit","\u002Fintroduction\u002Fwhy","1.introduction\u002F1.why",{"title":14,"path":15,"stem":16},"Architecture","\u002Fintroduction\u002Farchitecture","1.introduction\u002F2.architecture",false,{"title":19,"icon":20,"path":21,"stem":22,"children":23,"page":17},"ESLint Plugin","i-lucide-shield-check","\u002Feslint-plugin","10.eslint-plugin",[24,28],{"title":25,"path":26,"stem":27},"Install and Rules","\u002Feslint-plugin\u002Finstall-and-rules","10.eslint-plugin\u002F1.install-and-rules",{"title":29,"path":30,"stem":31},"Layer-Aware Missing Keys","\u002Feslint-plugin\u002Flayer-aware","10.eslint-plugin\u002F2.layer-aware",{"title":33,"path":34,"stem":35,"children":36,"page":17},"Getting Started","\u002Fgetting-started","2.getting-started",[37,41,45,49],{"title":38,"path":39,"stem":40},"Set Up the MCP Server","\u002Fgetting-started\u002Fagent-setup","2.getting-started\u002F1.agent-setup",{"title":42,"path":43,"stem":44},"From an Unconfigured Repository to a Translated One","\u002Fgetting-started\u002Fcold-start","2.getting-started\u002F2.cold-start",{"title":46,"path":47,"stem":48},"Agent Contract","\u002Fgetting-started\u002Fagent-contract","2.getting-started\u002F3.agent-contract",{"title":50,"path":51,"stem":52},"Harness Integrations","\u002Fgetting-started\u002Fharness-integrations","2.getting-started\u002F4.harness-integrations",{"title":54,"path":55,"stem":56,"children":57,"page":17},"Monorepos","\u002Fmonorepos","3.monorepos",[58,62,66,70],{"title":59,"path":60,"stem":61},"Layers and the Consumer Graph","\u002Fmonorepos\u002Flayers-and-consumer-graph","3.monorepos\u002F1.layers-and-consumer-graph",{"title":63,"path":64,"stem":65},"Shared Layers and Duplicates","\u002Fmonorepos\u002Fduplicates-and-shared-layers","3.monorepos\u002F2.duplicates-and-shared-layers",{"title":67,"path":68,"stem":69},"Misplaced Usages","\u002Fmonorepos\u002Fmisplaced-usages","3.monorepos\u002F3.misplaced-usages",{"title":71,"path":72,"stem":73},"Orphan Detection","\u002Fmonorepos\u002Forphan-detection","3.monorepos\u002F4.orphan-detection",{"title":75,"path":76,"stem":77,"children":78,"page":17},"Frameworks","\u002Fframeworks","4.frameworks",[79,83,87,91,95,99],{"title":80,"path":81,"stem":82},"Detection","\u002Fframeworks\u002Fdetection","4.frameworks\u002F1.detection",{"title":84,"path":85,"stem":86},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F2.nuxt",{"title":88,"path":89,"stem":90},"Laravel","\u002Fframeworks\u002Flaravel","4.frameworks\u002F3.laravel",{"title":92,"path":93,"stem":94},"Vue","\u002Fframeworks\u002Fvue","4.frameworks\u002F4.vue",{"title":96,"path":97,"stem":98},"React \u002F Next.js","\u002Fframeworks\u002Freact-next","4.frameworks\u002F5.react-next",{"title":100,"path":101,"stem":102},"Generic","\u002Fframeworks\u002Fgeneric","4.frameworks\u002F6.generic",{"title":104,"path":105,"stem":106,"children":107,"page":17},"Configuration","\u002Fconfiguration","5.configuration",[108,112,116],{"title":109,"path":110,"stem":111},"Where Configuration Lives","\u002Fconfiguration\u002Fwhere-config-lives","5.configuration\u002F1.where-config-lives",{"title":113,"path":114,"stem":115},"Precedence and Locale References","\u002Fconfiguration\u002Fprecedence-and-locale-refs","5.configuration\u002F2.precedence-and-locale-refs",{"title":117,"path":118,"stem":119},"Configuration Fields","\u002Fconfiguration\u002Freference","5.configuration\u002F4.reference",{"title":121,"path":122,"stem":123,"children":124,"page":17},"Nuxt Module","\u002Fnuxt-module","6.nuxt-module",[125,129],{"title":126,"path":127,"stem":128},"Install and Setup","\u002Fnuxt-module\u002Finstall","6.nuxt-module\u002F1.install",{"title":130,"path":131,"stem":132},"The Artifact and Options","\u002Fnuxt-module\u002Fartifact-and-options","6.nuxt-module\u002F2.artifact-and-options",{"title":134,"icon":135,"path":136,"stem":137,"children":138,"page":17},"CI\u002FCD","i-lucide-git-pull-request","\u002Fci-cd","7.ci-cd",[139,143],{"title":140,"path":141,"stem":142},"GitHub Actions","\u002Fci-cd\u002Fgithub-actions","7.ci-cd\u002F1.github-actions",{"title":144,"path":145,"stem":146},"GitLab CI","\u002Fci-cd\u002Fgitlab-ci","7.ci-cd\u002F2.gitlab-ci",{"title":148,"path":149,"stem":150,"children":151,"page":17},"Concepts","\u002Fconcepts","8.concepts",[152],{"title":153,"path":154,"stem":155},"Translation Modes","\u002Fconcepts\u002Ftranslation-modes","8.concepts\u002F1.translation-modes",{"title":157,"path":158,"stem":159,"children":160,"page":-1},"Reference","\u002Freference","9.reference",[161,163,229,294,298],{"title":157,"path":158,"stem":162},"9.reference\u002Findex",{"title":164,"path":165,"stem":166,"children":167,"page":-1},"CLI Commands","\u002Freference\u002Fcli","9.reference\u002F1.cli\u002Findex",[168,169,173,177,181,185,189,193,197,201,205,209,213,217,221,225],{"title":164,"path":165,"stem":166},{"title":170,"path":171,"stem":172},"check","\u002Freference\u002Fcli\u002Fcheck","9.reference\u002F1.cli\u002Fcheck",{"title":174,"path":175,"stem":176},"discover","\u002Freference\u002Fcli\u002Fdiscover","9.reference\u002F1.cli\u002Fdiscover",{"title":178,"path":179,"stem":180},"find-duplicates","\u002Freference\u002Fcli\u002Ffind-duplicates","9.reference\u002F1.cli\u002Ffind-duplicates",{"title":182,"path":183,"stem":184},"get","\u002Freference\u002Fcli\u002Fget","9.reference\u002F1.cli\u002Fget",{"title":186,"path":187,"stem":188},"init","\u002Freference\u002Fcli\u002Finit","9.reference\u002F1.cli\u002Finit",{"title":190,"path":191,"stem":192},"missing","\u002Freference\u002Fcli\u002Fmissing","9.reference\u002F1.cli\u002Fmissing",{"title":194,"path":195,"stem":196},"move","\u002Freference\u002Fcli\u002Fmove","9.reference\u002F1.cli\u002Fmove",{"title":198,"path":199,"stem":200},"orphans","\u002Freference\u002Fcli\u002Forphans","9.reference\u002F1.cli\u002Forphans",{"title":202,"path":203,"stem":204},"remove","\u002Freference\u002Fcli\u002Fremove","9.reference\u002F1.cli\u002Fremove",{"title":206,"path":207,"stem":208},"scaffold","\u002Freference\u002Fcli\u002Fscaffold","9.reference\u002F1.cli\u002Fscaffold",{"title":210,"path":211,"stem":212},"search","\u002Freference\u002Fcli\u002Fsearch","9.reference\u002F1.cli\u002Fsearch",{"title":214,"path":215,"stem":216},"status","\u002Freference\u002Fcli\u002Fstatus","9.reference\u002F1.cli\u002Fstatus",{"title":218,"path":219,"stem":220},"translate","\u002Freference\u002Fcli\u002Ftranslate","9.reference\u002F1.cli\u002Ftranslate",{"title":222,"path":223,"stem":224},"translate-key","\u002Freference\u002Fcli\u002Ftranslate-key","9.reference\u002F1.cli\u002Ftranslate-key",{"title":226,"path":227,"stem":228},"write","\u002Freference\u002Fcli\u002Fwrite","9.reference\u002F1.cli\u002Fwrite",{"title":230,"path":231,"stem":232,"children":233,"page":-1},"MCP Tools","\u002Freference\u002Fmcp","9.reference\u002F2.mcp\u002Findex",[234,235,238,242,246,250,254,258,262,266,270,274,278,282,286,290],{"title":230,"path":231,"stem":232},{"title":174,"path":236,"stem":237},"\u002Freference\u002Fmcp\u002Fdiscover","9.reference\u002F2.mcp\u002Fdiscover",{"title":239,"path":240,"stem":241},"find_duplicate_keys","\u002Freference\u002Fmcp\u002Ffind_duplicate_keys","9.reference\u002F2.mcp\u002Ffind_duplicate_keys",{"title":243,"path":244,"stem":245},"find_orphan_keys","\u002Freference\u002Fmcp\u002Ffind_orphan_keys","9.reference\u002F2.mcp\u002Ffind_orphan_keys",{"title":247,"path":248,"stem":249},"find_undefined_keys","\u002Freference\u002Fmcp\u002Ffind_undefined_keys","9.reference\u002F2.mcp\u002Ffind_undefined_keys",{"title":251,"path":252,"stem":253},"get_missing_translations","\u002Freference\u002Fmcp\u002Fget_missing_translations","9.reference\u002F2.mcp\u002Fget_missing_translations",{"title":255,"path":256,"stem":257},"get_translation_status","\u002Freference\u002Fmcp\u002Fget_translation_status","9.reference\u002F2.mcp\u002Fget_translation_status",{"title":259,"path":260,"stem":261},"get_translations","\u002Freference\u002Fmcp\u002Fget_translations","9.reference\u002F2.mcp\u002Fget_translations",{"title":263,"path":264,"stem":265},"list_namespaces","\u002Freference\u002Fmcp\u002Flist_namespaces","9.reference\u002F2.mcp\u002Flist_namespaces",{"title":267,"path":268,"stem":269},"move_translation_key","\u002Freference\u002Fmcp\u002Fmove_translation_key","9.reference\u002F2.mcp\u002Fmove_translation_key",{"title":271,"path":272,"stem":273},"remove_translations","\u002Freference\u002Fmcp\u002Fremove_translations","9.reference\u002F2.mcp\u002Fremove_translations",{"title":275,"path":276,"stem":277},"scaffold_locale","\u002Freference\u002Fmcp\u002Fscaffold_locale","9.reference\u002F2.mcp\u002Fscaffold_locale",{"title":279,"path":280,"stem":281},"search_translations","\u002Freference\u002Fmcp\u002Fsearch_translations","9.reference\u002F2.mcp\u002Fsearch_translations",{"title":283,"path":284,"stem":285},"translate_key","\u002Freference\u002Fmcp\u002Ftranslate_key","9.reference\u002F2.mcp\u002Ftranslate_key",{"title":287,"path":288,"stem":289},"translate_missing","\u002Freference\u002Fmcp\u002Ftranslate_missing","9.reference\u002F2.mcp\u002Ftranslate_missing",{"title":291,"path":292,"stem":293},"write_translations","\u002Freference\u002Fmcp\u002Fwrite_translations","9.reference\u002F2.mcp\u002Fwrite_translations",{"title":295,"path":296,"stem":297},"GitHub Action","\u002Freference\u002Faction","9.reference\u002F3.action",{"title":299,"path":300,"stem":301},"Programmatic API","\u002Freference\u002Fprogrammatic-api","9.reference\u002F4.programmatic-api",{"id":303,"title":71,"body":304,"description":339,"extension":952,"links":953,"meta":954,"navigation":668,"path":72,"seo":955,"stem":73,"__hash__":957},"docs\u002F3.monorepos\u002F4.orphan-detection.md",{"type":305,"value":306,"toc":945},"minimark",[307,333,355,360,489,497,501,508,571,598,602,619,623,626,755,784,788,795,856,862,922,932,941],[308,309,310,311,314,315,317,318,321,322,325,326,328,329,332],"p",{},"The ",[312,313,198],"code",{}," and ",[312,316,170],{}," commands share one scanner. It parses your source, and\na key counts as used only where the call it sits in resolves to a translation\nfunction: ",[312,319,320],{},"emit('save')"," is not a usage, and a ",[312,323,324],{},"t"," you renamed to ",[312,327,218],{},"\nstill is. A file the parser cannot read falls back to pattern matching, which\nmatches call shapes by name instead; ",[312,330,331],{},"summary.filesDeclined"," counts those files.\nWhat the scanner sees decides which keys are safe to delete.",[334,335,340],"pre",{"className":336,"code":337,"language":338,"meta":339,"style":339},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","the-i18n-cli orphans\n","bash","",[312,341,342],{"__ignoreMap":339},[343,344,347,351],"span",{"class":345,"line":346},"line",1,[343,348,350],{"class":349},"sBMFI","the-i18n-cli",[343,352,354],{"class":353},"sfazB"," orphans\n",[356,357,359],"h2",{"id":358},"evidence-it-recognizes","Evidence It Recognizes",[361,362,363,379],"table",{},[364,365,366],"thead",{},[367,368,369,373,376],"tr",{},[370,371,372],"th",{},"Class",[370,374,375],{},"Example",[370,377,378],{},"Effect",[380,381,382,403,420,437,459,475],"tbody",{},[367,383,384,388,400],{},[385,386,387],"td",{},"Static keys",[385,389,390,393,394,393,397],{},[312,391,392],{},"t('a.b.c')",", ",[312,395,396],{},"$te('a.b')",[312,398,399],{},"__('a.b')",[385,401,402],{},"Exact match",[367,404,405,408,413],{},[385,406,407],{},"Template patterns",[385,409,410],{},[312,411,412],{},"t(`a.b.${x}`)",[385,414,415,416,419],{},"Keys matching ",[312,417,418],{},"a.b.\u003Cone segment>"," count as used",[367,421,422,425,434],{},[385,423,424],{},"Same-file const prefixes",[385,426,427,430,431],{},[312,428,429],{},"const base = 'a.b'"," then ",[312,432,433],{},"t(`${base}.title`)",[385,435,436],{},"Resolved to the exact key",[367,438,439,442,447],{},[385,440,441],{},"Unresolved variable segments",[385,443,444],{},[312,445,446],{},"t(`${somePath}.title`)",[385,448,449,450,454,455,458],{},"Conservatively matches ",[451,452,453],"strong",{},"any"," ",[312,456,457],{},"*.title"," key",[367,460,461,464,472],{},[385,462,463],{},"Concatenated prefixes",[385,465,466,393,469],{},[312,467,468],{},"'a.b.' + x",[312,470,471],{},"x + '.label'",[385,473,474],{},"Pattern-matched like templates",[367,476,477,480,486],{},[385,478,479],{},"Multiline calls",[385,481,482,483],{},"The prefix on a different line from ",[312,484,485],{},"t(",[385,487,488],{},"Caught by a bare-string fallback",[308,490,491,492,496],{},"Usage is then scoped: a key in a shared layer counts as used only from apps that\nconsume that layer. See\n",[493,494,495],"a",{"href":60},"layers and the consumer graph",".",[356,498,500],{"id":499},"the-buckets","The Buckets",[308,502,503,504,507],{},"Only ",[312,505,506],{},"orphanKeys"," is ever removed. Everything else is protective:",[361,509,510,520],{},[364,511,512],{},[367,513,514,517],{},[370,515,516],{},"Field",[370,518,519],{},"Means",[380,521,522,531,541,551,561],{},[367,523,524,528],{},[385,525,526],{},[312,527,506],{},[385,529,530],{},"No evidence of use in any consuming app — safe to remove",[367,532,533,538],{},[385,534,535],{},[312,536,537],{},"uncertainKeys",[385,539,540],{},"Evidence is ambiguous, such as an existence-check-only probe — never removed",[367,542,543,548],{},[385,544,545],{},[312,546,547],{},"candidateOnlyKeys",[385,549,550],{},"Kept alive only by a dotted string that is not a call — not orphans, but where dead references hide",[367,552,553,558],{},[385,554,555],{},[312,556,557],{},"misplacedUsages",[385,559,560],{},"Used only from non-consuming apps — never removed",[367,562,563,568],{},[385,564,565],{},[312,566,567],{},"dynamicKeys",[385,569,570],{},"The dynamic expressions the scan found, with file and line",[308,572,573,574,578,579,582,583,314,586,589,590,593,594,597],{},"A key that ",[575,576,577],"em",{},"could"," be produced by a template pattern, a concatenated prefix or an\nambiguous probe counts as used and is left alone; ",[312,580,581],{},"summary.dynamicMatchedCount",",\n",[312,584,585],{},"summary.ignoredCount",[312,587,588],{},"summary.declaredCount"," say how many were protected\nthat way, by ",[312,591,592],{},"orphanScan.ignorePatterns"," and by a declared namespace. The run\nreports; ",[312,595,596],{},"--remove"," deletes.",[356,599,601],{"id":600},"extracting-undefined-keys","Extracting Undefined Keys",[308,603,604,607,608,611,612,615,616,496],{},[312,605,606],{},"the-i18n-cli check --write"," adds every undefined key to a locale file as an\nempty string, in the default locale only, and never overwrites a value already\nthere. The keys land in the layer the using code resolves against; where that is\nmore than one layer, the run refuses and asks for ",[312,609,610],{},"--layer \u003Cname>",". A written\nkey has a definition and is no longer undefined, so a run that wrote all of them\nexits ",[312,613,614],{},"0"," and one with findings left over still exits ",[312,617,618],{},"2",[356,620,622],{"id":621},"declared-namespaces","Declared Namespaces",[308,624,625],{},"Some keys exist by contract rather than by a call site: a backend sends the key\nname, a call keys them by runtime data, a registry defines the set. The scanner\nfinds no reference and reports them as orphans. Declare the pattern and what\nkeeps it alive:",[334,627,632],{"className":628,"code":629,"filename":630,"language":631,"meta":339,"style":339},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineI18nKitConfig } from '@the-i18n-kit\u002Fcli\u002Fconfig'\n\nexport default defineI18nKitConfig({\n  declaredNamespaces: [\n    { pattern: 'views.defaults.**', reason: 'sent by bookings-api as name_key' },\n  ],\n})\n","i18n-kit.config.ts","ts",[312,633,634,663,670,688,701,738,746],{"__ignoreMap":339},[343,635,636,640,644,648,651,654,657,660],{"class":345,"line":346},[343,637,639],{"class":638},"s7zQu","import",[343,641,643],{"class":642},"sMK4o"," {",[343,645,647],{"class":646},"sTEyZ"," defineI18nKitConfig",[343,649,650],{"class":642}," }",[343,652,653],{"class":638}," from",[343,655,656],{"class":642}," '",[343,658,659],{"class":353},"@the-i18n-kit\u002Fcli\u002Fconfig",[343,661,662],{"class":642},"'\n",[343,664,666],{"class":345,"line":665},2,[343,667,669],{"emptyLinePlaceholder":668},true,"\n",[343,671,673,676,679,682,685],{"class":345,"line":672},3,[343,674,675],{"class":638},"export",[343,677,678],{"class":638}," default",[343,680,647],{"class":681},"s2Zo4",[343,683,684],{"class":646},"(",[343,686,687],{"class":642},"{\n",[343,689,691,695,698],{"class":345,"line":690},4,[343,692,694],{"class":693},"swJcz","  declaredNamespaces",[343,696,697],{"class":642},":",[343,699,700],{"class":646}," [\n",[343,702,704,707,710,712,714,717,720,723,726,728,730,733,735],{"class":345,"line":703},5,[343,705,706],{"class":642},"    {",[343,708,709],{"class":693}," pattern",[343,711,697],{"class":642},[343,713,656],{"class":642},[343,715,716],{"class":353},"views.defaults.**",[343,718,719],{"class":642},"'",[343,721,722],{"class":642},",",[343,724,725],{"class":693}," reason",[343,727,697],{"class":642},[343,729,656],{"class":642},[343,731,732],{"class":353},"sent by bookings-api as name_key",[343,734,719],{"class":642},[343,736,737],{"class":642}," },\n",[343,739,741,744],{"class":345,"line":740},6,[343,742,743],{"class":646},"  ]",[343,745,582],{"class":642},[343,747,749,752],{"class":345,"line":748},7,[343,750,751],{"class":642},"}",[343,753,754],{"class":646},")\n",[308,756,757,758,761,762,764,765,768,769,772,773,776,777,780,781,783],{},"Declared keys are never orphans, never removed, and never written by\n",[312,759,760],{},"check --write",", in every layer. ",[312,763,198],{}," lists each declaration with the keys\nit covers under ",[312,766,767],{},"declaredNamespaces","; one with an empty ",[312,770,771],{},"matchedKeys"," covers\nnothing in the catalog. The ",[493,774,775],{"href":26},"ESLint plugin","\nrequires an ",[312,778,779],{},"\u002F\u002F i18n-namespace: views.defaults.**"," comment on a runtime-keyed\ncall and checks the pattern against this config. ",[312,782,592],{},",\nkeyed by layer, suppresses the rest — prefixes held in cross-file constants or\nobject properties, which widen to suffix patterns rather than resolve.",[356,785,787],{"id":786},"anchor-dynamic-keys-do-not-avoid-them","Anchor Dynamic Keys, Do Not Avoid Them",[308,789,790,791,794],{},"Dynamic keys are tracked and are often the right design. What matters is that the\n",[575,792,793],{},"namespace"," stays literal at the call site:",[334,796,798],{"className":628,"code":797,"language":631,"meta":339,"style":339},"t(`${prefix}.title`)                          \u002F\u002F widens to any key ending .title\nt(`components.integrations.${type}.title`)    \u002F\u002F one segment under a known namespace\n",[312,799,800,827],{"__ignoreMap":339},[343,801,802,804,806,809,812,814,817,820,823],{"class":345,"line":346},[343,803,324],{"class":681},[343,805,684],{"class":646},[343,807,808],{"class":642},"`${",[343,810,811],{"class":646},"prefix",[343,813,751],{"class":642},[343,815,816],{"class":353},".title",[343,818,819],{"class":642},"`",[343,821,822],{"class":646},")                          ",[343,824,826],{"class":825},"sHwdD","\u002F\u002F widens to any key ending .title\n",[343,828,829,831,833,835,838,841,844,846,848,850,853],{"class":345,"line":665},[343,830,324],{"class":681},[343,832,684],{"class":646},[343,834,819],{"class":642},[343,836,837],{"class":353},"components.integrations.",[343,839,840],{"class":642},"${",[343,842,843],{"class":646},"type",[343,845,751],{"class":642},[343,847,816],{"class":353},[343,849,819],{"class":642},[343,851,852],{"class":646},")    ",[343,854,855],{"class":825},"\u002F\u002F one segment under a known namespace\n",[308,857,858,859,861],{},"Both count as used, but the first suppresses every ",[312,860,816],{}," key in the project —\nkeys the scan can then no longer audit. A literal leading segment costs nothing\nand keeps the report specific. Where the set of keys is closed, a map of literals\nis the fully static alternative:",[334,863,865],{"className":628,"code":864,"language":631,"meta":339,"style":339},"const KEYS = { draft: 'x.status.draft', sent: 'x.status.sent' } as const\nt(KEYS[state])\n",[312,866,867,915],{"__ignoreMap":339},[343,868,869,873,876,879,881,884,886,888,891,893,895,898,900,902,905,907,909,912],{"class":345,"line":346},[343,870,872],{"class":871},"spNyl","const",[343,874,875],{"class":646}," KEYS ",[343,877,878],{"class":642},"=",[343,880,643],{"class":642},[343,882,883],{"class":693}," draft",[343,885,697],{"class":642},[343,887,656],{"class":642},[343,889,890],{"class":353},"x.status.draft",[343,892,719],{"class":642},[343,894,722],{"class":642},[343,896,897],{"class":693}," sent",[343,899,697],{"class":642},[343,901,656],{"class":642},[343,903,904],{"class":353},"x.status.sent",[343,906,719],{"class":642},[343,908,650],{"class":642},[343,910,911],{"class":638}," as",[343,913,914],{"class":871}," const\n",[343,916,917,919],{"class":345,"line":665},[343,918,324],{"class":681},[343,920,921],{"class":646},"(KEYS[state])\n",[308,923,924,925,928,929,931],{},"Inline the namespace rather than assembling it elsewhere: a ",[312,926,927],{},"computed"," returning\n",[312,930,468],{}," reaches the call site as an opaque variable.",[308,933,934,935,937,938,940],{},"Run removals as a reviewed pull request, and treat the report's ",[312,936,537],{},"\nand ",[312,939,567],{}," sections as the audit trail.",[942,943,944],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":339,"searchDepth":672,"depth":672,"links":946},[947,948,949,950,951],{"id":358,"depth":665,"text":359},{"id":499,"depth":665,"text":500},{"id":600,"depth":665,"text":601},{"id":621,"depth":665,"text":622},{"id":786,"depth":665,"text":787},"md",null,{},{"description":956,"title":71},"The usage evidence the scanner recognizes, the classification buckets, the blind spots to declare, and the call-site style that keeps a report specific.","TEYliA5fNj4MNlFtUzX5veyXJOWu-RGoOvt2u22-_A8",[959,960],{"title":67,"path":68,"stem":69,"description":339,"children":-1},{"title":80,"path":81,"stem":82,"description":339,"children":-1},1789062605942]