universal-dev-standards 6.1.0 → 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.
Files changed (78) hide show
  1. package/bundled/locales/zh-CN/CHANGELOG.md +46 -4
  2. package/bundled/locales/zh-CN/README.md +75 -33
  3. package/bundled/locales/zh-CN/SECURITY.md +1 -1
  4. package/bundled/locales/zh-CN/core/behavior-snapshot.md +2 -2
  5. package/bundled/locales/zh-CN/core/data-migration-testing.md +2 -2
  6. package/bundled/locales/zh-CN/docs/CHEATSHEET.md +4 -4
  7. package/bundled/locales/zh-CN/docs/CLI-INIT-OPTIONS.md +9 -3
  8. package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +10 -11
  9. package/bundled/locales/zh-CN/docs/USER-MANUAL.md +40 -21
  10. package/bundled/locales/zh-CN/integrations/gemini-cli/README.md +12 -0
  11. package/bundled/locales/zh-CN/skills/ac-coverage/SKILL.md +11 -5
  12. package/bundled/locales/zh-CN/skills/adr-assistant/SKILL.md +2 -2
  13. package/bundled/locales/zh-CN/skills/commands/brainstorm.md +2 -2
  14. package/bundled/locales/zh-CN/skills/commit-standards/SKILL.md +2 -2
  15. package/bundled/locales/zh-CN/skills/contract-test-assistant/SKILL.md +2 -2
  16. package/bundled/locales/zh-CN/skills/deploy-assistant/SKILL.md +2 -2
  17. package/bundled/locales/zh-CN/skills/dev-methodology/SKILL.md +2 -2
  18. package/bundled/locales/zh-CN/skills/dev-workflow-guide/SKILL.md +2 -2
  19. package/bundled/locales/zh-CN/skills/journey-test-assistant/SKILL.md +2 -2
  20. package/bundled/locales/zh-CN/skills/knowledge-graph/SKILL.md +2 -2
  21. package/bundled/locales/zh-CN/skills/knowledge-graph/guide.md +2 -2
  22. package/bundled/locales/zh-CN/skills/migration-assistant/SKILL.md +188 -2
  23. package/bundled/locales/zh-CN/skills/observability-assistant/guide.md +2 -2
  24. package/bundled/locales/zh-CN/skills/orchestrate/SKILL.md +2 -2
  25. package/bundled/locales/zh-CN/skills/plan/SKILL.md +2 -2
  26. package/bundled/locales/zh-CN/skills/push/SKILL.md +2 -2
  27. package/bundled/locales/zh-CN/skills/retrospective-assistant/SKILL.md +2 -2
  28. package/bundled/locales/zh-CN/skills/reverse-engineer/SKILL.md +2 -2
  29. package/bundled/locales/zh-CN/skills/runbook-assistant/guide.md +2 -2
  30. package/bundled/locales/zh-CN/skills/skill-builder/SKILL.md +2 -2
  31. package/bundled/locales/zh-CN/skills/slo-assistant/guide.md +2 -2
  32. package/bundled/locales/zh-CN/skills/spec-derivation/SKILL.md +2 -2
  33. package/bundled/locales/zh-CN/skills/spec-driven-dev/SKILL.md +40 -2
  34. package/bundled/locales/zh-CN/skills/sweep/SKILL.md +2 -2
  35. package/bundled/locales/zh-CN/skills/testing-guide/SKILL.md +2 -2
  36. package/bundled/locales/zh-TW/CHANGELOG.md +47 -4
  37. package/bundled/locales/zh-TW/README.md +75 -33
  38. package/bundled/locales/zh-TW/SECURITY.md +1 -1
  39. package/bundled/locales/zh-TW/core/audit-trail.md +2 -2
  40. package/bundled/locales/zh-TW/core/behavior-snapshot.md +2 -2
  41. package/bundled/locales/zh-TW/core/browser-compatibility-standards.md +18 -7
  42. package/bundled/locales/zh-TW/docs/CHEATSHEET.md +4 -4
  43. package/bundled/locales/zh-TW/docs/CLI-INIT-OPTIONS.md +9 -3
  44. package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +10 -11
  45. package/bundled/locales/zh-TW/docs/USER-MANUAL.md +40 -21
  46. package/bundled/locales/zh-TW/integrations/gemini-cli/README.md +12 -0
  47. package/bundled/skills/commands/journey-test.md +80 -6
  48. package/bundled/skills/commands/skill-builder.md +75 -6
  49. package/package.json +3 -3
  50. package/src/commands/check.js +77 -20
  51. package/src/commands/config.js +9 -0
  52. package/src/commands/init.js +15 -1
  53. package/src/commands/release.js +1 -1
  54. package/src/commands/update.js +82 -31
  55. package/src/config/ai-agent-paths.js +47 -7
  56. package/src/core/constants.js +61 -1
  57. package/src/core/manifest.js +56 -0
  58. package/src/flow/flow-parser.js +1 -1
  59. package/src/flow/gate-loader.js +1 -1
  60. package/src/i18n/messages.js +12 -6
  61. package/src/installers/standards-installer.js +10 -20
  62. package/src/reconciler/actual-state-scanner.js +118 -43
  63. package/src/reconciler/desired-state-calculator.js +157 -43
  64. package/src/reconciler/diff-engine.js +7 -2
  65. package/src/reconciler/manifest-migrator.js +5 -2
  66. package/src/reconciler/plan-executor.js +53 -14
  67. package/src/uninstallers/integration-uninstaller.js +7 -1
  68. package/src/utils/config-loader.js +1 -1
  69. package/src/utils/config-manager.js +1 -1
  70. package/src/utils/github.js +5 -1
  71. package/src/utils/hasher.js +7 -4
  72. package/src/utils/integration-generator.js +121 -78
  73. package/src/utils/registry.js +39 -0
  74. package/src/utils/skills-installer.js +49 -34
  75. package/src/utils/skills-source.js +51 -0
  76. package/src/utils/standard-fixer.js +1 -1
  77. package/src/utils/standard-validator.js +1 -1
  78. package/standards-registry.json +21 -11
@@ -3,8 +3,8 @@ name: knowledge-graph
3
3
  source: ../../../../skills/knowledge-graph/SKILL.md
4
4
  source_version: 1.0.0
5
5
  translation_version: 1.0.0
6
- last_synced: 2026-06-02
7
- source_hash: 68a0b2a9e02f
6
+ last_synced: 2026-07-09
7
+ source_hash: 2a10faf2dd4c
8
8
  status: current
9
9
  description: |
10
10
  [UDS] 通过知识图追踪规格/决策/代码的影响链(引擎或 Markdown 后备)
@@ -2,8 +2,8 @@
2
2
  source: ../../../../skills/knowledge-graph/guide.md
3
3
  source_version: 1.0.0
4
4
  translation_version: 1.0.0
5
- last_synced: 2026-06-02
6
- source_hash: 9c86b5a2a71d
5
+ last_synced: 2026-07-09
6
+ source_hash: 7921f66da47d
7
7
  status: current
8
8
  ---
9
9
 
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  source: ../../../../skills/migration-assistant/SKILL.md
3
3
  source_version: 1.0.0
4
- source_hash: 67b6f33f825e
4
+ source_hash: 5d58f55f3f68
5
5
  translation_version: 1.0.0
6
- last_synced: 2026-06-01
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-06-02
6
- source_hash: 760e3ec43846
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-06-02
7
- source_hash: 40e97479c7da
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-06-02
7
- source_hash: 6fbb1a1b8040
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-06-02
7
- source_hash: b7812535483c
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: 9c883f05ad7b
4
+ source_hash: e9de3576878e
5
5
  translation_version: 1.0.0
6
- last_synced: 2026-06-01
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: d543b24b2422
4
+ source_hash: 469dcdc76a83
5
5
  translation_version: 1.2.0
6
- last_synced: 2026-06-01
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-06-02
6
- source_hash: 79012dab91fb
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-06-02
7
- source_hash: 5d91e5974c44
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-06-02
6
- source_hash: 3c3397aec3fe
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-06-02
7
- source_hash: ae80ca14f9b9
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-06-02
6
- source_hash: 195f50bcbfb7
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-06-02
7
- source_hash: 712e596d091a
6
+ last_synced: 2026-07-16
7
+ source_hash: 340ed7c83bbd
8
8
  status: current
9
9
  scope: universal
10
10
  description: |
@@ -2,8 +2,8 @@
2
2
  source: ../../../../skills/testing-guide/SKILL.md
3
3
  source_version: 1.2.0
4
4
  translation_version: 1.2.0
5
- last_synced: 2026-06-02
6
- source_hash: 49b6f9e0c6a4
5
+ last_synced: 2026-07-16
6
+ source_hash: 2a5e2a667b04
7
7
  status: current
8
8
  name: testing
9
9
  description: |
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  source: ../../CHANGELOG.md
3
- source_version: 6.1.0
4
- translation_version: 6.1.0
5
- last_synced: 2026-07-17
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,49 @@ 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
+
51
+ ## [6.1.1] - 2026-07-18
52
+
53
+ > **`uds check` 悄悄量錯了東西。** 它的落後檢查拿你的標準去比 CLI 自己 bundled 的副本、而非 npm——CLI 一舊就吐出倒退、無意義的訊息,且結構上永遠說不出「你的標準過期了」——還把那則訊息埋在逐檔一行的「未變更」底下。
54
+
55
+ ### Fixed
56
+
57
+ - **`uds check` 現在拿你安裝的標準比對 npm 上的最新版,而非 CLI 自己 bundled 的副本**(XSPEC-342)。`displayAdoptionStatus` 原本拿 `manifest.upstream.version` 去比**跑這支 CLI 內建的**標準副本。CLI 一舊,那副本就比 npm 舊——於是檢查印出倒退的 `⚠ 有可用更新:6.1.0 → 5.12.1`(叫你「更新」到*更舊*的版本),且結構上永遠無法回報你的標準落後。現在改問 npm 最新版;當你的標準落後時,訊息改為 **「你安裝的標準落後最新版」**,並給出完整兩步驟修復——`npm update -g universal-dev-standards` **然後** `uds update`——因為只更新 CLI 不會動到你專案的 `.standards/`。`--offline` 靜默略過比對,不再退回誤導的 bundled 檢查。
58
+
59
+ ### Changed
60
+
61
+ - **`uds check` 不再逐檔列出未變更的檔案**(XSPEC-342)。它原本對每個追蹤檔印一行 `✓ …(未變更)`——約佔指令輸出的 70%(實測 121 → 41 行)——淹沒了真正該讀的訊息,也讓輸出大到被自動化呼叫端(pre-commit agent)截斷。逐檔「未變更」列印已移除;計數仍保留在一行的完整性摘要,已修改/遺失/未雜湊的檔案仍逐一列出。
62
+
20
63
  ## [6.1.0] - 2026-07-17
21
64
 
22
65
  > **同一種形狀的兩個失敗,一個在標準裡、一個在 CLI 裡**:一道檢查跑了、回傳了、回報成功,卻什麼都沒量到。`verification-evidence` 補上了為它命名的那一層;`uds init` 則不再是它的一個實例。
@@ -36,7 +79,7 @@ status: current
36
79
  - **`verification-evidence` 1.1.0 → 1.2.0 —— 證據有效性**(XSPEC-340)。本標準原本把 `exit_code` 當成事實真相:`trust_rules` 寫著「`exit_code ≠ 0` → 驗證失敗」、`physical_spec.checks` 問的是「`exit_code` 是否為 0(成功)?」、VE-002 只要非零就觸發修復迴圈。**這三處現已全數加上限定條件**,因為一道驗證指令可以跑完、可以回傳,卻什麼意義都沒有:
37
80
  - **新增 `evidence_validity` 層次與規則 VE-007 – VE-010**:只有在「成功時回傳 0」的工具上,`exit_code = 0` 才代表成功(VE-007);在證明查詢工具確實執行過之前,「空/查無/0」不等於不存在(VE-008);存在性檢查不得丟棄 stderr(VE-009);pipeline 的 exit code 不屬於其中任何單一階段(VE-010)。
38
81
  - **新增 `non_evidence_claims`**:「已完成」/「應該可以了」/「我改了程式碼」/「測試應該會通過」/「指令回傳 0」。
39
- - 有別於 `anti-hallucination`——後者的禁令全都是「不要斷言你沒查過的事」的變形。這裡是相反的失敗:**確實查了,而查詢工具靜默地沒有運作**。`core/verification-evidence.md` 收錄了十筆真實案例作為證據。
82
+ - 有別於 `anti-hallucination`——後者的禁令全都是「不要斷言你沒查過的事」的變形。這裡是相反的失敗:**確實查了,而查詢工具靜默地沒有運作**。`core/verification-evidence.md` 收錄了八筆真實案例作為證據。
40
83
  - **`verification-evidence` 的人類文件補上了 v1.1.0 的落差。** v1.1.0 的 `environment_layer` 工作(XSPEC-204)已落地於全部三份 `.ai.yaml`,卻**一份 `.md` 都沒有更新**(共四份)——人類文件自 2026-05-13 起就一直在錯誤地描述這個標準。`core/*.md` 現已載明 `environment_layer`、Environment Layers 章節,以及 VE-005 / VE-006。
41
84
  - **`verification-evidence` 新增三個先前只存在於 zh-TW 譯文的章節**:非證據的聲明(Non-Evidence Claims)、證據類型(Evidence Types)、相關標準(Related Standards)。譯文比它的來源更完整;這些章節現已上溯至英文來源,並同時存在於兩個語系。
42
85