@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.
- package/LICENSE +21 -0
- package/README.md +87 -52
- package/cli/bin/loom.js +438 -149
- package/cli/help/concepts.md +93 -72
- package/cli/help/doctor.md +71 -121
- package/cli/help/loop.md +120 -135
- package/cli/help/patch.md +33 -0
- package/cli/help/preview.md +2 -1
- package/cli/help/version.md +92 -16
- package/cli/help/workflow.md +89 -100
- package/cli/src/activate.js +302 -73
- package/cli/src/auto.js +41 -18
- package/cli/src/diagnostics.js +223 -50
- package/cli/src/guide.js +127 -38
- package/cli/src/init.js +50 -29
- package/cli/src/intent-draft.js +303 -0
- package/cli/src/intent-map.js +540 -54
- package/cli/src/patch.js +214 -0
- package/cli/src/philosophy.js +181 -156
- package/cli/src/preview-prompt.md +13 -6
- package/cli/src/preview.js +1 -0
- package/cli/src/shared/intent-ref.js +38 -0
- package/cli/src/shared/proof-reference.js +19 -0
- package/cli/src/shared/verification-method.js +32 -0
- package/cli/src/verify.js +204 -51
- package/cli/src/version.js +5 -4
- package/dimensions/PART_DECOMPOSITION.md +42 -203
- package/dimensions/SEARCH_METHODOLOGY.md +101 -97
- package/dimensions/examples/AGENT_SYSTEM/README.md +1 -1
- package/dimensions/examples/CLI_TOOL/README.md +1 -1
- package/dimensions/universal/COLLABORATION_PHILOSOPHY.md +28 -77
- package/dimensions/universal/ENGINEERING_CREED.md +30 -74
- package/dimensions/universal/PRODUCT_PHILOSOPHY.md +32 -70
- package/meta/BASELINE.md +91 -276
- package/meta/INTENT_LOOP.md +242 -737
- package/meta/PHILOSOPHY_WEAVER.md +110 -343
- package/meta/ROLE_ACTIVATION.md +103 -267
- package/package.json +4 -3
- package/roles/architect.md +71 -111
- package/roles/forge.md +87 -126
- package/roles/keeper.md +99 -223
- package/roles/visionary.md +57 -86
- package/templates/INTENT_MAP_TEMPLATE.json +24 -10
- package/templates/PHILOSOPHY_TEMPLATE.md +44 -75
- package/templates/VISION_TEMPLATE.md +44 -67
package/meta/INTENT_LOOP.md
CHANGED
|
@@ -1,737 +1,242 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
-
|
|
158
|
-
-
|
|
159
|
-
-
|
|
160
|
-
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
-
|
|
181
|
-
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
"acceptance_achievement": {
|
|
244
|
-
"verdict": "passed",
|
|
245
|
-
"evidence": "契约#1 prompt 约束完整→prompts/extract.js L19-32;契约#2 schema 校验→validate.js L50-62;契约#5 测试 6/6 pass→reproduction_command 可复现"
|
|
246
|
-
}
|
|
247
|
-
},
|
|
248
|
-
"reproduction_command": "LLM_API_KEY=mock npm test",
|
|
249
|
-
"deviation_detail": "偏离说明(deviated 时必填)",
|
|
250
|
-
"reset_suggested": false
|
|
251
|
-
}
|
|
252
|
-
]
|
|
253
|
-
}
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
**字段说明**:
|
|
257
|
-
- `intent_id`:Intent ID,如 `INT-001`
|
|
258
|
-
- `records`:验证记录数组,每次验证追加一条
|
|
259
|
-
- `round`:轮次,从 1 开始递增
|
|
260
|
-
- `verdict`:总判定,四选一
|
|
261
|
-
- `timestamp`:ISO 8601 时间戳
|
|
262
|
-
- `summary`:验证摘要——具体证据,不是"看起来没问题"
|
|
263
|
-
- `dimensions`:四个维度的判定结果,**每个维度必须是 `{ verdict, evidence }` 对象**——`verdict` 是枚举值,`evidence` 是具体证据字符串。不允许只写"合规",必须写"对照了什么 + 在代码哪里看到/没看到"
|
|
264
|
-
- `reproduction_command`:复现验证的命令——别人拿到项目后跑这个命令能复现验证结果。如 `LLM_API_KEY=mock npm test`。L2 运行时验证必填,L1 静态审查可选
|
|
265
|
-
- `deviation_detail`:偏离说明(deviated 时必填)
|
|
266
|
-
- `reset_suggested`:是否建议重置上下文(context rot 严重时)
|
|
267
|
-
|
|
268
|
-
**evidence 的质量底线**:evidence 必须具体到可定位——"在 X 文件 Y 行看到 Z"或"对照哲学锚点 A 的反模式 B,代码里 C 处有/没有对应处理"。模糊的 evidence("看起来没问题"、"基本合规")等于未验证。CLI 会校验 evidence 非空,但内容质量由 Keeper 的诚实度保证。
|
|
269
|
-
|
|
270
|
-
**`loom verify write` 的输入格式**(单条记录,CLI 自动包装成上面的数组格式):
|
|
271
|
-
```json
|
|
272
|
-
{
|
|
273
|
-
"intent_id": "INT-001",
|
|
274
|
-
"verdict": "passed",
|
|
275
|
-
"timestamp": "2026-06-28T12:00:00.000Z",
|
|
276
|
-
"summary": "6/6 测试通过,验收契约全部达成",
|
|
277
|
-
"reproduction_command": "LLM_API_KEY=mock npm test",
|
|
278
|
-
"dimensions": {
|
|
279
|
-
"intent_fidelity": {
|
|
280
|
-
"verdict": "passed",
|
|
281
|
-
"evidence": "对照意图叙事第 2 段,extract.js 实现了完整编排"
|
|
282
|
-
},
|
|
283
|
-
"philosophy_consistency": {
|
|
284
|
-
"verdict": "passed",
|
|
285
|
-
"evidence": "AI_PHILOSOPHY 反模式逐条对照:JSON.parse 有 try/catch、fetch 有超时、无硬编码密钥"
|
|
286
|
-
},
|
|
287
|
-
"baseline_compliance": {
|
|
288
|
-
"verdict": "passed",
|
|
289
|
-
"evidence": "B1-B5 逐条合规,见 summary"
|
|
290
|
-
},
|
|
291
|
-
"acceptance_achievement": {
|
|
292
|
-
"verdict": "passed",
|
|
293
|
-
"evidence": "6 条契约全部达成,npm test 6/6 pass"
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
**验证叙事 MD 文件**(可选但推荐——JSON 存判定,MD 存详细证据):
|
|
300
|
-
```
|
|
301
|
-
verifications/INT-001.md
|
|
302
|
-
```
|
|
303
|
-
Keeper 验证 INT-001:
|
|
304
|
-
- 意图忠实度:[判定 + 具体证据——对照意图叙事第 X 段,实现中……]
|
|
305
|
-
- 哲学一致性:[判定 + 哪条哲学约束合规/违规]
|
|
306
|
-
- 底线合规:[判定 + B1-B5 各条合规情况]
|
|
307
|
-
- 验收达成:[判定 + 契约第 N 条:证据……]
|
|
308
|
-
- 总判定:[passed/deviated/blocked]
|
|
309
|
-
- 复现命令:[reproduction_command]
|
|
310
|
-
- 偏离说明(如有):[偏离什么、修正方向]
|
|
311
|
-
|
|
312
|
-
MD 文件不是必须的(JSON 的 summary 字段已包含摘要),但当验证复杂、证据多时,MD 提供更完整的叙事。Keeper 至少要写 JSON,推荐 JSON + MD 都写。
|
|
313
|
-
|
|
314
|
-
---
|
|
315
|
-
|
|
316
|
-
## Loop 控制流
|
|
317
|
-
|
|
318
|
-
Intent Loop 的固定骨架。底线之上,具体形态由哲学决定。
|
|
319
|
-
|
|
320
|
-
```
|
|
321
|
-
┌─────────────────────────────────────────────────┐
|
|
322
|
-
│ 1. Intent Selection │
|
|
323
|
-
│ Keeper 按拓扑序选下一个可执行 Intent │
|
|
324
|
-
│ (依赖满足 + status=pending) │
|
|
325
|
-
│ 必须解释"为什么选这个" │
|
|
326
|
-
├─────────────────────────────────────────────────┤
|
|
327
|
-
│ 2. Intent Realization │
|
|
328
|
-
│ Forge 加载意图链(叙事→哲学→设计→验收) │
|
|
329
|
-
│ Forge 在哲学约束下自主实现 │
|
|
330
|
-
│ 底线违规时必须停 │
|
|
331
|
-
├─────────────────────────────────────────────────┤
|
|
332
|
-
│ 3. Intent Verification │
|
|
333
|
-
│ Keeper 子代理独立验证 │
|
|
334
|
-
│ 按 Verification 底线执行 │
|
|
335
|
-
├─────────────────────────────────────────────────┤
|
|
336
|
-
│ 4. Intent Closure / Correction │
|
|
337
|
-
│ passed → 标记完成,回到 1 │
|
|
338
|
-
│ deviated → Keeper 与 Forge 对话修正 → 重新实现 → 重新验证
|
|
339
|
-
│ blocked → 停下,报告用户 │
|
|
340
|
-
├─────────────────────────────────────────────────┤
|
|
341
|
-
│ ← 回到 1,下一个 Intent │
|
|
342
|
-
└─────────────────────────────────────────────────┘
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
### Step 1:Intent Selection
|
|
346
|
-
|
|
347
|
-
**底线**:
|
|
348
|
-
- Keeper 按拓扑序选择,不能跳过未完成的依赖
|
|
349
|
-
- 必须解释"为什么选这个 Intent"(引用依赖图和优先级)
|
|
350
|
-
- 选择基于磁盘上的 Intent Map,不依赖上一轮 context
|
|
351
|
-
- **选定后 Keeper 必须更新该 Intent 的 status 为 in_progress**(通过 CLI `intent update <id> --status in_progress`)
|
|
352
|
-
|
|
353
|
-
**自由空间**:
|
|
354
|
-
- 多个可执行 Intent 时的优先级策略(由哲学决定)
|
|
355
|
-
- 是否一次选一个还是批量选(由哲学决定,但验证仍逐个进行)
|
|
356
|
-
|
|
357
|
-
### Step 2:Intent Realization
|
|
358
|
-
|
|
359
|
-
**底线**:
|
|
360
|
-
- Forge 必须加载意图链:`narrative_ref` 指向的意图叙事 + `philosophy_anchors` 指向的哲学 + `acceptance` 验收契约
|
|
361
|
-
- Forge 在哲学约束下自主实现——哲学是边界,边界内自由
|
|
362
|
-
- 底线(BASELINE)违规时必须停,不能"先做了再说"
|
|
363
|
-
- 接口契约变更必须回流(不能偷偷改契约)
|
|
364
|
-
|
|
365
|
-
**自由空间**:
|
|
366
|
-
- 实现方式完全由 Forge 决定(在哲学和底线约束内)
|
|
367
|
-
- 是否重构、怎么组织代码、用什么模式——Forge 自主
|
|
368
|
-
- Forge 可以质疑设计(通过 Keeper 对话,不是偷偷改)
|
|
369
|
-
|
|
370
|
-
### Step 3:Intent Verification
|
|
371
|
-
|
|
372
|
-
**底线**:
|
|
373
|
-
- Keeper 作为子代理独立运行(见 Verification 底线 V-1)
|
|
374
|
-
- 按 V-2 覆盖四个验证维度
|
|
375
|
-
- 按 V-3 给出明确判定和可追溯记录
|
|
376
|
-
|
|
377
|
-
**自由空间**:
|
|
378
|
-
- 验证的具体方式(对话式 / 报告式 / 测试式)
|
|
379
|
-
- 验证的详细程度
|
|
380
|
-
|
|
381
|
-
### Step 4:Intent Closure / Correction
|
|
382
|
-
|
|
383
|
-
**底线**:
|
|
384
|
-
- `passed` → Keeper 更新该 Intent 的 `status` 为 `completed`(通过 CLI `intent update <id> --status completed`),回到 Step 1
|
|
385
|
-
- `deviated` → Keeper 与 Forge 对话修正,Forge 重新实现,重新验证(不是机械回流改文档,是讨论后重新实现)
|
|
386
|
-
- `blocked` → Keeper 更新该 Intent 的 `status` 为 `blocked`(通过 CLI `intent update <id> --status blocked`),停下,报告用户,说明阻塞原因
|
|
387
|
-
- `pending_human` → Keeper 保持该 Intent 的 `status` 为 `in_progress`,报告用户"需要人类验证的维度",等待用户通过 `verify write` 补充判定后重新评估
|
|
388
|
-
- `needs_review`(变更回流触发)→ Keeper 重新验证该 Intent(按原 verification_method 走):
|
|
389
|
-
- 验证通过 → Keeper 更新 `status` 为 `completed`(变更未影响该 Intent 的验收)
|
|
390
|
-
- 验证偏离 → Keeper 更新 `status` 为 `pending`,回到 Step 2 让 Forge 修正(变更影响了该 Intent 的实现)
|
|
391
|
-
- 验证阻塞 → Keeper 更新 `status` 为 `blocked`,报告用户
|
|
392
|
-
|
|
393
|
-
**status 更新权归 Keeper**:Keeper 是 loop 的控制者,负责所有运行时 status 更新。Architect 绘制 Intent Map 的结构(节点、依赖、字段),Keeper 不改结构,只更新 status。Forge 不能改 .loom/ 下任何文档。
|
|
394
|
-
|
|
395
|
-
**自由空间**:
|
|
396
|
-
- 偏离的修正流程(Keeper 与 Forge 怎么对话)
|
|
397
|
-
- 偏离程度的判定标准
|
|
398
|
-
|
|
399
|
-
**deviated 循环退出底线**:
|
|
400
|
-
|
|
401
|
-
同一个 Intent 连续判定 `deviated` 超过 **3 轮**(默认值),必须升级为 `blocked`,停下报告用户。
|
|
402
|
-
|
|
403
|
-
哲学可以定义不同的上限(如关键 Intent 2 轮、轻量 Intent 5 轮),但**必须定义上限**——不允许"无限修正"的哲学。如果哲学没有定义,按默认 3 轮。
|
|
404
|
-
|
|
405
|
-
**轮次计算规则**:统计同一个 Intent 的**连续** deviated 次数。中间出现 passed 则重置为 0;出现 blocked 后回到 pending 也重置为 0。CLI 的 `verify write` 自动计算并记录轮次。
|
|
406
|
-
|
|
407
|
-
验证记录中必须记录当前是第几轮 deviated,Keeper 每次判定时检查轮次。
|
|
408
|
-
|
|
409
|
-
### Loop 终止条件
|
|
410
|
-
|
|
411
|
-
- **不动点达成**:所有 Intent 的 `status` 为 `completed`,且没有 `needs_review` → 项目阶段完成
|
|
412
|
-
- 用户主动停止
|
|
413
|
-
- 阻塞无法解决,Keeper 判定 `blocked` 且无法通过对话修正
|
|
414
|
-
- **无法收敛**:收敛趟数超过最大值(默认 3 趟),仍有 `needs_review` → blocked,报告"无法收敛,可能存在系统性问题需要 Architect 介入"
|
|
415
|
-
|
|
416
|
-
### 不动点收敛机制
|
|
417
|
-
|
|
418
|
-
Intent Loop 不是单纯的线性推进——它是**收敛到不动点**的过程。
|
|
419
|
-
|
|
420
|
-
**默认单趟**:大多数项目按拓扑序验证所有 Intent,全部 passed → done。不需要多趟。
|
|
421
|
-
|
|
422
|
-
**触发收敛**:当 Pass 1 结束后存在 `needs_review` 的 Intent(修某个 Intent 时影响了已完成的 Intent),自动进入收敛趟。
|
|
423
|
-
|
|
424
|
-
```
|
|
425
|
-
Pass 1(默认): 按拓扑序验证所有 Intent
|
|
426
|
-
- 每个 Intent: Forge 实现 → Keeper 验证
|
|
427
|
-
- deviated → 修 → 重验(最多 3 轮 → blocked)
|
|
428
|
-
- 修的时候影响已完成的 Intent → 标记 needs_review
|
|
429
|
-
- passed → 下一个
|
|
430
|
-
|
|
431
|
-
Pass 1 结束:
|
|
432
|
-
- 有 needs_review? → Pass 2
|
|
433
|
-
- 没有? → 不动点达成 → done
|
|
434
|
-
|
|
435
|
-
Pass 2(收敛趟): 重验所有 needs_review 的 Intent
|
|
436
|
-
- needs_review → in_progress → Keeper 重新验证
|
|
437
|
-
- deviated → 修 → 重验
|
|
438
|
-
- 修的时候又影响别的 → 标记 needs_review
|
|
439
|
-
- passed → completed
|
|
440
|
-
|
|
441
|
-
Pass 2 结束:
|
|
442
|
-
- 还有 needs_review? → Pass 3
|
|
443
|
-
- 没有? → done
|
|
444
|
-
|
|
445
|
-
Pass 3(最大趟数): 同上
|
|
446
|
-
- 结束后还有 needs_review? → blocked, 报告"无法收敛"
|
|
447
|
-
```
|
|
448
|
-
|
|
449
|
-
**收敛趟数怎么数**:一个 Intent 从 `completed` 被标记为 `needs_review` 算一次。同一个 Intent 被标记多次 needs_review 算多次。累计标记次数超过最大趟数(默认 3)→ 无法收敛。
|
|
450
|
-
|
|
451
|
-
**为什么是不动点**:每趟收敛都解决一些问题,但如果修 A 时引入了影响 B 的问题,B 就需要重验。当一趟完整 pass 没有产生任何新的 needs_review,说明"再验一遍也不会发现新东西"——这就是不动点。
|
|
452
|
-
|
|
453
|
-
**AUTO 模式下**:收敛自动进行,不需要人类确认每趟 pass。Keeper 在每趟结束时检查 needs_review 数量,决定继续还是结束。
|
|
454
|
-
|
|
455
|
-
---
|
|
456
|
-
|
|
457
|
-
## 变更回流机制
|
|
458
|
-
|
|
459
|
-
### 问题:Intent Map 不是永恒的
|
|
460
|
-
|
|
461
|
-
LOOM 原本假设 Architect 退场后 Intent Map 结构不变。但现实中:
|
|
462
|
-
- Forge 实现时发现接口契约需要调整(如数据源 schema 和预期不同)
|
|
463
|
-
- Keeper 验证时发现验收契约不可行(如性能指标在当前技术栈下达不到)
|
|
464
|
-
- 外部依赖变化(如 API 升级、模型更新)导致 Intent 需要调整
|
|
465
|
-
|
|
466
|
-
没有回流机制时,Forge 要么偷偷改(违反底线),要么项目卡死。
|
|
467
|
-
|
|
468
|
-
### 变更回流的触发
|
|
469
|
-
|
|
470
|
-
变更请求可以由两个角色发起:
|
|
471
|
-
|
|
472
|
-
| 发起者 | 触发场景 | 流程 |
|
|
473
|
-
|---|---|---|
|
|
474
|
-
| **Forge** | 实现时发现接口契约/验收契约/Intent 范围需要调整 | Forge 停下实现 → 通过 Keeper 对话提出变更请求 → Keeper 评估 |
|
|
475
|
-
| **Keeper** | 验证时发现验收契约不可行、或 Intent 间存在未预期的耦合 | Keeper 标记 Intent 为 `blocked` → 在验证记录中说明变更需求 → 报告用户 |
|
|
476
|
-
|
|
477
|
-
### Keeper 的变更评估
|
|
478
|
-
|
|
479
|
-
Keeper 收到变更请求后,评估三件事:
|
|
480
|
-
|
|
481
|
-
1. **变更范围**:是微调(改 acceptance 措辞)还是结构性变更(加/删 Intent、改依赖、改接口契约)
|
|
482
|
-
2. **影响传播**:这个变更影响哪些已完成的 Intent?哪些 in_progress 的 Intent?哪些 pending 的 Intent?
|
|
483
|
-
3. **处理路径**:微调由 Keeper 直接处理;结构性变更需要 Architect 重新激活
|
|
484
|
-
|
|
485
|
-
### Keeper 的有限修改权
|
|
486
|
-
|
|
487
|
-
Keeper 可以做以下微调(不需要 Architect 介入):
|
|
488
|
-
- 修改 Intent 的 `acceptance` 字段的措辞(澄清,不是改变验收标准)
|
|
489
|
-
- 修改 Intent 的 `verification_method` 字段(调整验证方式)
|
|
490
|
-
- 在 Intent 的 `_optional` 中追加备注
|
|
491
|
-
|
|
492
|
-
Keeper **不能**做以下结构性变更(需要 Architect 重新激活):
|
|
493
|
-
- 增加或删除 Intent
|
|
494
|
-
- 修改 Intent 的 `depends_on`(依赖关系)
|
|
495
|
-
- 修改 Intent 的 `narrative_ref`(意图叙事引用)
|
|
496
|
-
- 修改 Intent 的 `philosophy_anchors`(哲学锚点)
|
|
497
|
-
|
|
498
|
-
### 微调 vs 结构性变更的判定标准
|
|
499
|
-
|
|
500
|
-
"微调"和"结构性变更"的边界用以下规则判定:
|
|
501
|
-
|
|
502
|
-
**判定规则:变更是否影响其他 Intent?**
|
|
503
|
-
|
|
504
|
-
- 如果变更**只影响当前 Intent**(不传播到依赖它的 Intent)→ 微调,Keeper 可以处理
|
|
505
|
-
- 如果变更**影响其他 Intent**(依赖它的 Intent 的验收契约或实现需要调整)→ 结构性变更,需要 Architect
|
|
506
|
-
|
|
507
|
-
**具体判定**:
|
|
508
|
-
|
|
509
|
-
| 变更内容 | 影响传播? | 判定 |
|
|
510
|
-
|---|---|---|
|
|
511
|
-
| 改 acceptance 措辞(语义不变) | 不传播 | 微调 |
|
|
512
|
-
| 改 acceptance 标准(如 "< 3 秒" → "< 5 秒") | 传播(依赖该接口的 Intent 可能受影响) | 结构性变更 |
|
|
513
|
-
| 改 verification_method(调整验证方式) | 不传播 | 微调 |
|
|
514
|
-
| 改接口契约的字段名 | 传播 | 结构性变更 |
|
|
515
|
-
| 改接口契约的字段类型 | 传播 | 结构性变更 |
|
|
516
|
-
| 加/删 Intent | 传播(依赖关系变化) | 结构性变更 |
|
|
517
|
-
| 改 depends_on | 传播 | 结构性变更 |
|
|
518
|
-
|
|
519
|
-
**Keeper 评估变更时必须检查影响传播**:Keeper 不能只看变更本身,必须检查所有 `depends_on` 包含该 Intent 的后续 Intent,判断它们是否受影响。如果受影响,即使变更本身看起来很小,也判定为结构性变更。
|
|
520
|
-
|
|
521
|
-
**"措辞澄清"的边界**:措辞澄清是不改变验收标准的语义,只是让表述更清晰。例如:
|
|
522
|
-
- "响应时间 < 3 秒" → "响应时间应小于 3 秒" → 微调(语义不变)
|
|
523
|
-
- "响应时间 < 3 秒" → "响应时间 < 5 秒" → 结构性变更(标准变了)
|
|
524
|
-
- "用户能登录" → "用户能用邮箱和密码登录" → 结构性变更(细化了验收条件,可能影响实现)
|
|
525
|
-
|
|
526
|
-
### Architect 重新激活
|
|
527
|
-
|
|
528
|
-
当 Keeper 判定需要结构性变更时:
|
|
529
|
-
|
|
530
|
-
1. Keeper 将相关 Intent 标记为 `blocked`
|
|
531
|
-
2. Keeper 在验证记录中说明:变更需求、影响范围、为什么需要 Architect
|
|
532
|
-
3. **Keeper 必须报告用户**——通知用户"需要 Architect 重新激活处理变更",说明变更内容和影响范围
|
|
533
|
-
4. **用户确认后**,Architect 重新激活——读取变更请求,评估是否接受
|
|
534
|
-
5. 如果接受:Architect 更新 Intent Map 结构(加/删 Intent、改依赖、改验收契约)
|
|
535
|
-
6. Architect 更新后,受影响的 Intent 标记为 `needs_review`,由 Keeper 重新验证
|
|
536
|
-
7. 已完成且不受影响的 Intent 保持 `completed`,不需要重做
|
|
537
|
-
|
|
538
|
-
**用户知情权**:任何结构性变更(加/删 Intent、改依赖、改接口契约)必须通知用户并等待确认。用户是变更的最终决策者——Keeper 评估、Architect 执行,但用户批准。这不是"用户 micromanage 每个 Intent",是"用户在结构变更层面保持知情权和决策权"。
|
|
539
|
-
|
|
540
|
-
**Architect 不是一次性退场**——它是"按需重激活"。退场是指"不主动参与 Loop",不是"永远不能回来"。变更请求触发重激活时,Architect 回来处理完变更再次退场。
|
|
541
|
-
|
|
542
|
-
### 变更影响传播
|
|
543
|
-
|
|
544
|
-
当一个 Intent 的接口契约或验收契约变更时,依赖它的 Intent 可能受影响。传播规则:
|
|
545
|
-
|
|
546
|
-
- Architect 在更新 Intent Map 时,必须检查所有 `depends_on` 包含该 Intent 的后续 Intent
|
|
547
|
-
- 如果后续 Intent 的验收契约依赖前一个 Intent 的接口,且接口变了,后续 Intent 的验收契约可能需要更新
|
|
548
|
-
- Architect 在变更记录中列出受影响的 Intent 清单
|
|
549
|
-
- 受影响的 Intent 如果已经 `completed`,标记为 `needs_review`(需要重新验证);如果 `pending` 或 `in_progress`,保持原状态但验收契约可能已更新
|
|
550
|
-
|
|
551
|
-
### 变更记录
|
|
552
|
-
|
|
553
|
-
所有结构性变更必须记录在 `.loom/v{N}/03_DECISIONS/` 下(遵循 BASELINE B4 决策可追溯):
|
|
554
|
-
- 变更内容(改了什么)
|
|
555
|
-
- 变更原因(为什么改)
|
|
556
|
-
- 影响范围(哪些 Intent 受影响)
|
|
557
|
-
- 触发来源(Forge 提出 / Keeper 发现)
|
|
558
|
-
|
|
559
|
-
---
|
|
560
|
-
|
|
561
|
-
## 上下文隔离策略
|
|
562
|
-
|
|
563
|
-
### 问题:context rot
|
|
564
|
-
|
|
565
|
-
长会话中 context 会 rot——Agent 记住越来越多细节,但越来越偏离原始意图。做完 INT-001 再做 INT-002 时,INT-001 的实现细节还在 context 里,可能干扰对 INT-002 原始意图的判断。
|
|
566
|
-
|
|
567
|
-
### 现实约束
|
|
568
|
-
|
|
569
|
-
Agent 没法真的"清空记忆"。单会话里 context 是累积的,没法 wipe。LOOM 不假装能阻止 Forge 的 context rot——这是物理约束。
|
|
570
|
-
|
|
571
|
-
LOOM 的立场是:**不阻止 rot,而是让 rot 导致的偏离被抓住。**
|
|
572
|
-
|
|
573
|
-
### 各角色的隔离能力
|
|
574
|
-
|
|
575
|
-
| 角色 | 隔离方式 | 说明 |
|
|
576
|
-
|---|---|---|
|
|
577
|
-
| Keeper | **子代理,真隔离** | 每次验证启动新子代理,天然新 context,不继承 Forge 的实现细节 |
|
|
578
|
-
| Forge(默认) | **不隔离,靠 Keeper 兜底** | 主会话累积 context,rot 可能发生,但 Keeper 验证会抓住偏离 |
|
|
579
|
-
| Forge(子代理模式) | **子代理,真隔离** | 每个 Intent 一个 Forge 子代理,真正的 reset,开销大 |
|
|
580
|
-
|
|
581
|
-
### 为什么不在 Forge 主会话里搞"锚定协议"
|
|
582
|
-
|
|
583
|
-
之前考虑过让 Forge 每个 Intent 开始时"显式复述原始意图"来对抗 rot。但这依赖 Agent 自律——rot 严重的时候,Agent 连"该复述了"都可能忘。半吊子的自律机制不如没有,会给人"已经对抗了 rot"的错觉,反而放松警惕。
|
|
584
|
-
|
|
585
|
-
### 真正的防线:Keeper 兜底
|
|
586
|
-
|
|
587
|
-
不管 Forge 怎么 rot,Keeper 是子代理,独立验证,拿着原始意图对照实现。rot 导致的偏离会在验证阶段暴露。
|
|
588
|
-
|
|
589
|
-
Keeper 判定 `deviated` 时,可以在偏离说明中附带**重置建议**:
|
|
590
|
-
- "本次偏离可能是 context rot 导致,建议重置 Forge 上下文后重新实现"
|
|
591
|
-
- Agent 收到建议后自主决定是否启动 Forge 子代理,用户也可以随时介入
|
|
592
|
-
|
|
593
|
-
### 重置 Forge 上下文的方式
|
|
594
|
-
|
|
595
|
-
Agent 有自主权决定是否启动 Forge 子代理。用户也可以随时介入要求重置。
|
|
596
|
-
|
|
597
|
-
1. **启动 Forge 子代理**——Agent 收到 Keeper 的重置建议后,自主决定启动 Forge 子代理重新实现这个 Intent。真隔离,但需要框架支持子代理调度
|
|
598
|
-
2. **开新会话**——用户开新的 Agent 会话,从磁盘加载 Intent Map 继续。最简单,零框架开销
|
|
599
|
-
3. **不重置,直接重新实现**——如果偏离不严重,Keeper 与 Forge 对话修正后继续,接受 rot 风险
|
|
600
|
-
|
|
601
|
-
### 何时应该重置
|
|
602
|
-
|
|
603
|
-
Agent 参考 Keeper 的重置建议自主判断,用户也可以随时介入。以下信号意味着 rot 已经影响判断:
|
|
604
|
-
- Keeper 连续判定 `deviated`,且偏离方向一致(说明 Forge 被某个早期实现细节带偏了)
|
|
605
|
-
- Forge 开始"自圆其说"——实现明显偏离意图,但 Forge 觉得没问题
|
|
606
|
-
- 用户自己感觉 Forge 的输出开始"跑偏"
|
|
607
|
-
|
|
608
|
-
### Forge 子代理模式(可选升级)
|
|
609
|
-
|
|
610
|
-
对于高风险或复杂的 Intent,Agent 可以自主把 Forge 也变成子代理——每个 Intent 一个新的 Forge 子代理,父会话只负责调度。
|
|
611
|
-
|
|
612
|
-
这是真正的 context reset。代价:
|
|
613
|
-
- 父会话失去实现细节的连续性(需要重新读代码了解前置 Intent 的接口)
|
|
614
|
-
- 子代理启动开销
|
|
615
|
-
|
|
616
|
-
Agent 有自主权决定何时启用。大部分 Intent 在主会话里做就够了,Keeper 会兜底;高风险或 rot 信号出现时,Agent 可以主动切换到子代理模式。
|
|
617
|
-
|
|
618
|
-
### 不隔离的内容
|
|
619
|
-
|
|
620
|
-
- 已完成代码的接口(Forge 需要知道前置 Intent 实现了什么接口)
|
|
621
|
-
- 已完成 Intent 的验证记录(Keeper 需要知道前置 Intent 已通过验证)
|
|
622
|
-
|
|
623
|
-
这些通过**磁盘引用**获取,不是通过 context 继承。
|
|
624
|
-
|
|
625
|
-
---
|
|
626
|
-
|
|
627
|
-
## CLI 访问层
|
|
628
|
-
|
|
629
|
-
Intent Map 和验证记录是 JSON,但 Agent 不应直接读整个文件。通过 CLI 按需获取——省 token、更高效、还能做校验。
|
|
630
|
-
|
|
631
|
-
### CLI 命令底线
|
|
632
|
-
|
|
633
|
-
以下命令是 LOOM 系统必须提供的:
|
|
634
|
-
|
|
635
|
-
| 命令 | 功能 | 为什么需要 |
|
|
636
|
-
|---|---|---|
|
|
637
|
-
| `intent next` | 返回下一个可执行 Intent | Keeper 不用扫描全图 |
|
|
638
|
-
| `intent status` | 返回当前进度 | 一句话了解全局 |
|
|
639
|
-
| `intent graph` | 输出依赖图 | 可视化依赖关系 |
|
|
640
|
-
| `intent get <id>` | 返回某 Intent 的完整信息 | Forge 加载意图链 |
|
|
641
|
-
| `intent narrative <id>` | 返回某 Intent 的意图叙事(解析 narrative_ref) | Keeper 获取验证依据——"原始意图" |
|
|
642
|
-
| `intent update <id> --status <s>` | 更新 Intent 状态 | Keeper 推进 loop(pending→in_progress→completed/blocked) |
|
|
643
|
-
| `intent validate` | 校验 Intent Map 结构 | 提前发现格式错误 |
|
|
644
|
-
| `verify contract <id>` | 返回某 Intent 的验收契约(解析引用) | Keeper 获取验证依据 |
|
|
645
|
-
| `verify history <id>` | 返回某 Intent 的验证历史 | Keeper 查前置验证 |
|
|
646
|
-
| `verify pending` | 返回待验证的 Intent | 批量验证场景 |
|
|
647
|
-
| `verify write --json-file <path>` | 写入验证记录 | Keeper 落盘判定结果 |
|
|
648
|
-
| `philosophy get <anchor>` | 返回特定哲学锚点内容 | 角色按需加载哲学 |
|
|
649
|
-
|
|
650
|
-
### CLI 与文件的关系
|
|
651
|
-
|
|
652
|
-
- JSON 是**真相源**(CLI 读它)
|
|
653
|
-
- Agent 通过 **CLI 访问**,不直接读文件
|
|
654
|
-
- 人类想看全貌时直接读 JSON 或用 CLI 渲染
|
|
655
|
-
|
|
656
|
-
---
|
|
657
|
-
|
|
658
|
-
## 给 Philosophy Weaver 的指令
|
|
659
|
-
|
|
660
|
-
Philosophy Weaver 织造哲学时,必须考虑 Intent Loop 的需求:
|
|
661
|
-
|
|
662
|
-
1. 哲学文档必须**可被 Intent 引用**——Intent 的 `philosophy_anchors` 字段能精确指向哲学文档的章节
|
|
663
|
-
2. 哲学文档必须**包含决策标准**——Keeper 验证"哲学一致性"时需要判断依据
|
|
664
|
-
3. 哲学文档必须**包含反模式清单**——Forge 实现时需要知道"什么不做"
|
|
665
|
-
4. 验收契约的形式由哲学决定——Weaver 织造产品哲学时定义"什么算忠实实现"
|
|
666
|
-
|
|
667
|
-
---
|
|
668
|
-
|
|
669
|
-
## 元规范与哲学的边界
|
|
670
|
-
|
|
671
|
-
| 由这份文件规定(底线) | 由哲学决定(自由) |
|
|
672
|
-
|---|---|
|
|
673
|
-
| Intent Map 必须是图 | 图的详细程度 |
|
|
674
|
-
| Intent 必须有 6 个必填字段 | 是否有额外字段 |
|
|
675
|
-
| 验证必须独立子代理 | 子代理怎么对话 |
|
|
676
|
-
| 验证必须覆盖 4 个维度 | 每个维度怎么验 |
|
|
677
|
-
| 验证能力分三层(L1/L2/L3) | 每个 Intent 用哪层(由 Architect 声明) |
|
|
678
|
-
| 验证结果必须四选一 | 偏离的修正流程 |
|
|
679
|
-
| deviated 连续 3 轮必须升级 blocked | 哲学可定义不同轮次上限 |
|
|
680
|
-
| Keeper 子代理兜底 context rot | 重置方式由用户决定、何时用 Forge 子代理 |
|
|
681
|
-
| 变更回流:结构性变更需 Architect 重激活 | 微调由 Keeper 处理 |
|
|
682
|
-
| 必须有 CLI 命令 | CLI 的具体实现 |
|
|
683
|
-
|
|
684
|
-
底线守住 loop 不会崩,自由度留给哲学发挥。
|
|
685
|
-
|
|
686
|
-
---
|
|
687
|
-
|
|
688
|
-
## 运行假设与故障恢复
|
|
689
|
-
|
|
690
|
-
### 执行模型:单 Agent 顺序执行
|
|
691
|
-
|
|
692
|
-
LOOM 的 Intent Loop 假设**单 Agent 顺序执行**——同一时刻只有一个角色(Keeper 或 Forge)在操作 Intent Map 和验证记录。
|
|
693
|
-
|
|
694
|
-
**为什么**:Intent Map 和验证记录是单文件 JSON,没有文件锁。多 Agent 并行写入会导致数据损坏。
|
|
695
|
-
|
|
696
|
-
**多 Agent 并行的场景**:如果需要并行(如多个 Forge 同时实现不同 Intent),必须由外部编排器协调——例如:
|
|
697
|
-
- 每个 Forge 操作独立的代码区域,不交叉
|
|
698
|
-
- Intent Map 的更新由单一协调者串行执行
|
|
699
|
-
- 验证记录按 Intent ID 分文件,不共享
|
|
700
|
-
|
|
701
|
-
LOOM 不提供内置并发控制。并行是外部编排器的责任。
|
|
702
|
-
|
|
703
|
-
### 崩溃恢复
|
|
704
|
-
|
|
705
|
-
Agent 崩溃后可能留下不一致状态。恢复流程:
|
|
706
|
-
|
|
707
|
-
**场景 A:Forge 崩溃,Intent 留在 in_progress**
|
|
708
|
-
|
|
709
|
-
1. Keeper 检测到 `in_progress` 但无对应验证记录的 Intent
|
|
710
|
-
2. Keeper 报告用户:`INT-XXX 处于 in_progress 但无验证记录,可能上次执行中断`
|
|
711
|
-
3. 用户决定:
|
|
712
|
-
- **继续**:重新激活 Forge,从当前代码状态接着做
|
|
713
|
-
- **重置**:`loom intent update INT-XXX --status pending`,从头来
|
|
714
|
-
4. Keeper 不自动决定——崩溃后的恢复涉及代码状态判断,需要人类介入
|
|
715
|
-
|
|
716
|
-
**场景 B:Keeper 崩溃,验证记录写了一半**
|
|
717
|
-
|
|
718
|
-
1. 验证记录是追加模式(数组),半条记录不会污染已有记录
|
|
719
|
-
2. 下次 Keeper 验证时,重新写入完整记录即可
|
|
720
|
-
3. 不需要特殊恢复
|
|
721
|
-
|
|
722
|
-
**场景 C:Intent Map 文件损坏**
|
|
723
|
-
|
|
724
|
-
1. `loom intent validate` 会检测到格式错误
|
|
725
|
-
2. 从版本控制(Git)恢复 Intent Map
|
|
726
|
-
3. LOOM 不提供自动备份——版本控制是项目的基本卫生
|
|
727
|
-
|
|
728
|
-
### 版本控制是前提
|
|
729
|
-
|
|
730
|
-
LOOM 假设项目使用版本控制(Git)。所有 `.loom/` 下的文件(哲学、愿景、架构、Intent Map、验证记录)都应纳入版本控制。
|
|
731
|
-
|
|
732
|
-
这解决了:
|
|
733
|
-
- 文件损坏 → 从 Git 恢复
|
|
734
|
-
- 误操作 → 从 Git 回滚
|
|
735
|
-
- 变更追溯 → Git log 就是审计日志
|
|
736
|
-
|
|
737
|
-
LOOM 不内置备份、审计、回滚——这些是版本控制的职责。
|
|
1
|
+
# INTENT LOOP — LOOM Quality Engine Runtime
|
|
2
|
+
|
|
3
|
+
Intent Loop 将一个产品意图变成可验证结果,并在证据不足时回流到真正负责的层。
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
Doctrine → Intent → Contract
|
|
7
|
+
→ Expertise Compiler → Quality Arena → Quality Proof
|
|
8
|
+
→ Close or Reflow
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 1. 权威边界
|
|
12
|
+
|
|
13
|
+
| 内容 | 唯一负责人 |
|
|
14
|
+
|---|---|
|
|
15
|
+
| 长期价值、卓越标准、反模式 | Weaver |
|
|
16
|
+
| 产品目标、非目标、Intent narrative | Visionary |
|
|
17
|
+
| 系统边界、Intent DAG、完成/质量契约 | Architect |
|
|
18
|
+
| Expertise Pack、候选、实现、自测 | Forge |
|
|
19
|
+
| 独立判定、Quality Proof | Keeper |
|
|
20
|
+
|
|
21
|
+
Keeper 不修改契约;Forge 不以实现困难改写 Intent;Visionary 不写 acceptance;Weaver 不拆实施模块。
|
|
22
|
+
|
|
23
|
+
## 2. Intent Schema
|
|
24
|
+
|
|
25
|
+
必需字段:
|
|
26
|
+
|
|
27
|
+
- `title`
|
|
28
|
+
- `narrative_ref`
|
|
29
|
+
- `depends_on`
|
|
30
|
+
- `philosophy_anchors`
|
|
31
|
+
- `acceptance`
|
|
32
|
+
- `continuity_required`:仅在会变更既有用户或系统状态时启用;保留规则与时序验证仍写在 acceptance。
|
|
33
|
+
- `status`
|
|
34
|
+
- `revision`
|
|
35
|
+
|
|
36
|
+
可选质量字段:
|
|
37
|
+
|
|
38
|
+
- `quality_contract`:相对基线可观察的质量主张与最小有意义差异。
|
|
39
|
+
- `capability_needs`:任务需要的专业认知、工具或审美能力。
|
|
40
|
+
- `creative_scope`:允许探索与不得改变的边界。
|
|
41
|
+
- `verification_method`:可复现验证方法。
|
|
42
|
+
|
|
43
|
+
`acceptance` 是 Reliability Floor;`quality_contract` 是 Distinctive Ceiling。二者不能合并成一串模糊
|
|
44
|
+
“高质量要求”,否则完成与卓越都无法诚实判定。
|
|
45
|
+
|
|
46
|
+
## 3. 状态与 revision
|
|
47
|
+
|
|
48
|
+
状态:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
pending → in_progress → completed
|
|
52
|
+
↘ blocked
|
|
53
|
+
completed → needs_review → in_progress
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
- 语义、契约、依赖或引用变化时递增 `revision`。
|
|
57
|
+
- 纯状态变化不递增。
|
|
58
|
+
- 只有当前 revision 的最新记录为 `passed` 才能 completed。
|
|
59
|
+
- 连续三轮 `deviated` 升级为 blocked。
|
|
60
|
+
- 旧版缺失 revision 兼容为 1。
|
|
61
|
+
|
|
62
|
+
## 4. Context Pack
|
|
63
|
+
|
|
64
|
+
`loom activate <role> --intent <id>` 生成:
|
|
65
|
+
|
|
66
|
+
1. Execution Envelope
|
|
67
|
+
2. Active Objective
|
|
68
|
+
3. Hard Invariants
|
|
69
|
+
4. Success Contracts
|
|
70
|
+
5. Project Judgment
|
|
71
|
+
6. Expertise Inputs
|
|
72
|
+
7. Working Facts
|
|
73
|
+
8. Role Contract / Output / Reflow / Stop
|
|
74
|
+
|
|
75
|
+
这是一种结构化注意力控制,不是内存擦除。宿主 system/developer/user 指令优先;旧会话事实与磁盘冲突时,
|
|
76
|
+
以当前项目事实为准并报告冲突。
|
|
77
|
+
|
|
78
|
+
## 5. Select
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
loom intent next
|
|
82
|
+
loom intent update <id> --status in_progress
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
只选择 pending、所有依赖 completed、未弃用的 Intent。一次 Forge 作用域只包含一个当前 Intent。
|
|
86
|
+
|
|
87
|
+
## 6. Expertise Compiler
|
|
88
|
+
|
|
89
|
+
Forge 在实现前形成临时 Expertise Pack:
|
|
90
|
+
|
|
91
|
+
- **Domain**:领域机制、失败边界和项目事实。
|
|
92
|
+
- **Taste**:什么区分普通、可靠和出众。
|
|
93
|
+
- **Critic**:最可能出现的平庸方案、自我欺骗与反例。
|
|
94
|
+
- **Verifier**:如何观察、比较和复现。
|
|
95
|
+
|
|
96
|
+
这四项是认知功能,不是必须创建四个角色或四份文档。
|
|
97
|
+
|
|
98
|
+
技能、工具和资料必须经历:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
Discover → Load → Translate → Use
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
只看到名字不算拥有能力;真正使用时要说明它改变了哪条判断、候选或验证方法。
|
|
105
|
+
|
|
106
|
+
## 7. Quality Arena
|
|
107
|
+
|
|
108
|
+
### Direct Path
|
|
109
|
+
|
|
110
|
+
当正确方案明显、质量契约不要求比较、探索不会增加实质价值时,直接实现并验证。
|
|
111
|
+
|
|
112
|
+
### Arena Path
|
|
113
|
+
|
|
114
|
+
当目标要求“更好、出众、惊艳”或存在关键质量选择时:
|
|
115
|
+
|
|
116
|
+
1. **Baseline**:记录改动前可观察状态。
|
|
117
|
+
2. **Candidates**:生成少量机制不同的方案。
|
|
118
|
+
3. **Compare**:对照完成契约、质量契约、Doctrine、成本与风险。
|
|
119
|
+
4. **Realize**:实现最强候选。
|
|
120
|
+
5. **Observe**:检查真实界面、运行结果、性能或用户信号。
|
|
121
|
+
6. **Adjust**:根据新证据修正。
|
|
122
|
+
7. **Self-check**:Forge 先排除明显失败,再交 Keeper。
|
|
123
|
+
|
|
124
|
+
候选不强制落盘,不设置固定数量。没有候选胜过基线时,保留原方案或回流契约。
|
|
125
|
+
|
|
126
|
+
## 8. Independent Quality Proof
|
|
127
|
+
|
|
128
|
+
Keeper 在独立任务中只加载当前 revision、真实产物、契约、Doctrine 和必要验证工具。不要加载 Forge 的
|
|
129
|
+
隐藏推理或 Expertise Pack,以避免共享偏见。
|
|
130
|
+
|
|
131
|
+
基础维度:
|
|
132
|
+
|
|
133
|
+
- `intent_fidelity`
|
|
134
|
+
- `philosophy_consistency`
|
|
135
|
+
- `baseline_compliance`
|
|
136
|
+
- `acceptance_achievement`
|
|
137
|
+
|
|
138
|
+
若 `continuity_required` 为 true,额外增加:
|
|
139
|
+
|
|
140
|
+
- `preservation_achievement`
|
|
141
|
+
|
|
142
|
+
有 `quality_contract` 时增加:
|
|
143
|
+
|
|
144
|
+
- `quality_achievement`
|
|
145
|
+
|
|
146
|
+
每个维度格式:
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"verdict": "passed",
|
|
151
|
+
"evidence": "对照了什么、在哪里观察到、如何复现"
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
质量契约声明相对提升时,`quality_achievement` 还必须提供 `quality_proof_ref`,其指向的证据至少包含:
|
|
156
|
+
|
|
157
|
+
- 改动前 Baseline。
|
|
158
|
+
- 精确质量主张与最小有意义差异。
|
|
159
|
+
- 候选依赖的不同机制。
|
|
160
|
+
- 选择证据。
|
|
161
|
+
- 回归与稳定性证据。
|
|
162
|
+
- 代价、限制和保留风险。
|
|
163
|
+
|
|
164
|
+
若比较依赖主观模型评分,至少使用顺序交换或同等的偏差检查;高风险主观质量保留
|
|
165
|
+
`pending_human`。不得把单次 LLM 偏好包装成客观事实。
|
|
166
|
+
|
|
167
|
+
## 9. Write and Close
|
|
168
|
+
|
|
169
|
+
完整记录:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
loom verify write --json-file verification.json
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
快捷记录:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
loom verify pass <id> \
|
|
179
|
+
--summary "<具体证据>" \
|
|
180
|
+
--reproduction-command "<命令>" \
|
|
181
|
+
--quality-proof "<ref>"
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
没有质量契约时省略 `--quality-proof`。CLI 自动绑定当前 revision 并追加历史。
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
loom intent done <id>
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
如果完成契约通过但质量契约未通过,可以诚实记录完成证据,但不能写整体 passed 或宣称提升;
|
|
191
|
+
回流 Arena、修订质量契约,或由用户接受当前边界。
|
|
192
|
+
|
|
193
|
+
### 9.1 Goal 对齐与状态守恒
|
|
194
|
+
|
|
195
|
+
当前 Intent 是一次 Codex goal 的可闭合单元,而不是一句“完成了”的主观声明。只有以下门同时通过,goal
|
|
196
|
+
才应完成、Intent 才能 `done`:
|
|
197
|
+
|
|
198
|
+
1. **结果**:完成契约中的本轮结果成立。
|
|
199
|
+
2. **守恒**:若启用 `continuity_required`,旧状态 → 本轮操作 → 新状态的序列证明未发生未授权丢失。
|
|
200
|
+
3. **证据**:验证可复现,且记录属于当前 revision。
|
|
201
|
+
4. **品质**:仅在存在 `quality_contract` 时,Quality Proof 证明达到所声明水准。
|
|
202
|
+
|
|
203
|
+
Codex 的 goal/status 用于驱动循环与恢复工作,不是替代上述证据的通行证。对状态型 Intent,默认语义是保留或合并;
|
|
204
|
+
删除、替换、重置和清空必须在 acceptance 中显式授权。
|
|
205
|
+
|
|
206
|
+
## 10. Reflow
|
|
207
|
+
|
|
208
|
+
| 发现 | 回流 |
|
|
209
|
+
|---|---|
|
|
210
|
+
| 长期价值或质量观缺失 | Weaver |
|
|
211
|
+
| 产品目标、非目标或 narrative 错误 | Visionary |
|
|
212
|
+
| 系统边界、依赖、契约不可成立 | Architect |
|
|
213
|
+
| 专业能力、候选或实现不足 | Forge |
|
|
214
|
+
| 证据不足、验证偏差或需人类感知 | Keeper |
|
|
215
|
+
|
|
216
|
+
回流只修改问题拥有者的权威文件,并评估受影响 Intent。不要为了让当前实现通过而降低契约。
|
|
217
|
+
|
|
218
|
+
## 11. 收敛
|
|
219
|
+
|
|
220
|
+
一趟结束时:
|
|
221
|
+
|
|
222
|
+
- 全部当前 Intent completed 且没有 `needs_review` → 收敛。
|
|
223
|
+
- 有 deviated → 修正并重验。
|
|
224
|
+
- 修改影响其他 Intent → 标记 needs_review。
|
|
225
|
+
- 三趟后仍持续产生 needs_review → 视为系统性问题,回流 Architect 或创建新版本。
|
|
226
|
+
|
|
227
|
+
## 12. 演进
|
|
228
|
+
|
|
229
|
+
- Patch 不改变 Intent 语义;验证后记录 `06_CHANGELOG.json`。
|
|
230
|
+
- Minor 使用 draft:`intent add|revise` → scoped Visionary/Architect → `intent finalize`。
|
|
231
|
+
- Major 在 Doctrine、北极星或主要架构边界变化时 `version new`。
|
|
232
|
+
- 跨版本承接通过 `lineage.predecessors` 显式声明;旧版本 passed 不转移到新版本。
|
|
233
|
+
|
|
234
|
+
## 13. 停止条件
|
|
235
|
+
|
|
236
|
+
当以下条件同时满足时停止:
|
|
237
|
+
|
|
238
|
+
- 当前目标真实完成。
|
|
239
|
+
- Reliability Floor 有可复现证据。
|
|
240
|
+
- 如声明质量提升,Distinctive Ceiling 有 Quality Proof。
|
|
241
|
+
- 没有未处理的高影响回流。
|
|
242
|
+
- 继续探索不会实质提高结果或降低风险。
|