universal-dev-standards 6.14.0-beta.3 → 6.14.0-beta.5

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 (63) hide show
  1. package/bin/uds.js +7 -1
  2. package/bundled/ai/standards/ai-response-navigation.ai.yaml +43 -3
  3. package/bundled/ai/standards/checkin-standards.ai.yaml +25 -6
  4. package/bundled/ai/standards/full-coverage-testing.ai.yaml +46 -5
  5. package/bundled/ai/standards/pipeline-security-gates.ai.yaml +5 -1
  6. package/bundled/core/ai-response-navigation.md +128 -12
  7. package/bundled/core/full-coverage-testing.md +57 -3
  8. package/bundled/extensions/frameworks/fat-free-patterns.md +937 -0
  9. package/bundled/extensions/languages/csharp-style.md +464 -0
  10. package/bundled/extensions/languages/php-style.md +700 -0
  11. package/bundled/extensions/locales/zh-cn.md +717 -0
  12. package/bundled/extensions/locales/zh-tw.md +717 -0
  13. package/bundled/locales/COVERAGE.md +5 -4
  14. package/bundled/locales/zh-CN/CHANGELOG.md +54 -3
  15. package/bundled/locales/zh-CN/README.md +2 -2
  16. package/bundled/locales/zh-CN/SECURITY.md +1 -1
  17. package/bundled/locales/zh-CN/core/ai-response-navigation.md +110 -12
  18. package/bundled/locales/zh-CN/core/full-coverage-testing.md +61 -7
  19. package/bundled/locales/zh-CN/docs/CHEATSHEET.md +3 -1
  20. package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +8 -5
  21. package/bundled/locales/zh-CN/skills/README.md +1 -0
  22. package/bundled/locales/zh-CN/skills/comprehension-ladder/SKILL.md +289 -0
  23. package/bundled/locales/zh-CN/skills/comprehension-ladder/eval-cases.md +261 -0
  24. package/bundled/locales/zh-TW/CHANGELOG.md +54 -3
  25. package/bundled/locales/zh-TW/README.md +2 -2
  26. package/bundled/locales/zh-TW/SECURITY.md +1 -1
  27. package/bundled/locales/zh-TW/core/ai-response-navigation.md +110 -12
  28. package/bundled/locales/zh-TW/core/full-coverage-testing.md +61 -7
  29. package/bundled/locales/zh-TW/docs/CHEATSHEET.md +3 -1
  30. package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +8 -5
  31. package/bundled/locales/zh-TW/skills/README.md +1 -0
  32. package/bundled/locales/zh-TW/skills/comprehension-ladder/SKILL.md +289 -0
  33. package/bundled/locales/zh-TW/skills/comprehension-ladder/eval-cases.md +261 -0
  34. package/bundled/skills/README.md +1 -0
  35. package/bundled/skills/comprehension-ladder/SKILL.md +283 -0
  36. package/bundled/skills/comprehension-ladder/eval-cases.md +255 -0
  37. package/bundled/templates/gates/check-anti-fake-tests.mjs +991 -0
  38. package/bundled/templates/gates/check-stubs.mjs +644 -0
  39. package/package.json +3 -3
  40. package/src/commands/audit.js +11 -0
  41. package/src/commands/check.js +124 -24
  42. package/src/commands/init.js +45 -9
  43. package/src/commands/update.js +183 -21
  44. package/src/core/install-records.js +2 -1
  45. package/src/i18n/messages.js +50 -9
  46. package/src/installers/standards-installer.js +16 -23
  47. package/src/reconciler/backup-manager.js +418 -82
  48. package/src/reconciler/index.js +27 -5
  49. package/src/reconciler/install-roots.js +90 -0
  50. package/src/reconciler/plan-executor.js +33 -13
  51. package/src/uninstallers/hook-uninstaller.js +7 -4
  52. package/src/utils/command-hash-ownership.js +103 -0
  53. package/src/utils/copier.js +78 -1
  54. package/src/utils/gate-scripts.js +141 -0
  55. package/src/utils/git-hooks.js +8 -4
  56. package/src/utils/health-scorer.js +10 -7
  57. package/src/utils/locale.js +19 -0
  58. package/src/utils/skill-hash-ownership.js +64 -0
  59. package/src/utils/skills-installer.js +12 -1
  60. package/src/utils/test-change-check.js +160 -0
  61. package/src/utils/test-policy.js +214 -0
  62. package/src/utils/update-summary.js +29 -0
  63. package/standards-registry.json +21 -7
@@ -15,7 +15,7 @@ status: current
15
15
 
16
16
  > **語言**: [English](../../README.md) | 繁體中文 | [简体中文](../zh-CN/README.md)
17
17
 
18
- **版本**: 6.14.0-beta.3 (Pre-release) | **發布日期**: 2026-09-30 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
18
+ **版本**: 6.14.0-beta.5 (Pre-release) | **發布日期**: 2026-10-06 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
19
19
 
20
20
  語言無關、框架無關的軟體專案文件標準。透過 AI 原生工作流,確保不同技術堆疊之間的一致性、品質和可維護性。
21
21
 
@@ -77,7 +77,7 @@ npx universal-dev-standards init
77
77
  | 類別 | 數量 | 說明 |
78
78
  |----------|-------|-------------|
79
79
  | **核心標準** | 153 | 通用開發準則 |
80
- | **AI Skills** | 55 | 互動式技能 |
80
+ | **AI Skills** | 56 | 互動式技能 |
81
81
  | **斜線命令** | 51 | 快速操作 |
82
82
  | **CLI 指令** | 24 | 專案設定與維護 |
83
83
  <!-- UDS_STATS_TABLE_END -->
@@ -13,7 +13,7 @@ status: current
13
13
  <!-- UDS_SUPPORTED_VERSIONS_START -->
14
14
  | 版本 | 支援狀態 |
15
15
  |------|--------|
16
- | 6.14.0-beta.3 | ✅ 預發布版本 |
16
+ | 6.14.0-beta.5 | ✅ 預發布版本 |
17
17
  | 6.13.1 | ✅ 最新正式版 |
18
18
  | < 6.0.0 | ❌ 已終止支援 |
19
19
  <!-- UDS_SUPPORTED_VERSIONS_END -->
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  source: ../../../core/ai-response-navigation.md
3
- source_version: 1.3.0
4
- translation_version: 1.3.0
5
- last_synced: 2026-08-17
3
+ source_version: 1.4.0
4
+ translation_version: 1.4.0
5
+ last_synced: 2026-10-05
6
6
  status: current
7
7
  ---
8
8
 
@@ -10,8 +10,8 @@ status: current
10
10
 
11
11
  > **語言**: [English](../../../core/ai-response-navigation.md) | 繁體中文 | [简体中文](../../zh-CN/core/ai-response-navigation.md)
12
12
 
13
- **版本**: 1.3.0
14
- **最後更新**: 2026-08-17
13
+ **版本**: 1.4.0
14
+ **最後更新**: 2026-10-05
15
15
  **適用範圍**: 所有使用 AI 輔助開發的專案
16
16
  **範圍**: universal
17
17
  **產業標準**: 無(新興 AI 工具實踐)
@@ -27,10 +27,13 @@ status: current
27
27
 
28
28
  **解決方案**:在每個實質性 AI 回應結尾附加標準化的「導航區塊」,包含情境模板、推薦標記和彈性選項數量。
29
29
 
30
- **範圍註記(v1.2.0,v1.3.0 擴充)**:規則 1–6 管的是答案**之後**要附什麼。
31
- 規則 7–11 **全部屬選用**,管的是答案本身:先講發現(R7)、每輪重述進度(R8)、不要開場白(R9)、
32
- 白話是主詞(R10)、每個選項都要帶自己的優劣而非只有推薦項有(R11)。新增的理由是——
33
- 一個回應可以滿足規則 1–6 的每一條,同時把結論埋起來;
30
+ **範圍註記(v1.2.0,v1.3.0、v1.4.0 擴充)**:規則 1–6 管的是答案**之後**要附什麼。
31
+ 規則 7–12 管的是答案本身:先講發現(R7)、每輪重述進度(R8)、不要開場白(R9)、
32
+ 白話是主詞(R10)、每個選項都要帶自己的優劣而非只有推薦項有(R11)、受控語言(R12)。
33
+ 規則 7–11 **屬選用**。**規則 12 是唯一的例外,而且只有一部分**:其中「簡化後的文字要保留寫作者的不確定語氣」
34
+ 這一條**屬必須**,其餘部分屬選用。新增的理由是——
35
+ 一個回應可以滿足規則 1–6 的每一條,同時把結論埋起來、用只有作者持有的詞彙講它、列出讀者還得自己比較的選項,
36
+ 或是靠「比證據更肯定」來變得好讀;
34
37
  **而找不到答案的讀者,不會因為結尾有一個正確的導航區塊被告知下一步而得到幫助。**
35
38
 
36
39
  ---
@@ -109,11 +112,13 @@ status: current
109
112
 
110
113
  ---
111
114
 
112
- ## 導航之前的那個答案(規則 7–11,選用)
115
+ ## 導航之前的那個答案(規則 7–12)
113
116
 
114
117
  > **規則 7–9 借鑒自**:[`ayghri/i-have-adhd`](https://github.com/ayghri/i-have-adhd)(MIT),十條中取三條。
115
118
  > **規則 10–11 於 1.3.0 新增**,來源不同——使用者在同一次工作階段中兩度指出,
116
119
  > 一個正確且完整的回答讀不懂。當時規則 7–9 已經出貨且正在被遵守。
120
+ > **規則 12 於 1.4.0 新增**,來源又不同:一則公開的建議——請 LLM 寫到「大約達到 ASD-STE100 的 80%」
121
+ > (ASD-STE100 是技術文件用的受控英文標準)。只取它的原則;它的英文詞典與時態規則不取(見規則 12)。
117
122
  > 其餘七條刪去:兩條已被上方規則 1–2 涵蓋,五條與本標準衝突
118
123
  > (它的「不要 recap/不要結語」與規則 1 的導航區塊直接矛盾;它的「清單上限 5 項」
119
124
  > 會切斷證據表格與走訪分母)或與 [estimation-standards](estimation-standards.md) 重複。
@@ -122,8 +127,9 @@ status: current
122
127
  一個回應可以把結論埋在一整面證據底下,只要結尾附上正確的導航區塊,
123
128
  它仍然滿足本標準的每一條。**找不到答案的讀者,不會因為被告知下一步而得到幫助。**
124
129
 
125
- **這五條是選用的**,語義同規則 6:採用專案不必啟用,既有 skill 也不需回頭補。
126
- 專案**可以**在自己的設定中把任一條提升為必須。**不可選的是它們必須有精確的觸發條件**——
130
+ **規則 7–11 是選用的**,語義同規則 6:採用專案不必啟用,既有 skill 也不需回頭補。
131
+ 專案**可以**在自己的設定中把任一條提升為必須。**規則 12 有一條必須(12.1)**,其餘(12.2)選用;
132
+ 為什麼這樣分,規則內部有論證。**任何一條都不可選的是它們必須有精確的觸發條件**——
127
133
  一條鬆到永遠不會啟動的規則,與沒有這條規則無從分辨。
128
134
 
129
135
  ### 規則 7:先講發現,不要先講過程(選用)
@@ -181,6 +187,9 @@ status: current
181
187
  **為什麼它與 R7 是兩條**:R7 規範的是**先講發現再給證據**的順序。R10 規範的是**語域**——
182
188
  一個回應可以先講發現,卻仍然用只有作者持有的詞彙講那個發現。兩者都讓讀者無法行動,但它們是不同的失效。
183
189
 
190
+ **白話不可以拿肯定語氣來換。** 把說明改成讀者的話就是一次改寫,而改寫正是「可能」悄悄變成「是」的地方。
191
+ 當 R10 套用在寫作者原本就有保留的論斷上,由[規則 12](#規則-12受控語言部分必須) 的 12.1(必須)管:不確定語氣要留著。
192
+
184
193
  ### 規則 11:每個選項都要帶自己的優劣(選用)
185
194
 
186
195
  **觸發條件**:要求讀者在兩個以上做法之間選擇的回應。
@@ -204,6 +213,93 @@ status: current
204
213
 
205
214
  **與規則 4 相輔**:選項數維持在 1–5。優劣讓每個選項讀起來更花力氣,所以這條規則讓規則 4 的上限**更**要緊,不是更不要緊。
206
215
 
216
+ ### 規則 12:受控語言(部分必須)
217
+
218
+ **觸發條件**:為「不是原作者」的讀者撰寫、改寫、縮短、簡化或翻譯文字——典型是一位非專業的讀者,要靠這段文字做判斷或核准。
219
+
220
+ 受控語言(用變化換可預測性的寫作規則)讓文字更好讀。它有一個已知的失敗方式:最好讀的句子是肯定的句子,
221
+ 所以「簡化」會朝肯定的方向漂移。本規則取受控寫作的原則,並對這個漂移設一道硬性的停損。
222
+
223
+ #### 12.1 簡化後的文字要保留不確定語氣(必須)
224
+
225
+ 不確定語氣是一個告訴讀者「這個論斷可以信到什麼程度」的詞:*可能、推斷、大概、尚未確認*——
226
+ *might、could、probably、appears to、not yet confirmed*。它是資訊,不是贅詞。
227
+
228
+ 縮短、簡化、改寫或翻譯時:
229
+
230
+ - **不可把不確定的論斷改成確定的。** 原文說「可能」,結果就說「可能」(或結果語言裡對等的說法)。
231
+ - **不可為了省字而刪掉不確定語氣。** 目標是更短的句子;更肯定的句子不被允許。
232
+ - **不可加入原文沒說的事實**——編出來的原因、編出來的「已確認」,是同一種失敗的另一個樣子。
233
+ - 只有在論斷之後**已經被驗證**時,不確定語氣才可以拿掉;而且要由驗證(查了什麼、結果是什麼)取代它的位置。
234
+ 只刪掉不確定語氣,不算驗證。
235
+
236
+ **為什麼只有這一條是必須的**:只有它的失敗會讓讀者**相信不真實的事**,而不只是讓文字更難讀。
237
+ 它也不需要校準——檢查就是拿改寫前後兩份文字比對,人或模型在任何語言都做得到;
238
+ 而下面每一個門檻都取決於語言與讀者。
239
+
240
+ #### 12.2 白話寫作原則(選用)
241
+
242
+ 讀者是非專業人士時套用。它們與語言無關:每一條都用該語言自己的單位來表達,不附任何詞表。
243
+
244
+ | 原則 | 要求什麼 |
245
+ |------|----------|
246
+ | **句子短,以該語言自己的單位計** | 一句一個意思。**起始範圍**,不是上限:英文大約 15–25 個詞,中文大約 25–40 個字。遠超過範圍是「該拆句」的訊號,不是要計數的缺陷。依語言與讀者校準 |
247
+ | **同一個東西只用一個名稱** | 每個東西選定一個名稱,全文都用它。不要為了文采換說法:讀者看到第二個名稱,會以為是第二個東西 |
248
+ | **主詞明確、主動語態** | 說清楚誰做了什麼。施事者不明或不重要時,才用被動 |
249
+ | **一步一動作** | 程序是編號清單,每項一個動作,不是一段文字 |
250
+ | **少用分號** | 分號把讀者必須同時記住的兩個意思接在一起。拆成兩句或一份清單 |
251
+ | **數字帶單位** | 「30 秒」「3 個檔案」「NT$1,200」——不要只寫「30」 |
252
+
253
+ **為什麼是選用**:上面的範圍只是起始點,**沒有**對照讀者實際理解度校準過,也沒有檢查器在執行。
254
+ 一條**必須**的規則若附帶沒人能驗證的門檻,會產生機械式的遵守——句子被拆到不再像句子——
255
+ 而專家讀者可能反而更適合比較密的文字。這些原則是寫作者憑判斷套用的指引;12.1 才是不會彎的那一部分。
256
+
257
+ #### 本規則不取 ASD-STE100 的什麼
258
+
259
+ ASD-STE100 的**核可詞典**(每個核可的英文單字只有一個意思,並有一份封閉的允許字表)與它的**時態限制**,
260
+ 都依賴英文這個語言。它們**不適用於中文**或其他非英文文字,本標準**不附任何形式的字表**。
261
+ 只取 12.2 的原則,並改寫成每一條都能在任何語言套用。
262
+
263
+ 同理,不要用「以空白或 ASCII 字元斷詞」的計數器去衡量非英文文字:它把一整段中文看成一個「詞」,
264
+ 不論多長都通過。一把在某個語言上永遠是綠燈的量尺,在那個語言上什麼也沒量到。
265
+
266
+ #### 範例:同一段文字、三種改寫,以及一個不被允許的改寫
267
+
268
+ 範例刻意用中文:本規則與語言無關,而中文正是只靠英文做法行不通的地方。三個有效版本都保留不確定語氣
269
+ 「可能」、「推斷」、「尚未」,且沒有加入原文沒有的事實。
270
+
271
+ **原文**
272
+
273
+ ```text
274
+ 經過檢查,登入頁面在高流量時段回應變慢,這個問題可能是資料庫連線池被耗盡所造成的,我們推斷是因為上週的改版新增了一個會長時間佔用連線的查詢;目前尚未在測試環境重現,所以修復後的效果還需要被確認,建議在確認之前先不要對外宣布已經解決。
275
+ ```
276
+
277
+ **約 80%**——句子較短,讀起來仍像一段文字
278
+
279
+ ```text
280
+ 登入頁面在高流量時段回應變慢。原因可能是資料庫連線池被耗盡。我們推斷,上週改版新增了一個查詢,它會長時間佔用連線。這一點尚未在測試環境重現,修復後有沒有效,也還沒確認。確認之前,建議先不要對外宣布已經解決。
281
+ ```
282
+
283
+ **嚴格**——一行一個意思、加標籤、保留不確定語氣
284
+
285
+ ```text
286
+ 登入頁面在高流量時段回應變慢。
287
+ 1. 原因:可能是資料庫連線池被耗盡。
288
+ 2. 推斷:上週改版新增了一個查詢,這個查詢可能長時間佔用連線。
289
+ 3. 狀態:尚未在測試環境重現。
290
+ 4. 修復效果:尚未確認。
291
+ 5. 建議:確認之前,不要對外宣布已解決。
292
+ ```
293
+
294
+ **不是有效的改寫**——最短,而且是錯的
295
+
296
+ ```text
297
+ 登入頁面變慢,原因是資料庫連線池被耗盡,已確認由上週改版造成。
298
+ ```
299
+
300
+ 最後這一版最短、也最好讀,卻兩度違反 12.1:「可能」變成直接陳述的原因,「尚未重現」變成「已確認」,
301
+ 而原文從沒說過這件事。讀者若憑它核准一個修復,就是被給了一件不真實的事。
302
+
207
303
  ---
208
304
 
209
305
  ## 情境模板
@@ -398,6 +494,7 @@ AI 需要使用者做出選擇或提供資訊時使用。
398
494
  | R9 | *(選用)* 不要開場白。結語仍為必須——見 R1 |
399
495
  | R10 | *(選用)* 白話是主詞;識別字放在主張之後當佐證 |
400
496
  | R11 | *(選用)* 每個選項都要說明換到什麼、代價是什麼——不只推薦那一個 |
497
+ | R12 | **12.1 *(必須)***:簡化、縮短或翻譯時,保留不確定語氣——不可把「可能」改成「是」。12.2 *(選用)*:句子短(以該語言自己的單位計)、同物同名、主動語態、一步一動作、少用分號、數字帶單位。不附英文詞典——它無法移到其他語言 |
401
498
 
402
499
  | 豁免 | 不豁免 |
403
500
  |------|--------|
@@ -421,6 +518,7 @@ AI 需要使用者做出選擇或提供資訊時使用。
421
518
 
422
519
  | 版本 | 日期 | 變更 |
423
520
  |------|------|------|
521
+ | 1.4.0 | 2026-10-05 | 新增 R12 受控語言(語言中立)。一條必須(12.1:簡化後的文字要保留寫作者的不確定語氣——「可能」不會變成「是」、也不新增原文沒有的事實);其餘(12.2:以該語言自己的單位計句長、同物同名、主動語態、一步一動作、少用分號、數字帶單位)屬選用,理由已寫進標準。取 ASD-STE100 的原則、不取它的英文詞典與時態規則,並在標準裡明說。附一組中文改寫對照(三種嚴格度),外加一個更短卻錯誤的改寫。R10 現在指向 R12,因為把論斷改成白話就是一次改寫,而改寫正是不確定語氣流失的地方 |
424
522
  | 1.3.0 | 2026-08-17 | 新增選用規則 R10–R11。R10 管語域:白話是句子的主詞、識別字當佐證——與 R7 不同,R7 管的是「先發現後證據」的順序,而一個回應可以先講發現卻仍用只有作者持有的詞彙講它。R11 把規則 2 從推薦選項擴及全部:只論證推薦項的清單等於把比較丟回給讀者,而沒標代價的選項讀起來像沒有代價 |
425
523
  | 1.2.0 | 2026-08-17 | 新增選用規則 R7–R9,管答案本身(先講發現、重述進度、不要開場白)。借鑒自 `ayghri/i-have-adhd`(MIT),十條取三;其餘七條因已被 R1–R2 涵蓋、與 R1 衝突、或與 estimation-standards 重複而刪去。規則 1–6 全部可以被一個把結論埋起來的回應滿足——R7–R9 補上這個缺口 |
426
524
  | 1.1.0 | 2026-06-10 | 新增規則 R6 選用模型級別標注(`〔模型:Fast|Standard|Capable〕`);與廠商無關;不強制既有技能回改 |
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  source: ../../../core/full-coverage-testing.md
3
- source_version: 1.1.0
4
- translation_version: 1.1.0
5
- last_synced: 2026-07-23
6
- source_hash: 8ca921c68533
3
+ source_version: 1.2.0
4
+ translation_version: 1.2.0
5
+ last_synced: 2026-10-06
6
+ source_hash: 1fe2966d8684
7
7
  status: current
8
8
  ---
9
9
 
@@ -12,7 +12,7 @@ status: current
12
12
  > **Language**: [English](../../../core/full-coverage-testing.md) | 繁體中文
13
13
 
14
14
  > **AI 最佳化版本**: `ai/standards/full-coverage-testing.ai.yaml`
15
- > **XSPEC**: XSPEC-178
15
+ > **XSPEC**: XSPEC-178、XSPEC-444(R2、R5——提交前警告與隨附閘門腳本)
16
16
  > **取代**: 金字塔門檻模型(UT≥80%、IT≥70%、E2E 僅 happy-path)
17
17
 
18
18
  ## 概述
@@ -233,6 +233,60 @@ legacy 降級模式(外部服務失敗時的 fallback、重試、部分結果
233
233
 
234
234
  ---
235
235
 
236
+ ## UDS 隨附的提交前警告與閘門腳本(XSPEC-444 R2、R5)
237
+
238
+ 上面的規則過去要靠標準叫你自己寫的腳本來執行。現在 `uds init` 會直接把掃描腳本寫進你的專案,而 `uds check`——UDS 的 pre-commit hook 執行的指令——會印出這些腳本和另一項檢查找到的東西。**預設一律只警告、不擋任何東西**;要收緊是選擇性的(見「先警告,之後再收緊」)。
239
+
240
+ ### 兩支掃描腳本(`uds init` 寫到 `scripts/`)
241
+
242
+ | 腳本 | 找什麼 |
243
+ |------|--------|
244
+ | `scripts/check-anti-fake-tests.mjs` | **沒有斷言**的測試;唯一的斷言是**恆真式**的測試(`expect(true).toBe(true)`、`assert 200 == 200`);**每一支測試都被跳過或標為 todo** 的測試檔 |
245
+ | `scripts/check-stubs.mjs` | `// WARNING: STUB` 標記;宣稱**尚未實作**的函式本體(`raise NotImplementedError`、`todo!()`、`TODO()` 等)而旁邊沒有標記;本體**為空**的具名函式而旁邊沒有標記 |
246
+
247
+ - 純 Node、零相依、不預設任何測試框架。它們是**你的檔案**:可以改、可以接進 CI。單獨執行時,找到東西就以非 0 結束——`node scripts/check-stubs.mjs` 就是本標準部署閘門所說的 pre-push/部署閘門。
248
+ - `uds init` 不會覆寫已存在的檔案,`uds update` 也不會;較早初始化的專案,`uds update` 會詢問是否寫入(提示的預設為否;`uds update -y` 會直接回答是)。
249
+ - 有暫存檔案時只讀那些檔案;沒有暫存任何東西時(CI 執行、手動 `uds check`)每支都會走訪整個專案——走訪最多 200,000 個檔案,`uds check` 給每支 120 秒(超過就回報「無法判定」,絕不算通過)——所以在很大的儲存庫裡,請在 CI 執行,不要期待立刻完成。
250
+ - 同一行或上面三行內出現 `STUB` 或 `COVERAGE_EXEMPT`,該暫時實作就算已**宣告**;已宣告的只以標記回報一次。
251
+ - **語言範圍。**測試檔規則涵蓋 JavaScript/TypeScript、Python、Java/Kotlin/Scala/C#、Go、Rust、Ruby、Elixir、PHP、Swift、Dart、Lua 與 C/C++。其他語言的測試檔會被列為「未掃描」——絕不當成乾淨。空函式規則涵蓋 JavaScript/TypeScript、Python、Go、Rust、Ruby 與 PHP;其他語言仍會找標記與「尚未實作」的本體,輸出也會寫出哪些語言沒有空函式規則。
252
+ - 它們讀的是文字,不執行你的測試。若某個輔助函式用掃描器認不得的名稱做斷言,會被報為「no-assertion」:把它命名為 `assert*`/`verify*`/`expect*`,或把它的樣式列在政策檔的 `assertionPatterns`。
253
+ - 每次執行都先拿已知的假測試與已知的好測試檢驗自己;檢驗失敗就以 `2`(「無法判定」)結束,這絕不算通過。
254
+
255
+ ### 改了程式碼卻沒動測試(`uds check`,針對已暫存的變更)
256
+
257
+ 有檔案暫存準備提交時,`uds check` 會比對變更內容:
258
+
259
+ - 改了程式檔,**同一次提交沒有任何測試檔變動** → 警告,並列出程式檔;
260
+ - 變更中有 UDS 不認得的檔案類型 → 警告,列出它並說明如何分類(絕不當成沒事,也絕不擋);
261
+ - 刪除不算需要測試的變更;**純重新命名**(git 的 `R100`)與符合 `exempt` 條目的路徑可免,輸出會記下理由。
262
+
263
+ 沒有暫存任何東西時(CI 執行、手動 `uds check`),差異檢查不出聲;兩支掃描腳本則改為掃整個專案。
264
+
265
+ ### 政策檔 `.standards/test-policy.json`(選用)
266
+
267
+ 哪些路徑是測試、哪些是程式,是附有常見生態預設值的資料,不是一份框架清單。每個清單都是**加進**預設值:
268
+
269
+ ```json
270
+ {
271
+ "mode": "warn",
272
+ "testDirs": ["integration"],
273
+ "testPatterns": ["*.itest.*"],
274
+ "sourceExtensions": ["zig"],
275
+ "nonCodeExtensions": ["gradle"],
276
+ "ignore": ["generated/**"],
277
+ "exempt": [{ "pattern": "src/gen/**", "reason": "generated by protoc" }],
278
+ "assertionPatterns": ["\\bmustMatch\\w*\\s*\\("]
279
+ }
280
+ ```
281
+
282
+ 沒有 `reason` 的 `exempt` 條目不會生效,並會被回報:豁免必須說明原因。
283
+
284
+ ### 先警告,之後再收緊
285
+
286
+ `"mode": "warn"`(預設)只印出警告、放行提交。`"mode": "block"` 會讓 `uds check` 在以下情況以非 0 結束,因此擋下提交:掃描腳本找到東西、掃描腳本無法判定、或改了程式碼卻沒動測試。UDS 不認得的檔案類型永遠不會擋。**尚未實作**(規格沒有定義基線放在哪裡、以什麼計數):未配測試的變更數棘輪,以及逐次提交的豁免理由(pre-commit hook 讀不到提交訊息)。
287
+
288
+ ---
289
+
236
290
  ## 從金字塔模型遷移
237
291
 
238
292
  若你的專案先前使用金字塔門檻:
@@ -240,8 +294,8 @@ legacy 降級模式(外部服務失敗時的 fallback、重試、部分結果
240
294
  1. **刪除** `jest.config.js` / `vitest.config.ts` 中任何硬編碼的覆蓋率門檻(`coverageThreshold` 選項)
241
295
  2. **安裝** `.coverage-baseline.json`,以目前的覆蓋率作為棘輪起點
242
296
  3. **新增** `scripts/check-coverage-ratchet.sh` 到 CI
243
- 4. **新增** `scripts/check-stubs.sh` 到 deploy.sh 與 pre-push hook
244
- 5. **新增** `scripts/check-anti-fake-tests.sh` 到 pre-commit 或 CI
297
+ 4. **新增** `scripts/check-stubs.mjs` 到 deploy.sh 與 pre-push hook(由 `uds init` 寫入;既有專案由 `uds update` 提供)
298
+ 5. **新增** `scripts/check-anti-fake-tests.mjs` 到 pre-commit 或 CI(由 `uds init` 寫入;`uds check` 已會執行並警告)
245
299
 
246
300
  棘輪從你目前的覆蓋率開始。從那一刻起,它只能上升。
247
301
 
@@ -1,6 +1,6 @@
1
1
  # UDS 速查表
2
2
 
3
- > Quick reference for all UDS features | Last updated: 2026-09-29
3
+ > Quick reference for all UDS features | Last updated: 2026-10-06
4
4
 
5
5
  **Language**: [English](../../../docs/user/CHEATSHEET.md) | 繁體中文 | [简体中文](../../zh-CN/docs/CHEATSHEET.md)
6
6
 
@@ -110,6 +110,7 @@
110
110
  | `ci-cd-assistant` | 引導 CI/CD 管線的設計、設定與最佳化。 |
111
111
  | `code-review-assistant` | [UDS] 系統性程式碼審查的參考資料:八大審查類別,以及 BLOCKING/IMPORTANT/SUGGESTION |
112
112
  | `commit-standards` | [UDS] 產生符合 Conventional Commits 規範的 commit message,包含雙語格式。 |
113
+ | `comprehension-ladder` | [UDS] 把一段難懂的 AI 輸出換成較好懂的形式:受控文字、Mermaid 圖、單檔 HTML 解說頁。所有形式都來 |
113
114
  | `contract-test-assistant` | [UDS] 引導 API 與微服務的合約測試策略。 |
114
115
  | `database-assistant` | 引導資料庫設計、遷移與查詢最佳化。 |
115
116
  | `deploy-assistant` | 引導在沒有 CI/CD 平台(GitHub Actions/GitLab CI)的情況下完成可靠部署。 |
@@ -388,6 +389,7 @@
388
389
  | `generate-version-manifest.mjs` | Generate Version Manifest (SPEC-SELFDIAG-001 REQ-9 |
389
390
  | `install-hooks.mjs` | Install Hooks |
390
391
  | `install-hooks.sh` | Thin wrapper — scripts/install-hooks.mjs is the on |
392
+ | `npm-pack-files.mjs` | @param {string} stdout @returns {string[]} package |
391
393
  | `pre-commit.mjs` | Build a platform-aware shell command for a .sh scr |
392
394
  | `pre-release-check.ps1` | Pre Release Check |
393
395
  | `pre-release-check.sh` | Pre-release Check Script |
@@ -1,7 +1,7 @@
1
1
  # UDS 功能參考手冊
2
2
 
3
3
  > Universal Development Standards - 完整功能文件
4
- > Auto-generated | Last updated: 2026-09-29
4
+ > Auto-generated | Last updated: 2026-10-06
5
5
 
6
6
  **Language**: [English](../../../docs/reference/FEATURE-REFERENCE.md) | 繁體中文 | [简体中文](../../zh-CN/docs/FEATURE-REFERENCE.md)
7
7
 
@@ -11,13 +11,13 @@
11
11
 
12
12
  1. [CLI 指令](#cli-commands) (24)
13
13
  2. [斜線命令](#slash-commands) (51)
14
- 3. [技能](#skills) (55)
14
+ 3. [技能](#skills) (56)
15
15
  4. [代理](#agents) (5)
16
16
  5. [工作流程](#workflows) (5)
17
17
  6. [核心規範](#core-standards) (153)
18
- 7. [腳本](#scripts) (63)
18
+ 7. [腳本](#scripts) (64)
19
19
 
20
- **Total Features: 356**
20
+ **Total Features: 358**
21
21
 
22
22
  ---
23
23
 
@@ -181,6 +181,7 @@
181
181
  | `--gh` | Force gh CLI for submission |
182
182
  | `--format` | Output format (json) |
183
183
  | `--quiet` | Summary only |
184
+ | `--offline` | No network access at all: no CLI version check, and --report does not submit |
184
185
  | `--score` | Run multi-dimensional health score analysis |
185
186
  | `--self` | Self mode: analyze UDS repo itself (use with --score) |
186
187
  | `--save` | Save score snapshot for trend tracking (use with --score) |
@@ -365,6 +366,7 @@
365
366
  | `ci-cd-assistant` | 引導 CI/CD 管線的設計、設定與最佳化。 |
366
367
  | `code-review-assistant` | [UDS] 系統性程式碼審查的參考資料:八大審查類別,以及 BLOCKING/IMPORTANT/SUGGESTION 評論前綴。 |
367
368
  | `commit-standards` | [UDS] 產生符合 Conventional Commits 規範的 commit message,包含雙語格式。 |
369
+ | `comprehension-ladder` | [UDS] 把一段難懂的 AI 輸出換成較好懂的形式:受控文字、Mermaid 圖、單檔 HTML 解說頁。所有形式都來自同一份大綱,所以形式會變,事實不會變。 |
368
370
  | `contract-test-assistant` | [UDS] 引導 API 與微服務的合約測試策略。 |
369
371
  | `database-assistant` | 引導資料庫設計、遷移與查詢最佳化。 |
370
372
  | `deploy-assistant` | 引導在沒有 CI/CD 平台(GitHub Actions/GitLab CI)的情況下完成可靠部署。 |
@@ -448,7 +450,7 @@
448
450
  | `ai-command-behavior` | 1.0.0 | This standard defines a structure for specifying AI Agent runtime behavior in co |
449
451
  | `ai-friendly-architecture` | 1.0.0 | This standard defines architecture and documentation practices that maximize the |
450
452
  | `ai-instruction-standards` | 1.1.1 | This standard defines best practices for creating and maintaining AI instruction |
451
- | `ai-response-navigation` | 1.3.0 | This standard defines navigation behavior for AI responses: every substantive AI |
453
+ | `ai-response-navigation` | 1.4.0 | This standard defines navigation behavior for AI responses: every substantive AI |
452
454
  | `alerting-standards` | 1.0.0 | |
453
455
  | `anti-hallucination` | 1.5.1 | This standard defines strict guidelines for AI assistants to prevent hallucinati |
454
456
  | `anti-sycophancy-prompting` | 1.0.0 | This standard defines techniques and rules for designing prompts that elicit gen |
@@ -651,6 +653,7 @@
651
653
  | `generate-version-manifest.mjs` | Generate Version Manifest (SPEC-SELFDIAG-001 REQ-9, AC-14) |
652
654
  | `install-hooks.mjs` | Install Hooks |
653
655
  | `install-hooks.sh` | Thin wrapper — scripts/install-hooks.mjs is the only copy of the installer |
656
+ | `npm-pack-files.mjs` | @param {string} stdout @returns {string[]} package-relative file paths |
654
657
  | `pre-commit.mjs` | Build a platform-aware shell command for a .sh script. |
655
658
  | `pre-release-check.ps1` | Pre Release Check |
656
659
  | `pre-release-check.sh` | Pre-release Check Script |
@@ -59,6 +59,7 @@ skills/
59
59
  | `refactoring-assistant` | `/refactor` | [UDS] 重構指引 |
60
60
  | `project-discovery` | `/discover` | [UDS] 評估專案健康度與風險 |
61
61
  | `brainstorm-assistant` | `/brainstorm` | [UDS] 結構化 AI 輔助發想 |
62
+ | `comprehension-ladder` | `/comprehend` | [UDS] 把難懂的 AI 輸出換成受控文字、Mermaid 圖或離線 HTML 解說頁,不改變事實 |
62
63
  | `changelog-guide` | `/changelog` | [UDS] 產生 changelog 條目 |
63
64
  | `dev-workflow-guide` | `/dev-workflow` | [UDS] 將開發階段對應到 UDS 命令 |
64
65
  | `docs-generator` | `/docgen` | [UDS] 產生使用文件 |