universal-dev-standards 6.1.1 → 6.2.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/bundled/locales/zh-CN/CHANGELOG.md +33 -3
- package/bundled/locales/zh-CN/README.md +75 -33
- package/bundled/locales/zh-CN/SECURITY.md +1 -1
- package/bundled/locales/zh-CN/core/behavior-snapshot.md +2 -2
- package/bundled/locales/zh-CN/core/data-migration-testing.md +2 -2
- package/bundled/locales/zh-CN/docs/CHEATSHEET.md +4 -4
- package/bundled/locales/zh-CN/docs/CLI-INIT-OPTIONS.md +9 -3
- package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +10 -11
- package/bundled/locales/zh-CN/docs/USER-MANUAL.md +40 -21
- package/bundled/locales/zh-CN/integrations/gemini-cli/README.md +12 -0
- package/bundled/locales/zh-CN/skills/ac-coverage/SKILL.md +11 -5
- package/bundled/locales/zh-CN/skills/adr-assistant/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/commands/brainstorm.md +2 -2
- package/bundled/locales/zh-CN/skills/commit-standards/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/contract-test-assistant/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/deploy-assistant/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/dev-methodology/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/dev-workflow-guide/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/journey-test-assistant/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/knowledge-graph/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/knowledge-graph/guide.md +2 -2
- package/bundled/locales/zh-CN/skills/migration-assistant/SKILL.md +188 -2
- package/bundled/locales/zh-CN/skills/observability-assistant/guide.md +2 -2
- package/bundled/locales/zh-CN/skills/orchestrate/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/plan/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/push/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/retrospective-assistant/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/reverse-engineer/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/runbook-assistant/guide.md +2 -2
- package/bundled/locales/zh-CN/skills/skill-builder/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/slo-assistant/guide.md +2 -2
- package/bundled/locales/zh-CN/skills/spec-derivation/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/spec-driven-dev/SKILL.md +40 -2
- package/bundled/locales/zh-CN/skills/sweep/SKILL.md +2 -2
- package/bundled/locales/zh-CN/skills/testing-guide/SKILL.md +2 -2
- package/bundled/locales/zh-TW/CHANGELOG.md +34 -3
- package/bundled/locales/zh-TW/README.md +75 -33
- package/bundled/locales/zh-TW/SECURITY.md +1 -1
- package/bundled/locales/zh-TW/core/audit-trail.md +2 -2
- package/bundled/locales/zh-TW/core/behavior-snapshot.md +2 -2
- package/bundled/locales/zh-TW/core/browser-compatibility-standards.md +18 -7
- package/bundled/locales/zh-TW/docs/CHEATSHEET.md +4 -4
- package/bundled/locales/zh-TW/docs/CLI-INIT-OPTIONS.md +9 -3
- package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +10 -11
- package/bundled/locales/zh-TW/docs/USER-MANUAL.md +40 -21
- package/bundled/locales/zh-TW/integrations/gemini-cli/README.md +12 -0
- package/bundled/skills/commands/journey-test.md +80 -6
- package/bundled/skills/commands/skill-builder.md +75 -6
- package/package.json +3 -3
- package/src/commands/check.js +54 -7
- package/src/commands/config.js +9 -0
- package/src/commands/init.js +15 -1
- package/src/commands/release.js +1 -1
- package/src/commands/update.js +82 -31
- package/src/config/ai-agent-paths.js +47 -7
- package/src/core/constants.js +61 -1
- package/src/core/manifest.js +56 -0
- package/src/flow/flow-parser.js +1 -1
- package/src/flow/gate-loader.js +1 -1
- package/src/i18n/messages.js +6 -0
- package/src/installers/standards-installer.js +10 -20
- package/src/reconciler/actual-state-scanner.js +118 -43
- package/src/reconciler/desired-state-calculator.js +157 -43
- package/src/reconciler/diff-engine.js +7 -2
- package/src/reconciler/manifest-migrator.js +5 -2
- package/src/reconciler/plan-executor.js +53 -14
- package/src/uninstallers/integration-uninstaller.js +7 -1
- package/src/utils/config-loader.js +1 -1
- package/src/utils/config-manager.js +1 -1
- package/src/utils/github.js +5 -1
- package/src/utils/hasher.js +7 -4
- package/src/utils/integration-generator.js +121 -78
- package/src/utils/registry.js +39 -0
- package/src/utils/skills-installer.js +49 -34
- package/src/utils/skills-source.js +51 -0
- package/src/utils/standard-fixer.js +1 -1
- package/src/utils/standard-validator.js +1 -1
- package/standards-registry.json +21 -11
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../../../skills/migration-assistant/SKILL.md
|
|
3
3
|
source_version: 1.0.0
|
|
4
|
-
source_hash:
|
|
4
|
+
source_hash: 5d58f55f3f68
|
|
5
5
|
translation_version: 1.0.0
|
|
6
|
-
last_synced: 2026-
|
|
6
|
+
last_synced: 2026-07-09
|
|
7
7
|
status: current
|
|
8
8
|
description: |
|
|
9
9
|
引导代码迁移、框架升级与技术现代化。
|
|
@@ -141,6 +141,165 @@ describe.each([
|
|
|
141
141
|
- [ ] Contract test fixture 已 commit 至 `tests/fixtures/migration/`
|
|
142
142
|
- [ ] Cross-link 至 [contract-test-assistant](../contract-test-assistant/SKILL.md) 做持续的消费端验证
|
|
143
143
|
|
|
144
|
+
## Cutover 后生产数据对账
|
|
145
|
+
|
|
146
|
+
> **实现**:XSPEC-284 R2(轴③持久化数据语义)/关闭 UDS issue [#134](https://github.com/AsiaOstrich/universal-dev-standards/issues/134)。
|
|
147
|
+
|
|
148
|
+
Contract test 与 `behavior-snapshot` 只能捕捉**接口**分歧,对**持久化数据语义**分歧视而不见。两者共有两个盲区:(1) 你只能验证你想得到要列举的规则——真正出包的永远是没人写下来的隐含规则(某字段何时非零、何时被覆写);(2) per-request parity ≠ data-at-rest parity——由**异步**程序(DR sync、结算批次、状态对账器)对 live 外部供应商写入的字段,不是可重放的确定性请求,其正确性只在**真实生产量的聚合**中浮现。
|
|
149
|
+
|
|
150
|
+
### 事故指纹(#134)
|
|
151
|
+
|
|
152
|
+
某企业 SMS 平台 PHP→.NET 重写:每笔金额由**异步** DR sync 覆写(`record.Cost = gatewayDr.Cost`)。legacy 对 carrier-failure 仍计费,rewrite 写入 gateway 回报的 `0` → cutover 边界两侧同一失败状态的金额分歧。**所有既有 gate 全部漏接**(response shape 相同 → contract test 通过;无人 curated「失败仍计费」场景;字段由后台作业对 live gateway 写入 → 不可重放)。最后靠 ops 跑生产 `SUM(cost) GROUP BY status, day` 跨边界汇总才发现。**单日抽样甚至误判「失败不计费=正常」**——只有跨 cutover 边界的多周聚合才揭露真相。
|
|
153
|
+
|
|
154
|
+
### 强制规则
|
|
155
|
+
|
|
156
|
+
当 migration 将 legacy 数据载入与 new 相同的**存储**,新旧边界即是**免费差分神谕**。对每个 business-critical 持久化字段**必须**:定义聚合对账不变量(比对 legacy-origin vs new-origin 行沿关键维度的分布)、对生产**排程执行**并于分歧超过宣告容差时告警、以跨 cutover 的**多周窗口**调查(切忌单日抽样,抽样可能坐实错误结论)。
|
|
157
|
+
|
|
158
|
+
### 对账 SQL 模板
|
|
159
|
+
|
|
160
|
+
```sql
|
|
161
|
+
-- Reconcile a money/state field across the migration cutover boundary.
|
|
162
|
+
SELECT status,
|
|
163
|
+
SUM(CASE WHEN created < @cutover THEN 1 ELSE 0 END) AS legacy_rows,
|
|
164
|
+
SUM(CASE WHEN created < @cutover AND money_field > 0 THEN 1 ELSE 0 END) AS legacy_nonzero,
|
|
165
|
+
SUM(CASE WHEN created >= @cutover THEN 1 ELSE 0 END) AS new_rows,
|
|
166
|
+
SUM(CASE WHEN created >= @cutover AND money_field > 0 THEN 1 ELSE 0 END) AS new_nonzero
|
|
167
|
+
FROM records GROUP BY status;
|
|
168
|
+
-- Invariant: nonzero-ratio per status must not differ across the boundary beyond tolerance.
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### 容差与告警指引
|
|
172
|
+
|
|
173
|
+
| 维度 | 指引 |
|
|
174
|
+
|--------|------|
|
|
175
|
+
| **不变量类型** | 每维度的非零比率 / `SUM` / `COUNT` / `DISTINCT` / checksum,按 `GROUP BY status, period` |
|
|
176
|
+
| **容差** | 逐字段宣告;硬会计不变量为 0%,仅已知合法漂移(如四舍五入)容许小 ε |
|
|
177
|
+
| **窗口** | 多周、横跨 cutover;以 `period` 分桶定位边界 |
|
|
178
|
+
| **排程** | Post-cutover 常态化 cron(每日)直到边界行退出活跃报表 |
|
|
179
|
+
| **告警** | 分歧超过容差即告警;经 `observability-assistant` 告警规则路由 |
|
|
180
|
+
|
|
181
|
+
### Gate 0 — 持久化业务字段的隐含规则捕获
|
|
182
|
+
|
|
183
|
+
在迁移任何写入持久化业务字段的功能前,**针对每个此类字段明确回答**三个问题,并将答案锁定为快照场景**或**对账不变量:
|
|
184
|
+
|
|
185
|
+
> 1. **何时设值?**
|
|
186
|
+
> 2. **何时被覆写?**(尤其异步路径)
|
|
187
|
+
> 3. **何时归零/清空?**
|
|
188
|
+
|
|
189
|
+
**高风险隐含规则检查清单** — 经验反复出现的指纹:
|
|
190
|
+
|
|
191
|
+
- [ ] **计费语义** — 提交时计费 vs 送达时计费;失败退费?
|
|
192
|
+
- [ ] **枚举/状态码映射** — 每个 legacy 码都映射;「成功集合」定义一致
|
|
193
|
+
- [ ] **空值处理** — 空字符串 vs null vs 不存在;缺值默认
|
|
194
|
+
- [ ] **字段命名大小写/序列化** — snake_case vs camelCase 绑定
|
|
195
|
+
- [ ] **时区** — 存 UTC vs local;报表边界
|
|
196
|
+
- [ ] **四舍五入/类型强转** — `"2.00"`(文本)被当 int 解析 → 掉成 0
|
|
197
|
+
|
|
198
|
+
### 3-gate 定位表
|
|
199
|
+
|
|
200
|
+
明确划出各 gate 之间的边界,让每个轴都有负责方、不落入缝隙:
|
|
201
|
+
|
|
202
|
+
| Gate | 范围 | 时机 |
|
|
203
|
+
|------|------|------|
|
|
204
|
+
| [`behavior-snapshot`](../../../../core/behavior-snapshot.md) | per-request、人工 curated 场景 | pre-UAT CI |
|
|
205
|
+
| Contract tests(上方/#112) | response **shape**(keys/类型/层级) | 单元/集成 |
|
|
206
|
+
| **本节(#134)** | **异步写入字段的聚合、静态数据语义,跨真实量** | **post-cutover,排程,生产** |
|
|
207
|
+
|
|
208
|
+
> 交叉参照:[`behavior-snapshot`](../../../../core/behavior-snapshot.md)(curated golden masters),[`observability-assistant`](../observability-assistant/SKILL.md)(对账排程 + 告警模板)。
|
|
209
|
+
|
|
210
|
+
## 背景作业/副作用完整性
|
|
211
|
+
|
|
212
|
+
> **实现**:XSPEC-284 R3(轴⑤)。
|
|
213
|
+
|
|
214
|
+
迁移清单与副作用 grep 只是**标注**背景作业——标注本身不证明任何事。背景作业可能在 manifest 列出、代码中存在,却在新系统**从未真正执行**。
|
|
215
|
+
|
|
216
|
+
### 强制规则
|
|
217
|
+
|
|
218
|
+
对每条由 legacy 带过来的背景副作用,须验证**两件事**——标注不够:
|
|
219
|
+
|
|
220
|
+
| 检查 | Pre-flight | Post-cutover |
|
|
221
|
+
|------|-----------|--------------|
|
|
222
|
+
| **(a) 存在** — cron/queue consumer/webhook/寄信点在新系统实际实作 | source grep + 注册检查 | — |
|
|
223
|
+
| **(b) 已执行** — post-cutover 已被**触发/执行至少一次**,且有可观测证据(log、heartbeat、queue depth 排空、telemetry counter) | — | 需要可观测性证据 |
|
|
224
|
+
|
|
225
|
+
任一检查未过即标 `not_implemented`(XSPEC-199)并 **block UAT/cutover**——绝不把沉默、从未触发的作业当「完成」。
|
|
226
|
+
|
|
227
|
+
> 交叉参照:结构化日志强制事件 `heartbeat` / `business_event`(logging-standards)为检查 (b) 提供可观测的执行证据。
|
|
228
|
+
|
|
229
|
+
## 状态机与时序对等
|
|
230
|
+
|
|
231
|
+
> **实现**:XSPEC-284 R8(轴⑧)→ 拆分为 **XSPEC-287**。
|
|
232
|
+
|
|
233
|
+
legacy 的状态转移规则与时序前提多为**隐性**:单笔记录的快照「看起来合法」,违规只在一连串操作的**转移序列**中浮现,因此 per-request 功能对等与 behavior-snapshot 对等都抓不到(与「per-request ≠ data-at-rest」「per-request ≠ 并发」同源盲区)。`feature-manifest` 只有 `status` 字段,**不**验证转移合法性。
|
|
234
|
+
|
|
235
|
+
### Step 1 — 状态机清单来源(derive, R3)
|
|
236
|
+
|
|
237
|
+
legacy 状态转移散落于 controller/service/DB trigger。以**三方交叉**机械化提取状态枚举 + 合法转移集(不靠人脑回忆):
|
|
238
|
+
|
|
239
|
+
| 来源 | 产出 |
|
|
240
|
+
|------|------|
|
|
241
|
+
| **(1) enum 定义** — status enum /查找表 | 完整的已声明状态集合 |
|
|
242
|
+
| **(2) 状态更新点** — grep 每个 `status = ...` /`UPDATE ... SET status` /trigger | 代码*可以*执行哪些转移 |
|
|
243
|
+
| **(3) 生产实际序列** — 从生产历史/审计中观察到的相异 `(from_status → to_status)` 对 | *实际*发生哪些转移 |
|
|
244
|
+
|
|
245
|
+
> **权威性**:三者不一致时,以**生产实际出现过的转移为 legacy 真实行为基准**(呼应 #134「以生产为准」)。代码允许但生产从未产生的转移是潜在路径;生产出现过但新 enum 禁止的转移是回归。
|
|
246
|
+
|
|
247
|
+
### Step 2 — 合法转移验证(oracle, R1)
|
|
248
|
+
|
|
249
|
+
依提取出的转移图,断言**新系统禁止 legacy 禁止的非法转移**。当新系统**允许 legacy 禁止的转移**即 block(重写常放宽隐性护栏):
|
|
250
|
+
|
|
251
|
+
- `cancelled → pending`(复活已取消的订单)
|
|
252
|
+
- `refunded → paid`(反退款)
|
|
253
|
+
- `shipped → draft`(倒退回不可逆点之前)
|
|
254
|
+
|
|
255
|
+
**Gate 时机**:pre-UAT。
|
|
256
|
+
|
|
257
|
+
### Step 3 — 时序不变量侦测(oracle, R2)
|
|
258
|
+
|
|
259
|
+
断言单笔快照无法揭露的时序不变量;违反即告警:
|
|
260
|
+
|
|
261
|
+
- `created_at ≤ updated_at`(记录不会在存在之前被更新)
|
|
262
|
+
- 无**未来时间戳**(clock skew/默认值错误)
|
|
263
|
+
- 状态时间戳**单调**递进(`paid_at ≤ shipped_at ≤ delivered_at`)
|
|
264
|
+
- 事件排序保证被保留(事件日志不重排)
|
|
265
|
+
|
|
266
|
+
**Gate 时机**:pre-UAT **与** post-cutover(与上方轴③ Post-Cutover 对账共用排程)。
|
|
267
|
+
|
|
268
|
+
### Step 4 — 序列/顺序对等(R4)
|
|
269
|
+
|
|
270
|
+
验证新系统保留**幂等性**(重复操作不产生重复状态变更)与**关键事件顺序**,避免重写引入顺序敏感 bug:
|
|
271
|
+
|
|
272
|
+
- [ ] 重放同一事件/消息两次只产生一次状态变更,而非两次
|
|
273
|
+
- [ ] 乱序投递会被拒绝或对账处理,而非静默套用
|
|
274
|
+
- [ ] 幂等键/去重窗口与 legacy 语义一致
|
|
275
|
+
|
|
276
|
+
### 与 XSPEC-286 轴⑥边界
|
|
277
|
+
|
|
278
|
+
**287(本节,轴⑧)**负责**转移合法性 + 时序正确性**(领域问题);**[XSPEC-286](../../../../core/performance-standards.md) 轴⑥**负责**并发竞态/隔离**(性能/竞争问题)。重叠案例(并发导致非法转移)的并发面归 286、转移合法性面归本节;落地时依主导失败模式指派主责。
|
|
279
|
+
|
|
280
|
+
## 错误路径完整性
|
|
281
|
+
|
|
282
|
+
> **实现**:XSPEC-284 R9(轴⑨)→ 拆分为 **XSPEC-288**。
|
|
283
|
+
|
|
284
|
+
最常见的迁移遗漏是「happy path 移了、错误/降级/fallback 分支整批被漏」。happy path 有明确需求,错误分支散落(try/catch 层级、自定义异常层级、特定错误码)而被静默遗失。本 skill 负责**迁移 derive + 降级对等**(R1/R3);**系统性遗漏分支 gap 分析 + 错误响应差分**(R2/R4)落在 [full-coverage-testing](../../../../core/full-coverage-testing.md)「Migration Error-Path Completeness」。
|
|
285
|
+
|
|
286
|
+
### Step 1 — 机械化 legacy 异常/错误码清单(derive, R1)
|
|
287
|
+
|
|
288
|
+
**机械化**列举 legacy 错误面(不靠回忆):grep `catch`/`except`/`rescue` 区块、自定义异常/错误类层级、所有错误/状态码、错误响应形状(serializer/DTO)。此清单即交给 full-coverage-testing gap 分析的错误路径待验清单。
|
|
289
|
+
|
|
290
|
+
### Step 2 — 降级/Fallback 对等(R3)
|
|
291
|
+
|
|
292
|
+
legacy 降级模式只在失败时执行,容易被漏。验证新系统保留——对等上 fail closed,而非「正常路径一致、失败时行为迥异」:
|
|
293
|
+
|
|
294
|
+
- [ ] 外部服务失败 **fallback** 与 legacy 一致
|
|
295
|
+
- [ ] **重试**策略(次数/backoff/放弃)与 legacy 一致
|
|
296
|
+
- [ ] **部分结果**处理与 legacy 一致
|
|
297
|
+
- [ ] **断路器/超时**降级与 legacy 一致
|
|
298
|
+
|
|
299
|
+
> **重要性分级**:依**生产实际触发频率**排序(#134「以生产为准」)。高频生产错误分支无对映即硬 block;从未触发的潜在分支仍列入但较低优先。
|
|
300
|
+
|
|
301
|
+
> 交叉参照:[full-coverage-testing](../../../../core/full-coverage-testing.md) Migration Error-Path Completeness(gap 报告 + 错误响应差分,R2/R4);[behavior-snapshot](../../../../core/behavior-snapshot.md)(错误响应对等)。
|
|
302
|
+
|
|
144
303
|
## 回滚策略
|
|
145
304
|
|
|
146
305
|
| 方式 | 使用时机 |
|
|
@@ -173,15 +332,42 @@ AI: Migration Assessment: Vue 2 → Vue 3
|
|
|
173
332
|
> - 执行 `/testing` 确保迁移后测试通过 ⭐ **推荐**
|
|
174
333
|
> - 执行 `/commit` 提交迁移变更
|
|
175
334
|
|
|
335
|
+
## 附录:9 轴完整性矩阵
|
|
336
|
+
|
|
337
|
+
> **来源**:XSPEC-284 Legacy Refactor Completeness Framework。「确保没有遗漏」无法用枚举证明——你只能验证你想得到要列举的东西。策略=两条腿:(1) 从 legacy 真实 artifact **机械化推导**待办清单;(2) **差分神谕**让分歧自报。
|
|
338
|
+
|
|
339
|
+
每个迁移针对每一轴宣告三件事:**derive**(清单来源)· **detect**(oracle)· **gate 时机**。此处标为已覆盖者对映既有 UDS 标准——勿重复造轮子。
|
|
340
|
+
|
|
341
|
+
| 轴 | Derive(清单来源) | Detect(oracle) | Gate | 覆盖来源 |
|
|
342
|
+
|------|----------------------|-----------------|------|------------|
|
|
343
|
+
| ① Feature | route table/controller/menu/permissions | inventory diff(legacy vs new) | pre-flight | XSPEC-200 feature-manifest + `/vo-inventory`;XSPEC-206 |
|
|
344
|
+
| ② Behavior | curated 场景 + prod-log 提取 | behavior-snapshot 对等 | pre-UAT | XSPEC-201 behavior-snapshot;**contract tests**(本 skill) |
|
|
345
|
+
| ③ **持久化语义** | DB schema 全列语义签核(Gate 0) | **cutover-boundary 聚合对账** | **post-cutover** | **本 skill — Post-Cutover 数据对账(#134)** |
|
|
346
|
+
| ④ 隐含规则 | cron/queue/计算列/middleware source 扫描 | 每字段 3 问题 + 非 HTTP Devil's Advocate | pre-flight | 本 skill Gate 0(HTTP 层:XSPEC-201 Step 7);XSPEC-284 R4(非 HTTP,未来) |
|
|
347
|
+
| ⑤ **背景副作用** | crontab/queue config/webhook 注册表/邮件点 | **逐 job「存在 + 已触发」** | pre-flight + **post-cutover** | **本 skill — 背景作业/副作用完整性** |
|
|
348
|
+
| ⑥ 非功能性 | legacy 性能基线 + 并发清单 | 延迟/吞吐回归 + 隔离 | pre-UAT | XSPEC-286(拆分) |
|
|
349
|
+
| ⑦ 数据完整性 | schema 类型/编码/时区清单 | 行数 + checksum + 编码字节 + 聚合相等 | post-migration + post-cutover | XSPEC-172 data-migration-testing;XSPEC-206;XSPEC-284 R6(未来) |
|
|
350
|
+
| ⑧ **状态机** | legacy 转移图(enum + 更新点 + 生产序列) | **合法转移 + 时序不变量(`created ≤ updated`)** | pre-UAT + **post-cutover** | **本 skill — 状态机与时序对等**(XSPEC-287) |
|
|
351
|
+
| ⑨ **错误路径** | legacy 异常层级/错误码(本 skill derive + 降级) | **错误路径快照 + 系统性 gap 分析 + 错误响应差分** | pre-UAT + cutover before/after | **本 skill — 错误路径完整性**(R1/R3)+ **full-coverage-testing** Migration Error-Path Completeness(R2/R4);XSPEC-288 |
|
|
352
|
+
| **跨轴** | — | **shadow run**(镜像生产至两端)/**replay**(重放 legacy 请求) | cutover before/after | XSPEC-284 R5(泛化 `/vo-snapshot` 对等,未来) |
|
|
353
|
+
|
|
354
|
+
每轴宣告〔清单来源 derive|oracle detect|gate 时机〕;标为已覆盖者对映既有 UDS 标准,**勿重复造轮子**。未宣告的轴视为**已知遗漏风险**。本框架 P0 落地=轴③④⑤(本 skill);轴⑥已拆 XSPEC-286(落地于 performance-standards)、**轴⑧已落地于本 skill 状态机与时序对等(XSPEC-287)**、**轴⑨已落地(XSPEC-288)=本 skill 错误路径完整性(R1/R3 derive + 降级)+ full-coverage-testing(R2/R4 系统性 gap 分析 + 错误响应差分)**。
|
|
355
|
+
|
|
176
356
|
## 参考
|
|
177
357
|
|
|
178
358
|
- 核心规范:[refactoring-standards.md](../../../../core/refactoring-standards.md)
|
|
179
359
|
- 相关:[contract-test-assistant](../contract-test-assistant/SKILL.md) — 迁移后持续契约验证的策略
|
|
360
|
+
- 相关:[behavior-snapshot](../../../../core/behavior-snapshot.md) — Curated golden-master 对等(3-gate 轴②)
|
|
361
|
+
- 相关:[observability-assistant](../observability-assistant/SKILL.md) — Post-cutover oracle 的对账排程 + 告警规则
|
|
362
|
+
- 框架:XSPEC-284 Legacy Refactor Completeness Framework — 9 轴 SSOT
|
|
180
363
|
|
|
181
364
|
## 版本历史
|
|
182
365
|
|
|
183
366
|
| 版本 | 日期 | 变更 |
|
|
184
367
|
|------|------|------|
|
|
368
|
+
| 1.4.0 | 2026-06-17 | 新增错误路径完整性(轴⑨,XSPEC-288):机械化异常/错误码 derive(R1)+ 降级对等清单(R3)+ 生产频率重要性分级;系统性 gap 分析 + 错误响应差分(R2/R4)委由 full-coverage-testing |
|
|
369
|
+
| 1.3.0 | 2026-06-17 | 新增状态机与时序对等(轴⑧,XSPEC-287):三方转移图提取、合法转移验证、时序不变量、序列/幂等对等、与 XSPEC-286 轴⑥边界 |
|
|
370
|
+
| 1.2.0 | 2026-06-17 | 新增 Post-Cutover 生产数据对账、背景作业完整性验证、9 轴完整性矩阵附录 |
|
|
185
371
|
| 1.1.0 | 2026-05-26 | 新增:API 迁移契约测试章节——强制 fixture 捕获协议、C#/TS 模板、逐字段审计清单(XSPEC-233 / closes #112) |
|
|
186
372
|
| 1.0.0 | 2026-03-24 | 初始版本 |
|
|
187
373
|
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
source: ../../../../skills/observability-assistant/guide.md
|
|
3
3
|
source_version: 1.0.0
|
|
4
4
|
translation_version: 1.0.0
|
|
5
|
-
last_synced: 2026-
|
|
6
|
-
source_hash:
|
|
5
|
+
last_synced: 2026-07-09
|
|
6
|
+
source_hash: 16143a7c8bbb
|
|
7
7
|
status: current
|
|
8
8
|
scope: universal
|
|
9
9
|
description: |
|
|
@@ -3,8 +3,8 @@ name: orchestrate
|
|
|
3
3
|
source: ../../../../skills/orchestrate/SKILL.md
|
|
4
4
|
source_version: 2.0.0
|
|
5
5
|
translation_version: 2.0.0
|
|
6
|
-
last_synced: 2026-
|
|
7
|
-
source_hash:
|
|
6
|
+
last_synced: 2026-07-16
|
|
7
|
+
source_hash: e66c388ce04a
|
|
8
8
|
scope: universal
|
|
9
9
|
description: |
|
|
10
10
|
[UDS] 以 Claude 原生 Agent tool 编排多任务执行计划(DAG-based,无外部引擎)。
|
|
@@ -3,8 +3,8 @@ name: plan
|
|
|
3
3
|
source: ../../../../skills/plan/SKILL.md
|
|
4
4
|
source_version: 2.0.0
|
|
5
5
|
translation_version: 2.0.0
|
|
6
|
-
last_synced: 2026-
|
|
7
|
-
source_hash:
|
|
6
|
+
last_synced: 2026-07-16
|
|
7
|
+
source_hash: 375b1ddb3613
|
|
8
8
|
scope: universal
|
|
9
9
|
description: |
|
|
10
10
|
[UDS] 从 Spec 文档、OpenSpec 变更或自由文本需求生成 plan.json。
|
|
@@ -3,8 +3,8 @@ name: push
|
|
|
3
3
|
source: ../../../../skills/push/SKILL.md
|
|
4
4
|
source_version: 2.0.0
|
|
5
5
|
translation_version: 2.0.0
|
|
6
|
-
last_synced: 2026-
|
|
7
|
-
source_hash:
|
|
6
|
+
last_synced: 2026-07-16
|
|
7
|
+
source_hash: cb3cc9fb2313
|
|
8
8
|
scope: universal
|
|
9
9
|
description: |
|
|
10
10
|
[UDS] AI 辅助 git push 安全层:质量门禁 + 协作护栏。
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../../../skills/retrospective-assistant/SKILL.md
|
|
3
3
|
source_version: 1.0.0
|
|
4
|
-
source_hash:
|
|
4
|
+
source_hash: e9de3576878e
|
|
5
5
|
translation_version: 1.0.0
|
|
6
|
-
last_synced: 2026-
|
|
6
|
+
last_synced: 2026-07-16
|
|
7
7
|
status: current
|
|
8
8
|
description: |
|
|
9
9
|
[UDS] 引导 Sprint 与 Release 周期的结构化团队回顾。
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../../../skills/reverse-engineer/SKILL.md
|
|
3
3
|
source_version: 1.2.0
|
|
4
|
-
source_hash:
|
|
4
|
+
source_hash: 469dcdc76a83
|
|
5
5
|
translation_version: 1.2.0
|
|
6
|
-
last_synced: 2026-
|
|
6
|
+
last_synced: 2026-07-16
|
|
7
7
|
status: current
|
|
8
8
|
description: |
|
|
9
9
|
系统考古——跨逻辑、数据、运行时三维度逆向工程代码。
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
source: ../../../../skills/runbook-assistant/guide.md
|
|
3
3
|
source_version: 1.0.0
|
|
4
4
|
translation_version: 1.0.0
|
|
5
|
-
last_synced: 2026-
|
|
6
|
-
source_hash:
|
|
5
|
+
last_synced: 2026-07-16
|
|
6
|
+
source_hash: 2b8128b920e5
|
|
7
7
|
status: current
|
|
8
8
|
scope: universal
|
|
9
9
|
description: |
|
|
@@ -3,8 +3,8 @@ name: skill-builder
|
|
|
3
3
|
source: ../../../../skills/skill-builder/SKILL.md
|
|
4
4
|
source_version: 1.0.0
|
|
5
5
|
translation_version: 1.0.0
|
|
6
|
-
last_synced: 2026-
|
|
7
|
-
source_hash:
|
|
6
|
+
last_synced: 2026-07-16
|
|
7
|
+
source_hash: 1c5f079e0851
|
|
8
8
|
status: current
|
|
9
9
|
scope: universal
|
|
10
10
|
description: |
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
source: ../../../../skills/slo-assistant/guide.md
|
|
3
3
|
source_version: 1.0.0
|
|
4
4
|
translation_version: 1.0.0
|
|
5
|
-
last_synced: 2026-
|
|
6
|
-
source_hash:
|
|
5
|
+
last_synced: 2026-07-16
|
|
6
|
+
source_hash: 3e7e0131f52b
|
|
7
7
|
status: current
|
|
8
8
|
scope: universal
|
|
9
9
|
description: |
|
|
@@ -3,8 +3,8 @@ name: spec-derive
|
|
|
3
3
|
source: ../../../../skills/spec-derivation/SKILL.md
|
|
4
4
|
source_version: 1.0.0
|
|
5
5
|
translation_version: 1.0.0
|
|
6
|
-
last_synced: 2026-
|
|
7
|
-
source_hash:
|
|
6
|
+
last_synced: 2026-07-16
|
|
7
|
+
source_hash: 094ceb9af93a
|
|
8
8
|
status: current
|
|
9
9
|
scope: partial
|
|
10
10
|
description: |
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
source: ../../../../skills/spec-driven-dev/SKILL.md
|
|
3
3
|
source_version: 1.2.0
|
|
4
4
|
translation_version: 1.2.0
|
|
5
|
-
last_synced: 2026-
|
|
6
|
-
source_hash:
|
|
5
|
+
last_synced: 2026-07-16
|
|
6
|
+
source_hash: 488aea3f5120
|
|
7
7
|
status: current
|
|
8
8
|
description: |
|
|
9
9
|
在编写代码前,建立、审查和管理规格文件。
|
|
@@ -190,12 +190,50 @@ The system SHALL [behavior description].
|
|
|
190
190
|
| `## REMOVED Requirements` | Deprecated features | 移除功能 |
|
|
191
191
|
| `## RENAMED Requirements` | Name changes | 重新命名 |
|
|
192
192
|
|
|
193
|
+
## Cross-Artifact Analysis (`/sdd analyze`) | 跨 artifact 一致性检查
|
|
194
|
+
|
|
195
|
+
The **executable face** of the acceptance-criteria-traceability standard +
|
|
196
|
+
forward-derivation single-spine principle (XSPEC-262). Validates that every test
|
|
197
|
+
is a faithful projection of the AC spine across specs.
|
|
198
|
+
本命令是 acceptance-criteria-traceability + forward-derivation single-spine 的**可执行面**,验证每个测试是否忠实投影 AC 主干。
|
|
199
|
+
|
|
200
|
+
| Signal | Meaning | Gate |
|
|
201
|
+
|--------|---------|------|
|
|
202
|
+
| **orphan test** | `@SPEC-NNN @AC-N` references an AC no spec defines / 引用不存在的 AC | 🔴 BLOCKING |
|
|
203
|
+
| **uncovered** | an AC has no `@SPEC-NNN @AC-N` reference / AC 无测试引用 | report only / 仅报告 |
|
|
204
|
+
| **not_implemented** | AC marked so in its `.ac.yaml` / `.ac.yaml` 标记 | 🔴 BLOCKING before UAT |
|
|
205
|
+
| **cross-spec conflict** | same AC id defined in >1 spec / 同 AC id 跨多 spec | 🔴 BLOCKING |
|
|
206
|
+
| **orphan .feature** | Gherkin `@AC-N` tag referencing a non-existent AC / @AC-N 引用不存在 | 🔴 BLOCKING |
|
|
207
|
+
| **AC w/o scenario** | AC has no `.feature` scenario (when BDD in use) / AC 无 BDD scenario | report only / 仅报告 |
|
|
208
|
+
| **user-guide drift** | user-guide `T-N` with no matching journey/E2E test id / 手册 T-N 无对应测试 | 🔴 BLOCKING |
|
|
209
|
+
|
|
210
|
+
Coverage % uses the acceptance-criteria-traceability formula (not_implemented excluded). `--json` for CI.
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
npm run sdd:analyze -- --specs specs --tests tests [--userguide docs] [--json]
|
|
214
|
+
```
|
|
215
|
+
`--userguide <dir>` enables user-guide↔E2E drift detection (T-NNN, XSPEC-260/257). / 启用手册↔E2E drift 侦测。
|
|
216
|
+
|
|
217
|
+
**vs `/ac-coverage`**: ac-coverage = per-spec detailed AC↔test matrix;`/sdd analyze` = cross-spec/batch consistency + orphan detection(互补、不取代)。
|
|
218
|
+
|
|
219
|
+
## Spec-vs-Code Convergence Check | 规格与实作漂移侦测(2026-07-10,spec-kit `/converge` 借鉴)
|
|
220
|
+
|
|
221
|
+
**vs `/sdd analyze`**:`/sdd analyze` 问「测试有没有正确引用 AC」(引用完整性,deterministic script);convergence check 问「代码的实际行为是否真的符合 spec 描述」(语意漂移,需要读码判断,走 `sdd.flow.yaml` verify 阶段的 `spec-match-check` ai-check step)——两者互补、检查的是不同层次的问题,不重叠。
|
|
222
|
+
|
|
223
|
+
虽然定义在 7-phase 状态机的 `verify` 阶段(一次性 gate),**这个检查可以在任何时间点对已归档的 spec 独立重跑**——用于侦测 spec 归档后、code 持续演进累积出的漂移(例如后续 commit 改了行为但没回头更新 spec)。重跑时:
|
|
224
|
+
|
|
225
|
+
- 落差分类:`missing`(spec 要求但没做)/`partial`(做一半)/`contradicts`(行为与描述不同)/`unrequested`(做了没被要求的事)
|
|
226
|
+
- 严重度:`CRITICAL`(违反 spec 明确 MUST)/`HIGH`/`MEDIUM`/`LOW`
|
|
227
|
+
- 唯读比对——只列出发现,不自动修改 spec 或代码
|
|
228
|
+
- 适合定期(如季度)对重要 spec 抽查,或怀疑特定 spec 已过时时针对性执行
|
|
229
|
+
|
|
193
230
|
## Usage | 使用方式
|
|
194
231
|
|
|
195
232
|
```
|
|
196
233
|
/sdd - Interactive spec creation wizard | 互动式规格建立向导
|
|
197
234
|
/sdd auth-flow - Create spec for specific feature | 为特定功能建立规格
|
|
198
235
|
/sdd review - Review existing specs | 审查现有规格
|
|
236
|
+
/sdd analyze - Cross-artifact consistency check | 跨 artifact 一致性检查
|
|
199
237
|
/sdd --sync-check - Check sync status | 检查同步状态
|
|
200
238
|
```
|
|
201
239
|
|
|
@@ -3,8 +3,8 @@ name: sweep
|
|
|
3
3
|
source: ../../../../skills/sweep/SKILL.md
|
|
4
4
|
source_version: 1.0.0
|
|
5
5
|
translation_version: 1.0.0
|
|
6
|
-
last_synced: 2026-
|
|
7
|
-
source_hash:
|
|
6
|
+
last_synced: 2026-07-16
|
|
7
|
+
source_hash: 340ed7c83bbd
|
|
8
8
|
status: current
|
|
9
9
|
scope: universal
|
|
10
10
|
description: |
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../CHANGELOG.md
|
|
3
|
-
source_version: 6.
|
|
4
|
-
translation_version: 6.
|
|
5
|
-
last_synced: 2026-07-
|
|
3
|
+
source_version: 6.2.0
|
|
4
|
+
translation_version: 6.2.0
|
|
5
|
+
last_synced: 2026-07-31
|
|
6
6
|
status: current
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -17,6 +17,37 @@ status: current
|
|
|
17
17
|
|
|
18
18
|
## [Unreleased]
|
|
19
19
|
|
|
20
|
+
## [6.2.0] - 2026-07-31
|
|
21
|
+
|
|
22
|
+
> **Reconciler 一直在刪除不是它安裝的東西,事後還回報成功。** `uds update --plan` 在某個採用 repo 提議移除 86 個檔案,其中 72 個是 UDS 有出貨、專案也正在用的技能、指令與選項檔。十二個缺陷,形狀完全相同:一個格式完好、卻永遠對不上的名字——所以什麼都不會報錯,而計畫看起來很權威。**如果你曾看著 `--plan` 的輸出、納悶它為什麼要刪掉你的東西——那不是你的問題。**
|
|
23
|
+
|
|
24
|
+
### 新增
|
|
25
|
+
|
|
26
|
+
- **`CLAUDE.md` / `AGENTS.md` 的標準索引改為陳述數量並指向 manifest**,不再逐條列出標準名稱(XSPEC-358 R1)。原本的列舉每個專案約佔 2 KB 的常駐 context,且與 `.standards/manifest.json` 重複——後者才是權威來源且永遠不會過期。區塊會在下次 `uds update` 時自行重生,你不需要做任何事。**若你有工具在解析那份列舉,請改讀 `manifest.standards`。**
|
|
27
|
+
|
|
28
|
+
### 修復
|
|
29
|
+
|
|
30
|
+
- **Reconciler 不再刪除你自己寫的技能。** `isUDSManaged` 對技能資料夾底下的每一個目錄都回傳 true,於是任何不是當前 UDS 版本出貨的東西都被提議移除。某個採用端的計畫列出了十四個手寫的 ops 技能要刪。現在改由 UDS 自己的 `skills/` 樹判定來源——這同時涵蓋舊版 CLI 誤複製進來的非技能兄弟目錄(`_shared`、`agents`、`ai`、`tools`、`workflows`),所以它們仍可被清理——或由已記錄的雜湊判定。其餘一律發警告而非移除。**刻意付出的代價**:四個 UDS 此後已下架的技能改為只警告不刪除,因為磁碟上沒有任何東西能把它們和你自己的作品區分開。
|
|
31
|
+
- **`manifest.skills.names` 與 `commands.names` 不再被當成期望狀態。** 兩者都只有 `init` 會寫,其他程式路徑一律不寫。某個 repo 的清單跨越 9 個 commit、5 次 UDS 升級一直凍結在 32 個技能,而出貨集合已成長到 55——於是 40 個可用的技能被判為「no longer in desired state」。期望集合現在改為「執行中的 UDS 版本出貨什麼」,那本來就是 `uds update` 實際安裝的東西。全部 18 個安裝點也改為同步維護這兩份清單。
|
|
32
|
+
- **Gemini CLI 的指令不再被提議刪除。** 掃描器寫死剝除 `.md`,而 Gemini 的指令是 `.toml`,鍵值停在 `commit.toml`,永遠對不上期望鍵 `commit`——30 個全被判為孤兒。副檔名現在由 agent 設定提供,與寫出這些檔案的安裝器共用同一份。
|
|
33
|
+
- **UDS 不再提議刪除它自己的安裝紀錄。** 指令安裝器寫出的 `.manifest.json` 被當成了散落的指令。
|
|
34
|
+
- **已選取的選項不再被提議刪除。** `calculateOptions` 把 `manifest.options` 的鍵當成標準 id 迭代,找不到叫 `workflow` 的標準就跳過——於是每個專案的期望選項集合都是空的。某個 repo 的計畫提議刪掉它自己 manifest 指名的全部七個選項。manifest 鍵到註冊表類別的對應現在放在單一份表,安裝器與計算器共用。
|
|
35
|
+
- **語系包與其他 extensions 不再被提議刪除。** `manifest.extensions` 在 reconciler 裡根本沒有分支,於是每個已安裝的 extension——語系包、語言風格指南、框架樣式——都落在期望狀態之外,而 manifest 仍列著它、說它已安裝。
|
|
36
|
+
- **Reconcile 不再把所有技能重裝成英文。** 技能安裝路徑漏掉了指令路徑有傳的 locale 參數,於是在地化技能被無聲換成英文 canonical 版,而 `skills.locale` 全程仍記著原本的語系。
|
|
37
|
+
- **成功的 reconcile 現在會記下它 reconcile 到哪個版本。** `upstream.version` 從不更新,於是 `uds check` 仍回報專案落後,任何讀取該欄位的落後監測也會一直標記它。
|
|
38
|
+
- **重寫過的整合區塊不再把自己回報為「已修改」。** `migrate_block` 刷新了 `integrationBlockHashes`,卻沒刷新 `fileHashes`——而後者才是檔案完整性比對的對象。
|
|
39
|
+
- **Reconciler 與 `uds update` 現在產生相同的整合區塊。** 兩個獨立的建構者早已漂移:reconciler 那份完全沒有內容類別,於是 reconcile 一個專案會無聲刪掉它的提交訊息段落;它也把輸出語言一律預設為英文(無視 `options.output_language`),並以工具鍵查 `integrationConfigs`,而 manifest 是以檔名為鍵。
|
|
40
|
+
- **索引區塊的選項數量計算正確了。** 原本從 `manifest.standards` 數,而該欄位記錄選項的方式並不一致——某個 repo 明明裝了七個選項,區塊卻寫著「options 0」。
|
|
41
|
+
- **`uds check` 不再對新的索引區塊回報假的「未同步」。** 有兩處檢查仍以已廢止的列舉為契約、逐一 grep 標準名,於是升級後回報 `5/70` 與 `0/7`,並建議執行 `uds update`——而那會重新產生同一個區塊。兩處現在改為核對宣告數量與 manifest 是否一致,這反而抓得到「數量過期」,那是名稱 grep 永遠抓不到的。
|
|
42
|
+
- **`manifest.integrations` 兩種形狀都能正確讀取。** 它被一條路徑寫成工具鍵、被另一條寫成檔案路徑;實測 21 個 repo 中有 20 個存的是檔案路徑,而 reconciler 只懂工具鍵——於是它在這 20 個 repo 全都提議剝掉 `CLAUDE.md` / `AGENTS.md` 的 UDS 區塊。
|
|
43
|
+
- **`uds update --plan --integrations-only` 不再寫檔。** `--integrations-only` 的分支排在 `--plan` 檢查之前。
|
|
44
|
+
- **`uds init` 不再把 husky 裝進 UDS source repo**(從 repo root 執行測試套件時)。
|
|
45
|
+
|
|
46
|
+
### 變更
|
|
47
|
+
|
|
48
|
+
- **發版閘門重新開始量測。** `pre-release-check.sh` 直接呼叫 `tsx`,於是在 PATH 上沒有 tsx 的 shell 中,三項檢查會因為找不到執行檔而回報「✗ Failed」——與真正查出問題無從分辨;現在它會先解析 `tsx`,找不到就直接中止。另外它的 dogfooding 閘門執行 `uds check` 時沒帶 `--force`,而 DEC-044 的自我採用守衛會在本 repo 內拒絕該指令——**這個閘門自 5.15.1 加入以來,每一次發版都是紅的。**
|
|
49
|
+
|
|
50
|
+
|
|
20
51
|
## [6.1.1] - 2026-07-18
|
|
21
52
|
|
|
22
53
|
> **`uds check` 悄悄量錯了東西。** 它的落後檢查拿你的標準去比 CLI 自己 bundled 的副本、而非 npm——CLI 一舊就吐出倒退、無意義的訊息,且結構上永遠說不出「你的標準過期了」——還把那則訊息埋在逐檔一行的「未變更」底下。
|
|
@@ -15,7 +15,7 @@ status: current
|
|
|
15
15
|
|
|
16
16
|
> **語言**: [English](../../README.md) | 繁體中文 | [简体中文](../zh-CN/README.md)
|
|
17
17
|
|
|
18
|
-
**版本**: 6.
|
|
18
|
+
**版本**: 6.2.0 | **發布日期**: 2026-07-30 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
|
|
19
19
|
|
|
20
20
|
語言無關、框架無關的軟體專案文件標準。透過 AI 原生工作流,確保不同技術堆疊之間的一致性、品質和可維護性。
|
|
21
21
|
|
|
@@ -88,49 +88,91 @@ npx universal-dev-standards init
|
|
|
88
88
|
|
|
89
89
|
## 🏗️ 系統架構
|
|
90
90
|
|
|
91
|
-
UDS
|
|
91
|
+
UDS 的內容沿**兩條彼此獨立的軸**組織。兩者回答的是不同問題,把它們混為一談是誤讀本架構
|
|
92
|
+
最常見的原因,因此分開陳述。
|
|
93
|
+
|
|
94
|
+
### 軸一 — 深度:哪些內容必須常駐載入
|
|
95
|
+
|
|
96
|
+
這條軸是一份**行為契約**:它告訴 AI 代理什麼要一開始就讀、什麼留到被問時再讀。
|
|
97
|
+
影響 context 成本的是這條軸。
|
|
92
98
|
|
|
93
99
|
```mermaid
|
|
94
100
|
graph TD
|
|
95
|
-
A[AI 助手 / 開發者] -->
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
C --> C1[Token 最佳化]
|
|
100
|
-
C --> C2[互動式引導]
|
|
101
|
-
|
|
102
|
-
D --> D1[完整理論與定義]
|
|
103
|
-
D --> D2[工具自動化配置]
|
|
104
|
-
|
|
105
|
-
C1 -. "回退機制" .-> D1
|
|
101
|
+
A[AI 助手 / 開發者] --> R["<b>Rules 規則</b><br/>core/*.md<br/><b>必讀 Always Read</b>"]
|
|
102
|
+
R -- "需要說明或實例" --> G["<b>Guides 指南</b><br/>core/guides/*.md<br/>僅按需讀取"]
|
|
103
|
+
R -- "需要完整方法論(TDD、BDD…)" --> M["<b>Methodologies 方法論</b><br/>methodologies/guides/*.md<br/>僅按需讀取"]
|
|
106
104
|
```
|
|
107
105
|
|
|
108
|
-
|
|
|
106
|
+
| 層級 | 位置 | 內容 | AI 行為 |
|
|
107
|
+
| :--- | :--- | :--- | :--- |
|
|
108
|
+
| **Rules 規則** | `core/*.md` | 可執行規則、檢查清單、門檻值 | **必讀 (Always Read)** |
|
|
109
|
+
| **Guides 指南** | `core/guides/*.md` | 說明、教學、範例 | 僅按需讀取 |
|
|
110
|
+
| **Methodologies 方法論** | `methodologies/guides/*.md` | 完整方法論指南 | 僅按需讀取 |
|
|
111
|
+
|
|
112
|
+
### 軸二 — 格式:同一份標準的兩種編碼
|
|
113
|
+
|
|
114
|
+
這條軸**不帶任何深度含意**。同一份標準的 `.ai.yaml` 與 `.md` 是同一份材料的兩種編碼,
|
|
115
|
+
依讀者是誰而選用。
|
|
116
|
+
|
|
117
|
+
| 面向 | `ai/standards/*.ai.yaml` | `core/*.md` |
|
|
109
118
|
| :--- | :--- | :--- |
|
|
110
|
-
|
|
|
111
|
-
|
|
|
112
|
-
|
|
|
119
|
+
| **編碼** | 結構化 YAML | 散文式 Markdown |
|
|
120
|
+
| **適用於** | 機器確定性查詢 | 人類閱讀與審查 |
|
|
121
|
+
| **相對體積** | 約為 Markdown 版的 69%——是**換一種格式,不是壓縮層**<sup>†</sup> | 基準 |
|
|
122
|
+
|
|
123
|
+
<sup>†</sup> 2026-07-23 實測,涵蓋同時具備兩種形式的 135 份標準:YAML 872,380 bytes,
|
|
124
|
+
Markdown 1,271,471 bytes。重現指令見
|
|
125
|
+
[Content Architecture §7](../../docs/reference/CONTENT-ARCHITECTURE.md#7-how-to-re-measure)。
|
|
126
|
+
|
|
127
|
+
> 📐 深度契約的完整定義、它在各整合工具中的落實情形,以及契約與現況之間已量測到的落差,
|
|
128
|
+
> 記於 **[docs/reference/CONTENT-ARCHITECTURE.md](../../docs/reference/CONTENT-ARCHITECTURE.md)**。
|
|
113
129
|
|
|
114
130
|
---
|
|
115
131
|
|
|
116
132
|
## 🤖 AI 工具支援
|
|
117
133
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
|
127
|
-
|
|
|
128
|
-
| **
|
|
129
|
-
| **
|
|
130
|
-
| **
|
|
131
|
-
| **
|
|
132
|
-
|
|
133
|
-
|
|
134
|
+
UDS 提供 **11 個現行工具的整合,其中 1 個已通過行為驗證。**
|
|
135
|
+
|
|
136
|
+
這是刻意分開的兩個數字。**狀態**說的是**我們寫的那份整合**有多完整;
|
|
137
|
+
**驗證**說的是**有沒有人確認過該工具真的讀得到、且行為確實照做**——
|
|
138
|
+
靠實際跑探針並留下輸出紀錄。在今天之前,第二個問題從來沒有被問過,
|
|
139
|
+
所以它的答案不能被假設。探針設計與驗證排程(Antigravity → Codex → Claude Code → 其餘)
|
|
140
|
+
見 XSPEC-357。
|
|
141
|
+
|
|
142
|
+
| AI 工具 | 狀態 | 驗證 | Skills | 斜線命令 | 設定檔 |
|
|
143
|
+
| :--- | :--- | :---: | :---: | :---: | :--- |
|
|
144
|
+
| **Claude Code** | ✅ 完整支援 | 🔬 —<sup>◆</sup> | **55** | **51** | `CLAUDE.md` |
|
|
145
|
+
| **OpenCode** | ✅ 完整支援 | 🔬 — | **55** | **51** | `AGENTS.md` |
|
|
146
|
+
| **Cursor** | ✅ 完整支援 | 🔬 — | **核心** | **模擬支援** | `.cursorrules` |
|
|
147
|
+
| **Roo Code** | ✅ 完整支援 | 🔬 — | **核心** | **工作流** | `.roo/rules/` |
|
|
148
|
+
| **Cline** | 🔶 部分支援 | 🔬 — | **核心** | **工作流** | `.clinerules` |
|
|
149
|
+
| **Windsurf** | 🔶 部分支援 | 🔬 — | **核心** | **規則書** | `.windsurfrules` |
|
|
150
|
+
| **GitHub Copilot** | 🔶 部分支援 | 🔬 — | **核心** | **提示詞** | `.github/copilot-instructions.md` |
|
|
151
|
+
| **OpenAI Codex** | 🔶 部分支援 | ✅ 2026-07-23 | **核心** | — | `AGENTS.md` |
|
|
152
|
+
| **Aider** | 🔶 部分支援 | 🔬 — | — | — | `AGENTS.md` |
|
|
153
|
+
| **Continue.dev** | 🔶 部分支援 | 🔬 — | — | — | `.continue/config.json` |
|
|
154
|
+
| **Google Antigravity** | ⚠️ 最低限度 | 🔬 — | —<sup>‡</sup> | — | `.antigravity/rules.md` |
|
|
155
|
+
| **Gemini CLI** | ⛔ 已停止服務<sup>†</sup> | — | — | — | `GEMINI.md`(已凍結) |
|
|
156
|
+
|
|
157
|
+
> **狀態圖例**(我們寫的整合有多完整):
|
|
158
|
+
> ✅ 完整支援 | 🔶 部分支援 | ⚠️ 最低限度 | ⏳ 計畫中 | ⛔ 已停止服務
|
|
159
|
+
>
|
|
160
|
+
> **驗證圖例**(是否有探針實跑確認該工具行為確實照做):
|
|
161
|
+
> ✅ *日期* 已驗證 | 🔬 — 尚未驗證 | ⌛ 已過期 | ❌ 未通過
|
|
162
|
+
|
|
163
|
+
<sup>◆</sup> Claude Code 是維護者每日實際使用的工具,這也是它的整合最完整的原因——
|
|
164
|
+
但**每日使用不等於一次留下紀錄的驗證**,且工具不能當自己的裁判。
|
|
165
|
+
它跟其他工具一樣排在佇列裡。
|
|
166
|
+
|
|
167
|
+
<sup>†</sup> Google 已於 **2026-06-18** 終止 Gemini CLI(2026-05-19 I/O 宣布,30 天遷移窗),
|
|
168
|
+
由 Antigravity CLI 接手。`integrations/gemini-cli/` 與 `.gemini/` 兩棵樹已**凍結**——
|
|
169
|
+
保留供參考、排除於同步檢查之外、不再維護。見 [`.gemini/DEPRECATED.md`](../../.gemini/DEPRECATED.md)。
|
|
170
|
+
|
|
171
|
+
<sup>‡</sup> Antigravity 支援 skills,但正確的安裝路徑**尚未對實際的 Antigravity CLI 驗證**。
|
|
172
|
+
兩個候選互相衝突:`~/.gemini/antigravity-cli/plugins/<name>/skills/`(官方 plugin 文件)
|
|
173
|
+
與 `.agent/skills/`(UDS 自己 2026-02 的 spec,寫於 Gemini CLI 時代)。
|
|
174
|
+
因此在確認之前,`uds init` **不會**為此目標安裝 skills——
|
|
175
|
+
路徑填錯會是靜默失敗,比不安裝更糟。
|
|
134
176
|
|
|
135
177
|
---
|
|
136
178
|
|