frontend-project-context 1.3.0 → 1.6.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 (49) hide show
  1. package/CHANGELOG.md +39 -2
  2. package/README.md +94 -16
  3. package/UPGRADING.md +47 -2
  4. package/docs/04-PROGRAM-DESIGN.md +40 -4
  5. package/docs/05-ACCEPTANCE-CONTRACT.md +33 -3
  6. package/docs/08-INSTALLATION-AND-DISTRIBUTION.md +36 -6
  7. package/docs/14-FORMAL-RELEASE-READINESS.md +46 -0
  8. package/docs/18-BRANCH-AWARE-STAGED-CONTEXT-DESIGN.md +62 -2
  9. package/docs/19-POST-1.3.1-AI-TAKEOVER-EVIDENCE-AND-UPGRADE-PLAN.md +579 -0
  10. package/docs/20-PHASE-A-AI-TAKEOVER-AND-HEALTH-CLOSURE-DESIGN.md +535 -0
  11. package/docs/21-PHASE-B-EVIDENCE-FEEDBACK-PROTOCOL-DESIGN.md +347 -0
  12. package/docs/22-PHASE-C-TARGET-UPGRADE-PROTOCOL-DESIGN.md +398 -0
  13. package/docs/README.md +21 -5
  14. package/docs/USER-AND-AI-OPERATION-MANUAL.md +797 -0
  15. package/examples/README.md +38 -0
  16. package/examples/package.json +6 -2
  17. package/migration-manifest.json +88 -0
  18. package/package.json +3 -2
  19. package/schemas/action-plan.schema.json +31 -3
  20. package/schemas/capabilities.schema.json +50 -18
  21. package/schemas/evidence-bundle.schema.json +64 -0
  22. package/schemas/evidence-input.schema.json +82 -0
  23. package/schemas/migration-manifest.schema.json +29 -0
  24. package/schemas/migration-plan.schema.json +32 -0
  25. package/schemas/project-status.schema.json +75 -0
  26. package/schemas/projection-lock.schema.json +48 -0
  27. package/schemas/review-bundle.schema.json +3 -3
  28. package/schemas/upgrade-assessment.schema.json +48 -0
  29. package/schemas/upgrade-result-bundle.schema.json +35 -0
  30. package/src/project-context/ai-entry.mjs +320 -0
  31. package/src/project-context/capabilities.mjs +44 -17
  32. package/src/project-context/checker.mjs +20 -3
  33. package/src/project-context/cli.mjs +84 -7
  34. package/src/project-context/contract-schema.mjs +30 -16
  35. package/src/project-context/dashboard-model.mjs +4 -4
  36. package/src/project-context/dashboard-renderer.mjs +3 -3
  37. package/src/project-context/discovery.mjs +6 -1
  38. package/src/project-context/evidence-schema.mjs +209 -0
  39. package/src/project-context/evidence.mjs +99 -0
  40. package/src/project-context/exchange-schema.mjs +21 -11
  41. package/src/project-context/exchange.mjs +26 -4
  42. package/src/project-context/maintenance.mjs +2 -2
  43. package/src/project-context/migration-manifest.mjs +166 -0
  44. package/src/project-context/project-status.mjs +157 -0
  45. package/src/project-context/projection-store.mjs +8 -1
  46. package/src/project-context/task-context-schema.mjs +237 -1
  47. package/src/project-context/task-context.mjs +154 -13
  48. package/src/project-context/upgrade-schema.mjs +215 -0
  49. package/src/project-context/upgrade.mjs +494 -0
@@ -0,0 +1,797 @@
1
+ # Frontend Project Context 操作手册
2
+
3
+ > 适用版本:`frontend-project-context@1.3.1`
4
+ >
5
+ > 适用对象:项目维护者、开发者、使用 Codex / Claude / Cursor / 其他 Coding Agent 的团队,以及集成该 CLI 的 AI Host Agent。
6
+ >
7
+ > 文档定位:本文是从当前产品合同和已发布 CLI 行为整理出的使用手册,不是新的产品真源。如有冲突,按“产品宪法 → `PROJECT_STATE.json` → CLI `--help` 与机器 schema → 本手册”的顺序判断。
8
+
9
+ ## 1. 先理解它是什么
10
+
11
+ Frontend Project Context 是放在项目与现有 AI 编程工具之间的、模型无关的上下文治理与交换层。
12
+
13
+ 它负责:
14
+
15
+ - 把项目明确提供的文件、配置、路径和人工决定登记成可追溯来源;
16
+ - 把事实、规则、引用和验证说明收敛为唯一的 `Project Contract`;
17
+ - 按目录、文件或任务生成最小的 `Context Bundle`;
18
+ - 向 AGENTS / Markdown / Ruler 生成受管投影;
19
+ - 检测来源、合同和投影漂移;
20
+ - 把 AI 建议收敛为无权限 `Action Plan`,再生成只读 `Review Bundle`;
21
+ - 为长任务生成分阶段上下文,并校验跨窗口交接工件。
22
+
23
+ 它不负责:
24
+
25
+ - 调用任何模型 Provider;
26
+ - 充当 Agent Runtime;
27
+ - 规划、执行或自动修复真实开发任务;
28
+ - 修改业务代码;
29
+ - 管理 Git、分支、提交、合并、PR 或发布;
30
+ - 自动安装依赖、访问网络、自动批准或静默解决冲突。
31
+
32
+ 最重要的区分是:**CLI 负责“上下文治理和安全交换”,现有 Coding Agent 才负责“在人类授权下完成开发任务”。**
33
+
34
+ ## 2. 三条底层原则
35
+
36
+ ### 2.1 只有一份长期真源
37
+
38
+ `.project-context/contract.json` 是项目给 AI 的唯一已批准长期指导。生成的 `AGENTS.md`、Ruler 文件、Context Bundle、Assist Bundle、Action Plan、Review Bundle、Stage Receipt 都不是第二份真源。
39
+
40
+ ### 2.2 默认只读,写入只对当前命令生效
41
+
42
+ 所有命令默认只读。只有当前命令显式带有 `--write` 才允许持久写入。
43
+
44
+ “上次同意了”、“继续做”、“自己处理”不能自动扩张成新 ID、新路径或新 baseline 的写入权限。
45
+
46
+ ### 2.3 AI 可以准备,人必须判断
47
+
48
+ AI 可以提取事实、整理文字、去重、建议 scope/override、生成 proposal 或 Action Plan、准备精确 CLI 参数。
49
+
50
+ 人必须对以下对象作出明确决定:
51
+
52
+ - 哪些 item ID 成为长期规范;
53
+ - 是否接受某个来源的新 digest;
54
+ - 是否修订或废弃某个合同项;
55
+ - 是否写入某个明确投影路径;
56
+ - 是否执行 Review Bundle 中已展示的精确 action;
57
+ - 是否把某个任务决定升格为长期 Project Contract 内容。
58
+
59
+ ## 3. 权威、文件和提交边界
60
+
61
+ ### 3.1 项目内的权威顺序
62
+
63
+ 1. 项目产品宪法或同等最高规范;
64
+ 2. 当前项目状态与当前授权;
65
+ 3. 人工批准的 `Project Contract`;
66
+ 4. 按 scope 编译的 Context Bundle;
67
+ 5. 受管投影;
68
+ 6. 临时任务说明和对话。
69
+
70
+ 不是每个使用项目都必须拥有本仓库的 `docs/00-PRODUCT-CONSTITUTION.md` 或 `PROJECT_STATE.json`。这两个文件是 Frontend Project Context 自身的治理结构;普通接入项目应登记它自己真实存在的权威来源。
71
+
72
+ ### 3.2 应提交的文件
73
+
74
+ ```text
75
+ .project-context/
76
+ ├── contract.json
77
+ ├── sources.lock.json
78
+ └── projections.lock.json
79
+ ```
80
+
81
+ 这三个 store 应跟随项目提交。团队明确采用的受管投影也应提交。
82
+
83
+ 通常不提交:
84
+
85
+ - setup/discover/propose 产生的 proposal;
86
+ - Assist Bundle、Action Plan 和 Review Bundle;
87
+ - 临时 Context Bundle;
88
+ - Task Context Plan、Stage Context Bundle、Stage Receipt 和 Integration Review Bundle,除非团队明确将它们作为外部流程证据管理;
89
+ - dashboard HTML、缓存、tarball 和 `node_modules`。
90
+
91
+ ## 4. 安装与团队配置
92
+
93
+ ### 4.1 环境要求
94
+
95
+ - Node.js 18 或更高版本;
96
+ - 项目根目录可写;
97
+ - 首次安装时由人或外部工具明确授权依赖下载。
98
+
99
+ ### 4.2 推荐安装
100
+
101
+ 固定为项目开发依赖,使本地与 CI 使用同一版本:
102
+
103
+ ```bash
104
+ npm install --save-dev frontend-project-context@1.3.1
105
+ ```
106
+
107
+ 建议在 `package.json` 中提供稳定入口:
108
+
109
+ ```json
110
+ {
111
+ "scripts": {
112
+ "context:capabilities": "project-context capabilities --project .",
113
+ "context:setup": "project-context setup --project .",
114
+ "context:sync": "project-context sync --project .",
115
+ "context:check": "project-context check --project ."
116
+ }
117
+ }
118
+ ```
119
+
120
+ 试运行:
121
+
122
+ ```bash
123
+ npx project-context --help
124
+ npx project-context capabilities --project . --json
125
+ ```
126
+
127
+ `capabilities` 在项目未初始化时也可用,适合 AI Host 先查询当前包版本、schema、支持的 action kind 和永久边界。
128
+
129
+ ## 5. 首次接入 SOP
130
+
131
+ ### 第 1 步:只读预览初始化结果
132
+
133
+ ```bash
134
+ npx project-context setup \
135
+ --project . \
136
+ --id my-project \
137
+ --name "My Project" \
138
+ --json
139
+ ```
140
+
141
+ 首先阅读输出中的:
142
+
143
+ - `summary`:候选来源、候选 item 和问题数量;
144
+ - `workUnits`:应按哪些小单元处理;
145
+ - `readTargets`:AI 真正需要继续读的精确文件或 JSON Pointer;
146
+ - `proposal`:保守 discovery 得到的 fact/reference 候选;
147
+ - `artifacts`:使用 `--write` 时将创建的 proposal 路径和动作。
148
+
149
+ 此时项目文件应保持不变。
150
+
151
+ ### 第 2 步:明确同意创建 store 和 proposal
152
+
153
+ 确认项目 ID、名称和 proposal 路径后执行:
154
+
155
+ ```bash
156
+ npx project-context setup \
157
+ --project . \
158
+ --id my-project \
159
+ --name "My Project" \
160
+ --output .project-context/setup.proposal.json \
161
+ --write \
162
+ --json
163
+ ```
164
+
165
+ `setup --write` 只代表允许创建三个 store 和一份 create-only proposal,**不代表批准 proposal,也不代表允许生成 AGENTS/Ruler 投影**。
166
+
167
+ ### 第 3 步:AI 只按 work unit 渐进读取
168
+
169
+ AI 应:
170
+
171
+ 1. 先读 `summary`、`workUnits` 和 `readTargets`;
172
+ 2. 一次只处理一个 work unit;
173
+ 3. 只读当前 work unit 指向的文件或 Pointer;
174
+ 4. 对大文件先读目录、标题和相关段落;
175
+ 5. 需要额外来源时,先说明原因并把它列为 source 候选;
176
+ 6. 不以“代码存在”推导出“团队长期 policy”。
177
+
178
+ ### 第 4 步:补充来源和候选合同项
179
+
180
+ 支持的来源类型:
181
+
182
+ - `file`:文件内容的指纹;
183
+ - `path`:项目内路径及其文件/目录类型,不对目录全量指纹;
184
+ - `json-pointer`:JSON 文件中的精确值;
185
+ - `human-decision`:已经由人确认的决定;
186
+ - `external-reference`:URL 或外部设计系统标识,CLI 不会上网验证。
187
+
188
+ 先预览,再在对象无误后重复同一命令并加 `--write`:
189
+
190
+ ```bash
191
+ npx project-context register \
192
+ --project . \
193
+ --id source.package \
194
+ --kind file \
195
+ --path package.json
196
+ ```
197
+
198
+ 创建合同项 proposal:
199
+
200
+ ```bash
201
+ npx project-context propose \
202
+ --project . \
203
+ --id policy.ui-copy \
204
+ --kind policy \
205
+ --subject ui.visible-copy \
206
+ --value required \
207
+ --statement "使用团队已批准的界面文案规范。" \
208
+ --sources source.package \
209
+ --scope path-prefix \
210
+ --scope-path src \
211
+ --output .project-context/policy.ui-copy.proposal.json
212
+ ```
213
+
214
+ 合同项类型只有:
215
+
216
+ - `fact`:可验证的当前事实;
217
+ - `policy`:对后续任务有约束力的规则;
218
+ - `reference`:供理解或继续阅读的引用;
219
+ - `validation-description`:如何验证的说明,不是由本工具执行任务命令。
220
+
221
+ scope 只有:
222
+
223
+ - `project`:整个项目;
224
+ - `path-prefix`:指定目录及其后代;
225
+ - `file`:单个文件。
226
+
227
+ ### 第 5 步:人工集中审查
228
+
229
+ AI 必须先展示:
230
+
231
+ ```text
232
+ 自动提取事实:ID + value + source
233
+ 新增/修订规范:current → proposed + source + scope
234
+ 来源变化:old/new digest + 完整 affected item IDs
235
+ 废弃项:ID + 依赖 + fallback
236
+ 投影:将创建或更新的精确路径
237
+ 阻断项:conflict / missing / unreadable / ownership / stale baseline
238
+ ```
239
+
240
+ 用户可以用自然语言确认,但必须让对象与范围唯一。例如:
241
+
242
+ ```text
243
+ 批准 item policy.ui-copy,批准人记录为 fushan。
244
+ 同意接受 source.package 的当前 digest,受影响项仅为 fact.node-version 和 validation.check。
245
+ 同意生成 src/AGENTS.md,作用域仅为 src。
246
+ ```
247
+
248
+ 以下语句不应被 AI 解读成新的持久写入权限:
249
+
250
+ ```text
251
+ 看一下。
252
+ 分析一下。
253
+ 按之前的办。
254
+ 继续。
255
+ 应该没问题。
256
+ ```
257
+
258
+ ### 第 6 步:批准精确 ID
259
+
260
+ ```bash
261
+ npx project-context approve \
262
+ --project . \
263
+ --proposal .project-context/policy.ui-copy.proposal.json \
264
+ --ids policy.ui-copy \
265
+ --by YOUR_NAME
266
+ ```
267
+
268
+ 先看 preview,确认无误后才加 `--write`。一份 proposal 中未被 `--ids` 点名的 item 不会自动获得批准。
269
+
270
+ ### 第 7 步:生成上下文和投影
271
+
272
+ 为目标路径生成临时上下文:
273
+
274
+ ```bash
275
+ npx project-context context \
276
+ --project . \
277
+ --path src \
278
+ --locale zh-CN
279
+ ```
280
+
281
+ 生成 AGENTS 投影:
282
+
283
+ ```bash
284
+ npx project-context publish \
285
+ --project . \
286
+ --target agents \
287
+ --output src/AGENTS.md \
288
+ --path src
289
+ ```
290
+
291
+ 或生成 Ruler 投影:
292
+
293
+ ```bash
294
+ npx project-context publish \
295
+ --project . \
296
+ --target ruler \
297
+ --output .ruler/project-context.md \
298
+ --path src
299
+ ```
300
+
301
+ 同样先预览,然后在人确认精确路径后加 `--write`。
302
+
303
+ 如果根 `AGENTS.md` 由人工或其他工具管理,不要覆盖。可以改为在无冲突的子目录生成受管 `AGENTS.md`,或使用 `.ruler/` 投影。
304
+
305
+ ### 第 8 步:检查并提交
306
+
307
+ ```bash
308
+ npx project-context check --project .
309
+ ```
310
+
311
+ `check` clean 后,提交三个 store 和团队明确采用的受管投影。proposal 通常不提交。
312
+
313
+ ## 6. 日常开发中怎样给 AI 最小上下文
314
+
315
+ 一般任务不需要重新扫描整个仓库。先根据任务的真实修改目标生成 Context Bundle:
316
+
317
+ ```bash
318
+ npx project-context context \
319
+ --project . \
320
+ --path src/features/order \
321
+ --path src/shared/request.ts \
322
+ --task "修复订单详情中的重复请求,不改变其他页面行为。" \
323
+ --locale zh-CN
324
+ ```
325
+
326
+ `--task` 是当次临时约束,只会进入这份 bundle,不会写回 Contract,也不会扩大开发权限。
327
+
328
+ 推荐把下面四类信息一起给外部 Coding Agent:
329
+
330
+ 1. 当次任务目标和验收标准;
331
+ 2. 实际修改路径;
332
+ 3. `context` 生成的 bundle;
333
+ 4. 本次单独授予的开发、测试、Git 或网络边界。
334
+
335
+ 完成业务修改后,由外部 Agent、IDE 或 CI 把真实 changed paths 传给 `sync`:
336
+
337
+ ```bash
338
+ npx project-context sync \
339
+ --project . \
340
+ --changed-path src/features/order/detail.ts \
341
+ --changed-path src/shared/request.ts \
342
+ --json
343
+ ```
344
+
345
+ `sync` 不读 Git,所以 `--changed-path` 必须由宿主显式提供。它不会把 changed path 自动登记为 source。
346
+
347
+ ## 7. 规则和来源变化后的维护 SOP
348
+
349
+ 标准闭环:
350
+
351
+ ```text
352
+ check / sync
353
+ → 只读审查变化与完整影响集
354
+ → 人选择接受来源变化、修订或废弃 item
355
+ → 受影响 item 进入 proposed/pending
356
+ → 人重新批准精确 ID
357
+ → 重新发布受管投影
358
+ → check clean
359
+ ```
360
+
361
+ ### 7.1 先一次汇总变化
362
+
363
+ ```bash
364
+ npx project-context sync --project . --json
365
+ ```
366
+
367
+ AI 应先交付变化清单,不应直接写入:
368
+
369
+ - 哪些 source 是 `changed / missing / unreadable`;
370
+ - 每个 source 的 locked/current digest;
371
+ - 完整 affected item IDs,以及 direct/verification/override 原因;
372
+ - fallback item 和受影响投影;
373
+ - pending item、ownership conflict 和其他 blocker;
374
+ - 需要人判断的唯一问题。
375
+
376
+ ### 7.2 精确审查单个来源
377
+
378
+ ```bash
379
+ npx project-context review-source \
380
+ --project . \
381
+ --id source.package \
382
+ --json
383
+ ```
384
+
385
+ ### 7.3 接受来源新 digest
386
+
387
+ 只有人确认 new digest 和完整 affected item IDs 后,才预览:
388
+
389
+ ```bash
390
+ npx project-context accept-source-change \
391
+ --project . \
392
+ --id source.package \
393
+ --expected-digest sha256:NEW_DIGEST \
394
+ --affected-items fact.node-version validation.check
395
+ ```
396
+
397
+ 预览无误后加 `--write`。该操作接受新的 source checkpoint,并撤销受影响 item 的原批准;它不会自动判定规则仍然正确。
398
+
399
+ ### 7.4 修订、废弃或重新批准
400
+
401
+ 修订前必须使用当前 item digest:
402
+
403
+ ```bash
404
+ npx project-context revise \
405
+ --project . \
406
+ --id policy.ui-copy \
407
+ --expected-item-digest sha256:CURRENT_ITEM_DIGEST \
408
+ --kind policy \
409
+ --subject ui.visible-copy \
410
+ --value required \
411
+ --statement "使用新版团队界面文案规范。" \
412
+ --sources source.ui-guide \
413
+ --scope path-prefix \
414
+ --scope-path src
415
+ ```
416
+
417
+ 废弃 item:
418
+
419
+ ```bash
420
+ npx project-context deprecate \
421
+ --project . \
422
+ --id policy.ui-copy \
423
+ --expected-item-digest sha256:CURRENT_ITEM_DIGEST \
424
+ --by YOUR_NAME \
425
+ --rationale "该规范已被新规范替代"
426
+ ```
427
+
428
+ 重新批准 pending item:
429
+
430
+ ```bash
431
+ npx project-context approve \
432
+ --project . \
433
+ --pending \
434
+ --ids fact.node-version validation.check \
435
+ --by YOUR_NAME \
436
+ --rationale "已对照新来源复核"
437
+ ```
438
+
439
+ 上述写命令都应先 preview,再针对当前命令加 `--write`。
440
+
441
+ ### 7.5 来源被删除或已永久退役
442
+
443
+ 1. 先 `sync` / `review-source` 确认是 missing 还是真的永久退役;
444
+ 2. 先修订或废弃所有仍引用该 source 的 item;
445
+ 3. 只有 source 无活跃引用时才执行 `deprecate-source`;
446
+ 4. 记录精确 source digest、执行人和 rationale;
447
+ 5. 重新 `check`。
448
+
449
+ 不要因为文件暂时不可读就自动退役来源。
450
+
451
+ ### 7.6 失败恢复
452
+
453
+ 任何 accept/revise/deprecate/approve/publish 失败后:
454
+
455
+ 1. 立即停止后续写入;
456
+ 2. 重新加载项目;
457
+ 3. 重新运行 `sync`;
458
+ 4. 基于新 snapshot/baseline 重做审查;
459
+ 5. 不重放旧计划,不盲目回滚已成功的显式授权动作。
460
+
461
+ ## 8. AI Action Plan 与 Review Bundle SOP
462
+
463
+ 当外部 AI 需要准备多个治理动作时,优先使用机器协议,而不是让 AI 拼接一段自由 shell。
464
+
465
+ ### 8.1 查询协议能力
466
+
467
+ ```bash
468
+ npx project-context capabilities --project . --json
469
+ ```
470
+
471
+ `1.3.1` 支持八类 Action Plan action:
472
+
473
+ - `register-source`;
474
+ - `propose-item`;
475
+ - `accept-source-change`;
476
+ - `revise-item`;
477
+ - `deprecate-item`;
478
+ - `deprecate-source`;
479
+ - `request-item-approval`;
480
+ - `publish-projection`。
481
+
482
+ ### 8.2 AI 生成无权限 Action Plan
483
+
484
+ AI 必须使用 `schemas/action-plan.schema.json`,从最新 `setup` / `sync` Assist Bundle 取得三个当前项目 snapshot,并为每个 action 保留稳定 ID、完整输入和 action-specific baseline。`capabilities` 只用来确认当前 schema 版本、action kind 和边界,不提供项目 snapshot。
485
+
486
+ Action Plan 中不得包含 Provider 调用、shell、Git、业务代码写入、自动批准或权限提升字段。
487
+
488
+ ### 8.3 只读预检
489
+
490
+ ```bash
491
+ npx project-context preflight \
492
+ --project . \
493
+ --plan .project-context/action-plan.json \
494
+ --json
495
+ ```
496
+
497
+ `preflight` 会验证:
498
+
499
+ - project ID;
500
+ - Contract / source lock / projection lock 三个 snapshot digest;
501
+ - action 自己的 item/source/projection baseline;
502
+ - 精确影响集和 blocker;
503
+ - 投影路径与 ownership;
504
+ - schema 与未知字段。
505
+
506
+ 输出的 structured invocation 不包含 `--write` 或 `--by`,因此不是可直接执行的批准。
507
+
508
+ ### 8.4 人的集中审查
509
+
510
+ AI 至少展示:
511
+
512
+ - Review Bundle 的 snapshot/baseline;
513
+ - 每个 action ID 和 kind;
514
+ - current → proposed;
515
+ - source、item、scope、path 和 projection impact;
516
+ - blocker 和失败封闭结果;
517
+ - 将要执行的结构化 command/args。
518
+
519
+ 人只批准已展示的精确 action ID 和路径。宿主才可以为对应的现有细粒度命令补充 `--by` 和 `--write`。
520
+
521
+ 任何一个写入成功或并发状态变化后,剩余 Review Bundle 默认过期。必须重新 `sync` 和 `preflight`,不得继续重放旧 invocation。
522
+
523
+ ## 9. 多阶段、跨窗口任务 SOP
524
+
525
+ 只在任务确实较长、需要分阶段、换窗口/模型/同事继续,或需要合并前上下文审查时使用。普通单步任务直接使用 `context` 即可。
526
+
527
+ ### 9.1 外部 Host 准备 Task Context Plan
528
+
529
+ Task Context Plan 必须符合 `schemas/task-context-plan.schema.json`,其中明确:
530
+
531
+ - project/task identity;
532
+ - goal 与可验收条件;
533
+ - 宿主提供的 branch label 和 base revision label;
534
+ - 当前三个 project snapshots;
535
+ - 用规范 UTF-8 字节和 read-target 数表达的预算;
536
+ - 每个 stage 的 objective、dependsOn、paths 和 acceptance IDs。
537
+
538
+ Plan 是宿主提供的外部任务工件,不是 Contract,不授予执行权限。
539
+
540
+ ### 9.2 只编译当前显式指定的 stage
541
+
542
+ 首阶段:
543
+
544
+ ```bash
545
+ npx project-context stage-context \
546
+ --project . \
547
+ --plan task-context-plan.json \
548
+ --stage stage-understand \
549
+ --changed-path src/features/order \
550
+ --json
551
+ ```
552
+
553
+ 后续阶段:
554
+
555
+ ```bash
556
+ npx project-context stage-context \
557
+ --project . \
558
+ --plan task-context-plan.json \
559
+ --stage stage-render \
560
+ --receipt stage-understand.receipt.json \
561
+ --receipt-bundle stage-understand.bundle.json \
562
+ --changed-path src/features/order/detail.ts \
563
+ --json
564
+ ```
565
+
566
+ CLI 只读验证并编译 bundle,不会读取目标源码正文、Git diff,也不执行开发任务或测试。AI 再按 bundle 的 `readTargets` 渐进读取。
567
+
568
+ ### 9.3 每个 Receipt 必须与其输入 Bundle 成对保留
569
+
570
+ Stage Receipt 必须符合 `schemas/stage-receipt.schema.json`,并绑定:
571
+
572
+ - project/task/stage;
573
+ - plan digest;
574
+ - 生成该 receipt 时使用的 Stage Context Bundle digest;
575
+ - completed/blocked 状态;
576
+ - changed paths、acceptance results、verification results、decisions 和 open issues。
577
+
578
+ Receipt 不代表人已验收功能,不代表 Contract approval,也不能自动解锁下一阶段。
579
+
580
+ 从 `1.3.1` 开始,每个 `--receipt` 必须恰好有一个对应的 `--receipt-bundle`。必须把整条依赖链所需的 receipt/bundle 成对传入。缺失、重复、错配、篡改、过期 baseline、blocked bundle 或不完整传递依赖都必须 blocked。
581
+
582
+ 换窗口时不需要复制整段聊天历史,只需交接:
583
+
584
+ ```text
585
+ Task Context Plan
586
+ + 当前 stage ID
587
+ + 所有有效上游 Stage Receipts
588
+ + 与每份 Receipt 一一对应的 Stage Context Bundles
589
+ + 显式 changed paths
590
+ ```
591
+
592
+ ### 9.4 合并前只读审查
593
+
594
+ ```bash
595
+ npx project-context integration-review \
596
+ --project . \
597
+ --plan task-context-plan.json \
598
+ --receipt stage-understand.receipt.json \
599
+ --receipt-bundle stage-understand.bundle.json \
600
+ --main-changed-path src/shared/request.ts \
601
+ --branch-changed-path src/features/order/detail.ts \
602
+ --json
603
+ ```
604
+
605
+ `integration-review` 只报告上下文层可验证事实,不执行 merge,也不判定 Git 文本冲突、测试是否通过或业务功能是否正确。
606
+
607
+ 任务结束后,只有对未来任务仍然有效的长期事实或规则,才可经 `propose → approve` 进入 Contract。不要把完整聊天、diff、测试日志或所有 receipt 写进长期合同。
608
+
609
+ ## 10. Dashboard 与 CI
610
+
611
+ ### 10.1 本地只读看板
612
+
613
+ ```bash
614
+ npx project-context dashboard --project . > project-context-dashboard.html
615
+ ```
616
+
617
+ Dashboard 是 stdout 生成的自包含离线 HTML,不会自动打开浏览器,不会修改 Contract。HTML 通常不提交。
618
+
619
+ ### 10.2 CI 只读 Gate
620
+
621
+ 最小 CI 使用:
622
+
623
+ ```bash
624
+ npm run context:check
625
+ ```
626
+
627
+ 可参考 `examples/project-context-check.yml`。CI 可以自己从 Git/PR 平台取得 changed paths,并传给 `sync --json`,但不应在 CI 中自动 accept、approve、revise、deprecate 或 publish。
628
+
629
+ ## 11. AI 协作注意点
630
+
631
+ ### 11.1 AI 应该做
632
+
633
+ - 先用 `capabilities`、`context`、`setup`、`sync`、`preflight` 等只读入口建立当前事实;
634
+ - 按 `workUnits` 和 `readTargets` 渐进读取,避免默认加载全仓库;
635
+ - 区分“源文件中的明确事实”和“AI 自己的推断”;
636
+ - 保留 source ID、item ID、scope、provenance、digest 和 baseline;
637
+ - 用 current → proposed 呈现修订;
638
+ - 将真正需要人决定的问题集中询问;
639
+ - 把写入前的精确 ID、路径、影响集、baseline 和命令完整展示给人;
640
+ - 失败后重新 sync/preflight,不重放旧计划;
641
+ - 用户只需自然表达事实,AI 负责结构化、润色、关联来源和准备 proposal。
642
+
643
+ ### 11.2 AI 不应该做
644
+
645
+ - 未经人确认就执行带 `--write` 的命令;
646
+ - 自行填写人的身份并冒充批准者;
647
+ - 把 proposal、AI 回答、Review Bundle 或 receipt 当成已批准规范;
648
+ - 未展示 exact ID/source/scope/value/impact/baseline 就请求笼统授权;
649
+ - 自动接受 source digest、自动重批、静默解决冲突或覆盖 ownership 变化;
650
+ - 因为文件名、技术栈或单个项目不同就擅自扩大产品内核;
651
+ - 把临时任务限制写回长期 Contract;
652
+ - 把源码、全量 Contract、长聊天、AI 推理、confidence 或无关摘要塞入 Assist Bundle;
653
+ - 把 Frontend Project Context 的“无 Git/无网络/无业务代码写入”边界,误解为外部 Coding Agent 自动获得这些权限。外部 Agent 仍需按当次任务另行获得授权。
654
+
655
+ ### 11.3 单次人工审查清单
656
+
657
+ 在回复“同意”之前,人应能回答:
658
+
659
+ - [ ] 我看到了所有将被影响的 source/item ID 吗?
660
+ - [ ] 我看到了 current 和 proposed 的差异吗?
661
+ - [ ] 我知道规则将在 project/path-prefix/file 哪个 scope 生效吗?
662
+ - [ ] 我看到了完整 affected IDs、fallback 和 projection paths 吗?
663
+ - [ ] 我看到的 digest/baseline 还是当前的吗?
664
+ - [ ] 这次授权只覆盖已展示的 action 和路径吗?
665
+ - [ ] 命令中是否只有需要持久化的那一步带 `--write` ?
666
+
667
+ ## 12. 常见问题与处理
668
+
669
+ | 现象 | 原因 | 处理 |
670
+ | --- | --- | --- |
671
+ | 命令显示了结果但文件没变 | 没有 `--write`,只做了 preview | 审查预览后,对同一条命令显式加 `--write` |
672
+ | `source-changed` | 来源内容与上次人工确认 digest 不同 | `sync` → `review-source` → 人确认 → `accept-source-change` → revise/deprecate/reapprove |
673
+ | `source-missing` | 已登记本地来源不存在 | 先判断是移动、暂时缺失还是永久退役;不自动修复 |
674
+ | `projection-ownership-conflict` | 受管投影被人或其他工具修改,或目标本就不属于本工具 | 保留现有文件,人判断合并、换路径或重新建立 ownership;不强制覆盖 |
675
+ | proposal 没有生效 | proposal 仍是 `proposed` | 人审查并用 `approve --ids ... --by ... --write` 批准 |
676
+ | `baseline` / `snapshot` stale | 预检后又发生了写入或并发变化 | 停止旧计划,重新 `sync` / `capabilities` / `preflight` |
677
+ | setup 报 partial state | 三个 store 只存在一部分 | 人工盘点现状,不让工具猜测修复或覆盖 |
678
+ | context/publish 被 conflict 阻断 | scope/override/source/verification 存在不可安全解释的冲突 | 回到 source/item 审查,由人选择 revise/deprecate/override |
679
+ | `largeImpact: true` | 单一来源影响超过 100 个 item | 按 work unit 分批审查;不要假设 AI 已读完所有内容 |
680
+ | receipt/bundle missing、duplicate、mismatch、stale 或 invalid | 跨阶段工件未一一绑定,被篡改或 baseline 过期 | 找回产生 receipt 时的原 bundle,补齐完整依赖链;无法证明时重新编译阶段 |
681
+
682
+ 常用退出码:
683
+
684
+ - `0`:命令成功,对 `check/sync` 通常表示无需处理的 finding;
685
+ - `1`:存在漂移、pending、普通阻断项或需审查状态;
686
+ - `2`:参数、schema、路径或项目状态无效;
687
+ - `3`:受管投影 ownership conflict;
688
+ - `4`:意外内部错误。
689
+
690
+ 对自动化来说,不要只看 stdout 文本;应同时看退出码和 JSON 中的结构化 status/findings。
691
+
692
+ ## 13. 可直接复制的 AI 协作模板
693
+
694
+ ### 13.1 首次接入
695
+
696
+ ```text
697
+ 为当前项目接入 Frontend Project Context。
698
+
699
+ 1. 先运行 capabilities 和 setup 只读预览,不加 --write。
700
+ 2. 先只汇报 summary、workUnits、readTargets、proposal 工件路径和 blocker。
701
+ 3. 按 work unit 渐进读取,不默认扫描全仓库。
702
+ 4. 将候选分为 fact / policy / reference / validation-description,展示 ID、value、source、scope 和判断依据。
703
+ 5. 不批准、不接受 digest、不发布投影,等我对精确 ID 和路径确认。
704
+ 6. 确认后只执行已展示的对应命令,任何 baseline 变化就停止并重新 sync。
705
+ ```
706
+
707
+ ### 13.2 日常开发任务
708
+
709
+ ```text
710
+ 任务:<目标>
711
+ 验收:<可验证的完成条件>
712
+ 预计路径:<目录或文件>
713
+
714
+ 先用 project-context context 为这些路径生成最小上下文,不扫描无关区域。
715
+ 将 Project Contract 要求、临时任务约束和你自己的推断分开陈述。
716
+ 完成任务后,用实际 changed paths 运行 sync --json,汇报是否影响长期合同或投影。
717
+ 不把当次任务结论自动写入 Contract。
718
+ ```
719
+
720
+ ### 13.3 来源漂移维护
721
+
722
+ ```text
723
+ 检查当前 Project Contract 健康状态。
724
+
725
+ 1. 先运行 sync --json,保持只读。
726
+ 2. 按 source 分组展示 locked/current digest、完整 affected item IDs、fallback、projection paths 和 blocker。
727
+ 3. 对每个 item 说明建议是保留、修订还是废弃,但不要自动决定。
728
+ 4. 把所有写入动作按 current → proposed 集中展示,等我对精确 source/item ID 和路径确认。
729
+ 5. 任何一步失败或 snapshot 变化,停止剩余写入并重新 sync,不重放旧计划。
730
+ ```
731
+
732
+ ### 13.4 跨窗口交接
733
+
734
+ ```text
735
+ 使用已提供的 Task Context Plan、当前 stage ID、全部上游 Stage Receipts、与每份 Receipt 对应的 Stage Context Bundles,以及显式 changed paths 恢复任务。
736
+
737
+ 先运行 stage-context 只读校验。
738
+ 如果任何 receipt/bundle 缺失、重复、错配、篡改、过期或 blocked,立即停止,不根据聊天历史猜测补全。
739
+ 只编译显式指定的当前 stage,再按 readTargets 渐进读取。
740
+ Receipt 只记录阶段证据,不代表人已验收、合并或批准长期规范。
741
+ ```
742
+
743
+ ## 14. 最小日常检查清单
744
+
745
+ 开始任务前:
746
+
747
+ - [ ] 当前使用的 CLI 版本是团队固定版本;
748
+ - [ ] 任务目标、验收条件和修改路径已明确;
749
+ - [ ] 已用 `context` 生成与路径匹配的最小上下文;
750
+ - [ ] 已明确外部 Coding Agent 本次可以做哪些写入和外部操作。
751
+
752
+ 规则写入前:
753
+
754
+ - [ ] AI 已展示 exact ID、source、scope、value、impact 和 baseline;
755
+ - [ ] 用户只批准了已展示的精确对象;
756
+ - [ ] 已先运行 preview 或 `preflight`;
757
+ - [ ] 没有把历史授权扩张到新对象;
758
+ - [ ] 并发变化后已经重新 sync/preflight。
759
+
760
+ 任务结束后:
761
+
762
+ - [ ] 已把真实 changed paths 传给 `sync`;
763
+ - [ ] 已运行 `check`;
764
+ - [ ] 只把长期有效的新决定提案到 Contract;
765
+ - [ ] 已提交三个 store 和选定的受管投影;
766
+ - [ ] 没有把临时 proposal/bundle/dashboard/聊天历史当成长期真源。
767
+
768
+ ## 15. 命令速查
769
+
770
+ | 命令 | 用途 | 是否可写 |
771
+ | --- | --- | --- |
772
+ | `capabilities` | 查询版本、schema、action kind 和永久边界 | 否 |
773
+ | `setup` | 聚合安全初始化、保守 discovery 和 Assist Bundle | 仅显式 `--write` |
774
+ | `init` | 创建空的三个 store | 仅显式 `--write` |
775
+ | `discover` | 保守生成首次候选 | 仅保存 proposal 时 `--write` |
776
+ | `register` | 登记明确来源 | 仅显式 `--write` |
777
+ | `propose` | 创建待审的合同项 | 仅保存 proposal 时 `--write` |
778
+ | `approve` | 批准 proposal 或 pending 中的精确 ID | 仅显式 `--write` |
779
+ | `context` | 按路径/任务编译最小上下文 | 否 |
780
+ | `publish` | 生成受管 AGENTS 或 Ruler 投影 | 仅显式 `--write` |
781
+ | `check` | 检测来源、合同和投影漂移 | 否 |
782
+ | `sync` | 聚合变化、影响集、路径信号和维护工作单元 | 否 |
783
+ | `review-source` | 查看单个来源变化与影响集 | 否 |
784
+ | `accept-source-change` | 接受来源新 checkpoint 并撤销受影响批准 | 仅显式 `--write` |
785
+ | `revise` | 以同 ID 修订合同项 | 仅显式 `--write` |
786
+ | `deprecate` | 废弃合同项并保留审计信息 | 仅显式 `--write` |
787
+ | `deprecate-source` | 退役已无活跃引用的来源 | 仅显式 `--write` |
788
+ | `preflight` | 验证 Action Plan 并生成只读 Review Bundle | 否 |
789
+ | `stage-context` | 只编译指定 stage,严格验证 receipt/bundle 链 | 否 |
790
+ | `integration-review` | 合并前审查路径信号、snapshot 和阶段证据 | 否 |
791
+ | `dashboard` | 输出只读治理看板 | 否 |
792
+
793
+ 完整且以当前安装版本为准的语法,始终通过以下命令查看:
794
+
795
+ ```bash
796
+ npx project-context --help
797
+ ```