[{"data":1,"prerenderedAt":894},["ShallowReactive",2],{"navigation_docs":3,"-monorepos-duplicates-and-divergence":357,"-monorepos-duplicates-and-divergence-surround":891},[4,22,40,53,78,107,132,153,167,176,347],{"title":5,"path":6,"stem":7,"children":8,"page":21},"Introduction","\u002Fintroduction","1.introduction",[9,13,17],{"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",{"title":18,"path":19,"stem":20},"Built for Agents","\u002Fintroduction\u002Fbuilt-for-agents","1.introduction\u002F3.built-for-agents",false,{"title":23,"icon":24,"path":25,"stem":26,"children":27,"page":21},"ESLint Plugin","i-lucide-shield-check","\u002Feslint-plugin","10.eslint-plugin",[28,32,36],{"title":29,"path":30,"stem":31},"Install and Presets","\u002Feslint-plugin\u002Finstall","10.eslint-plugin\u002F1.install",{"title":33,"path":34,"stem":35},"The Rules","\u002Feslint-plugin\u002Frules","10.eslint-plugin\u002F2.rules",{"title":37,"path":38,"stem":39},"Layer-Aware Missing Keys","\u002Feslint-plugin\u002Flayer-aware","10.eslint-plugin\u002F3.layer-aware",{"title":41,"path":42,"stem":43,"children":44,"page":21},"Getting Started","\u002Fgetting-started","2.getting-started",[45,49],{"title":46,"path":47,"stem":48},"Set Up the MCP Server","\u002Fgetting-started\u002Fagent-setup","2.getting-started\u002F1.agent-setup",{"title":50,"path":51,"stem":52},"From an Unconfigured Repository to a Gated CI Job","\u002Fgetting-started\u002Fcold-start","2.getting-started\u002F2.cold-start",{"title":54,"path":55,"stem":56,"children":57,"page":21},"Monorepos","\u002Fmonorepos","3.monorepos",[58,62,66,70,74],{"title":59,"path":60,"stem":61},"Layers","\u002Fmonorepos\u002Flayers","3.monorepos\u002F1.layers",{"title":63,"path":64,"stem":65},"The Consumer Graph","\u002Fmonorepos\u002Fconsumer-graph","3.monorepos\u002F2.consumer-graph",{"title":67,"path":68,"stem":69},"The Shared Library Scenario","\u002Fmonorepos\u002Fshared-libraries","3.monorepos\u002F3.shared-libraries",{"title":71,"path":72,"stem":73},"Duplicates and Divergence","\u002Fmonorepos\u002Fduplicates-and-divergence","3.monorepos\u002F4.duplicates-and-divergence",{"title":75,"path":76,"stem":77},"Misplaced Usages","\u002Fmonorepos\u002Fmisplaced-usages","3.monorepos\u002F5.misplaced-usages",{"title":79,"path":80,"stem":81,"children":82,"page":21},"Frameworks","\u002Fframeworks","4.frameworks",[83,87,91,95,99,103],{"title":84,"path":85,"stem":86},"Detection","\u002Fframeworks\u002Fdetection","4.frameworks\u002F1.detection",{"title":88,"path":89,"stem":90},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F2.nuxt",{"title":92,"path":93,"stem":94},"Laravel","\u002Fframeworks\u002Flaravel","4.frameworks\u002F3.laravel",{"title":96,"path":97,"stem":98},"Vue","\u002Fframeworks\u002Fvue","4.frameworks\u002F4.vue",{"title":100,"path":101,"stem":102},"React \u002F Next.js","\u002Fframeworks\u002Freact-next","4.frameworks\u002F5.react-next",{"title":104,"path":105,"stem":106},"Generic","\u002Fframeworks\u002Fgeneric","4.frameworks\u002F6.generic",{"title":108,"path":109,"stem":110,"children":111,"page":21},"Configuration","\u002Fconfiguration","5.configuration",[112,116,120,124,128],{"title":113,"path":114,"stem":115},"Where Configuration Lives","\u002Fconfiguration\u002Fwhere-config-lives","5.configuration\u002F1.where-config-lives",{"title":117,"path":118,"stem":119},"Precedence and Conflicts","\u002Fconfiguration\u002Fprecedence","5.configuration\u002F2.precedence",{"title":121,"path":122,"stem":123},"Declared vs. Derived Configuration","\u002Fconfiguration\u002Fdeclared-vs-derived","5.configuration\u002F3.declared-vs-derived",{"title":125,"path":126,"stem":127},"Configuration Fields","\u002Fconfiguration\u002Freference","5.configuration\u002F4.reference",{"title":129,"path":130,"stem":131},"Referring to Locales","\u002Fconfiguration\u002Flocale-refs","5.configuration\u002F5.locale-refs",{"title":133,"path":134,"stem":135,"children":136,"page":21},"Nuxt Module","\u002Fnuxt-module","6.nuxt-module",[137,141,145,149],{"title":138,"path":139,"stem":140},"Install and Setup","\u002Fnuxt-module\u002Finstall","6.nuxt-module\u002F1.install",{"title":142,"path":143,"stem":144},"What It Publishes","\u002Fnuxt-module\u002Fwhat-it-publishes","6.nuxt-module\u002F2.what-it-publishes",{"title":146,"path":147,"stem":148},"What It Validates","\u002Fnuxt-module\u002Fvalidation","6.nuxt-module\u002F3.validation",{"title":150,"path":151,"stem":152},"Options and Limits","\u002Fnuxt-module\u002Foptions-and-limits","6.nuxt-module\u002F4.options-and-limits",{"title":154,"icon":155,"path":156,"stem":157,"children":158,"page":21},"CI\u002FCD","i-lucide-git-pull-request","\u002Fci-cd","7.ci-cd",[159,163],{"title":160,"path":161,"stem":162},"GitHub Actions","\u002Fci-cd\u002Fgithub-actions","7.ci-cd\u002F1.github-actions",{"title":164,"path":165,"stem":166},"GitLab CI","\u002Fci-cd\u002Fgitlab-ci","7.ci-cd\u002F2.gitlab-ci",{"title":168,"path":169,"stem":170,"children":171,"page":21},"Concepts","\u002Fconcepts","8.concepts",[172],{"title":173,"path":174,"stem":175},"Translation Modes","\u002Fconcepts\u002Ftranslation-modes","8.concepts\u002F1.translation-modes",{"title":177,"path":178,"stem":179,"children":180,"page":-1},"Reference","\u002Freference","9.reference",[181,183,261,339,343],{"title":177,"path":178,"stem":182},"9.reference\u002Findex",{"title":184,"path":185,"stem":186,"children":187,"page":-1},"CLI Commands","\u002Freference\u002Fcli","9.reference\u002F1.cli\u002Findex",[188,189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257],{"title":184,"path":185,"stem":186},{"title":190,"path":191,"stem":192},"add","\u002Freference\u002Fcli\u002Fadd","9.reference\u002F1.cli\u002Fadd",{"title":194,"path":195,"stem":196},"check","\u002Freference\u002Fcli\u002Fcheck","9.reference\u002F1.cli\u002Fcheck",{"title":198,"path":199,"stem":200},"find-duplicates","\u002Freference\u002Fcli\u002Ffind-duplicates","9.reference\u002F1.cli\u002Ffind-duplicates",{"title":202,"path":203,"stem":204},"get","\u002Freference\u002Fcli\u002Fget","9.reference\u002F1.cli\u002Fget",{"title":206,"path":207,"stem":208},"init","\u002Freference\u002Fcli\u002Finit","9.reference\u002F1.cli\u002Finit",{"title":210,"path":211,"stem":212},"missing","\u002Freference\u002Fcli\u002Fmissing","9.reference\u002F1.cli\u002Fmissing",{"title":214,"path":215,"stem":216},"move","\u002Freference\u002Fcli\u002Fmove","9.reference\u002F1.cli\u002Fmove",{"title":218,"path":219,"stem":220},"remove","\u002Freference\u002Fcli\u002Fremove","9.reference\u002F1.cli\u002Fremove",{"title":222,"path":223,"stem":224},"remove-orphans","\u002Freference\u002Fcli\u002Fremove-orphans","9.reference\u002F1.cli\u002Fremove-orphans",{"title":226,"path":227,"stem":228},"rename","\u002Freference\u002Fcli\u002Frename","9.reference\u002F1.cli\u002Frename",{"title":230,"path":231,"stem":232},"scaffold","\u002Freference\u002Fcli\u002Fscaffold","9.reference\u002F1.cli\u002Fscaffold",{"title":234,"path":235,"stem":236},"scan","\u002Freference\u002Fcli\u002Fscan","9.reference\u002F1.cli\u002Fscan",{"title":238,"path":239,"stem":240},"search","\u002Freference\u002Fcli\u002Fsearch","9.reference\u002F1.cli\u002Fsearch",{"title":242,"path":243,"stem":244},"status","\u002Freference\u002Fcli\u002Fstatus","9.reference\u002F1.cli\u002Fstatus",{"title":246,"path":247,"stem":248},"translate","\u002Freference\u002Fcli\u002Ftranslate","9.reference\u002F1.cli\u002Ftranslate",{"title":250,"path":251,"stem":252},"translate-key","\u002Freference\u002Fcli\u002Ftranslate-key","9.reference\u002F1.cli\u002Ftranslate-key",{"title":254,"path":255,"stem":256},"update","\u002Freference\u002Fcli\u002Fupdate","9.reference\u002F1.cli\u002Fupdate",{"title":258,"path":259,"stem":260},"write","\u002Freference\u002Fcli\u002Fwrite","9.reference\u002F1.cli\u002Fwrite",{"title":262,"path":263,"stem":264,"children":265,"page":-1},"MCP Tools","\u002Freference\u002Fmcp","9.reference\u002F2.mcp\u002Findex",[266,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335],{"title":262,"path":263,"stem":264},{"title":268,"path":269,"stem":270},"discover","\u002Freference\u002Fmcp\u002Fdiscover","9.reference\u002F2.mcp\u002Fdiscover",{"title":272,"path":273,"stem":274},"find_duplicate_keys","\u002Freference\u002Fmcp\u002Ffind_duplicate_keys","9.reference\u002F2.mcp\u002Ffind_duplicate_keys",{"title":276,"path":277,"stem":278},"find_empty_translations","\u002Freference\u002Fmcp\u002Ffind_empty_translations","9.reference\u002F2.mcp\u002Ffind_empty_translations",{"title":280,"path":281,"stem":282},"find_orphan_keys","\u002Freference\u002Fmcp\u002Ffind_orphan_keys","9.reference\u002F2.mcp\u002Ffind_orphan_keys",{"title":284,"path":285,"stem":286},"find_undefined_keys","\u002Freference\u002Fmcp\u002Ffind_undefined_keys","9.reference\u002F2.mcp\u002Ffind_undefined_keys",{"title":288,"path":289,"stem":290},"get_missing_translations","\u002Freference\u002Fmcp\u002Fget_missing_translations","9.reference\u002F2.mcp\u002Fget_missing_translations",{"title":292,"path":293,"stem":294},"get_translation_status","\u002Freference\u002Fmcp\u002Fget_translation_status","9.reference\u002F2.mcp\u002Fget_translation_status",{"title":296,"path":297,"stem":298},"get_translations","\u002Freference\u002Fmcp\u002Fget_translations","9.reference\u002F2.mcp\u002Fget_translations",{"title":300,"path":301,"stem":302},"list_namespaces","\u002Freference\u002Fmcp\u002Flist_namespaces","9.reference\u002F2.mcp\u002Flist_namespaces",{"title":304,"path":305,"stem":306},"move_translation_key","\u002Freference\u002Fmcp\u002Fmove_translation_key","9.reference\u002F2.mcp\u002Fmove_translation_key",{"title":308,"path":309,"stem":310},"remove_orphan_keys","\u002Freference\u002Fmcp\u002Fremove_orphan_keys","9.reference\u002F2.mcp\u002Fremove_orphan_keys",{"title":312,"path":313,"stem":314},"remove_translations","\u002Freference\u002Fmcp\u002Fremove_translations","9.reference\u002F2.mcp\u002Fremove_translations",{"title":316,"path":317,"stem":318},"rename_translation_key","\u002Freference\u002Fmcp\u002Frename_translation_key","9.reference\u002F2.mcp\u002Frename_translation_key",{"title":320,"path":321,"stem":322},"scaffold_locale","\u002Freference\u002Fmcp\u002Fscaffold_locale","9.reference\u002F2.mcp\u002Fscaffold_locale",{"title":324,"path":325,"stem":326},"search_translations","\u002Freference\u002Fmcp\u002Fsearch_translations","9.reference\u002F2.mcp\u002Fsearch_translations",{"title":328,"path":329,"stem":330},"translate_key","\u002Freference\u002Fmcp\u002Ftranslate_key","9.reference\u002F2.mcp\u002Ftranslate_key",{"title":332,"path":333,"stem":334},"translate_missing","\u002Freference\u002Fmcp\u002Ftranslate_missing","9.reference\u002F2.mcp\u002Ftranslate_missing",{"title":336,"path":337,"stem":338},"write_translations","\u002Freference\u002Fmcp\u002Fwrite_translations","9.reference\u002F2.mcp\u002Fwrite_translations",{"title":340,"path":341,"stem":342},"GitHub Action","\u002Freference\u002Faction","9.reference\u002F3.action",{"title":344,"path":345,"stem":346},"Programmatic API","\u002Freference\u002Fprogrammatic-api","9.reference\u002F4.programmatic-api",{"title":348,"icon":349,"path":350,"stem":351,"children":352,"page":21},"Extra Topics","i-lucide-microscope","\u002Fextra-topics","91.extra-topics",[353],{"title":354,"path":355,"stem":356},"How Detection Scores Adapters","\u002Fextra-topics\u002Fdetection-scoring","91.extra-topics\u002F1.detection-scoring",{"id":358,"title":71,"body":359,"description":437,"extension":884,"links":885,"meta":886,"navigation":887,"path":72,"seo":888,"stem":73,"__hash__":890},"docs\u002F3.monorepos\u002F4.duplicates-and-divergence.md",{"type":360,"value":361,"toc":877},"minimark",[362,367,376,379,427,431,454,460,478,481,752,757,761,774,777,781,787,800,807,815,819,866,873],[363,364,366],"h2",{"id":365},"what-a-collision-is","What a Collision Is",[368,369,370,371,375],"p",{},"A ",[372,373,374],"strong",{},"collision"," is one key defined in two layers that the same app consumes: a\nshared layer and a layer that overrides it. The app resolves the key from the\noverriding layer, so the shared layer's value is dead for that app — silently,\nwith no warning at build time.",[368,377,378],{},"Two flavors, and the difference is the whole point:",[380,381,382,398],"table",{},[383,384,385],"thead",{},[386,387,388,392,395],"tr",{},[389,390,391],"th",{},"Kind",[389,393,394],{},"Means",[389,396,397],{},"Why it matters",[399,400,401,413],"tbody",{},[386,402,403,407,410],{},[404,405,406],"td",{},"Same value on both sides",[404,408,409],{},"A copy",[404,411,412],{},"Harmless today, drift tomorrow: the next person changes one and not the other",[386,414,415,421,424],{},[404,416,417,418],{},"Different values — ",[372,419,420],{},"divergent",[404,422,423],{},"An override",[404,425,426],{},"Someone meant it, or nobody noticed. Either way the shared value is never seen by this app",[363,428,430],{"id":429},"finding-them","Finding Them",[432,433,438],"pre",{"className":434,"code":435,"language":436,"meta":437,"style":437},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","the-i18n-cli find-duplicates\n","bash","",[439,440,441],"code",{"__ignoreMap":437},[442,443,446,450],"span",{"class":444,"line":445},"line",1,[442,447,449],{"class":448},"sBMFI","the-i18n-cli",[442,451,453],{"class":452},"sfazB"," find-duplicates\n",[368,455,456,457,459],{},"The agent-facing equivalent is the ",[439,458,272],{}," MCP tool, with the same\narguments and the same result. Both compare values in one reference locale — the\nproject default unless you pass another:",[432,461,463],{"className":434,"code":462,"language":436,"meta":437,"style":437},"the-i18n-cli find-duplicates --locale de\n",[439,464,465],{"__ignoreMap":437},[442,466,467,469,472,475],{"class":444,"line":445},[442,468,449],{"class":448},[442,470,471],{"class":452}," find-duplicates",[442,473,474],{"class":452}," --locale",[442,476,477],{"class":452}," de\n",[368,479,480],{},"A result looks like this:",[432,482,486],{"className":483,"code":484,"language":485,"meta":437,"style":437},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"collisions\": [\n    {\n      \"key\": \"common.cancel\",\n      \"sharedLayer\": \"ui\",\n      \"childLayer\": \"checkout\",\n      \"sharedValue\": \"Cancel\",\n      \"childValue\": \"Discard\",\n      \"divergent\": true\n    }\n  ],\n  \"summary\": {\n    \"totalCollisions\": 1,\n    \"divergentCount\": 1,\n    \"pairsChecked\": 2,\n    \"locale\": \"en\"\n  }\n}\n","json",[439,487,488,494,513,519,543,564,585,606,627,641,647,653,668,687,703,720,740,746],{"__ignoreMap":437},[442,489,490],{"class":444,"line":445},[442,491,493],{"class":492},"sMK4o","{\n",[442,495,497,500,504,507,510],{"class":444,"line":496},2,[442,498,499],{"class":492},"  \"",[442,501,503],{"class":502},"spNyl","collisions",[442,505,506],{"class":492},"\"",[442,508,509],{"class":492},":",[442,511,512],{"class":492}," [\n",[442,514,516],{"class":444,"line":515},3,[442,517,518],{"class":492},"    {\n",[442,520,522,525,528,530,532,535,538,540],{"class":444,"line":521},4,[442,523,524],{"class":492},"      \"",[442,526,527],{"class":448},"key",[442,529,506],{"class":492},[442,531,509],{"class":492},[442,533,534],{"class":492}," \"",[442,536,537],{"class":452},"common.cancel",[442,539,506],{"class":492},[442,541,542],{"class":492},",\n",[442,544,546,548,551,553,555,557,560,562],{"class":444,"line":545},5,[442,547,524],{"class":492},[442,549,550],{"class":448},"sharedLayer",[442,552,506],{"class":492},[442,554,509],{"class":492},[442,556,534],{"class":492},[442,558,559],{"class":452},"ui",[442,561,506],{"class":492},[442,563,542],{"class":492},[442,565,567,569,572,574,576,578,581,583],{"class":444,"line":566},6,[442,568,524],{"class":492},[442,570,571],{"class":448},"childLayer",[442,573,506],{"class":492},[442,575,509],{"class":492},[442,577,534],{"class":492},[442,579,580],{"class":452},"checkout",[442,582,506],{"class":492},[442,584,542],{"class":492},[442,586,588,590,593,595,597,599,602,604],{"class":444,"line":587},7,[442,589,524],{"class":492},[442,591,592],{"class":448},"sharedValue",[442,594,506],{"class":492},[442,596,509],{"class":492},[442,598,534],{"class":492},[442,600,601],{"class":452},"Cancel",[442,603,506],{"class":492},[442,605,542],{"class":492},[442,607,609,611,614,616,618,620,623,625],{"class":444,"line":608},8,[442,610,524],{"class":492},[442,612,613],{"class":448},"childValue",[442,615,506],{"class":492},[442,617,509],{"class":492},[442,619,534],{"class":492},[442,621,622],{"class":452},"Discard",[442,624,506],{"class":492},[442,626,542],{"class":492},[442,628,630,632,634,636,638],{"class":444,"line":629},9,[442,631,524],{"class":492},[442,633,420],{"class":448},[442,635,506],{"class":492},[442,637,509],{"class":492},[442,639,640],{"class":492}," true\n",[442,642,644],{"class":444,"line":643},10,[442,645,646],{"class":492},"    }\n",[442,648,650],{"class":444,"line":649},11,[442,651,652],{"class":492},"  ],\n",[442,654,656,658,661,663,665],{"class":444,"line":655},12,[442,657,499],{"class":492},[442,659,660],{"class":502},"summary",[442,662,506],{"class":492},[442,664,509],{"class":492},[442,666,667],{"class":492}," {\n",[442,669,671,674,677,679,681,685],{"class":444,"line":670},13,[442,672,673],{"class":492},"    \"",[442,675,676],{"class":448},"totalCollisions",[442,678,506],{"class":492},[442,680,509],{"class":492},[442,682,684],{"class":683},"sbssI"," 1",[442,686,542],{"class":492},[442,688,690,692,695,697,699,701],{"class":444,"line":689},14,[442,691,673],{"class":492},[442,693,694],{"class":448},"divergentCount",[442,696,506],{"class":492},[442,698,509],{"class":492},[442,700,684],{"class":683},[442,702,542],{"class":492},[442,704,706,708,711,713,715,718],{"class":444,"line":705},15,[442,707,673],{"class":492},[442,709,710],{"class":448},"pairsChecked",[442,712,506],{"class":492},[442,714,509],{"class":492},[442,716,717],{"class":683}," 2",[442,719,542],{"class":492},[442,721,723,725,728,730,732,734,737],{"class":444,"line":722},16,[442,724,673],{"class":492},[442,726,727],{"class":448},"locale",[442,729,506],{"class":492},[442,731,509],{"class":492},[442,733,534],{"class":492},[442,735,736],{"class":452},"en",[442,738,739],{"class":492},"\"\n",[442,741,743],{"class":444,"line":742},17,[442,744,745],{"class":492},"  }\n",[442,747,749],{"class":444,"line":748},18,[442,750,751],{"class":492},"}\n",[368,753,754,756],{},[439,755,710],{}," is the number of (shared layer, overriding layer) pairs compared,\nwhich tells you whether a clean report means \"no collisions\" or \"nothing to\ncompare\".",[363,758,760],{"id":759},"which-pairs-get-compared","Which Pairs Get Compared",[368,762,763,764,768,769,773],{},"Pairs come from each app's layer precedence order in the\n",[765,766,767],"a",{"href":64},"consumer graph",". For any two locale-backed layers an\napp consumes, the one listed earlier overrides the later one at runtime, so the\nearlier is the child and the later is the shared base. Precedence, not\npopularity: a layer consumed by three apps is still the ",[770,771,772],"em",{},"child"," against a base\nonly one app consumes, if that app lists it first.",[368,775,776],{},"Comparison is leaf-by-leaf in the reference locale. Values that are not strings\n— an array of plural forms, say — are compared structurally, so two equal arrays\nare a copy and not a divergence.",[363,778,780],{"id":779},"fixing-a-collision","Fixing a Collision",[368,782,783,786],{},[372,784,785],{},"Delete one side. Never move the key"," — both layers already define it, so\nmoving is a delete plus a no-op, and doing it in the wrong order loses a value.\nWhich side to delete follows from the values:",[788,789,790,794,797],"ul",{},[791,792,793],"li",{},"The child value is authoritative and the shared value is stale → delete the\nshared copy, if no other consumer relies on it.",[791,795,796],{},"The child copy was accidental → delete the child copy and let the app fall\nthrough to the shared value.",[791,798,799],{},"The override is deliberate — one app really does say \"Discard\" — → keep both\nand treat the collision as known. There is no suppression list for duplicates;\nthe report shows it every run.",[368,801,802,803,806],{},"The same guidance ships in the result's ",[439,804,805],{},"guidance"," field, so an agent acting on\nthe report reaches the same conclusion as you do.",[808,809,810,811,814],"warning",{},"Check every locale before deleting, not only the one you compared. Values can be\nidentical in English and divergent in German, in which case deleting the child\ncopy changes the German UI. Run ",[439,812,813],{},"find-duplicates --locale \u003Ccode>"," once per locale\nyou ship, or at least for the locales the divergent key appears in.",[363,816,818],{"id":817},"limits","Limits",[788,820,821,827,833,843,849],{},[791,822,823,826],{},[372,824,825],{},"One locale per run."," The comparison is against a single reference locale;\ndivergence in another locale is invisible until you run it for that locale.",[791,828,829,832],{},[372,830,831],{},"Locale files only."," No source code is scanned. A collision is a statement\nabout definitions, not about whether either definition is used — pair it with\norphan detection for that.",[791,834,835,838,839,842],{},[372,836,837],{},"Needs app-to-layer edges."," With no app information in the config, no pairs\ncan be derived and the summary says so in its ",[439,840,841],{},"message"," field rather than\nguessing at a hierarchy. The same happens, with a different message, when no\napp consumes more than one locale-backed layer — a single-layer project has\nnothing to collide.",[791,844,845,848],{},[372,846,847],{},"Leaf keys only."," A key defined as an object in one layer and a string in\nanother is compared where both sides have leaves; the shape mismatch itself is\nnot reported.",[791,850,851,854,855,857,858,861,862,865],{},[372,852,853],{},"No CI gate."," ",[439,856,198],{}," reports and exits zero. To fail a pipeline on\ncollisions, read ",[439,859,860],{},"summary.totalCollisions"," or ",[439,863,864],{},"summary.divergentCount"," from the\nreport yourself.",[368,867,868,869,872],{},"Next: ",[765,870,871],{"href":76},"misplaced usages"," — the other cross-layer\nfinding, and the one that is never removed.",[874,875,876],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":437,"searchDepth":515,"depth":515,"links":878},[879,880,881,882,883],{"id":365,"depth":496,"text":366},{"id":429,"depth":496,"text":430},{"id":759,"depth":496,"text":760},{"id":779,"depth":496,"text":780},{"id":817,"depth":496,"text":818},"md",null,{},true,{"description":889,"title":71},"Finding keys defined in both a shared layer and a consuming layer, telling apart harmless copies from divergent values, and fixing them without moving keys.","QyOA22Wh8Wbotidpq3rppDMQV9gFQIwvxPnh3cMcK2o",[892,893],{"title":67,"path":68,"stem":69,"description":437,"children":-1},{"title":75,"path":76,"stem":77,"description":437,"children":-1},1787604647516]