From 09b32ffb52d4260a64a5b1ac8feb2c6496a7cfa7 Mon Sep 17 00:00:00 2001
From: SakuraRed <86900315+SakuraRed@users.noreply.github.com>
Date: Sun, 13 Sep 2026 05:11:39 +0800
Subject: [PATCH 1/2] feat: align workbench navigation and reference browsing
---
CONTEXT.md | 59 +++++
README.md | 36 ++--
docs/ARCHITECTURE.md | 35 +++
docs/AUDIT-2026-09-11.md | 70 ++++++
docs/CURRENT-STATE.md | 39 ++++
docs/DDD-PLAN.md | 24 +++
docs/DECISIONS.md | 22 ++
docs/EXECUTION-PLAN.md | 14 ++
docs/EXECUTION-PROGRESS.md | 9 +
docs/IMPLEMENTATION-ORDER.md | 10 +
docs/LEGACY-PRD-COVERAGE.md | 120 +++++++++++
docs/REVIEW-SUMMARY.md | 12 ++
docs/UIUX-DIRECTION.md | 28 +++
docs/VERIFICATION-2026-09-12.md | 180 ++++++++++++++++
docs/WORKBENCH-ACCEPTANCE.md | 63 ++++++
docs/academic.md | 20 +-
docs/assets/workbench/archive-125.jpg | Bin 0 -> 92399 bytes
docs/assets/workbench/dark.jpg | Bin 0 -> 89860 bytes
docs/assets/workbench/reference-action.jpg | Bin 0 -> 100675 bytes
docs/assets/workbench/writing.jpg | Bin 0 -> 118038 bytes
docs/creative.md | 18 +-
docs/diff-merge.md | 13 +-
docs/editor.md | 14 +-
docs/export.md | 13 +-
docs/git.md | 17 +-
docs/github.md | 6 +-
docs/graph.md | 9 +-
docs/index.md | 16 +-
docs/links.md | 24 ++-
docs/math.md | 7 +-
docs/modes.md | 14 +-
docs/projects.md | 2 +
docs/reading.md | 23 +-
docs/shortcuts.md | 17 +-
docs/simple-mode.md | 4 +-
docs/specs/AUTOMATION.md | 31 ++-
docs/specs/workbench-ux.feature | 57 +++++
docs/update.md | 10 +-
docs/writing.md | 8 +-
scripts/acceptance/bindings.mjs | 9 +-
scripts/acceptance/workbench-bindings.mjs | 50 +++++
specs/01-workbench.spec.md | 65 +++---
specs/03-live-preview-ime.spec.md | 46 ++--
specs/README.md | 5 +
src/academic/useReferenceLibrary.test.tsx | 49 +++++
src/academic/useReferenceLibrary.ts | 57 +++++
src/components/projects/ProjectRail.test.tsx | 30 +++
src/components/projects/ProjectRail.tsx | 21 +-
src/components/settings/settingsSections.tsx | 19 +-
src/components/workbench/CentralArea.tsx | 23 +-
src/components/workbench/EditorTabs.test.tsx | 203 +++++++++++++++---
src/components/workbench/EditorTabs.tsx | 123 +++++------
src/components/workbench/ModeIndicator.tsx | 27 ++-
src/components/workbench/OutlinePanel.tsx | 9 +-
src/components/workbench/PanelTabs.test.tsx | 177 +++++++++++++++
src/components/workbench/PanelTabs.tsx | 37 +++-
src/components/workbench/ProjectOverview.tsx | 30 +++
.../workbench/ProjectVersions.test.tsx | 36 ++++
src/components/workbench/ProjectVersions.tsx | 32 +++
src/components/workbench/RightPanel.test.tsx | 12 ++
src/components/workbench/RightPanel.tsx | 12 +-
src/components/workbench/Sidebar.tsx | 6 +-
src/components/workbench/StatusBar.tsx | 1 -
src/components/workbench/WorkbenchLayout.tsx | 2 +
.../workbench/Workspace.integration.test.tsx | 60 ++++++
.../workbench/WorkspaceNavigation.test.tsx | 47 ++++
.../workbench/WorkspaceNavigation.tsx | 39 ++++
.../workbench/ZoteroLibraryPanel.test.tsx | 9 +-
.../workbench/ZoteroLibraryPanel.tsx | 173 +++++----------
src/components/workbench/layoutPatch.test.ts | 7 +-
src/components/workbench/workbench.css | 67 ++++++
src/editor/academicActions.ts | 5 +-
src/editor/fileOpenFlow.ts | 3 +
src/stores/effectiveCentralView.ts | 2 +-
src/stores/useWorkbenchStore.ts | 3 +
src/styles/base.css | 11 +-
src/styles/material.css | 26 ++-
src/styles/theme.css | 48 +++--
src/styles/theme.test.ts | 6 +-
src/types/workbench.ts | 6 +-
80 files changed, 2181 insertions(+), 456 deletions(-)
create mode 100644 CONTEXT.md
create mode 100644 docs/ARCHITECTURE.md
create mode 100644 docs/AUDIT-2026-09-11.md
create mode 100644 docs/CURRENT-STATE.md
create mode 100644 docs/DDD-PLAN.md
create mode 100644 docs/DECISIONS.md
create mode 100644 docs/EXECUTION-PLAN.md
create mode 100644 docs/EXECUTION-PROGRESS.md
create mode 100644 docs/IMPLEMENTATION-ORDER.md
create mode 100644 docs/LEGACY-PRD-COVERAGE.md
create mode 100644 docs/REVIEW-SUMMARY.md
create mode 100644 docs/UIUX-DIRECTION.md
create mode 100644 docs/VERIFICATION-2026-09-12.md
create mode 100644 docs/WORKBENCH-ACCEPTANCE.md
create mode 100644 docs/assets/workbench/archive-125.jpg
create mode 100644 docs/assets/workbench/dark.jpg
create mode 100644 docs/assets/workbench/reference-action.jpg
create mode 100644 docs/assets/workbench/writing.jpg
create mode 100644 docs/specs/workbench-ux.feature
create mode 100644 scripts/acceptance/workbench-bindings.mjs
create mode 100644 specs/README.md
create mode 100644 src/academic/useReferenceLibrary.test.tsx
create mode 100644 src/academic/useReferenceLibrary.ts
create mode 100644 src/components/projects/ProjectRail.test.tsx
create mode 100644 src/components/workbench/PanelTabs.test.tsx
create mode 100644 src/components/workbench/ProjectOverview.tsx
create mode 100644 src/components/workbench/ProjectVersions.test.tsx
create mode 100644 src/components/workbench/ProjectVersions.tsx
create mode 100644 src/components/workbench/Workspace.integration.test.tsx
create mode 100644 src/components/workbench/WorkspaceNavigation.test.tsx
create mode 100644 src/components/workbench/WorkspaceNavigation.tsx
diff --git a/CONTEXT.md b/CONTEXT.md
new file mode 100644
index 0000000..25e75f5
--- /dev/null
+++ b/CONTEXT.md
@@ -0,0 +1,59 @@
+# InkStream 领域用语
+
+InkStream 面向日常、学术与长篇创作。以下词汇描述内容及其工作状态。
+
+## 写作与项目
+
+**项目档案(项目)**:关联一个本地内容目录,拥有名称、封面、收藏与独立会话的写作项目。
+_避免_:把项目、最近目录和 Git 仓库当作同一概念。
+
+**内容目录(工作区 / Vault)**:一个项目关联的文件夹及其中的文件;可以不是 Git 仓库。
+
+**项目会话**:项目的已打开文档、恢复正文、选区、滚动位置、写作模式和面板布局记录。
+
+**独立草稿会话**:不归属于某个项目的文稿集合及恢复状态。
+
+**文档**:一份正在编辑或阅读的内容,可以是文件或未指定保存位置的草稿。
+
+**草稿**:尚未指定磁盘保存位置的文档。
+_避免_:与章节完成程度中的“草稿”混用。
+
+**文档标签**:访问当前会话内一份已打开文档的入口。
+
+**未保存**:文稿包含尚未成功写入目标文件的修改。
+
+**未提交**:磁盘修改尚未进入 Git 历史,与未保存是不同状态。
+
+**外部冲突**:未保存文稿与外部程序修改的磁盘版本需要裁决的状态。
+
+## 工作台
+
+**项目轨**:常态显示项目快捷入口及工作台控制的窄栏。
+
+**项目档案浮层**:用于检索、切换和管理项目的临时覆盖区域。
+
+**工作区视图**:用户在项目内选择的工作目的地,包括概览、文稿、文献与版本。
+_避免_:把工作区视图当作文档标签或写作模式。
+
+**项目内导航**:当前项目文件、章节或资料的组织入口。
+
+**上下文工具**:围绕当前文稿显示的大纲、反链、引用、预览、角色资料或场景概要。
+
+**写作模式**:通用、学术、创作三种工具与布局预设,不改变或限制文档格式。
+
+**简易模式**:收起高级能力、保留基础编辑和阅读的选择,与写作模式独立。
+
+## 资料与关联
+
+**文献库**:具有明确身份的参考文献集合;离线副本仍属于该库。
+
+**选中文献**:当前正在查看详情的文献条目;选中本身不代表已插入文稿。
+
+**引用**:文稿对某个文献条目的引用标记及解析结果。
+
+**Codex**:项目中的角色、地点与设定资料集合。
+_避免_:与开发 InkStream 的 Codex 工具混用。
+
+**双向链接**:文档引用其他文档、标题或文本块,并可从目标反查来源的关系。
+
+**索引**:从源文件派生的可重建检索资料,不是正文的权威副本。
diff --git a/README.md b/README.md
index c03532c..9beb991 100644
--- a/README.md
+++ b/README.md
@@ -35,7 +35,7 @@
---
-**InkStream(墨流)** 是一款基于 Tauri 2 的桌面写作应用。它只用一个 CodeMirror 6 编辑器,提供 Standard(通用)、Academic(学术)、Creative(长篇创作)三种模式;git 版本管理、双向链接、Zotero 引用和 Typst / LaTeX / KaTeX 数学渲染都内置在应用里,而不是交给一堆插件。
+**InkStream(墨流)** 是一款基于 Tauri 2 的桌面写作应用。它以 CodeMirror 6 承载主文档编辑,提供 Standard(通用)、Academic(学术)、Creative(长篇创作)三种模式;git 版本管理、双向链接、Zotero 引用和 Typst / LaTeX / KaTeX 数学渲染都内置在应用里,而不是交给一堆插件。
如果要一句话概括,它想成为文本编辑器里的 IntelliJ:纯文本的简单,配上 IDE 级的工具。
@@ -55,26 +55,26 @@
## 特性
-- **单一内核编辑器**:整个应用就一个 CodeMirror 6 实例,纯文本始终是文档的依据。Source 和 Live Preview 随时切换,光标所在行自动展开源码,支持 11 种语言高亮。
+- **单一内核编辑器**:主文档共用一个 CodeMirror 6 编辑视图,纯文本始终是文档的依据。Source 和 Live Preview 可切换,光标所在行展开源码;大文档默认进入基础编辑,可手动启用完整排版。表格单元格、公式和只读比较按需使用独立视图。
- **本机项目档案**:`Ctrl+Alt+P` 打开左侧档案,管理名称、封面、收藏和内容目录。每个项目记住标签、光标与布局;独立草稿也会暂存在本机。切换前保存失败会留在原项目。详见[项目与恢复](docs/projects.md)。
- **三类数学块**:math 走 KaTeX,typst 走 typst.ts(wasm 实时 SVG),latex 走 MathJax。都是懒加载,首屏不碰 wasm 和字体。
- **双向链接知识网络**:`[[wiki-link]]` 支持别名、标题与块定位,SQLite FTS5 索引保存在本机应用数据目录,并支持一至两个字符的短词查找;反链面板列出有上下文的未链接提及。
- **知识图谱**:`Ctrl+G` 打开全库 Graph View,d3-force 力导加 Canvas2D 自绘,布局放到 Worker 里跑。可缩放、拖拽、点击跳转、邻域高亮;右栏能看当前文件的局部图谱。
-- **git 原生**:基于 libgit2 的完整命令集,自绘三栏 git-graph(图谱、提交详情、文件 diff)。支持远程 clone / fetch / push / pull 和 SSH 签名提交。
+- **git 版本管理**:本地操作结合 libgit2 与系统 Git,自绘三栏 git-graph(图谱、提交详情、文件 diff)。提供克隆对话框、fetch / push / pull、本地变基、暂存记录管理和分支完整正文比较,提交支持 SSH 签名。
- **句级 diff 与三向合并**:中英混排按句子比较,看的是「哪句话改了」而不是「哪行变了」。合并冲突可以逐句采纳本方或对方。
- **Zotero 集成**:CAYW 一键插入 `[@citekey]`,Web API 离线缓存,GB/T 7714 / APA / Vancouver 参考文献,引用与 Typst / LaTeX 联动。
-- **GitHub 集成**:PAT 或 gh CLI 登录(token 存进系统钥匙串,不进前端),浏览、评论、创建 Issue 和 PR,内嵌 diff 审阅。
+- **GitHub 集成**:PAT、现有 gh CLI 凭据或配置了 Client ID 的设备授权登录(token 存进系统凭据库,不进前端),浏览、评论、创建 Issue 和 PR,内嵌 diff 审阅与讨论回复。
- **创作模式**:章节场景树(带状态色点和字数)、`Codex/` 角色与设定卡(别名提及高亮、悬停预览)、Focus Mode、今日字数目标、场景概要。
- **写作辅助**:打字机模式让光标行居中,专注模式淡化其余段落,写作 HUD 记码字速度、码字时间和番茄钟。默认都关着,只存在内存里。
- **文件导出**:一键把当前文档导出成 HTML、PDF、DOCX,全本地转换;可加一行自定义水印(默认关)。装了 pandoc 还能导出 ODT、LaTeX、EPUB 等。
-- **沉浸阅读模式**:打开 txt、docx、epub、pdf 全屏阅读,自动认出小说还是文献并换排版,三套配色护眼。PDF 逐页懒渲染,编辑器不卸载,随时切回来。
+- **沉浸阅读模式**:txt、Markdown、docx、epub、pdf 可进入阅读视图;文本阅读提供文体识别、排版、目录、书签与续读,PDF 逐页懒渲染。书架可按设置启用,编辑器不卸载,随时切回来。
- **应用内自动更新**:启动时静默检查新版本,一键下载并重启升级,更新包经签名验证。
- **简易模式**:一键收起高级功能并关闭索引,保留写作、项目档案和草稿恢复。所有模式都不向内容目录写入新的项目元数据或索引库。
-- **中文优先**:中文输入法全程不被预览打断,中英混合字数统计,中文模糊搜索。
+- **中文优先**:组合输入期间暂停会干扰输入的预览更新,提供中英混合字数统计和中文模糊搜索;物理输入法的候选窗与连续上屏仍按[真机回归清单](specs/03-live-preview-ime.spec.md)验收。
## 下载安装
-前往 **[Releases](https://github.com/KRPCT/InkStream/releases/latest)** 下载对应平台安装包:
+**[2.0.0 已公开发布](https://github.com/KRPCT/InkStream/releases/tag/v2.0.0)**。前往 **[Releases](https://github.com/KRPCT/InkStream/releases/latest)** 下载对应平台安装包:
| 平台 | 安装包 |
|------|--------|
@@ -88,11 +88,13 @@
三模式 = UI 布局预设 + 默认功能集 + 状态栏指标。不限制文件内容、不绑定文件格式,随时切换不丢数据。
-| 模式 | 定位 | 强调色 | 特色 |
-|------|------|--------|------|
-| Standard | 通用文本编辑 | 石墨灰 | 文件树、大纲 / 反链 / 局部图谱、Live Preview |
-| Academic | 学术写作 | 学院深蓝 | Zotero 文献库、Citation Panel、Typst 预览、学术工具栏 |
-| Creative | 长篇创作 | 朱砂红 | 章节导航树、Codex、Focus Mode、字数目标进度 |
+| 模式 | 定位 | 特色 |
+|------|------|------|
+| Standard | 通用文本编辑 | 文件树、大纲 / 反链 / 局部图谱、Live Preview |
+| Academic | 学术写作 | Zotero 文献库、引用面板、Typst 预览、学术工具栏 |
+| Creative | 长篇创作 | 章节导航树、Codex、专注模式、字数目标进度 |
+
+多栏分支统一采用纸白、石墨灰和低饱和灰绿,提供概览/文稿/文献/版本导航、多个项目快捷入口,以及先看详情再明确插入的引用流程。发布与验证范围见[当前状态](docs/CURRENT-STATE.md),真实窗口观察见 [ComputerUse 验收](docs/WORKBENCH-ACCEPTANCE.md)。
## 技术栈
@@ -115,18 +117,20 @@
```bash
corepack enable
-pnpm install # 精确版本锁定
+pnpm install --frozen-lockfile
pnpm tauri dev # 开发模式启动桌面应用
pnpm tauri build # 打包本平台安装包(产物在 src-tauri/target/release/bundle/)
```
-本地检查:`pnpm typecheck`、`pnpm lint`、`pnpm test:ci`、`pnpm build`。`test:ci` 串行执行全部前端测试,保留每项测试的原有时限,记录进程清理与结果,避免大文档测试和其他 jsdom 实例争用资源。原生测试运行 `node scripts/acceptance/run-rust.mjs`。Linux 构建需先安装 webkit2gtk 等系统依赖(清单见 [.github/workflows/ci.yml](./.github/workflows/ci.yml));三平台安装包经 [.github/workflows/release.yml](./.github/workflows/release.yml) 在 CI 同时构建。
+本地检查:`pnpm typecheck`、`pnpm lint`、`pnpm test:ci`、`pnpm build`。`test:ci` 将功能测试与两份大文档性能测试分阶段串行执行,保留测试自身时限,记录结果与进程清理。原生入口 `node scripts/acceptance/run-rust.mjs` 执行 `cargo test --locked --manifest-path src-tauri/Cargo.toml --all-targets -- --test-threads=1`,覆盖库与应用二进制的编译和测试;CI 不再单独执行 `cargo check`。Unix 权限负控通过独立 runner 执行。
+
+`pnpm test:acceptance` 只运行人工映射的 Vitest 检查,不解释 Gherkin,不能据此宣称全部 BDD 场景通过。执行范围、硬超时和证据边界见 [BDD 自动化绑定状态](docs/specs/AUTOMATION.md)。Linux 系统依赖和三平台检查步骤见 [CI 配置](./.github/workflows/ci.yml)。[Release 工作流](./.github/workflows/release.yml)负责打包;标签发布在更新包签名与 `latest.json` 聚合完成后公开,手动触发仅上传构建产物,不创建公开 Release。打包成功不代替产品验收。
## 路线图
-v1 的 12 个阶段已经全部做完:三模式 Workbench、CM6 单内核与多语言高亮、Live Preview、FTS5 索引与双向链接、三类数学块、git 与 git-graph、句级 diff、Zotero 与学术模式、创作模式、知识图谱、GitHub 集成,以及三向合并和跨平台打包发布。
+2.0.0 已包含三模式工作台、本机项目与草稿恢复、编辑与索引、Git/GitHub、学术与创作、阅读与导出等功能。实现状态和发布状态分别记录;历史阶段的实现结束不表示所有验收结束。
-v1.1 之后又陆续加了简易模式、写作模式升级(打字机 / 专注 / 写作 HUD)、文件导出(含 pandoc 多格式)、沉浸阅读模式,还有应用内自动更新。
+2.0.0 对应 PR #40 已合并到 `main`(`ca4c214`),合并前 CI、main CI 与 Release 工作流均成功。外部真实账号、物理 IME、跨平台完整视觉与性能验证仍有开放事项,见 [Issues](https://github.com/KRPCT/InkStream/issues)及[验收边界](docs/specs/AUTOMATION.md)。
还想做的:
diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md
new file mode 100644
index 0000000..3230cff
--- /dev/null
+++ b/docs/ARCHITECTURE.md
@@ -0,0 +1,35 @@
+# 架构现状与工作台边界
+
+基线:2.0.0 / main `ca4c214`,2026-09-13。发布与验收状态统一见 [CURRENT-STATE](CURRENT-STATE.md)。
+
+| 职责 | 实现入口 | 权威边界 |
+| --- | --- | --- |
+| 文档编辑 | `src/editor/documentSession.ts`、`editorState.ts`、`useCodeMirror.ts` | 主 EditorView 与文档缓存持有正文、选区、撤销;标签 store 是镜像 |
+| 保存/文件身份 | `src/stores/autosave.ts`、编辑 flows、`src-tauri/src/files/` | 按身份和修订承认写入;失败保留文稿,旧结果不清新修改 |
+| 项目会话 | `src/projects/session.ts`、`src-tauri/src/projects/` | 协调保存、快照、打开和恢复,每窗口一个活动项目 |
+| 项目操作 | `src/projects/actions.ts`、`src/ipc/projects.ts` | UI 经既有入口添加、切换、改名、重新定位及恢复 |
+| 工作台 | `useWorkbenchStore`、`effectiveCentralView`、`WorkbenchLayout` | 视图、模式、布局与能力降级,不拥有正文或保存裁决 |
+| 索引/关系 | `src/ipc/index*`、`src-tauri/src/index*`、`src/graph/` | 本机可重建派生数据,查询带项目/工作区归属 |
+| Git | `src-tauri/src/git/`、Git flows/stores | 仓库状态、操作与恢复,Git 根独立于内容目录 |
+| 文献 | `src/academic/useReferenceLibrary.ts`、`src/ipc/zotero.ts`、引用/CSL | 库身份和游标隔离;选择条目只看资料,明确插入才改正文 |
+| 创作 | Codex、章节树、场景概要、写作指标 | 用户文件为资料源,经既有文档入口编辑 |
+
+## 编辑器与多栏
+
+主编辑器持续挂载。切换工作区视图可隐藏它,但不重新创建正文实例;摘录/表格辅助视图不是另一份正文权威。新工作台复用现有文档、项目、Git 和引用入口。
+
+项目浮层阻止后台编辑并保留纸面几何。常态项目轨直接切换也遵循保存/会话协议,失败需要让错误可见。导航、文档标签、模式分别表达目的地、文档身份和工具预设。
+
+## 持久化与恢复
+
+项目名称、封面、收藏、会话和索引已位于本机应用数据目录。内容目录保留用户文件,历史 `.inkstream` 未知内容原样保留。会话记录恢复正文、选区、滚动、模式、各模式布局及活动工具;重启不重放撤销历史。
+
+项目协调器负责接受目标会话。布局写回只接受用户调整,拒绝启动恢复、项目切换和缩放产生的中间测量。UI 不直接改写这些协议。
+
+## 本轮 DDD 切面
+
+工作台统一表达概览、文稿、文献和版本,不为相同状态另建平行权威。资料选择与正文插入分离;库切换、失败和过期响应不能串库或误插入。
+
+继续使用 React、CSS token 与 Tauri WebView。窄视口改变呈现,保存的宽度不因临时缩放被覆盖。行为规格先于实现,测试后通过 ComputerUse 操作真实窗口验收。
+
+工作台实现由 `WorkspaceNavigation` 选择目的地,`CentralArea` 组合概览、文献、版本和保活正文。`ProjectVersions` 复用现有 Git 快照,只将复杂操作交给原全宽版本管理。资料浏览 hook 管理库修订和请求代次,插入仍经过可见可写正文命令边界,并形成独立撤销步骤。右栏始终派生可用工具,处理简易模式双向切换;收起的栏保持实例但退出焦点导航。
diff --git a/docs/AUDIT-2026-09-11.md b/docs/AUDIT-2026-09-11.md
new file mode 100644
index 0000000..73c7f93
--- /dev/null
+++ b/docs/AUDIT-2026-09-11.md
@@ -0,0 +1,70 @@
+# 历史记录:AUDIT-2026-09-11.md
+
+此文件保留原日期、原工作树与当时证据。2.0.0 的实现/合并/发布现状见 [CURRENT-STATE](CURRENT-STATE.md);下面“尚未实施/未推送/草稿 PR”等文字是历史状态,不作为当前指令。
+
+
+查看原始历史记录
+
+# InkStream 1.3.0 功能与架构审计
+
+核对日期:2026-09-11;基线 `02e0afa3aab27bf91ce35d0270e8815672d4efde`,已 fetch,开始时与 origin/main 无差异。此次没有修复生产功能,没有变更用户工作区、凭据或系统运行时。
+
+结论:现有技术栈可以继续用于 UIUX 探索,但文档生命周期、工作区和派生数据缺少一致的身份与完成规则。先登记缺陷、明确项目模型和行为,再重做界面。
+
+## 验证证据
+
+- CodeGraph 使用本轮从 npm 核验并隔离安装的 `@colbymchenry/codegraph@1.6.0`,未升级全局配置。完整重建覆盖 521 文件、5,478 节点、17,334 条边。旧索引只有 112 文件、1,025 条未解析引用,不能继续作为完整证据。新原型不属于上述产品基线。
+- 基线 TypeScript 检查通过。
+- 全套 Vitest 串行执行:现有 162 个测试文件、1,366 项测试通过;额外两项临时集成复现失败。总结果为 163 文件中 1 个失败、1,368 项中 2 项失败。临时检查使用真实 EditorTabs、CodeMirror 状态及 autosave,仅替换文件 I/O;已从产品测试目录移出并保留审计证据。
+- 第一轮全套测试的 90 秒上限不足,已回收该进程树;随后在 300 秒硬上限内完成,耗时约 257 秒。不能将第一次超时误记为测试通过。
+- 当前提交的三平台 CI 均失败于两处剪贴板直接导入违规,后续步骤被阻断。[该提交 CI](https://github.com/KRPCT/InkStream/actions/runs/28985293456)
+- 未运行真实磁盘故障注入、真实账户/远程攻击、Rust 测试、三平台桌面构建或原生 IME 验收。除明确注明的两项临时集成复现外,其余缺陷证据来自完整静态调用链。代码证据不等同于真机故障录像。
+
+## 已登记缺陷与改进
+
+P1 为可能破坏文档正确性、跨工作区数据隔离或凭据范围的优先项;P2 为恢复、功能与规范不符合项。每个 issue 有触发条件、证据边界与验收条件;本轮不自动实施。
+
+| 级别 | 问题与影响 | 主要代码证据 | GitHub |
+|---|---|---|---|
+| P1 | 关闭活动标签后正文仍属于旧文档,保存对象却换成新文档;已动态复现身份失配 | `EditorTabs.tsx:33`、`useEditorStore.ts:75`、`editorState.ts:231` | [关闭活动文档一致性](https://github.com/KRPCT/InkStream/issues/2) |
+| P1 | 保存失败/冻结仍关闭;冲突失败误清状态;在途保存误清新修订 dirty;已动态复现失败关闭丢缓冲 | `autosave.ts:118`、`EditorTabs.tsx:45`、`ExternalChangeBar.tsx:52` | [保存结果与修订](https://github.com/KRPCT/InkStream/issues/3) |
+| P1 | 干净后台文档外部更新后仍用旧缓存,可能把磁盘新版本回退 | `externalChange.ts:78`、`editorState.ts:190` | [后台缓存失效](https://github.com/KRPCT/InkStream/issues/4) |
+| P1 | 重命名/移动/删除未同步标签、缓存与写入位置,旧文件可能复活 | `fileTreeOps.ts:95`、`autosave.ts:123` | [文件身份迁移](https://github.com/KRPCT/InkStream/issues/5) |
+| P1 | 乱序切库可混合根/树/查询;失败没有恢复旧 watcher | `vaultFlow.ts:50`、`:114` | [工作区会话](https://github.com/KRPCT/InkStream/issues/6) |
+| P1 | 普通 A→简易→B→普通后保存 B,可把 B 正文写进 A 索引 | `index.rs:34`、`indexService.ts:40`、`useSettingsStore.ts:126` | [索引会话与启停](https://github.com/KRPCT/InkStream/issues/7) |
+| P2 | 关闭高级能力后 overlay 和正文均隐藏,中央区空白 | `WorkbenchLayout.tsx:69`、`CentralArea.tsx:12` | [有效导航](https://github.com/KRPCT/InkStream/issues/8) |
+| P1 | GitHub PAT 可作为第三方 HTTPS Git 认证凭据 | `git/remote.rs:18`、`:123` | [凭据主机范围](https://github.com/KRPCT/InkStream/issues/9) |
+| P2 | Zotero 换账户仍共用旧数据与 library_version | `zotero_sync.rs:99`、`:115`、`:166` | [文献库分区](https://github.com/KRPCT/InkStream/issues/10) |
+| P2 | 删除同步失败/分页版本改变仍推进 Zotero 游标 | `zotero_sync.rs:208`、`:228` | [同步提交](https://github.com/KRPCT/InkStream/issues/11) |
+| P2 | Unix 原子写 temp+rename 未保留目标权限 | `files.rs:61` | [文件权限](https://github.com/KRPCT/InkStream/issues/12) |
+| P2 | 代码示例中的 wiki-link 被计入知识网络 | `index.rs:368`、`livepreview/wikiLink.ts:27` | [链接上下文契约](https://github.com/KRPCT/InkStream/issues/13) |
+| P2 | >1MB Channel 声明未落实,最高 100MB 二进制可整块 invoke;未声称测得 OOM | `files.rs:20`、`:136`、`src/ipc/README.md` | [传输与响应性](https://github.com/KRPCT/InkStream/issues/14) |
+| P2 | 编辑命令及测试直接导入 Tauri clipboard,违反现行 IPC 规则 | `editCommands.ts:3`、`editCommands.test.ts:4` | [恢复 CI](https://github.com/KRPCT/InkStream/issues/15) |
+| P2 | 前端放行 Markdown 阅读,Rust 字节读取白名单拒绝 md/markdown | `reading/openReading.ts:14`、`reading/loadContent.ts:37`、`files.rs:148` | [Markdown 阅读契约](https://github.com/KRPCT/InkStream/issues/20) |
+| P2 | Git 远程模式与自定义服务器设置只持久化,执行路径未读取 | `settingsSections.tsx:276`、`useSettingsStore.ts:124` 与远程执行引用核对 | [远程设置生效](https://github.com/KRPCT/InkStream/issues/21) |
+| P2 | 同名候选丢失路径身份;标题/块标记未用于精确定位 | `wikiLinkComplete.ts:32`、`wikiTarget.ts:16` | [精确链接目标](https://github.com/KRPCT/InkStream/issues/23) |
+| P2 | 关系面板不随索引提交刷新,查询失败可显示为空结果 | `BacklinksPanel.tsx:58`、`indexService.ts` 查询失败路径 | [关系结果的新鲜度与错误](https://github.com/KRPCT/InkStream/issues/24) |
+
+## 设计漂移与尚未裁定事项
+
+旧 PRD 为 v0.2 草案,当前代码为 1.3.0。ORACLE、UI-SPEC、ROADMAP 的旧根引用已失效;Octokit/Device Flow、完整 git2 命令集与现实现不同。rebase 缺失、clone 未有前端入口、反链缺段落上下文,均需要决定“补齐或调整范围”,不能擅自全部列为必须新建的功能。
+
+“全应用一个 CodeMirror 实例”与已有摘录/表格辅助编辑视图不符。应先确认文档内容权威与回写规则,不能用实例数量证明不会丢数据。最近 20 个目录路径也不等于永久、海量的项目档案系统。
+
+系统 git/pandoc 缺应用级超时/取消是需进一步实验的恢复改进;连接句柄长期占用、特定输入法与材质帧率未在本轮得到运行证据,不列为已复现事故。
+
+## 重构前的架构判断
+
+优先深化 DocumentSession,把正文身份、修订、保存结果、关闭与外部冲突放到同一可验收 interface。其次是 WorkspaceSession,协调切换目标、监听与索引生命周期;再收敛 WorkbenchNavigation 的有效视图。全部是待讨论候选,不是已经批准的新接口。
+
+React/Tauri/CodeMirror 暂时保留,CSS 为材质原型的起点。真正折射、虚拟化数量、三平台帧率与可访问性预算需要后续明确指标;本轮视觉样例只回答布局与材料方向。
+
+## 决策入口
+
+[UIUX 重构决策地图](https://github.com/KRPCT/InkStream/issues/16) 使用原生子 issue;[文档与开发范围确认](https://github.com/KRPCT/InkStream/issues/19) 原生依赖于[项目含义](https://github.com/KRPCT/InkStream/issues/17)和[原型布局比较](https://github.com/KRPCT/InkStream/issues/18)。未获得用户回答的票据保持开放。
+
+第一轮已完成项目含义裁定;会话、记录位置与后续轮次保存在[项目切换与记录位置](https://github.com/KRPCT/InkStream/issues/22)。用户进一步要求先补齐旧 PRD 的全部 v1 用户功能并验收,之后才正式重构 UI;覆盖表见 [LEGACY-PRD-COVERAGE.md](LEGACY-PRD-COVERAGE.md)。18 个缺陷/改进票据不替代全部旧功能的验收清单。
+
+用户已整体确认记录并进入DDD/BDD计划,相关方向决策票已关闭;[旧v1功能验收](https://github.com/KRPCT/InkStream/issues/25)与缺陷/功能票仍开放。[光学技术验证](https://github.com/KRPCT/InkStream/issues/39)由旧v1验收阻塞,尚未执行。当前原型类型检查与专用构建通过;浏览器检查了三布局、项目搜索/切换、低透明和档案浮层,浮层前后正文几何一致,浏览器未报告脚本错误。以上不是生产保存、真实折射或原生平台验收。
+
+
diff --git a/docs/CURRENT-STATE.md b/docs/CURRENT-STATE.md
new file mode 100644
index 0000000..28b1b17
--- /dev/null
+++ b/docs/CURRENT-STATE.md
@@ -0,0 +1,39 @@
+# 当前状态与证据
+
+核对日期:2026-09-13。已发布基线为 [InkStream 2.0.0](https://github.com/KRPCT/InkStream/releases/tag/v2.0.0),main 提交 `ca4c214a4d045c4c23da21d0f1fba1a43abdcd58`。分支 `codex/workbench-ux-v2` 已实现多栏对齐,本分支改动尚未发布。
+
+## 已完成并发布
+
+- [PR 40](https://github.com/KRPCT/InkStream/pull/40) 已合并。项目档案、独立会话/草稿、本机索引及文稿/Git/学术流程修复已进入 2.0.0。
+- 图标采用用户选定的双层竖板与墨带 SVG。项目 popup 使用纸白、石墨灰、灰绿,已清理两处装饰英文。
+- 「视图」菜单实时勾选反馈打字机和专注模式,应用内更新公告包含 2.0.0。
+- [合并前 CI](https://github.com/KRPCT/InkStream/actions/runs/34709938076)、[main CI](https://github.com/KRPCT/InkStream/actions/runs/34710877435)、[Release](https://github.com/KRPCT/InkStream/actions/runs/34710891782) 均通过。
+- Windows x64、macOS Apple Silicon、Linux x64 安装包及自动更新清单已发布。自动更新载荷签名不等于操作系统发行者代码签名。
+
+## 尚需专项验收
+
+24 个等待合并的实现票已关闭。以下 11 个专项票仍开放,发布或 CI 通过不取代其验收。
+
+| 范围 | 入口 | 尚需证据 |
+| --- | --- | --- |
+| 大文档 | [响应性契约](https://github.com/KRPCT/InkStream/issues/14) | 代表性输入的端到端耗时与峰值内存 |
+| 整体 v1 | [逐项验收](https://github.com/KRPCT/InkStream/issues/25) | 组合流程、原生输入与平台矩阵 |
+| Typst | [编译与预览](https://github.com/KRPCT/InkStream/issues/26) | 连续编辑、切文档、失败修正的真实渲染 |
+| 文献 | [格式与联动](https://github.com/KRPCT/InkStream/issues/29) | 类型/缺字段矩阵、真实库联动 |
+| 真实账户 | [Device Flow](https://github.com/KRPCT/InkStream/issues/36)、[评论线程](https://github.com/KRPCT/InkStream/issues/37) | OAuth/keyring、真实权限和获授权的发送 |
+| 主题 | [导入与回退](https://github.com/KRPCT/InkStream/issues/38) | 真实主题与新工作台可读性 |
+| 光学与平台 | [CSS/WebGL 与降级](https://github.com/KRPCT/InkStream/issues/39) | 原生 WebView、GPU、缩放及长时表现 |
+| UI | [原型差距](https://github.com/KRPCT/InkStream/issues/41) | 本轮多栏已实现并完成 Windows ComputerUse;严格并排对照和密集项目矩阵继续保留 |
+| 图标/popup | [SVG 图标](https://github.com/KRPCT/InkStream/issues/42)、[项目弹窗](https://github.com/KRPCT/InkStream/issues/43) | 已补 Windows 亮暗工作台/浮层证据;安装图标与完整弹窗矩阵继续保留 |
+
+## 本轮顺序与证据
+
+[任务地图](https://github.com/KRPCT/InkStream/issues/45):文档/issues 同步 → DDD/BDD 多栏实现 → 自动测试 → ComputerUse 用户验收。用户已要求实施;旧“仅规划”“全部外部验收后才做 UI”已被后续指令覆盖。
+
+历史审计、旧计划和旧验证文件只代表各自日期。原型的示例数字与假数据不构成产品事实。Vitest、原生测试、浏览器和 ComputerUse 分别说明边界;ComputerUse 不自动证明物理 IME 或其它系统已通过。
+
+实施工作树为 `D:/Github/InkStream-workbench-v2`;`D:/Github/InkStream` 保留用户测试分支的未提交代码。
+
+## 多栏分支完成状态
+
+已实现项目轨、概览/文稿/文献/版本目的地、文献详情与明确插入、键盘标签导航、布局和显示收敛。1910 项前端断言、41 项显式绑定、类型/Lint/前端/原生构建通过;三轮 ComputerUse 已完成并清理进程。实际截图、发现与修复、证据限制见 [验收记录](WORKBENCH-ACCEPTANCE.md)。此结果属于当前分支,main 和公开 Release 仍为上述 2.0.0 基线。
diff --git a/docs/DDD-PLAN.md b/docs/DDD-PLAN.md
new file mode 100644
index 0000000..487d36d
--- /dev/null
+++ b/docs/DDD-PLAN.md
@@ -0,0 +1,24 @@
+# DDD 工作台演进计划
+
+2026-09-13。2.0.0 的文档会话、项目会话、索引与 Git 修复已合并。本计划描述其后的多栏工作,不把已实现项目档案重新列为未来实体。
+
+## 职责与边界
+
+术语唯一来源为 [CONTEXT](../CONTEXT.md),代码职责见 [ARCHITECTURE](ARCHITECTURE.md)。主编辑器拥有正文,项目协调器拥有切换与恢复,工作台只管理目的地和布局,文献浏览管理只读库快照与资料选择。正文和项目身份不复制到页面私有模型中。
+
+## 纵向切片
+
+| 切片 | 用户结果 | 复用边界 |
+| --- | --- | --- |
+| 项目轨与导航 | 快速选择真实项目,失败保留文稿并可理解原因 | 项目 actions/session,工作台状态 |
+| 概览/文稿/版本 | 查看真实项目资料与 Git 历史,再返回原文稿 | 现有文档与 Git stores/flows |
+| 文献详情 | 选中只浏览,明确插入才改当前文稿 | Zotero 库身份与已有引用编辑入口 |
+| 布局与键盘 | 栏宽、折叠、Tab/方向键和窄视口保持可用 | 现有布局恢复/写回及能力降级 |
+
+每个切片用 Given/When/Then 说明可观察行为,先证明失败,再完成实现。规格与自动检查逐项映射,ComputerUse 是独立用户层验收。未绑定或未执行的场景不能被其它测试通过覆盖。
+
+## 约束
+
+主 EditorView 常驻;视图切换不释放正文或清 dirty。项目切换继续先保存与快照,失败停留。库切换使过期查询和选择失效。缩放不覆盖保存的栏宽。保持当前文件格式与元数据版本,本轮不引入通用 DDD 框架或新的正文数据库。
+
+实施与完成状态统一见 [EXECUTION-PROGRESS](EXECUTION-PROGRESS.md)。原 2026-09-11 计划保存在本地审计源,不作为当前待实施清单。
diff --git a/docs/DECISIONS.md b/docs/DECISIONS.md
new file mode 100644
index 0000000..8daf9f4
--- /dev/null
+++ b/docs/DECISIONS.md
@@ -0,0 +1,22 @@
+# 已确认决定与当前范围
+
+截至 2026-09-13。词汇见 [CONTEXT](../CONTEXT.md),实现状态见 [CURRENT-STATE](CURRENT-STATE.md)。
+
+| 决定 | 当前约束 | 来源 |
+| --- | --- | --- |
+| B+A+C | B 日常写作、A 左侧档案浮层、C 学术资料与正文相邻的工具布局 | [原型选择](https://github.com/KRPCT/InkStream/issues/18) |
+| 项目 | 独立身份关联内容目录,Git 根单独识别,无 Git 可写作 | [项目定义](https://github.com/KRPCT/InkStream/issues/17) |
+| 切换 | 先保存/暂存草稿,失败停留,成功恢复独立会话;每窗口一个活动项目 | [项目会话](https://github.com/KRPCT/InkStream/issues/22) |
+| 数据位置 | 元数据、会话和索引在本机应用数据目录,正文留在内容目录 | 同上 |
+| 材料/配色 | 正文安静纸面;导航/工具可有材料层次;纸白、石墨灰、低饱和灰绿 | 原方向及用户 2026-09-13 选择 |
+| 图标 | 用户最终选择双层竖板与墨带,SVG 路径/渐变重绘 | [图标任务](https://github.com/KRPCT/InkStream/issues/42) |
+| popup | 背景独立重做、清理英文;“仅图标拟物”限定新增拟物改动,不自动撤销整个工作台材料目标 | [弹窗任务](https://github.com/KRPCT/InkStream/issues/43) |
+| 顺序 | 用户已允许先完成本地实现与 UI,真实账号验收独立保留 | 后续交接与发布指令 |
+| 2.0.0 | 已完成合并 main、推送标签和公开发布 | [PR 40](https://github.com/KRPCT/InkStream/pull/40)、[Release](https://github.com/KRPCT/InkStream/releases/tag/v2.0.0) |
+| 本轮 | 先更新文档/issues,按 DDD/BDD 对齐多栏,测试后 ComputerUse 验收 | 当前请求、[任务地图](https://github.com/KRPCT/InkStream/issues/45) |
+
+原型累计字数、目标进度、文献与版本记录是演示数据;产品展示真实状态或明确的空/失败状态。
+
+当前按单一主编辑器与多个工具栏推进。“对齐现有多栏”不自动增加多个文稿同时编辑;新的正文权威或焦点模型需要明确需求。
+
+本轮实现选择:日常版本时间线保留项目导航,高级分支/差异/远端操作仍使用全宽版本管理。新会话采用 220/260px 两侧默认宽度,既有项目记忆不改写。模式菜单使用独立弹出层以兼容状态栏横向滚动;文献详情可滚动,插入操作常驻底部。原生发现与修复见 [验收记录](WORKBENCH-ACCEPTANCE.md)。
diff --git a/docs/EXECUTION-PLAN.md b/docs/EXECUTION-PLAN.md
new file mode 100644
index 0000000..f907413
--- /dev/null
+++ b/docs/EXECUTION-PLAN.md
@@ -0,0 +1,14 @@
+# 多栏工作台执行计划
+
+基线 main / 2.0.0 / ca4c214。工作入口为[任务地图](https://github.com/KRPCT/InkStream/issues/45)。
+
+| 顺序 | 产出 | 完成判据 |
+| --- | --- | --- |
+| 1 | 产品文档、领域词汇、架构、覆盖矩阵与 issues | 逐份审计、过时状态清理、链接有效,保留未验收边界 |
+| 2 | 工作台行为规格与失败测试 | 用户意图、失败恢复和数据不变条件可追溯 |
+| 3 | 多栏导航/概览/文献/版本及布局实现 | 用户动作可到达真实功能,状态与文稿归属一致 |
+| 4 | 自动验证 | 相关测试、类型、lint/build及必要回归真实通过 |
+| 5 | ComputerUse | 实际窗口中完成写作/资料/版本/布局流程,保存截图、结果与限制 |
+| 6 | 文档/issues 收尾 | 只把实际达到判据的任务标记完成,列明未验证项 |
+
+进程盘点、硬超时、串行重任务与回收沿用现有 acceptance runner。用户原测试工作树保留,当前实现位于 InkStream-workbench-v2。新版本合并发布不属于本轮自动步骤。
diff --git a/docs/EXECUTION-PROGRESS.md b/docs/EXECUTION-PROGRESS.md
new file mode 100644
index 0000000..2112372
--- /dev/null
+++ b/docs/EXECUTION-PROGRESS.md
@@ -0,0 +1,9 @@
+# 当前执行进度
+
+2026-09-13。2.0.0 已发布,PR 40 已合并;发布与专项验收边界见 [CURRENT-STATE](CURRENT-STATE.md)。
+
+本轮[多栏工作台对齐](https://github.com/KRPCT/InkStream/issues/45)已完成文档/issue 同步、DDD/BDD 实现、自动测试与三轮 ComputerUse 验收。共审阅 42 份文档,保留 102 条旧需求索引,并逐项同步既有 issues。最终 1910 项前端断言、41 项显式绑定及类型/Lint/前端/原生构建通过。
+
+ComputerUse 发现并修复模式菜单裁剪、退出简易模式的工具空白、窄文献详情操作被挤出视口等问题。最终截图、真实文件回读与进程清理见 [验收记录](WORKBENCH-ACCEPTANCE.md)。物理 IME、真实账号和完整跨平台矩阵仍由原专项票推进,未标成整体 BDD 完成。
+
+当前工作树:D:/Github/InkStream-workbench-v2;分支 codex/workbench-ux-v2。D:/Github/InkStream 保留用户原测试代码与未提交修改;本轮不自动合并 main 或发布新版本。
diff --git a/docs/IMPLEMENTATION-ORDER.md b/docs/IMPLEMENTATION-ORDER.md
new file mode 100644
index 0000000..30eea13
--- /dev/null
+++ b/docs/IMPLEMENTATION-ORDER.md
@@ -0,0 +1,10 @@
+# 当前实施顺序
+
+2026-09-13:2.0.0 已合并发布,旧缺陷实现阶段不再列为未开始。发布与未验收边界见 [CURRENT-STATE](CURRENT-STATE.md)。
+
+1. 完成[文档与 issue 同步](https://github.com/KRPCT/InkStream/issues/46),清理过时事实并保留历史证据。
+2. 完成[多栏 DDD/BDD 实现](https://github.com/KRPCT/InkStream/issues/47):明确导航/文档/工具职责,以用户行为场景和失败测试驱动。
+3. 运行与改动相称的自动检查,按真实失败修复。
+4. 通过 [ComputerUse 用户验收](https://github.com/KRPCT/InkStream/issues/48),记录实际点击、键盘、拖动与写作结果。
+
+真实账户、物理 IME 与跨平台完整矩阵由专项票据推进。当前指令已授权本地 UX 实现,不再以所有外部验收为前置。
diff --git a/docs/LEGACY-PRD-COVERAGE.md b/docs/LEGACY-PRD-COVERAGE.md
new file mode 100644
index 0000000..6c5d1ed
--- /dev/null
+++ b/docs/LEGACY-PRD-COVERAGE.md
@@ -0,0 +1,120 @@
+# 旧 PRD 功能覆盖与验收索引
+
+更新于 2026-09-13,基线 2.0.0。旧审计中的“缺少 rebase/clone/Codex/项目会话”等实现缺口已经合并发布,不能继续当作当前待开发项。原始用户要求的编号与内容保留在下表;状态区分实现与专项验收,不声称 v1 总验收已完成。
+
+| 编号 | 原承诺 | 当前状态与后续 |
+| --- | --- | --- |
+| US-S1 | 新建默认 `.md`,立即输入并 Live Preview | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| US-S2 | 输入 `[[` 出现 vault 模糊候选,选择插入文件名 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| US-S3 | Ctrl+点击 wiki-link 跳转,不存在则提示创建 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| US-S4 | 反链显示来源文件及引用段落 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| US-S5 | Ctrl+G 查看全库链接网络 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| US-A1 | Ctrl+Shift+Z 通过 BBT picker 插入 `[@citekey]` | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| US-A2 | Citation Panel 汇总当前引用,未解析标红 | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| US-A3 | `:::typst` 块实时 SVG,位于块右侧 | 两种 Typst 块、预览和状态已有实现;[真实渲染验收](https://github.com/KRPCT/InkStream/issues/26)保留。 |
+| US-A4 | Insert Bibliography 插入 ``,展开 GB/T 7714/APA/Vancouver | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| US-A5 | 设置 Web API key 后离线阅读文献缓存 | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| US-C1 | 打开项目自动显示章→场景树,带字数及三种状态 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| US-C2 | F11 Focus Mode 淡化非当前段落 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| US-C3 | 设置今日目标 2000,状态栏实时进度 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| US-C4 | 在 Codex 添加角色,提及时高亮并悬停角色卡 | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| US-C5 | Git Graph 比较两个 draft 分支并看句级差异 | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| US-F1 | `/math` 插入块并实时显示 KaTeX | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| US-F2 | typst fenced block 公式实时 SVG | 两种 Typst 块、预览和状态已有实现;[真实渲染验收](https://github.com/KRPCT/InkStream/issues/26)保留。 |
+| US-F3 | LaTeX 公式 Live Preview,并导出 PDF 片段 | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| MODE-01 | Standard/Academic/Creative 随时切换;布局、工具及指标预设;不绑定格式、不丢数据 | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| STD-01 | 按 Git 根展示工作区文件树 | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| STD-02 | 右栏 Outline/Backlinks/Local Graph 三 tab | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| STD-03 | 状态栏显示路径、Git 分支、字数、光标、渲染模式 | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| ACA-01 | 左栏上方 Zotero 同步状态,下方文件树 | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| ACA-02 | 右栏 Citation/Typst Preview/Outline | 两种 Typst 块、预览和状态已有实现;[真实渲染验收](https://github.com/KRPCT/InkStream/issues/26)保留。 |
+| ACA-03 | 学术工具栏:引用、脚注、参考文献、公式编号 | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| ACA-04 | 状态栏:引用数、未解析提示、Typst 编译状态 | 两种 Typst 块、预览和状态已有实现;[真实渲染验收](https://github.com/KRPCT/InkStream/issues/26)保留。 |
+| CRE-01 | 左栏章→场景树含字数/状态 | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| CRE-02 | 右栏 Codex 角色/地点/设定及场景概要 | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| CRE-03 | 编辑器顶部可折叠场景概要卡及 Focus Mode | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| CRE-04 | 状态栏今日字数/目标、章节场景计数、定稿色点 | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| EDIT-01 | 纯文本为权威,渲染不偷换内容 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| EDIT-02 | Source/Live Preview 运行时切换,命令与状态栏一致 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| EDIT-03 | 标题、粗体、列表、链接、fenced、wiki-link、citation 最终样式 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| EDIT-04 | 光标所在行展开源代码 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LANG-01 | Markdown/Obsidian 变体 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LANG-02 | LaTeX | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LANG-03 | Typst | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LANG-04 | JavaScript / TypeScript | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LANG-05 | Python | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LANG-06 | Rust | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LANG-07 | JSON | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LANG-08 | YAML | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LANG-09 | HTML | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LANG-10 | CSS | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LANG-11 | Shell | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| FMT-01 | 新建默认 `.md` + UTF-8 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| FMT-02 | frontmatter `language: markdown/latex/typst/richtext` 整体切语言 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| FMT-03 | richtext 简化 Markdown,B/I/U/链接工具栏,物理仍 Markdown | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| `git_status` | `src-tauri/src/git/status.rs`、`src/ipc/git.ts`、`SidebarGitPanel.tsx` | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_branch_list` | `src-tauri/src/git/branch.rs`、`BranchManager.tsx` | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_log` | `src-tauri/src/git/log.rs`、`graph/CommitGraphList.tsx` | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_diff` | `src-tauri/src/git/diff.rs`、`FileDiffPanel.tsx` | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_commit` | `src-tauri/src/git/commit.rs` 的系统 `git commit -S`、`src/editor/gitActions.ts` | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_checkout` | `src-tauri/src/git/refops.rs`、`BranchManager.tsx`、`GitContextMenu.tsx` | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_merge` | `src-tauri/src/git/commit.rs`、`MergeResolver.tsx` | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_rebase` | `src/types/ipc.ts`、`src-tauri/src/lib.rs` 与 `src-tauri/src/git/` 未见本地 rebase command | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_cherry_pick` | `src-tauri/src/git/commit.rs`、`GitContextMenu.tsx` | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_stash` | `src-tauri/src/git/stash.rs` 提供 save/list/pop/drop,`gitActions.ts` 有 stash 动作 | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_tag` | `src-tauri/src/git/refops.rs` create/delete、`GitContextMenu.tsx` | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_reset` | `src-tauri/src/git/refops.rs` soft/mixed/hard、`GitContextMenu.tsx` | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_clone` | `src-tauri/src/git/remote.rs`、`src/ipc/git.ts:gitClone`;`docs/git.md` 明示无应用内克隆对话框 | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_push` | `src-tauri/src/git/remote.rs`、`src/editor/gitActions.ts` | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_pull` | `src-tauri/src/git/remote.rs` fetch + ff-only merge | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| `git_fetch` | `src-tauri/src/git/remote.rs`、Git 工具条/侧栏 | 补全实现已随 2.0.0 合并,对应实现票已关闭;组合用户流程继续归[总验收](https://github.com/KRPCT/InkStream/issues/25)。 |
+| GRAPH-GIT-01 | 图谱/提交详情/文件 diff 三栏 | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| GRAPH-GIT-02 | 右键菜单驱动所有操作 | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| GRAPH-GIT-03 | Find Widget | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| GRAPH-GIT-04 | Filter Branches | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| GRAPH-GIT-05 | Repository Settings | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| GRAPH-GIT-06 | 点击 commit 在编辑器右侧自动打开 diff | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| GRAPH-GIT-07 | 菜单 View→Git Graph 与 Ctrl+Shift+G | 已有发布功能;本轮对齐多栏呈现和交互,[工作台任务](https://github.com/KRPCT/InkStream/issues/47)记录新增证据。 |
+| GH-01 | OAuth Device Flow 登录 | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| GH-02 | PAT 备用登录 | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| GH-03 | 已登录 gh CLI 备用登录 | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| GH-04 | Issue 浏览、评论、创建 | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| GH-05 | PR 浏览、评论、创建 | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| GH-06 | PR diff 内嵌编辑器 | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| GH-07 | PR review 评论回复 | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| DIFF-01 | 中英句级分词→LCS→段落对齐→语义高亮 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| DIFF-02 | prose-aware 三向冲突解决器 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LINK-01 | wiki-link 基础目标及 alias | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LINK-02 | `#heading` 链接定位 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LINK-03 | `^block-id` 链接定位 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LINK-04 | SQLite FTS5 全库索引 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LINK-05 | 编辑增量索引 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LINK-06 | 反链含未链接提及 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LINK-07 | 全库图谱 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| LINK-08 | 当前文档 Local Graph | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| ZOT-01 | 本地 CAYW HTTP 主路,需 Zotero+BBT | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| ZOT-02 | Web API 增量、离线 SQLite 缓存 | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| ZOT-03 | 命令面板 Cite from Zotero + 引用面板 + Insert Bibliography | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| ZOT-04 | Typst `#cite()` / LaTeX `\cite{}` 自动联动 | 已有发布实现;真实账户/文献矩阵见 [文献](https://github.com/KRPCT/InkStream/issues/29)、[登录](https://github.com/KRPCT/InkStream/issues/36)、[评论](https://github.com/KRPCT/InkStream/issues/37)。 |
+| USER-01 | §1:研究者可在一 App 完成引用、公式、Git 多稿及 Prose Diff | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| USER-02 | §1:创作者章节、Codex、专注及多稿合并 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| USER-03 | §1/§9:Obsidian 主题导入即用、兼容主题 | 主题变量导入已发布;[真实主题矩阵](https://github.com/KRPCT/InkStream/issues/38)保留,非任意 CSS 兼容声明。 |
+| USER-04 | §1:混合 Markdown 与多语言代码写作 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| REL-01 | §2/§3:切模式/操作不丢纯文本 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| REL-02 | §4/§5:工作区身份与索引正确 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| REL-03 | §4:Git 认证和远程动作可信 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| REL-04 | 桌面编辑的文件属性与大文件响应 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| REL-05 | 旧开发标准所需可执行验证基线 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+| REL-06 | 后续已加入的功能不得因补旧 PRD 回归 | 已有发布实现或保持的行为约束;完整平台/组合场景仍由[总验收](https://github.com/KRPCT/InkStream/issues/25)逐项收口。 |
+
+## 技术约束的当前解释
+
+- 保留主 CodeMirror、纯文本权威与文档身份/保存/恢复边界;辅助视图不是独立正文权威。
+- 配色按当前用户确认的纸白、石墨灰、灰绿;旧固定模式色不阻止 UX 收敛,语法/错误等有功能的颜色仍保留。
+- 保留当前 Tauri/React/Zustand、类型约束与 CSS token;版本从实际配置读取。
+- Git 由 git2 与受管系统 git 共同承担;GitHub REST/Device Flow 使用现有原生实现,不要求旧指定 SDK。
+- GSD 与已缺失旧 ORACLE/UI-SPEC 的历史引用不再是当前强制入口。当前遵循 wayfinder、DDD/BDD 与明确用户要求。
+
+## 旧范围边界
+
+原路线图的云协作、插件市场、多项目后台并行等未来设想不因发布号为 2.0.0 而自动实现或纳入本轮。已出现的阅读/书架/终端/导出/主题/更新能力按现有产品文档维护。完整原始审计保存在本地 governance-originals,旧失败与旧未验证记录不被改写为通过。
diff --git a/docs/REVIEW-SUMMARY.md b/docs/REVIEW-SUMMARY.md
new file mode 100644
index 0000000..57ef24e
--- /dev/null
+++ b/docs/REVIEW-SUMMARY.md
@@ -0,0 +1,12 @@
+# 当前文档审阅入口
+
+2.0.0 已发布;本轮已获授权更新文档和 issues,并按 DDD/BDD 完成原型多栏对齐及 ComputerUse 验收。
+
+- 当前事实与证据:[CURRENT-STATE](CURRENT-STATE.md)。
+- 产品要求:本地 `PRD.md`(遵守既有忽略规则,不随源码发布);词汇:[CONTEXT](../CONTEXT.md)。
+- 职责与规则:[ARCHITECTURE](ARCHITECTURE.md)、[DECISIONS](DECISIONS.md)。
+- UX 方向:[UIUX-DIRECTION](UIUX-DIRECTION.md)。
+- 执行:[DDD-PLAN](DDD-PLAN.md)、[EXECUTION-PLAN](EXECUTION-PLAN.md)、[EXECUTION-PROGRESS](EXECUTION-PROGRESS.md)。
+- 旧承诺:[LEGACY-PRD-COVERAGE](LEGACY-PRD-COVERAGE.md);行为自动化边界:[AUTOMATION](specs/AUTOMATION.md)。
+
+历史审计保留其原日期,不把旧未实施/草稿 PR 状态作为当前指令。
diff --git a/docs/UIUX-DIRECTION.md b/docs/UIUX-DIRECTION.md
new file mode 100644
index 0000000..ef9afed
--- /dev/null
+++ b/docs/UIUX-DIRECTION.md
@@ -0,0 +1,28 @@
+# UIUX 方向与当前对齐范围
+
+截至 2026-09-13,B+A+C 方向已确认并部分实现于 2.0.0。本轮继续对齐多栏 UX 与功能;发布/验收状态见 [CURRENT-STATE](CURRENT-STATE.md)。
+
+## 已确认方向
+
+B 是日常写作界面:项目轨、项目内导航、大面积文稿和上下文工具。A 是点击或 Ctrl+Alt+P 展开的项目浮层,不推挤正文。C 让学术材料/引用与文稿相邻。三模式同等,默认通用写作。
+
+项目有独立名称、封面、收藏及会话;关联一个内容目录,Git 根独立。切换先保存与快照,失败停留,成功恢复目标会话;这些已发布的约束继续保持。
+
+## 后续用户修订
+
+- 采用最终双层竖板与流动墨带 SVG,原型品牌图和早期波浪档案图标已退役。
+- 配色方向为中性纸白、石墨灰、低饱和灰绿。
+- popup 背景另行设计,2.0.0 已去掉斜纹/模糊底板及两处英文装饰。本轮不把“只调整图标拟物”误读为删除工作台全部既有材料。
+- 先完成本地实现与 UI,真实账号验收独立保留;旧 v1 全验收不再阻塞本轮 UI。
+
+## 本轮对齐
+
+工作区视图、文档标签、模式的职责要清楚;原型的概览/文稿/文献/版本入口应由真实功能承接。项目轨可见多个真实项目。文献先选中看详情,再明确插入。去除重复控件和无用英文,保留有意义的术语与状态。正文的字体、留白及工具密度按原型节奏收敛。
+
+原型中的假字数、进度、文献与提交记录不直接移植。当前 SVG/popup 方向保留,具体差距和通过情况由行为测试及 ComputerUse 记录。
+
+## 验收条件
+
+覆盖长名称、多个项目、空/加载/失败、三模式、键盘焦点、面板拖动/折叠、缩放和 reduced 偏好。视图切换不丢正文、选区与撤销;项目切换继续受保存协议保护。
+
+参考源为用户提供的 inkstream-uiux.html,以及本地 codex/prototype-uiux-direction 分支的原型源码;它们是讨论与对照材料,不是额外用户指令。原型图片或浏览器桩不等同原生/真实账号/物理 IME 验收。
diff --git a/docs/VERIFICATION-2026-09-12.md b/docs/VERIFICATION-2026-09-12.md
new file mode 100644
index 0000000..e21119e
--- /dev/null
+++ b/docs/VERIFICATION-2026-09-12.md
@@ -0,0 +1,180 @@
+# 历史记录:VERIFICATION-2026-09-12.md
+
+此文件保留原日期、原工作树与当时证据。2.0.0 的实现/合并/发布现状见 [CURRENT-STATE](CURRENT-STATE.md);下面“尚未实施/未推送/草稿 PR”等文字是历史状态,不作为当前指令。
+
+
+查看原始历史记录
+
+# 2026-09-12 续接验证与旧 v1 验收索引
+
+本报告记录当前 `codex/con-repair-v1` 的未提交工作区。原分支未改变;没有推送或触发 GitHub Actions。
+
+**旧 v1 总验收 #25 仍开放;正式 UIUX、新项目档案与持久草稿尚未开始。** 测试文件关联只用于定位证据,不表示一整行用户需求已经验收。
+
+## 已核验结果
+
+| 检查 | 结果 | 本机证据 |
+|---|---|---|
+| typecheck | 通过 | [报告](../coverage/acceptance/ci-typecheck-win32-1789192346084-58100/ci-summary.json) |
+| lint | 通过 | [报告](../coverage/acceptance/ci-lint-win32-1789192465348-46236/ci-summary.json) |
+| test | 1707/1707,无失败、跳过或超时 | [报告](../coverage/acceptance/ci-test-win32-1789192674321-41828/ci-summary.json) |
+| build | 通过 | [报告](../coverage/acceptance/ci-build-win32-1789192471654-55828/ci-summary.json) |
+| Windows Rust | 208 通过;1 个进程 helper 由其他测试调用;复用最近一次原生报告 | [报告](../coverage/acceptance/rust-win32-1789187386473-59604/rust-summary.json) |
+| Windows 原生学术流程 | 22 个检查点通过;使用合成 BBT 与模拟 composition 事件 | [记录](../coverage/acceptance/native-academic-20260912-135519/academic-checks.json) |
+| Windows 原生分支比较 | 15 个已通过检查点;复用此前实际 WebView 证据 | [记录](../coverage/acceptance/native-compare-20260912-114656/browser-checks.json) |
+
+新增修复:实时预览只隐藏 Markdown 转义前缀,保留 `[1]`、`[J]` 等字面标点;活动行、源码模式、代码块、IME 与撤销保持原文。先复现 4 项失败,再通过 100 项相关回归,最后重建并以原生截图核验。
+
+[修复后原生截图](../coverage/acceptance/native-academic-20260912-135519/academic-bibliography.png)。最终源文件校验值与进程/端口结果见[工作区汇总](../coverage/acceptance/continuation-20260912/summary.json)和[源码哈希](../coverage/acceptance/continuation-20260912/source-sha256.json)。
+
+生产 `dist` 已检查,不含测试桥接入口。两次本轮原生测试的 HEAD、index、工作树快照一致;其子进程已回收,1420/9229/23119 端口关闭。
+
+## 仍未满足的进入条件
+
+Linux:本机 WSL 列出 Ubuntu 24.04,但实例启动返回 `Wsl/Service/CreateInstance/CreateVm/HCS/HCS_E_SERVICE_NOT_AVAILABLE`。仅作只读诊断,没有启用系统功能或修改虚拟化服务。macOS:Darwin 进程回收修复仍无该平台执行证据。
+
+外部服务:构建环境未提供 `INKSTREAM_GITHUB_CLIENT_ID`。真实 GitHub OAuth、系统钥匙串、Zotero/BBT 与 Web API、授权远程 clone/Git/PR 回复仍未验收;本地合成服务不能替代。此前已提出配置依赖,本轮没有重复索取凭据,也没有发送远程评论。
+
+本地完整场景:基础写作、索引/真实 watcher、长篇创作、全部 Git 入口、主题导入与既有能力的贯通流程仍需逐行核对或归档。`scripts/acceptance/bindings.mjs` 中原有 partial/pending 没有被批量改成完成。
+
+## 证据组与剩余场景
+
+| 组 | 范围 | 相关检查(不等于完整覆盖) | 尚缺证据 |
+|---|---|---|---|
+| DOC | 文档保存与生命周期 | [document-session.integration.test.tsx](../src/test/document-session.integration.test.tsx)、[documentFileMutations.test.ts](../src/editor/documentFileMutations.test.ts)、[exitGuard.test.ts](../src/editor/exitGuard.test.ts) | DOC-01–08 的完整场景与磁盘往返证据仍须逐条归档。 |
+| WIKI | 链接补全与定位 | [wikiLinkComplete.test.ts](../src/editor/livepreview/wikiLinkComplete.test.ts)、[wikiNavigation.test.ts](../src/editor/livepreview/wikiNavigation.test.ts)、[wikiAnchor.test.ts](../src/editor/livepreview/wikiAnchor.test.ts) | 组合输入、补全产物到真实点击、原生可见落点仍须贯通核对。 |
+| INDEX | 索引与关系查询 | [indexLifecycle.test.ts](../src/ipc/indexLifecycle.test.ts)、[indexRefresh.test.ts](../src/ipc/indexRefresh.test.ts)、[BacklinksPanel.paragraph.test.tsx](../src/components/workbench/BacklinksPanel.paragraph.test.tsx)、[render.test.ts](../src/graph/render.test.ts) | WS-01–08 的真实 watcher、跨库索引及面板联动仍须归档。 |
+| CITE | 引用与学术命令 | [academicActions.integration.test.ts](../src/editor/academicActions.integration.test.ts)、[academicActions.test.ts](../src/editor/academicActions.test.ts)、[citations.test.ts](../src/editor/citations.test.ts) | 22 个原生检查使用本地合成 BBT;真实 Zotero/BBT picker 与引用面板全场景待验收。 |
+| BIB | 参考文献与转义显示 | [bibliography.integration.test.ts](../src/editor/bibliography.integration.test.ts)、[cslFormat.standard.test.ts](../src/editor/cslFormat.standard.test.ts)、[escapePreview.test.ts](../src/editor/livepreview/escapePreview.test.ts) | 真实文献库、多文献类型与三种样式的端到端符合性仍须核验。 |
+| ZOT | 文献库账户与离线同步 | [ZoteroLibraryPanel.account.test.tsx](../src/components/workbench/ZoteroLibraryPanel.account.test.tsx)、[ZoteroLibraryPanel.test.tsx](../src/components/workbench/ZoteroLibraryPanel.test.tsx) | 真实 Web API 同步、断网重启、系统凭据库待验收;合成 HTTP/SQLite 不替代真实账户。 |
+| TYP | Typst 预览与首次加载 | [TypstFlow.test.tsx](../src/components/workbench/TypstFlow.test.tsx)、[languages.typst.test.ts](../src/editor/languages.typst.test.ts)、[typstClient.lifecycle.test.ts](../src/editor/livepreview/typst/typstClient.lifecycle.test.ts) | 首次 .typ 原生语法树已有证据;完整双语法、多修订、故障恢复场景仍须逐条归档。 |
+| EQ | 公式、编号与导出 | [equationNumbering.flow.test.tsx](../src/editor/equationNumbering.flow.test.tsx)、[equationPdf.flow.test.tsx](../src/editor/export/equationPdf.flow.test.tsx)、[slashCommand.test.ts](../src/editor/livepreview/slashCommand.test.ts) | 公式导出核心已有历史实机证据;原生保存对话框、重开与各编号场景仍须归档。 |
+| CRE | 长篇创作 | [chapterTree.test.ts](../src/editor/chapterTree.test.ts)、[writingMetrics.test.ts](../src/editor/writingMetrics.test.ts)、[CodexPanel.lifecycle.test.tsx](../src/components/workbench/CodexPanel.lifecycle.test.tsx)、[focusMode.test.ts](../src/editor/livepreview/focusMode.test.ts) | 章节→Codex→目标→比较/合并→保存重开及物理中文 IME 的贯通验收未完成。 |
+| CMP | 完整分支比较 | [BranchCompareView.test.tsx](../src/components/git/BranchCompareView.test.tsx)、[branchComparisonClient.test.ts](../src/editor/branchComparisonClient.test.ts)、[comparisonView.test.ts](../src/editor/comparisonView.test.ts)、[compareText.test.ts](../src/diff/compareText.test.ts) | Windows 双分支、长文、增删改名、分页与未保存缓冲场景已有原生证据;跨平台仍未验证。 |
+| SHELL | 模式与工作区入口 | [totalAssembly.test.ts](../src/modes/totalAssembly.test.ts)、[WorkbenchLayout.test.tsx](../src/components/workbench/WorkbenchLayout.test.tsx)、[StatusBar.document.test.tsx](../src/components/workbench/StatusBar.document.test.tsx)、[FileTree.test.tsx](../src/components/workbench/FileTree.test.tsx) | 三模式长会话、能力关闭后继续编辑及全部入口仍须贯通核对。 |
+| MD | Markdown 与实时预览 | [inlinePlugin.test.ts](../src/editor/livepreview/inlinePlugin.test.ts)、[escapePreview.test.ts](../src/editor/livepreview/escapePreview.test.ts)、[editorState.renderMode.test.ts](../src/editor/editorState.renderMode.test.ts)、[Toolbar.test.tsx](../src/editor/richtext/Toolbar.test.tsx) | 转义显示已有原生复验;其余语法与模式往返需按旧矩阵逐项归档。 |
+| LANG | 多语言与文件格式 | [languages.test.ts](../src/editor/languages.test.ts)、[codeLanguages.test.ts](../src/editor/livepreview/codeLanguages.test.ts)、[frontmatter.test.ts](../src/editor/frontmatter.test.ts) | 各语言真实文件的首次打开、混合写作、保存重开与错误路径仍待逐项验收。 |
+| GIT | 本地 Git 生命周期 | [gitActions.test.ts](../src/editor/gitActions.test.ts)、[gitWorktreeMutation.test.ts](../src/editor/gitWorktreeMutation.test.ts) | status/log/branch/diff 有真实 Rust 证据;全部菜单、右键、merge/cherry-pick/tag/reset 的完整生命周期仍需核验。 |
+| REB | 本地 rebase | [BranchManager.rebase.test.tsx](../src/components/git/BranchManager.rebase.test.tsx)、[RebaseControls.test.tsx](../src/components/git/RebaseControls.test.tsx)、[gitWorktreeMutation.test.ts](../src/editor/gitWorktreeMutation.test.ts) | Windows Rust 成功/冲突/签名失败恢复通过;Linux/macOS 进程回收与原生入口全流程待验收。 |
+| STA | Stash 管理 | [gitStashActions.test.ts](../src/editor/gitStashActions.test.ts)、[StashEntry.test.tsx](../src/components/git/StashEntry.test.tsx) | Rust 临时仓库恢复/冲突/身份通过;真实应用完整保存/恢复/删除手势链待归档。 |
+| CLONE | 克隆与打开工作区 | [GitCloneDialog.test.tsx](../src/components/git/GitCloneDialog.test.tsx)、[CloneEntry.test.tsx](../src/components/workbench/CloneEntry.test.tsx) | 本地 Git 克隆与排他发布通过;授权远程、原生进度/取消/成功打开仍需验收。 |
+| REMOTE | 远程 Git 与凭据目标 | [git.remote.test.ts](../src/ipc/git.remote.test.ts)、[gitCredential.test.ts](../src/ipc/gitCredential.test.ts)、[gitActions.test.ts](../src/editor/gitActions.test.ts) | 真实授权远程 Git、PAT/gh 与系统凭据链待验收;不代替用户注册或授权。 |
+| GITUI | Git 图谱交互 | [layoutGraph.test.ts](../src/components/git/graph/layoutGraph.test.ts)、[builtins.test.ts](../src/commands/builtins.test.ts)、[menuConfig.test.ts](../src/components/workbench/menuConfig.test.ts) | Find、Filter Branches、仓库设置及各入口组合仍需逐项实际操作验收。 |
+| AUTH | GitHub Device Flow | [GithubDeviceFlow.test.tsx](../src/components/settings/GithubDeviceFlow.test.tsx) | 需要 InkStream 自有公开 Client ID、真实授权与钥匙串读回;当前环境未配置该变量。 |
+| PR | Issue / PR / review | [PrReply.test.tsx](../src/components/git/PrReply.test.tsx)、[CommentThread.scope.test.tsx](../src/components/git/CommentThread.scope.test.tsx) | 授权仓库真实读取、回复后读回、分页权限待验收;远程发送还需明确授权。 |
+| MERGE | 三向冲突 | [parseConflicts.test.ts](../src/diff/parseConflicts.test.ts)、[MergeResolver.scope.test.tsx](../src/components/git/MergeResolver.scope.test.tsx) | base/ours/theirs 与全部非冲突上下文的原生合并/取消/保存重开链待验收。 |
+| THEME | 主题导入兼容 | [themeImport.test.ts](../src/styles/themeImport.test.ts)、[ImportedTheme.test.tsx](../src/components/settings/ImportedTheme.test.tsx) | 代表性第三方主题、重启保持、取消及失败回退的原生证据仍需逐项归档。 |
+| QUALITY | 传输、权限与检查基线 | [documentBudget.integration.test.tsx](../src/editor/documentBudget.integration.test.tsx)、[files.streaming.test.ts](../src/ipc/files.streaming.test.ts)、[files.writing.test.ts](../src/ipc/files.writing.test.ts) | Windows 检查与 Raw 传输已有证据;Unix 文件属性和 macOS 清理未验证,旧 CI 不替代验收。 |
+| EXISTING | 后续既有能力 | [HtmlReader.transfer.test.tsx](../src/components/reading/HtmlReader.transfer.test.tsx)、[TerminalPanel.test.tsx](../src/components/terminal/TerminalPanel.test.tsx)、[replaceAll.test.ts](../src/editor/multibuffer/replaceAll.test.ts)、[useUpdaterStore.test.ts](../src/stores/useUpdaterStore.test.ts) | 简易模式、阅读/书架、终端、更新、multibuffer、缩放的完整组合仍需回归归档。 |
+| E2E | 跨领域用户流程 | 须复用各子流程并实际贯通 | 前置子流程与真实外部依赖仍开放;不能由测试总数替代完整用户故事。 |
+
+## 原矩阵逐行索引
+
+共 102 行,覆盖原矩阵第 1–7 节全部功能编号;第 8 节技术条款与第 9 节非目标维持原裁定。每行完整接受仍为 false,不能由本表关联自动关闭 #25。详细机器记录见 [legacy-v1-rows.json](../coverage/acceptance/continuation-20260912/legacy-v1-rows.json)。
+
+| 原编号 | 证据组 | 完整场景验收 |
+|---|---|---|
+| US-S1 | DOC | 待完整核验;缺口见对应组 |
+| US-S2 | WIKI | 待完整核验;缺口见对应组 |
+| US-S3 | WIKI | 待完整核验;缺口见对应组 |
+| US-S4 | INDEX | 待完整核验;缺口见对应组 |
+| US-S5 | INDEX | 待完整核验;缺口见对应组 |
+| US-A1 | CITE | 待完整核验;缺口见对应组 |
+| US-A2 | CITE | 待完整核验;缺口见对应组 |
+| US-A3 | TYP | 待完整核验;缺口见对应组 |
+| US-A4 | BIB | 待完整核验;缺口见对应组 |
+| US-A5 | ZOT | 待完整核验;缺口见对应组 |
+| US-C1 | CRE | 待完整核验;缺口见对应组 |
+| US-C2 | CRE | 待完整核验;缺口见对应组 |
+| US-C3 | CRE | 待完整核验;缺口见对应组 |
+| US-C4 | CRE | 待完整核验;缺口见对应组 |
+| US-C5 | CMP | 待完整核验;缺口见对应组 |
+| US-F1 | EQ | 待完整核验;缺口见对应组 |
+| US-F2 | TYP | 待完整核验;缺口见对应组 |
+| US-F3 | EQ | 待完整核验;缺口见对应组 |
+| MODE-01 | SHELL | 待完整核验;缺口见对应组 |
+| STD-01 | SHELL | 待完整核验;缺口见对应组 |
+| STD-02 | SHELL | 待完整核验;缺口见对应组 |
+| STD-03 | SHELL | 待完整核验;缺口见对应组 |
+| ACA-01 | ZOT | 待完整核验;缺口见对应组 |
+| ACA-02 | TYP | 待完整核验;缺口见对应组 |
+| ACA-03 | EQ | 待完整核验;缺口见对应组 |
+| ACA-04 | TYP | 待完整核验;缺口见对应组 |
+| CRE-01 | CRE | 待完整核验;缺口见对应组 |
+| CRE-02 | CRE | 待完整核验;缺口见对应组 |
+| CRE-03 | CRE | 待完整核验;缺口见对应组 |
+| CRE-04 | CRE | 待完整核验;缺口见对应组 |
+| EDIT-01 | DOC | 待完整核验;缺口见对应组 |
+| EDIT-02 | MD | 待完整核验;缺口见对应组 |
+| EDIT-03 | MD | 待完整核验;缺口见对应组 |
+| EDIT-04 | MD | 待完整核验;缺口见对应组 |
+| LANG-01 | MD | 待完整核验;缺口见对应组 |
+| LANG-02 | LANG | 待完整核验;缺口见对应组 |
+| LANG-03 | TYP | 待完整核验;缺口见对应组 |
+| LANG-04 | LANG | 待完整核验;缺口见对应组 |
+| LANG-05 | LANG | 待完整核验;缺口见对应组 |
+| LANG-06 | LANG | 待完整核验;缺口见对应组 |
+| LANG-07 | LANG | 待完整核验;缺口见对应组 |
+| LANG-08 | LANG | 待完整核验;缺口见对应组 |
+| LANG-09 | LANG | 待完整核验;缺口见对应组 |
+| LANG-10 | LANG | 待完整核验;缺口见对应组 |
+| LANG-11 | LANG | 待完整核验;缺口见对应组 |
+| FMT-01 | DOC | 待完整核验;缺口见对应组 |
+| FMT-02 | LANG | 待完整核验;缺口见对应组 |
+| FMT-03 | MD | 待完整核验;缺口见对应组 |
+| git_status | GIT | 待完整核验;缺口见对应组 |
+| git_branch_list | GIT | 待完整核验;缺口见对应组 |
+| git_log | GIT | 待完整核验;缺口见对应组 |
+| git_diff | GIT | 待完整核验;缺口见对应组 |
+| git_commit | GIT | 待完整核验;缺口见对应组 |
+| git_checkout | GIT | 待完整核验;缺口见对应组 |
+| git_merge | GIT | 待完整核验;缺口见对应组 |
+| git_rebase | REB | 待完整核验;缺口见对应组 |
+| git_cherry_pick | GIT | 待完整核验;缺口见对应组 |
+| git_stash | STA | 待完整核验;缺口见对应组 |
+| git_tag | GIT | 待完整核验;缺口见对应组 |
+| git_reset | GIT | 待完整核验;缺口见对应组 |
+| git_clone | CLONE | 待完整核验;缺口见对应组 |
+| git_push | REMOTE | 待完整核验;缺口见对应组 |
+| git_pull | REMOTE | 待完整核验;缺口见对应组 |
+| git_fetch | REMOTE | 待完整核验;缺口见对应组 |
+| GRAPH-GIT-01 | GITUI | 待完整核验;缺口见对应组 |
+| GRAPH-GIT-02 | GIT | 待完整核验;缺口见对应组 |
+| GRAPH-GIT-03 | GITUI | 待完整核验;缺口见对应组 |
+| GRAPH-GIT-04 | GITUI | 待完整核验;缺口见对应组 |
+| GRAPH-GIT-05 | REMOTE | 待完整核验;缺口见对应组 |
+| GRAPH-GIT-06 | CMP | 待完整核验;缺口见对应组 |
+| GRAPH-GIT-07 | GITUI | 待完整核验;缺口见对应组 |
+| GH-01 | AUTH | 待完整核验;缺口见对应组 |
+| GH-02 | REMOTE | 待完整核验;缺口见对应组 |
+| GH-03 | REMOTE | 待完整核验;缺口见对应组 |
+| GH-04 | PR | 待完整核验;缺口见对应组 |
+| GH-05 | PR | 待完整核验;缺口见对应组 |
+| GH-06 | PR | 待完整核验;缺口见对应组 |
+| GH-07 | PR | 待完整核验;缺口见对应组 |
+| DIFF-01 | CMP | 待完整核验;缺口见对应组 |
+| DIFF-02 | MERGE | 待完整核验;缺口见对应组 |
+| LINK-01 | WIKI | 待完整核验;缺口见对应组 |
+| LINK-02 | WIKI | 待完整核验;缺口见对应组 |
+| LINK-03 | WIKI | 待完整核验;缺口见对应组 |
+| LINK-04 | INDEX | 待完整核验;缺口见对应组 |
+| LINK-05 | INDEX | 待完整核验;缺口见对应组 |
+| LINK-06 | INDEX | 待完整核验;缺口见对应组 |
+| LINK-07 | INDEX | 待完整核验;缺口见对应组 |
+| LINK-08 | INDEX | 待完整核验;缺口见对应组 |
+| ZOT-01 | CITE | 待完整核验;缺口见对应组 |
+| ZOT-02 | ZOT | 待完整核验;缺口见对应组 |
+| ZOT-03 | CITE | 待完整核验;缺口见对应组 |
+| ZOT-04 | CITE | 待完整核验;缺口见对应组 |
+| USER-01 | E2E | 待完整核验;缺口见对应组 |
+| USER-02 | E2E | 待完整核验;缺口见对应组 |
+| USER-03 | THEME | 待完整核验;缺口见对应组 |
+| USER-04 | LANG | 待完整核验;缺口见对应组 |
+| REL-01 | DOC | 待完整核验;缺口见对应组 |
+| REL-02 | INDEX | 待完整核验;缺口见对应组 |
+| REL-03 | REMOTE | 待完整核验;缺口见对应组 |
+| REL-04 | QUALITY | 待完整核验;缺口见对应组 |
+| REL-05 | QUALITY | 待完整核验;缺口见对应组 |
+| REL-06 | EXISTING | 待完整核验;缺口见对应组 |
+
+
diff --git a/docs/WORKBENCH-ACCEPTANCE.md b/docs/WORKBENCH-ACCEPTANCE.md
new file mode 100644
index 0000000..1eee40e
--- /dev/null
+++ b/docs/WORKBENCH-ACCEPTANCE.md
@@ -0,0 +1,63 @@
+# 多栏工作台验收记录
+
+2026-09-13,实施分支 `codex/workbench-ux-v2`,发布基线 `v2.0.0 / ca4c214`。本轮记录对应[地图 45](https://github.com/KRPCT/InkStream/issues/45)、[实现 47](https://github.com/KRPCT/InkStream/issues/47)、[ComputerUse 48](https://github.com/KRPCT/InkStream/issues/48)。本分支尚未发布。
+
+## 方法和边界
+
+先写 [WB-01 至 WB-08](specs/workbench-ux.feature) 行为规格,再用真实 React、CodeMirror、项目会话与受控 IPC 边界验证。首个失败测试证明旧列表点击会立即插入;原生验收发现问题后继续补回归、修复和复验。
+
+ComputerUse 使用 Windows 的 `@oai/sky`,实际操作普通 Tauri 构建的窗口、系统目录选择器、菜单、键盘和分隔线。此层没有 DOM 查询、页面脚本、store 注入或应用内自动化桥。独立应用标识为 `com.krpct.inkstream.workbenchcheck20260913`,不使用用户正式配置。
+
+两个项目和文稿为本次创建的真实目录,Git 时间线读取测试仓库实际提交。文献经原生 HTTP/IPC 读取本机受控 BBT 响应,用于核对界面到插入的完整通路;不是 Zotero 真实账号验收。中文通过 ComputerUse 文本输入接口输入,不声称物理拼音输入法已验收。没有执行真实远端评论、推送或账号授权。
+
+## 逐项观察
+
+| 场景 | 实际观察 | 自动与原生证据边界 |
+| --- | --- | --- |
+| WB-01 概览与正文 | 项目文件数 3、已开文稿数随会话变化;概览往返保留正文选区和滚动,返回正文后可撤销;重启保留已保存内容与标签 | 实例身份由集成测试验证;原生观察见 03–07、26 |
+| WB-02 项目切换 | 项目轨显示两个项目,长名称省略但完整名称可读;切回恢复两份标签和写入内容 | 38–39;保存失败由项目会话测试验证 |
+| WB-02 目标不可用 | 暂时移动本次测试目录后,从项目轨打开它会显示错误,原项目仍为当前项目;关闭提示后可继续输入和保存 | 40–41;目录随后恢复,实际文件回读包含两段验收文字 |
+| WB-03 文献 | 选择条目显示作者、年份、引用键、DOI 和摘要,正文计数不变;明确插入返回原文稿,引用落到原光标;一次撤销只移除该引用 | 08–11、29–30、48–49;最终窄栏插入按钮无需滚动即可使用,所用文献明确标为验收样本 |
+| WB-04 库身份 | 旧列表与详情的迟到响应不能覆盖新库或形成插入目标 | 自动竞争时序测试;原生已验空库/失败呈现(50–51),错误后旧插入入口消失;不替代账号切换 |
+| WB-05 键盘 | Home/方向键改变工作区焦点;文档方向键实际切换文稿;工具方向键实际显示反链内容 | 13、15–16;关闭的保存/冲突规则由相应集成测试覆盖 |
+| WB-06 简易模式 | 在版本页启用简易模式后回到原文稿,文献/版本入口隐藏,正文保留 | 33–34;关闭简易模式后 Codex 工具恢复选中并显示内容,最终复验见 44–45 |
+| WB-07 栏宽与缩放 | 文件栏拖宽后,两侧折叠互不影响;缩放复原保持拖过的宽度;放大后工具转为抽屉,收起即可继续输入 | 17–24、54–58,覆盖 100%、125%、130%、150%;临时几何不写回的来源判定另有自动回归 |
+| WB-08 版本 | 实际提交信息与本地仓库一致;日常版本页保留两侧导航 | 12、33;无仓库空态与过期仓库过滤另有自动回归 |
+| 三模式与主题 | 通用、学术、创作提供各自工具;暗色及减少动效、减少透明度设置可操作 | 28–36、42、54、56;54 明确显示减少效果开关开启;完整跨平台、GPU/长时与第三方主题矩阵不在这些观察中 |
+
+## 原生验收发现并修复
+
+1. 状态栏滚动容器裁剪模式菜单。菜单改为锚定到按钮的独立弹出层;缩放/滚动/项目阻塞时关闭。150% 放大后的原生复验已显示完整菜单(27)。
+2. 简易模式退出后,创作工具仍记着不再可用的大纲,导致空白。右栏先派生当前可用目标,再收敛保存的活动工具;已复现 RED 并加入 WB-06 回归。
+3. 长文献详情会把插入按钮推到窄侧栏底部之外。资料独立滚动,明确插入操作留在固定的底部区域。
+4. 折叠面板退出键盘与辅助功能访问;设置开关补充名称。暗色采用原生暗色滚动条,并提升应用内 SVG 标记对比度;SVG 母版和桌面资源保持用户确认的版本。
+
+## 最后验证状态
+
+最终检查通过:243 份功能测试文件的 1908 项断言,加两份独立性能文件,共 1910 项,零失败、零跳过。41 项显式 BDD 绑定全部通过;Gherkin 未被解释执行,旧专项场景仍按各自证据保留 partial/pending。
+
+最终 TypeScript、ESLint、Vite 与 Tauri 原生构建均通过。三轮 ComputerUse 已完成,最后一轮复验确认工具回退、常驻插入操作、暗色滚动条/标记、文献错误/空态和 125% 浮层。新母版未替换:仓库 SVG SHA-256 仍为 `58ffe1787e8802565d9ac5e5112e270a488954e00b1ecbc37ce11385a4d2510a`。
+
+三轮应用进程 PID 分别为 50188、60288、61500,均经应用退出并完成所属 Job 清理;本次 WebView 子进程和本地 23119 监听均已回收。回读测试文件确认两段验收文字只写入原项目,另一项目不含它们,撤销后的引用也未留在文件中。
+
+本地完整记录位于实施工作树的 `coverage/acceptance/workbench-v2/`:有界命令、进程盘点、三轮原生进程退出记录,以及 `cua/<序号>-<观察>.json/.jpg`。只将少量代表截图收入产品文档,原始日志、测试配置、测试项目和原生包留在忽略目录。
+
+## 仍独立保留的验收
+
+[41](https://github.com/KRPCT/InkStream/issues/41) 的严格同内容并排对照、密集项目矩阵,[42](https://github.com/KRPCT/InkStream/issues/42) 的安装图标/系统缓存,[43](https://github.com/KRPCT/InkStream/issues/43) 的完整弹窗矩阵,以及真实账户、跨平台和物理 IME 验收不能由本轮有限的 Windows 操作代替。相关票按已补证和剩余项继续管理。
+
+## 最终构建截图
+
+文稿、文献详情与大纲同时可见;插入操作保持在窄侧栏底部。
+
+
+
+暗色主题及可识别的 SVG 标记:
+
+
+
+125% 缩放、减少效果开启时的项目浮层,保留长项目名称:
+
+
+
+另见[暗色文献详情与常驻插入操作](assets/workbench/reference-action.jpg)。图片均来自真实窗口,文献内容是明确标示的验收样本。
diff --git a/docs/academic.md b/docs/academic.md
index 3224fef..a557bd2 100644
--- a/docs/academic.md
+++ b/docs/academic.md
@@ -7,14 +7,16 @@ Academic(学术)模式把 Zotero 文献库、引用插入、参考文献编
InkStream 有三种写作模式(Standard / Academic / Creative),切换不会改变文件格式,只是调整界面布局与功能集。
- 按 `Ctrl+Shift+P` 打开命令面板,输入「学术」或「Academic」,选择「模式:切换到 Academic(学术)」。
-- 切换后,三处界面会随之变化:左侧边栏顶部出现「Zotero 文献库」,编辑器上方出现学术工具栏,右侧面板自动切到「引用」标签页。
+- 切换后,三处界面会随之变化:左侧分类可切换到「文献」,编辑器上方出现学术工具栏,右侧面板自动切到「引用」标签页。
## 学术工具栏
-进入学术模式后,编辑器正上方常驻一条工具栏,按钮从左到右为:
+进入学术模式后,编辑器上方的工具栏提供:
- **引用**:等同于 `Ctrl+Shift+Z`,触发 Zotero 选择器插入引用。
- **脚注**:在光标处插入脚注标记 `[^N]`,并在文末追加对应的脚注定义行,光标自动移到定义处等你填写(编号自动取文档内未用过的最小数字)。
+- **公式编号**:为 Markdown 块公式启用编号并补充稳定标签。
+- **公式 PDF**:导出当前 LaTeX 围栏中的公式片段,范围与限制见[公式编号与引用](./equations.md)。
- **参考文献**:下拉菜单,含「插入 / 刷新(默认 GB/T 7714)」以及 GB/T 7714、APA、Vancouver 三种样式(详见下文)。
- **公式**:插入数学公式块。
@@ -38,11 +40,11 @@ InkStream 有三种写作模式(Standard / Academic / Creative),切换不
## 从侧边栏文献库插入
-学术模式下左侧边栏顶部的「Zotero 文献库」直接列出 Zotero 库中的条目:
+可从正文上方的「文献」进入完整文献工作区,也可在学术模式左侧分类选择「文献」,在正文旁查阅:
-- 顶部输入框可按标题、作者或 citekey 过滤。
-- 点击任意一条,即在编辑器光标处插入对应的 `[@citekey]`(同样会按文档语言自动适配格式),无需再弹选择器。
-- 右上角的刷新按钮可重新拉取文献库。
+- 顶部输入框可按标题、作者、年份或 citekey 过滤。
+- 点击条目只选择并显示标题、作者、年份、引用键,以及可取得的出版物、DOI、摘要。按「插入所选引用」才在原文稿的当前选区插入,格式随语言适配;完整工作区会自动回到文稿。一次撤销只撤掉这次插入。长详情单独滚动,插入按钮保留在详情区底部。没有打开文稿时插入按钮不可用。
+- 右上角刷新重新读取文献库并清除旧选择。库身份变化会使在途结果失效,不能把旧库条目插入新会话。
- 当 Zotero 未运行时,若已配置过 Web API 同步,面板会自动改读本地离线缓存,并在标题旁显示一个离线小图标。
## 引用面板与未解析标红
@@ -83,8 +85,12 @@ InkStream 有三种写作模式(Standard / Academic / Creative),切换不
注意事项:
-- API Key 仅保存在本机操作系统的凭据库,不会上传,也不会回显到界面。
+- API Key 保存在本机操作系统的凭据库,仅用于向 Zotero API 认证,不回显到界面。
- 同步是增量的:每次只拉取上次同步以来的改动。
+- 缓存按 Zotero 用户库隔离。切换账户后读取各自缓存;旧版离线数据保留,需要为当前账户重新同步。
+- 同步期间库版本持续变化或下载失败时,不以不完整结果推进缓存与游标,按提示稍后重试。
- 离线时为「在线优先、离线回退」:先尝试连 Zotero,连不上再读缓存;缓存也为空时才报错。
+当前实现包含本地模块及协议回归;真实 Zotero/BBT 选择器、真实账户同步和跨平台排版仍需各自验证,不因 2.0 发布或 CI 成功而自动完成。
+
← 返回 [功能文档总览](./index.md)
diff --git a/docs/assets/workbench/archive-125.jpg b/docs/assets/workbench/archive-125.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ca4ca9b4b1f603c15d22d24c57b8fc4e03d58a43
GIT binary patch
literal 92399
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