frontend-project-context 1.3.1 → 1.7.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/CHANGELOG.md +51 -2
- package/README.md +156 -40
- package/UPGRADING.md +55 -1
- package/docs/04-PROGRAM-DESIGN.md +34 -4
- package/docs/05-ACCEPTANCE-CONTRACT.md +40 -3
- package/docs/08-INSTALLATION-AND-DISTRIBUTION.md +67 -22
- package/docs/14-FORMAL-RELEASE-READINESS.md +30 -1
- package/docs/18-BRANCH-AWARE-STAGED-CONTEXT-DESIGN.md +2 -2
- package/docs/19-POST-1.3.1-AI-TAKEOVER-EVIDENCE-AND-UPGRADE-PLAN.md +579 -0
- package/docs/20-PHASE-A-AI-TAKEOVER-AND-HEALTH-CLOSURE-DESIGN.md +535 -0
- package/docs/21-PHASE-B-EVIDENCE-FEEDBACK-PROTOCOL-DESIGN.md +347 -0
- package/docs/22-PHASE-C-TARGET-UPGRADE-PROTOCOL-DESIGN.md +398 -0
- package/docs/23-ADAPTIVE-BOUNDED-TASK-CONTEXT-DESIGN.md +432 -0
- package/docs/24-A130-REAL-HOST-TARGET-PROJECT-COMPARISON.md +210 -0
- package/docs/25-REAL-PROJECT-SOURCE-OF-TRUTH-MAINTENANCE-DESIGN.md +409 -0
- package/docs/26-A130-QUALITY-CLOSURE-AND-ADAPTIVE-DELIVERY-REPAIR-DESIGN.md +609 -0
- package/docs/README.md +38 -6
- package/docs/USER-AND-AI-OPERATION-MANUAL.md +840 -0
- package/examples/README.md +29 -2
- package/examples/package.json +6 -2
- package/migration-manifest.json +110 -0
- package/package.json +3 -2
- package/schemas/action-plan.schema.json +31 -3
- package/schemas/adaptive-context-bundle.schema.json +70 -0
- package/schemas/capabilities.schema.json +64 -18
- package/schemas/context-query.schema.json +69 -0
- package/schemas/coverage-audit.schema.json +32 -0
- package/schemas/evidence-bundle.schema.json +64 -0
- package/schemas/evidence-input.schema.json +82 -0
- package/schemas/host-promotion-evidence.schema.json +33 -0
- package/schemas/migration-manifest.schema.json +29 -0
- package/schemas/migration-plan.schema.json +32 -0
- package/schemas/project-status.schema.json +75 -0
- package/schemas/projection-lock.schema.json +48 -0
- package/schemas/review-bundle.schema.json +3 -3
- package/schemas/routing-index.schema.json +58 -0
- package/schemas/truth-reconciliation-input.schema.json +60 -0
- package/schemas/truth-reconciliation-review-bundle.schema.json +155 -0
- package/schemas/upgrade-assessment.schema.json +48 -0
- package/schemas/upgrade-result-bundle.schema.json +35 -0
- package/src/project-context/a130-evaluation.mjs +91 -0
- package/src/project-context/adaptive-context-schema.mjs +392 -0
- package/src/project-context/adaptive-context.mjs +547 -0
- package/src/project-context/ai-entry.mjs +320 -0
- package/src/project-context/assist.mjs +4 -2
- package/src/project-context/capabilities.mjs +62 -17
- package/src/project-context/checker.mjs +24 -6
- package/src/project-context/cli.mjs +113 -3
- package/src/project-context/contract-schema.mjs +30 -16
- package/src/project-context/dashboard-model.mjs +4 -4
- package/src/project-context/dashboard-renderer.mjs +3 -3
- package/src/project-context/discovery.mjs +13 -8
- package/src/project-context/evidence-schema.mjs +209 -0
- package/src/project-context/evidence.mjs +99 -0
- package/src/project-context/exchange-schema.mjs +23 -12
- package/src/project-context/exchange.mjs +26 -4
- package/src/project-context/maintenance.mjs +4 -4
- package/src/project-context/migration-manifest.mjs +168 -0
- package/src/project-context/project-status.mjs +157 -0
- package/src/project-context/projection-store.mjs +8 -1
- package/src/project-context/renderer.mjs +75 -1
- package/src/project-context/source-reader.mjs +63 -30
- package/src/project-context/task-context.mjs +14 -2
- package/src/project-context/truth-reconciliation-schema.mjs +488 -0
- package/src/project-context/truth-reconciliation.mjs +543 -0
- package/src/project-context/upgrade-schema.mjs +219 -0
- package/src/project-context/upgrade.mjs +494 -0
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
# 20 — `1.4.0` AI Takeover & Health Closure 详细设计
|
|
2
|
+
|
|
3
|
+
> 权威说明:本文是 [19-POST-1.3.1-AI-TAKEOVER-EVIDENCE-AND-UPGRADE-PLAN.md](./19-POST-1.3.1-AI-TAKEOVER-EVIDENCE-AND-UPGRADE-PLAN.md) Phase A 与最小 Phase D 的冻结实现合同。如与 [00-PRODUCT-CONSTITUTION.md](./00-PRODUCT-CONSTITUTION.md) 冲突,以产品宪法为准。
|
|
4
|
+
>
|
|
5
|
+
> 状态:`frozen-design; implemented-local-verified; release-not-authorized`
|
|
6
|
+
>
|
|
7
|
+
> 目标版本:`frontend-project-context@1.4.0`
|
|
8
|
+
>
|
|
9
|
+
> 基线:`frontend-project-context@1.3.1`,A-01 至 A-76、B0-01/B0-02、CLI、schema 和发布工件共 82 项通过。
|
|
10
|
+
|
|
11
|
+
## 1. 唯一交付目标
|
|
12
|
+
|
|
13
|
+
`1.4.0` 只解决一条主链:
|
|
14
|
+
|
|
15
|
+
> 项目完成一次明确接入后,任何不继承历史对话的新 Host Agent 都能从项目入口发现 Frontend Project Context,确定性识别当前状态,完成本轮已授权工作,并在结束前将上下文治理恢复为 clean。
|
|
16
|
+
|
|
17
|
+
本阶段不试图让工具自己运行 AI。“AI 接管”的确切含义是:
|
|
18
|
+
|
|
19
|
+
- 工具提供稳定入口、状态和无权计划;
|
|
20
|
+
- Codex、Claude 或其他 Host Agent 按公开协议准备与执行;
|
|
21
|
+
- 人类只确认长期真源、冲突和精确外部影响;
|
|
22
|
+
- 没有任何 Provider、Agent loop、Git、网络、包安装、业务代码或测试执行进入产品内核。
|
|
23
|
+
|
|
24
|
+
## 2. 当前缺口
|
|
25
|
+
|
|
26
|
+
### 2.1 `capabilities` 只能表达初始化状态
|
|
27
|
+
|
|
28
|
+
`1.3.1` 的 `capabilities` 已能在三份 store 不存在、完整或 partial 时返回 `uninitialized | initialized | partial`,但它不聚合:
|
|
29
|
+
|
|
30
|
+
- source drift、pending item 和 verification finding;
|
|
31
|
+
- projection stale/diverged/ownership conflict;
|
|
32
|
+
- AI Entry 是否存在、可信和当前;
|
|
33
|
+
- Host Agent 下一步应调用 setup 还是 sync。
|
|
34
|
+
|
|
35
|
+
新窗口因此仍要自己猜测调用链。
|
|
36
|
+
|
|
37
|
+
### 2.2 现有 `agents` projection 拥有整个文件
|
|
38
|
+
|
|
39
|
+
`1.3.1` 只能创建一份完整的受管 `AGENTS.md`。如目标文件已存在且不属于工具,`publish` 正确地报 `managed-file-ownership-conflict`。这保护了人工内容,但也意味着工具无法在根 `AGENTS.md` 中放入一个最小接管路由。
|
|
40
|
+
|
|
41
|
+
### 2.3 安装和 `setup` 都不是跨窗口发现机制
|
|
42
|
+
|
|
43
|
+
npm 依赖不会主动告诉 Host Agent 要运行它。`setup` 的 Assist Bundle 也只对当前调用者可见。如果没有落在项目入口中的稳定路由,完全新的窗口没有可靠的启动信号。
|
|
44
|
+
|
|
45
|
+
## 3. 产品决策
|
|
46
|
+
|
|
47
|
+
`1.4.0` 新增三项公共能力:
|
|
48
|
+
|
|
49
|
+
1. 只读 `status`:在 uninitialized、partial、invalid 和 initialized 项目上统一返回机器状态。
|
|
50
|
+
2. 区域型 AI Entry:可以安全插入已有根 `AGENTS.md`,只拥有标记内容,允许人继续维护区域外文本。
|
|
51
|
+
3. Host Agent Takeover 协议:将 `status → setup/sync → review → authorized writes → check clean` 固定为入口内的短指导和可验收适配合同。
|
|
52
|
+
|
|
53
|
+
同时新增一个最小升级兼容切片:由于区域所有权不能用现有 projection lock schema 1 安全表达,`1.4.0` 读取 schema 1/2,仅在首次写 AI Entry 时将 projection lock 延迟写为 schema 2,并随包提供机器可读的迁移清单。
|
|
54
|
+
|
|
55
|
+
完整 `upgrade check/plan/apply`、Evidence Bundle 和多宿主适配器不在本阶段。
|
|
56
|
+
|
|
57
|
+
## 4. 稳定 CLI 合同
|
|
58
|
+
|
|
59
|
+
### 4.1 `status`
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
project-context status --project PATH [--json]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
固定边界:
|
|
66
|
+
|
|
67
|
+
- 永远只读,拒绝 `--write`、`--by`、`--output`、`--id`、`--name` 和 changed-path 参数;
|
|
68
|
+
- 不需要项目 ID/name;
|
|
69
|
+
- 必须在三份 store 都不存在或只存在部分时返回结构化结果;
|
|
70
|
+
- initialized 时只复用 loader、`checkProject`、Assist work-unit 的统计 helper 和 AI Entry checker,不建第二套状态逻辑;
|
|
71
|
+
- 不内嵌 source body、完整 Contract、item value/statement、项目源码或 AI 摘要;
|
|
72
|
+
- 不执行 Git、项目测试或包版本查询。
|
|
73
|
+
|
|
74
|
+
#### 退出码
|
|
75
|
+
|
|
76
|
+
| 退出码 | 含义 |
|
|
77
|
+
| --- | --- |
|
|
78
|
+
| `0` | initialized 且 context health clean,AI Entry 为 managed/current |
|
|
79
|
+
| `1` | uninitialized,或 initialized 但有普通 attention/pending/stale finding |
|
|
80
|
+
| `2` | partial、store/schema invalid 或输入无效 |
|
|
81
|
+
| `3` | AI Entry/projection ownership conflict |
|
|
82
|
+
| `4` | 未预期内部失败 |
|
|
83
|
+
|
|
84
|
+
AI Entry 缺失在 initialized 项目上是 `attention`,不是真源阻断;因为项目可以明确选择其他 Host Adapter。
|
|
85
|
+
|
|
86
|
+
### 4.2 `publish-entry`
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
project-context publish-entry --project PATH --output AGENTS.md [--write] [--json]
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
- 必须在已完整初始化项目上运行;partial/invalid 拒绝。
|
|
93
|
+
- `--output` 必须是项目内名为 `AGENTS.md` 的相对路径;本阶段默认与验收路径是根 `AGENTS.md`。
|
|
94
|
+
- preview 返回 current/proposed 区域、文件操作、before/after digest、锁迁移、已登记同路径 source 的影响 item ID,且零写入。
|
|
95
|
+
- `--write` 只代表写入精确输出路径的受管区域和 projection lock;不代表批准候选、接受 source drift 或修改业务文件。
|
|
96
|
+
- 已存在同 ID 受管区域且内容一致时返回 unchanged。
|
|
97
|
+
- 受管内容发生合法 renderer 变更时,只替换区域内字节;区域外字节必须保持。
|
|
98
|
+
|
|
99
|
+
### 4.3 `remove-entry`
|
|
100
|
+
|
|
101
|
+
```text
|
|
102
|
+
project-context remove-entry --project PATH --output AGENTS.md [--write] [--json]
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
为了不让“接管”变成只能进不能退的一次性动作,本阶段同时提供安全移除:
|
|
106
|
+
|
|
107
|
+
- 只在 lock、marker 和 managed digest 完全匹配时生成 reviewable preview;
|
|
108
|
+
- 只移除受管区域和对应 lock entry,不删除区域外内容;
|
|
109
|
+
- 如文件由工具创建且移除后只剩空白,仍保留空文件;本阶段不新增删文件原语;
|
|
110
|
+
- 任何区域内编辑、marker 缺失或重复都进入 ownership conflict,不强制清理。
|
|
111
|
+
|
|
112
|
+
## 5. Project Status schema 1
|
|
113
|
+
|
|
114
|
+
新增包内公开 schema:
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
schemas/project-status.schema.json
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
规范形状:
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"schemaVersion": 1,
|
|
125
|
+
"package": {
|
|
126
|
+
"name": "frontend-project-context",
|
|
127
|
+
"version": "1.4.0"
|
|
128
|
+
},
|
|
129
|
+
"initialization": {
|
|
130
|
+
"state": "uninitialized | partial | invalid | initialized",
|
|
131
|
+
"present": [],
|
|
132
|
+
"missing": []
|
|
133
|
+
},
|
|
134
|
+
"project": null,
|
|
135
|
+
"snapshots": null,
|
|
136
|
+
"health": "uninitialized | partial | invalid | attention | clean | conflict",
|
|
137
|
+
"entry": {
|
|
138
|
+
"state": "absent | current | stale | conflict",
|
|
139
|
+
"path": null,
|
|
140
|
+
"rendererVersion": null
|
|
141
|
+
},
|
|
142
|
+
"summary": {
|
|
143
|
+
"findings": 0,
|
|
144
|
+
"changedSources": 0,
|
|
145
|
+
"pendingItems": 0,
|
|
146
|
+
"affectedProjections": 0
|
|
147
|
+
},
|
|
148
|
+
"findingCodes": [],
|
|
149
|
+
"sourceIds": [],
|
|
150
|
+
"itemIds": [],
|
|
151
|
+
"projectionPaths": [],
|
|
152
|
+
"readTargets": [],
|
|
153
|
+
"workUnits": [],
|
|
154
|
+
"nextActions": [],
|
|
155
|
+
"boundaries": {}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 5.1 字段约束
|
|
160
|
+
|
|
161
|
+
- initialized 时 `project` 只含 ID/name,`snapshots` 只含三份 digest;其他状态为 `null`。
|
|
162
|
+
- `findingCodes`/ID/path 去重稳定排序,不复制完整 finding payload 中的 current/proposed 正文。
|
|
163
|
+
- `readTargets` 只保留 source ID、locator、reason 和 priority。
|
|
164
|
+
- `workUnits` 只保留 kind 与关联 ID/path,不包含 item value/statement。
|
|
165
|
+
- `nextActions` 只能为 `run-setup-preview | run-sync | review-pending | review-source-change | review-projection | publish-ai-entry | resolve-conflict | ready-for-task`,不含 `--write`、`--by`、shell 或伪造 approval。
|
|
166
|
+
- `boundaries` 复用 capabilities 的永久 false 能力声明。
|
|
167
|
+
|
|
168
|
+
### 5.2 分类优先级
|
|
169
|
+
|
|
170
|
+
```text
|
|
171
|
+
partial / invalid
|
|
172
|
+
> ownership conflict
|
|
173
|
+
> source/verification/contract blocker
|
|
174
|
+
> pending/stale/missing/entry absent attention
|
|
175
|
+
> clean
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
多个 finding 同时存在时仍完整列出 code 和 ID/path,但 `health` 只取最高优先级。
|
|
179
|
+
|
|
180
|
+
## 6. AI Entry schema 与渲染
|
|
181
|
+
|
|
182
|
+
### 6.1 受管区域
|
|
183
|
+
|
|
184
|
+
固定 marker:
|
|
185
|
+
|
|
186
|
+
```md
|
|
187
|
+
<!-- project-context:ai-entry:start -->
|
|
188
|
+
<!-- project-context:ai-entry; schema-version: 1; renderer-version: 3 -->
|
|
189
|
+
## Project Context 启动流程
|
|
190
|
+
|
|
191
|
+
开始项目工作前,使用项目本地安装的 `frontend-project-context` CLI,不要临时下载其他版本。
|
|
192
|
+
|
|
193
|
+
1. 运行 `npm exec --offline -- project-context status --project . --json`;如果本地依赖不存在,停止并报告,不要临时下载同名包。
|
|
194
|
+
2. 如果状态为 `partial` 或 `invalid`,停止写入并报告准确的恢复证据。
|
|
195
|
+
3. 如果尚未初始化,先预览 `setup`;如果已初始化但需要处理,使用 `sync` 工作单元;如果为 `clean`,继续遵守本文件其余仓库规则,并执行已获授权的用户任务。
|
|
196
|
+
4. 任何 plan、bundle、receipt、review 或 AI 建议都不代表人工批准。
|
|
197
|
+
5. 声明完成前,将 Project Context 恢复为 `clean`,否则报告准确的阻断项。
|
|
198
|
+
<!-- project-context:ai-entry:end -->
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
`1.7.0` 将默认人类可读文案调整为中文,并把 AI Entry renderer 升为 3。renderer 1/2 区域继续可读但报告 stale,只有显式 republish 才升级;机器字段、命令、marker、ID 和枚举继续使用稳定英文。renderer 3 使用 `npm exec --offline -- project-context`,本地依赖缺失时失败封闭,不允许 `npx project-context` 回退下载无关同名包。文案不得增加项目特定事实、当前任务、升级指令或联网安装。
|
|
202
|
+
|
|
203
|
+
### 6.2 字节级所有权
|
|
204
|
+
|
|
205
|
+
- 区域所有权仅覆盖从 start marker 到 end marker 的完整字节;
|
|
206
|
+
- marker 必须各一个、顺序正确、不嵌套;
|
|
207
|
+
- 区域字节 digest 必须与 lock 一致;
|
|
208
|
+
- 区域外内容不参与 managed digest,允许人或其他工具更新;
|
|
209
|
+
- 每次写入仍对读取时的完整文件 digest 做 CAS,避免覆盖预览后的并发编辑;
|
|
210
|
+
- 区域被移动但字节完整时仍视为所有权有效;工具不拥有插入位置。
|
|
211
|
+
|
|
212
|
+
### 6.3 插入规则
|
|
213
|
+
|
|
214
|
+
- 文件不存在:创建只包含区域的 `AGENTS.md`。
|
|
215
|
+
- 文件已存在且无 marker:在 EOF 追加一个空行和区域,保留 BOM 与现有换行风格。
|
|
216
|
+
- 文件已有完整区域且 lock 匹配:更新或 unchanged。
|
|
217
|
+
- 只有 marker 无 lock、只有 lock 无 marker、marker 重复/不完整、区域 digest 不匹配:冲突。
|
|
218
|
+
- 目标路径已是整文件 `agents`/`ruler` projection:冲突,不同时声称整文件与区域所有权。
|
|
219
|
+
|
|
220
|
+
### 6.4 与已登记 `AGENTS.md` source 共存
|
|
221
|
+
|
|
222
|
+
区域首次写入会改变文件字节,因此如该 `AGENTS.md` 已是 active local source,现有 source-drift 语义必须保留:
|
|
223
|
+
|
|
224
|
+
1. preview 必须列出 source ID、预计 after digest 和全部 affected item ID;
|
|
225
|
+
2. 人对入口写入和后续 source acceptance 可以一次集中授权,但两个持久动作仍分别使用自己的 baseline;
|
|
226
|
+
3. 写入后 Host Agent 必须重新 `sync`,用实际 digest 执行 `accept-source-change`;
|
|
227
|
+
4. 受影响 item 仍需明确重新批准;
|
|
228
|
+
5. 不为避免这一次漂移而改变 file source digest 定义、隐式接受或从来源中过滤生成区域。
|
|
229
|
+
|
|
230
|
+
这使首次接入多一个机械维护步骤,但保留已有来源追溯与人工批准不变量。该步骤由 AI 执行,用户不需要手写 CLI。
|
|
231
|
+
|
|
232
|
+
## 7. Projection lock schema 2
|
|
233
|
+
|
|
234
|
+
### 7.1 兼容策略
|
|
235
|
+
|
|
236
|
+
- reader 同时接受 schema 1 和 schema 2;
|
|
237
|
+
- 只读命令保持 schema-1 bytes 不变;
|
|
238
|
+
- 既有整文件 `publish` 在 lock 仍为 schema 1 且不涉及 AI Entry 时继续写 schema 1;
|
|
239
|
+
- 首次成功 `publish-entry --write` 才将全部现有 entry 规范化为 schema 2;
|
|
240
|
+
- schema-2 lock 中后续整文件 publish 与 entry publish/remove 均保持 schema 2;
|
|
241
|
+
- Contract schema 1/2、source lock 1、proposal 1 不迁移。
|
|
242
|
+
|
|
243
|
+
### 7.2 schema-2 entry 联合
|
|
244
|
+
|
|
245
|
+
整文件 projection:
|
|
246
|
+
|
|
247
|
+
```json
|
|
248
|
+
{
|
|
249
|
+
"path": "src/AGENTS.md",
|
|
250
|
+
"target": "agents",
|
|
251
|
+
"ownership": "file",
|
|
252
|
+
"paths": ["src"],
|
|
253
|
+
"contractDigest": "sha256:...",
|
|
254
|
+
"bundleDigest": "sha256:...",
|
|
255
|
+
"contentDigest": "sha256:...",
|
|
256
|
+
"itemIds": [],
|
|
257
|
+
"rendererVersion": 3
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
区域型 AI Entry:
|
|
262
|
+
|
|
263
|
+
```json
|
|
264
|
+
{
|
|
265
|
+
"path": "AGENTS.md",
|
|
266
|
+
"target": "ai-entry",
|
|
267
|
+
"ownership": "region",
|
|
268
|
+
"regionId": "project-context-ai-entry",
|
|
269
|
+
"regionDigest": "sha256:...",
|
|
270
|
+
"rendererVersion": 1,
|
|
271
|
+
"createdFile": false
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
两类 entry 使用严格联合 schema,禁止字段交叉混用。`createdFile` 只是恢复与显示信号,`remove-entry` 本阶段仍不删文件。
|
|
276
|
+
|
|
277
|
+
## 8. Exchange Protocol 2
|
|
278
|
+
|
|
279
|
+
为了使 Host Agent 能在一次集中审查中展示 AI Entry 影响,而不绕过 Action Plan/preflight,`1.4.0` 将以下短生命交换 schema 升级为 2:
|
|
280
|
+
|
|
281
|
+
- capabilities schema 2;
|
|
282
|
+
- Action Plan schema 2;
|
|
283
|
+
- Review Bundle schema 2;
|
|
284
|
+
- exchange protocol 2。
|
|
285
|
+
|
|
286
|
+
Action Plan 2 继续读取 schema 1,并新增两个 action kind:
|
|
287
|
+
|
|
288
|
+
```text
|
|
289
|
+
publish-ai-entry
|
|
290
|
+
remove-ai-entry
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
input 只含:
|
|
294
|
+
|
|
295
|
+
```json
|
|
296
|
+
{
|
|
297
|
+
"output": "AGENTS.md"
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
不含 `write`、`by`、用户内容、自定义 marker、自定义模板或 shell。Review Bundle 2 展示整文件 before/after digest、managed region digest、projection-lock 迁移、source/item 影响和不含 `--write` 的 structured invocation。
|
|
302
|
+
|
|
303
|
+
Assist Bundle、Task Context Plan、Stage Receipt、Stage Context Bundle 和 Integration Review Bundle 仍为 schema 1。`setup`/`sync` 现有字段不变;Host Agent 通过追加调用 `status` 获得 entry/health 聚合,避免为本阶段重写 Assist Bundle。
|
|
304
|
+
|
|
305
|
+
## 9. Capabilities schema 2
|
|
306
|
+
|
|
307
|
+
`capabilities` 仍只读,仍能在 uninitialized/partial/initialized 状态运行。schema 2 新增:
|
|
308
|
+
|
|
309
|
+
- `schemas.projectStatus: 1`;
|
|
310
|
+
- `schemas.projectionLockReadable: [1, 2]`;
|
|
311
|
+
- `schemas.projectionLockWritten: 1 | 2` 的状态说明;
|
|
312
|
+
- `schemas.aiEntryRenderer: 3`(renderer 1/2 继续可读,显式 republish 后写 renderer 3 中文安全入口);
|
|
313
|
+
- `commands` 中的 `status`、`publish-entry`、`remove-entry`;
|
|
314
|
+
- `actionKinds` 中的两种 AI Entry action;
|
|
315
|
+
- `boundaries.telemetry: false`、`boundaries.selfUpdate: false`。
|
|
316
|
+
|
|
317
|
+
当项目 initialized 时,`projectionLockWritten` 返回当前 lock schema;其他状态返回默认创建版本 1。它不查询 registry 最新版本。
|
|
318
|
+
|
|
319
|
+
## 10. 最小迁移清单
|
|
320
|
+
|
|
321
|
+
由于 `publish-entry` 可能写 projection lock schema 2,`1.4.0` 发布包必须新增:
|
|
322
|
+
|
|
323
|
+
```text
|
|
324
|
+
schemas/migration-manifest.schema.json
|
|
325
|
+
migration-manifest.json
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
manifest schema 1 至少固定:
|
|
329
|
+
|
|
330
|
+
- package/version 和支持的 `upgradeFrom`;
|
|
331
|
+
- Contract/source/proposal/projection-lock 的 readable/written 版本;
|
|
332
|
+
- 延迟写迁移触发命令;
|
|
333
|
+
- capabilities/exchange/action/review/entry renderer 的 consumer change;
|
|
334
|
+
- 变更路径、before baseline 和验收命令;
|
|
335
|
+
- rollback class;
|
|
336
|
+
- 不可自动执行的外部影响。
|
|
337
|
+
|
|
338
|
+
`1.3.1 → 1.4.0` 固定为:
|
|
339
|
+
|
|
340
|
+
- 安装新包但未写 AI Entry:package-only rollback;
|
|
341
|
+
- 首次写 AI Entry 并转换 lock 2 后:forward-only for `1.3.1` reader;
|
|
342
|
+
- 如必须回到 `1.3.1`,只能由外部 Git/备份同时恢复 `AGENTS.md` 与 `.project-context/projections.lock.json`,不得只降包版本;
|
|
343
|
+
- 本阶段不实现自动 reverse migration 或 upgrade CLI。
|
|
344
|
+
|
|
345
|
+
该最小清单是 Phase C 的机器合同基础,不是完整升级编排提前进入本阶段。
|
|
346
|
+
|
|
347
|
+
## 11. Host Agent Takeover 协议
|
|
348
|
+
|
|
349
|
+
### 11.1 完全新窗口
|
|
350
|
+
|
|
351
|
+
AI Entry 固定要求 Host Agent:
|
|
352
|
+
|
|
353
|
+
```text
|
|
354
|
+
1. 使用项目本地已安装版本,不调用可联网下载的浮动 latest。
|
|
355
|
+
2. 先运行 status --json。
|
|
356
|
+
3. partial/invalid/conflict:不进行任何 project-context 写入。
|
|
357
|
+
4. uninitialized:setup preview,然后只对精确 store/proposal/entry 路径请求写入授权。
|
|
358
|
+
5. attention:运行 sync,只处理 readTargets/workUnits 指向的影响子集。
|
|
359
|
+
6. clean:进入用户的当前项目任务。
|
|
360
|
+
7. 任务结束时只提出持久真源候选,不保存聊天/日志/bundle。
|
|
361
|
+
8. 重新 status/check;只有 context health clean 才声称治理收尾完成。
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### 11.2 用户不需要操作 CLI
|
|
365
|
+
|
|
366
|
+
Host Agent 给人的集中审查只显示:
|
|
367
|
+
|
|
368
|
+
- 项目身份与当前状态;
|
|
369
|
+
- 将创建或改动的精确路径;
|
|
370
|
+
- 将进入 Contract 的 exact item/source ID、value、scope 和 provenance;
|
|
371
|
+
- AI Entry 的受管区域 diff 及已有 `AGENTS.md` 内容保留结果;
|
|
372
|
+
- 写入权限、source drift、可逆性和阻断。
|
|
373
|
+
|
|
374
|
+
用户批准这组已完整展示的影响后,Host Agent 负责命令顺序、baseline 和失败重新预检。
|
|
375
|
+
|
|
376
|
+
### 11.3 健康收尾
|
|
377
|
+
|
|
378
|
+
`status.health: clean` 只证明 Project Context 治理层健康,不声称业务代码、项目测试、Git 或发布健康。Host Agent 在给用户的任务结果中必须分开表达:
|
|
379
|
+
|
|
380
|
+
```text
|
|
381
|
+
Project Context health: clean | blocked
|
|
382
|
+
Project validation: passed | failed | not-run
|
|
383
|
+
External delivery state: host-defined
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
这三项不写入 Contract,不新增 DeliveryRecord store。
|
|
387
|
+
|
|
388
|
+
## 12. 初始化和既有项目流程
|
|
389
|
+
|
|
390
|
+
### 12.1 没有人工 `AGENTS.md`
|
|
391
|
+
|
|
392
|
+
```text
|
|
393
|
+
status: uninitialized
|
|
394
|
+
→ setup preview
|
|
395
|
+
→ 人集中确认 project ID/name、候选、store/proposal 和 AGENTS path
|
|
396
|
+
→ setup --write
|
|
397
|
+
→ approve 明确 item
|
|
398
|
+
→ publish-entry --write
|
|
399
|
+
→ 必要的受管 Context projection
|
|
400
|
+
→ sync/check
|
|
401
|
+
→ status: clean
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
AI Entry 文件是投影,不是候选 source;discovery 必须识别完全受管的 AI Entry 文件,避免将它反向登记为项目人工指导。
|
|
405
|
+
|
|
406
|
+
### 12.2 已有人工 `AGENTS.md`
|
|
407
|
+
|
|
408
|
+
```text
|
|
409
|
+
status: uninitialized | initialized-attention
|
|
410
|
+
→ 保留并展示现有文件
|
|
411
|
+
→ publish-entry preview 展示只在 EOF 增加区域
|
|
412
|
+
→ 人确认精确路径和影响
|
|
413
|
+
→ publish-entry --write
|
|
414
|
+
→ 如 AGENTS 已是 source,sync 报告预期 drift
|
|
415
|
+
→ 执行已授权的 accept/reapprove
|
|
416
|
+
→ check/status: clean
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
人工区域此后可继续修改,不导致 AI Entry ownership conflict;如该文件本身是 registered source,正常 source drift 仍会发生。
|
|
420
|
+
|
|
421
|
+
### 12.3 已有整文件受管 `AGENTS.md`
|
|
422
|
+
|
|
423
|
+
如根 `AGENTS.md` 已是 `target: agents` 的整文件 projection,Host Agent 不应再插入 AI Entry 区域。`status` 可将该文件标记为已有可用项目上下文投影,但只有其正文包含等价启动路由时才可判定 entry current;否则应选择另一个不冲突的根入口或由人重新决定所有权。本阶段不自动把整文件 projection 转换为区域投影。
|
|
424
|
+
|
|
425
|
+
## 13. 错误与 finding
|
|
426
|
+
|
|
427
|
+
| code | 类型 | 含义 |
|
|
428
|
+
| --- | --- | --- |
|
|
429
|
+
| `project-state-partial` | error/2 | 三份 store 不完整;不猜测修复 |
|
|
430
|
+
| `project-state-invalid` | error/2 | store/schema 不可读 |
|
|
431
|
+
| `ai-entry-missing` | finding/1 | 已声明采用但区域或文件缺失 |
|
|
432
|
+
| `ai-entry-renderer-stale` | finding/1 | renderer 版本落后,所有权仍可信 |
|
|
433
|
+
| `ai-entry-ownership-conflict` | finding/3 | marker、lock 或区域 digest 不可信 |
|
|
434
|
+
| `ai-entry-path-conflict` | error/3 | 同路径已有整文件 projection 或不兼容受管类型 |
|
|
435
|
+
| `ai-entry-output-invalid` | error/2 | 路径越界、symlink 逸出或非 `AGENTS.md` |
|
|
436
|
+
| `ai-entry-state-changed` | error/1 | preview 后文件、Contract 或 lock baseline 变化 |
|
|
437
|
+
| `projection-lock-migration-required` | finding/1 | 写 entry 将把 schema 1 延迟升级为 2 |
|
|
438
|
+
|
|
439
|
+
`setup-state-partial` 作为 setup 的既有错误保留;`status` 将同一事实统一表达为 `initialization.state: partial`、`health: partial` 和 `project-state-partial`,不修改旧命令合同。
|
|
440
|
+
|
|
441
|
+
## 14. 原子性、并发和恢复
|
|
442
|
+
|
|
443
|
+
### 14.1 preview
|
|
444
|
+
|
|
445
|
+
- 一次读取 Contract、sources lock、projection lock 和目标文件;
|
|
446
|
+
- 生成 before/after digest、区域 bytes、next lock 和 source impact;
|
|
447
|
+
- 所有 bytes 不变。
|
|
448
|
+
|
|
449
|
+
### 14.2 write
|
|
450
|
+
|
|
451
|
+
1. 重读 Contract 和 projection lock,要求 digest 等于 preview baseline。
|
|
452
|
+
2. 重读完整目标文件,要求 digest 等于 before digest。
|
|
453
|
+
3. 原子写 next projection lock。
|
|
454
|
+
4. 原子写目标文件。
|
|
455
|
+
5. 文件写失败时,只在当前 lock 仍等于本次 next lock 时恢复旧 lock;否则跳过恢复并报告并发变化。
|
|
456
|
+
6. 不回滚、删除或覆盖不再符合基线的人工内容。
|
|
457
|
+
|
|
458
|
+
这复用现有 projection lock-first 与条件恢复语义,不新增事务日志、后台锁或 Git rollback。
|
|
459
|
+
|
|
460
|
+
## 15. 上下文体积与隐私
|
|
461
|
+
|
|
462
|
+
- AI Entry 是固定路由,不渲染 Project Contract item 正文。
|
|
463
|
+
- `status` 默认只返回统计、code、ID、path、read target 和 work-unit reference。
|
|
464
|
+
- 具体 current/proposed 只在 setup/sync/preflight 的影响子集中出现。
|
|
465
|
+
- 不扫描代码正文来判断健康,不引入 embedding、向量库、聊天库或跨项目 telemetry。
|
|
466
|
+
- 目标项目路径和 finding 不自动上传。
|
|
467
|
+
|
|
468
|
+
## 16. 实现范围
|
|
469
|
+
|
|
470
|
+
| 文件 | 允许变更 |
|
|
471
|
+
| --- | --- |
|
|
472
|
+
| `src/project-context/project-status.mjs` | 新增只读状态聚合与稳定分类 |
|
|
473
|
+
| `src/project-context/ai-entry.mjs` | 新增区域渲染、解析、preview、write/remove 和 CAS |
|
|
474
|
+
| `src/project-context/contract-schema.mjs` | projection lock schema 1/2 reader 与严格联合验证 |
|
|
475
|
+
| `src/project-context/projection-store.mjs` | 保持整文件 projection 并支持 schema-2 lock |
|
|
476
|
+
| `src/project-context/checker.mjs` | AI Entry finding 与按 target 区分 renderer/ownership |
|
|
477
|
+
| `src/project-context/capabilities.mjs` | capabilities schema 2 机器声明 |
|
|
478
|
+
| `src/project-context/exchange-schema.mjs` / `exchange.mjs` | Action Plan/Review Bundle 2 与两个 entry action |
|
|
479
|
+
| `src/project-context/cli.mjs` | `status`、`publish-entry`、`remove-entry` 的参数 allowlist、输出和退出码 |
|
|
480
|
+
| `schemas/*.schema.json` | project-status 1、projection-lock 2、capabilities/action/review 2、migration-manifest 1 |
|
|
481
|
+
| `test/project-context/takeover.test.mjs` | A-77 至 A-90 |
|
|
482
|
+
| `test/project-context/exchange.test.mjs` | exchange 2 与 schema-1 input compatibility |
|
|
483
|
+
| `test/release/acceptance.test.mjs` | 包文件、schema、manifest、版本与文档 pin |
|
|
484
|
+
| `README.md`、`docs/04`、`docs/05`、`docs/08`、`UPGRADING.md` | 实现后同步真实公共行为 |
|
|
485
|
+
| `examples/` | 最小 AGENTS 接管与 npm script 示例 |
|
|
486
|
+
|
|
487
|
+
实现可以在不改变语义的前提下调整纯 helper 位置,但不得引入第二个 checker、scanner、scope compiler 或通用文件 patch 框架。
|
|
488
|
+
|
|
489
|
+
## 17. 冻结验收 A-77 至 A-90
|
|
490
|
+
|
|
491
|
+
- **A-77 未初始化状态**:空项目连续调用 `status` 输出稳定、零写入,state/health/nextActions 正确,不创建 `.project-context`。
|
|
492
|
+
- **A-78 partial 与 invalid**:三种 partial 组合和代表性 schema/JSON 损坏均返回结构化状态与退出码 2,所有 bytes 不变,不猜测修复。
|
|
493
|
+
- **A-79 initialized health**:clean、source changed、pending、verification failed、projection stale 和 ownership conflict 的分类与现有 check/sync 完全一致。
|
|
494
|
+
- **A-80 Entry preview/create**:无 `AGENTS.md` 和已有人工文件的 preview 均零写入;write 只创建/插入精确区域,区域外字节、BOM 和换行保持;入口只调用离线项目本地 CLI,禁止模糊 `npx project-context`。
|
|
495
|
+
- **A-81 区域所有权**:区域外人工编辑不冲突;区域内编辑、marker 缺失/重复/嵌套、lock 错配均失败封闭且不覆盖。
|
|
496
|
+
- **A-82 Entry 更新与移除**:可信区域可确定性 unchanged/update/remove;remove 只移除受管字节和 lock entry,不删文件或区域外内容。
|
|
497
|
+
- **A-83 source 共存**:已登记人工 `AGENTS.md` 时,preview 完整列出影响;写入后仍必须经 accept/reapprove 才恢复 clean,不隐式接受 digest。
|
|
498
|
+
- **A-84 projection lock 1/2**:schema-1 reader 与旧 publish 字节保持;首次 Entry write 才迁移到 2;两类联合严格,旧 renderer 1/2/3 行为不回归。
|
|
499
|
+
- **A-85 并发与恢复**:Contract/lock/文件任一 baseline 变化都停止;lock-first 后文件写失败只做条件恢复,不覆盖并发 lock 或人工内容。
|
|
500
|
+
- **A-86 Exchange Protocol 2**:capabilities/action/review schema 2 与运行时一致;schema-1 Action Plan 仍可读;新 action 不包含 authority、shell 或自定义区域正文。
|
|
501
|
+
- **A-87 最小迁移清单**:manifest 准确声明 reader/writer、lazy trigger、consumer change、rollback class 和外部权限;package schema 与运行时交叉验收。
|
|
502
|
+
- **A-88 setup 后接管闭环**:新项目由 setup 到 approved Contract、AI Entry、必要 projection 与 status/check clean,人只对集中影响决策,不手写 store。
|
|
503
|
+
- **A-89 独立新窗口合同**:一个无上一进程内存/聊天输入的隔离 Host fixture 仅凭 `AGENTS.md`、本地 CLI 和项目文件,可选择正确状态分支并在无需人决策时收敛到 clean。该 fixture 不调 Provider,不伪称真实模型效果。
|
|
504
|
+
- **A-90 永久边界与回归**:A-01 至 A-76、B0、CLI 和发布工件保持;生产源码仍无 Provider、Agent Runtime、Git、网络、dependency install、telemetry、self-update、业务写入、测试执行、scheduler 或 daemon。
|
|
505
|
+
|
|
506
|
+
实现 Gate 为新增 A-77 至 A-90 全绿,并且现有 82 项回归全部通过。若每个编号对应一个顶层测试,预期总数不少于 96;真实总数以实现后测试结果为准,不能预先写成已通过。
|
|
507
|
+
|
|
508
|
+
## 18. 发布与真实 Host 验证 Gate
|
|
509
|
+
|
|
510
|
+
详细设计、实现、发布和真实 Host Agent 验证是四个不同授权:
|
|
511
|
+
|
|
512
|
+
1. 本文只完成设计;
|
|
513
|
+
2. 实现需单独授权,且只能修改第 16 节范围;
|
|
514
|
+
3. 实现验收通过不等于 npm 发布授权;
|
|
515
|
+
4. 隔离脚本 fixture 通过不等于真实 Codex/Claude 新窗口已验证;真实 Host/目标项目验证需要独立范围、脱敏和证据合同。
|
|
516
|
+
|
|
517
|
+
产品发布前必须完成候选 tarball 安装后的 version/help/capabilities/status、schema、manifest、schema-1 project read、entry preview/write/remove 和 final clean check 独立冒烟。
|
|
518
|
+
|
|
519
|
+
## 19. 明确不做
|
|
520
|
+
|
|
521
|
+
- 不让 `status` 自动修复 partial、drift、pending 或 projection。
|
|
522
|
+
- 不让 `publish-entry` 批准 item、接受 source digest 或覆盖区域外内容。
|
|
523
|
+
- 不将整个人工 `AGENTS.md` 转换为工具所有。
|
|
524
|
+
- 不对 `CLAUDE.md`、`.github/copilot-instructions.md` 或其他宿主入口增加写入适配;这些属于 Phase D 后续可选适配器。
|
|
525
|
+
- 不修改 `setup` 已冻结的 store/proposal 写入语义,不把整个接管流程合成一个自动批准命令。
|
|
526
|
+
- 不在 AI Entry 中写 Contract 正文、当前任务、聊天摘要、receipt 或升级手册。
|
|
527
|
+
- 不实现 Evidence Bundle、中心上传、telemetry 或目标项目自我升级。
|
|
528
|
+
- 不实现完整 upgrade check/plan/apply、包管理或 reverse migration。
|
|
529
|
+
- 不修改宪法的人工真源权、永久边界或七项内核定义。
|
|
530
|
+
|
|
531
|
+
## 20. 停止点
|
|
532
|
+
|
|
533
|
+
本文已冻结 `1.4.0` 的用户问题、CLI、schema、所有权、迁移、恢复、Host 协议、文件范围与 A-77 至 A-90。用户于 `2026-09-10` 明确授权“按 docs/20 实现 1.4.0”,本地实现与 96/96 隔离验收已完成。到此必须停止。
|
|
534
|
+
|
|
535
|
+
本次授权不包含 Git 提交/push、npm 发布、网络、真实 Host/目标项目验证或 Provider 调用;下一步必须等待对其中某一精确范围的新授权。
|