跳转至

[ISSUE-0061] 第 13 轮 agent — server mode page reset regression

v0.10.80 commit 后第 13 轮 agent 审查。前 12 轮每轮都找出 bug,v0.10.80 我以为收敛 ✅。 但 agent 抠出 1 个真 bug — v0.10.79 大重构丢失的行为语义

病灶

src/sections/page/local-data-view.tsx:211-216

// v0.10.79 之后(错)
useEffect(() => {
  if (mode === 'client') {
    setState({ page: 1 });
  }
}, [mode, quickFilter, keyword, filterTaskId]);

只 client mode reset,server mode 漏。

用户痛点: - 用户在 server mode page=5 - 改 keyword 命中只剩 30 行 (= 2 页) - hook useEffect 触发 dataRun({ current: 5, keyword: 'new', ... }) - server 返 list=[](skip 80 但只有 30 行) - 表格空白 → 用户错觉"没数据"

历史轨迹

版本 状态
v0.10.78 之前 useEffect [filters, keyword, logic, filterTaskId, quickFilter, mode] → getTableData(1) ✓ 强制 page=1
v0.10.79 (hook 大重构) getTableData 进 hook 内,page reset 语义丢失
v0.10.74 修 #4 (历史补丁) 加 client mode useEffect setState({page:1}) — 但只 client mode
v0.10.79 重构 没把 server mode 的 reset 也加回来
v0.10.80 polish 没注意到这个漏
v0.10.81 (本轮) 删 client mode 守卫 + 补 filters/logic deps

// v0.10.81 ISSUE-0061:两种 mode 都 reset
useEffect(() => {
  setState({ page: 1 });
}, [quickFilter, keyword, filterTaskId, filters, logic]);
  • if (mode === 'client') 守卫
  • filters, logic 到 deps(旧版有,v0.10.74 遗漏)
  • mode 自身切换不需要在 deps — setMode wrapper 已自带 page: 1

元洞察(agent 直击)

"v0.10.79 大重构丢失了行为语义。Hook 化时只搬了'读数据'路径,没搬'控制 page'的次生路径。重构清单应该不仅列 useEffect,还列每个 useEffect 的副作用语义('reset page=1'),逐项确认目标位置承接。"

"这种 hook 化重构后的语义流失类 bug,agent 难一眼看出,因为 grep 不到对应 token —— 只有顺着用户视角'我刚改了 keyword 应该怎样'才能挖出。"

→ 沉淀到「重构语义清单 rule」(下次重构必做)。

audit_grep

- pattern: "useEffect[\\s\\S]{0,300}mode\\s*===\\s*['\"]client['\"][\\s\\S]{0,200}setState\\([^)]*page:\\s*1"
  description: "page reset 不应只在 client mode  server mode 同样需要"

工作流

✅ bump → build → sanity check 0.10.81

结论 / 元规则

重构后至少经过 1 个独立 agent 审查 + 用户实测一段时间,否则别声称"收敛"。 v0.10.79 commit message 我写"大重构治本"+第 12 轮 agent 只抠出 polish → 我误以为收敛。 第 13 轮 agent 一击命中真 bug。

下一步建议:真停下来观察一段时间,让用户实际使用兜底,再决定是否继续治理。

相关

  • [[0059-usedatasource-hook-refactor|0059-useDataSource-hook大重构]] — 大重构(丢语义来源)
  • [[0060-round12-agent-usedatasource-double-fetch|0060-第12轮agent-useDataSource双拉-死代码]] — 第 12 轮 agent polish(漏抓 page reset)
  • 修bug全字典扫描 — 重构语义清单是新一层