运行时配置(第0步 — 任何处理之前)
阅读这些文件以配置特定领域的操作行为:
-
ops/derivation-manifest.md— 词汇映射,平台提示- 使用
vocabulary.notes表示笔记文件夹名称 - 使用
vocabulary.note/vocabulary.note_plural表示笔记类型引用 - 使用
vocabulary.reweave表示输出中的过程动词 - 使用
vocabulary.topic_map/vocabulary.topic_map_plural表示MOC引用 - 使用
vocabulary.cmd_verify表示下一阶段建议
- 使用
-
ops/config.yaml— 处理深度,管道链processing.depth: deep | standard | quickprocessing.chaining: manual | suggested | automaticprocessing.reweave.scope: related | broad | full
如果这些文件不存在,则使用通用默认值。
处理深度适应:
| 深度 | Reweave行为 |
|---|---|
| deep | 完全重新考虑。广泛搜索更新相关的{vocabulary.note_plural}。考虑拆分,重写,挑战。评估声明锐化。多次搜索。 |
| standard | 平衡审查。搜索语义邻居和同一{vocabulary.topic_map} {vocabulary.note_plural}。添加连接,如需要则锐化。 |
| quick | 最小向后传递。只添加明显的连接。不重写或拆分。 |
Reweave范围:
| 范围 | 行为 |
|---|---|
| related | 搜索与目标直接相关的{vocabulary.note_plural}(同一{vocabulary.topic_map},语义邻居) |
| broad | 在所有{vocabulary.topic_map_plural}和语义空间中搜索潜在连接 |
| full | 完整回顾,包括潜在拆分,重写和声明挑战 |
立即执行
目标:$ARGUMENTS
立即解析:
- 如果目标包含
[[note name]]或笔记名称:重新编织该特定{vocabulary.note} - 如果目标包含
--handoff:在最后输出RALPH HANDOFF块 - 如果目标为空:找到最需要重新编织的{vocabulary.note_plural}(最旧的,最稀疏的,最过时的)
- 如果目标是 “recent” 或 “–since Nd”: 重新编织N天内未触及的{vocabulary.note_plural}
- 如果目标是 “sparse”: 查找连接最少的{vocabulary.note_plural}
执行这些步骤:
- 完全阅读目标{vocabulary.note} — 理解其当前声明,连接和年龄
- 问重新编织问题: “如果今天我写这个{vocabulary.note},用我现在知道的一切,会有什么不同?”
- 如果任务文件存在(管道执行):阅读它,看看/reflect发现了什么。任务文件的Reflect部分显示哪些连接刚刚被添加,哪些{vocabulary.topic_map_plural}被更新 — 这是你向后传递的起始上下文。
- 搜索更新相关的{vocabulary.note_plural} — 使用双重发现(语义搜索 + {vocabulary.topic_map}浏览)找到创建在目标之后的{vocabulary.note_plural},应该连接
- 评估需要改变的内容:
- 添加连接到更新的{vocabulary.note_plural},当这个被写时不存在
- 如果理解已经发展,锐化声明
- 如果{vocabulary.note}现在涵盖了应该分开的想法,考虑拆分
- 如果新证据与之矛盾,挑战声明
- 如果理解更深了,重写散文
- 进行更改 — 编辑{vocabulary.note},添加新连接(内联链接和上下文),改进散文,如果需要,锐化声明
- 更新{vocabulary.topic_map_plural} — 如果{vocabulary.note}的主题成员资格改变,更新相关{vocabulary.topic_map_plural}
- 如果任务文件存在: 更新{vocabulary.reweave}部分
- 报告 — 结构化摘要,说明什么改变了,为什么
- 如果在目标中
--handoff:输出RALPH HANDOFF块
现在开始。 以下参考解释方法 — 用于指导,不作为输出。
重新编织
用你今天知道的一切重新审视旧的{vocabulary.note_plural}。{vocabulary.note_plural}是活文档 — 它们成长,被重写,分开,锐化它们的声明。这是保持网络活跃的向后传递。
哲学
{vocabulary.note_plural}是活文档,不是完成品。
上个月写的{vocabulary.note}是带着上个月的理解写的。从那时起:
- 新的{vocabulary.note_plural}存在,与之相关
- 对主题的理解加深了
- 声明可能需要锐化或挑战
- 曾经是一个想法,现在可能是三个
- 当时不明显的连接现在变得明显
重新编织不仅仅是 “添加向后链接。” 它是根据当前知识完全重新考虑{vocabulary.note}。问:“如果我今天写这个{vocabulary.note},会有什么不同?”
“你昨天写的{vocabulary.note}是一个假设。今天的知识是测试。”
重新编织可以做什么
| 动作 | 何时做 |
|---|---|
| 添加连接 | 新的{vocabulary.note_plural}存在,应该在这里链接 |
| 重写内容 | 理解发展了,散文应该反映它 |
| 锐化声明 | 标题太模糊,没有用 |
| 拆分{vocabulary.note} | 多个声明捆绑在一起 |
| 挑战声明 | 新证据与原始的相矛盾 |
| 改进描述 | 更好的框架出现了 |
| 更新例子 | 现在有更好的插图存在 |
重新编织不仅仅是/reflect的第4阶段向后应用。它是完全重新考虑。
调用模式
/reweave [[note]]
根据当前知识,完全重新考虑特定的{vocabulary.note}。
/reweave (无参数)
扫描需要重新编织的候选者,呈现排名列表。
/reweave --sparse
处理/health标记为稀疏的{vocabulary.note_plural}。
/reweave --since Nd
重新编织所有N天内未更新的{vocabulary.note_plural}。
如何找到候选者:
# Find notes not modified in 30 days
find {vocabulary.notes}/ -name "*.md" -mtime +30 -type f
/reweave --handoff [[note]]
外部循环模式/ralph:
- 正常执行完整工作流程
- 最后,输出结构化的RALPH HANDOFF块
- 用于每个任务以新鲜上下文运行孤立阶段时
工作流程
第1阶段:理解{vocabulary.note}的现状
完全阅读目标{vocabulary.note}。理解:
- 它提出了什么声明?
- 什么理由支持声明?
- 它有什么连接?
- 它是什么时候写的/最后修改的?
- 创建时的上下文是什么?
如果存在任务文件(管道执行)。任务文件的Reflect部分显示:
- /reflect刚刚添加了哪些连接
- 哪些{vocabulary.topic_map_plural}被更新了
- 哪些综合机会被标记
- 发现追踪看起来如何
这种上下文防止了冗余工作 — 你知道/reflect已经找到了什么,所以你可以把重点放在它错过的或需要更深入考虑的事情上。
第2阶段:收集当前知识(双重发现)
使用与/reflect相同的双重发现模式 — {vocabulary.topic_map}探索和平行的语义搜索。
路径1:{vocabulary.topic_map}探索 — 策划导航
从{vocabulary.note}的主题页脚,确定它属于哪些{vocabulary.topic_map}(s):
- 阅读相关的{vocabulary.topic_map}(s)
- 有什么综合可能影响这个{vocabulary.note}?
- 核心思想中的更新{vocabulary.note_plural}应该引用这个{vocabulary.note}吗?
- 这个{vocabulary.note}涉及哪些紧张关系?
路径2:语义搜索 — 找到{vocabulary.topic_map_plural}可能遗漏的东西
语义搜索的三级后备:
第1级 — MCP工具(首选): 使用 mcp__qmd__deep_search(混合搜索,带有扩展 + 重新排名):
- 查询:“[{vocabulary.note}的核心概念和机制]”
- 限制:15
第2级 — bash qmd带锁定序列化: 如果MCP工具失败或不可用:
LOCKDIR="ops/queue/.locks/qmd.lock"
while ! mkdir "$LOCKDIR" 2>/dev/null; do sleep 2; done
qmd query "[note's core concepts]" --collection {vocabulary.notes_collection} --limit 15 2>/dev/null
rm -rf "$LOCKDIR"
锁定防止多个并行工作器同时加载大型模型。
第3级 — 仅grep: 如果MCP和bash都失败,记录"qmd不可用,仅grep发现"并依赖{vocabulary.topic_map} + 关键词搜索。这降低了质量,但不阻碍工作。
通过相关性评估结果 — 阅读任何标题或片段表明真正连接的结果。
还检查:
- 回链接 — 什么{vocabulary.note_plural}已经引用这个?它们是否建议目标应该引用回来?
grep -rl '\[\[target note title\]\]' {vocabulary.notes}/ --include="*.md"
关键问题: 我今天知道什么,当我写这个{vocabulary.note}时,我还不知道?
第3阶段:评估声明
原始声明仍然有效吗?
| 发现 | 动作 |
|---|---|
| 声明有效,证据加强 | 添加支持连接 |
| 声明有效但框架薄弱 | 重写以清晰 |
| 声明太模糊 | 锐化以更具体 |
| 声明太宽泛 | 分拆成专注的{vocabulary.note_plural} |
| 声明部分错误 | 用细微差别修订 |
| 声明被反驳 | 标记紧张,提出修订 |
锐化测试:
阅读标题。问:有人能不同意这个具体的声明吗?
- 如果是,声明足够锐利
- 如果不是,它太模糊了,需要锐化
示例:
- 模糊:“上下文很重要”(谁会不同意?)
- 锐利:“显式上下文比自动记忆更重要”(可争论的立场)
拆分测试:
这个{vocabulary.note}是否提出了多个可以独立存在的声明?
- 如果{vocabulary.note}连接到5个以上不同领域的主题,它可能需要拆分
- 如果你想链接到它的部分而不是全部,它是拆分候选者
第4阶段:评估连接
向后连接(这个{vocabulary.note}应该引用什么):
对于每个更新的{vocabulary.note},问:
- 它扩展了这个{vocabulary.note}的论点吗?
- 它提供证据或例子吗?
- 它共享机制吗?
- 它创造了值得承认的紧张关系吗?
- 引用它是否加强了推理?
向前连接(应该引用这个的):
检查更新的{vocabulary.note_plural},它们应该在这里链接但没有:
- 它们是否提出了依赖这个声明的论点?
- 跟随这个链接是否会提供有用的上下文?
代理遍历检查(适用于所有连接):
问:“如果代理在遍历期间遵循这个链接,它能够实现什么决策或理解?”
连接存在是为了服务代理导航。添加一个链接,因为内容是"相关"的,而没有操作价值,会创造噪音。每个向后或向前的连接都应该回答:
- 这是否帮助代理理解为什么某事有效?
- 这是否帮助代理决定如何实施某事?
- 这是否浮现了代理应该考虑的紧张关系?
拒绝那些只是"有趣"而没有代理效用的连接。
表述要求:
每个新连接都必须表述为什么:
- “通过添加时间维度扩展了这个”
- “提供支持这个声明的证据”
- “与这个相矛盾 — 需要解决”
永远不要:“相关"或"另见”
第5阶段:应用更改
对于管道执行(–handoff模式): 直接应用更改。管道需要在没有等待批准的情况下继续。
对于交互执行(无–handoff): 首先提出重新编织建议,然后批准后应用。
重新编织建议格式(仅限交互):
## 重新编织建议:[[target note]]
**上次修改:** YYYY-MM-DD
**评估的当前知识:** N更新的{vocabulary.note_plural},M回链接
### 声明评估
[声明是否成立?需要锐化?拆分?修订?]
### 建议更改
**1. [更改类型]:[描述]**
当前:
> [现有文本]
建议:
> [新文本]
理由:[为什么这个更改]
**2. [更改类型]:[描述]**
...
### 要添加的连接
- [[更新的笔记A]] — [关系]:[具体原因]
- [[更新的笔记B]] — [关系]:[具体原因]
### 要验证的连接(其他{vocabulary.note_plural}应该在这里链接)
- [[笔记X]]可能因为...而从引用这个中受益
### 不更改
- [考虑过但拒绝的内容,以及为什么]
---
应用这些更改?(是/否/修改)
应用更改时:
- 原子地进行更改
- 保留现有有效内容
- 保持散文流程 — 新链接应该自然地内联阅读
- 验证所有链接目标存在
- 如果声明改变,更新描述
五种重新编织动作
1. 添加连接
最简单的动作。存在应该被引用的更新的{vocabulary.note_plural}。
内联连接(首选):
# before
约束从捕获转移到策展。
# after
约束从捕获转移到策展,并且由于[[吞吐量比积累更重要]],问题变成了谁来选择。
页脚连接:
相关笔记:
- "[[newer note]] — 通过添加时间维度扩展了这个"
2. 重写内容
理解发展了。散文应该反映当前思考,而不是历史思考。
何时重写:
- 理由现在更清晰
- 更好的例子存在
- 措辞尴尬
- 遗漏了重要细微差别
如何重写:
- 保留核心声明(除非挑战它)
- 改善通往结论的路径
- 将新连接作为散文整合
- 保持{vocabulary.note}的声音
3. 锐化声明
模糊的声明无法建立。锐化意味着使声明更具体和可争论。
锐化模式:
| 模糊 | 锐利 |
|---|---|
| “X很重要” | “X之所以重要是因为Y,它使Z成为可能” |
| “考虑做X” | “X在[条件]下有效,因为[机制]” |
| “有权衡” | “[具体权衡]:获得X需要付出Y” |
锐化时,还更新:
- 标题(如果声明改变) — 如果有重命名脚本,使用它。否则手动重命名,并更新所有维基链接。
- 描述(必须与新声明匹配)
- 正文(理由必须支持锐化的声明)
4. 分拆{vocabulary.note}
随着时间的推移,一个{vocabulary.note}变成了多个想法。拆分创造了专注,可组合的片段。
拆分指标:
- 连接到5个以上不同领域的主题
- 提出多个不同的声明
- 你想链接到它的部分而不是全部
- 不同的部分可以独立引用
拆分过程:
- 确定不同的声明
- 为每个声明创建新的{vocabulary.note_plural}
- 每个新{vocabulary.note}获得:
- 专注的标题(声明)
- 自己的描述
- 相关内容的相关子集
- 适当的连接
- 原始{vocabulary.note}要么:
- 成为链接到拆分的综合
- 如果拆分完全取代它,则被归档
- 保留一个声明,并链接到其他声明
拆分示例:
原始:“知识系统需要结构和灵活性”
拆分:
- [[结构使大规模检索成为可能]]
- [[灵活性允许有机增长]]
- [[结构和灵活性创造紧张]](链接到两者)
何时不拆分:
- {vocabulary.note}确实是关于一件事,触及许多领域
- 连接都是相同关系的变化
- 拆分会创造出太薄而无法独立站立的{vocabulary.note_plural}
5. 挑战声明
新证据与原始的相矛盾。不要默默地"修复" — 承认演变。
挑战模式:
# 如果部分错误
原来的洞察是[X]。然而,[[更新的证据]]表明[Y]。经过提炼的声明是[Z]。
# 如果存在紧张关系
这个论点是[X]。但[[反驳笔记]]争论[Y]。紧张关系仍然没有解决 — 可能[X]适用于上下文A,而[Y]适用于上下文B。
# 如果大错特错
这个笔记最初声称[X]。基于[[证据]],声明被修正:[新声明]。
总是记录挑战: 当声明被挑战或修订时,这是一个重大事件。在任务文件的重新编织部分记录原始声明,新证据和修订后的立场。
丰富触发动作
当处理通过丰富管道传输的{vocabulary.note}时,检查任务文件中的post_enrich_action信号。这些由/enrich提出,需要执行:
title-sharpen
丰富阶段确定{vocabulary.note}的标题在内容整合后太模糊。
- 阅读
post_enrich_detail,了解推荐的新标题 - 评估:建议的标题真的更好吗?(声明更锐利,更具体,仍然可以作为散文组合)
- 如果是,并且存在重命名脚本:使用它来重命名。否则手动重命名,并更新所有维基链接。
- 更新{vocabulary.note}的描述以匹配新标题
- 在任务文件重新编织部分记录重命名
split-recommended
丰富阶段确定{vocabulary.note}现在涵盖了多个不同的声明。
- 阅读
post_enrich_detail,了解拆分建议 - 评估:拆分真的能改善Vault吗?(每个片段必须独立站立)
- 如果是:
- 为每个拆分声明创建新的{vocabulary.note}文件
- 从原始移动相关内容到拆分
- 更新原始以链接到拆分或保留一个声明
- 为新{vocabulary.note_plural}创建队列条目,从连接阶段开始
- 在任务文件重新编织部分记录拆分
merge-candidate
丰富阶段确定这个{vocabulary.note}与另一个有大量重叠。
不要自动合并或自动删除。 这需要人类判断。
- 在任务文件重新编织部分记录合并建议
- 记录哪些{vocabulary.note_plural}重叠以及为什么
- 最终报告为人类审查而浮现
质量门
门1:表述测试
每次更改都必须能够表述。“我添加这个是因为…”,具体原因。
门2:改进测试
更改后,{vocabulary.note}是否更好?更有用?连接更多?更准确?
如果你不能自信地说是,不要做更改。
门3:连贯性测试
更改后,{vocabulary.note}是否仍然作为一个专注的片段连贯?或者你不小心让它更宽泛了?
门4:网络测试
更改是否改善了网络?更多的遍历路径?更好的路径?
门5:何时不更改
- {vocabulary.note}准确,连接良好,且最近 — 让它保持原样
- "改进"只是美容重写 — 不要搅动
- {vocabulary.note}是历史记录 — 这些通过状态变化发展,而不是重写
输出格式
## 重新编织完成:[[target note]]
### 应用的更改
| 类型 | 描述 |
|------|-------------|
| connection | 添加了[[note A]]内联,[[note B]]页脚 |
| rewrite | 在第2段中澄清了理由 |
| sharpen | 标题未变,描述已更新 |
### 声明状态
[未改变 | 锐化 | 分裂 | 挑战]
### 网络效应
- 外出链接:3 -> 5
- 这个{vocabulary.note}现在连接[[领域A]]和[[领域B]]
### 级联建议
- [[相关笔记]]可能从重新编织中受益(类似年代)
- {vocabulary.topic_map} [[主题]]应该更新以反映变化
### 观察
[未来洞察模式,见解]
成功看起来像什么
成功的重新编织:
- {vocabulary.note}反映了当前的理解,而不是历史的理解
- 声明足够锐利,可以不同意
- 连接存在于相关的新内容中
- {vocabulary.note}在网络中积极参与
- 今天有人读它,得到最好的版本
测试:如果这个{vocabulary.note}今天用你知道的一切写,会有意义地不同吗? 如果是,而你没有改变它,重新编织失败了。
临界约束
永远不要:
- 在不承认演变的情况下默默改变声明
- 将{vocabulary.note_plural}拆分成太薄而无法独立站立的部分
- 不表述原因就添加连接
- 重写声音/风格(保持{vocabulary.note}的角色)
- 在交互模式下未经批准就进行更改
- 创建指向不存在文件的维基链接
总是:
- 在编辑前提出建议(交互模式)
- 解释每次更改的理由
- 保留仍然有效的内容
- 记录重大声明变化
- 验证链接目标存在
网络通过演变而活
昨天写的{vocabulary.note_plural}不知道今天。用旧理解写的{vocabulary.note_plural}不反映新理解。没有重新编织,Vault变成了一个有组织的过时思想的墓地。
重新编织是知识保持活力的方式。不仅仅是连接,还有质疑,锐化,拆分,重写。每个{vocabulary.note}都是一个假设。每次重新编织都是一个测试。
网络通过演变而复合,不仅仅是积累。
交接模式(–handoff标志)
当用--handoff调用时,在会话结束时输出此结构化格式。这使得外部循环(/ralph)能够解析结果并更新任务队列。
检测: 检查$ARGUMENTS是否包含--handoff。如果是,完成正常工作流程后附加此块。
交接格式:
=== RALPH HANDOFF: {vocabulary.reweave} ===
目标:[[target note]]
完成的工作:
- 更新了N个旧{vocabulary.note_plural}:
- 声明状态:未改变 | 锐化 | 挑战 | 分裂
- 网络效应:M条新的遍历路径
修改的文件:
- {vocabulary.notes}/[older note 1].md(添加了内联链接)
- {vocabulary.notes}/[older note 2].md(添加了页脚连接)
- [任务文件路径]({vocabulary.reweave}部分)
学习:
- [Friction]: [description] | NONE
- [Surprise]: [description] | NONE
- [Methodology]: [description] | NONE
- [Process gap]: [description] | NONE
队列更新:
- 推进阶段:{vocabulary.reweave} -> {vocabulary.verify}
=== END HANDOFF ===
任务文件更新(通过ralph循环调用)
当通过/ralph循环以--handoff模式运行时,提示包括任务文件路径。完成工作流程后,更新任务文件的## {vocabulary.reweave}部分,包括:
- 更新的旧{vocabulary.note_plural}及原因
- 声明状态(未改变/锐化/挑战/分裂)
- 网络效应摘要
关键: 交接块是输出,不是工作流程的替代。首先完成完整的重新编织工作流程,更新任务文件,然后格式化结果为交接。
队列更新(交互执行)
当以交互方式运行(不是通过/ralph)时,你必须在队列中推进阶段。/ralph自动处理这个,但交互会话不。
完成工作流程后,推进阶段:
# 获取时间戳
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
# 推进阶段(当前阶段 -> 下一个,添加到已完成阶段)
# NEXT_PHASE是在phase_order之后的阶段(即,验证)
jq '(.tasks[] | select(.id=="TASK_ID")).current_phase = "{vocabulary.verify}" |
(.tasks[] | select(.id=="TASK_ID")).completed_phases += ["{vocabulary.reweave}"]' \
ops/queue/queue.json > tmp.json && mv tmp.json ops/queue/queue.json
交接块的"队列更新"部分不仅仅是输出 — 它是你自己的待办事项列表,当以交互方式运行时。
管道链
重新编织完成后,根据ops/config.yaml管道.chaining模式输出下一步:
- manual:输出"Next: {vocabulary.cmd_verify} [note]" — 用户决定何时继续
- suggested:输出下一步并推进任务队列条目到
current_phase: "{vocabulary.verify}" - automatic:队列条目推进,验证立即进行
链输出使用派生清单中的领域本地命令名称。