dsh-mastery-loop 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/package.json +1 -1
  3. package/skills/mastery-loop/SKILL.md +22 -21
  4. package/skills/mastery-loop/exam-templates.md +102 -0
  5. package/skills/mastery-loop/scripts/_lib.mjs +408 -0
  6. package/skills/mastery-loop/scripts/aggregate.mjs +155 -0
  7. package/skills/mastery-loop/scripts/graph.mjs +448 -0
  8. package/skills/mastery-loop/scripts/ledger.mjs +223 -0
  9. package/skills/mastery-loop/scripts/rewrite-links.mjs +81 -0
  10. package/skills/mastery-loop/scripts/scan.mjs +276 -0
  11. package/skills/mastery-loop/scripts/validate.mjs +115 -59
  12. package/skills/mastery-loop/templates.md +210 -62
  13. package/skills/mastery-loop-setup/SKILL.md +105 -76
  14. package/skills/mastery-loop-setup/seeds/config.json +39 -0
  15. package/skills/mastery-loop-setup/seeds/error-taxonomy.json +4 -0
  16. package/skills/mastery-loop-setup/seeds/errors.jsonl +1 -0
  17. package/skills/mastery-loop-setup/seeds/graph.json +13 -0
  18. package/skills/mastery-loop-setup/seeds/ledger.jsonl +2 -0
  19. package/skills/mastery-loop-setup/seeds/moc.md +15 -0
  20. package/skills/mastery-loop-setup/seeds/note.md +33 -0
  21. package/skills/mastery-loop-setup/seeds/paper-format.json +15 -0
  22. package/skills/mastery-loop-setup/seeds/state.jsonl +2 -0
  23. package/skills/mastery-loop-setup/seeds/config.md +0 -34
  24. package/skills/mastery-loop-setup/seeds/error-taxonomy.md +0 -17
  25. package/skills/mastery-loop-setup/seeds/errors.md +0 -48
  26. package/skills/mastery-loop-setup/seeds/index.md +0 -25
  27. package/skills/mastery-loop-setup/seeds/ledger.md +0 -26
  28. package/skills/mastery-loop-setup/seeds/paper-format.md +0 -30
@@ -1,132 +1,161 @@
1
1
  ---
2
2
  name: mastery-loop-setup
3
- description: 一次性初始化 mastery-loop:探测课程材料与笔记库,问清路径 / 素材 / 语言 / 融合方式 / 卷子格式,在知识库根目录生成 6 个文件并校验。首次使用 mastery-loop 之前手动跑一次。 / One-time setup for mastery-loop: explore materials and the notes vault, ask about paths, sources, language, merging and exam format, then scaffold the 6 root files.
3
+ description: >-
4
+ 一次性初始化或迁移 mastery-loop 的知识库:探测材料与既有笔记,问清「按什么分类」「范围」「素材」「语言」「卷面格式」,把 kb/(内容区)与 sys/(机器区)建起来,或把已有库按契约重建结构(内容原样保留),最后跑校验。首次使用 mastery-loop 之前跑一次。
5
+ / One-time setup or migration for mastery-loop: explore materials and existing notes, ask about classification, scope, sources, language and exam format, then scaffold kb/ + sys/ (or rebuild an existing library's structure without touching its content) and verify it.
4
6
  disable-model-invocation: true
7
+ user-invocable: true
5
8
  ---
6
9
 
7
10
  # mastery-loop 初始化
8
11
 
9
- 给 `mastery-loop` 铺好它假设的那套配置。**只跑一次**,之后 `mastery-loop` 直接用你建好的东西。
12
+ > **本文件是初始化 / 迁移流程。** 契约正文(*库长什么样、每个文件干什么*)在
13
+ > [`../mastery-loop/templates.md`](../mastery-loop/templates.md) —— **它是权威,改契约只改那里**,本文件只讲「怎么建」。
10
14
 
11
- **产出的 6 个文件**(**全部落在知识库根目录**,文件名固定):
15
+ **产出:两个并列文件夹**
12
16
 
13
- | 文件名 | 作用 |
17
+ | 路径 | 是什么 |
14
18
  | --- | --- |
15
- | `ledger.md` | 复习账本(进度 + 「首次对齐已完成」凭据) |
16
- | `index.md` | 主题 → 知识点的反向索引(可重建缓存) |
17
- | `errors.md` | 错误原因表(真值) |
18
- | `paper-format.md` | 每个课程的每个考试的卷子格式 |
19
- | `error-taxonomy.md` | 失分原因分类(**初始为空**) |
20
- | `config.md` | 路径 + 每门课的成员选择 + 语言标准 |
21
-
22
- > 这是**prompt-driven skill,不是确定性脚本**。探索、把发现摆出来、问、确认,然后才写。
19
+ | `kb/knowledge/` | 知识点笔记(一篇一个知识点) |
20
+ | `kb/MOC/` | 聚合产物,镜像分类层级(每层一份索引 + 叶子层讲次 MOC) |
21
+ | `sys/config.json` | 设定:路径 / 分类 / 语言 / 确认标记 |
22
+ | `sys/graph.json` | 关系图(前置关系的真值) |
23
+ | `sys/ledger.jsonl` | 账本(逐知识点复习统计,真值) |
24
+ | `sys/errors.jsonl` | 错误原因表 |
25
+ | `sys/error-taxonomy.json` | 失分原因分类(初始为空,agent 维护) |
26
+ | `sys/paper-format.json` | 卷面参数 |
27
+ | `sys/state.jsonl` | 状态(哈希 / schema 版本 / 检查时间) |
28
+ | `sys/changes.jsonl` | 变更流水 —— **只在没有 git 且用户不装 git 时才建** |
29
+
30
+ > 这是 **prompt-driven skill,不是确定性脚本**。探索、把发现摆出来、问、确认,然后才写。
23
31
 
24
32
  ---
25
33
 
26
34
  ## 0 · 硬规矩
27
35
 
28
- - **材料目录只读。** 不修改、不移动、不重命名用户给的任何课程材料。
29
- - **只写这 6 个文件**(+ 刷新 MOC 清单,如果库里有 MOC)。**不动知识点笔记的定义部分**。
30
- - **写之前先给草稿让用户过目**(第 6 步)。
31
- - **不含任何真实路径进 skill 包** —— 真实路径只写进用户的 `config.md`。
36
+ - **材料目录只读。** 不改、不移、不改名用户给的任何课程材料。
37
+ - **结构可重建,内容原样搬运。** 重建的只是 frontmatter 字段集、正文固定小节、链接写法、MOC / 索引;**内容是用户的**(一句话 / 核心内容 / 易错点 / 讲义出处),一个字节不动。
38
+ - **改什么先给清单。** 动手前先把「哪篇要动、动什么」摆给用户过目。
39
+ - **幂等。** 第二次跑必须零改动 —— 合规的文件**不重写**。
40
+ - **问出来的信息要留痕**:`(用户于 <YYYY-MM-DD HH:MM> 确认)`,就地只留最新一条。
41
+ - **不含任何真实路径进 skill 包** —— 真实路径只写进用户的 `sys/config.json`。
42
+ - **不自动 `commit`、绝不 `push`。**
32
43
 
33
44
  ---
34
45
 
35
46
  ## 1 · Explore(先看,别假设)
36
47
 
37
- - **材料**:用户给的课程目录下有什么?**先列实际目录,不要拿一份固定清单去套** —— 各课结构不同,有的课压根没有往年卷。
38
- - **笔记库**:有没有已存在的知识库?有没有 `MOC/`、`知识点/`?frontmatter 有哪些字段?
39
- - **是否已经初始化过**:`ledger.md` 在不在?**在的话先停下问用户**「要重新初始化,还是只补缺的」。
40
- - **git**:知识库是 git 仓库吗?(只影响要不要提醒用户 `config.md` 含真实路径)
48
+ - **材料**:先列用户给的目录里**实际有什么**,不套固定清单(各课结构不同,有的课压根没有往年卷)。
49
+ - **既有笔记库**:有没有已经成形的知识库?知识点在哪个目录?frontmatter 有哪些字段?正文有哪些小节?
50
+ - **是否已经初始化过**:`sys/` 在不在?**在就先停下问用户**「要重新初始化,还是只补缺的」。
51
+ - **git**:工作区是不是 git 仓库?(决定用 git 还是回退到 `sys/changes.jsonl` 记历史)
41
52
 
42
- ## 2 · 素材:两个类别
53
+ ### 1.1 合规扫描(**agent 做,不能脚本化** —— 初见的库状态无法预料)
43
54
 
44
- **必需的只有两个类别**,不是两个确定的文件:
55
+ 逐篇看三件事,产出清单:
45
56
 
46
- | 类别 | 用来 | **默认成员** | 类里其他合格成员 |
47
- | --- | --- | --- | --- |
48
- | **建库参考** | 建知识库 | **课程讲义** | 教学大纲 / `exam_topics` / 课件 / 教科书章节 |
49
- | **出题参考** | 出题与判分 | **往年试卷** | 往年卷答案 / Lab sheet / Worksheet / Assessment 结构 |
57
+ | 看什么 | 合规 |
58
+ | --- | --- |
59
+ | frontmatter 字段集 | `类型` / `归属`(来源文件,多值)/ `aliases` / `标签`;**没有** `课程:` / `主题:` / `难度:` |
60
+ | 正文小节 | `一句话 / 核心内容 / 前置知识 / 后置知识 / 易错点 / 考点 / 讲义出处`;**没有 `## 平行关联`** |
61
+ | 链接写法 | 带路径、相对工作区根、带后缀、带别名 |
62
+
63
+ **合规的 → 一行不动**;不合规的 → 只改结构、内容原样搬。清单交给用户确认后再动(§6)。
50
64
 
51
- **判定分两级**:
65
+ ---
66
+
67
+ ## 2 · 分类与范围(**必问,不默认推荐**)
52
68
 
53
- 1. **某一类整类为空** → 真·缺必需项,告诉用户缺什么、去哪找
54
- 2. **类里有内容、但没有默认成员** → **不算缺**,只需问一句「用类里另一样顶吗」
69
+ **分类是全库级定义**,层数和每层有几个类都不固定。
55
70
 
56
- **换成员必须问,不能默认。** 用户定了之后**记进 `config.md`**,之后不再问。
71
+ 1. **先扫一遍材料**,给出一版候选建议(例如「你这里看起来是按『课程 → 讲次』分的」);
72
+ 2. **问用户「按什么分类」** —— 用户可能不是按上课学的(比如「书 → 章」),**不要预设课程**;
73
+ 3. **问用户「每一层具体怎么认」** —— 得到**解析规则**(例:课程 = 来源路径第一层文件夹名;讲次 = 文件名里的 `W1L3`);
74
+ 4. 用户校正后,把**层级 + 每条解析规则 + 每层类值(+ ASCII slug)**写进 `sys/config.json`,并带确认标记;
75
+ 5. **范围**:用户说「整理某部分」时,**从分类里选**(一个或多个类值)。不同范围**共用同一套分类**。
76
+
77
+ ---
78
+
79
+ ## 3 · 素材:两个类别
80
+
81
+ **必需的只有两个类别**,不是两个确定的文件:
57
82
 
58
- > 同时问一句:**「有没有你不想让我读的?」**
83
+ | 类别 | 用来 | **默认成员** | 类里其他合格成员 |
84
+ | --- | --- | --- | --- |
85
+ | **建库参考** | 建知识库 | **讲义** | 教学大纲 / exam_topics / 课件 / 教科书章节 |
86
+ | **出题参考** | 出题与判分 | **往年试卷** | 往年卷答案 / Lab sheet / Worksheet / Assessment 结构 |
59
87
 
60
- ## 3 · 语言标准
88
+ **判定分两级**:① **某一类整类为空** → 真缺,告诉用户缺什么、去哪找;② **类里有内容但没默认成员** → **不算缺**,问一句「用类里另一样顶吗」。
61
89
 
62
- **按 6 个产物类别分别问**(用户可以用自然语言回答,比如「全都中英双语对照」):
90
+ **换成员必须问**,定了记进 `sys/config.json`(带确认标记),之后不再问。同时问一句:**「有没有你不想让我读的?」**
63
91
 
64
- 1. 知识点笔记(正文 / 标题 / `aliases` / MOC / 索引)
65
- 2. 出的题(题干 / 选项)
66
- 3. 批改与解析
67
- 4. 记录性文件(`ledger.md` 等)
68
- 5. 产出(复习清单 / 考前 list)
69
- 6. 机制层(frontmatter 字段名 / `config.md`)
92
+ ---
70
93
 
71
- > ⚠️ **例外**:`errors.md` 里的**错误原因默认用英文** —— 它要套 ASD-STE100 的规则,不该跟着别的类别走。
72
- > 📌 **不要预设双语。** 有人要法文、有人只要中文,问出来。
94
+ ## 4 · 语言标准
73
95
 
74
- ## 4 · 融合(用户已有知识库时)
96
+ **按 6 个产物类别分别问**(用户可以用自然语言回答,如「全都中英双语对照」):① 知识点笔记(正文 / 标题 / `aliases` / MOC)② 出的题 ③ 批改与解析 ④ 记录性文件 ⑤ 产出(复习清单 / 考前 list)⑥ 机制层(字段名 / config)。
75
97
 
76
- **目标不是把用户的库改成我们的样子,而是融合。改什么都要问。**
98
+ > ⚠️ **`sys/errors.jsonl` 里的错误原因默认用英文** —— 它要套 ASD-STE100 的规则,不跟别的类别走。
99
+ > 📌 **不要预设双语。**
77
100
 
78
- - **缺 MOC** → 问用户:「按目录/章节能聚出 N 个主题,**要我替你建 MOC 吗**?」**不建是合法选项**(没有 MOC 时,`index.md` 自己就是那份清单)。
79
- - **字段冲突** → **并存 + 映射**,不要轻易改名(改名会打烂用户已有的查询/模板/Dataview)。有 `章节:` 就保留它,另加 `主题:`,值从它映射过来。
80
- - **`主题` 推不出来**(压根没有讲次/章节概念)→ **先推一版草案**(按目录结构或笔记命名规律聚类),摆给用户改。**别直接问「你的主题是什么」** —— 那问题用户答不上来。
81
- - **不动笔记正文**。新字段是**加**上去的。
101
+ ---
82
102
 
83
- ## 5 · 卷子格式
103
+ ## 5 · 卷面格式
84
104
 
85
- **每个课程的每个考试各一条**(期中 / 期末 / in-class / coursework 形状不同,必须分开)。
105
+ **每个课程的每场考试各一条**(期中 / 期末 / in-class / coursework 形状不同,必须分开),落进 `sys/paper-format.json`:时间 / 总分 / 题数 / 题型 / 分值分布,并**记住来源**(抄自哪份文件)。
86
106
 
87
- 从材料里抄:时间 / 总分 / 题数 / 题型 / 分值分布,并**记住来源**(抄自哪份文件)。
107
+ **没有往年卷时**:先问用户;用户没更好的主意 → 用**默认出卷法 = 判断题 + 每题说明理由**,并在该条写明。
88
108
 
89
- **没有往年卷时**:先问用户该怎么办。
90
- 用户没有更好的主意 → 用**默认出卷法 = 判断题 + 每题说明理由**,并在该条目里写明「无往年卷 → 用默认出卷法」。
109
+ ---
91
110
 
92
- ## 6 · Confirm and edit
111
+ ## 6 · 重建(合规检查 → 清单 → 动手)
93
112
 
94
- **把 6 个文件的草稿摆给用户过目**,让他改。然后再写。
113
+ 1. **先按 §1.1 逐篇判定**,把清单摆给用户(哪篇要动、动什么、为什么);
114
+ 2. 用户点头后,**按分类分层一块一块做**(例:先 DL L1,做完跑校验,再下一块);
115
+ 3. **安全网**:有 git → 提示用户先 commit;没有 git → 先把 `kb/` + `sys/` 复制一份到工作区外的备份目录再动手;
116
+ 4. 重建内容:frontmatter 字段集 · 正文小节顺序 · 链接改写 · MOC / 索引;
117
+ 5. **`## 平行关联` 里的链接不要丢** —— 转成 `sys/graph.json` 里的边(判据仍按契约第二节)。
95
118
 
96
- 草稿内容由本 skill 目录下的**种子模板**填充:
119
+ ---
97
120
 
98
- - [ledger.md](./seeds/ledger.md) —— 账本
99
- - [index.md](./seeds/index.md) —— 索引
100
- - [errors.md](./seeds/errors.md) —— 错误原因表
101
- - [paper-format.md](./seeds/paper-format.md) —— 卷子格式
102
- - [error-taxonomy.md](./seeds/error-taxonomy.md) —— 失分原因分类(**保持为空**)
103
- - [config.md](./seeds/config.md) —— 配置
121
+ ## 7 · 落盘
104
122
 
105
- **填充要点**:
123
+ 写进**工作区根**,按契约第一节的布局。**顺序写死,不许反向**:
106
124
 
107
- - `ledger.md`:先铺**全部知识点**,`是否学习过 = 否`、`做对/总共出过 = —`、`熟练程度 = NULL`;**顶部的「首次对齐」标记行写上日期与迁移篇数**
108
- - `index.md`:按 `主题` 字段反向生成(已经算出主题的那些)
109
- - `errors.md`:只写结构,**初始没有条目**
110
- - `paper-format.md`:第 5 步收来的每条考试一格
111
- - `error-taxonomy.md`:**保持空**
112
- - `config.md`:路径、每门课的成员选择、语言标准填满
125
+ ```
126
+ ① kb/knowledge/(知识点) + sys/graph.json(关系图)
127
+ ② kb/MOC/ 的机器区(由 aggregate.mjs 从「归属 + 图」聚合)
128
+ ③ kb/MOC/ 的手写区(agent / 人写:主线、脉络、考点提示)
129
+ ```
113
130
 
114
- ## 7 · Write
131
+ 种子模板(`seeds/`)→ 填好草稿、给用户过目、再写:
115
132
 
116
- 写进**知识库根目录**,用**上面那 6 个固定文件名**。
133
+ | 种子 | 填什么 |
134
+ | --- | --- |
135
+ | `seeds/config.json` | 路径、分类(层级 / 解析规则 / 类值 / slug)、语言、git |
136
+ | `seeds/graph.json` | `用途` / `规则` / `coverage` / `edges` |
137
+ | `seeds/ledger.jsonl` | 先铺**本次范围内全部知识点**,`是否学习过 = 否`、`做对/总共出过 = 0`、`熟练程度 = null` |
138
+ | `seeds/errors.jsonl` | 只有头部说明行,**初始没有条目** |
139
+ | `seeds/error-taxonomy.json` | **保持为空** |
140
+ | `seeds/paper-format.json` | §5 收来的每条考试一格 |
141
+ | `seeds/state.jsonl` | 只有头部说明行 |
142
+ | `seeds/note.md` | 单篇知识点的骨架(frontmatter + 固定小节) |
143
+ | `seeds/moc.md` | 一份 MOC 的骨架(机器区标记 + 手写区) |
117
144
 
118
- 若有 MOC:**先写 `index.md`,再从索引刷新各 MOC 的「## 知识点清单」** —— **永不反向**。
145
+ ---
119
146
 
120
147
  ## 8 · 校验
121
148
 
122
- 跑校验脚本,确认 6 个文件真的建好了:
123
-
124
149
  ```bash
125
- node scripts/validate.mjs <知识库根目录>
150
+ node <skill>/scripts/validate.mjs <工作区根> # 结构齐不齐
151
+ node <skill>/scripts/graph.mjs check <工作区根> # 六项图校验
152
+ node <skill>/scripts/scan.mjs <工作区根> # 五项扫库
126
153
  ```
127
154
 
128
- **6 个文件都在 = 初始化完成。** 缺哪个就补哪个,别靠感觉。
155
+ **结构齐 + 图六项全过 = 初始化完成。** 缺哪个补哪个,别靠感觉。
156
+
157
+ ---
129
158
 
130
159
  ## 9 · Done
131
160
 
132
- 告诉用户:初始化完了,`mastery-loop` 之后会读这些文件;想改直接编 `config.md` 那几个文件;**只有要换素材来源或从头再来时才需要重跑本 skill**。
161
+ 告诉用户:初始化完了,`mastery-loop` 之后会读这些文件;想改直接编 `sys/config.json`;**只有要换素材来源、改分类、或从头再来时才需要重跑本 skill**。
@@ -0,0 +1,39 @@
1
+ {
2
+ "用途": "本文件是这套知识库的设定:路径、分类(层级与解析规则)、语言标准、git。凡「问用户才得到」的值后面跟确认标记。",
3
+ "schema_version": "0.2.0",
4
+ "路径": {
5
+ "工作区根": ".",
6
+ "材料": ["<相对工作区根的目录,例:Deep Learning/doc>"],
7
+ "知识库": "kb",
8
+ "机器区": "sys"
9
+ },
10
+ "分类": {
11
+ "层级": ["<第 1 层,例:课程>", "<第 2 层,例:讲次>"],
12
+ "字段": "分类",
13
+ "分隔符": "/",
14
+ "说明": "每篇知识点在生成时就带上 分类 字段(一条一个类路径,用分隔符拼层级);脚本只读它,不解析路径。怎么算是哪个类,由 agent 看这个库后和用户确认,不预设形状。",
15
+ "类值": {
16
+ "<第 1 层>": [
17
+ { "值": "<类值,例:深度学习>", "slug": "<ASCII,例:dl>" }
18
+ ],
19
+ "<第 2 层>": []
20
+ },
21
+ "确认": "(用户于 <YYYY-MM-DD HH:MM> 确认)"
22
+ },
23
+ "范围": [
24
+ { "名称": "<范围名>", "值": ["<分类里的一个或多个类值>"], "确认": "(用户于 <YYYY-MM-DD HH:MM> 确认)" }
25
+ ],
26
+ "语言": {
27
+ "知识点笔记": "<正文 / 标题 / aliases / MOC 用什么语言>",
28
+ "出的题": "",
29
+ "批改与解析": "",
30
+ "记录性文件": "",
31
+ "产出": "",
32
+ "机制层": ""
33
+ },
34
+ "git": {
35
+ "使用": true,
36
+ "说明": "有 git 就用 git 承担历史(skill 不自动 commit、绝不 push);没有且用户不装 → 启用 sys/changes.jsonl"
37
+ },
38
+ "排除": ["<用户说不想让我读的>"]
39
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "用途": "本文件是失分原因的分类表:初始为空,之后由 agent 维护(不由人维护)。",
3
+ "分类": []
4
+ }
@@ -0,0 +1 @@
1
+ {"kind":"header","用途":"本文件是错误原因表:逐知识点登记用户实际犯过的错,供复习时逐字复用。初始没有条目。"}
@@ -0,0 +1,13 @@
1
+ {
2
+ "用途": "本文件是知识点关系图:只存边(from 是 to 的前置),节点就是 kb/knowledge/ 里的笔记本身。",
3
+ "规则": "判据:删掉 from,to 的核心内容就解释不通。只收直接前置;同一篇的前置集合内两两不可比。顺序按知识深度,不是资料时间。",
4
+ "导出": "后置 = 本表的反向(脚本算);没有「平行」段。",
5
+ "version": 1,
6
+ "updatedAt": "<YYYY-MM-DD HH:MM>",
7
+ "coverage": {
8
+ "<第 1 层类值,例:深度学习>": { "done": [], "todo": ["<例:L1>", "<例:L2>"] }
9
+ },
10
+ "edges": [
11
+ { "from": "<前置知识点名>", "to": "<后置知识点名>", "reason": "<≤30 字:to 依赖 from 的那一步>" }
12
+ ]
13
+ }
@@ -0,0 +1,2 @@
1
+ {"kind":"header","用途":"本文件是复习账本:逐条记每个知识点的复习统计。它是唯一不可重建的真值 —— 删了就永久丢进度。一行一个知识点,只追加/改行,不要重排。"}
2
+ {"知识点":"<知识点名>","是否学习过":false,"做对":0,"总共出过":0,"熟练程度":null,"最后复习日期":null}
@@ -0,0 +1,15 @@
1
+ # <类值> <下一层类值>(MOC)
2
+
3
+ > 本文件是聚合产物:机器区由 `aggregate.mjs` 从「知识点的 `归属` + `sys/graph.json`」生成并覆盖;手写区脚本永不碰。
4
+
5
+ <!-- AUTO:BEGIN -->
6
+ - [[<相对工作区根的知识点路径>.md|<知识点>]] —— <一句话,抄自该篇的 `## 一句话`>
7
+ <!-- AUTO:END -->
8
+
9
+ ## 主线(手写区)
10
+
11
+ <这一讲的主线 / 脉络,agent 或人写>
12
+
13
+ ## 脉络图(手写区)
14
+
15
+ <可选>
@@ -0,0 +1,33 @@
1
+ ---
2
+ 类型: 知识点
3
+ 分类: ["<类路径 1>/<类路径 2>"]
4
+ 归属: ["[[<相对工作区根的来源文件路径>|<人类可读别名>]]"]
5
+ aliases: ["<英文名>"]
6
+ 标签: [<标签>, <标签>]
7
+ ---
8
+
9
+ # <中文名> <英文名>
10
+
11
+ ## 一句话
12
+
13
+ <一句话说清它是什么>
14
+
15
+ ## 核心内容
16
+
17
+ <正文>
18
+
19
+ ## 前置知识
20
+
21
+ - [[<相对工作区根的知识点路径>.md|<前置知识点>]] —— <≤30 字理由,与 sys/graph.json 的 reason 逐字一致>
22
+
23
+ ## 后置知识
24
+
25
+ _(由图反算,不手写)_
26
+
27
+ ## 易错点 / 考点
28
+
29
+ - <易错点>
30
+
31
+ ## 讲义出处
32
+
33
+ <哪份材料、第几页 / 第几张 slide>
@@ -0,0 +1,15 @@
1
+ {
2
+ "用途": "本文件是卷面参数表:每个课程的每场考试各一条(期中 / 期末 / in-class / coursework 形状不同,必须分开),出题时从这里抄。",
3
+ "考试": [
4
+ {
5
+ "课程": "<课程名>",
6
+ "考试": "<例:期中 / 期末 / in-class>",
7
+ "时长": "<抄自材料>",
8
+ "总分": "<抄自材料>",
9
+ "题数": "<抄自材料>",
10
+ "题型与分值分布": "<抄自材料>",
11
+ "来源": "<抄自哪份文件>"
12
+ }
13
+ ],
14
+ "备注": "没有往年卷时用默认出卷法(判断题 + 每题说明理由),并在该条写明。"
15
+ }
@@ -0,0 +1,2 @@
1
+ {"kind":"header","用途":"本文件是状态表(变化检测):有 git 时只记上次检查到的提交号;没有 git 时逐文件记内容哈希。管「要不要重看」,不管「发生过什么」(那是 git / changes.jsonl)。"}
2
+ {"mode":"git","last":"<上次检查到的 commit>","schema":"0.2.0","checked":"<YYYY-MM-DD HH:MM>"}
@@ -1,34 +0,0 @@
1
- # mastery-loop 配置
2
-
3
- > 由 `mastery-loop-setup` 在**首次初始化**时写入。
4
- > 之后 `mastery-loop` **有变动时读** —— 路径按需直接读,读不到就问;**成员选择与语言标准定下就不再问**。
5
-
6
- ## 1 · 路径
7
-
8
- - **材料根目录**:<绝对路径>
9
- - **知识库根目录**:<绝对路径>
10
-
11
- > 🔒 本文件含本机真实路径。**要不要提交进 git,你自己决定** —— 发布出去的 skill 包里不含任何真实路径。
12
-
13
- ## 2 · 每门课的类别成员选择
14
-
15
- 只有**没有默认成员**时才需要问(默认成员:建库参考 = **讲义**,出题参考 = **往年试卷**)。
16
-
17
- | 课程 | 建库参考 | 出题参考 |
18
- | --- | --- | --- |
19
- | <课程名> | <讲义 / 教学大纲 / 课件 / 教科书章节> | <往年试卷 / 答案 / Lab sheet / Worksheet / Assessment 结构> |
20
-
21
- ## 3 · 语言标准
22
-
23
- **按产物的 6 个类别分别定。** 用户可以用自然语言回答(「全都中英双语对照」这种也算)。
24
-
25
- | 类别 | 含什么 | 标准 |
26
- | --- | --- | --- |
27
- | **1 知识点笔记** | 正文 / 标题 / `aliases` / MOC / 索引 | |
28
- | **2 出的题** | 题干 / 选项 | |
29
- | **3 批改与解析** | 给分表 / 解析 / 薄弱点定位 | |
30
- | **4 记录性文件** | `ledger.md` / `errors.md` / `paper-format.md` / `error-taxonomy.md` | |
31
- | **5 产出** | 复习清单 / 考前 list | |
32
- | **6 机制层** | frontmatter 字段名 / 本配置文件 | |
33
-
34
- > ⚠️ **`errors.md` 里的错误原因例外**:它**默认用英文**,因为要套 ASD-STE100 的规则。
@@ -1,17 +0,0 @@
1
- # 失分原因分类
2
-
3
- > ⚠️ **这里不预设类别 —— 初始就是空的,这是对的。**
4
- >
5
- > `errors.md` 里那些**固定表述的错误原因本身**就是统计单位。
6
- > 等某个知识点的错误原因多到看不完(默认 **> 60 条**)再回来**归纳**,把类别写在这里。
7
-
8
- ## 归纳出来的类别写在这下面
9
-
10
- <!--
11
- 格式建议(等真的归纳时再用):
12
-
13
- ## <类别名>
14
- - 含义:
15
- - 涵盖哪些错误原因:
16
- - 对应的补射方向:
17
- -->
@@ -1,48 +0,0 @@
1
- # 错误原因表
2
-
3
- > ⚠️ **本文件由 `mastery-loop` 维护。**
4
- > 是**真值**(错误历史只在这里),**删掉无法重建**。
5
-
6
- ## 两条铁律
7
-
8
- 1. **表述必须逐字一致才能被统计。** 同一个偏移犯三次,三次必须命中**同一条**。
9
- 新增前先**在该知识点分组内全量检索**:语义相同 → **复用原句、只追加日期**,**不许重新措辞**。
10
- 2. **复合错误要拆分。** 一次作答里错了思维链又错了答案 → **两条**。
11
-
12
- ## 写法(错误原因用英文)
13
-
14
- 按 **ASD-STE100** 的规则写(`mastery-loop` 声称的是「尽可能按 STE 规则写」,**不是**「符合 ASD-STE100」):
15
-
16
- - 句式优先 **`把 A 当成 B`**(概念混淆类);其余用 **`<动作> + <对象>`**
17
- - **一句只写一个偏移** —— 出现 `and / but / because / so / then` 就是两个命题,必须拆
18
- - **不超过 20 词**(Rule 5.1);**名词短语不超过 3 词**(Rule 2.1)
19
- - **不写**:题号、具体数字、时间词(`today / last time`)、第一人称、情绪词(`careless`)
20
- - **动词开头**,且**必须带对象**(禁 `wrong`、`didn't know` 这种空动词)
21
- - **指代不悬空** —— `it / this / the former` 必须在同一行找得到所指
22
- - **「概念混淆」必须写出 A 和 B** —— 只写 `concept confusion` 等于没写
23
-
24
- ## 结构(**先按知识点分组,再按错误原因分组**)
25
-
26
- ```markdown
27
- # 错误原因表
28
-
29
- ## [[核技巧]]
30
-
31
- ### forgot to normalise before comparing
32
- - 2026-10-09
33
- - 2026-10-11
34
-
35
- ### treated explicit inner product as the kernel value
36
- - 2026-10-11
37
-
38
- ## [[梯度]]
39
-
40
- ### took steepest ascent for steepest descent
41
- - 2026-10-09
42
- ```
43
-
44
- ## 维护规则
45
-
46
- - **去重键 = 知识点 + 错误原因** → 同一句话在两个知识点上**各自成条**
47
- - 重复出现 → **只在该条目下追加日期**,不新增条目
48
- - **单个知识点上限 60 条**;超了就该回头归纳,把类别写进 `error-taxonomy.md`
@@ -1,25 +0,0 @@
1
- # 索引 —— 主题 → 知识点
2
-
3
- > ✅ **本文件是派生缓存,删了可以重建**(真值在每篇知识点的 `主题` 字段里)。
4
- > 它存在是为了**不必扫全库**。
5
-
6
- ## 更新顺序(写死,不许反向)
7
-
8
- ```
9
- ① 先改这里(索引)
10
- ② 再从索引刷新受影响 MOC 的「## 知识点清单」
11
- ③ 永不反向 —— 绝不因为有人手改了 MOC 清单就回写索引
12
- ```
13
-
14
- 派生链共三级:`主题` 字段(真值)→ **索引**(本文件,对 MOC 而言是真值)→ **MOC 清单**(索引的复制)
15
-
16
- ## 内容
17
-
18
- 每个主题一节,列出属于它的知识点:
19
-
20
- ## [[<主题名(MOC)>]]
21
-
22
- - [[<知识点>]]
23
- - [[<知识点>]]
24
-
25
- > 📌 **如果这个知识库没有 MOC**,本文件就是那份清单本身 —— 第 ② 步自然消失。
@@ -1,26 +0,0 @@
1
- # 复习账本
2
-
3
- > ⚠️ **本文件由 `mastery-loop` 维护。** 除了顶部的标记行和手工订正,日常不要手改。
4
- > 它是**真值**(做题统计只在这里),**删掉无法重建** —— 与索引不同。
5
-
6
- > 首次对齐:<YYYY-MM-DD> 完成 · schema v1 · 迁移 <N> 篇
7
-
8
- | 知识点 | 是否学习过 | 做对 | 总共出过 | 熟练程度 | 最后复习日期 |
9
- | --- | --- | --- | --- | --- | --- |
10
- | [[<知识点>]] | 否 | — | — | NULL | — |
11
- | [[<知识点>]] | 是 | 3 | 5 | 60% | <YYYY-MM-DD> |
12
-
13
- ## 列的含义
14
-
15
- - **知识点** —— `[[wikilink]]`,纯名字,不带路径、不带 `.md`
16
- - **是否学习过** —— 是 / 否(`否` 时后面几列都是 `—` / `NULL`)
17
- - **做对** —— 次数。**判定口径**:思维链对 **且** 答案对,才记「做对」(**蒙对不算**)
18
- - **总共出过** —— 次数
19
- - **熟练程度** —— `做对 / 总共出过`,百分比展示;**没学过的写 `NULL`**(不是 0%)
20
- - **最后复习日期** —— 用于 ① 复习清单排序 ② 10%「已掌握点」挑最久没碰的
21
-
22
- ## 达标规则(供回看)
23
-
24
- - 单个知识点**达标** = `总共出过 ≥ 5` **且** `熟练程度 ≥ 本次目标正确率`
25
- - `总共出过 < 5` → 标「**样本不足**」,继续出题,**不算达标、也不算失败**
26
- - 达标是**逐点**判断的,不是单轮卷面分
@@ -1,30 +0,0 @@
1
- # 卷子格式
2
-
3
- > ⚠️ **生成卷子时从这里查对应考试的那一条** —— `mastery-loop` **不再每轮从往年卷现抄参数**。
4
- > 由 `mastery-loop-setup` 在首次初始化时生成;**有变动时读**。
5
-
6
- ## 结构:**每个课程的每个考试各一条**
7
-
8
- (期中 / 期末 / in-class / coursework 形状不同,必须分开)
9
-
10
- ## <课程名>
11
-
12
- ### <考试名>
13
-
14
- - **时间**:<分钟>
15
- - **总分**:<分>
16
- - **题数**:<题>
17
- - **题型**:<判断 / 定义 / 计算 / 画图 / 证明 / 简答…>
18
- - **分值分布**:<…>
19
- - **来源**:<抄自哪份往年卷;或「**无往年卷 → 用默认出卷法**」>
20
-
21
- ### <考试名>
22
-
23
- …
24
-
25
- ## 没有往年卷时:默认出卷法
26
-
27
- **判断题 + 每题说明理由。**
28
- (这也正好接上思维链要求 —— 「说出为什么」就是思维链。)
29
-
30
- > 📌 优先**问用户**该怎么办;用户没有更好的主意时,用上面这个默认。