# 学习伙伴模式·全功能验证(开场提示词) > 版本基线:v1.1.1 | 对应插件:dsh-study-buddy **18 个工具** + 「学习伙伴」预设 > > 用法:把下面整段复制为「学习伙伴」预设**新会话的第一条消息**。 > 第 0–6 部分由 Agent 连续自动执行;第 7 部分是**需要你配合**的交互项。 > 验证会在 vault 落盘少量 `【验证】` 笔记与微目录;收尾会给出清理指引。 > > **v1.0 的验证重点与前版不同**:不再验证"卡片分型与分数",而是验证 > **三条硬门禁真的会挡住写入**(未读期望 / 未确认规划 / 越界路径), > 以及"写法由《笔记期望.md》驱动"这条热配置链路。 --- 本次会话为**功能验证会话**。我已授权你连续执行以下清单,无需每步停留确认; 每完成一项输出一行结果(✔/✘/⚠ + 一行证据),全部完成后输出汇总报告。 涉及 vault 落盘/修改的操作**只准**通过 `note_*` / `study_*` 工具,不得用其他方式改动 vault 文件。 ## 0 · 环境与基线 1. 按惯例执行开场衔接:`study_memory(get)` + `study_progress(get)`,输出一行衔接提示。 2. 记录第 1 步返回的进度/记忆**原值**(收尾恢复用;为空则记"空")。 3. `note_library(check)`:核对返回含 vault 根、状态目录、块/存量卡/旧笔记计数、**期望文件状态**、待消费规划。 4. `note_expect_get`:核对返回《笔记期望.md》全文,且**再跑一次 `note_library(check)` 时状态变为"已读"**(门禁开门动作生效)。 ## 1 · 导航与检索(note_list / note_get / note_search) 5. `note_list`(不带参数):核对列出顶层目录,且**根目录的《笔记期望.md》不出现**在笔记行里。 6. `note_list` 一个含笔记的主题目录:核对每行含 `标题 · 类型(来源章节)—— 简介`,并核对**缺微目录的目录被标 ⚠**。 7. `note_search` 一个 vault 中大概率存在的概念词(未命中就换词直到命中):核对命中行含 类型(块/存量卡/旧笔记)/ 路径 / 来源章节 / 简介 / 片段。 8. `note_search` 一个未命中词(如 `zzqqxx`):应返回"未命中(共 N 篇,来源:…)"。 9. `note_search` 带 `kind`(block/legacy/note 各一次)、`domain`、`path` 过滤各一次。 10. `note_get`:分别用 **ID**、**标题**、**路径** 三种 ref 读取同一篇,核对返回一致。 11. `note_overview`(可带 `path`):核对输出按「资料 → 章 → 节」聚合,含"已记录第 N 章",且**没有出现笔记里从未提到的章节号**(不虚构)。 ## 2 · 硬门禁(本版核心,必须逐条验证"被拒绝且磁盘零改动") 12. **未读期望**:**新开一个会话**,第一条就是 `note_write`(不调 `note_expect_get`;planId 随便填一个合法格式的值)。核对:报错含"未读取笔记期望",且目标路径**不存在**。 > 口径说明:门禁按「期望 → 规划 → 路径」**短路**,一次只说一个问题。若在本会话里补验(已读过期望),先返回的会是"没有已确认的文件夹规划"——那也是正确的拒绝。**判定标准是"被拒 + 磁盘零改动"**,不要求命中某一条具体文案。 13. **无规划**:`note_expect_get` 之后(不要 `note_plan`)直接 `note_write`。核对:报错含"没有已确认的文件夹规划"。 14. **规划未确认**:`note_plan` 出提案,**先不要让用户确认**,直接 `note_write`。核对:报错含"规划尚未确认",且**报错里给出的修复动作真的可用**(`note_plan({ action: "confirm", rootPath: planId })`)。 15. **越界路径**:`note_plan` 一个规划根(如 `【验证】/规划`),`note_write` 时把 path 写成规划根之外的路径。核对:报错含"不在本次规划范围"。 16. **期望已更新**:完成一次成功写入后,让用户手改一下《笔记期望.md》(或由你记录签名),再 `note_write`。核对:报错含"已更新",要求重读;**重读后**才能继续写。 17. 上面每一条都要在证据行里写明:**报错一句话** + **目标文件确实不存在**(用 `note_list` 或读取确认)。 ## 3 · 规划与落块(note_plan / note_write / note_toc) 18. `note_plan({ rootPath: '【验证】/第1章', items: [...] })` 出提案:核对返回含 `planId`、规划根、**新建/复用目录**、块清单表格(含来源章节与顺序),并核对**提案不落盘**(`note_list` 看不到任何新文件)。 18b. `note_plan({ action: 'confirm', rootPath: <上一步的 planId> })`:核对返回含"已确认规划"+ 待落块清单;重复调用一次应返回"规划已确认"(幂等,不报错)。 19. 让用户确认后 `note_write` 写第一块:标题 `【验证】高斯消元法`,`sourceSection` 用 `《验证资料》第1章 验证 / 1.1节`,内容自定(可短)。核对:返回含 `已写入:…`、`ID:…`、规划归属,并提示**缺微目录**。 20. 同一规划写第二块(`…/1.2节`)。核对消费记账:把**同一个标题写到规划内的另一个路径**(不是原路径,否则会先撞"目标已存在")→ 报错含"已在本规划中写入过"。 21. `note_toc({ dir: '【验证】/第1章' })`:核对生成 `微目录.md`,条目按 `顺序` 排列、带来源章节;**再跑一次**核对幂等(内容一致)。 22. 手写一段导读(放在 `` 之前),再 `note_toc` 一次:核对**导读保留**。 23. `note_overview({ path: '【验证】' })`:核对该两块被计入,节号为 `1.1、1.2`。 24. `note_write(..., dryRun: true)`:核对返回 `[dryRun]` 且**文件未落盘**,随后正式写入仍成功(凭据未被消费)。 ## 4 · 更新与存档(note_update / note_history / note_restore) 25. `note_update({ ref, action: 'append', changes: … })`:核对内容追加进正文、**旧内容保留**、**没有产生"版本更新"小节**。 26. `note_update({ ref, action: 'append', section: …, changes: … })`:核对追加进指定小节而不是文末。 27. `note_update({ ref, action: 'replace', newContent: … })`:核对返回含**存档路径**,正文只留新版,且正文里**没有 `
` 历史块**。 28. `note_history({ ref })`:核对列出存档(时间/原因/原路径)。 29. `note_restore({ ref })`:核对恢复成功,且**恢复前的那一版也已存档**(再 `note_history` 应多一份)。 30. `note_update({ ref, action: 'move', targetPath })`:核对文件搬到新路径、旧路径不存在;提示重跑 `note_toc`。 ## 5 · 关联、改名与体检(note_link / note_unlink / note_rename / note_lint) 31. `note_link({ from, to, kind: 'next' })`:核对两侧都出现 `- 后续:[[…]]` / `- 前置:[[…]]`。 32. 再 `note_link` 同一对:核对返回"无改动"(不重复添加)。 33. `note_unlink`:核对两侧关联行都被移除(小节空了连标题一起删)。 34. `note_rename({ ref, title: '【验证】高斯消元法(改名)', dryRun: true })`:核对预演报告(文件名变更 + 入链改动清单 + 断链检测)。 35. 正式 `note_rename`:核对 frontmatter 标题、文件名、库内 wikilink 全部同步。参数名是 `title`(不是 `newTitle`)。 36. `note_lint({ ref })`:核对报告为**问题清单 + 严重级**,且**不出现"总分"**;对含本机路径或未标语言代码块的笔记应能报出。 36b. 写一篇正文以 `> 一句话定位` 开头的笔记(不传 `summary`):核对 frontmatter 的 `简介` 有值,且**那句引用块在文件里只出现一次**(不在正文里重复一遍)。 37. `note_lint({ scope: 'vault' })`:核对批量汇总含"有问题的文档 N 篇"、规则命中、问题最多的文档;**无均分**(也不出现"平均"字样)。 38. `note_lint({ ref, rule: 'session-residue' })`:核对单规则视图;再对一条被 `lint.rulesOff` 关掉的规则查询,应返回"未启用或不适用于此类文档"。 ## 6 · 进度与记忆(study_progress / study_memory) 39. `study_progress(set)` 推进资料/小节 + 一条追问;`get` 核对;再 `set` 清空追问;最后恢复原值。 40. `study_memory(set prefs.验证=…)` → `get` 核对置顶与键值 → `remove` 核对;`set lastSummary=…` 核对"上次小结"置顶。 41. `study_memory(set _autoPrefs=on)` → `get` 核对手行显示"开启" → 设回原值;非法值应报错。 42. 核对「清空进度」不影响记忆(可用临时值演示后恢复)。 ## 7 · 需要用户配合的交互项(逐条发令) 43. 纠正 Agent 一次:"这次归档先别写,把规划给我看"——核对它只出提案、不落盘。 44. 说"别问了"——核对后续不再反诘。 45. 说"接着讲"——核对从 `study_progress` 断点续讲(而不是从头)。 46. 说一个新的领域侧重(如"美术类笔记要讲为什么,不写操作步骤")——核对 Agent 建议写进《笔记期望.md》或 `study_memory` 的 `prefs.*`,而不是自己编一套。 --- ## 收尾(必做) 47. 报告清单:列出本次在 vault 里新建/修改的**所有**路径(`【验证】…` 目录、微目录、存档目录)与 `.study/` 下产生的凭据(`plans/.json`)。 48. 恢复第 1 步记录的进度/记忆原值(`study_progress(set …)` / `study_memory(set/remove …)`)。 49. 给出**清理指引**(由用户执行,不由你删除):删除 `【验证】…` 目录、`.study/archive/<本次ID>/`、本次的 `.study/plans/.json`;如手改过《笔记期望.md》,核对是否要保留那一行。 50. 输出汇总表:每项 ✔/✘/⚠ + 一句话证据;把 ✘ 与 ⚠ 项单列,并给出可能原因(配置 / 门禁 / 索引缓存 / 环境)。