frontend-project-context 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/CHANGELOG.md +14 -0
- package/LICENSE +201 -0
- package/NOTICE +4 -0
- package/PROJECT_STATE.json +176 -0
- package/README.md +148 -0
- package/RTK.md +13 -0
- package/UPGRADING.md +15 -0
- package/bin/project-context.mjs +7 -0
- package/docs/00-PRODUCT-CONSTITUTION.md +166 -0
- package/docs/01-PRODUCT-CORE.md +143 -0
- package/docs/02-MARKET-BOUNDARY.md +88 -0
- package/docs/03-FINAL-SOLUTION.md +203 -0
- package/docs/04-PROGRAM-DESIGN.md +428 -0
- package/docs/05-ACCEPTANCE-CONTRACT.md +348 -0
- package/docs/06-HISTORICAL-PROTOTYPE.md +55 -0
- package/docs/07-REAL-TASK-EVIDENCE.md +52 -0
- package/docs/08-INSTALLATION-AND-DISTRIBUTION.md +199 -0
- package/docs/09-B0-DTG-TMC-MOBILE.md +173 -0
- package/docs/10-B0-DTG-TMC-PC.md +118 -0
- package/docs/11-V1-AUTHORING-CLOSURE-DESIGN.md +312 -0
- package/docs/12-KNOWLEDGE-MAINTENANCE-CLOSURE-ROADMAP.md +350 -0
- package/docs/13-READ-ONLY-GOVERNANCE-DASHBOARD-DESIGN.md +489 -0
- package/docs/14-FORMAL-RELEASE-READINESS.md +61 -0
- package/docs/15-SOURCE-LIFECYCLE-CLOSURE-DESIGN.md +260 -0
- package/docs/README.md +74 -0
- package/examples/README.md +17 -0
- package/examples/package.json +11 -0
- package/examples/project-context-check.yml +22 -0
- package/package.json +40 -0
- package/src/project-context/approver.mjs +177 -0
- package/src/project-context/authoring.mjs +190 -0
- package/src/project-context/canonical-json.mjs +55 -0
- package/src/project-context/checker.mjs +132 -0
- package/src/project-context/cli.mjs +409 -0
- package/src/project-context/contract-schema.mjs +316 -0
- package/src/project-context/dashboard-model.mjs +278 -0
- package/src/project-context/dashboard-renderer.mjs +637 -0
- package/src/project-context/discovery.mjs +251 -0
- package/src/project-context/errors.mjs +13 -0
- package/src/project-context/io.mjs +93 -0
- package/src/project-context/maintenance.mjs +400 -0
- package/src/project-context/path-policy.mjs +155 -0
- package/src/project-context/project-store.mjs +138 -0
- package/src/project-context/projection-store.mjs +107 -0
- package/src/project-context/renderer.mjs +135 -0
- package/src/project-context/scope-compiler.mjs +132 -0
- package/src/project-context/source-reader.mjs +124 -0
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
# 04 — v1 程序设计
|
|
2
|
+
|
|
3
|
+
> 权威说明:本文记录当前实现设计;如与 [00-PRODUCT-CONSTITUTION.md](./00-PRODUCT-CONSTITUTION.md) 冲突,以产品宪法为准。
|
|
4
|
+
|
|
5
|
+
> 状态:`1.0.0 Source Lifecycle Closure implemented locally; A-01 through A-45, B0 regressions, and CLI verified`
|
|
6
|
+
>
|
|
7
|
+
> 前置真源:[03-FINAL-SOLUTION.md](./03-FINAL-SOLUTION.md)。本文不得重新引入 Agent Runtime、任务执行、Git 生命周期或完整多工具适配矩阵。
|
|
8
|
+
|
|
9
|
+
## 1. 程序形态
|
|
10
|
+
|
|
11
|
+
v1 是一个本地 Node.js CLI 和一组无第三方依赖的可复用模块,工作名为 `project-context`。
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
project-context init
|
|
15
|
+
project-context register
|
|
16
|
+
project-context propose
|
|
17
|
+
project-context review-source
|
|
18
|
+
project-context accept-source-change
|
|
19
|
+
project-context revise
|
|
20
|
+
project-context deprecate
|
|
21
|
+
project-context discover
|
|
22
|
+
project-context approve
|
|
23
|
+
project-context context
|
|
24
|
+
project-context publish
|
|
25
|
+
project-context check
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
CLI 不提供 `run`、`generate-code`、`validate`、`retry`、`review-candidate`、`deliver` 或任何 Git 命令。
|
|
29
|
+
|
|
30
|
+
## 2. 运行原则
|
|
31
|
+
|
|
32
|
+
1. 默认命令只读并向 stdout 输出 JSON 或 Markdown。
|
|
33
|
+
2. 任何文件写入都必须有命令自身的 `--write` 参数;历史授权不能复用。
|
|
34
|
+
3. 写入只允许发生在目标项目内的 `.project-context/` 和用户明确指定的 projection path。
|
|
35
|
+
4. 程序不启动子 shell、项目命令、Provider 或 Coding Agent。
|
|
36
|
+
5. 程序不执行 Git 命令;当前分支、HEAD、index 和 remote 对本程序没有语义。
|
|
37
|
+
6. 程序不下载或安装 Ruler、Rulesync 或其他依赖。
|
|
38
|
+
|
|
39
|
+
## 3. 项目文件
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
.project-context/
|
|
43
|
+
contract.json # 唯一规范真源,人可审阅
|
|
44
|
+
sources.lock.json # 已批准来源的最近确认指纹
|
|
45
|
+
projections.lock.json # 受管生成文件的路径与内容指纹
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
提案默认只输出到 stdout。只有显式指定 `--output FILE --write` 时才保存;保存的 proposal 不是合同,也不会被 Context Compiler 使用。
|
|
49
|
+
|
|
50
|
+
现行 schema 约定:
|
|
51
|
+
|
|
52
|
+
- proposal 为 `{ schemaVersion, projectId, sources, items }`,所有 item 必须保持 `proposed`;
|
|
53
|
+
- source lock 为 `{ schemaVersion, sources: [{ id, digest }] }`,只记录经过显式 register 或 approve 动作确认的本地来源;
|
|
54
|
+
- projection lock 为 `{ schemaVersion, projections[] }`,每项记录输出路径、target、目标 scope paths、合同/bundle/内容 digest、item IDs 和 renderer version;
|
|
55
|
+
- contract、proposal 和两个 lock 的 schema version 在 authoring closure 后仍为 1;新投影使用 renderer version 2,读取器兼容 renderer version 1 的受管投影并要求显式重发;
|
|
56
|
+
- `contract.json` 中的本地 source digest 必须与 source lock 一致;lock 是上次人工批准时的确认点,`check` 不自动更新它。
|
|
57
|
+
|
|
58
|
+
## 4. Project Contract schema
|
|
59
|
+
|
|
60
|
+
### 4.1 顶层
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"schemaVersion": 1,
|
|
65
|
+
"project": {
|
|
66
|
+
"id": "tmc-mobile",
|
|
67
|
+
"name": "TMC Mobile",
|
|
68
|
+
"root": "."
|
|
69
|
+
},
|
|
70
|
+
"sources": [],
|
|
71
|
+
"items": []
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
未知字段默认拒绝,防止错误拼写或未来语义悄然生效。
|
|
76
|
+
|
|
77
|
+
### 4.2 Source
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"id": "source-package-json",
|
|
82
|
+
"kind": "file | path | json-pointer | human-decision | external-reference",
|
|
83
|
+
"path": "package.json",
|
|
84
|
+
"pointer": "/scripts/test",
|
|
85
|
+
"reference": null,
|
|
86
|
+
"digest": "sha256:..."
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
约束:
|
|
91
|
+
|
|
92
|
+
- `file` 和 `json-pointer` 的 path 必须是项目内相对路径。
|
|
93
|
+
- `path` 只确认项目内路径及其文件/目录类型,不对目录内容做全量指纹;普通代码变化不会让目录存在事实漂移,路径删除或类型变化仍会被检查发现。
|
|
94
|
+
- `json-pointer` 使用 RFC 6901 形式定位 JSON 值。
|
|
95
|
+
- `human-decision` 记录人工规则来源,不伪造文件指纹。
|
|
96
|
+
- `external-reference` 只保存 URL 或设计系统标识;v1 不访问网络验证。
|
|
97
|
+
- `digest` 表示上次人工确认时的来源内容,不由 `check` 自动更新。
|
|
98
|
+
|
|
99
|
+
### 4.3 Contract Item
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"id": "policy-i18n-visible-copy",
|
|
104
|
+
"kind": "policy",
|
|
105
|
+
"subject": "ui.visible-copy.i18n",
|
|
106
|
+
"value": "required",
|
|
107
|
+
"statement": "用户可见中文必须通过项目 i18n 调用并保留中文 fallback。",
|
|
108
|
+
"scope": {
|
|
109
|
+
"kind": "project | path-prefix | file",
|
|
110
|
+
"path": "pages/flight"
|
|
111
|
+
},
|
|
112
|
+
"status": "proposed | approved | deprecated",
|
|
113
|
+
"sources": ["source-i18n-guide"],
|
|
114
|
+
"overrides": [],
|
|
115
|
+
"approval": {
|
|
116
|
+
"by": "developer",
|
|
117
|
+
"at": "2026-08-31T00:00:00Z",
|
|
118
|
+
"rationale": "existing repository convention"
|
|
119
|
+
},
|
|
120
|
+
"verification": {
|
|
121
|
+
"kind": "none | file-exists | json-value | path-digest",
|
|
122
|
+
"source": "source-i18n-guide",
|
|
123
|
+
"expected": null
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
约束:
|
|
129
|
+
|
|
130
|
+
- ID 和 `subject` 使用稳定的小写 kebab/dot 命名。
|
|
131
|
+
- `approved` item 必须包含 approval;CLI 只证明发生了显式批准动作,不提供身份认证。
|
|
132
|
+
- `policy` 不能由 `discover` 直接创建为 approved。
|
|
133
|
+
- `statement` 是给人和模型阅读的表达,`subject + value + scope + overrides` 提供确定性冲突检查。
|
|
134
|
+
- `deprecated` item 不进入 Context Bundle,但保留审计原因。
|
|
135
|
+
|
|
136
|
+
### 4.4 Scope
|
|
137
|
+
|
|
138
|
+
v1 不实现 glob DSL,只支持:
|
|
139
|
+
|
|
140
|
+
- `project`:整个项目;
|
|
141
|
+
- `path-prefix`:某个规范化目录及其后代;
|
|
142
|
+
- `file`:单个项目内文件。
|
|
143
|
+
|
|
144
|
+
所有 path 使用 `/`、不得为绝对路径、不得包含 `..`,realpath 后不得越出项目根。
|
|
145
|
+
|
|
146
|
+
## 5. 命令设计
|
|
147
|
+
|
|
148
|
+
### 5.1 `init`
|
|
149
|
+
|
|
150
|
+
```text
|
|
151
|
+
project-context init --project PATH --id ID --name NAME --write
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
行为:
|
|
155
|
+
|
|
156
|
+
- 验证目标目录;
|
|
157
|
+
- 创建三个最小 JSON 文件;
|
|
158
|
+
- 任一目标已存在时停止,不覆盖;
|
|
159
|
+
- 不扫描、不生成规则、不修改 `AGENTS.md`。
|
|
160
|
+
|
|
161
|
+
没有 `--write` 时只显示将创建的内容。
|
|
162
|
+
|
|
163
|
+
### 5.2 `discover`
|
|
164
|
+
|
|
165
|
+
```text
|
|
166
|
+
project-context discover --project PATH [--output FILE --write]
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
只读发现器:
|
|
170
|
+
|
|
171
|
+
- `package.json` 中的 package manager、scripts 和关键 framework/tool dependency;
|
|
172
|
+
- TypeScript、lint、format、test、build 常见配置文件的存在;
|
|
173
|
+
- 根和子目录中的 `AGENTS.md`、`CLAUDE.md`、`.kiro/steering/` 与 `.ruler/` 规则来源;
|
|
174
|
+
- 用户在 contract 中显式登记的设计 token、组件文档和参考文件;
|
|
175
|
+
- 一级非隐藏目录结构;每条目录 proposal 自身声明对应的 `path-prefix` scope。
|
|
176
|
+
|
|
177
|
+
输出 `fact/reference proposal` 和来源,不输出 approved policy。发现器不递归解释全部源码,不使用 LLM 猜测架构。
|
|
178
|
+
|
|
179
|
+
proposal/source/item ID 由稳定语义前缀、规范化路径或名称和短 SHA-256 后缀生成;遍历和输出稳定排序。扫描忽略 `.git`、`.project-context`、依赖与构建目录、symlink 以及带本产品 marker 的受管 projection,防止生成物反向成为来源。
|
|
180
|
+
|
|
181
|
+
一级目录使用 `path` source 形成对应目录范围内的 proposed fact。只包含单行 `@另一个规则文件` 的 Agent 规则别名,在引用链最终落到另一个可发现的具体规则文件时去重;循环、越界或无法解析的别名仍保留,避免静默丢失来源。
|
|
182
|
+
|
|
183
|
+
### 5.3 `register`
|
|
184
|
+
|
|
185
|
+
```text
|
|
186
|
+
project-context register --project PATH --id SOURCE_ID --kind KIND [--path PATH] [--pointer POINTER] [--reference TEXT] [--write]
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
通用登记现有 schema 的 file、path、json-pointer、human-decision 或 external-reference。本地来源由程序读取 digest;默认 preview,显式 `--write` 后只更新 contract 和必要的 source lock。登记不创建或批准 item,external reference 不触发网络。
|
|
190
|
+
|
|
191
|
+
同 ID 的完全相同来源保持 unchanged;不同内容或重复 locator 停止。本地来源在提交前再次确认,所有 store 更新使用快照检查和失败封闭写入。
|
|
192
|
+
|
|
193
|
+
### 5.4 `propose`
|
|
194
|
+
|
|
195
|
+
```text
|
|
196
|
+
project-context propose --project PATH --id ITEM_ID --kind KIND --subject SUBJECT
|
|
197
|
+
(--value TEXT | --value-json JSON) --statement TEXT --sources SOURCE_ID...
|
|
198
|
+
--scope project|path-prefix|file [--scope-path PATH] [--overrides ITEM_ID...]
|
|
199
|
+
[--verification KIND] [--verification-source SOURCE_ID]
|
|
200
|
+
[--verification-expected-json JSON] [--output FILE --write]
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
从已登记来源构造一个 schema version 1 proposal。支持四类 item、三类 scope 和现有 overrides/verification;item 始终为 proposed,不含 approval。默认 stdout;显式保存时只能原子创建 `.project-context/` 内非 store 的 JSON,或确认已有字节相同,不能覆盖不同内容。
|
|
204
|
+
|
|
205
|
+
### 5.5 `approve`
|
|
206
|
+
|
|
207
|
+
```text
|
|
208
|
+
project-context approve --project PATH --proposal FILE --ids ID... --by NAME --write
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
行为:
|
|
212
|
+
|
|
213
|
+
- 读取 proposal 和当前 contract;
|
|
214
|
+
- 展示将加入或更新的来源与 item;
|
|
215
|
+
- 只批准用户明确列出的 ID;
|
|
216
|
+
- 写入 approval、合同项和 source lock;
|
|
217
|
+
- ID/subject 冲突、来源失效或合同在读取后变化时停止;
|
|
218
|
+
- 写入前对 next contract 执行 override/conflict 预检,同时核对 contract/source lock 快照;
|
|
219
|
+
- 不自动批准 proposal 中其余内容。
|
|
220
|
+
|
|
221
|
+
人工也可以直接编辑 `contract.json`,但 `check` 仍要求 schema 和 approval 完整。
|
|
222
|
+
|
|
223
|
+
### 5.6 `context`
|
|
224
|
+
|
|
225
|
+
```text
|
|
226
|
+
project-context context --project PATH --path RELATIVE_PATH... [--task TEXT] [--locale zh-CN|en|all]
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
行为:
|
|
230
|
+
|
|
231
|
+
- 校验合同和来源状态;
|
|
232
|
+
- 任一 `source-*`、`scope-*`、`verification-*` 或 contract conflict finding 都阻断 context/publish;
|
|
233
|
+
- 选择对所有目标路径都适用或分别适用的 approved item;
|
|
234
|
+
- 应用显式 overrides;
|
|
235
|
+
- 冲突时失败,不生成可能误导模型的 bundle;
|
|
236
|
+
- 输出稳定 Markdown,包含合同摘要、任务原文、适用 facts/policies/references/validation descriptions、每项 canonical approved value 和来源索引。
|
|
237
|
+
|
|
238
|
+
`--task` 原样进入临时 bundle,只用于当前阅读,不参与长期合同和批准逻辑。
|
|
239
|
+
|
|
240
|
+
### 5.7 `publish`
|
|
241
|
+
|
|
242
|
+
```text
|
|
243
|
+
project-context publish --project PATH --target agents|ruler --output RELATIVE_PATH [--path RELATIVE_PATH...] --write
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
目标:
|
|
247
|
+
|
|
248
|
+
- `agents`:带受管标记的 AGENTS-compatible Markdown;
|
|
249
|
+
- `ruler`:Ruler 能递归读取的普通 Markdown 源文件。
|
|
250
|
+
|
|
251
|
+
v1 不生成 Claude、Gemini、Cursor、Kiro 等专用格式。用户需要这些格式时使用 Ruler/Rulesync。
|
|
252
|
+
|
|
253
|
+
写入规则:
|
|
254
|
+
|
|
255
|
+
1. `--output` 必须位于项目内且不是 symlink。
|
|
256
|
+
- `agents` target 只能写入名为 `AGENTS.md` 的文件;
|
|
257
|
+
- `ruler` target 只能写入 `.ruler/` 内的 Markdown 文件。
|
|
258
|
+
2. 新文件可以创建。
|
|
259
|
+
3. 已存在文件只有同时包含本产品 ownership marker,并且内容 digest 与 `projections.lock.json` 相符时才能覆盖。
|
|
260
|
+
4. 用户手写文件、其他工具文件或被人工修改的受管文件必须停止并报告。
|
|
261
|
+
- 根 `AGENTS.md` 已由用户维护时,可以在没有冲突的目标子目录生成受管 `AGENTS.md`,利用 Agent 的层级规则加载与根规则共存;也可以使用 Ruler 投影。
|
|
262
|
+
5. 每个文件写入使用同目录临时文件加原子 rename。
|
|
263
|
+
6. 显式写入先提交 next projection lock,再写 projection;projection 失败时恢复原 lock。
|
|
264
|
+
7. lock 恢复也失败时,lock-first 状态必须让 `check` 确定报告 projection missing 或 ownership conflict;没有 `--write` 时只输出 preview 和 diff 摘要。
|
|
265
|
+
|
|
266
|
+
生成标记示意:
|
|
267
|
+
|
|
268
|
+
```html
|
|
269
|
+
<!-- managed-by: project-context; contract-digest: sha256:...; target: agents -->
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### 5.8 `check`
|
|
273
|
+
|
|
274
|
+
```text
|
|
275
|
+
project-context check --project PATH
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
只读检查:
|
|
279
|
+
|
|
280
|
+
- JSON schema、唯一 ID、枚举、路径和 approval;
|
|
281
|
+
- source path、JSON pointer 和确认 digest;
|
|
282
|
+
- 同 subject、重叠 scope、不同 value 且没有有效 overrides 的冲突;
|
|
283
|
+
- override 是否指向更宽或同范围的有效 approved item;
|
|
284
|
+
- projection ownership marker、contract digest 和内容 digest;
|
|
285
|
+
- proposal 内容是否被误写入 projection;
|
|
286
|
+
- lock 中是否存在已经删除的合同项或生成文件。
|
|
287
|
+
|
|
288
|
+
`check` 不更新 digest、不写文件、不执行项目验证。
|
|
289
|
+
|
|
290
|
+
## 6. 确定性编译规则
|
|
291
|
+
|
|
292
|
+
1. 只读取 `approved` item。
|
|
293
|
+
2. 对每个目标路径计算有效 item 集。
|
|
294
|
+
3. 同 subject 的更窄 scope 只有声明 `overrides` 才替代上层 item。
|
|
295
|
+
4. 未被覆盖的冲突使编译失败。
|
|
296
|
+
5. 输出按 `kind`、scope specificity、subject、id 稳定排序。
|
|
297
|
+
6. Markdown 使用 item ID 和 source ID,避免内容失去来源。
|
|
298
|
+
7. 合同 digest 基于规范化 JSON 计算,不受键顺序和空白影响。
|
|
299
|
+
|
|
300
|
+
## 7. 模块边界
|
|
301
|
+
|
|
302
|
+
```text
|
|
303
|
+
bin/project-context.mjs
|
|
304
|
+
src/project-context/
|
|
305
|
+
approver.mjs
|
|
306
|
+
authoring.mjs
|
|
307
|
+
checker.mjs
|
|
308
|
+
cli.mjs
|
|
309
|
+
contract-schema.mjs
|
|
310
|
+
canonical-json.mjs
|
|
311
|
+
discovery.mjs
|
|
312
|
+
errors.mjs
|
|
313
|
+
io.mjs
|
|
314
|
+
maintenance.mjs
|
|
315
|
+
path-policy.mjs
|
|
316
|
+
project-store.mjs
|
|
317
|
+
projection-store.mjs
|
|
318
|
+
renderer.mjs
|
|
319
|
+
source-reader.mjs
|
|
320
|
+
scope-compiler.mjs
|
|
321
|
+
test/project-context/
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
- `source-reader` 只读取和哈希来源。
|
|
325
|
+
- `authoring` 只构造/登记显式 source 和单 item proposal,不批准内容。
|
|
326
|
+
- `discovery` 产生 proposal,不接触 approved 状态。
|
|
327
|
+
- `scope-compiler` 是纯函数,不访问 Runtime。
|
|
328
|
+
- `projection-store` 是唯一可写目标项目文件的模块。
|
|
329
|
+
- 所有模块使用 Node.js 标准库;不安装依赖。
|
|
330
|
+
|
|
331
|
+
## 8. 输出与退出码
|
|
332
|
+
|
|
333
|
+
所有命令支持人类摘要;`--json` 输出稳定机器结果。
|
|
334
|
+
|
|
335
|
+
```text
|
|
336
|
+
0 success / no findings
|
|
337
|
+
1 validation or drift findings
|
|
338
|
+
2 invalid input or unsupported project state
|
|
339
|
+
3 managed-file ownership conflict
|
|
340
|
+
4 unexpected internal failure
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
错误报告至少包含 code、message、相关 item/source/path 和建议的人工下一步。不得建议自动重试 Provider 或自动覆盖文件。
|
|
344
|
+
|
|
345
|
+
## 9. 程序明确禁止
|
|
346
|
+
|
|
347
|
+
源码和测试静态禁止:
|
|
348
|
+
|
|
349
|
+
- OpenAI、Anthropic、Gemini 或其他 Provider SDK/HTTP 调用;
|
|
350
|
+
- `child_process` 执行 shell、项目命令、Git 或第三方 CLI;
|
|
351
|
+
- `git add/commit/branch/switch/checkout/merge/push/reset/clean/stash` 等任何 Git 写语义;
|
|
352
|
+
- 修改 `.vue`、`.ts`、`.tsx` 等业务源文件;
|
|
353
|
+
- 自动安装 Ruler、Rulesync 或依赖;
|
|
354
|
+
- candidate、session、validation record、decision、delivery 和 retry loop。
|
|
355
|
+
|
|
356
|
+
## 10. 实现顺序
|
|
357
|
+
|
|
358
|
+
1. schema、规范化 JSON、path policy;
|
|
359
|
+
2. contract 读取与 `check`;
|
|
360
|
+
3. scope compiler 和 Context Bundle renderer;
|
|
361
|
+
4. projection ownership 与安全写入;
|
|
362
|
+
5. deterministic discovery;
|
|
363
|
+
6. approve 合并;
|
|
364
|
+
7. CLI 整合与完整 fixture 验收;
|
|
365
|
+
8. 通用 register/propose、approval 预检、renderer v2 和 A-15 至 A-20。
|
|
366
|
+
9. 来源 review/accept、同 ID revise、deprecate、pending reapproval、store 并发补强和 A-21 至 A-30。
|
|
367
|
+
|
|
368
|
+
任何一步都不需要真实项目任务或 Provider。
|
|
369
|
+
|
|
370
|
+
## 11. `0.7.0` Knowledge Maintenance Closure 实现结果
|
|
371
|
+
|
|
372
|
+
`0.7.0` 已按 [12-KNOWLEDGE-MAINTENANCE-CLOSURE-ROADMAP.md](./12-KNOWLEDGE-MAINTENANCE-CLOSURE-ROADMAP.md) 的冻结设计完成本地实现。
|
|
373
|
+
|
|
374
|
+
实现没有改变本文件第 1 至第 9 节的产品形态与边界,也没有推倒重写现有模块。完成范围是:
|
|
375
|
+
|
|
376
|
+
- 新增只读 `review-source`、显式 `accept-source-change`、同 ID `revise`、显式 `deprecate`;
|
|
377
|
+
- 扩展既有 `approve`,以 `--pending` 明确批准 contract 内 proposed item;
|
|
378
|
+
- 复用 schema 1 的 approved/proposed/deprecated,使 source acceptance 确定撤销影响集旧 approval;
|
|
379
|
+
- 增加 pending finding、完整影响集与 projection stale 报告;
|
|
380
|
+
- 加固 project/projection store 的提交前快照和条件恢复;
|
|
381
|
+
- 增加 A-21 至 A-30,同时保持原 24 项通过,当前总计 34 项。
|
|
382
|
+
|
|
383
|
+
contract、proposal、source lock、projection lock schema 继续为 1,renderer 继续为 2。准确 CLI、影响集、原子性、错误、兼容和停止条件以 12 为准。当前实现版本为 `0.7.0`,已达到阶段 2 停止条件。
|
|
384
|
+
|
|
385
|
+
## 12. `0.8.0` Read-only Governance Dashboard 实现结果
|
|
386
|
+
|
|
387
|
+
看板已按 [13-READ-ONLY-GOVERNANCE-DASHBOARD-DESIGN.md](./13-READ-ONLY-GOVERNANCE-DASHBOARD-DESIGN.md) 的冻结设计完成本地实现。
|
|
388
|
+
|
|
389
|
+
它只增加 `dashboard --project PATH [--json]` 的只读派生出口:默认向 stdout 输出确定性的自包含 HTML,`--json` 输出同一短生命周期 View Model。它不写文件、不启动服务、不打开浏览器,不增加 store、schema、projection target、Provider、网络或 Git 能力。
|
|
390
|
+
|
|
391
|
+
实现新增纯派生 `dashboard-model.mjs` 和确定性 `dashboard-renderer.mjs`,只复用现有 checker、source impact、scope compiler、canonical JSON 和 project loader。A-31 至 A-38 已通过,原 34 项无回归,当前共 42 项。
|
|
392
|
+
|
|
393
|
+
## 13. `0.9.0` Context 效率与治理加固
|
|
394
|
+
|
|
395
|
+
`0.9.0` 没有新增产品能力或第三方依赖,只收紧现有不变量并删除派生重复:
|
|
396
|
+
|
|
397
|
+
- 写入父目录逐级创建并校验 realpath,阻断“项目内 symlink + 尚不存在子目录”逃逸;
|
|
398
|
+
- verification 按 kind 校验字段语义,Contract value 拒绝非 JSON 值;proposal approval 只允许创建新 ID,同 ID 变化必须走带 baseline digest 的 `revise`;
|
|
399
|
+
- 相同知识集的多路径 Context 合并渲染;双语 statement 默认只输出中文主解释,可选 `en` 或 `all`;
|
|
400
|
+
- `approve --json` 返回紧凑回执,`--full-json` 显式保留旧的完整预览;
|
|
401
|
+
- Dashboard View Model 升为 2,删除可重算 canonicalValue/title;HTML 不再嵌入 View Model,搜索从可见记录建立缓存,空关系/验证/覆盖/同级差异不渲染;
|
|
402
|
+
- `RTK.md` 和 `PROJECT_STATE.json` 只承担启动路由与当前状态,不重复保存完整历史。
|
|
403
|
+
|
|
404
|
+
contract、proposal、source lock、projection lock schema 仍为 1。projection renderer 升为 3;renderer 1/2 可读但 stale,只有显式且所有权完整的 publish 才升级。运行版本为 `0.9.0`。
|
|
405
|
+
|
|
406
|
+
2026-09-08 的团队维护验收只使用隔离临时 fixture,按公开 CLI 完整覆盖 source change → review → accept → revise/deprecate → pending approval → stale check → republish → clean check,并再次通过 42 项全量回归;没有修改产品设计或代码边界。
|
|
407
|
+
|
|
408
|
+
## 14. `1.0.0` 正式发布候选
|
|
409
|
+
|
|
410
|
+
`1.0.0` 只冻结已经通过验收的 v1,不新增运行时能力。稳定公共接口为 `project-context` CLI;`src/project-context/` 继续作为包内实现,不承诺可由消费者直接导入。发布包只包含 bin、src、docs、examples、README、CHANGELOG、UPGRADING、PROJECT_STATE、RTK、LICENSE、NOTICE 和 package metadata,不包含测试、自托管 Contract 或本地生成物。PROJECT_STATE 与 RTK 随包提供,是为了保持 README/设计文档的相对链接完整,不把它们提升为消费项目的 Contract。
|
|
411
|
+
|
|
412
|
+
发布候选采用 Apache-2.0,版权主体为 `Copyright 2026 Fushan`。2026-09-08 后续授权已选择 public npm 并解除 private 安全闩;当前发布状态和外部权限以 PROJECT_STATE 为准,详细 Gate 见 [14-FORMAL-RELEASE-READINESS.md](./14-FORMAL-RELEASE-READINESS.md)。
|
|
413
|
+
|
|
414
|
+
## 15. 首次发布前 Source Lifecycle Closure 实现结果
|
|
415
|
+
|
|
416
|
+
发布候选后续审查发现:现有 CLI 能接受同一 locator 上的 source 内容变化,却不能关闭已登记来源删除、搬迁或永久退役后的 `source-missing`。`register` 拒绝同 ID locator 变化,`accept-source-change` 拒绝 missing/unreadable,而 schema 1 没有 source lifecycle;这会迫使维护者直接编辑内部 JSON。
|
|
417
|
+
|
|
418
|
+
[15-SOURCE-LIFECYCLE-CLOSURE-DESIGN.md](./15-SOURCE-LIFECYCLE-CLOSURE-DESIGN.md) 冻结的最小修补已经实现:
|
|
419
|
+
|
|
420
|
+
- Contract reader 同时验证 schema 1/2;schema 2 source 显式使用 active/deprecated lifecycle;
|
|
421
|
+
- 新增默认 preview 的 `deprecate-source`,写入要求 source object baseline、署名、理由、无当前引用和本命令 `--write`;
|
|
422
|
+
- proposed/approved item 不得引用 deprecated source,deprecated item 可保留历史 provenance;
|
|
423
|
+
- checker/source reader 跳过 deprecated locator IO,source lock 不得保留 deprecated entry;
|
|
424
|
+
- schema 1 只在第一次成功来源废弃时延迟升为 2;proposal 与两个 lock 保持 schema 1,renderer 保持 3;
|
|
425
|
+
- Dashboard View Model 升为 3,只增加 deprecated 状态与审计字段;
|
|
426
|
+
- project 双 store 写入在提交前同时核对 contract、source lock 和 projection lock snapshot,并保持 lock-first 条件恢复。
|
|
427
|
+
|
|
428
|
+
A-40 至 A-45 和全部既有回归已通过,当前共 49 项。package 仍为 `1.0.0`;公开发布配置不新增 Provider、框架识别、source kind、projection target、调度、Git 管理或自动批准能力。
|