[Decision] Should **/build/**, **/.next/** and **/.turbo/** join the global ESLint ignore — three rules are enabled there today #12334

Description

@yinlianghui

Filed by the domain:devx @ objectstack seat (#6023, session session_01UjM2ia8Av1v5NqfqQEQmC6) as the residue of #12304 / PR #12332. That PR ships the provably-neutral half; this card carries the half that is a real semantic change and therefore not this seat's to take.

What #12332 already does

Promotes **/node_modules/** and **/dist/** to a global ignores-only config object. Measured before/after, zero rules enabled on those paths both ways, source coverage unchanged (5155 linted files before and after, 0 errors), and it captures essentially all the cost this repo actually pays:

treeconfigwallpeak RSS
+ 84 MB of dist/ bundlesbefore511.6 s5424.4 MB
+ 84 MB of dist/ bundlesafter79.6 s806.1 MB

The question

The per-object ignores lists also carry **/build/**, **/.next/** and **/.turbo/**. Those three were not promoted, because promoting them is not semantics-neutral:

packages/core/build/x.ts -> LINTED, 3 rules ENABLED, @typescript-eslint/parser
slot-lookup/no-any-assignment · no-restricted-syntax · query-options/no-any-erasure

Three config objects (the packages/** and examples/** ones) list only **/node_modules/** and **/dist/**, so TypeScript under the other three directories still matches them.

Latent, not live: nothing in this repo emits to build/, and the only Next.js app is apps/docs, which sits outside packages/**. git ls-files matches 0 tracked files under any of the five patterns (control: 4451 under /src/).

Options

APromote all five. Makes the config's intent — never lint build output — uniformly true, and removes a latent inconsistency where generated TypeScript under build/ is linted while the same file under dist/ is not. Costs a real, currently-unreachable semantic change.
BKeep #12332's scope (node_modules + dist). Provably neutral; leaves the inconsistency, and leaves apps/docs/.next output in the population (linted, 0 rules) for anyone who builds the docs site.
CA, plus level the three per-object ignores lists so no object can match build output — making the neutrality claim structurally true rather than incidental.

Flipping to A is a one-line change to the array already in PR #12332.


os-decision-facets

一句话问题eslint.config.mjs 的全局 ignore 要不要把 **/build/****/.next/****/.turbo/** 一并纳入 —— 这三个目录下今天有 3 条规则真的启用着packages/core/build/x.ts 实测),所以纳入是一次真实的接受集变更,不是「什么都不改」的收尾。

四棱
实际业务拉动:今天够不到 —— 全仓 0 个追踪文件落在这五个模式下(对照:/src/ 下 4451 个),没有人正在被它咬。拉动来自一致性而非疼痛:同一份生成代码放 dist/ 不被 lint、放 build/ 被 lint,配置的意图和它的行为不一致。
平台长远合理性:配置的意图本来就是「永不 lint 构建产物」,A/C 让这句话真正成立;C 更进一步,把它变成结构上成立而不是碰巧成立。反方向的理由是:一条潜伏的不一致比一次真实的规则静默更便宜,B 保留了前者而不付出后者。
防 AI 犯错⚠️ 这是本卡最该看的一棱。派发令里本席把「这些路径 0 条规则启用」写成了不可协商的裁定,而它是假的 —— dev 按裁定自带的证伪条款停手并回报,才没有把这三条规则静默地关掉。⭐ 在生成代码上关掉规则和在源码上关掉规则,从 diff 上看是同一行;A 若要做,应当作为一次具名的修正做,而不是搭在「反正不改变什么」的说法上。C 比 A 更抗未来误读,因为它不依赖任何人记得这个理由。
创业阶段不扩散:B 零成本且已在 PR 里;A 是那个数组加三行;C 还要动三个对象的 ignore 列表,是三者中唯一需要复核「有没有别的东西依赖那三个对象仍然匹配 build/」的。⛔ 三者都不新增依赖、不动发布面。

推荐A,若你希望这条不变量被强制而不是被断言则取 C。理由采纳 dev 原话的实质:在生成产物上静默规则是修正而非覆盖率削减 —— 那几个目录下没有人写的代码,而 lint 生成代码正是本卡要去掉的缺陷本身。置信缺口apps/docs/.next 是唯一一个今天真会出现构建产物的位置,本席未测在那里跑 lint 的实际成本与启用规则数;若你倾向 A/C,值得让实现方先补这一个读数。

低摩擦裁决格式:回「A」/「B」/「C」即可。

Refs

#12304(母卡,实测与成本)· PR #12332(已落 B 的那半边)· #12211(分诊在姊妹卡上的同款原则:"if the measurement instead argues for removing or demoting any check, that is a maintainer decision and the card comes back to the box"

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    [Decision] Should **/build/**, **/.next/** and **/.turbo/** join the global ESLint ignore — three rules are enabled there today #12334

    Description

    @yinlianghui

    Filed by the domain:devx @ objectstack seat (#6023, session session_01UjM2ia8Av1v5NqfqQEQmC6) as the residue of #12304 / PR #12332. That PR ships the provably-neutral half; this card carries the half that is a real semantic change and therefore not this seat's to take.

    What #12332 already does

    Promotes **/node_modules/** and **/dist/** to a global ignores-only config object. Measured before/after, zero rules enabled on those paths both ways, source coverage unchanged (5155 linted files before and after, 0 errors), and it captures essentially all the cost this repo actually pays:

    treeconfigwallpeak RSS
    + 84 MB of dist/ bundlesbefore511.6 s5424.4 MB
    + 84 MB of dist/ bundlesafter79.6 s806.1 MB

    The question

    The per-object ignores lists also carry **/build/**, **/.next/** and **/.turbo/**. Those three were not promoted, because promoting them is not semantics-neutral:

    packages/core/build/x.ts -> LINTED, 3 rules ENABLED, @typescript-eslint/parser
    slot-lookup/no-any-assignment · no-restricted-syntax · query-options/no-any-erasure
    

    Three config objects (the packages/** and examples/** ones) list only **/node_modules/** and **/dist/**, so TypeScript under the other three directories still matches them.

    Latent, not live: nothing in this repo emits to build/, and the only Next.js app is apps/docs, which sits outside packages/**. git ls-files matches 0 tracked files under any of the five patterns (control: 4451 under /src/).

    Options

    APromote all five. Makes the config's intent — never lint build output — uniformly true, and removes a latent inconsistency where generated TypeScript under build/ is linted while the same file under dist/ is not. Costs a real, currently-unreachable semantic change.
    BKeep #12332's scope (node_modules + dist). Provably neutral; leaves the inconsistency, and leaves apps/docs/.next output in the population (linted, 0 rules) for anyone who builds the docs site.
    CA, plus level the three per-object ignores lists so no object can match build output — making the neutrality claim structurally true rather than incidental.

    Flipping to A is a one-line change to the array already in PR #12332.


    os-decision-facets

    一句话问题eslint.config.mjs 的全局 ignore 要不要把 **/build/****/.next/****/.turbo/** 一并纳入 —— 这三个目录下今天有 3 条规则真的启用着packages/core/build/x.ts 实测),所以纳入是一次真实的接受集变更,不是「什么都不改」的收尾。

    四棱
    实际业务拉动:今天够不到 —— 全仓 0 个追踪文件落在这五个模式下(对照:/src/ 下 4451 个),没有人正在被它咬。拉动来自一致性而非疼痛:同一份生成代码放 dist/ 不被 lint、放 build/ 被 lint,配置的意图和它的行为不一致。
    平台长远合理性:配置的意图本来就是「永不 lint 构建产物」,A/C 让这句话真正成立;C 更进一步,把它变成结构上成立而不是碰巧成立。反方向的理由是:一条潜伏的不一致比一次真实的规则静默更便宜,B 保留了前者而不付出后者。
    防 AI 犯错⚠️ 这是本卡最该看的一棱。派发令里本席把「这些路径 0 条规则启用」写成了不可协商的裁定,而它是假的 —— dev 按裁定自带的证伪条款停手并回报,才没有把这三条规则静默地关掉。⭐ 在生成代码上关掉规则和在源码上关掉规则,从 diff 上看是同一行;A 若要做,应当作为一次具名的修正做,而不是搭在「反正不改变什么」的说法上。C 比 A 更抗未来误读,因为它不依赖任何人记得这个理由。
    创业阶段不扩散:B 零成本且已在 PR 里;A 是那个数组加三行;C 还要动三个对象的 ignore 列表,是三者中唯一需要复核「有没有别的东西依赖那三个对象仍然匹配 build/」的。⛔ 三者都不新增依赖、不动发布面。

    推荐A,若你希望这条不变量被强制而不是被断言则取 C。理由采纳 dev 原话的实质:在生成产物上静默规则是修正而非覆盖率削减 —— 那几个目录下没有人写的代码,而 lint 生成代码正是本卡要去掉的缺陷本身。置信缺口apps/docs/.next 是唯一一个今天真会出现构建产物的位置,本席未测在那里跑 lint 的实际成本与启用规则数;若你倾向 A/C,值得让实现方先补这一个读数。

    低摩擦裁决格式:回「A」/「B」/「C」即可。

    Refs

    #12304(母卡,实测与成本)· PR #12332(已落 B 的那半边)· #12211(分诊在姊妹卡上的同款原则:"if the measurement instead argues for removing or demoting any check, that is a maintainer decision and the card comes back to the box"

    Metadata

    Metadata

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      [Decision] Should **/build/**, **/.next/** and **/.turbo/** join the global ESLint ignore — three rules are enabled there today #12334

      Description

      @yinlianghui

      Filed by the domain:devx @ objectstack seat (#6023, session session_01UjM2ia8Av1v5NqfqQEQmC6) as the residue of #12304 / PR #12332. That PR ships the provably-neutral half; this card carries the half that is a real semantic change and therefore not this seat's to take.

      What #12332 already does

      Promotes **/node_modules/** and **/dist/** to a global ignores-only config object. Measured before/after, zero rules enabled on those paths both ways, source coverage unchanged (5155 linted files before and after, 0 errors), and it captures essentially all the cost this repo actually pays:

      treeconfigwallpeak RSS
      + 84 MB of dist/ bundlesbefore511.6 s5424.4 MB
      + 84 MB of dist/ bundlesafter79.6 s806.1 MB

      The question

      The per-object ignores lists also carry **/build/**, **/.next/** and **/.turbo/**. Those three were not promoted, because promoting them is not semantics-neutral:

      packages/core/build/x.ts -> LINTED, 3 rules ENABLED, @typescript-eslint/parser
      slot-lookup/no-any-assignment · no-restricted-syntax · query-options/no-any-erasure
      

      Three config objects (the packages/** and examples/** ones) list only **/node_modules/** and **/dist/**, so TypeScript under the other three directories still matches them.

      Latent, not live: nothing in this repo emits to build/, and the only Next.js app is apps/docs, which sits outside packages/**. git ls-files matches 0 tracked files under any of the five patterns (control: 4451 under /src/).

      Options

      APromote all five. Makes the config's intent — never lint build output — uniformly true, and removes a latent inconsistency where generated TypeScript under build/ is linted while the same file under dist/ is not. Costs a real, currently-unreachable semantic change.
      BKeep #12332's scope (node_modules + dist). Provably neutral; leaves the inconsistency, and leaves apps/docs/.next output in the population (linted, 0 rules) for anyone who builds the docs site.
      CA, plus level the three per-object ignores lists so no object can match build output — making the neutrality claim structurally true rather than incidental.

      Flipping to A is a one-line change to the array already in PR #12332.


      os-decision-facets

      一句话问题eslint.config.mjs 的全局 ignore 要不要把 **/build/****/.next/****/.turbo/** 一并纳入 —— 这三个目录下今天有 3 条规则真的启用着packages/core/build/x.ts 实测),所以纳入是一次真实的接受集变更,不是「什么都不改」的收尾。

      四棱
      实际业务拉动:今天够不到 —— 全仓 0 个追踪文件落在这五个模式下(对照:/src/ 下 4451 个),没有人正在被它咬。拉动来自一致性而非疼痛:同一份生成代码放 dist/ 不被 lint、放 build/ 被 lint,配置的意图和它的行为不一致。
      平台长远合理性:配置的意图本来就是「永不 lint 构建产物」,A/C 让这句话真正成立;C 更进一步,把它变成结构上成立而不是碰巧成立。反方向的理由是:一条潜伏的不一致比一次真实的规则静默更便宜,B 保留了前者而不付出后者。
      防 AI 犯错⚠️ 这是本卡最该看的一棱。派发令里本席把「这些路径 0 条规则启用」写成了不可协商的裁定,而它是假的 —— dev 按裁定自带的证伪条款停手并回报,才没有把这三条规则静默地关掉。⭐ 在生成代码上关掉规则和在源码上关掉规则,从 diff 上看是同一行;A 若要做,应当作为一次具名的修正做,而不是搭在「反正不改变什么」的说法上。C 比 A 更抗未来误读,因为它不依赖任何人记得这个理由。
      创业阶段不扩散:B 零成本且已在 PR 里;A 是那个数组加三行;C 还要动三个对象的 ignore 列表,是三者中唯一需要复核「有没有别的东西依赖那三个对象仍然匹配 build/」的。⛔ 三者都不新增依赖、不动发布面。

      推荐A,若你希望这条不变量被强制而不是被断言则取 C。理由采纳 dev 原话的实质:在生成产物上静默规则是修正而非覆盖率削减 —— 那几个目录下没有人写的代码,而 lint 生成代码正是本卡要去掉的缺陷本身。置信缺口apps/docs/.next 是唯一一个今天真会出现构建产物的位置,本席未测在那里跑 lint 的实际成本与启用规则数;若你倾向 A/C,值得让实现方先补这一个读数。

      低摩擦裁决格式:回「A」/「B」/「C」即可。

      Refs

      #12304(母卡,实测与成本)· PR #12332(已落 B 的那半边)· #12211(分诊在姊妹卡上的同款原则:"if the measurement instead argues for removing or demoting any check, that is a maintainer decision and the card comes back to the box"

      Metadata

      Metadata

      Type

      No type

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        [Decision] Should **/build/**, **/.next/** and **/.turbo/** join the global ESLint ignore — three rules are enabled there today #12334

        Description

        @yinlianghui

        Filed by the domain:devx @ objectstack seat (#6023, session session_01UjM2ia8Av1v5NqfqQEQmC6) as the residue of #12304 / PR #12332. That PR ships the provably-neutral half; this card carries the half that is a real semantic change and therefore not this seat's to take.

        What #12332 already does

        Promotes **/node_modules/** and **/dist/** to a global ignores-only config object. Measured before/after, zero rules enabled on those paths both ways, source coverage unchanged (5155 linted files before and after, 0 errors), and it captures essentially all the cost this repo actually pays:

        treeconfigwallpeak RSS
        + 84 MB of dist/ bundlesbefore511.6 s5424.4 MB
        + 84 MB of dist/ bundlesafter79.6 s806.1 MB

        The question

        The per-object ignores lists also carry **/build/**, **/.next/** and **/.turbo/**. Those three were not promoted, because promoting them is not semantics-neutral:

        packages/core/build/x.ts -> LINTED, 3 rules ENABLED, @typescript-eslint/parser
        slot-lookup/no-any-assignment · no-restricted-syntax · query-options/no-any-erasure
        

        Three config objects (the packages/** and examples/** ones) list only **/node_modules/** and **/dist/**, so TypeScript under the other three directories still matches them.

        Latent, not live: nothing in this repo emits to build/, and the only Next.js app is apps/docs, which sits outside packages/**. git ls-files matches 0 tracked files under any of the five patterns (control: 4451 under /src/).

        Options

        APromote all five. Makes the config's intent — never lint build output — uniformly true, and removes a latent inconsistency where generated TypeScript under build/ is linted while the same file under dist/ is not. Costs a real, currently-unreachable semantic change.
        BKeep #12332's scope (node_modules + dist). Provably neutral; leaves the inconsistency, and leaves apps/docs/.next output in the population (linted, 0 rules) for anyone who builds the docs site.
        CA, plus level the three per-object ignores lists so no object can match build output — making the neutrality claim structurally true rather than incidental.

        Flipping to A is a one-line change to the array already in PR #12332.


        os-decision-facets

        一句话问题eslint.config.mjs 的全局 ignore 要不要把 **/build/****/.next/****/.turbo/** 一并纳入 —— 这三个目录下今天有 3 条规则真的启用着packages/core/build/x.ts 实测),所以纳入是一次真实的接受集变更,不是「什么都不改」的收尾。

        四棱
        实际业务拉动:今天够不到 —— 全仓 0 个追踪文件落在这五个模式下(对照:/src/ 下 4451 个),没有人正在被它咬。拉动来自一致性而非疼痛:同一份生成代码放 dist/ 不被 lint、放 build/ 被 lint,配置的意图和它的行为不一致。
        平台长远合理性:配置的意图本来就是「永不 lint 构建产物」,A/C 让这句话真正成立;C 更进一步,把它变成结构上成立而不是碰巧成立。反方向的理由是:一条潜伏的不一致比一次真实的规则静默更便宜,B 保留了前者而不付出后者。
        防 AI 犯错⚠️ 这是本卡最该看的一棱。派发令里本席把「这些路径 0 条规则启用」写成了不可协商的裁定,而它是假的 —— dev 按裁定自带的证伪条款停手并回报,才没有把这三条规则静默地关掉。⭐ 在生成代码上关掉规则和在源码上关掉规则,从 diff 上看是同一行;A 若要做,应当作为一次具名的修正做,而不是搭在「反正不改变什么」的说法上。C 比 A 更抗未来误读,因为它不依赖任何人记得这个理由。
        创业阶段不扩散:B 零成本且已在 PR 里;A 是那个数组加三行;C 还要动三个对象的 ignore 列表,是三者中唯一需要复核「有没有别的东西依赖那三个对象仍然匹配 build/」的。⛔ 三者都不新增依赖、不动发布面。

        推荐A,若你希望这条不变量被强制而不是被断言则取 C。理由采纳 dev 原话的实质:在生成产物上静默规则是修正而非覆盖率削减 —— 那几个目录下没有人写的代码,而 lint 生成代码正是本卡要去掉的缺陷本身。置信缺口apps/docs/.next 是唯一一个今天真会出现构建产物的位置,本席未测在那里跑 lint 的实际成本与启用规则数;若你倾向 A/C,值得让实现方先补这一个读数。

        低摩擦裁决格式:回「A」/「B」/「C」即可。

        Refs

        #12304(母卡,实测与成本)· PR #12332(已落 B 的那半边)· #12211(分诊在姊妹卡上的同款原则:"if the measurement instead argues for removing or demoting any check, that is a maintainer decision and the card comes back to the box"

        Metadata

        Metadata

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          [Decision] Should **/build/**, **/.next/** and **/.turbo/** join the global ESLint ignore — three rules are enabled there today #12334

          Description

          @yinlianghui

          Filed by the domain:devx @ objectstack seat (#6023, session session_01UjM2ia8Av1v5NqfqQEQmC6) as the residue of #12304 / PR #12332. That PR ships the provably-neutral half; this card carries the half that is a real semantic change and therefore not this seat's to take.

          What #12332 already does

          Promotes **/node_modules/** and **/dist/** to a global ignores-only config object. Measured before/after, zero rules enabled on those paths both ways, source coverage unchanged (5155 linted files before and after, 0 errors), and it captures essentially all the cost this repo actually pays:

          treeconfigwallpeak RSS
          + 84 MB of dist/ bundlesbefore511.6 s5424.4 MB
          + 84 MB of dist/ bundlesafter79.6 s806.1 MB

          The question

          The per-object ignores lists also carry **/build/**, **/.next/** and **/.turbo/**. Those three were not promoted, because promoting them is not semantics-neutral:

          packages/core/build/x.ts -> LINTED, 3 rules ENABLED, @typescript-eslint/parser
          slot-lookup/no-any-assignment · no-restricted-syntax · query-options/no-any-erasure
          

          Three config objects (the packages/** and examples/** ones) list only **/node_modules/** and **/dist/**, so TypeScript under the other three directories still matches them.

          Latent, not live: nothing in this repo emits to build/, and the only Next.js app is apps/docs, which sits outside packages/**. git ls-files matches 0 tracked files under any of the five patterns (control: 4451 under /src/).

          Options

          APromote all five. Makes the config's intent — never lint build output — uniformly true, and removes a latent inconsistency where generated TypeScript under build/ is linted while the same file under dist/ is not. Costs a real, currently-unreachable semantic change.
          BKeep #12332's scope (node_modules + dist). Provably neutral; leaves the inconsistency, and leaves apps/docs/.next output in the population (linted, 0 rules) for anyone who builds the docs site.
          CA, plus level the three per-object ignores lists so no object can match build output — making the neutrality claim structurally true rather than incidental.

          Flipping to A is a one-line change to the array already in PR #12332.


          os-decision-facets

          一句话问题eslint.config.mjs 的全局 ignore 要不要把 **/build/****/.next/****/.turbo/** 一并纳入 —— 这三个目录下今天有 3 条规则真的启用着packages/core/build/x.ts 实测),所以纳入是一次真实的接受集变更,不是「什么都不改」的收尾。

          四棱
          实际业务拉动:今天够不到 —— 全仓 0 个追踪文件落在这五个模式下(对照:/src/ 下 4451 个),没有人正在被它咬。拉动来自一致性而非疼痛:同一份生成代码放 dist/ 不被 lint、放 build/ 被 lint,配置的意图和它的行为不一致。
          平台长远合理性:配置的意图本来就是「永不 lint 构建产物」,A/C 让这句话真正成立;C 更进一步,把它变成结构上成立而不是碰巧成立。反方向的理由是:一条潜伏的不一致比一次真实的规则静默更便宜,B 保留了前者而不付出后者。
          防 AI 犯错⚠️ 这是本卡最该看的一棱。派发令里本席把「这些路径 0 条规则启用」写成了不可协商的裁定,而它是假的 —— dev 按裁定自带的证伪条款停手并回报,才没有把这三条规则静默地关掉。⭐ 在生成代码上关掉规则和在源码上关掉规则,从 diff 上看是同一行;A 若要做,应当作为一次具名的修正做,而不是搭在「反正不改变什么」的说法上。C 比 A 更抗未来误读,因为它不依赖任何人记得这个理由。
          创业阶段不扩散:B 零成本且已在 PR 里;A 是那个数组加三行;C 还要动三个对象的 ignore 列表,是三者中唯一需要复核「有没有别的东西依赖那三个对象仍然匹配 build/」的。⛔ 三者都不新增依赖、不动发布面。

          推荐A,若你希望这条不变量被强制而不是被断言则取 C。理由采纳 dev 原话的实质:在生成产物上静默规则是修正而非覆盖率削减 —— 那几个目录下没有人写的代码,而 lint 生成代码正是本卡要去掉的缺陷本身。置信缺口apps/docs/.next 是唯一一个今天真会出现构建产物的位置,本席未测在那里跑 lint 的实际成本与启用规则数;若你倾向 A/C,值得让实现方先补这一个读数。

          低摩擦裁决格式:回「A」/「B」/「C」即可。

          Refs

          #12304(母卡,实测与成本)· PR #12332(已落 B 的那半边)· #12211(分诊在姊妹卡上的同款原则:"if the measurement instead argues for removing or demoting any check, that is a maintainer decision and the card comes back to the box"

          Metadata

          Metadata

          Type

          No type

          Projects

          No projects

            Milestone

            No milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            [Decision] Should **/build/**, **/.next/** and **/.turbo/** join the global ESLint ignore — three rules are enabled there today #12334

            Description

            @yinlianghui

            Filed by the domain:devx @ objectstack seat (#6023, session session_01UjM2ia8Av1v5NqfqQEQmC6) as the residue of #12304 / PR #12332. That PR ships the provably-neutral half; this card carries the half that is a real semantic change and therefore not this seat's to take.

            What #12332 already does

            Promotes **/node_modules/** and **/dist/** to a global ignores-only config object. Measured before/after, zero rules enabled on those paths both ways, source coverage unchanged (5155 linted files before and after, 0 errors), and it captures essentially all the cost this repo actually pays:

            treeconfigwallpeak RSS
            + 84 MB of dist/ bundlesbefore511.6 s5424.4 MB
            + 84 MB of dist/ bundlesafter79.6 s806.1 MB

            The question

            The per-object ignores lists also carry **/build/**, **/.next/** and **/.turbo/**. Those three were not promoted, because promoting them is not semantics-neutral:

            packages/core/build/x.ts -> LINTED, 3 rules ENABLED, @typescript-eslint/parser
            slot-lookup/no-any-assignment · no-restricted-syntax · query-options/no-any-erasure
            

            Three config objects (the packages/** and examples/** ones) list only **/node_modules/** and **/dist/**, so TypeScript under the other three directories still matches them.

            Latent, not live: nothing in this repo emits to build/, and the only Next.js app is apps/docs, which sits outside packages/**. git ls-files matches 0 tracked files under any of the five patterns (control: 4451 under /src/).

            Options

            APromote all five. Makes the config's intent — never lint build output — uniformly true, and removes a latent inconsistency where generated TypeScript under build/ is linted while the same file under dist/ is not. Costs a real, currently-unreachable semantic change.
            BKeep #12332's scope (node_modules + dist). Provably neutral; leaves the inconsistency, and leaves apps/docs/.next output in the population (linted, 0 rules) for anyone who builds the docs site.
            CA, plus level the three per-object ignores lists so no object can match build output — making the neutrality claim structurally true rather than incidental.

            Flipping to A is a one-line change to the array already in PR #12332.


            os-decision-facets

            一句话问题eslint.config.mjs 的全局 ignore 要不要把 **/build/****/.next/****/.turbo/** 一并纳入 —— 这三个目录下今天有 3 条规则真的启用着packages/core/build/x.ts 实测),所以纳入是一次真实的接受集变更,不是「什么都不改」的收尾。

            四棱
            实际业务拉动:今天够不到 —— 全仓 0 个追踪文件落在这五个模式下(对照:/src/ 下 4451 个),没有人正在被它咬。拉动来自一致性而非疼痛:同一份生成代码放 dist/ 不被 lint、放 build/ 被 lint,配置的意图和它的行为不一致。
            平台长远合理性:配置的意图本来就是「永不 lint 构建产物」,A/C 让这句话真正成立;C 更进一步,把它变成结构上成立而不是碰巧成立。反方向的理由是:一条潜伏的不一致比一次真实的规则静默更便宜,B 保留了前者而不付出后者。
            防 AI 犯错⚠️ 这是本卡最该看的一棱。派发令里本席把「这些路径 0 条规则启用」写成了不可协商的裁定,而它是假的 —— dev 按裁定自带的证伪条款停手并回报,才没有把这三条规则静默地关掉。⭐ 在生成代码上关掉规则和在源码上关掉规则,从 diff 上看是同一行;A 若要做,应当作为一次具名的修正做,而不是搭在「反正不改变什么」的说法上。C 比 A 更抗未来误读,因为它不依赖任何人记得这个理由。
            创业阶段不扩散:B 零成本且已在 PR 里;A 是那个数组加三行;C 还要动三个对象的 ignore 列表,是三者中唯一需要复核「有没有别的东西依赖那三个对象仍然匹配 build/」的。⛔ 三者都不新增依赖、不动发布面。

            推荐A,若你希望这条不变量被强制而不是被断言则取 C。理由采纳 dev 原话的实质:在生成产物上静默规则是修正而非覆盖率削减 —— 那几个目录下没有人写的代码,而 lint 生成代码正是本卡要去掉的缺陷本身。置信缺口apps/docs/.next 是唯一一个今天真会出现构建产物的位置,本席未测在那里跑 lint 的实际成本与启用规则数;若你倾向 A/C,值得让实现方先补这一个读数。

            低摩擦裁决格式:回「A」/「B」/「C」即可。

            Refs

            #12304(母卡,实测与成本)· PR #12332(已落 B 的那半边)· #12211(分诊在姊妹卡上的同款原则:"if the measurement instead argues for removing or demoting any check, that is a maintainer decision and the card comes back to the box"

            Metadata

            Metadata

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              [Decision] Should **/build/**, **/.next/** and **/.turbo/** join the global ESLint ignore — three rules are enabled there today #12334

              Description

              @yinlianghui

              Filed by the domain:devx @ objectstack seat (#6023, session session_01UjM2ia8Av1v5NqfqQEQmC6) as the residue of #12304 / PR #12332. That PR ships the provably-neutral half; this card carries the half that is a real semantic change and therefore not this seat's to take.

              What #12332 already does

              Promotes **/node_modules/** and **/dist/** to a global ignores-only config object. Measured before/after, zero rules enabled on those paths both ways, source coverage unchanged (5155 linted files before and after, 0 errors), and it captures essentially all the cost this repo actually pays:

              treeconfigwallpeak RSS
              + 84 MB of dist/ bundlesbefore511.6 s5424.4 MB
              + 84 MB of dist/ bundlesafter79.6 s806.1 MB

              The question

              The per-object ignores lists also carry **/build/**, **/.next/** and **/.turbo/**. Those three were not promoted, because promoting them is not semantics-neutral:

              packages/core/build/x.ts -> LINTED, 3 rules ENABLED, @typescript-eslint/parser
              slot-lookup/no-any-assignment · no-restricted-syntax · query-options/no-any-erasure
              

              Three config objects (the packages/** and examples/** ones) list only **/node_modules/** and **/dist/**, so TypeScript under the other three directories still matches them.

              Latent, not live: nothing in this repo emits to build/, and the only Next.js app is apps/docs, which sits outside packages/**. git ls-files matches 0 tracked files under any of the five patterns (control: 4451 under /src/).

              Options

              APromote all five. Makes the config's intent — never lint build output — uniformly true, and removes a latent inconsistency where generated TypeScript under build/ is linted while the same file under dist/ is not. Costs a real, currently-unreachable semantic change.
              BKeep #12332's scope (node_modules + dist). Provably neutral; leaves the inconsistency, and leaves apps/docs/.next output in the population (linted, 0 rules) for anyone who builds the docs site.
              CA, plus level the three per-object ignores lists so no object can match build output — making the neutrality claim structurally true rather than incidental.

              Flipping to A is a one-line change to the array already in PR #12332.


              os-decision-facets

              一句话问题eslint.config.mjs 的全局 ignore 要不要把 **/build/****/.next/****/.turbo/** 一并纳入 —— 这三个目录下今天有 3 条规则真的启用着packages/core/build/x.ts 实测),所以纳入是一次真实的接受集变更,不是「什么都不改」的收尾。

              四棱
              实际业务拉动:今天够不到 —— 全仓 0 个追踪文件落在这五个模式下(对照:/src/ 下 4451 个),没有人正在被它咬。拉动来自一致性而非疼痛:同一份生成代码放 dist/ 不被 lint、放 build/ 被 lint,配置的意图和它的行为不一致。
              平台长远合理性:配置的意图本来就是「永不 lint 构建产物」,A/C 让这句话真正成立;C 更进一步,把它变成结构上成立而不是碰巧成立。反方向的理由是:一条潜伏的不一致比一次真实的规则静默更便宜,B 保留了前者而不付出后者。
              防 AI 犯错⚠️ 这是本卡最该看的一棱。派发令里本席把「这些路径 0 条规则启用」写成了不可协商的裁定,而它是假的 —— dev 按裁定自带的证伪条款停手并回报,才没有把这三条规则静默地关掉。⭐ 在生成代码上关掉规则和在源码上关掉规则,从 diff 上看是同一行;A 若要做,应当作为一次具名的修正做,而不是搭在「反正不改变什么」的说法上。C 比 A 更抗未来误读,因为它不依赖任何人记得这个理由。
              创业阶段不扩散:B 零成本且已在 PR 里;A 是那个数组加三行;C 还要动三个对象的 ignore 列表,是三者中唯一需要复核「有没有别的东西依赖那三个对象仍然匹配 build/」的。⛔ 三者都不新增依赖、不动发布面。

              推荐A,若你希望这条不变量被强制而不是被断言则取 C。理由采纳 dev 原话的实质:在生成产物上静默规则是修正而非覆盖率削减 —— 那几个目录下没有人写的代码,而 lint 生成代码正是本卡要去掉的缺陷本身。置信缺口apps/docs/.next 是唯一一个今天真会出现构建产物的位置,本席未测在那里跑 lint 的实际成本与启用规则数;若你倾向 A/C,值得让实现方先补这一个读数。

              低摩擦裁决格式:回「A」/「B」/「C」即可。

              Refs

              #12304(母卡,实测与成本)· PR #12332(已落 B 的那半边)· #12211(分诊在姊妹卡上的同款原则:"if the measurement instead argues for removing or demoting any check, that is a maintainer decision and the card comes back to the box"

              Metadata

              Metadata

              Type

              No type

              Projects

              No projects

                Milestone

                No milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                [Decision] Should **/build/**, **/.next/** and **/.turbo/** join the global ESLint ignore — three rules are enabled there today #12334

                Description

                @yinlianghui

                Filed by the domain:devx @ objectstack seat (#6023, session session_01UjM2ia8Av1v5NqfqQEQmC6) as the residue of #12304 / PR #12332. That PR ships the provably-neutral half; this card carries the half that is a real semantic change and therefore not this seat's to take.

                What #12332 already does

                Promotes **/node_modules/** and **/dist/** to a global ignores-only config object. Measured before/after, zero rules enabled on those paths both ways, source coverage unchanged (5155 linted files before and after, 0 errors), and it captures essentially all the cost this repo actually pays:

                treeconfigwallpeak RSS
                + 84 MB of dist/ bundlesbefore511.6 s5424.4 MB
                + 84 MB of dist/ bundlesafter79.6 s806.1 MB

                The question

                The per-object ignores lists also carry **/build/**, **/.next/** and **/.turbo/**. Those three were not promoted, because promoting them is not semantics-neutral:

                packages/core/build/x.ts -> LINTED, 3 rules ENABLED, @typescript-eslint/parser
                slot-lookup/no-any-assignment · no-restricted-syntax · query-options/no-any-erasure
                

                Three config objects (the packages/** and examples/** ones) list only **/node_modules/** and **/dist/**, so TypeScript under the other three directories still matches them.

                Latent, not live: nothing in this repo emits to build/, and the only Next.js app is apps/docs, which sits outside packages/**. git ls-files matches 0 tracked files under any of the five patterns (control: 4451 under /src/).

                Options

                APromote all five. Makes the config's intent — never lint build output — uniformly true, and removes a latent inconsistency where generated TypeScript under build/ is linted while the same file under dist/ is not. Costs a real, currently-unreachable semantic change.
                BKeep #12332's scope (node_modules + dist). Provably neutral; leaves the inconsistency, and leaves apps/docs/.next output in the population (linted, 0 rules) for anyone who builds the docs site.
                CA, plus level the three per-object ignores lists so no object can match build output — making the neutrality claim structurally true rather than incidental.

                Flipping to A is a one-line change to the array already in PR #12332.


                os-decision-facets

                一句话问题eslint.config.mjs 的全局 ignore 要不要把 **/build/****/.next/****/.turbo/** 一并纳入 —— 这三个目录下今天有 3 条规则真的启用着packages/core/build/x.ts 实测),所以纳入是一次真实的接受集变更,不是「什么都不改」的收尾。

                四棱
                实际业务拉动:今天够不到 —— 全仓 0 个追踪文件落在这五个模式下(对照:/src/ 下 4451 个),没有人正在被它咬。拉动来自一致性而非疼痛:同一份生成代码放 dist/ 不被 lint、放 build/ 被 lint,配置的意图和它的行为不一致。
                平台长远合理性:配置的意图本来就是「永不 lint 构建产物」,A/C 让这句话真正成立;C 更进一步,把它变成结构上成立而不是碰巧成立。反方向的理由是:一条潜伏的不一致比一次真实的规则静默更便宜,B 保留了前者而不付出后者。
                防 AI 犯错⚠️ 这是本卡最该看的一棱。派发令里本席把「这些路径 0 条规则启用」写成了不可协商的裁定,而它是假的 —— dev 按裁定自带的证伪条款停手并回报,才没有把这三条规则静默地关掉。⭐ 在生成代码上关掉规则和在源码上关掉规则,从 diff 上看是同一行;A 若要做,应当作为一次具名的修正做,而不是搭在「反正不改变什么」的说法上。C 比 A 更抗未来误读,因为它不依赖任何人记得这个理由。
                创业阶段不扩散:B 零成本且已在 PR 里;A 是那个数组加三行;C 还要动三个对象的 ignore 列表,是三者中唯一需要复核「有没有别的东西依赖那三个对象仍然匹配 build/」的。⛔ 三者都不新增依赖、不动发布面。

                推荐A,若你希望这条不变量被强制而不是被断言则取 C。理由采纳 dev 原话的实质:在生成产物上静默规则是修正而非覆盖率削减 —— 那几个目录下没有人写的代码,而 lint 生成代码正是本卡要去掉的缺陷本身。置信缺口apps/docs/.next 是唯一一个今天真会出现构建产物的位置,本席未测在那里跑 lint 的实际成本与启用规则数;若你倾向 A/C,值得让实现方先补这一个读数。

                低摩擦裁决格式:回「A」/「B」/「C」即可。

                Refs

                #12304(母卡,实测与成本)· PR #12332(已落 B 的那半边)· #12211(分诊在姊妹卡上的同款原则:"if the measurement instead argues for removing or demoting any check, that is a maintainer decision and the card comes back to the box"

                Metadata

                Metadata

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions