Skip to content

test/metadata-references.test.ts 距 100KB hygiene 上限只剩 817 字节 —— 下一个往里加测试的 PR 会被 gate 拦住 #814

Description

@yinlianghui

观察类发现,由 #508 完成半的 PR 顺带撞上。不影响任何用户,但会稳定地让下一个改这个文件的 agent 白跑一轮。

现状

scripts/check-source-hygiene.mjs 的 MAX_FILE_BYTES = 100 * 1024(= 102,400 字节),失败提示是「split the file — oversized modules defeat review」。

在 origin/main @ 67bf9474 上:

test/metadata-references.test.ts   101,583 字节
上限                               102,400 字节
余量                                   817 字节

也就是说这个文件已经用掉 99.2% 的配额。任何往里加一条带注释的测试(本仓惯例里一条测试通常 1-3KB)都会直接把 pnpm hygiene 打红。

怎么撞上的

#508 的派发单点名要在这个文件里「翻转」那条「不许把死 bulk 按钮接回去」的守卫。删掉旧守卫(约 2.2KB)、写上新的三条钉(约 7.6KB)后,文件涨到 106,008 字节,hygiene 红:

test/metadata-references.test.ts:0  104KB
→ split the file — oversized modules defeat review

即使把旧块腾出的空间算进去,可用预算也只有约 3KB,装不下三条带解释的钉子。最后按 hygiene 自己给的处方拆了文件:新钉进 test/bulk-action-dispatch.test.ts,原处留一条指路注释,metadata-references.test.ts 回到 99,872 字节。

为什么值得单独记一笔

拆分这一次是被动的、由 gate 逼出来的,只搬走了与 bulk 派发相关的部分。文件本身仍然是 97KB 上下、覆盖十几个互不相关的 UI 引用族(导航、rowColor、kanban、related list、action params、i18n…),余量仍然很小。下一个 agent 大概率会:先照派发单往里写,再被 hygiene 打红,再临时决定怎么拆 —— 每人重复一遍这个循环。

主动按族拆成几个文件(例如 view-references / action-references / i18n-references)会一次性解决,但那是独立的重构,不该顺手塞进任何功能 PR,故登记在此由 PM 分诊。

(与 #753 不同:那条说的是 CI step 名字漏列了 hygiene 的第四项检查,这条说的是被检查文件本身的体积。)

Activity

  1. yinlianghui commented on Aug 5, 2026

    @yinlianghui
    CollaboratorAuthor

    📋 findings 分诊轮(修复线 PM):晋级 pm:queue——距 100KB gate 仅 817 字节,下一个往里加测试的 PR 必被拦(#815 已被迫拆过一次);按族拆分的独立重构单,小单池待派。


    Generated by Claude Code

  2. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 6, 2026
  3. self-assigned this
    on Aug 6, 2026
  4. yinlianghui commented on Aug 6, 2026

    @yinlianghui
    CollaboratorAuthor

    🔒 认领(/pm-dispatch R28)— session session_01VHrPAGEgFDoHjphqYG4BMa,分支 claude/issue-814-split-metadata-references。

    文件面:test/metadata-references.test.ts 按族拆分(独立重构单,不与任何功能改动混装)。

    裁定:

    1. 拆分边界依文件内实际族群定(issue 建议 view-references / action-references / i18n-references 仅供参考),每个新文件须离 100KB 上限留出 ≥30% 余量;原文件保留指路注释(沿 fix(opportunity): 用声明通道 params._selectedIds 接回多选批量改阶段 (#508) #815 被动拆分的先例格式)。
    2. 测试语义零变化:拆分前后用例数与断言逐条对账(拆前 pnpm test -- test/metadata-references 记录用例数,拆后所有新文件用例数之和 + 原文件剩余 = 拆前总数),对账表贴进 PR body;不顺手改任何断言内容、不「顺手优化」。
    3. mass_update_stage is wired but cannot execute — every bulk-action invocation path is broken in console 16.1.0 #508 已拆出的 test/bulk-action-dispatch.test.ts 不动;hygiene 全量跑确认所有新文件都过 100KB gate。
    4. 基线 17.0.0-rc.3;改动仅限 test/ 下该文件族。

    Generated by Claude Code

  5. yinlianghui commented on Aug 6, 2026

    @yinlianghui
    CollaboratorAuthor

    ✅ 验收通过 —— PR #930 已转 ready 并挂 auto-merge(CI 9/9 全绿实核,head 65ef07b,含 CodeQL success)。

    验收要点:

    1. premise partial 处理得当:「817 字节」按 67bf947 旧账如实标注过期,fresh main 实测余量 2,528 字节仍临界(97.5% 配额),核心论断(下一个 agent 必被 gate 拦、fix(opportunity): 用声明通道 params._selectedIds 接回多选批量改阶段 (#508) #815 是被动拆非主动拆)成立;docs(i18n): spell the lead convert verb 转化 on every Chinese page (#844) #906 的 ROW_LABEL 是否占用本文件也按派单核了(不在)。
    2. 拆分方案扎实:按 22 个顶层 describe 实际族群拆四文件 + 无断言 helper,全部余量 ≥67%;族内顺序保持,「the guard above」相邻关系原样成立;fix(opportunity): 用声明通道 params._selectedIds 接回多选批量改阶段 (#508) #815 先例格式的 split map 指路块齐全。
    3. 「语义零变化」是机械证明不是口头承诺:逐字节对拍 18/22 完全相同,4 个差异仅注释改写+死绑定删除,反向替换后 22/22 完全还原;对账 70 = 24+16+11+19。
    4. CodeQL 红一轮的处置是模范:按 PM 转告即修——tsc --noUnusedLocals 精确复现 5 处不多不少;死 import 的局部遮蔽分析(walk 具名函数表达式/块级 const 在原文件同样遮蔽模块级,删 import 不改任何名字解析)排除了误删风险;:265/:285 死绑定核实为 origin/main 既有(换路径才被报 new);修法取最小(不动 selectFields 的 key: 属性,删属性属改逻辑)。
    5. CI 用例差额逐条归因(70 files/1602 vs 本地 69/1597 = main 前进 4 commit:docs(analytics): 两页 zh-Hant 的「轉換率」跟简体侧改写为「轉化率」(#905) #923 +4、test(docs-drift): 磁贴散文规则语言无关化,zh 页引用同样对账 (#725) #929 +1;本 PR 净贡献 0)——数字对账文化的范本。

    越界发现处置:#931(4 条跨文件「见 metadata-references 守卫」注释多一跳 + 死 key 属性观察)——observation-class,finding 标签已由 dev 打好,留发现池,不排期。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

findingpm:dispatchedDispatched to a dev agent by /pm-dispatch

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions