frontend-project-context 1.6.0 → 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 +22 -0
- package/README.md +92 -46
- package/UPGRADING.md +22 -1
- package/docs/05-ACCEPTANCE-CONTRACT.md +20 -1
- package/docs/08-INSTALLATION-AND-DISTRIBUTION.md +44 -21
- package/docs/14-FORMAL-RELEASE-READINESS.md +9 -5
- package/docs/19-POST-1.3.1-AI-TAKEOVER-EVIDENCE-AND-UPGRADE-PLAN.md +5 -5
- package/docs/20-PHASE-A-AI-TAKEOVER-AND-HEALTH-CLOSURE-DESIGN.md +11 -11
- package/docs/22-PHASE-C-TARGET-UPGRADE-PROTOCOL-DESIGN.md +4 -4
- 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 +22 -6
- package/docs/USER-AND-AI-OPERATION-MANUAL.md +73 -30
- package/examples/README.md +4 -4
- package/examples/package.json +1 -1
- package/migration-manifest.json +30 -8
- package/package.json +2 -2
- package/schemas/adaptive-context-bundle.schema.json +70 -0
- package/schemas/capabilities.schema.json +20 -6
- package/schemas/context-query.schema.json +69 -0
- package/schemas/coverage-audit.schema.json +32 -0
- package/schemas/evidence-bundle.schema.json +2 -2
- package/schemas/host-promotion-evidence.schema.json +33 -0
- package/schemas/migration-manifest.schema.json +3 -3
- package/schemas/migration-plan.schema.json +2 -2
- package/schemas/projection-lock.schema.json +1 -1
- 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 +2 -2
- package/schemas/upgrade-result-bundle.schema.json +1 -1
- 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 +9 -9
- package/src/project-context/assist.mjs +4 -2
- package/src/project-context/capabilities.mjs +18 -0
- package/src/project-context/checker.mjs +4 -3
- package/src/project-context/cli.mjs +40 -5
- package/src/project-context/contract-schema.mjs +1 -1
- package/src/project-context/discovery.mjs +7 -7
- package/src/project-context/exchange-schema.mjs +6 -5
- package/src/project-context/maintenance.mjs +2 -2
- package/src/project-context/migration-manifest.mjs +7 -5
- 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 +5 -1
|
@@ -0,0 +1,609 @@
|
|
|
1
|
+
# 26 — A-130 质量闭环与自适应交付协议修订设计
|
|
2
|
+
|
|
3
|
+
> 权威说明:本文冻结 A-130 两次真实 Host/Provider 失败后的下一轮设计、缺陷分类、实现边界与可证伪验收。产品身份和永久边界仍以 [00-PRODUCT-CONSTITUTION.md](./00-PRODUCT-CONSTITUTION.md) 为准;历史运行事实仍以 [24-A130-REAL-HOST-TARGET-PROJECT-COMPARISON.md](./24-A130-REAL-HOST-TARGET-PROJECT-COMPARISON.md) 为准。
|
|
4
|
+
>
|
|
5
|
+
> 状态:`design-implemented; local-195-of-195; bounded-provider-revalidation-passed; A-130-closed`
|
|
6
|
+
>
|
|
7
|
+
> 日期:`2026-09-12`
|
|
8
|
+
>
|
|
9
|
+
> 版本:目标仍是当前未发布的 `1.7.0`。本文的本地产品、schema、fixture、测试与文档实现权限已执行完毕;目标项目、Provider、Git、网络或发布写入权限仍只以 `PROJECT_STATE.json` 为准。
|
|
10
|
+
|
|
11
|
+
## 1. 结论先行
|
|
12
|
+
|
|
13
|
+
A-130 不能继续按“再缩短一点 prompt,重跑一次”处理。两次 8/8 对 7/8 都是有效的发布阻断证据,但现有实验不足以证明 selector 是唯一根因;进一步审计确认同时存在评测合同缺陷和独立协议缺陷。
|
|
14
|
+
|
|
15
|
+
下一轮必须按以下顺序收敛:
|
|
16
|
+
|
|
17
|
+
1. 先修复评测有效性:oracle 真值进入批准 Contract,两臂使用同一模型交付语法;
|
|
18
|
+
2. 再修复协议正确性:scope、previous lineage、严格 schema、ready/expansion 和非 ready 交付失败封闭;
|
|
19
|
+
3. 同批补齐真源裁定失败后的确定性恢复:程序不修改业务代码,但每个失败都必须进入可验证的人类裁定、Contract 动作、外部实现修复或显式未关闭状态;
|
|
20
|
+
4. 再修复质量策略:完整 Context 在明确交付预算内时优先,只有确实过大时才进入 dependency-backed adaptive;
|
|
21
|
+
5. 最后才允许新的真实 Host/Provider 成对复验;
|
|
22
|
+
6. 任何质量退化、scope 泄漏、证据缺口、未关闭真源裁定或不可解释的对照都继续阻断 `1.7.0`。
|
|
23
|
+
|
|
24
|
+
不采用针对 `priceList[0]` 的产品专用规则,也不把某个模型本次输出固化为 selector 逻辑。
|
|
25
|
+
|
|
26
|
+
## 2. 对既有 A-130 的重新判读
|
|
27
|
+
|
|
28
|
+
### 2.1 仍然成立的事实
|
|
29
|
+
|
|
30
|
+
- 首次对照和修复后复验均观察到完整臂 8/8、自适应臂 7/8;
|
|
31
|
+
- 修复后的模型投影本体为 4,017 字节,评测首包为 5,283 字节,但总 input tokens、命令数、耗时与质量都未改善;
|
|
32
|
+
- 同一个方向判断在两次自适应臂中失败;
|
|
33
|
+
- 因此现有 `1.7.0` 仍不能发布。
|
|
34
|
+
|
|
35
|
+
### 2.2 不能从现有证据推出的结论
|
|
36
|
+
|
|
37
|
+
- 不能断言唯一根因是 selector;
|
|
38
|
+
- 不能断言只要把 `priceList[0]` 语义写进 prompt 就证明核心已正确;
|
|
39
|
+
- 不能把单臂一次输出的 tokens、命令数或耗时当作稳定性能结论;
|
|
40
|
+
- 不能把完整臂偶然答对等同于完整 Context 已提供了必要真值。
|
|
41
|
+
|
|
42
|
+
### 2.3 当前 oracle 的关键无效点
|
|
43
|
+
|
|
44
|
+
隐藏 oracle 认定“每个 `priceDetail` 只代表一个方向,`priceList[0]` 是该明细的方向来源”。但现有 evaluation-only Contract 只要求检查“direction and per-segment numbering”,并未把上述业务不变量作为批准 fact/policy 交付给任一模型臂;生产源码本身也不能无歧义证明这一外部业务前提。
|
|
45
|
+
|
|
46
|
+
因此,自适应臂把 `priceList[0]` 视为可疑实现并不是 selector 漏掉某个已存在的 required item。当前对照证明了“结果发生退化”,却没有完成“必要项目真值已被两臂共同提供”的实验前提。下一轮必须先修 fixture,不能用隐藏真值惩罚一个按源码证据给出谨慎判断的 Host。
|
|
47
|
+
|
|
48
|
+
## 3. 已确认的设计缺陷
|
|
49
|
+
|
|
50
|
+
以下结论来自当前源码、公开 schema、两份 prompt 和只读最小复现;“潜在影响”不冒充已经发生过的生产事故。
|
|
51
|
+
|
|
52
|
+
| 等级 | 缺陷 | 当前证据 | 判定 |
|
|
53
|
+
| --- | --- | --- | --- |
|
|
54
|
+
| P0 | oracle 真值未进入批准 Contract | A-130 Contract 只有检查标题,没有 `priceDetail` 单方向不变量 | 评测合同缺陷;新的 Provider 运行前必须修 |
|
|
55
|
+
| P0 | 两臂模型输入语法不一致 | 完整臂把 Markdown 放在 JSON `content` 字符串中,修复后自适应臂直接放 Markdown | 对照变量不唯一;现有结果不能做唯一因果归因 |
|
|
56
|
+
| P0 | fallback 比较了错误对象 | `completeDeliveryBytes` 与审查 JSON 的 `bundle.budget.usedUtf8Bytes` 比较 | 审查包络大小不应决定模型交付策略 |
|
|
57
|
+
| P0 | 显式 item ID 绕过 scope | selector 只检查 ID 存在;renderer 会把不适用项塞进第一个 target | 已最小复现 sibling 项泄漏,违反 scope 隔离 |
|
|
58
|
+
| P0 | previous bundle 未绑定同一任务 | 只核对 Project snapshots,不核对 task/path/topic/query lineage | 已最小复现 flight 文件级 validation 被保留到 `src/main.js` 新任务 |
|
|
59
|
+
| P0 | previous/公开 Bundle 校验过宽 | runtime 仅校验少数字段,公开 schema 大量使用无约束 object | 已最小复现缺少 project、level、findings 等字段的 bundle 仍被 runtime 接受 |
|
|
60
|
+
| P0 | 非 ready 的 `--prompt` 仍输出正文 | CLI 以退出码 1 返回,但 stdout 仍有模型内容 | 忽略退出码的 Host 可能消费不完整或 blocked 上下文 |
|
|
61
|
+
| P0 | complete 模式可能交付未审计项 | 当前先按 adaptive selected items 审计来源,再把 delivery 切成全部 applicable items | complete prompt、source evidence 和 read targets 可能不一致 |
|
|
62
|
+
| P0 | 空 target 进入不可恢复状态 | 当前空 paths 返回 `needs-expansion`,但新 lineage 又禁止 expanded 改 paths | schema 必须直接拒绝空 paths,并用 `.` 显式表达 project scope |
|
|
63
|
+
| P0 | override target 可被关系闭包重新带回 | `effectiveItems` 已抑制被覆盖项,后续 relationship closure 却会把 override target 加回 | 旧值可能与有效窄作用域值同时进入 prompt |
|
|
64
|
+
| P0 | withheld delivery 的 schema 语义不明确 | blocked/needs-expansion 仍可能携带看似可用的 mode、item IDs 和 digest | 审查面必须能证明正文未生成、未授权消费 |
|
|
65
|
+
| P0 | 直接修改共享 renderer 会漂移既有持久投影 | `renderContextBundle` 同时服务 task context 与受管 projection | A-130 修复不得暗中触发 renderer 版本和投影迁移 |
|
|
66
|
+
| P0 | 真源恢复只给类别和占位式重跑 | 多个 recovery preview 仅返回 `reconcile-truth --input <resolution-kind.json>`,没有输入合同、上一 Review 绑定或终态证明 | Host 可反复重跑但无法机器证明已解决,闭环不完整 |
|
|
67
|
+
| P1 | 任一 routed 命中即可消除 candidate miss | 一个低价值 reference 命中就足以让“存在其他适用 routed item”不再触发扩展 | `ready` 可能高估证据充分性 |
|
|
68
|
+
| P1 | `expanded` 无条件水合全部适用 fact/reference | `query.level !== initial` 即选中全部 routed 项 | 从稀疏首包直接跳到全量,没有指定邻接扩展 |
|
|
69
|
+
| P1 | 路由词来源被非语义字段污染 | index 把 kind、scope path、source locator 当语义词,却不索引 canonical value | 文件名或 `reference` 等通用词可误召回,真实值中的关键词反而可能缺失 |
|
|
70
|
+
| P1 | 英文形态、camelCase 与中文短语路由脆弱 | 当前只按标点切分并做精确 token 相等 | 项目数据可通过批准 alias 补充,核心不应假装通用语义理解 |
|
|
71
|
+
| P1 | 模型 prompt 重复公共项并暴露 source locator | project-scope 项按每个 target 重复,Source index 包含被禁止读取的 oracle 路径 | 增加噪声、泄露不必要 locator,并可能诱导越界读取 |
|
|
72
|
+
| P1 | `contractCoverage=approved-evidence-closure` 语义过强 | 没有声明依赖时也可返回该值 | 只能证明已选集合结构闭合,不能证明任务所需语义完整 |
|
|
73
|
+
| P1 | A-130 测量不可稳定解释 | 单次结果、两臂执行顺序固定,且总 tokens 混合 prompt、工具输出和 Host 轨迹 | 需要成对重复、顺序平衡和分层计量 |
|
|
74
|
+
| P1 | 合法的新建/删除路径会被当作证据缺口 | 当前要求每个 task path 在磁盘中存在 | scope 编译不应把路径存在性误当成任务真值 |
|
|
75
|
+
| P1 | audit hard budget 与 task readiness 的关系未定义 | 完整审查对象可能超过 audit max,但这不等于模型正文不安全 | JSON 输出容量与模型交付健康必须分离 |
|
|
76
|
+
| P1 | complete 与 adaptive 的支配规则不完整 | 完整正文刚超过 soft threshold 时,adaptive 可能反而更大 | 候选不节省时不得让质量优先路径退化 |
|
|
77
|
+
| P1 | expansion 请求集合和预算变化缺少约束 | 任意 subject/source 或缩小预算都可能重解释 previous | 请求必须来自上一包目录,预算只能保持或单调放宽 |
|
|
78
|
+
| P1 | 结构校验与 live Contract 校验未分层 | 独立 schema validator 无法证明 item 当前 approved、effective 且 scope 合法 | previous ingestion 必须增加 project-bound semantic validation |
|
|
79
|
+
| P1 | `level=complete` 的用途未冻结 | 当前 complete 同时影响选择和 strict audit,但新算法又可自动选择 complete | 必须限定为无 previous 的只读基准模式,不能成为 expansion 捷径 |
|
|
80
|
+
| P1 | 裁定失败未区分 Contract 修正与外部代码修复 | “source 不对”可能是来源记录错误,也可能是代码真实但违反 policy | 核心不得改代码;两条恢复路径和返回证据必须分开 |
|
|
81
|
+
|
|
82
|
+
## 4. 非缺陷与边界
|
|
83
|
+
|
|
84
|
+
以下问题不得被错误推入内核:
|
|
85
|
+
|
|
86
|
+
- 项目没有把 `priceDetail` 方向不变量录入 Contract,是项目数据/评测 fixture 缺口;核心不能自动猜出该业务语义;
|
|
87
|
+
- 模型在源码存在歧义时选择 `uncertain` 或指出风险,不自动构成产品缺陷;
|
|
88
|
+
- Host 如何读取业务源码、调用什么模型、如何执行开发任务仍在产品外;
|
|
89
|
+
- Provider token cache、模型采样与墙钟抖动不能由核心控制;核心只能提供可复现输入和可核对证据;
|
|
90
|
+
- 不新增 Vue、机票、`priceList` 或 `segmentInfoList` 专用识别逻辑。
|
|
91
|
+
|
|
92
|
+
## 5. 修订后的协议目标
|
|
93
|
+
|
|
94
|
+
### 5.1 质量优先的三种交付
|
|
95
|
+
|
|
96
|
+
模型交付只允许三种结果:
|
|
97
|
+
|
|
98
|
+
1. `complete`:当前 targets 的完整适用 Context 在明确的模型交付阈值内;
|
|
99
|
+
2. `adaptive`:完整 Context 超过阈值,返回 mandatory + declared dependency closure + 确定性高召回候选;
|
|
100
|
+
3. `blocked`:必要证据、scope、lineage、schema、freshness 或硬预算不满足,不输出可供模型执行的正文。
|
|
101
|
+
|
|
102
|
+
审查 JSON 的字节数不再参与 `complete | adaptive` 决策。
|
|
103
|
+
|
|
104
|
+
`Adaptive Context Bundle` 将交付状态与交付模式分开:
|
|
105
|
+
|
|
106
|
+
- `delivery.status=ready` 时,`delivery.mode` 只能是 `complete | adaptive`,并携带非空的 canonical content digest、实际 UTF-8 bytes 和全部交付 item IDs;
|
|
107
|
+
- `taskHealth=needs-expansion | blocked` 时,`delivery.status=withheld`、`mode=null`、`itemIds=[]`、`contentDigest=null`、`utf8Bytes=0`;审查 JSON 可以解释原因,但不存在可被误用的模型正文;
|
|
108
|
+
- `--prompt` 只接受第一种状态。
|
|
109
|
+
|
|
110
|
+
选择规则还必须满足支配关系:若 adaptive 正文不比 complete 正文小,而 complete 未超过 delivery hard max,则选择 complete;若两者都超过 hard max,则 blocked。不能只因 complete 略高于 soft threshold 就交付一个更大、证据更弱的 adaptive prompt。
|
|
111
|
+
|
|
112
|
+
### 5.2 Context Query schema 2
|
|
113
|
+
|
|
114
|
+
`Context Query` schema 2 将审查、模型交付和 read target 三类预算分开:
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"schemaVersion": 2,
|
|
119
|
+
"kind": "context-query",
|
|
120
|
+
"projectId": "example",
|
|
121
|
+
"snapshots": {
|
|
122
|
+
"contract": "sha256:...",
|
|
123
|
+
"sourcesLock": "sha256:...",
|
|
124
|
+
"projectionsLock": "sha256:..."
|
|
125
|
+
},
|
|
126
|
+
"task": {
|
|
127
|
+
"text": "original user request",
|
|
128
|
+
"paths": ["src/feature/example.ts"],
|
|
129
|
+
"topics": ["authentication"],
|
|
130
|
+
"itemIds": [],
|
|
131
|
+
"changedPaths": []
|
|
132
|
+
},
|
|
133
|
+
"level": "initial",
|
|
134
|
+
"freshness": "snapshot-and-signal-bound",
|
|
135
|
+
"budget": {
|
|
136
|
+
"audit": {
|
|
137
|
+
"targetUtf8Bytes": 32768,
|
|
138
|
+
"maxUtf8Bytes": 131072
|
|
139
|
+
},
|
|
140
|
+
"delivery": {
|
|
141
|
+
"completeBelowUtf8Bytes": 16384,
|
|
142
|
+
"maxUtf8Bytes": 131072
|
|
143
|
+
},
|
|
144
|
+
"readTargets": {
|
|
145
|
+
"target": 12,
|
|
146
|
+
"max": 64
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"expansion": null
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
示例数值只冻结 A-130 fixture 的输入,不定义全产品默认真理。`completeBelowUtf8Bytes <= delivery.maxUtf8Bytes` 必须成立。
|
|
154
|
+
|
|
155
|
+
`task.paths` 至少包含一个规范化路径;project-wide 任务必须显式使用 `"."`。空数组是 schema error,不返回无法靠同任务 expansion 修复的 `needs-expansion`。路径仅定义预期 scope,可以指向尚未创建的目标或已删除的 changed path;核心报告 `existing | prospective-or-deleted` 状态,但不得仅因路径当前不存在而阻断。
|
|
156
|
+
|
|
157
|
+
`level` 保留 `initial | expanded | complete`,但 `complete` 仅是无 `--previous`、无 expansion 对象的只读完整基准模式:它强制使用同一 task-delivery renderer 输出全部 effective applicable items,并执行这些交付项的完整来源/verification 审计。正常 Host 不得用它绕过一次 targeted expansion;A-130-L 的 full arm 使用该模式形成可复现基准。
|
|
158
|
+
|
|
159
|
+
`expanded` 查询必须增加严格对象:
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"expansion": {
|
|
164
|
+
"previousBundleDigest": "sha256:...",
|
|
165
|
+
"requestedItemIds": [],
|
|
166
|
+
"requestedSubjects": [],
|
|
167
|
+
"requestedSourceIds": []
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### 5.3 task lineage
|
|
173
|
+
|
|
174
|
+
Bundle schema 2 必须包含核心计算的 `taskDigest`。它绑定:
|
|
175
|
+
|
|
176
|
+
- `projectId`;
|
|
177
|
+
- 原始 task text;
|
|
178
|
+
- paths、topics、changedPaths;
|
|
179
|
+
- freshness;
|
|
180
|
+
- 初始显式 item IDs。
|
|
181
|
+
|
|
182
|
+
它不绑定 level 和预算,因此同一任务可以在安全上限内扩展。`--previous` 只有同时满足以下条件才可用:
|
|
183
|
+
|
|
184
|
+
- schema 2 且 self-digest 有效;
|
|
185
|
+
- Project snapshots 相同;
|
|
186
|
+
- `taskDigest` 相同;
|
|
187
|
+
- expansion.previousBundleDigest 与实际文件相同;
|
|
188
|
+
- expansion depth 从 0 增至 1;
|
|
189
|
+
- `task.itemIds` 与 initial query 完全相同;新增请求只存在于 expansion 的三个 requested 集合中、只增不减且仍适用于当前 targets。
|
|
190
|
+
- requested item/subject/source 必须来自 previous Bundle 已公开的 applicable deferred candidate 目录;未知、歧义或未公开请求 blocked,不能借 expansion 探测 sibling metadata;
|
|
191
|
+
- complete threshold、audit/delivery/read-target hard limits 和 soft targets只能保持或单调放宽,不能在继承正文后缩小预算并重解释旧计数。
|
|
192
|
+
|
|
193
|
+
改变 task、paths、topics、changedPaths 或 freshness 必须创建新的 initial query,不得继承旧正文。最多允许一次 targeted expanded;仍不足时只能进入 complete 或 blocked,避免自动循环。
|
|
194
|
+
|
|
195
|
+
expanded 的审查 JSON 只在 `hydratedItems` 中携带新增正文、以 `retainedItemIds` 证明上一包内容;但 `--prompt` 始终重新生成一份自包含的累计 canonical 正文,不假设 Provider 会话保存了 previous。它的 item IDs、bytes 和 digest 必须绑定累计实际内容。
|
|
196
|
+
|
|
197
|
+
### 5.4 scope 不能被检索信号扩权
|
|
198
|
+
|
|
199
|
+
- `task.itemIds` 只可选择对至少一个 target path 有效的 approved item;
|
|
200
|
+
- 不存在返回 `requested-item-unavailable`;存在但不适用返回 `requested-item-out-of-scope` 并 blocked;
|
|
201
|
+
- “有效”必须使用既有 `effectiveItems` 的 override 抑制结果,而不是只做 `scopeApplies`;显式请求被有效窄项覆盖的旧 item 时返回 `requested-item-not-effective`,不得重新加入旧正文;
|
|
202
|
+
- relationship/dependency/conflict closure 每次加入项前都重新验证适用 scope;
|
|
203
|
+
- override edge 只作为审查 provenance;交付时按每个 target 解析最窄有效项,绝不把已被覆盖的 target body 当作 relationship closure 加回;
|
|
204
|
+
- previous retained items 必须再次核对当前 task lineage 和 scope;
|
|
205
|
+
- renderer 删除“把 explicitOutsideScope 放入第一个 section”的路径;
|
|
206
|
+
- deferred/shared-source 目录只列出适用项,不暴露 sibling item metadata。
|
|
207
|
+
|
|
208
|
+
### 5.5 声明式 evidence dependency
|
|
209
|
+
|
|
210
|
+
不升级 Project Contract store。使用一个普通、人工批准的 project-scope policy 表达检索关系:
|
|
211
|
+
|
|
212
|
+
```json
|
|
213
|
+
{
|
|
214
|
+
"kind": "policy",
|
|
215
|
+
"subject": "project.context-retrieval",
|
|
216
|
+
"value": {
|
|
217
|
+
"rules": [
|
|
218
|
+
{
|
|
219
|
+
"itemId": "validation-non-whitelist-dialog",
|
|
220
|
+
"requires": ["fact-price-detail-direction-invariant"],
|
|
221
|
+
"aliases": ["priceDetail direction", "priceList first price"]
|
|
222
|
+
}
|
|
223
|
+
]
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
规则:
|
|
229
|
+
|
|
230
|
+
- profile 本身仍是 Project Contract item,有 source、scope、status 和人工批准;
|
|
231
|
+
- `itemId/requires` 必须引用已批准项,不得自环或成环;
|
|
232
|
+
- dependency 的 scope 必须覆盖 requiring item 的适用范围,否则 blocked;
|
|
233
|
+
- dependency 必须按每个 target 通过现有 override 语义解析:若 required ID 在该 target 被批准的窄项覆盖,则交付有效 override;若不存在唯一有效结果、发生 conflict 或越界则 blocked;
|
|
234
|
+
- dependency closure 可传递,并保留 selection reason;
|
|
235
|
+
- alias 只改善召回,不改变 item value、scope、authority 或 truth;
|
|
236
|
+
- 没有批准 profile 时仍兼容现有 Contract,但不得宣称任务语义完整。
|
|
237
|
+
|
|
238
|
+
A-130 fixture 必须新增独立批准 fact,明确记录每个 `priceDetail` 的方向不变量,并由 validation item 声明依赖。隐藏 oracle 只负责评分,不再持有模型从未获得的唯一业务真值。
|
|
239
|
+
|
|
240
|
+
### 5.6 路由信号纪律
|
|
241
|
+
|
|
242
|
+
Routing Index schema 2 的自动 terms 只来自:
|
|
243
|
+
|
|
244
|
+
- item ID;
|
|
245
|
+
- subject;
|
|
246
|
+
- statement;
|
|
247
|
+
- canonical value 中的字符串和键;
|
|
248
|
+
- retrieval profile 中人工批准的 aliases。
|
|
249
|
+
|
|
250
|
+
不得把 kind、scope path 或 source locator 当作隐式语义命中。规范化必须确定性拆分 dot/kebab/snake/camelCase 和字母数字边界;中文跨词表达依赖批准 alias,不引入模型、词典或框架白名单。
|
|
251
|
+
|
|
252
|
+
旧 Routing Index schema 1 一律视为 stale 派生物,在内存中按 schema 2 重建;不迁移、不提升为真源。
|
|
253
|
+
|
|
254
|
+
### 5.7 ready、coverage 与 expansion
|
|
255
|
+
|
|
256
|
+
Bundle 不再用一个模糊的 `approved-evidence-closure` 表示完整性,至少分别报告:
|
|
257
|
+
|
|
258
|
+
- `mandatoryCoverage: complete | blocked`;
|
|
259
|
+
- `declaredDependencyCoverage: complete | missing | not-declared`;
|
|
260
|
+
- `retrievalStatus: matched | no-candidate | ambiguous | complete`;
|
|
261
|
+
- `semanticCompleteness: not-claimed`;
|
|
262
|
+
- `freshness` 和 `registrationCoverage` 保持独立。
|
|
263
|
+
|
|
264
|
+
一个 generic reference 命中不能代替另一个 validation 的依赖闭包。`taskHealth=ready` 只表示所有已声明 mandatory/dependency、scope、freshness 和预算条件满足;它永远不声称发现了项目全部隐式真值。
|
|
265
|
+
|
|
266
|
+
`expanded` 只加入调用方在上一 Bundle 候选目录中明确请求的 item/subject/source 邻接项及其 dependency closure,不再自动水合所有 applicable fact/reference。
|
|
267
|
+
|
|
268
|
+
任何 delivery mode 决定后,都必须以最终 `delivery.itemIds × targets` 重新计算并核对来源、verification、evidence edges 和 read targets。特别是从 adaptive 切换为 complete 时,不得复用较小 selected set 的审计结果。非本地 source 的不可验证性质必须明确报告,不能伪装成 `current`。
|
|
269
|
+
|
|
270
|
+
audit budget 只约束 `--json` 审查载体,不参与 `taskHealth` 或 complete/adaptive 选择。若完整审查 JSON 超过 audit hard max,`--json` stdout 为空并以稳定 `audit-budget-insufficient` 错误返回所需字节数;同一查询的 `--prompt` 仍可在全部安全检查和 delivery budget 通过时输出。不得截断审查结构后声称 schema-valid。
|
|
271
|
+
|
|
272
|
+
### 5.8 模型投影与失败封闭
|
|
273
|
+
|
|
274
|
+
完整臂与自适应臂统一使用同一个 canonical Markdown renderer:
|
|
275
|
+
|
|
276
|
+
- 原始 task 只出现一次;
|
|
277
|
+
- project-scope 公共项只出现一次,放在 `Applies to all targets`;
|
|
278
|
+
- 各 target 只显示自身 delta;
|
|
279
|
+
- prompt 中保留 source IDs 作为 provenance,但默认不输出 source locator;
|
|
280
|
+
- locator、deferred 目录、健康、预算和扩展入口只在 `--json` 审查面;
|
|
281
|
+
- Host 外层 wrapper 对所有 arm 逐字节一致,禁止一臂 JSON-string、一臂直接 Markdown。
|
|
282
|
+
|
|
283
|
+
该 renderer 是新的 task-delivery rendering path,供 `context-query` 的 complete/adaptive 和 A-130 full/candidate 两臂共同调用;既有 `context`、AGENTS/Ruler projection 的持久字节、`RENDERER_VERSION` 和 ownership lock 保持不变。若实现发现必须改变持久 projection renderer,立即停止并另行设计 renderer migration,不能夹带在 A-130 修复中。
|
|
284
|
+
|
|
285
|
+
`context-query --prompt` 仅在 `taskHealth=ready` 时向 stdout 输出正文。`needs-expansion | blocked` 时 stdout 必须为空,stderr 返回稳定机器错误并引导 Host 读取 `--json`。不增加隐式 `--allow-partial`。
|
|
286
|
+
|
|
287
|
+
### 5.9 严格公开 schema 与 runtime invariants
|
|
288
|
+
|
|
289
|
+
Context Query、Adaptive Context Bundle 和 Routing Index 升至 schema 2。因为 schema 1 从未随公共 `1.6.0` 发布,旧短生命周期工件要求重新生成,不做持久迁移。
|
|
290
|
+
|
|
291
|
+
Adaptive Context Bundle schema 2 不允许裸 `type: object`。所有对象必须 `additionalProperties: false`,所有数组成员有精确结构。runtime validator 与公开 schema 同时验证:
|
|
292
|
+
|
|
293
|
+
- required/unknown fields;
|
|
294
|
+
- 唯一且稳定排序的 ID/path/source 集合;
|
|
295
|
+
- hydrated、retained、deferred、delivery item 集合互斥或合法包含关系;
|
|
296
|
+
- delivery digest/bytes 与实际 renderer 内容一致;
|
|
297
|
+
- taskDigest、previous digest、expansion depth;
|
|
298
|
+
- budget 计数与实际集合/字节一致;
|
|
299
|
+
- finding、guarantee、selection reason 和 source evidence 的合法枚举;
|
|
300
|
+
- Bundle 中任何 item ID 都存在于当前批准 Contract 且 scope 有效。
|
|
301
|
+
|
|
302
|
+
校验分两层:纯 schema/runtime parser 负责结构、枚举、排序和 self-digest;`context-query --previous` 随后必须调用 project-bound semantic validator,以 live Contract、targets 和 snapshots 证明每个 item/source 当前 approved、effective、可用且 scope 合法。纯 artifact parser 不得宣称完成 live Project 校验。
|
|
303
|
+
|
|
304
|
+
Capabilities 与 Exchange Protocol 随公开 schema 升至 7;Action Plan、Review Bundle、Project Contract 和持久 store 不变化。
|
|
305
|
+
`ADAPTIVE_SELECTOR_VERSION` 同步升至 2;Migration Manifest 2、capabilities schema、package schema 清单、README/UPGRADING/CHANGELOG 和 release acceptance 必须准确声明 Context Query、Adaptive Bundle、Routing Index 2 的 regenerate/invalidate 语义,以及 Exchange Protocol 7 的 readable/written 矩阵。
|
|
306
|
+
|
|
307
|
+
## 6. 确定性交付算法
|
|
308
|
+
|
|
309
|
+
```text
|
|
310
|
+
validate query schema/snapshots/task lineage
|
|
311
|
+
→ compute effective items for exact targets
|
|
312
|
+
→ reject explicit or retained out-of-scope items
|
|
313
|
+
→ select all applicable policy/validation
|
|
314
|
+
→ close declared dependencies and resolve overrides per target; block applicable conflicts
|
|
315
|
+
→ compute canonical complete prompt and adaptive prompt
|
|
316
|
+
→ if complete bytes <= completeBelow and <= delivery max: complete
|
|
317
|
+
→ else route fact/reference using disciplined terms + approved aliases
|
|
318
|
+
→ close dependencies again
|
|
319
|
+
→ if candidate evidence is incomplete: needs-expansion and withhold delivery
|
|
320
|
+
→ if adaptive bytes >= complete bytes and complete <= delivery max: complete
|
|
321
|
+
→ if chosen prompt > delivery max: blocked and withhold delivery
|
|
322
|
+
→ recompute and validate every final delivery item/source/verification/read target
|
|
323
|
+
→ compute independent task, delivery and audit health guarantees
|
|
324
|
+
→ emit strict audit JSON only within audit max
|
|
325
|
+
→ emit self-contained prompt only when taskHealth and delivery.status are ready
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
任何步骤不得以审查 JSON 字节数、某个通用词命中或 source 文件名替代任务证据充分性。
|
|
329
|
+
|
|
330
|
+
## 7. Truth Resolution Closure
|
|
331
|
+
|
|
332
|
+
本节是 [docs/25](./25-REAL-PROJECT-SOURCE-OF-TRUTH-MAINTENANCE-DESIGN.md) 的实现闭环修复增量。docs/25 继续定义真源、候选、晋升、角色与长期语义;本文只补齐“不通过以后怎样确定性收敛”。它与 A-130 同批实施和验收,但不把真实项目 A-144、Git/CI Sidecar 或业务代码执行纳入范围。
|
|
333
|
+
|
|
334
|
+
### 7.1 永久边界
|
|
335
|
+
|
|
336
|
+
- `reconcile-truth` 和本闭环始终只读,不修改 source 文件、业务代码、Git、CI、制品或外部系统;
|
|
337
|
+
- 程序判断 schema、digest、baseline、scope、evidence 和 validation 是否满足,不能判断哪条业务语义天然正确;
|
|
338
|
+
- 人工选择 resolution 仍不是 Contract approval;任何 Contract 写入继续复用现有精确 `register/review-source/accept-source-change/propose/revise/deprecate/approve/sync/check` 原语;
|
|
339
|
+
- 代码真实存在但违反已批准 policy 时,代码仍作为当前实现 fact 保留,程序返回 `external-implementation-fix-required`,由另行授权的外部开发任务修复;
|
|
340
|
+
- candidate、resolution attempt 和 Review Bundle 都是短生命周期 Host 工件,不建立持久队列、DecisionRecord 或第二真源。
|
|
341
|
+
|
|
342
|
+
### 7.2 schema 2 与上一轮绑定
|
|
343
|
+
|
|
344
|
+
Truth Reconciliation Input 和 Truth Reconciliation Review Bundle 同步升至 schema 2。CLI 扩展为:
|
|
345
|
+
|
|
346
|
+
```text
|
|
347
|
+
project-context reconcile-truth --project PATH --input FILE... [--previous-review FILE] --json
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
初次运行禁止 `--previous-review`。恢复运行必须同时提供:
|
|
351
|
+
|
|
352
|
+
- self-digest 有效的上一份 Review Bundle schema 2;
|
|
353
|
+
- Input 中 `resolutionAttempt.previousReviewDigest` 与实际文件逐字节 digest 一致;
|
|
354
|
+
- 相同 project、task ID 和受影响 scope 身份;
|
|
355
|
+
- `decisions[]` 中每个 `findingDigest` 确实存在于上一 Review,且 `resolutionKind` 是该 finding 当时公开的允许值;
|
|
356
|
+
- 当前 Project snapshots、source/item baselines 和新 evidence 重新从 live state 读取,不沿用上一轮 current 结论。
|
|
357
|
+
|
|
358
|
+
旧 schema 1 输入和 Review Bundle 属于未发布的短生命周期工件:必须重新生成,不能作为 `--previous-review`。schema 2 resolution attempt 只是 Host 提交的无权限选择,不含 `approval/by/write`,不能直接执行动作。
|
|
359
|
+
|
|
360
|
+
### 7.3 finding resolution contract
|
|
361
|
+
|
|
362
|
+
每个 finding schema 2 必须带稳定 `findingDigest` 和完整 `resolutionContract`:
|
|
363
|
+
|
|
364
|
+
```json
|
|
365
|
+
{
|
|
366
|
+
"resolutionState": "needs-human-decision",
|
|
367
|
+
"resolutionKinds": ["keep-current-baseline"],
|
|
368
|
+
"requiredHumanInputs": [],
|
|
369
|
+
"nextActions": [],
|
|
370
|
+
"requiredPostResolutionEvidence": [],
|
|
371
|
+
"completionCriteria": [],
|
|
372
|
+
"recomputeFromCurrentBaseline": true
|
|
373
|
+
}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
`resolutionState` 只允许:
|
|
377
|
+
|
|
378
|
+
- `needs-human-decision`:语义或候选取舍未选;
|
|
379
|
+
- `contract-action-required`:需要现有 Contract/source 治理动作;
|
|
380
|
+
- `external-fix-required`:需要产品外代码、测试、制品或来源内容修复;
|
|
381
|
+
- `revalidation-required`:动作已声明完成,但 live 证据尚未证明闭环;
|
|
382
|
+
- `resolved`:上一 finding 已消失且全部 completion criteria 通过;
|
|
383
|
+
- `deferred-open`:人工明确延期,仍是未关闭状态。
|
|
384
|
+
|
|
385
|
+
`nextActions` 必须是现有 CLI 的结构化 preview,或者明确的 `externalAction`,禁止只返回 `<compose-compatible-changes.json>` 一类无 schema 占位符。需要新 value、scope、source 或 owner 判断时,在 `requiredHumanInputs` 中列出精确字段;核心不能猜值。
|
|
386
|
+
|
|
387
|
+
### 7.4 四条恢复分支
|
|
388
|
+
|
|
389
|
+
1. **证据或 baseline 过期**:刷新 Host evidence/snapshots,带上一 Review 重跑;未刷新前为 `revalidation-required`,不修改 Contract。
|
|
390
|
+
2. **source/Contract 记录错误**:生成精确 source/item 影响和现有治理动作;人执行并批准后 `sync/check`,再从新 baseline 重跑。
|
|
391
|
+
3. **代码实现违反已批准 policy/validation**:返回 `external-implementation-fix-required`、受影响路径和必须带回的 code/test/artifact/acceptance snapshots;核心没有代码写入 invocation。
|
|
392
|
+
4. **候选不应晋升**:人选择 `keep-current-baseline`,Host 将候选标记 `withdrawn | rolled-back` 或从新输入移除;重新计算后证明它未晋升。`defer-scoped-conflict` 只能进入 `deferred-open`,相关 scope 继续 blocked,无关任务继续。
|
|
393
|
+
|
|
394
|
+
`accept-source-change` 只接受当前 source digest 和精确 impact,不代表业务语义批准;只要受影响 item 尚未 revise/deprecate 和 approve,闭环仍未完成。
|
|
395
|
+
|
|
396
|
+
### 7.5 终态与重算
|
|
397
|
+
|
|
398
|
+
恢复运行输出 `resolutionOutcomes[]`,逐个绑定上一 `findingDigest`。只有同时满足以下条件才可标记 `resolved`:
|
|
399
|
+
|
|
400
|
+
1. 上一 finding 在新 baseline 中不再成立;
|
|
401
|
+
2. live source、item、scope、snapshot 与声明动作一致;
|
|
402
|
+
3. 相关 validation/promotion evidence 当前且通过;
|
|
403
|
+
4. Contract 变化已获得精确人工 approval,相关 projection 按现有 ownership 规则 current;
|
|
404
|
+
5. Project Context `status/check` 对该影响闭包为 clean;
|
|
405
|
+
6. candidate 已明确 `accepted | rejected | withdrawn | rolled-back`,不存在隐式晋升;
|
|
406
|
+
7. 新 Review 没有同一 root cause 的替代 blocked finding。
|
|
407
|
+
|
|
408
|
+
`resolved` 与 `rejected` 是闭环终态;`deferred-open`、`external-fix-required`、`contract-action-required` 和 `revalidation-required` 都不是完成。Review Bundle 可以由 Host/PR 归档为证据,但核心不保存它,也不因此产生后续权限。
|
|
409
|
+
|
|
410
|
+
### 7.6 与任务交付的连接
|
|
411
|
+
|
|
412
|
+
- 未关闭 finding 若影响当前 task 的 mandatory policy/validation、有效 dependency 或 conflict scope,Adaptive Context 必须 `taskHealth=blocked` 且 `delivery.status=withheld`;
|
|
413
|
+
- 仅影响无关 scope 时作为 global warning,当前任务可以继续;
|
|
414
|
+
- `reconcile-truth` 继续报告 `blocksTask` 与 `blocksExistingDelivery` 两个独立字段;本协议不自动撤销或阻断现有线上交付;
|
|
415
|
+
- 新的模型交付不得把 `deferred-open` 当成 resolved,也不得因运行过恢复命令就跳过 live evidence。
|
|
416
|
+
|
|
417
|
+
## 8. A-130 新评测设计
|
|
418
|
+
|
|
419
|
+
### 8.1 评测前置门
|
|
420
|
+
|
|
421
|
+
新的 Provider 运行前必须同时满足:
|
|
422
|
+
|
|
423
|
+
1. 本文全部本地 acceptance 通过;
|
|
424
|
+
2. Project Context `clean`;
|
|
425
|
+
3. 目标源码 snapshot 与评测 Contract 固定;
|
|
426
|
+
4. oracle 每条真值都可追溯到两臂共同拥有的批准 Contract item 或被允许读取的源码;
|
|
427
|
+
5. 人工审阅完整 oracle 表,并以维护者、时间和 canonical oracle digest 显式签署;只有可追溯但未经人工确认仍不允许 Provider 运行;
|
|
428
|
+
6. 禁止读取的 hidden oracle locator 不进入模型 prompt;
|
|
429
|
+
7. 完整与自适应 prompt 使用同一 renderer、同一 wrapper 和同一输出 schema;
|
|
430
|
+
8. Provider payload、模型、reasoning effort、sandbox 和命令全部在执行前重新披露并单独授权。
|
|
431
|
+
|
|
432
|
+
### 8.2 两类固定用例
|
|
433
|
+
|
|
434
|
+
**A-130-S:小 Contract 质量等价**
|
|
435
|
+
|
|
436
|
+
- 使用当前 non-whitelist 任务和修正后的批准业务 fact;
|
|
437
|
+
- `completeBelowUtf8Bytes=16384`;
|
|
438
|
+
- 完整 prompt 与 `context-query --prompt` 必须逐字节一致;
|
|
439
|
+
- 本用例验证 complete-if-fits,不宣称 adaptive 节省。
|
|
440
|
+
|
|
441
|
+
**A-130-L:真实 adaptive 非劣化**
|
|
442
|
+
|
|
443
|
+
- 使用另一个预先冻结、完整 Context 明确超过阈值的真实任务;
|
|
444
|
+
- 至少包含一个 validation → fact dependency、一个无关同 scope fact、一个词法 alias 和两个 target;
|
|
445
|
+
- required item/source oracle 在 Provider 调用前固定;
|
|
446
|
+
- 自适应臂必须真的为 `delivery.mode=adaptive`,不得用 complete 冒充。
|
|
447
|
+
|
|
448
|
+
### 8.3 成对运行与停止规则
|
|
449
|
+
|
|
450
|
+
- A-130-S 只执行 1 个 `full→candidate` fresh pair;两臂正文已逐字节一致,它只做 Provider 冒烟验证,不重复测模型波动;
|
|
451
|
+
- A-130-L 执行 3 个 fresh pair,arm 顺序按 `full→candidate`、`candidate→full`、`full→candidate` 平衡;总上限固定为 4 对、8 次 Provider 调用;
|
|
452
|
+
- 每次使用全新 ephemeral Host;不跨 arm 共享会话;
|
|
453
|
+
- 任一运行访问 forbidden path、写目标项目、修改 Git 或偏离固定配置,整对无效并立即停止;
|
|
454
|
+
- paired full 与 candidate 同时因相同检查失败,标记 fixture/任务 inconclusive;它不构成产品缺陷,也不得触发 selector 或产品协议修复;
|
|
455
|
+
- paired full 通过而 adaptive 失败,只有在失败能归因到明确的 governed delivery evidence gap,且同一 evidence gap 在第二个平衡 pair 重现时,才判为产品缺陷;一次失败、无法归因或无法重现均为 causality inconclusive;
|
|
456
|
+
- full baseline 自身失败或逐字节一致的 S 两臂结果不同,标记 Provider/baseline inconclusive,不推断产品根因;
|
|
457
|
+
- A-130 是 `1.7.0` 的一次性发布验收:终态为 `passed | product-defect | fixture-inconclusive | causality-inconclusive | safety-invalid`。通过后永久关闭;未来业务样例进入新回归或后续版本,不重开 A-130;
|
|
458
|
+
- 旧两次对照保留为历史失败证据,不计入新设计的通过样本。
|
|
459
|
+
|
|
460
|
+
### 8.4 分层计量
|
|
461
|
+
|
|
462
|
+
每次必须归档:
|
|
463
|
+
|
|
464
|
+
- canonical inner prompt 与完整 Host wrapper 的 bytes/digest;
|
|
465
|
+
- delivery mode、item IDs、taskDigest、Contract/source/projection snapshots;
|
|
466
|
+
- Provider input/cached/output/reasoning tokens;
|
|
467
|
+
- Host 命令轮次、命令数、唯一读取文件数、工具输出 UTF-8 bytes;
|
|
468
|
+
- 首 token 时间和总墙钟时间;
|
|
469
|
+
- 结构化最终结果、oracle 分数、禁止行为;
|
|
470
|
+
- 目标仓库前后 Git 状态和抽查摘要。
|
|
471
|
+
|
|
472
|
+
### 8.5 通过门
|
|
473
|
+
|
|
474
|
+
**A-130-S**:
|
|
475
|
+
|
|
476
|
+
- 两种交付逐字节一致;
|
|
477
|
+
- 唯一有效 pair 的两臂均达到 8/8;
|
|
478
|
+
- 不比较“节省”,只证明小 Context 不承担 adaptive 风险。
|
|
479
|
+
|
|
480
|
+
**A-130-L**:
|
|
481
|
+
|
|
482
|
+
- 每个 adaptive 有效运行 required-item recall 100%、结果 8/8,且没有 paired full 已通过而 adaptive 失败的检查;
|
|
483
|
+
- canonical inner prompt bytes 相比完整臂至少下降 30%;
|
|
484
|
+
- 3 次中位数 Provider input tokens 不高于完整臂;
|
|
485
|
+
- 3 次中位数 Host 命令数不高于完整臂;
|
|
486
|
+
- 3 次中位数墙钟时间不高于完整臂的 110%;
|
|
487
|
+
- 所有安全、scope、lineage 和 snapshot 门通过。
|
|
488
|
+
|
|
489
|
+
只有 S 与 L 同时通过,A-130 才可由 `failed` 转为 `passed`。这仍不构成发布授权。
|
|
490
|
+
|
|
491
|
+
## 9. 本地可证伪验收
|
|
492
|
+
|
|
493
|
+
| ID | 反例/场景 | 必须结果 |
|
|
494
|
+
| --- | --- | --- |
|
|
495
|
+
| A-130D-01 | oracle 依赖一个 Contract/源码均未提供的业务真值 | fixture preflight 失败,不允许 Provider 运行 |
|
|
496
|
+
| A-130D-02 | full 使用 JSON-string、candidate 使用直接 Markdown | arm-format-mismatch,整对无效 |
|
|
497
|
+
| A-130D-03 | 完整 prompt 12 KiB、审查 JSON 4 KiB、complete 阈值 16 KiB | 仍选择 complete;审查字节不参与决策 |
|
|
498
|
+
| A-130D-04 | 显式请求 sibling scope item | blocked/requested-item-out-of-scope,prompt 不含该项 |
|
|
499
|
+
| A-130D-05 | 把任务 A 的 previous bundle 用于任务 B expanded query | blocked/context-query-previous-task-mismatch |
|
|
500
|
+
| A-130D-06 | previous self-digest 正确但缺 required schema 2 字段 | schema-invalid,不接受短缺对象 |
|
|
501
|
+
| A-130D-07 | previous item 在当前 Contract 存在但对 targets 不适用 | blocked,不 retain、不渲染 |
|
|
502
|
+
| A-130D-08 | mandatory validation 声明 requires fact | fact 无条件进入 dependency closure;缺失/过期则 blocked |
|
|
503
|
+
| A-130D-09 | generic reference 命中但 validation dependency 缺失 | 不得返回 ready |
|
|
504
|
+
| A-130D-10 | expanded 只请求一个 subject,另有大量 applicable facts | 只新增指定邻接闭包,不退化为全量 |
|
|
505
|
+
| A-130D-11 | item kind/locator 与 task 同词但语义正文不匹配 | 不因 kind/locator 被召回 |
|
|
506
|
+
| A-130D-12 | canonical value/camelCase/approved alias 命中 | 确定性召回相同 item,索引有稳定 digest |
|
|
507
|
+
| A-130D-13 | 两个 targets 共享 project-scope policy | prompt 只渲染一次公共项,路径 delta 保持 scope 正确 |
|
|
508
|
+
| A-130D-14 | selected source locator 指向禁止读取目录 | audit JSON 可审查,模型 prompt 不暴露 locator |
|
|
509
|
+
| A-130D-15 | taskHealth=needs-expansion 或 blocked | `--prompt` stdout 为空且退出码非零 |
|
|
510
|
+
| A-130D-16 | delivery item/digest/bytes 与 live renderer 不一致 | runtime 和公开 schema 均拒绝 |
|
|
511
|
+
| A-130D-17 | schema 1 Routing Index/previous Bundle | 派生索引重建;previous 不可扩展并要求重新生成 |
|
|
512
|
+
| A-130D-18 | 运行 A-130-S/L | 严格执行第 8 节全部质量、效率、安全和归档门 |
|
|
513
|
+
| A-130D-19 | adaptive selected set 来源均 current,但 complete 新增项来源 drifted | complete 不得 ready;审查 sources/evidence/read targets 覆盖全部 delivery items |
|
|
514
|
+
| A-130D-20 | task.paths 为空 | schema-invalid;project-wide 调用必须显式传 `.` |
|
|
515
|
+
| A-130D-21 | task path 是合法的待新建文件,或 changed path 已删除 | scope 正常编译并报告 path state,不因不存在而 needs-expansion |
|
|
516
|
+
| A-130D-22 | 显式请求已被窄 scope override 覆盖的旧 item | blocked/requested-item-not-effective,旧 body 不进入 prompt |
|
|
517
|
+
| A-130D-23 | required fact 在两个 targets 解析为不同有效 override | 各 target 只得到自身有效 fact;歧义、冲突或 scope 缺口 blocked |
|
|
518
|
+
| A-130D-24 | taskHealth 为 needs-expansion/blocked | delivery.status=withheld,mode/contentDigest 为空、bytes=0、itemIds 为空 |
|
|
519
|
+
| A-130D-25 | audit JSON 超过 audit max,但 ready prompt 在 delivery max 内 | `--json` 返回 audit-budget-insufficient;`--prompt` 仍可安全输出,二者健康不混淆 |
|
|
520
|
+
| A-130D-26 | adaptive prompt 不小于 complete,complete 未超过 delivery max | 确定性选择 complete;两者都超 hard max 才 blocked |
|
|
521
|
+
| A-130D-27 | expanded 请求 previous 未公开的 item/subject/source,或缩小预算 | blocked;不得探测 sibling metadata 或重解释 retained 内容 |
|
|
522
|
+
| A-130D-28 | expanded 审查包只含 delta body | `--prompt` 仍是累计、自包含正文,item IDs/bytes/digest 与实际内容一致 |
|
|
523
|
+
| A-130D-29 | task-delivery renderer 改动 | `context` 与既有 AGENTS/Ruler projection 字节、renderer version、ownership lock 均保持不变 |
|
|
524
|
+
| A-130D-30 | artifact 结构/self-digest 正确,但 item 已被 live Contract 覆盖、废弃或越界 | 纯 parser 可读;project-bound previous ingestion 必须拒绝 |
|
|
525
|
+
| A-130D-31 | `level=complete` 携带 previous 或 expansion | schema-invalid;合法 complete 只作为完整只读基准并审计全部交付项 |
|
|
526
|
+
| A-130D-32 | oracle 可追溯但没有人工签署,或签署 digest 与当前 oracle 表不一致 | oracle-human-approval-missing,不允许 Provider 运行 |
|
|
527
|
+
|
|
528
|
+
Truth Resolution Closure 同批增加以下验收:
|
|
529
|
+
|
|
530
|
+
| ID | 反例/场景 | 必须结果 |
|
|
531
|
+
| --- | --- | --- |
|
|
532
|
+
| A-130T-01 | 任一 truth finding | 含稳定 findingDigest、完整 resolutionContract、精确影响和非空 completion criteria |
|
|
533
|
+
| A-130T-02 | resolution preview 需要 compose/scope split 或外部修复 | 不出现无 schema 占位文件;明确 requiredHumanInputs 或 externalAction |
|
|
534
|
+
| A-130T-03 | schema 2 recovery input 未带 previous Review、digest 不匹配或请求未公开 resolution | fail closed,不读取为有效裁定 |
|
|
535
|
+
| A-130T-04 | source/Contract 修正已执行但 item 未批准或 Project Context 未 clean | resolution 仍为 revalidation-required,不得 resolved |
|
|
536
|
+
| A-130T-05 | 代码违反批准 policy | 只返回 external-implementation-fix-required 和 post-fix evidence 合同;业务代码、Git、CI 零写入 |
|
|
537
|
+
| A-130T-06 | 人选择 keep-current,candidate 随后 withdrawn/removed | 新基线证明未晋升并产生 resolved/rejected outcome,当前 Contract 不变 |
|
|
538
|
+
| A-130T-07 | 人选择 defer-scoped-conflict | 状态为 deferred-open;相关 scope blocked、无关任务继续,不冒充闭环完成 |
|
|
539
|
+
| A-130T-08 | 上一 finding 消失但出现同 root cause 的新 blocked finding | 不得 resolved,返回新 finding 与下一恢复合同 |
|
|
540
|
+
| A-130T-09 | 完成 Contract 修正或外部代码修复后带上一 Review 重算 | live source/item/scope/validation/snapshot/approval 全通过才产生 resolved outcome |
|
|
541
|
+
| A-130T-10 | 任一 reconciliation/recovery 流程 | Review/input 为短生命周期无权限工件;无自动 approval、代码写入、Provider、Git、网络或持久队列 |
|
|
542
|
+
|
|
543
|
+
实现后完整回归必须在现有 153 项基础上只增不减、不跳过、不弱化。任何只修改测试 oracle、不触发上述反例的实现都不算完成。
|
|
544
|
+
|
|
545
|
+
## 10. 实现顺序与影响面
|
|
546
|
+
|
|
547
|
+
若后续单独获得实现授权,严格按以下顺序:
|
|
548
|
+
|
|
549
|
+
1. 先新增 A-130D-04/05/06/19/20/22/24/29 的失败复现,锁住 scope、lineage、schema、最终交付审计、空 target、override、withheld delivery 和持久 projection 隔离;
|
|
550
|
+
2. 修 task-delivery renderer scope/override 泄漏与 `--previous` taskDigest,不改变持久 projection renderer;
|
|
551
|
+
3. 完成三个 adaptive schema 2、selector 2、结构 validator 与 project-bound semantic validator;
|
|
552
|
+
4. 完成 Truth Reconciliation Input/Review Bundle schema 2、`--previous-review`、finding/resolution digest 和终态重算;
|
|
553
|
+
5. 实现独立 audit/delivery/read-target budget、complete-if-fits 和 complete/adaptive 支配规则;
|
|
554
|
+
6. 实现 approved retrieval profile、dependency closure、alias 和 targeted expansion;
|
|
555
|
+
7. 统一 prompt renderer,去重公共项并移除模型面 locator;
|
|
556
|
+
8. 收紧 `--prompt` 非 ready 行为,并把未关闭的 task-related truth finding 接入 withheld delivery;
|
|
557
|
+
9. 补齐 A-130D-01 至 A-130D-32、A-130T-01 至 A-130T-10 全部本地测试、capabilities 7、Exchange Protocol 7、Migration Manifest 2 协议矩阵、升级说明与 package schema 清单;
|
|
558
|
+
10. `npm run check` 和自托管 Project Context 回到 clean 后停止;
|
|
559
|
+
11. 等待新的 Provider 复验授权。
|
|
560
|
+
|
|
561
|
+
预计代码影响仅限:
|
|
562
|
+
|
|
563
|
+
- `src/project-context/adaptive-context*.mjs`;
|
|
564
|
+
- `src/project-context/renderer.mjs`;
|
|
565
|
+
- `src/project-context/cli.mjs`;
|
|
566
|
+
- `src/project-context/truth-reconciliation*.mjs`;
|
|
567
|
+
- Context Query / Adaptive Bundle / Routing Index / capabilities / exchange schema;
|
|
568
|
+
- Truth Reconciliation Input / Review Bundle schema;
|
|
569
|
+
- adaptive、truth reconciliation、CLI、exchange、upgrade、release acceptance tests;
|
|
570
|
+
- `migration-manifest.json` 与对应 upgrade/release acceptance;
|
|
571
|
+
- 对应 README、UPGRADING、CHANGELOG 和项目状态。
|
|
572
|
+
|
|
573
|
+
不修改 Constitution、Project Contract 持久 schema、业务代码、Git/CI Adapter、Provider 或 Agent Runtime。
|
|
574
|
+
|
|
575
|
+
## 11. 兼容与迁移
|
|
576
|
+
|
|
577
|
+
- 公共 npm 基线仍为 `1.6.0`,不受影响;
|
|
578
|
+
- 当前 schema 1 adaptive 工件只存在于未发布 `1.7.0`,属于短生命周期派生物;升级实现后重新生成;
|
|
579
|
+
- schema 1 Routing Index 可读取后判 stale 并内存重建,不做持久迁移;
|
|
580
|
+
- schema 1 Adaptive Bundle 不可作为 schema 2 `--previous`,避免无 lineage 的跨任务继承;
|
|
581
|
+
- schema 1 Truth Reconciliation Input/Review Bundle 必须重新生成,旧 Review 不可作为 schema 2 `--previous-review`;
|
|
582
|
+
- Project Contract、source/projection lock、Action Plan、Review Bundle 和 renderer 所有权不迁移;task-delivery renderer 不改变既有持久 projection renderer 或版本;
|
|
583
|
+
- retrieval profile 是普通批准 policy item,不建立第二份真源。
|
|
584
|
+
|
|
585
|
+
## 12. 授权与停止条件
|
|
586
|
+
|
|
587
|
+
本文本身只冻结设计,不产生动态实现权限;是否已获得实现授权只读取 `PROJECT_STATE.json`。在状态未明确允许前不得:
|
|
588
|
+
|
|
589
|
+
- 修改产品实现、schema 或测试;
|
|
590
|
+
- 修改 A-130 evaluation fixture 或目标项目;
|
|
591
|
+
- 调用 Provider、发送项目材料或运行新的 A-130;
|
|
592
|
+
- 安装依赖、访问网络、创建 Git commit/tag/push;
|
|
593
|
+
- 打包或发布 `1.7.0`。
|
|
594
|
+
|
|
595
|
+
设计审查或实现阶段达到停止条件后必须同步当前事实并停止。用户已授权按本文完成本地统一实现;该权限只覆盖本节列明的产品实现、schema、fixture、测试和文档范围,完成后必须在 Project Context `clean` 处停止。
|
|
596
|
+
|
|
597
|
+
> 下一授权入口仅是实现完成后的真实 Host/Provider 复验;复验通过前不得发布,Provider 调用与发布仍须分别获得新授权。
|
|
598
|
+
|
|
599
|
+
## 13. 本地实现结果
|
|
600
|
+
|
|
601
|
+
截至 `2026-09-13`,本设计的本地统一实现已完成:
|
|
602
|
+
|
|
603
|
+
- Context Query、Adaptive Context Bundle、Routing Index、Truth Reconciliation Input/Review Bundle 写 schema 2,selector 为 2,capabilities / Exchange Protocol 为 7;
|
|
604
|
+
- task-delivery renderer 与持久 projection renderer 分离,持久 renderer 仍为 3,无 store migration;
|
|
605
|
+
- scope、override、task lineage、targeted expansion、最终交付审计、withheld delivery、三类预算和 complete/adaptive 支配规则均失败封闭;
|
|
606
|
+
- truth finding 具备稳定 digest、previous Review 绑定、结构化人工/外部修复合同和重算后的 open/deferred/resolved/rejected 终态;
|
|
607
|
+
- `npm run check` 共 195/195 通过,其中新增 A-130D-01 至 A-130D-32 与 A-130T-01 至 A-130T-10;A-130 evaluator 已收缩为 S 一对、L 三对、最多八次,并新增人工 oracle digest 与因果归属门。
|
|
608
|
+
|
|
609
|
+
本地合同实现和回归闭合后,用户于 `2026-09-14` 单独授权修正后的有界 Host/Provider 复验。S 一对与 L 三个顺序平衡 pair 共八个有效结果全部为 8/8;L adaptive 的 prompt 字节、input tokens、命令数与墙钟中位数均通过第 8 节效率门,安全门无越界。仓库内置 evaluator 返回 `status=passed; pairs=4; runs=8`。因此 A-130 永久关闭,完整运行证据见 `docs/24` 第 11 节。
|