@haaaiawd/loom 0.9.0 → 1.0.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 (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +87 -52
  3. package/cli/bin/loom.js +438 -149
  4. package/cli/help/concepts.md +93 -72
  5. package/cli/help/doctor.md +71 -121
  6. package/cli/help/loop.md +120 -135
  7. package/cli/help/patch.md +33 -0
  8. package/cli/help/preview.md +2 -1
  9. package/cli/help/version.md +92 -16
  10. package/cli/help/workflow.md +89 -100
  11. package/cli/src/activate.js +302 -73
  12. package/cli/src/auto.js +41 -18
  13. package/cli/src/diagnostics.js +223 -50
  14. package/cli/src/guide.js +127 -38
  15. package/cli/src/init.js +50 -29
  16. package/cli/src/intent-draft.js +303 -0
  17. package/cli/src/intent-map.js +540 -54
  18. package/cli/src/patch.js +214 -0
  19. package/cli/src/philosophy.js +181 -156
  20. package/cli/src/preview-prompt.md +13 -6
  21. package/cli/src/preview.js +1 -0
  22. package/cli/src/shared/intent-ref.js +38 -0
  23. package/cli/src/shared/proof-reference.js +19 -0
  24. package/cli/src/shared/verification-method.js +32 -0
  25. package/cli/src/verify.js +204 -51
  26. package/cli/src/version.js +5 -4
  27. package/dimensions/PART_DECOMPOSITION.md +42 -203
  28. package/dimensions/SEARCH_METHODOLOGY.md +101 -97
  29. package/dimensions/examples/AGENT_SYSTEM/README.md +1 -1
  30. package/dimensions/examples/CLI_TOOL/README.md +1 -1
  31. package/dimensions/universal/COLLABORATION_PHILOSOPHY.md +28 -77
  32. package/dimensions/universal/ENGINEERING_CREED.md +30 -74
  33. package/dimensions/universal/PRODUCT_PHILOSOPHY.md +32 -70
  34. package/meta/BASELINE.md +91 -276
  35. package/meta/INTENT_LOOP.md +242 -737
  36. package/meta/PHILOSOPHY_WEAVER.md +110 -343
  37. package/meta/ROLE_ACTIVATION.md +103 -267
  38. package/package.json +4 -3
  39. package/roles/architect.md +71 -111
  40. package/roles/forge.md +87 -126
  41. package/roles/keeper.md +99 -223
  42. package/roles/visionary.md +57 -86
  43. package/templates/INTENT_MAP_TEMPLATE.json +24 -10
  44. package/templates/PHILOSOPHY_TEMPLATE.md +44 -75
  45. package/templates/VISION_TEMPLATE.md +44 -67
@@ -1,74 +1,30 @@
1
- # 维度指引:工程哲学
2
-
3
- > 所有项目都需要。回答"怎么写代码、什么不做、什么是好代码"。
4
-
5
- ---
6
-
7
- ## 触发条件
8
-
9
- **必跑**——通用层三个维度之一,所有项目都激活。
10
-
11
- ---
12
-
13
- ## 引导问题
14
-
15
- 1. **什么是好代码?** 不是"能跑的代码",是"五年后的人能看懂的代码"。具体到这个项目,好代码的标准是什么?
16
- 2. **数据流是怎样的?** 单向还是双向?有状态还是无状态?纯函数还是有副作用?为什么这样选?
17
- 3. **错误怎么处理?** 静默吞错?抛异常?返回错误码?透传?每种错误类型的处理策略是什么?
18
- 4. **依赖策略是什么?** 零依赖?最小依赖?依赖什么、不依赖什么、为什么?
19
- 5. **抽象到什么程度?** YAGNI 还是预留扩展?什么时候加抽象,什么时候不加?
20
- 6. **测试策略是什么?** 单元测试?集成测试?契约测试?测什么、不测什么、为什么?
21
-
22
- ---
23
-
24
- ## 参考源指引
25
-
26
- ### 通用工程哲学
27
-
28
- - **Clean Code** — Robert C. Martin(2008)。核心:函数短小、单一职责、命名清晰。但注意:Martin 的某些主张有争议(函数不超过 20 行等),需要批判性阅读。
29
- - **The Pragmatic Programmer** — Andy Hunt & Dave Thomas(1999/2019 修订)。核心:DRY、正交性、曳光弹、契约式设计。比 Clean Code 更务实。
30
- - **A Philosophy of Software Design** — John Ousterhout(2018)。核心:深模块 vs 浅模块、接口设计、复杂度管理。Ousterhout 和 Martin 在"函数大小"上有分歧——对比阅读。
31
- - **SICP** — Abelson & Sussman(MIT 经典)。核心:抽象、组合、元语言抽象。理论根基。
32
-
33
- ### 函数式编程哲学
34
-
35
- - **Structure and Interpretation of Computer Programs** — 见上。
36
- - **Pure Function-based Architecture** — 搜 "pure function architecture"。核心:纯函数 + 不可变数据 + 副作用隔离。
37
- - **Haskell 设计哲学** — 搜 "Haskell philosophy pure functional"。核心:纯函数、惰性求值、类型系统。
38
-
39
- ### 系统设计哲学
40
-
41
- - **A Philosophy of Software Design** — 见上(深模块部分)。
42
- - **Designing Data-Intensive Applications** — Martin Kleppmann(2017)。核心:数据流、一致性、容错。
43
- - **The Twelve-Factor App** — https://12factor.net/。核心:配置外置、无状态进程、一次性。
44
-
45
- ### 错误处理哲学
46
-
47
- - **Joel Spolsky"Exceptions vs Error Codes"** — 搜 "Joel Spolsky exceptions"。经典争论。
48
- - **Go 的 error-as-value 哲学** — 搜 "Go error handling philosophy"。核心:错误是值,不是控制流。
49
- - **Rust 的 Result/Option** — 搜 "Rust error handling philosophy"。核心:类型系统强制错误处理。
50
-
51
- ### 测试哲学
52
-
53
- - **TDD** — Kent Beck *Test-Driven Development*(2002)。核心:红-绿-重构。
54
- - **Property-based Testing** — 搜 "property based testing philosophy"。核心:测不变量,不测具体案例。
55
- - **The Way of Testivus** — 搜 "testivus testing philosophy"。核心:测试够用就好,不要过度。
56
-
57
- ---
58
-
59
- ## 落地要求
60
-
61
- 织造出的 ENGINEERING_CREED.md 必须包含:
62
-
63
- 1. **工程北极星**:一句话,工程层面的判断基准
64
- 2. **代码原则**:编号(E1, E2...),每条有理由
65
- 3. **工程反模式清单**:编号(EAP1, EAP2...),每条有"不做"和"为什么"
66
- 4. **灵感来源**:至少 2 个独立源,每个源说明"为什么选它"
67
- 5. **底线内化声明**:与 PRODUCT_PHILOSOPHY.md 一致
68
- 6. **章节锚点**:每个章节有 `{#english-anchor}` 标识
69
-
70
- ### 禁止
71
-
72
- - 禁止照搬 Clean Code 的条目不加工——必须转译为本项目的具体约束
73
- - 禁止"好代码是可读的"这种废话——必须具体到"什么场景下可读性优先于性能"
74
- - 禁止抽象层和产品层重复——工程哲学聚焦"怎么写",产品哲学聚焦"为什么存在"
1
+ # Doctrine Lens — Engineering Judgment
2
+
3
+ > 按需使用。它只记录跨多个 Intent 的工程判断,不把常识和局部技术选择永久化。
4
+
5
+ ## 触发
6
+
7
+ - 多个系统部分需要共享同一数据、错误、依赖或兼容策略。
8
+ - 某类工程失败反复发生,已成为项目级风险。
9
+ - 一个长期取舍会持续影响架构和实现。
10
+
11
+ 如果问题只属于当前技术栈、某个模块或一次实现,让 Architect 定义边界,Forge 在 Expertise Pack 中
12
+ 加载相应专业方法。
13
+
14
+ ## 决策问题
15
+
16
+ 1. 项目最需要控制的复杂度来自哪里?
17
+ 2. 哪些契约必须显式,哪些实现细节应保持局部?
18
+ 3. 错误、降级和恢复应保护什么用户或系统结果?
19
+ 4. 何时引入依赖或抽象,什么证据说明它值得?
20
+ 5. 哪些工程反模式会让短期速度转化为长期失控?
21
+
22
+ ## 输出标准
23
+
24
+ - 工程北极星。
25
+ - 少量带触发条件的判断原则。
26
+ - 反模式与可观察失败信号。
27
+ - 允许实验与必须审慎的边界。
28
+ - 决策相关 Evidence Map。
29
+
30
+ 不要规定函数长度、目录风格、测试比例等通用教条;除非它们由项目证据支持且会反复改变决定。
@@ -1,70 +1,32 @@
1
- # 维度指引:产品哲学
2
-
3
- > 所有项目都需要。回答"这个产品为什么存在、北极星是什么、什么不能妥协"
4
-
5
- ---
6
-
7
- ## 触发条件
8
-
9
- **必跑**——通用层三个维度之一,所有项目都激活。
10
-
11
- ---
12
-
13
- ## 引导问题
14
-
15
- 织造时依次回答:
16
-
17
- 1. **这个产品为什么存在?** 不是"它能做什么",是"如果没有它会怎样"。如果答案是"用户会用别的工具",那这个产品没有存在理由。
18
- 2. **北极星是什么?** 一句话。不是愿景陈述,是判断基准——遇到冲突时,拿这句话量一下。
19
- 3. **什么不能妥协?** 3-5 条。不是"想要"的,是"没有就不行"的。每条必须有理由——为什么这条不能妥协,妥协了会怎样。
20
- 4. **反模式是什么?** 和"做什么"同样重要。每个反模式必须说明"不做"和"为什么不做"。
21
- 5. **决策原则是什么?** 当价值冲突时怎么取舍。不是口号,是可执行的判断规则。
22
-
23
- ---
24
-
25
- ## 参考源指引
26
-
27
- ### 实践驱动领域(CLI 工具、开发者工具、基础设施)
28
-
29
- - **Unix Philosophy** — Doug McIlroy, 1978。原著:*The UNIX Time-Sharing System*(论文)。延伸:Eric Raymond *The Art of UNIX Programming*(2003)、Mike Gancarz *The UNIX Philosophy*(1995)。不要只引 Wikipedia——读 Raymond 的书,里面有 17 条具体原则。
30
- - **Plan 9 设计原则** Rob Pike, Ken Thompson。和 Unix Philosophy 有继承也有分歧("一切皆文件"走得更远)。对比阅读能产生张力。
31
- - **Dieter Rams"好设计十诫"** — 原文在 Vitsoe 官网(https://www.vitsoe.com/eu/about/good-design),不是 Wikipedia 摘要。
32
- - **Stripe API 设计哲学** — Stripe 工程博客。搜 "Stripe API design philosophy"。核心:API 是产品契约、一致性 > 灵活性。
33
- - **Jeff Atwood / Joel Spolsky 的工具哲学** — Stack Overflow / Fog Creek 创始人。搜 "Joel Spolsky software philosophy"。
34
-
35
- ### 2C 产品领域(面向终端用户)
36
-
37
- - **Steve Jobs 产品哲学** — 原著:Walter Isaacson *Steve Jobs*(2011)。核心:减法优先、体验 > 功能。
38
- - **John Maeda"减法法则"** — *The Laws of Simplicity*(2006)。MIT Press 出版。
39
- - **Don Norman"以用户为中心的设计"** — *The Design of Everyday Things*(1988/2013 修订版)。
40
-
41
- ### 2B / 平台领域
42
-
43
- - **Amazon Working Backwards** — 搜 "Amazon working backwards document"。核心:从 PR/FAQ 倒推技术方案。
44
- - **Google Design Docs** — 搜 "Google design doc template"。核心:设计先行、文档驱动。
45
-
46
- ### 学术建制化领域(如果有理论根基需求)
47
-
48
- - **SEP"Philosophy of Technology"** — 斯坦福哲学百科全书条目。搜 "SEP philosophy of technology"。
49
- - **Hubert Dreyfus** — *What Computers Still Can't Do*(技术哲学视角)。
50
-
51
- ---
52
-
53
- ## 落地要求
54
-
55
- 织造出的 PRODUCT_PHILOSOPHY.md 必须包含:
56
-
57
- 1. **北极星**:一句话,可被 Intent 的 `philosophy_anchors` 引用
58
- 2. **不可妥协的价值**:3-5 条,每条有理由
59
- 3. **反模式清单**:编号(AP1, AP2...),每条有"不做"和"为什么"
60
- 4. **决策原则**:编号(P1, P2...),每条有适用条件和判断标准
61
- 5. **灵感来源**:至少 3 个独立源,至少 2 个非 Wikipedia 链接,每个源说明"为什么选它"
62
- 6. **底线内化声明**:显式声明已内化 BASELINE
63
- 7. **章节锚点**:每个章节有 `{#english-anchor}` 标识
64
-
65
- ### 禁止
66
-
67
- - 禁止只有 Wikipedia 链接——Wikipedia 是常识入口,不是深度源
68
- - 禁止"灵感来源"只有名字没有理由——必须说明萃取/转译关系
69
- - 禁止北极星是口号(如"做最好的工具")——必须是判断基准
70
- - 禁止反模式没有"为什么"——"不做"和"为什么不做"同样重要
1
+ # Doctrine Lens — Product Judgment
2
+
3
+ > 按需使用。只有判断会跨多个 Intent 反复生效时,才写入 Project Doctrine
4
+
5
+ ## 触发
6
+
7
+ - 项目需要长期保护的用户结果尚不清楚。
8
+ - 多个功能之间存在价值冲突。
9
+ - 团队对“合格”和“优秀”的产品结果没有共同判断。
10
+ - 反复出现表面完成、实际伤害用户结果的方案。
11
+
12
+ 单个页面、一次功能或局部体验技巧留给当前 Intent 的 Expertise Pack。
13
+
14
+ ## 决策问题
15
+
16
+ 1. 项目长期保护的用户结果是什么,什么证据表明它重要?
17
+ 2. 当速度、控制、清晰、灵活性等价值冲突时如何取舍?
18
+ 3. 什么可观察信号区分普通、可靠和出众?
19
+ 4. 哪些反模式会让产品看似完成,却破坏用户结果?
20
+ 5. 哪些方向允许大胆且可逆的探索,哪些边界不能改变?
21
+
22
+ ## 输出标准
23
+
24
+ 只保留能够改变未来行动的内容:
25
+
26
+ - 一句可用于取舍的北极星。
27
+ - 少量带适用条件和例外的原则。
28
+ - 卓越标准与失败信号。
29
+ - 创作空间。
30
+ - Evidence Map:事实或来源 机制 项目后果。
31
+
32
+ 不设置原则或来源数量,不复述 BASELINE,不预写功能和架构。
package/meta/BASELINE.md CHANGED
@@ -1,276 +1,91 @@
1
- # BASELINE — LOOM 不可妥协的底线
2
-
3
- > **"哲学可以自由织造,底线不可协商。"**
4
- >
5
- > 这份文件列出 LOOM 系统中所有角色、所有哲学文档、所有项目都必须遵守的底线。
6
- > Philosophy Weaver 织造的哲学必须内化这些底线——它们不是建议,是地基。
7
- > 任何角色在任何阶段违反底线,必须立即停止。
8
-
9
- ---
10
-
11
- ## 底线的性质
12
-
13
- 底线不是"最佳实践",不是"推荐做法"。
14
-
15
- 底线是**不可妥协的约束**——违反它们会导致系统不可维护、不可理解、不可信任。
16
-
17
- 哲学文档可以自由决定"怎么做好",但底线决定"什么不能不做"。
18
-
19
- ---
20
-
21
- ## 底线清单
22
-
23
- ### B1:必须有结构设计
24
-
25
- **约束**:任何项目在编码之前,必须有明确的结构设计。
26
-
27
- **为什么**:没有结构设计的编码是盲人摸象。Agent 会把代码堆成一团浆糊,后续无法维护、无法理解、无法扩展。
28
-
29
- **最低要求**:
30
- - 项目有明确的目录结构
31
- - 每个模块/系统有定义的职责边界
32
- - 模块之间的依赖关系是显式的,不是隐式的
33
- - 结构设计是写下来的,不是停留在"脑子里"
34
-
35
- **哲学内化方式**:Philosophy Weaver 织造工程哲学时,必须包含"结构设计是编码前提"这一条。具体设计多详细、用什么格式,由哲学决定。
36
-
37
- **粒度自由**:
38
- - 小项目:一个文件说清楚结构就够
39
- - 大项目:需要完整的架构文档 + 系统设计文档
40
- - 粒度由 Philosophy Weaver 根据项目规模决定
41
-
42
- ---
43
-
44
- ### B2:禁止硬编码
45
-
46
- **约束**:禁止在代码中硬编码密钥、配置、环境特定值、魔法数字。
47
-
48
- **为什么**:硬编码是技术债的源头。它让代码不可移植、不可测试、不可维护。弱模型尤其容易犯这个错误——给它们自由度,它们会把所有东西写死。
49
-
50
- **最低要求**:
51
- - 密钥、凭证:环境变量或集中配置模块,绝不进代码
52
- - 环境特定值(URL、端口、路径):配置层管理
53
- - 魔法数字:命名常量,附注释说明来源
54
- - 业务规则常量:集中管理,不散落在代码各处
55
-
56
- **哲学内化方式**:Philosophy Weaver 织造工程哲学时,必须包含"配置与代码分离"原则。具体分离方式由哲学决定(环境变量 / 配置文件 / 配置中心)。
57
-
58
- **例外**:
59
- - 纯算法常量(如数学公式中的系数)且其含义在代码中有清晰注释
60
- - 框架约定的常量(如 HTTP 状态码)且使用语义化命名
61
-
62
- ---
63
-
64
- ### B3:接口契约必须显式
65
-
66
- **约束**:任何对外可观察的接口——API、CLI 参数、配置结构、文件格式、错误语义、跨系统协议——必须有显式定义。
67
-
68
- **为什么**:隐式契约是混乱之源。当接口没有显式定义时,每个调用方都会对接口有自己的理解,导致集成时出现不可预测的冲突。
69
-
70
- **最低要求**:
71
- - API:有参数定义、返回结构、错误码定义
72
- - CLI:有参数语义、选项定义、退出码定义
73
- - 配置:有字段定义、类型、默认值、取值范围
74
- - 跨系统协议:有消息格式、时序约束、错误处理约定
75
- - 契约变更:必须可追溯(记录在决策日志中)
76
-
77
- **哲学内化方式**:Philosophy Weaver 织造工程哲学时,必须包含"接口契约是承诺"原则。具体契约格式由哲学决定(OpenAPI / JSON Schema / TypeScript 类型 / 自定义文档)。
78
-
79
- ---
80
-
81
- ### B4:决策必须可追溯
82
-
83
- **约束**:任何影响架构、接口、技术栈、依赖的决策,必须记录下来,且记录可被后续引用。
84
-
85
- **为什么**:不可追溯的决策是"为什么这么做"的黑洞。三个月后没人记得为什么选了这个技术、为什么这个接口长这样。Agent 重新加载上下文时,只能看到"做了什么",看不到"为什么做"。
86
-
87
- **最低要求**:
88
- - 决策记录包含:决策内容、背景、候选方案、取舍理由、影响范围
89
- - 决策记录是写下来的,不是停留在"聊天记忆"里
90
- - 决策记录有稳定标识,可被其他文档引用
91
- - 决策变更时,旧记录保留,新记录说明"为什么变了"
92
-
93
- **哲学内化方式**:Philosophy Weaver 织造协作哲学时,必须包含"决策是组织记忆"原则。具体记录格式由哲学决定(ADR / 决策日志 / Git commit message)。
94
-
95
- ---
96
-
97
- ### B5:意图必须可回溯
98
-
99
- **约束**:任何实现都必须能回溯到它的原始意图——"为什么存在"。
100
-
101
- **为什么**:这是 LOOM 的核心命题。信息在传递链中会损失——从产品意图到系统设计到任务到代码,每一层翻译都可能扭曲原始意思。如果实现不能回溯到意图,就无法验证"是否忠实于原始目标"。
102
-
103
- **最低要求**:
104
- - 每个实现单元(Intent / 功能模块)有意图叙事——"为什么存在,服务什么目标"
105
- - 意图叙事不是"做什么"的描述,是"为什么做"的叙事
106
- - 意图叙事可被验证角色(Keeper)引用和对照
107
- - 意图叙事在传递链中不丢失——从愿景到实现,每个环节都能追溯到原始意图
108
-
109
- **哲学内化方式**:这条底线是 LOOM 的灵魂,Philosophy Weaver 织造产品哲学时必须包含"意图是实现的灵魂"原则。具体叙事格式由哲学决定。
110
-
111
- ---
112
-
113
- ## 底线与哲学的关系
114
-
115
- ```
116
- 底线(这份文件) 哲学(Weaver 织造)
117
- ↓ ↓
118
- "什么不能不做" + "怎么做好"
119
- ↓ ↓
120
- └─────────┬────────────┘
121
-
122
- 角色内化
123
-
124
- 角色行动
125
- ```
126
-
127
- 底线划出边界,哲学填充边界内的内容。角色在边界内自主发挥,越界被拦截。
128
-
129
- **底线不可被哲学覆盖**。如果 Philosophy Weaver 织造的哲学与底线冲突,底线优先。Weaver 在织造时必须将底线作为硬约束输入。
130
-
131
- ---
132
-
133
- ## 底线的演进
134
-
135
- 底线不是永恒不变的。随着 LOOM 系统的演进,底线可能需要调整。
136
-
137
- 但底线的变更必须:
138
- - 有明确的变更理由
139
- - 记录在版本历史中
140
- - 经过审慎评估——底线变更是系统级决策,不是随手调整
141
-
142
- 底线变更跟随 LOOM 的版本(v{N}),与哲学演进机制一致。
143
-
144
- ---
145
-
146
- ## 适配与扩展
147
-
148
- BASELINE 的 5 条底线是通用约束,适用于所有项目。但不同领域、不同规模的项目对底线的理解和执行方式不同。以下机制让 BASELINE 在保持不可妥协的同时适配现实。
149
-
150
- ### 底线澄清
151
-
152
- 底线约束本身不变,但"怎么算合规"在不同领域有不同理解。以下澄清不改变约束,只明确适用边界:
153
-
154
- **B1 澄清:原型验证阶段**
155
-
156
- 对于需要验证核心可行性的项目(如游戏核心玩法、AI 模型效果),允许先做可运行原型。原型是结构设计的一部分,不是"跳过设计的编码"——原型验证通过后,必须补结构设计文档再进入正式 Intent Loop。
157
-
158
- **B3 澄清:非确定性系统**
159
-
160
- 接口契约定义输入输出的**结构边界和约束条件**(schema、长度限制、字段必填、错误码),不要求内容本身确定性。LLM 的输出每次不同,但输出结构可以契约化(如"返回 `{answer: string, sources: Source[]}`,answer 长度 1-500 字,sources 非空")。
161
-
162
- ### 项目特定底线
163
-
164
- BASELINE 的 5 条是通用底线,适用于所有项目。但不同领域有额外的"不可妥协"——2B 需要安全合规、AI/ML 需要模型版本管理、医疗需要隐私保护。
165
-
166
- Philosophy Weaver 织造哲学时,可以产出 `PROJECT_BASELINE.md`,声明项目特定底线。
167
-
168
- **规则**:
169
- - 项目特定底线和 BASELINE 一样不可妥协——角色激活时和 BASELINE 一起强制加载
170
- - 项目特定底线只能**追加**,不能**豁免**通用底线
171
- - 项目特定底线必须有明确的"合规/违规"判定标准(和通用底线一样可被 Keeper 验证)
172
- - 项目特定底线跟随版本演进,变更时记录理由
173
-
174
- **角色激活时加载的底线** = `meta/BASELINE.md`(通用 5 条)+ `.loom/v{N}/00_PHILOSOPHY/PROJECT_BASELINE.md`(项目特定,如果有)
175
-
176
- ### 流程复杂度
177
-
178
- LOOM 是元规范,不是固定流程。Agent 根据项目规模自主调整复杂度:
179
-
180
- | 项目规模 | 哲学维度 | Intent 粒度 | 验证层级 |
181
- |---|---|---|---|
182
- | 小项目(< 1 个月) | 只通用层(产品 + 工程) | 粗粒度(3-5 个 Intent) | 全用 L1 静态审查 |
183
- | 中项目(1-3 个月) | 通用层 + 1-2 个领域层 | 中粒度(5-15 个 Intent) | 关键 Intent 用 L2 |
184
- | 大项目(3+ 个月) | 所有需要的维度 | 细粒度(15+ 个 Intent) | 关键 Intent 用 L2/L3 |
185
- | 维护期 | 沿用已有哲学 | 直接加 bug 修复 Intent | L1 为主 |
186
-
187
- 这不是规则,是参考。Agent 自主判断,不按这个分级也行。核心原则是:**文档开销不应超过开发开销**。
188
-
189
- ---
190
-
191
- ## 版本演进
192
-
193
- LOOM 用 `.loom/v{N}/` 目录支持多版本共存与演进。
194
-
195
- ### 版本指针
196
-
197
- - `.loom/current` 文件记录当前版本号(如 `v1`)
198
- - CLI 优先读指针;指针缺失时回退到自动探测最新版本(向后兼容)
199
- - `loom version list` 列出所有版本并标记当前
200
- - `loom version use <v>` 切换当前版本
201
-
202
- ### 旧版本只读
203
-
204
- **旧版本是只读的——最新版本(current 指针指向的)是当前真相。**
205
-
206
- - 角色激活时只加载当前版本
207
- - CLI 写操作(intent update、verify write)只作用于当前版本
208
- - 旧版本保留作为历史参考,不修改
209
-
210
- ### 演进分级
211
-
212
- 变更分两级,判定由用户 + Agent 对话完成,CLI 不做决策:
213
-
214
- | 级别 | 判定标准 | 处理方式 |
215
- |---|---|---|
216
- | **Minor** | 不改哲学前提、不改愿景北极星、不改架构边界 | 当前版本内改(LOOM 已有的变更回流机制) |
217
- | **Major** | 哲学前提变了、愿景北极星变了、架构边界变了 | 创建新版本 |
218
-
219
- ### Major 升级流程
220
-
221
- ```
222
- [Agent / 用户判断需要 Major 升级]
223
-
224
- loom version new → 创建 v{N+1}(空目录 + 模板),自动切换为当前
225
-
226
- loom version diff v{N} v{N+1} → 看看旧版本有什么(Agent 决定参考什么)
227
-
228
- Weaver 读 .loom/v{N}/00_PHILOSOPHY/ → 织造 v{N+1} 哲学,记录"相对 v{N} 变了什么"
229
-
230
- Visionary 读 .loom/v{N}/01_VISION.md → 定义 v{N+1} 愿景
231
-
232
- Architect 读 .loom/v{N}/02_ARCHITECTURE.md + 04_INTENT_MAP.json → 设计 v{N+1}
233
-
234
- 进入 v{N+1} 的 Intent Loop
235
- ```
236
-
237
- **关键设计**:`loom version new` 创建空目录 + 模板,**不自动复制旧版本内容**。强制 Agent 重新思考——参考 ≠ 复制。如果直接复制 v1 哲学到 v2,Agent 可能懒得重织造,版本演进就变成"在旧版本上打补丁"了。
238
-
239
- ### 代码迁移
240
-
241
- v1 已完成的代码保留在项目代码库中。v2 的 Intent Map 引用已有代码时:
242
- - 如果代码仍适用 → Intent 状态直接设为 `completed`,验收契约引用已有代码
243
- - 如果代码需要调整 → 新建 Intent,depends_on 可以引用 v1 的 Intent ID(通过 `loom intent trace` 追溯历史)
244
-
245
- ### Intent ID 延续
246
-
247
- v2 的 Intent ID **重新编号**(INT-001, INT-002...),不延续 v1。原因:
248
- - v2 的 Intent 语义可能和 v1 不同,延续 ID 会造成混淆
249
- - 追溯通过 Git history 和 `loom version diff` 完成,不靠 ID 延续
250
-
251
- ### 版本对比
252
-
253
- - `loom version diff <v1> <v2>` 对比文件存在性和大小差异
254
- - 内容差异用 Git diff(`.loom/` 纳入版本控制)
255
-
256
- ### 不做的
257
-
258
- - CLI 不判断 Minor/Major(决策由 Agent + 用户对话完成)
259
- - CLI 不自动复制旧版本内容到新版本(强制重新思考)
260
- - CLI 不强制旧版本只读(规范声明 + Git 保护,不靠代码强制)
261
- - CLI 不迁移验证记录(v2 的 Intent 是新 ID,v1 验证记录通过 Git history 追溯)
262
-
263
- ---
264
-
265
- ## 给 Philosophy Weaver 的指令
266
-
267
- 当 Philosophy Weaver 开始织造哲学时,这份文件是它的**硬约束输入**。
268
-
269
- Weaver 必须:
270
- 1. 读取这份文件,理解每条底线
271
- 2. 在织造哲学时,将底线转译为哲学语言——不是照抄,而是融入哲学叙事
272
- 3. 确保织造出的哲学文档不与任何底线冲突
273
- 4. 在哲学文档中显式声明"已内化 BASELINE 中的所有底线"
274
- 5. 如果项目有领域特定的"不可妥协"(如安全合规、隐私保护、模型版本管理),产出 `PROJECT_BASELINE.md` 声明项目特定底线
275
-
276
- 如果 Weaver 无法将某条底线融入哲学(例如哲学流派与底线矛盾),必须停止并报告——这意味着该哲学流派不适合这个项目。
1
+ # BASELINE — LOOM 不可妥协的系统底线
2
+
3
+ 底线只规定什么不能失守,不规定怎样做到优秀。
4
+
5
+ 项目哲学负责定义取舍与质量;角色负责在边界内发挥专业能力;CLI 负责机械执行能够被程序保证的约束。底线不能替代这三者。
6
+
7
+ ## B1:改变之前必须理解结构
8
+
9
+ 任何实质修改都必须建立在对当前系统结构、职责边界和依赖关系的理解上。
10
+
11
+ 最低要求:
12
+
13
+ - 先检查真实代码与现有约定,不凭想象创建平行体系。
14
+ - 修改范围与结构说明的详细程度应和风险相称。
15
+ - 新增边界、模块或跨系统依赖时,必须写明职责和依赖方向。
16
+ - 探索性原型可以先验证关键假设,但不得伪装成已完成的正式实现。
17
+
18
+ 违反信号:未读现有实现便重写、复制出第二套系统、用“以后再整理”掩盖边界混乱。
19
+
20
+ ## B2:环境与秘密不得固化进实现
21
+
22
+ 密钥、凭证、环境专属地址和可变配置不得写死在代码中。
23
+
24
+ 最低要求:
25
+
26
+ - 秘密通过安全的环境或凭证机制提供。
27
+ - 环境差异进入配置层。
28
+ - 业务常量集中且具有语义;算法常量和协议常量可以保留,但必须能解释来源。
29
+ - 新增配置要有类型、默认策略和错误语义。
30
+
31
+ 违反信号:真实密钥进入仓库、随机路径或 URL 散落、无法解释的数值控制业务行为。
32
+
33
+ ## B3:可观察契约必须显式
34
+
35
+ 用户、模块或外部系统能够观察到的行为必须有明确契约。
36
+
37
+ 契约至少覆盖适用项:
38
+
39
+ - 输入、输出和状态变化。
40
+ - 错误、失败和降级行为。
41
+ - API、CLI、配置、文件格式或交互语义。
42
+ - 兼容边界与变更影响。
43
+
44
+ 局部实现细节不需要全部文档化;会影响其他部分的行为不能只存在于作者记忆里。
45
+
46
+ ## B4:重要判断必须可追溯
47
+
48
+ 会改变产品方向、架构边界、公共契约、关键依赖或安全姿态的判断必须留下理由和证据。
49
+
50
+ 记录应回答:
51
+
52
+ - 为什么现在需要这个决定。
53
+ - 考虑过哪些替代方案。
54
+ - 选择依据和代价是什么。
55
+ - 影响哪些 Intent、契约或系统部分。
56
+ - 什么证据会使我们重新评估。
57
+
58
+ 普通局部实现选择不必制造 ADR;可逆且低风险的探索可以先做小实验,再用结果决定是否升级为正式决策。
59
+
60
+ ## B5:完成必须可回溯、可验证
61
+
62
+ 任何“完成”都必须能回溯到原始意图,并有当前 revision 的验证证据。
63
+
64
+ 最低要求:
65
+
66
+ - 实现单元关联清晰的意图叙事。
67
+ - 完成契约描述可观察结果和关键失败边界;若声明质量提升,另有质量契约与基线相对证据。
68
+ - 实现者可以自测,但不能只凭自己的解释宣告通过。
69
+ - Keeper 独立验证;需要人类判断的部分明确标为 `pending_human`。
70
+ - 声称质量提升时,必须提供修改前基线、选择依据和稳定性证据。
71
+ - 没有当前 revision 的最后一条 `passed` 记录,不得闭合 Intent。
72
+
73
+ ## 项目特定底线
74
+
75
+ Weaver 可以在 `.loom/v{N}/00_PHILOSOPHY/PROJECT_BASELINE.md` 追加领域不可妥协项,例如隐私、安全、合规、可访问性或模型治理。
76
+
77
+ 项目底线必须:
78
+
79
+ - 有明确触发条件和合规判定。
80
+ - 只追加,不豁免通用底线。
81
+ - 与版本和影响范围一起演进。
82
+
83
+ ## 比例原则
84
+
85
+ LOOM 的流程成本必须小于它降低的风险。
86
+
87
+ - 小改动:简短结构判断、局部契约、直接验证。
88
+ - 中等能力:清晰 Intent、必要设计、自动验证。
89
+ - 高风险系统:完整边界、决策记录、多层验证与回滚方案。
90
+
91
+ 当两条规则冲突时,优先保护真实用户结果、系统完整性和可恢复性;不要为了“流程正确”牺牲交付本身。