## 现象 设置 → 扩展功能 → **仓库地志**打开后,「自动更新」和「面板发起 T1」两个子开关**各渲染两遍**。点上面那一行,下面那一行不跟着变,看起来像开关失灵。 `v0.14.0-beta.1` 已带此问题。 ## 复现条件 **只有把仓库地志的总闸打开才会出现。** 总闸 `chorographyEnabled` 默认 `false`(`src/config.js:1057`),默认配置下看不到这两行——所以按默认配置复现不出来是正常的。 ## 成因 `chorographyAutoRefresh` / `chorographyT1FromPanel` 既在 `FEATURE_CHILDREN` 里(`flagRow` 会跟着父行展开,各渲染一次),又由 `choroSub` 手写了一份(`boolRow(..., { sub: true })`,再各渲染一次)。 时间线:`5c41d31` 先写了 `choroSub` 里的手写行,`5bad8a6` 往 `FEATURE_CHILDREN` 补父关系时没删旧的。 ## 影响范围 仅限面板显示。持久值与后端行为都正常——两个开关的读写都走同一份配置,重复的只是渲染点,所以「点上面那个,下面那个不变」是显示不同步,不是状态丢了。 ## 现有测试为什么没抓到 - `test/inject-parent-gate.test.js` 只反查「子项不能同时出现在 `items` 与 `FEATURE_CHILDREN`」,不检查「子项是否在别处被手写 `boolRow` 渲染」。 - `test/client.test.js` 的座位去重只对六张常量表生效,手写 `boolRow` 不在表里。 - 项目没有 React 渲染级测试(`deps` 里没有 `react-dom`),没法用 `renderToStaticMarkup` 兜底,只能靠结构断言。 修法见 PR #657:删掉 `choroSub` 的两行手写渲染,子项回到 `flagRow` 统一展开,并补上 `gate`;同时加两条断言把「子键被手写渲染」和「`flagRow` 不展开」都钉成红线。
Activity
modusensus commentedon Nov 11, 2026
修在 #657:
chorographyAutoRefresh/chorographyT1FromPanel既在FEATURE_CHILDREN里、又由choroSub手写了一份,于是各渲染两遍、上下两行不联动。修法是删掉手写两行,子项统一由flagRow展开(父关时子行标注「不生效」,值保留),并补了两条防复发锁:前端每个子键不得手写渲染、flagRow必须真展开子项并带 gate。已随 v0.14.0-beta.2 发布(31a49ccc)。更新后若仍有不联动的情况请重开。