归档本轮 P0/P1 bug 修复、设计审查迁移、AI selection scope 收口与 stream contract 调整,并保留当前 05 主线迁移起点。
133 lines
5.4 KiB
Markdown
133 lines
5.4 KiB
Markdown
# 5-9-C12 [done][bug] 文档页顶栏左上角切换侧栏按钮无效 v1
|
||
|
||
> 更新时间:2026-05-18(代码修复)
|
||
>
|
||
> 分类归属:
|
||
> - `05-editor-mainline/done`
|
||
> - 对应体验主线:`5-9 Wolai-aline continuous checklist`
|
||
>
|
||
> 关联文档:
|
||
> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-9-wolai-aline-continuous-checklist-v1.md`
|
||
> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-7-wolai-page-tree-main-editor-experience-restoration-v1.md`
|
||
> - `/mnt/Data1T/mnote/design/04-tree-domain/done/4-2-sidebar-pagetree-filetree-product-interaction-contract-v1.md`
|
||
|
||
## 1. 问题定义
|
||
|
||
当前 `3000` 文档页顶部左上角的 `切换侧栏` 按钮可以被点击,但点击后左侧 sidebar 没有收起,再次点击也没有重新展开的状态变化。
|
||
|
||
这不是页面树节点的展开/折叠问题,而是文档页壳层的 `sidebar shell toggle` 缺失。
|
||
|
||
## 2. 归类理由
|
||
|
||
本问题归到 `05-editor-mainline`,而不是 `04-tree-domain`,理由如下:
|
||
|
||
- 问题入口位于文档页顶栏,不在 `page_tree/file_tree` 行内交互层。
|
||
- 问题影响的是页面壳、顶栏和侧栏显隐体验,属于 `Wolai 页面树与主编辑器体验复刻` 主线。
|
||
- `04-tree-domain` 更关注树 projection、row model、selection/focus、keyboard、DnD、tree command 等合同;本文问题不在这些运行时合同里。
|
||
|
||
## 3. 真实现象
|
||
|
||
复现路径:
|
||
|
||
1. 打开 `http://127.0.0.1:3000/auth`
|
||
2. 点击 `测试账号快速登录`
|
||
3. 进入文档页后,点击顶栏左上角 `切换侧栏`
|
||
4. 观察左侧 sidebar 是否收起
|
||
5. 再点击一次,观察是否重新展开
|
||
|
||
实际结果:
|
||
|
||
- 第 1 次点击后,左侧 sidebar 仍然完整可见
|
||
- 第 2 次点击后,左侧 sidebar 仍然完整可见
|
||
- 页面 URL 不变
|
||
- 浏览器 console 未出现报错
|
||
- 关键 network 未出现与 toggle 对应的新请求
|
||
|
||
期望结果:
|
||
|
||
- 第 1 次点击应收起左侧 sidebar
|
||
- 第 2 次点击应恢复展开
|
||
- 行为应与 Wolai / 常规文档页壳的 sidebar toggle 一致
|
||
|
||
## 4. 证据
|
||
|
||
截图证据:
|
||
|
||
- 切换前:`/mnt/Data1T/mnote/tmp/hermes-tester/manual-before-toggle.png`
|
||
- 点击一次后:`/mnt/Data1T/mnote/tmp/hermes-tester/manual-after-toggle.png`
|
||
- 点击两次后:`/mnt/Data1T/mnote/tmp/hermes-tester/manual-after-second-toggle.png`
|
||
|
||
Hermes tester 首轮取证:
|
||
|
||
- `/mnt/Data1T/mnote/tmp/hermes-tester/first-run/screenshots/01-auth-entry.png`
|
||
- `/mnt/Data1T/mnote/tmp/hermes-tester/first-run/screenshots/02-after-quick-login.png`
|
||
|
||
窄范围侧栏取证:
|
||
|
||
- `/mnt/Data1T/mnote/tmp/hermes-tester/sidebar-run/01-auth.png`
|
||
- `/mnt/Data1T/mnote/tmp/hermes-tester/sidebar-run/02-after-login-before-toggle.png`
|
||
|
||
代码锚点:
|
||
|
||
- 顶栏按钮渲染位于 `/mnt/Data1T/mnote/rust/crates/mnote-web/src/ssr/pages/layout.rs:3938`
|
||
- 当前仅能找到按钮渲染与样式,未看到对应的显隐切换绑定:
|
||
- `/mnt/Data1T/mnote/rust/crates/mnote-web/src/ssr/pages/layout.rs:3938`
|
||
- `/mnt/Data1T/mnote/rust/crates/mnote-web/src/ssr/styles.rs:1940`
|
||
|
||
## 5. 当前判断
|
||
|
||
当前更像是:
|
||
|
||
- 顶栏按钮已经进入 SSR 页面壳
|
||
- 但 `sidebar open/collapsed` 状态未接线
|
||
- 或按钮没有绑定到实际的 sidebar toggle handler
|
||
|
||
也就是说,这是一条“控件已渲染,但未驱动真实状态”的缺陷,而不是视觉误差。
|
||
|
||
## 6. 建议完成方式
|
||
|
||
完成本缺陷至少需要满足下面四条:
|
||
|
||
1. 顶栏 `切换侧栏` 按钮绑定真实的 sidebar toggle 状态
|
||
2. 第 1 次点击后 sidebar 收起
|
||
3. 第 2 次点击后 sidebar 再展开
|
||
4. 增补可回归 smoke,覆盖:
|
||
- 登录后点击 toggle
|
||
- 收起态存在明确 DOM/样式状态
|
||
- 再次点击后恢复展开
|
||
|
||
建议验收同时包含:
|
||
|
||
- 代码验证:相关 Rust SSR / 前端状态接线
|
||
- 浏览器 smoke:真实点击与状态断言
|
||
- 截图复核:收起前 / 收起后 / 再展开后三张图
|
||
|
||
## 7. 流转条件
|
||
|
||
当前状态:`done`
|
||
|
||
只有在以下条件都满足后,本文才能移动到 `bugs/05-editor-mainline/done/`:
|
||
|
||
1. 真实代码已修复
|
||
2. smoke 已覆盖且通过
|
||
3. 浏览器复测确认收起/展开都生效
|
||
4. 证据路径已补齐到修复后的截图或日志
|
||
|
||
## 8. 修复记录
|
||
|
||
- [layout.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/ssr/pages/layout.rs:67) 新增 `toggleWorkspaceSidebar`,点击后切换 shell 的 `data-mnote-sidebar-collapsed` 状态,并同步 `documentElement` 观测属性。
|
||
- [layout.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/ssr/pages/layout.rs:6167) 全局 click handler 接入 `data-mnote-action="toggle-sidebar"`。
|
||
- [layout.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/ssr/pages/layout.rs:7336) 顶栏菜单按钮补齐 `data-mnote-action="toggle-sidebar"`、`data-testid="wolai-sidebar-toggle"` 与 `aria-pressed`。
|
||
- [styles.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/ssr/styles.rs:224) `data-mnote-sidebar-collapsed="true"` 时隐藏 sidebar,让主编辑区占满空间。
|
||
|
||
## 9. 验证
|
||
|
||
- `cargo test --manifest-path rust/Cargo.toml -p mnote-web page_layout_sidebar_toggle_is_wired_to_shell_state -- --nocapture`
|
||
- 结果:1 passed
|
||
- `cargo test --manifest-path rust/Cargo.toml -p mnote-web ssr::pages::layout::tests -- --nocapture`
|
||
- 结果:14 passed
|
||
- `cargo test --manifest-path rust/Cargo.toml -p mnote-web ssr::styles::tests -- --nocapture`
|
||
- 结果:7 passed
|
||
|
||
说明:本轮完成了代码接线与 SSR/CSS 合同验证;浏览器截图复核可在后续统一 smoke 中补充。
|