Skip to content

Commit e490124

Browse files
committed
docs(shell): 修批 3 收口评审 I-1 与 7 Minor
1 parent 4905d4d commit e490124

5 files changed

Lines changed: 65 additions & 12 deletions

File tree

‎app/src/shell/TopBar.persistent.test.tsx‎

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,15 @@ const RIGHT_SLOT = jsxPropBody(APP, "right");
132132
if (APP.slice(RIGHT_SLOT_AT, RIGHT_SLOT_AT + RIGHT_SLOT.length) !== RIGHT_SLOT) {
133133
throw new Error("right 正文起点与正文对不上(解析器自检失败)");
134134
}
135+
/**
136+
* 「下标落在 right 正文区间内」的**唯一判据**(半开区间 `[起点, 起点+长度)`)。
137+
* ⚠️ 抽出成命名函数是为了能对**区间自身**做双向对照(④ 的收尾):写成内联的
138+
* `x >= RIGHT_SLOT_AT && x < RIGHT_SLOT_AT + RIGHT_SLOT.length` 时,把 **`x` 也写成
139+
* `RIGHT_SLOT_AT`** 就退化成 `x >= x`(**恒真**,收口评审 M-6 实测的形状)——
140+
* 那样的「阳性对照」什么都没证明。
141+
* @ai-context 副作用:无(纯函数)。边界:区间**半开**(右端不含)——右端下标必须判 false。
142+
*/
143+
const inRightRegion = (index: number): boolean => index >= RIGHT_SLOT_AT && index < RIGHT_SLOT_AT + RIGHT_SLOT.length;
135144
const DOCK_MARKER = 'testId="dock-toggle"';
136145
const BADGE_MARKER = "{capture.active && (";
137146
/**
@@ -202,11 +211,18 @@ describe("I-2 结构尺:App.tsx 的 right 插槽正文里必须含两个常驻
202211
expect((APP.match(/testId="dock-toggle"/g) ?? []).length, "出现了第二个装配点(判据会失去方向)").toBe(1);
203212
const at = APP.indexOf(DOCK_MARKER);
204213
expect(at, "全文件找不到 dock 装配点").toBeGreaterThan(-1);
205-
const inRightRegion = at >= RIGHT_SLOT_AT && at < RIGHT_SLOT_AT + RIGHT_SLOT.length;
206-
expect(inRightRegion, "dock 装配点的第一次出现在 right 正文区间之外(即被挪去别处)").toBe(true);
207-
// 阳性对照:同一区间判定对 right 的**起点**必须为真、对文件起点必须为假(证明区间不是全真)
208-
expect(RIGHT_SLOT_AT >= RIGHT_SLOT_AT && RIGHT_SLOT_AT < RIGHT_SLOT_AT + RIGHT_SLOT.length).toBe(true);
209-
expect(0 >= RIGHT_SLOT_AT).toBe(false);
214+
// 判据复用模块级的 `inRightRegion`(**不要**在这里再声明一个同名局部量:既遮蔽判据本身、
215+
// 又正是 M-6 那条「就地内联 ⇒ 容易写成自引用恒真」的老路)。
216+
expect(inRightRegion(at), "dock 装配点的第一次出现在 right 正文区间之外(即被挪去别处)").toBe(true);
217+
// 双向对照(收口评审 M-6 的修法):同一区间判定必须**两侧都能红** ——
218+
// 真侧 = 由独立证据定位的**区间内**下标(dock 标记的首次出现;其「只有一处」已由上行钉住);
219+
// 假侧 = 两个**与区间端点无关、可独立证明落在区间外**的下标:文件起点 `0`、文件长度 `APP.length`。
220+
// (右侧**不用** `RIGHT_SLOT_AT + RIGHT_SLOT.length`:那正是端点自己,会退回「自引用」形态。)
221+
// ⚠️ 反面教材:写成 `expect(RIGHT_SLOT_AT >= RIGHT_SLOT_AT && …).toBe(true)`(`x >= x` 恒真)时,
222+
// 它实际只断言了 `RIGHT_SLOT.length > 0`(已被 ① 的 `> 200` 覆盖)⇒ 没有证明「区间判定不是全真」。
223+
expect(inRightRegion(at), "区间判定必须对区间内的真实下标为真(真侧)").toBe(true);
224+
expect(inRightRegion(0), "文件起点 0 不可能落在 right 正文区间内(假侧 · 独立下标 0)").toBe(false);
225+
expect(inRightRegion(APP.length), "文件长度下标必然越界,必须在区间外(假侧 · 独立下标 APP.length)").toBe(false);
210226
});
211227
});
212228

‎docs/adr/README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
| ADR-031 | [采集暂停来源状态机与前台自动暂停(修订 ADR-013 决策 2 边沿语义)](./ADR-031-capture-pause-source-state-machine.md) | 已接受(v0.20.7 批 2a/2b) | 2026-09-09 |
3838
| ADR-032 | [前端设计系统与 token 层落地(`--ed-` 前缀单源生成 · 纸墨双档色阶 · 四档墨度的可及性裁决 · z-index 六档 · 自绘线性图标)](./ADR-032-frontend-design-system-tokens.md) | 已接受 | 2026-09-11 |
3939
| ADR-033 | [L1 原语层与视图层契约(9 类原语落点 · 依赖方向 · CSS 类交互态 · `[data-phase]` 动效接缝 · 退场指针门控 · 弹层唯一实现 · 阴影定值与 `--due` 二次修正)](./ADR-033-l1-primitives-and-view-layer-contract.md) | 已接受(批 0-D 落地) | 2026-09-11 |
40+
| ADR-034 | [L2 壳层契约(导航注册表 · 列契约 · 断点单一真源 · 窗口尺寸与 `--nav-h` · 溢出两级 · 六档 z-index)](./ADR-034-l2-shell-navigation-and-column-contract.md) | 已接受(批 4 开工前补写,决策本体是批 3 的 A1–A7) | 2026-09-12 |
4041

4142
## 编号规则
4243

0 commit comments

Comments
 (0)