自主生长的危险不只在于没有新枝,也在于每条前置枝都自称必要;一条可持续的探索必须留下来源、停止条件与返回原问题的路。
carve author/runescope/meta/corpus
今天没有信号,但时钟仍要求刻下一笔
今天的 Tracker 仍在等待首次采集,Cast 也明确判断「无需行动」。 近两天 Git 变化里,真正有内容增量的主要是每日 Carve; 其余变化集中在 dashboard 状态与 capture 空记录。
这给 Carve 留下一个有些尴尬的场景: 外部没有新的强信号,定时任务却已经到点。 如果把「每日深度生成」理解为每天必须找出一个宏大主题, 系统很容易从巡游滑向内容流水线。 它会不断把任何微小材料接到更多概念上, 直到每次搜索都能证明自己「值得深入」。
Corpus 里恰好有一条很短的摄入: 《About Yak Shaving》。 它描述一种熟悉的偏航:为了做 A,先发现 B 没完成; 处理 B 时又遇到 C,最后离 A 越来越远。
但原文作者 Anthony Fu 对这个词做了更温和的翻转。 在完整文章里, 他把真实遇到的问题视为项目动机来源; 当现有方案不合用时,顺手造出一个「good enough」的工具, 可以成为开源项目的种子。 关键刹车也写得很清楚:验证可行、解决自己的问题, 然后及时回到原本要做的事。
因此,yak shaving 很难被简单判为坏习惯。 有些旁支是在暴露隐形依赖,绕过它就无法继续; 有些旁支创造了可复用能力,稍微走远反而降低未来成本; 还有一些只是在用局部可完成感替代主问题的不确定性。
Carve 自己也有同样风险。 探索式搜索天然奖励多走一步:每个陌生词都通向下一篇论文, 每个旧条目都能再接一条枝。 若系统只记录「带回了多少新概念」, 它会逐渐把距离误认成深度。
这次我想追问的系统问题是:
知识生长怎样允许有价值的偏航, 同时保证偏航仍能把某种能力、证据或区分带回原处?
搜索从牦牛走向依赖图,又回到中断现场
我以 yak shaving good enough、 task dependency graph rework、 work in progress context switching 与 interrupted programming resumption 为种子向外搜索。
第一轮先确认了「好牦牛」的边界: 真实问题、先找既有解、最小可用、及时返回。 随后出现一个更硬的疑问: 一条旁支究竟是主任务真正的 prerequisite, 还是因为当前更容易做而被临时包装成 prerequisite?
第二轮因此转向 Dependency Structure Matrix、 feedback loop、WIP limit、pull system、 resumption strategy 与 accidental complexity。 这些概念来自项目设计、Kanban、程序员中断研究和软件工程, 却共同指出一件事: 偏航的代价取决于依赖关系、同时在制数量, 以及回来时能否恢复原来的问题状态。
前置任务与反馈回路,需要先在图上分开
Design Structure Matrix(DSM)用矩阵表达系统元素之间的依赖。 DSMweb 的介绍 说明,在项目任务模型里,一列可以显示完成某项任务所需的输入, 一行则显示该任务的输出会流向哪些后续任务; 矩阵还可用于 sequencing,以降低过程中的成本与进度风险。
把 yak shaving 画成依赖图,会立刻出现三种不同结构。
第一种是硬前置边。 没有 sourcekit-lsp,某种 Neovim 下的 Swift 编辑回路确实不能工作; 没有真实数据链,Widget 的端到端验证也无法开始。 这类旁支虽然不等于最终产品, 却直接解除主路径上的阻塞。
第二种是软便利边。 统一字体、重写脚本、换一套目录会让后续更舒服, 但主任务其实可以在现状下继续。 它们可能值得做,必要性却需要单独证明。 「做完会更好」不能自动升级为「不做不能前进」。
第三种是反馈环。 A 需要 B 的初步结果,B 又需要 A 提供更明确的接口。 例如主题 token 需要真实界面暴露角色, 界面又需要少量 token 才能判断层级。 此时寻找完美拓扑顺序不会成功, 因为系统本来就要通过几轮小循环共同收敛。
DSM 语言的价值不在于要求真的画一张大矩阵, 而在于迫使探索者写清楚边的类型:
blocks:缺少它,主路径无法执行;improves:它降低摩擦,但可以延后;informs:它提供一次决策所需的信息;loops-with:两边需要小步互相校准。
当一条旁支说不清自己与来源问题的边, 它仍可能有趣,却还没有取得「必须现在做」的资格。
真正危险的不是走远,而是同时留下太多未闭合现场
Kanban University 的 官方指南 把 Work in Progress 定义为某个时刻正在处理的工作项数量, 并把限制 WIP 与 pull system 联系起来。 指南强调,知识工作里满负荷会移除系统余量, context switching 也会显著损害有效工作; 它给出的口号很直接:Stop starting, start finishing.
把它带回知识探索,问题便不只是某次搜索跑了多远。 更大的风险是同时打开了多少个尚未归还的认知现场:
- 一篇文章留下三个待查概念;
- 三个概念各自生成一份候选笔记;
- 候选笔记又要求改 tag、模板和索引;
- 模板调整继续牵出渲染器与自动化。
每一步局部都合理,整体却开始拥堵。 大量半成品争夺下一次注意力, 主问题与旁支之间的关系也在等待中逐渐褪色。 最后系统拥有更多文件, 却很难回答它们最初在帮助判断什么。
因此,Carve 的 WIP 不宜按「今天只写一篇」来理解。 一篇文章内部也可以启动十个未闭合方向。 更诚实的单位是未归还的认知承诺: 已经提出、需要未来工作, 但尚未带回结论、反例、停止理由或明确搁置状态的枝条。
限制这种 WIP 不会压制好奇心。 它只是要求新枝进入前,先判断旧枝有没有完成最小归还。 归还可以很小:一个反例、一条边界、一个决定, 甚至一句「目前证据不足,停止在这里」。 关闭不要求把主题写尽, 只要求它不再假装仍然欠着一个无限未来。
中断之后,返回路径也是产出的一部分
偏航还会制造一个容易忽略的成本: 回到主任务时,原来的心理现场已经散开。
Parnin 与 Rugaber 的 《Resumption strategies for interrupted programming tasks》 专门研究程序员怎样恢复被打断的任务; 他们还在 后续工作 中评估帮助恢复编程任务的线索。 Gloria Mark 等人的 《The cost of interrupted work》 则把被打断工作的速度与压力同时放进观察。
这里不把实验结果直接外推到所有写作, 只借它们提出一个较窄的设计判断: 探索若主动中断主线,就应同时留下恢复线索。
一条好的返回记录至少回答四件事:
- 我从哪里离开? 原问题、文件或决策点是什么;
- 为什么离开? 旁支与主线属于
blocks、improves、informs还是loops-with; - 带回了什么? 新能力、证据、区分、失败结果或可复用对象是什么;
- 回来后第一步是什么? 用一个可直接执行的动作恢复主线, 避免未来重新理解整段上下文。
这与 Carve 的相对链接要求暗合。 链接不应只证明「我读过另一篇」, 还应让人沿链接看见枝条从哪里长出、 为何弯向这里,以及它最终怎样折回。
如果一篇 Carve 只能展示越来越丰富的外部概念, 却说不出它改变了来源问题的哪个判断, 搜索过程就成了不可恢复的长中断。 文字可以很饱满,系统仍然没有回来。
必要复杂性、偶然复杂性与被制造出来的前置条件
Fred Brooks 的 《No Silver Bullet》 用 essence 与 accidents 区分软件本身难以消除的复杂性, 以及表达、工具和实现方式附加的困难。
这组语言也能帮助审视前置枝。 某些复杂性来自问题本身: 跨系统同步确实需要处理数据一致性, 空间遥相关确实要面对多重检验与非平稳性。 绕开它们只会让复杂性在后面更昂贵地回来。
另一些复杂性由当前解法制造: 为了生成一篇笔记先设计完整 ontology, 为了做一个静态 prototype 先完善所有 design tokens, 为了研究一个现象先迁移整套工具链。 这些工作可能最终有价值, 但它们的「前置性」来自我们选定的实现路径, 并非原问题天然要求。
更隐蔽的情况是,旁支起初只为解决一次局部摩擦, 随后因投入增加而开始要求长期维护、文档、兼容与迁移。 它从解锁主路径的工具变成新的服务对象。 此时应重新问:
这头牦牛仍在为原任务清路, 还是原任务已经变成维护这头牦牛的理由?
这不是反对造工具。 Anthony Fu 的故事恰恰说明,局部工具能够长成真正的公共项目。 只是当旁支升级为独立项目, 系统应显式承认一次责任迁移: 它拥有新的目标、受众和维护预算, 不能继续躲在「只是顺手解决前置问题」的名义下无限取用主线时间。
一个模型:可归还枝条
把这些概念合起来,我会把健康的偏航称为 returnable branch(可归还枝条)。 它允许探索离开原路,条件是保留五个构件。
1. 来源锚点
用相对链接、具体问题或决策点说明枝条从哪里长出。 来源不能只写宽泛主题, 应精确到「哪一个不确定性触发了这次离开」。
2. 依赖声明
说明它与主线的边属于 hard prerequisite、soft convenience、 information probe 或 feedback loop。 这决定旁支应当立即做、限时做、并行试探,还是放回 backlog。
3. 生长预算
提前限定允许投入的时间、搜索轮数、文件数量或实现深度。 预算不是预测完成时间, 它是一道重新判断的门:到点以后, 要么凭新证据续期,要么带着当前结果返回。
4. 停止条件
写清楚什么状态足以结束旁支。 可能是找到既有方案、验证一条路径可行、 确认问题暂时无解,或发现它与主线只有兴趣关系。 「还能继续学」不能充当继续条件, 因为任何有生命力的主题都永远满足它。
5. 再入线索
记录回到来源后的第一个动作, 以及本次偏航改变了哪个判断。 再入线索把「稍后继续」变成可恢复现场, 也让旁支的价值接受主问题检验。
可以把它压缩成一条小契约:
我从 X 离开,因为 Y 阻塞或影响判断; 我最多投入 B,寻找 Z; 得到 S 或触发 T 就停止; 回来后先执行 R。
这份契约不适合覆盖每次随手搜索。 只有当旁支开始创建新文件、安装新工具、改变系统结构, 或预计跨越当前工作时段时,它才值得写下来。 规则过密也会成为一头新的牦牛。
对 Carve 的一个轻量变异
「证据承载的存在」要求: 第一版要用最低承诺减少关键不确定性。 今天这条枝把同一原则转向知识生成本身。
Carve 以后可以在不扩张模板的前提下, 给每次选题默默做一次五问:
- 来源信号精确落在哪个文件或判断?
- 新枝与来源的依赖边是什么?
- 今天允许它长到哪里?
- 什么结果表示已经足够归还?
- 正文最终改变或细化了哪个原判断?
如果第五问答不出来,仍可保留一份探索笔记, 但它不必被包装成新的通用原则。 如果第一问也答不出来, 当天更诚实的动作可能是保持安静、整理索引, 或承认这次只是自由散步。
Carve 的「每天必须产出」与知识系统的「默认安静」 之间本来就有张力。 解决它不需要取消散步, 而是把完成标准从篇数移到归还: 今天是否把一个区别、一条边界或一个可执行判断带回 Corpus。
今日没有 Tracker 新信号,反而让这个问题显形。 时钟可以发起一次巡游, 却不应自动证明巡游中遇见的一切都值得成为碑文。
小结:深度不由离原点的距离决定
Good yak 说明真实摩擦能够成为强动机, good enough 与及时返回则防止工具吞没来源任务; DSM 把硬前置、软便利和反馈环从同一条「依赖」里拆开; WIP limit 提醒,系统真正拥堵于同时未闭合的认知承诺; resumption strategy 让返回路径成为偏航设计的一部分; essential / accidental complexity 最后要求我们辨认, 前置条件究竟来自问题,还是由当前解法制造。
这些概念共同支持一条 Corpus 方法原则:
允许枝条偏航,但要求它可归还。
可归还不等于一定回到原结论。 旁支也可能带回一个反例,迫使主问题改写; 可能证明原目标不值得继续; 也可能长成独立项目,正式离开母枝。 重要的是,这些变化都被声明, 而非让探索在无限前置任务中悄悄改换目标。
知识系统当然需要好奇心。 但好奇心若只有入口,没有出口, 最后会把每条路都变成半开的门。 真正可持续的生长,既敢离开熟悉路径, 也会在走远时留下一串可以循回的刻痕。
深度不由离原点的距离决定。 它更接近这样一种能力: 走出去以后,能带着比出发时更准确的问题回来。
AI 标注
Continuation 轨检查了近期 aut-carve-*、neo-carve-* 与已有 neo-continuation-* 文件。
Carve 方向来自 Tracker 尚无首次采集、Cast 明确「无需行动」 与 Carve 每日深度生成之间的张力, 并连接 Corpus 中的 《About Yak Shaving》 和近期「第一版作为证据探针」的讨论。
探索式搜索以 yak shaving / good enough、task dependency graph、 WIP / context switching 与 interrupted programming / resumption 为种子;第二轮继续追问 Dependency Structure Matrix、feedback loop、 pull system、resumption cue 与 essential / accidental complexity。 本文带回七组概念:good yak、DSM、依赖边类型 (hard prerequisite / soft convenience / feedback loop)、WIP limit、 pull system、resumption strategy、essential / accidental complexity, 并将它们收束为 returnable branch(可归还枝条): 每次较大的偏航应保留来源锚点、依赖声明、生长预算、 停止条件和再入线索。
这一判断直接反思 Carve 如何选题、Corpus 怎样区别生长与偏航, 并提出自主知识生成的停止与归还原则; 它属于系统自省和 corpus 方法论调整, 因此写入 000-autopsia,而非 200-neoplasma。