universal-dev-standards 6.3.10 → 6.5.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 (48) hide show
  1. package/bin/uds.js +2 -2
  2. package/bundled/ai/standards/agent-dispatch.ai.yaml +162 -0
  3. package/bundled/ai/standards/ai-friendly-architecture.ai.yaml +1 -1
  4. package/bundled/ai/standards/ai-instruction-standards.ai.yaml +190 -15
  5. package/bundled/ai/standards/class-level-fix.ai.yaml +178 -0
  6. package/bundled/ai/standards/commit-message.ai.yaml +2 -0
  7. package/bundled/ai/standards/model-selection.ai.yaml +370 -72
  8. package/bundled/ai/standards/mutation-testing.ai.yaml +105 -2
  9. package/bundled/ai/standards/project-structure.ai.yaml +1 -1
  10. package/bundled/ai/standards/security-standards.ai.yaml +22 -1
  11. package/bundled/ai/standards/spec-driven-development.ai.yaml +59 -2
  12. package/bundled/ai/standards/test-governance.ai.yaml +49 -2
  13. package/bundled/ai/standards/testing.ai.yaml +49 -3
  14. package/bundled/ai/standards/translation-lifecycle-standards.ai.yaml +4 -4
  15. package/bundled/ai/standards/verification-evidence.ai.yaml +48 -4
  16. package/bundled/core/class-level-fix.md +184 -0
  17. package/bundled/core/model-selection.md +383 -125
  18. package/bundled/core/mutation-testing.md +41 -2
  19. package/bundled/core/test-governance.md +22 -2
  20. package/bundled/core/translation-lifecycle-standards.md +6 -6
  21. package/bundled/core/verification-evidence.md +42 -3
  22. package/bundled/locales/zh-CN/CHANGELOG.md +26 -3
  23. package/bundled/locales/zh-CN/CLAUDE.md +1 -1
  24. package/bundled/locales/zh-CN/README.md +3 -3
  25. package/bundled/locales/zh-CN/SECURITY.md +1 -1
  26. package/bundled/locales/zh-CN/core/model-selection.md +375 -60
  27. package/bundled/locales/zh-CN/core/mutation-testing.md +1 -1
  28. package/bundled/locales/zh-CN/core/test-governance.md +1 -1
  29. package/bundled/locales/zh-CN/core/translation-lifecycle-standards.md +1 -1
  30. package/bundled/locales/zh-CN/core/verification-evidence.md +1 -1
  31. package/bundled/locales/zh-CN/docs/CHEATSHEET.md +9 -12
  32. package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +16 -19
  33. package/bundled/locales/zh-TW/CHANGELOG.md +51 -3
  34. package/bundled/locales/zh-TW/CLAUDE.md +1 -1
  35. package/bundled/locales/zh-TW/README.md +3 -3
  36. package/bundled/locales/zh-TW/SECURITY.md +1 -1
  37. package/bundled/locales/zh-TW/core/class-level-fix.md +163 -0
  38. package/bundled/locales/zh-TW/core/model-selection.md +385 -47
  39. package/bundled/locales/zh-TW/core/mutation-testing.md +45 -6
  40. package/bundled/locales/zh-TW/core/test-governance.md +22 -3
  41. package/bundled/locales/zh-TW/core/translation-lifecycle-standards.md +1 -1
  42. package/bundled/locales/zh-TW/core/verification-evidence.md +33 -6
  43. package/bundled/locales/zh-TW/docs/CHEATSHEET.md +9 -12
  44. package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +16 -19
  45. package/bundled/locales/zh-TW/integrations/claude-code/README.md +31 -5
  46. package/package.json +1 -1
  47. package/src/utils/reference-sync.js +83 -16
  48. package/standards-registry.json +32 -8
@@ -1,7 +1,7 @@
1
1
  # UDS 功能参考手册
2
2
 
3
3
  > Universal Development Standards - 完整功能文档
4
- > Auto-generated | Last updated: 2026-07-31
4
+ > Auto-generated | Last updated: 2026-08-12
5
5
 
6
6
  **Language**: [English](../../../docs/reference/FEATURE-REFERENCE.md) | [繁體中文](../../zh-TW/docs/FEATURE-REFERENCE.md) | 简体中文
7
7
 
@@ -14,10 +14,10 @@
14
14
  3. [技能](#skills) (55)
15
15
  4. [代理](#agents) (5)
16
16
  5. [工作流程](#workflows) (5)
17
- 6. [核心规范](#core-standards) (149)
18
- 7. [脚本](#scripts) (58)
17
+ 6. [核心规范](#core-standards) (150)
18
+ 7. [脚本](#scripts) (54)
19
19
 
20
- **Total Features: 332**
20
+ **Total Features: 329**
21
21
 
22
22
  ---
23
23
 
@@ -107,8 +107,8 @@
107
107
  | `--skills` | Install/update Skills for configured AI tools |
108
108
  | `--commands` | Install/update slash commands for configured AI tools |
109
109
  | `--debug` | Show debug output for Skills/Commands detection |
110
- | `--plan` | Show reconciliation plan without executing (like terraform plan) |
111
- | `--apply` | Apply exactly the plan --plan prints (plain `uds update` does not) |
110
+ | `--plan` | Show reconciliation plan without executing (like terraform plan); combines with --skills/--commands to plan just that scope, still writing nothing |
111
+ | `--apply` | Apply exactly the plan --plan prints (plain `uds update` does not); with --skills/--commands it does the reconciliation AND that scope, not only the scope |
112
112
  | `--force` | Force update all files, ignoring hash comparison |
113
113
  | `--rollback` | Rollback to the most recent backup |
114
114
  | `--locale` | Override locale for skills install (zh-tw, zh-cn, en); also reads .uds/install.yaml + UDS_LOCALE env |
@@ -317,6 +317,7 @@
317
317
  | `chaos-injection-tests` | - | |
318
318
  | `checkin-standards` | 1.8.0 | This standard defines quality gates that MUST be passed before committing code t |
319
319
  | `circuit-breaker` | - | |
320
+ | `class-level-fix` | 1.0.0 | A defect is almost never alone. It is one member of a set — one flag in a dispat |
320
321
  | `code-review-checklist` | 1.4.0 | This standard provides a comprehensive checklist for reviewing code changes, ens |
321
322
  | `commit-message-guide` | 1.3.0 | Standardized commit messages improve code review efficiency, facilitate automate |
322
323
  | `container-image-standards` | 1.0.0 | **Status**: Active | **Updated**: 2026-06-17 | |
@@ -366,7 +367,7 @@
366
367
  | `logging-standards` | 1.4.0 | |
367
368
  | `mock-boundary` | 1.1.0 | This document defines rules for what can and cannot be mocked in tests. Its goal |
368
369
  | `model-provenance` | 1.0.0 | **Status**: Active | **Updated**: 2026-06-17 | |
369
- | `model-selection` | 1.0.1 | Define a cost-effective strategy for selecting AI model tiers based on task comp |
370
+ | `model-selection` | 2.1.0 | Define how to choose **which model** and **how deeply it should think** — two in |
370
371
  | `multi-environment-e2e-testing` | 1.0.0 | **Status**: Active | **Updated**: 2026-05-13 | |
371
372
  | `mutation-testing` | 1.0.0 | Mutation testing evaluates test suite effectiveness by injecting artificial bugs |
372
373
  | `no-cicd-deployment` | - | |
@@ -417,7 +418,7 @@
417
418
  | `standard-lifecycle-management` | - | |
418
419
  | `structured-task-definition` | 1.0.0 | |
419
420
  | `supply-chain-attestation` | - | |
420
- | `supply-chain-security-standards` | 1.0.0 | |
421
+ | `supply-chain-security-standards` | 1.1.0 | |
421
422
  | `systematic-debugging` | 1.0.0 | Define a structured, four-phase debugging workflow that prevents the common anti |
422
423
  | `tech-debt-standards` | 1.0.0 | |
423
424
  | `test-completeness-dimensions` | 1.1.0 | This document defines a systematic framework for evaluating test completeness. I |
@@ -427,7 +428,7 @@
427
428
  | `testing-standards` | 3.2.0 | This standard defines actionable testing rules and conventions for AI agents and |
428
429
  | `timeout-standards` | - | |
429
430
  | `token-budget` | - | |
430
- | `translation-lifecycle-standards` | 1.0.0 | Translation lifecycle standards: MISSING vs OUTDATED distinction, semver-aware s |
431
+ | `translation-lifecycle-standards` | 1.0.1 | Translation lifecycle standards: MISSING vs OUTDATED distinction, semver-aware s |
431
432
  | `user-journey-testing` | - | |
432
433
  | `user-story-mapping` | 1.0.0 | **Status**: Active | **Updated**: 2026-06-17 | |
433
434
  | `verification-evidence` | 1.2.0 | Establish an "Iron Law" that no task can be claimed as complete without verifica |
@@ -447,26 +448,22 @@
447
448
  | `aggregate-effectiveness.mjs` | Aggregate Standards Effectiveness Reports |
448
449
  | `analyze-hook-stats.mjs` | Hook Statistics Analyzer (SPEC-SELFDIAG-001 REQ-7, AC-11) |
449
450
  | `bump-version.mjs` | Build a platform-aware shell command for a .sh script. |
450
- | `bump-version.sh` | DEPRECATED: Use 'node scripts/bump-version.mjs <version>' instead (cross-platform). |
451
+ | `bump-version.sh` | Thin wrapper — scripts/bump-version.mjs is the only copy of the bump logic. |
451
452
  | `check-ai-agent-sync.ps1` | Check Ai Agent Sync |
452
453
  | `check-ai-agent-sync.sh` | AI Agent Sync Checker |
453
- | `check-ai-behavior-sync.sh` | DEPRECATED: Use 'npx tsx scripts/check-ai-behavior-sync.ts' instead (cross-platform). |
454
+ | `check-ai-yaml-parses.mjs` | Every shipped .ai.yaml must parse, and must parse into what it says. |
454
455
  | `check-cli-docs-sync.ps1` | Check Cli Docs Sync |
455
456
  | `check-cli-docs-sync.sh` | CLI-to-Documentation Sync Checker |
456
457
  | `check-commands-sync.ps1` | Check Commands Sync |
457
458
  | `check-commands-sync.sh` | Commands Sync Checker |
458
- | `check-commit-spec-reference.sh` | DEPRECATED: Use 'npx tsx scripts/check-commit-spec-reference.ts' instead (cross-platform). |
459
+ | `check-commit-spec-reference.sh` | Thin wrapper — scripts/check-commit-spec-reference.ts is the only copy of |
459
460
  | `check-docs-integrity.ps1` | Check Docs Integrity |
460
461
  | `check-docs-integrity.sh` | Documentation Integrity Checker |
461
462
  | `check-docs-sync.ps1` | Check Docs Sync |
462
463
  | `check-docs-sync.sh` | Documentation Sync Checker |
463
464
  | `check-external-references.mjs` | External Reference Checker (SPEC-SELFDIAG-001 REQ-5, AC-7) |
464
- | `check-flow-gate-report.sh` | DEPRECATED: Use 'npx tsx scripts/check-flow-gate-report.ts' instead (cross-platform). |
465
- | `check-integration-commands-sync.sh` | DEPRECATED: Use 'npx tsx scripts/check-integration-commands-sync.ts' instead (cross-platform). |
466
465
  | `check-orphan-specs.ps1` | Check Orphan Specs |
467
466
  | `check-orphan-specs.sh` | Orphan Spec Detection Script |
468
- | `check-registry-completeness.sh` | DEPRECATED: Use 'npx tsx scripts/check-registry-completeness.ts' instead (cross-platform). |
469
- | `check-release-readiness-signoff.sh` | DEPRECATED: Use 'npx tsx scripts/check-release-readiness-signoff.ts' instead (cross-platform). |
470
467
  | `check-scope-sync.ps1` | Check Scope Sync |
471
468
  | `check-scope-sync.sh` | Scope Consistency Check Script |
472
469
  | `check-skill-next-steps-sync.ps1` | Check Skill Next Steps Sync |
@@ -483,16 +480,16 @@
483
480
  | `check-usage-docs-sync.sh` | check-usage-docs-sync.sh |
484
481
  | `check-version-sync.ps1` | Check Version Sync |
485
482
  | `check-version-sync.sh` | Version Sync Checker |
486
- | `check-workflow-compliance.sh` | DEPRECATED: Use 'npx tsx scripts/check-workflow-compliance.ts' instead (cross-platform). |
483
+ | `check-workflow-compliance.sh` | Thin wrapper — scripts/check-workflow-compliance.ts is the only copy of the |
487
484
  | `commitlint-bilingual-rule.mjs` | commitlint-bilingual-rule.mjs — custom commitlint rules enforcing the |
488
485
  | `convert-md-to-yaml.mjs` | Markdown to AI-YAML Conversion Script |
489
486
  | `fix-manifest-paths.ps1` | Fix Manifest Paths |
490
487
  | `fix-manifest-paths.sh` | Manifest Path Fixer |
491
- | `generate-docs.mjs` | Sync the "AI Tool Support" table's Skills/Slash Commands numeric columns |
488
+ | `generate-docs.mjs` | Look up the release date for `version` from CHANGELOG.md's own |
492
489
  | `generate-locale-coverage.mjs` | Locale Coverage Generator |
493
490
  | `generate-version-manifest.mjs` | Generate Version Manifest (SPEC-SELFDIAG-001 REQ-9, AC-14) |
494
491
  | `install-hooks.mjs` | Install Hooks |
495
- | `install-hooks.sh` | DEPRECATED: Use 'node scripts/install-hooks.mjs' instead (cross-platform). |
492
+ | `install-hooks.sh` | Thin wrapper — scripts/install-hooks.mjs is the only copy of the installer |
496
493
  | `pre-commit.mjs` | Build a platform-aware shell command for a .sh script. |
497
494
  | `pre-release-check.ps1` | Pre Release Check |
498
495
  | `pre-release-check.sh` | Pre-release Check Script |
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  source: ../../CHANGELOG.md
3
- source_version: 6.3.10
4
- translation_version: 6.3.10
5
- last_synced: 2026-08-10
3
+ source_version: 6.5.0
4
+ translation_version: 6.5.0
5
+ last_synced: 2026-08-14
6
6
  status: current
7
7
  ---
8
8
 
@@ -17,6 +17,54 @@ status: current
17
17
 
18
18
  ## [Unreleased]
19
19
 
20
+ ## [6.5.0] - 2026-08-14
21
+
22
+ ### 新增
23
+
24
+ - **四份既有標準的五條補強,借鑒自 `AmazingAng/old-coder`**(XSPEC 借鑒 B-01)。**未新增任何標準**,每一條都是既有標準內部的條文。同一來源另有兩項主張被**駁回**,因為我方版本更嚴——`verification-evidence` 早已有四條證據有效性規則配八個實例對照表,而 `class-level-fix` 早已要求負向控制**逐子集**執行並**指名**違規成員,來源沒有這一條。
25
+ - **`verification-evidence` 1.2.0 → 1.3.0 —— VE-011,證據新鮮度。** 證據紀錄裡的每一個數字,必須來自**它所驗證的產物最後一次編輯之後的單一次新鮮執行**;中途執行的結果是 stale,不得列入。VE-001 到 VE-010 管的都是結果**怎麼被解讀**,沒有一條管**它何時被產生**。它關掉的失效是:測試全綠 → 之後才改提示詞或設定 → 提交,而通過的那一套是最後一次變更**之前**的;抓到它的守衛正好是釘內容雜湊的那一種,而型別檢查與 lint 從不驚動它。
26
+ - **`test-governance` 1.1.0 → 1.2.0 —— 門檻閘必須 fail-closed。** 一個印出百分比卻不論有沒有達標都 exit `0` 的量測層是報告,不是閘門:它會在數字一路下滑時保持綠燈,而沒有東西擋下一次合併。強制必須來自工具自己的旗標(`--cov-fail-under`、`diff-cover --fail-under`、`nyc --check-coverage`),而不是事後重新解析輸出的包裝腳本。放在這份標準而非 `verification-evidence`,是因為這份管的是**檢查怎麼被建造**,那份管的是 exit code 產生**之後怎麼被解讀**;兩者現有交叉引用。
27
+ - **`mutation-testing` 1.0.0 → 1.1.0 —— kill 歸因、單邊不變式、equivalent mutant。** `Killed` 的意思是**某一個**測試失敗了;工具不記錄是哪一個,也沒有任何工具記錄是哪一**層**。所以 7/7 驗證的是跑過的**整套**,不是其中的 property 套件——要主張「property 驗證了 X」,必須單獨對 property 套件重跑 mutants。單邊不變式(「永不超過上限」)**結構上抓不到** fail-closed 的 mutant,因為全部拒絕永遠不會產生超限輸出;每個單邊性質現在都需要它的相反邊界。而存活的 mutant 不自動等於缺口——語意等價者必須附理由分類,而不是用一個只為了讓數字好看的斷言去殺它。
28
+ - **`class-level-fix` 1.0.0 → 1.1.0 —— 一次通過的負向控制不證明什麼。** 通過一次,證明的是**一個**已知壞案例能到達檢查器的失敗路徑。它**不證明**該檢查器認得它所宣稱守護的規則的**每一種**違反。一道 grep 閘可以 fail-closed 得很完美,卻守著一個拼字而不是一個行為:那個合成成員證明的是線路接通了,不是那張網夠寬。
29
+ - **VE-012 / CLF-008 —— 窄閘門必須登記,不是只要揭露。** 當一道檢查的實際涵蓋面窄於它所服務的規則,說出來是必要而不充分:**光是揭露不滿足本規則**,因為寫「本檢查不涵蓋全部」遠比擴大涵蓋面便宜,於是每道窄閘門都會長出一段誠實的文字然後維持窄。該缺口必須在例外清冊裡有一筆帶複查日期的登記。**這正是本 repo 反覆的失效**——一次雜湊掃描 115 份進去 2 份出來、一個參考檢查器整個略過一個出貨目錄、一道索引閘門只對日期戳發作——每一次都是閘門窄於規則而沒有東西說出來。
30
+
31
+ ### 變更
32
+
33
+ - **`model-selection` 1.0.1 → 2.1.0 —— 一個軸變成兩個**(XSPEC-362)。原標準以**一個任務改動幾個檔案**決定模型層級。三個檔案的模組邊界重新設計比八個檔案的機械改名難,所以那個訊號**朝固定方向**錯分了「深而窄」的工作——是偏誤,不是雜訊。它活下來是因為便宜好量,不是因為它預測得準。改為兩個準則:**推理天花板需求**(有沒有一個成分是再多思考時間也解不掉的?)與**規格明確度**,且後者明確是**雙向**的——把模稜兩可的任務交給照字面執行的模型,得到的是「精確地執行了錯的那句話」,而把寫死的步驟清單餵給高天花板模型會**降低**輸出品質。層級 id(`fast` / `standard` / `capable`)不變,只有準則換了。
34
+ - **新增 effort 軸,與模型軸正交。** 思考深度現在是**單次派工的參數**,不是模型的屬性:廠商中立的 `low` / `medium` / `high` / `very-high` / `max`,由各平台在本地對映。標準明白寫出哪種失敗配哪種處置——輸出淺但無誤是**深度不足**(同一模型提高 effort),在 max effort 下輸出**種類**就錯了是**天花板不足**(升層級)——並寫明兩者不可互換。**沒有把 effort 用盡就升層級,是對「短缺的是哪一個軸」下了一個未經測試的假設。**
35
+ - **新增反向排除章節。** 舊標準只說什麼工作該**升**到哪一層,從不說什麼不該**送**進哪一層。**硬邊界**(context 容量、effort 參數支援、模態)是能力的缺席而非程度較低,必須在**成本比較之前**排除——事後排除會讓一個較便宜但做不到的模型在價格上勝出。**反向風險**:高能力層可能透過安全分類器拒絕規格敏感的工作,而**該拒絕不是錯誤**——它以帶著拒絕標記的正常回應抵達。對一個只看 exit code 或只看有沒有拋例外的呼叫端,那是**靜默失敗**:管線記錄成功,而工作從未被做。呼叫端現在必須檢查該標記。
36
+ - **`capability_dimensions` 子維度拆成 `declared` 與 `measured`。** 一個 1–5 分同時扛著兩件不同的事實:*它到底能不能做*(二元、廠商宣告、連線時免費取得)與*做得多好*(連續、需要 benchmark)。合在一起,便宜的事實與昂貴的事實變得無從分辨。`declared: false` 現在是硬邊界;`declared: true` 而 `measured` 缺席即 `UNKNOWN`。禁止從分數推導 `supported`,且**失敗的量測不得記為分數**——包含 `0`,它不在 1–5 的量尺上,而且它會讓「我們量不到」看起來與「我們量了而它很差」一模一樣。
37
+ - **`routing_rules` 從三態擴為四態。** `UNSUPPORTED` 原本意指「分數 ≤ 1 **或未註冊**」,把「量過且不可靠」與「從未量過」塌縮在一起。後果是新偵測到的模型在第一次評估就被排除、且永不再進入候選池——與「支援更多模型」的目的正好相反。`UNKNOWN` 現在是獨立狀態並**排入校準佇列**,且兩者必須在**回傳結構中**可分辨,而不只是在 log 裡:呼叫端得分出「這個模型做不到」與「我還不知道」,因為它們導向不同的下一步。
38
+ - **重新量測現有三個獨立觸發**:版本識別字變更、`measured.at` 超過 90 天、以及降級偵測告警(DEC-033)。版本變更是**充分**條件而非必要條件——DEC-033 存在的理由正是行為會在版本字串不變的情況下改變,所以一個只綁版本變更的實作,會漏掉它當初被建造要抓的整個情境。
39
+ - **移除章節版本**(R6a)。該檔同時帶著一個全檔版本 `1.0.1` **與**一個標記 `2.0.0` 的章節,而沒有任何規則說明 `.ai.yaml` 的 `meta.version` 追蹤的是哪一個——於是「版本有同步」不是一個可檢查的主張。現在只有一個版本欄位,而「`.ai.yaml` 追蹤它」這條規則寫在標準裡。2026-04-13 新增的能力管理章節——**它從來沒有被寫進版本歷史**——現已補記。
40
+
41
+ ### 新增(XSPEC-362 續)
42
+
43
+ - **`check-model-pin-freshness` —— 給 `capability_registry` 一個時鐘**(XSPEC-362 R4)。DEC-031 D1 要求 `pin_date` 被**記錄**;從來沒有東西要求它被**讀取**。出貨的範例躺在**超過自己 90 天門檻整整 120 天**的位置,而在頁面上,一筆過期條目與一筆有效條目無從分辨。這道檢查回報兩種腐壞:超過門檻的日期,以及**出貨範例裡的具體廠商模型 ID**——一個被寫進標準的模型 ID 是一則帶到期日而無人認領的引用,所以範例改用佔位符。它是 **WARN 永不 BLOCK**(依 XSPEC-361 R8 對檔內不變式實測的偽陽性率);只有掃描未完成才非零離開,因為「檢查器壞了」與「檢查器沒找到東西」不可以產生相同的輸出。它**走訪**出貨樹而非讀一份手打清單,並印出分母與排除數。`--self-test` 對已知判定的 fixture 跑兩個判準,因為一個掃了 366 個檔案卻什麼都沒報的檢查器,看起來與一個判準從不觸發的檢查器一模一樣。已接進 `pre-release-check.sh` 第 18.8 步。
44
+ - **`model-selection` 的 Claude Code 宿主層對映**(XSPEC-362 R5):`integrations/claude-code/model-selection-mapping.md` 與其機器可讀孿生檔、四份參考 subagent 定義、以及一份跨 repo 派工模板。標準**依規則**廠商中立——它定義 `fast` / `standard` / `capable` 與 `low` … `max` 為標籤,並聲明它無法說某個模型接受哪些 effort 等級,那些格子標 `?`。這個目錄為單一宿主回答它們,且是本 repo **唯一**該出現具體模型識別字的地方。`core/` 未變動,仍帶**零**個具體模型 ID。
45
+ - **這份對映存在,是因為名字對不上。** UDS 的 `very-high` 在 Claude Code 裡叫 `xhigh` —— 唯一被改名的等級。標準不為了遷就工具而彎折;改名在宿主層被吸收,那正是 R5 的用途。
46
+ - **`fast` 層在這個宿主上沒有 effort 軸**,因為它的模型根本不接受任何 effort 等級。那是一條硬邊界,且對標準自己的規則有後果:**MS-005**(「同一模型提高 effort」)**在那裡無法執行**,而改用 MS-001 並不違反順序規則——該層的 effort 集合從一開始就是空的。
47
+ - **硬邊界登記為 `declared` 而非分數**(依 R7b),而 `measured` 全程缺席因為沒有跑過 benchmark ——記為 `UNKNOWN`,絕不以預設值填充。登記表另外點名兩條在 agent 檔案裡看不見的邊界:同一個別名在不同 provider 解析到不同模型(在某些上面 `effort` 是靜默失效的),以及背景 subagent —— v2.1.198 起的預設 —— 會靜默失去固定集合以外的內建工具,且不回報任何錯誤。
48
+ - **R3b 是引述廠商,不是斷言。** 宿主自己的文件說它最高能力的模型在安全分類器觸發時會自動 fallback,且要從它得到好輸出的方法是「描述結果,不要描述步驟」—— 分別是 R3b 第 1 點與第 2 點,由對方說出口。
49
+ - **派工模板的理由是量出來的,而且它更正了本 repo 正在出貨的一項主張。** `agent-dispatch.ai.yaml` 說 subagent 不載入目標專案的指令、也不能叫用它的技能。**兩半都是假的**:subagent 會載入 CLAUDE.md 階層,也能叫用技能。真正的限制更窄也更容易錯過——**它們載入的是主 session 工作目錄的階層,不是它們被派去工作的那個 repo 的**。2026-08-12 實測:派一個被拒絕工具權限的 subagent,在它獲准跑 `pwd` 之前先問它 context 裡有哪些 CLAUDE.md——正好兩份,兩份都不是目標的。同 repo 派工不需要模板;跨 repo 派工沒有別的規則來源。該註記已就地更正,附上量測,並明確警告不要在讀完廠商文件後把這個機制刪掉。
50
+ - **`check-model-pin-freshness` 現在也走訪 `integrations/`。** 它的 `VENDOR` 判準在那裡被抑制——具體 ID 在宿主對映裡是**必需**的形式——而 `STALE` 仍然適用,那正是掃描該樹的全部理由:「模型 ID 是一則帶到期日而無人認領的引用」這個論證,不會因為那個 ID 搬到了正當的家就不成立。被抑制的命中計入 `skipped` 而非丟棄,讓那條豁免留在分母裡;且 `--self-test` 在**兩個方向**都增加了案例——一條只朝它抑制的方向測過的抑制規則,與一條把所有東西都吞掉的抑制規則無從分辨。
51
+ - **`agent-dispatch` 機器可讀標準復位**(XSPEC-362 R5a):`ai/standards/agent-dispatch.ai.yaml`、自採用複本、以及 registry + manifest 條目。`core/agent-dispatch.md` 在 npm bundle 裡持續出貨,但 `.ai.yaml` 在 6.0.0(XSPEC-086 Phase 2 / DEC-049)被移除,前提是 `dev-autopilot` 擁有正規的機器可讀副本。**那個擁有者在 2026-04-28 進入維護模式**——就在遷移落地的隔天——而移除在兩個月後照樣執行。以 `--format ai` 安裝的採用者自此拿到的是 bundle 裡的散文,而規則哪裡都沒有。`agent-dispatch` 已從四個帶有該清單的檢查腳本的 `REFERENCE_ONLY` 中移除;同批的另外七個標準維持 reference-only,**本次不處理**。
52
+ - 責任邊界,以免兩份標準長出同一組規則的重複副本:`agent-dispatch` 管**怎麼派工**(平行安全、獨立領域、狀態協定、提示詞設計);`model-selection` 管**派給誰、派多深**。兩者交叉引用而非互相複述。
53
+
54
+ ## [6.4.0] - 2026-08-10
55
+
56
+ ### 新增
57
+
58
+ - **`class-level-fix` 標準——修正瞄準集合,不是瞄準成員。** 一個缺陷幾乎從不孤單:它是分派鏈裡的一個旗標、manifest 裡的一條宣告、`agents/` 底下的一個目錄。修掉被指出的那一員,集合裡其餘的原封不動,**而沒有東西會通知你下一個在哪**——它會在幾個月後以新事故的形式回來,那正是這類工作感覺沒完沒了的原因。規則:修之前先指出缺陷所屬的可窮舉集合,並加上一個**走訪**該集合的檢查。第三個問題決定這道檢查活不活得下去——走訪從哪裡讀出成員?必須是系統自己讀的那個來源(CLI 定義、目錄、manifest),**絕不是誰手打的清單**,因為手打的清單正確到第四個成員出現為止,而不會有東西告訴你。列舉失敗時是靜默的;走訪配排除清單失敗時是吵的,因為那條排除必須由一個人寫下來、而他得說明理由。檢查必須印出分母**與被排除的數量**——「檢查了 4,012 條宣告」讀起來像涵蓋率,而篩選器悄悄跳過了每一條目錄條目。而且它在被信任之前要**逐子集**證明非空跑,因為一道涵蓋五份清單卻只對第一份測過的檢查,是一道涵蓋一份清單的檢查。
59
+
60
+ 標準裡每一個實例都是 2026-08-10 量出來的。最有份量的是那個反例:本 repo **十一天前已經為 `--integrations-only` 修過完全相同的缺陷,還留了一段說明通則的註解**,而另外三個分支原封不動。知識就在那個檔案裡,只是沒有到達它的兄弟。**一段描述類別的註解,不等於一道涵蓋類別的檢查。**
61
+
62
+ 標準明白寫出**它沒有自動閘門**——沒有東西能走訪「現在正在被修的所有缺陷」——並記下理由、由什麼執行(review,只問一句:*這是哪個集合的一員?*)、以及什麼條件下閘門會變得可能。不寫那一段,它就會變成它所要防止的那件事的下一個實例。
63
+
64
+ ### 修正
65
+
66
+ - **`--plan` 與 `--apply` 的組合行為現在也到得了 `--help`。** 6.3.10 記錄該行為的方式是編輯 `docs/reference/FEATURE-REFERENCE.md`——一份**產生的檔案**。那次編輯活到有人重新產生為止。文字現在住在 `cli/bin/uds.js` 的 `.option()` 字串裡,於是它也會出現在 `uds update --help`,而手改的那一份從來不會。
67
+
20
68
  ## [6.3.10] - 2026-08-10
21
69
 
22
70
  ### 修正
@@ -14,7 +14,7 @@ status: current
14
14
 
15
15
  Universal Development Standards 是一個語言無關、框架無關的文件化標準框架。它提供:
16
16
 
17
- - **核心規範** (`core/`):149 個基礎開發標準
17
+ - **核心規範** (`core/`):150 個基礎開發標準
18
18
  - **AI 技能** (`skills/`):用於 AI 輔助開發的 Claude Code 技能
19
19
  - **CLI 工具** (`cli/`):用於採用標準的 Node.js CLI
20
20
  - **整合** (`integrations/`):各種 AI 工具的配置
@@ -15,7 +15,7 @@ status: current
15
15
 
16
16
  > **語言**: [English](../../README.md) | 繁體中文 | [简体中文](../zh-CN/README.md)
17
17
 
18
- **版本**: 6.3.10 | **發布日期**: 2026-07-31 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
18
+ **版本**: 6.5.0 | **發布日期**: 2026-08-14 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
19
19
 
20
20
  語言無關、框架無關的軟體專案文件標準。透過 AI 原生工作流,確保不同技術堆疊之間的一致性、品質和可維護性。
21
21
 
@@ -76,10 +76,10 @@ npx universal-dev-standards init
76
76
  <!-- UDS_STATS_TABLE_START -->
77
77
  | 類別 | 數量 | 說明 |
78
78
  |----------|-------|-------------|
79
- | **核心標準** | 149 | 通用開發準則 |
79
+ | **核心標準** | 150 | 通用開發準則 |
80
80
  | **AI Skills** | 55 | 互動式技能 |
81
81
  | **斜線命令** | 51 | 快速操作 |
82
- | **CLI 指令** | 21 | 專案設定與維護 |
82
+ | **CLI 指令** | 22 | 專案設定與維護 |
83
83
  <!-- UDS_STATS_TABLE_END -->
84
84
 
85
85
  > **5.0 新功能?** 請參閱[預發布說明](../../docs/PRE-RELEASE.md)了解新功能詳情。
@@ -13,7 +13,7 @@ status: current
13
13
  <!-- UDS_SUPPORTED_VERSIONS_START -->
14
14
  | 版本 | 支援狀態 |
15
15
  |------|--------|
16
- | 6.2.8 | ✅ 最新正式版 |
16
+ | 6.5.0 | ✅ 最新正式版 |
17
17
  | < 6.0.0 | ❌ 已終止支援 |
18
18
  <!-- UDS_SUPPORTED_VERSIONS_END -->
19
19
 
@@ -0,0 +1,163 @@
1
+ ---
2
+ source: ../../../core/class-level-fix.md
3
+ source_version: 1.1.0
4
+ translation_version: 1.1.0
5
+ last_synced: 2026-08-14
6
+ source_hash: cd211634145c
7
+ status: current
8
+ ---
9
+
10
+ # 類別層修正標準
11
+
12
+ > **Language**: [English](../../../core/class-level-fix.md) | 繁體中文
13
+
14
+ **版本**: 1.1.0
15
+ **最後更新**: 2026-08-14
16
+ **適用**: 任何缺陷修正(程式碼或設定)
17
+ **範圍**: universal
18
+
19
+ ---
20
+
21
+ ## 目的
22
+
23
+ 一個缺陷幾乎從不孤單。它是某個集合的一員——分派鏈裡的一個旗標、manifest 裡的一條宣告、`agents/` 底下的一個目錄、目錄樹裡的一份設定檔。修掉被指出的那一員,集合裡其餘的原封不動,**而沒有任何東西會通知你下一個在哪**。它會在幾個月後以一則新事故的形式出現,於是工作感覺沒完沒了——因為同一個形狀不斷換名字回來。
24
+
25
+ 本標準要求:**修正瞄準集合,不是瞄準成員。**
26
+
27
+ ---
28
+
29
+ ## 規則
30
+
31
+ **修一個缺陷之前,先指出它所屬的可窮舉集合,並加上一個走訪該集合的檢查。** 若該集合無法被走訪,寫下為什麼。沉默不算答案。
32
+
33
+ ### 三個問題,依序回答
34
+
35
+ | # | 問題 |
36
+ |---|---|
37
+ | 1 | 這個缺陷是哪個集合的一員? |
38
+ | 2 | 那個集合能不能被**走訪**而不是被**列舉**? |
39
+ | 3 | 走訪從哪裡讀出成員? |
40
+
41
+ 第 3 題決定這道檢查活不活得下去。**走訪必須從系統自己讀的那個來源讀**——CLI 定義、目錄、manifest——**絕不從你手打的清單讀**。手打的清單正確到有人新增第四個成員為止,而不會有東西告訴你。
42
+
43
+ ---
44
+
45
+ ## 走訪並排除,絕不列舉
46
+
47
+ | | 列舉 | 走訪並排除 |
48
+ |---|---|---|
49
+ | 形狀 | `for (const x of ['a','b','c'])` | `for (const x of readAll()) if (!EXCLUDED.has(x))` |
50
+ | 新成員 | 靜默地不被涵蓋 | **預設被涵蓋** |
51
+ | 何時會錯 | 有人新增第四個 | 有人在沒有理由下加了排除 |
52
+ | 失效方式 | 對一部分表面回報綠燈 | 吵——而吵是看得見的 |
53
+
54
+ **不對稱正是重點。** 列舉失敗時是靜默的;排除清單失敗時是吵的,因為那條排除必須由一個人寫下來,而他得說明理由。
55
+
56
+ ---
57
+
58
+ ## 檢查必須印出被排除的數量
59
+
60
+ 只印分母不夠。「檢查了 4,012 條宣告」讀起來像涵蓋率,而篩選器悄悄跳過了每一條目錄條目。
61
+
62
+ ```
63
+ ✓ 91 entries across 5 lists all resolve # 分母
64
+ (0 excluded) # 以及被排除的
65
+ ```
66
+
67
+ 見 [verification-evidence](verification-evidence.md)——這是同一族:**輸出的形狀在工具壞掉時與正常時無從分辨**。
68
+
69
+ ---
70
+
71
+ ## 證據要求
72
+
73
+ 一道類別層檢查在被信任之前,必須先被證明不是空跑:
74
+
75
+ 1. 塞一個違反規則的合成成員。
76
+ 2. 確認檢查失敗**且指名該成員**。
77
+ 3. 移除後確認檢查回到綠燈。
78
+
79
+ **逐子集做,不要整體做。** 一道涵蓋五份清單、卻只對第一份測過的檢查,是一道涵蓋一份清單的檢查。
80
+
81
+ ### 一次通過的負向控制不能證明什麼
82
+
83
+ 一次通過的負向控制,只證明**一個**已知壞案例能到達檢查器的失敗路徑。**它不證明**該檢查器認得它所宣稱守護的規則的**每一種**違反。一道 grep 閘可以 fail-closed 得很完美,卻守著一個拼字而不是一個行為——那個合成成員證明的是線路接通了,不是那張網夠寬,足以抓住它自稱要抓的東西。
84
+
85
+ ---
86
+
87
+ ## 實例(皆為實測,2026-08-10)
88
+
89
+ ### 有效:旗標分派
90
+
91
+ 某 CLI 的 `--plan` 旗標(文件寫著「印出計畫但不執行」)在與 `--skills` 併用時被靜默丟棄,因為範圍旗標在一條先到先得的鏈裡排在模式旗標之前。實例層的修法是兩個分支。
92
+
93
+ 類別層的修法是一個**從 CLI 定義讀出旗標清單**的測試,排除模式旗標與少數非範圍的旗標,然後斷言 `--plan` 在任何組合下都不寫檔。
94
+
95
+ **它第一次跑起來就找到第四個實例**——`--sync-refs`,那個從來沒有人看過、而且正在一個文件宣稱「不執行」的旗標底下改寫整合檔與 manifest。
96
+
97
+ ### 失效:同一個缺陷,十一天前修過一次
98
+
99
+ 同一份程式碼**十一天前已經為 `--integrations-only` 修過完全相同的問題,還留了一段註解說明通則**。另外三個分支沒有被碰。**知識就在那個檔案裡,只是沒有到達它的兄弟。**
100
+
101
+ > **一段描述類別的註解,不等於一道涵蓋類別的檢查。** 這正是本標準存在的理由。
102
+
103
+ ### 失效:自行列舉範圍的閘門
104
+
105
+ 一道解析閘門硬編碼三個目錄而不走訪整棵樹。它回報「423 個檔案全部通過」,而實際出貨面是 287 個檔案,其中十個壞的到達了 registry。
106
+
107
+ ---
108
+
109
+ ## 集合無法走訪時
110
+
111
+ 這是合法的答案,但要寫下來,連同理由與「什麼條件下會改變」。
112
+
113
+ 最常見的成因是**成員只能相對於某個基準目錄才知道,而那個基準沒有記在任何機器讀得到的地方**——例如一份 manifest,它的路徑基準只活在讀取它的那支程式裡。對這種宣告做通用掃描,假陽性率高到讓檢查在第一週就被關掉。
114
+
115
+ 這時可行的形狀是**逐份清冊**:一種宣告一道檢查,各自知道自己的基準與條目形狀。**說出清冊有幾份,並確認每一份都有檢查。**
116
+
117
+ ---
118
+
119
+ ## 窄涵蓋必須登記,不能只揭露
120
+
121
+ 當一道閘門的實際涵蓋面窄於它所服務的規則時,只寫一句話說明是不夠的。散文式揭露很便宜——比擴大涵蓋面便宜得多——於是每一道被審過一次的窄閘門都會長出一段誠實的文字,然後永遠維持窄下去。**揭露本身不換來任何東西;只有配上一個能證明它沒有淪為永久藉口的機制,它才換得到東西。**
122
+
123
+ **要求**:這一類已記錄的涵蓋缺口,必須同時登記到一份**帶到期日的例外清冊**——一份獨立於標準本文之外的清單,指名缺口、說明成因、並附上覆核或到期日期。沒有登記到這種清冊裡的揭露,不滿足本條。
124
+
125
+ **可證偽條件**:若某條目連續兩期清冊審查都未變動,該揭露就已經變成逃生口,本條對該條目**失效**——不是「部分滿足」,是失效。清冊機制本身(放在哪裡、什麼格式、多久審一次)留給採用它的專案自行決定;本標準要求的是「有這麼一份東西存在,且條目會動」,不是要求它長成特定形狀。
126
+
127
+ ---
128
+
129
+ ## 反模式
130
+
131
+ | 反模式 | 為何失效 |
132
+ |---|---|
133
+ | 修掉被回報的那一員就結案 | 集合沒有變;下一個成員會以新事故的形式抵達 |
134
+ | 寫一段註解說明通則 | 散文不會執行 |
135
+ | 檢查自行列舉它的範圍 | 正確到有人新增第四個成員為止 |
136
+ | 類別層檢查只對一個成員測過 | 證明的是那一個成員,不是那個類別 |
137
+ | `✓ all pass` 而沒有分母 | 掃了全部與什麼都沒掃,輸出一模一樣 |
138
+ | 一句揭露文字,沒有登記到帶到期日的例外清冊 | 比擴大涵蓋面便宜,而且沒有任何東西逼它改變 |
139
+
140
+ ---
141
+
142
+ ## 本標準沒有自動閘門,而這件事是被記錄下來的,不是被藏起來的
143
+
144
+ 套用本標準是「修的當下」所做的判斷。沒有任何檢查能走訪「現在正在被修的所有缺陷」,
145
+ 所以依照它自己的規則,誠實的答案是寫下為什麼不能,而不是暗示一個不存在的強制力。
146
+
147
+ **實務上唯一會咬到的地方是 review**(人或 agent):一個只改了集合中某一員、
148
+ 而沒有加上涵蓋該集合之檢查的修正,應該被退回並問一句——**這是哪個集合的一員?**
149
+
150
+ **重啟條件**:若某個 repo 取得了「能把『一次缺陷修正落地』看成一個離散事件」的機制
151
+ (有標記的 commit 型別、issue↔commit 連結),檢查就變得可能——斷言這類 commit
152
+ 要嘛動到一個走訪集合的測試,要嘛帶著一段寫下來的理由。在那之前,本標準靠閱讀執行。
153
+
154
+ > 記下這件事不是形式。**一份陳述了規則而沒有東西執行它的標準,正是「寫下來的風險
155
+ > 沒有東西在執行」那個形狀**——而一份不承認這一點的標準,比承認的更糟,
156
+ > 因為讀的人會以為有東西在盯。
157
+
158
+ ---
159
+
160
+ ## 與其他標準的關係
161
+
162
+ - [verification-evidence](verification-evidence.md) — 證據有效性:工具可以靜默失敗,而其輸出與真結果無從分辨。本標準是同一件事套用在**範圍**而非**執行**上;也與本標準共用「窄涵蓋必須登記」規則(VE-012)。
163
+ - [anti-hallucination](anti-hallucination.md) — 那個防「沒查」;這個防「查了其中一個,卻對全部下結論」。