universal-dev-standards 5.1.0-beta.7 → 5.1.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 (50) hide show
  1. package/README.md +6 -0
  2. package/bin/uds.js +2 -0
  3. package/bundled/ai/standards/translation-lifecycle-standards.ai.yaml +145 -0
  4. package/bundled/core/translation-lifecycle-standards.md +162 -0
  5. package/bundled/locales/zh-CN/CHANGELOG.md +32 -3
  6. package/bundled/locales/zh-CN/README.md +1 -1
  7. package/bundled/locales/zh-CN/core/anti-hallucination.md +22 -3
  8. package/bundled/locales/zh-CN/core/anti-sycophancy-prompting.md +192 -0
  9. package/bundled/locales/zh-CN/core/capability-declaration.md +123 -0
  10. package/bundled/locales/zh-CN/core/circuit-breaker.md +106 -0
  11. package/bundled/locales/zh-CN/core/dual-phase-output.md +103 -0
  12. package/bundled/locales/zh-CN/core/failure-source-taxonomy.md +99 -0
  13. package/bundled/locales/zh-CN/core/frontend-design-standards.md +289 -0
  14. package/bundled/locales/zh-CN/core/health-check-standards.md +144 -0
  15. package/bundled/locales/zh-CN/core/immutability-first.md +96 -0
  16. package/bundled/locales/zh-CN/core/packaging-standards.md +224 -0
  17. package/bundled/locales/zh-CN/core/recovery-recipe-registry.md +146 -0
  18. package/bundled/locales/zh-CN/core/retry-standards.md +131 -0
  19. package/bundled/locales/zh-CN/core/security-decision.md +104 -0
  20. package/bundled/locales/zh-CN/core/skill-standard-alignment-check.md +112 -0
  21. package/bundled/locales/zh-CN/core/standard-admission-criteria.md +104 -0
  22. package/bundled/locales/zh-CN/core/standard-lifecycle-management.md +116 -0
  23. package/bundled/locales/zh-CN/core/timeout-standards.md +117 -0
  24. package/bundled/locales/zh-CN/core/token-budget.md +108 -0
  25. package/bundled/locales/zh-CN/core/translation-lifecycle-standards.md +159 -0
  26. package/bundled/locales/zh-TW/CHANGELOG.md +32 -3
  27. package/bundled/locales/zh-TW/README.md +1 -1
  28. package/bundled/locales/zh-TW/core/anti-sycophancy-prompting.md +8 -0
  29. package/bundled/locales/zh-TW/core/capability-declaration.md +111 -0
  30. package/bundled/locales/zh-TW/core/circuit-breaker.md +111 -0
  31. package/bundled/locales/zh-TW/core/dual-phase-output.md +132 -0
  32. package/bundled/locales/zh-TW/core/failure-source-taxonomy.md +146 -0
  33. package/bundled/locales/zh-TW/core/frontend-design-standards.md +460 -0
  34. package/bundled/locales/zh-TW/core/health-check-standards.md +144 -0
  35. package/bundled/locales/zh-TW/core/immutability-first.md +159 -0
  36. package/bundled/locales/zh-TW/core/recovery-recipe-registry.md +146 -0
  37. package/bundled/locales/zh-TW/core/retry-standards.md +140 -0
  38. package/bundled/locales/zh-TW/core/security-decision.md +120 -0
  39. package/bundled/locales/zh-TW/core/skill-standard-alignment-check.md +112 -0
  40. package/bundled/locales/zh-TW/core/standard-admission-criteria.md +104 -0
  41. package/bundled/locales/zh-TW/core/standard-lifecycle-management.md +116 -0
  42. package/bundled/locales/zh-TW/core/timeout-standards.md +117 -0
  43. package/bundled/locales/zh-TW/core/token-budget.md +143 -0
  44. package/bundled/locales/zh-TW/core/translation-lifecycle-standards.md +159 -0
  45. package/package.json +2 -1
  46. package/src/commands/check.js +6 -0
  47. package/src/commands/init.js +6 -0
  48. package/src/commands/update.js +6 -0
  49. package/src/utils/detect-self-adoption.js +173 -0
  50. package/standards-registry.json +15 -4
@@ -0,0 +1,159 @@
1
+ ---
2
+ source: ../../../core/translation-lifecycle-standards.md
3
+ source_version: 1.0.0
4
+ translation_version: 1.0.0
5
+ last_synced: 2026-04-20
6
+ status: current
7
+ ---
8
+
9
+ # 翻译生命周期标准
10
+
11
+ > **语言**: [English](../../../core/translation-lifecycle-standards.md) | 简体中文
12
+
13
+ **版本**: 1.0.0
14
+ **最后更新**: 2026-04-20
15
+ **状态**: Trial(到期 2026-10-20)
16
+ **适用范围**: 所有具备多语言文档的项目
17
+ **来源**: UDS BUG-A06 事后分析(2026-04-20)
18
+ **父标准**: [documentation-lifecycle](documentation-lifecycle.md)
19
+
20
+ ---
21
+
22
+ ## 目的
23
+
24
+ 翻译生命周期标准:MISSING 与 OUTDATED 的区别、Semver 严重度分级,以及自动化整合(pre-commit hook、release gate)。
25
+
26
+ `documentation-lifecycle` 标准提到翻译同步是 release gate 的一环,但未定义如何分类或响应不同程度的漂移。本标准填补这个缺口:翻译文件不存在与略微过时有本质区别,major 版本落差与 patch 升版也有本质区别。若不作区分,团队要么过度阻塞(任何过时都 fail),要么阻塞不足(忽略所有过时直到成为用户可见的问题)。
27
+
28
+ **证据(BUG-A06 事后分析)**:
29
+ 1. UDS 在 3 个月内新增 32 个标准时,因缺乏 MISSING gate,翻译全部缺失,直到 Q2 audit 才发现。
30
+ 2. `anti-hallucination.md` zh-CN 停在 1.5.0,来源已升至 1.5.1——新的 Agent 认识论校准框架段落在 zh-CN 版本中完全缺失,用户看不到。
31
+
32
+ ---
33
+
34
+ ## 核心规范
35
+
36
+ - `MISSING`(翻译文件不存在)永远是 release blocker — `exit 1`
37
+ - `MAJOR` 版本落差(来源 X > 翻译 x,X > x)是 release blocker — `exit 1`
38
+ - `MINOR` 版本落差是 advisory — 醒目警告,不阻塞
39
+ - `PATCH` 版本落差是 advisory — 柔和警告,不阻塞
40
+ - 严重度由翻译 frontmatter 的 `source_version` 与当前来源版本的 semver 比较决定
41
+ - 每个翻译文件必须有 YAML frontmatter,包含 `source`、`source_version`、`translation_version`、`last_synced`、`status`
42
+ - 来源标准被修改后,翻译的 `source_version` 立即过时——这种漂移可在 commit 时通过 pre-commit hook 检测
43
+
44
+ ---
45
+
46
+ ## 严重度分级
47
+
48
+ | 等级 | 条件 | Exit Code | 行动 |
49
+ |------|------|-----------|------|
50
+ | `MISSING` | 翻译文件不存在 | 1 | 发布前创建 |
51
+ | `MAJOR` | 来源 MAJOR > 翻译 MAJOR | 1 | 正式版发布前更新 |
52
+ | `MINOR` | 来源 MINOR > 翻译 MINOR(同 MAJOR)| 0 | 下次发布前更新(advisory)|
53
+ | `PATCH` | 来源 PATCH > 翻译 PATCH(同 MAJOR.MINOR)| 0 | 方便时更新(advisory)|
54
+ | `CURRENT` | source_version == 当前来源版本 | 0 | 无需行动 |
55
+
56
+ ### Semver 差异公式
57
+
58
+ ```
59
+ diff_level = compare(
60
+ strip_prerelease(current_source_version),
61
+ strip_prerelease(translation.source_version)
62
+ )
63
+
64
+ 其中:major 不同 → MAJOR,minor 不同 → MINOR,其他 → PATCH
65
+ ```
66
+
67
+ ---
68
+
69
+ ## 触发条件
70
+
71
+ | 事件 | 必要行动 |
72
+ |------|---------|
73
+ | 新增标准到 `core/` | 在所有支持的语言创建翻译(MISSING check 阻塞发布)|
74
+ | 标准 PATCH 升版 | 方便时更新翻译的 `source_version` + `last_synced` |
75
+ | 标准 MINOR 升版(含新段落)| 更新翻译内容 + frontmatter,下次发布前完成 |
76
+ | 标准 MAJOR 升版(大改写)| 更新翻译内容 + frontmatter,当前发布前完成(阻塞)|
77
+ | 手动更新翻译 | 升版 `translation_version` + `last_synced` |
78
+
79
+ ---
80
+
81
+ ## 翻译 Frontmatter 协议
82
+
83
+ 每个翻译文件必须以以下格式开头:
84
+
85
+ ```yaml
86
+ ---
87
+ source: ../../../core/<filename>.md # 指向来源的相对路径
88
+ source_version: <X.Y.Z> # 最后同步时的来源版本
89
+ translation_version: <X.Y.Z> # 翻译自身的版本
90
+ last_synced: <YYYY-MM-DD> # 最后同步日期
91
+ status: current | outdated | draft # 人类可读状态
92
+ ---
93
+ ```
94
+
95
+ 更新翻译时:
96
+ 1. 翻译新增或修改的内容
97
+ 2. 设定 `source_version` = 新的来源版本
98
+ 3. 设定 `translation_version` = 与 `source_version` 相同(或独立升版)
99
+ 4. 设定 `last_synced` = 今天日期
100
+ 5. 设定 `status: current`
101
+
102
+ ---
103
+
104
+ ## 自动化整合
105
+
106
+ ### Pre-Commit Hook
107
+
108
+ 当 `core/*.md` 文件被暂存时,pre-commit hook 执行 `check-translation-sync.sh` 并显示 OUTDATED 警告。Hook **永不阻塞** commit(在 commit 时阻塞过于干扰)——纯提醒用途。
109
+
110
+ 设置方式:`./scripts/install-hooks.sh`(clone 后执行一次)
111
+
112
+ ### Release Gate(`check-translation-sync.sh`)
113
+
114
+ 在 `npm publish` 前或作为 `pre-release-check.sh` 的一部分执行:
115
+
116
+ ```bash
117
+ bash scripts/check-translation-sync.sh
118
+ # MISSING 或 MAJOR 落差 → exit 1
119
+ # 仅 MINOR/PATCH 落差 → exit 0(附 advisory 输出)
120
+ ```
121
+
122
+ ### Version Bump 整合(`bump-version.sh`)
123
+
124
+ `bump-version.sh` 在更新版本文件后自动执行 `check-translation-sync.sh`,在升版时即时显示翻译健康状态快照——让作者立即知道发布前需要更新什么。
125
+
126
+ ---
127
+
128
+ ## 情境示例
129
+
130
+ **情境 1 — 标准 patch 升版(1.0.0 → 1.0.1)**
131
+ - 翻译 `source_version: 1.0.0`,来源现在是 `1.0.1`
132
+ - 严重度:`PATCH` — advisory,exit 0
133
+ - 行动:下次方便时更新,不阻塞发布
134
+
135
+ **情境 2 — 标准 minor 升版含新段落(1.0.0 → 1.1.0)**
136
+ - 翻译 `source_version: 1.0.0`,来源现在是 `1.1.0`
137
+ - 严重度:`MINOR` — advisory,exit 0
138
+ - 行动:下次发布前更新;zh-CN 用户缺少新内容
139
+
140
+ **情境 3 — 标准 major 大改写(1.x.x → 2.0.0)**
141
+ - 翻译 `source_version: 1.5.0`,来源现在是 `2.0.0`
142
+ - 严重度:`MAJOR` — 阻塞,exit 1
143
+ - 行动:正式版发布前必须更新
144
+
145
+ **情境 4 — 新标准,无翻译文件**
146
+ - `locales/zh-CN/core/new-standard.md` 不存在
147
+ - 严重度:`MISSING` — 阻塞,exit 1
148
+ - 行动:发布前创建翻译文件
149
+
150
+ ---
151
+
152
+ ## 错误码
153
+
154
+ | 代码 | 说明 |
155
+ |------|------|
156
+ | `TRANS-001` | `MISSING_TRANSLATION` — 来源标准的翻译文件不存在 |
157
+ | `TRANS-002` | `MAJOR_VERSION_GAP` — 翻译的 source_version 落后当前来源 MAJOR 版本 |
158
+ | `TRANS-003` | `MISSING_FRONTMATTER` — 翻译文件缺少必要的 YAML frontmatter |
159
+ | `TRANS-004` | `STALE_SOURCE_REF` — frontmatter 的 `source` 路径指向不存在的文件 |
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  source: ../../CHANGELOG.md
3
- source_version: 5.1.0-beta.7
4
- translation_version: 5.1.0-beta.7
5
- last_synced: 2026-04-17
3
+ source_version: 5.1.0
4
+ translation_version: 5.1.0
5
+ last_synced: 2026-04-20
6
6
  status: current
7
7
  ---
8
8
 
@@ -17,6 +17,35 @@ status: current
17
17
 
18
18
  ## [Unreleased]
19
19
 
20
+ ## [5.1.0] - 2026-04-20
21
+
22
+ > **正式版**:BUG-A06 i18n 完整性 — 新增 32 份缺失翻譯、Semver 感知翻譯閘門、新增 `translation-lifecycle-standards` UDS 標準。BUG-A07 Shell 測試覆蓋 — 20+ 腳本的 bats smoke tests。BUG-A08 假通過測試稽核 — 修正 22 個測試。Pre-release Batch 0:6 個標準從 Trial 升至 Adopt(DEC-021/025/031/035/038/040)。標準總數:106 個。
23
+
24
+ ### 新增
25
+ - **`translation-lifecycle-standards`**(Trial,到期 2026-10-20):新 UDS 標準,定義 MISSING 與 OUTDATED 的區別、Semver 嚴重度分級(MISSING/MAJOR = 發布阻塞器,MINOR/PATCH = advisory),以及自動化整合(pre-commit hook、release gate、bump-version 整合)。來源:BUG-A06 事後分析。
26
+ - **`.githooks/pre-commit`** + **`scripts/install-hooks.sh`**:commit 時若暫存 `core/*.md` 檔案則顯示 OUTDATED 警告,永不阻塞 commit。透過 `./scripts/install-hooks.sh` 啟用。
27
+ - **32 份 zh-TW 與 zh-CN 翻譯**(BUG-A06):所有核心標準現已有完整 zh-TW 和 zh-CN 翻譯,包含 `circuit-breaker`、`token-budget`、`dual-phase-output`、`failure-source-taxonomy`、`immutability-first`、`security-decision`、`capability-declaration`、`recovery-recipe-registry`、`retry-standards`、`health-check-standards`、`timeout-standards`、`skill-standard-alignment-check`、`standard-admission-criteria`、`standard-lifecycle-management`、`packaging-standards`、`frontend-design-standards`、`translation-lifecycle-standards` 等。
28
+ - **bats smoke tests**(BUG-A07):`tests/scripts/` — 20+ 個 Shell 腳本的 smoke tests,涵蓋 `check-translation-sync.sh`、`check-version-sync.sh`、`bump-version.sh`、`install-hooks.sh` 等。
29
+
30
+ ### 變更
31
+ - **`check-translation-sync.sh`**:Semver 感知嚴重度 — MAJOR 版本落差現在 exit 1(發布阻塞器);MINOR/PATCH 落差 exit 0 附 advisory 警告。新增 `semver_diff()` 函式與 `[MAJOR]`/`[MINOR]`/`[PATCH]` 嚴重度標籤。
32
+ - **`bump-version.sh`**:更新版本檔案後自動執行 `check-translation-sync.sh`,在升版時提供翻譯健康狀態快照。
33
+ - **`scripts/pre-release-check.sh`**:更新為將 `check-translation-sync.sh` 作為硬閘門(MISSING + MAJOR = exit 1)。
34
+
35
+ ### 修正
36
+ - **zh-CN `anti-hallucination.md`**(BUG-A06):從 1.5.0 更新至 1.5.1 — 補上缺失的「Agent 认识论校准」章節(Answer/Ask/Abstain 框架,XSPEC-008)。該章節自 2026-04-13 起在 zh-CN 中完全缺失。
37
+ - **22 個假通過測試**(BUG-A08):修正未正確驗證行為的測試,加入真實斷言。
38
+
39
+ ### 升至 Adopt(Pre-release Batch 0)
40
+ - `circuit-breaker`(DEC-021):Trial 6 個月後升至 Adopt
41
+ - `token-budget`(DEC-025):Trial 6 個月後升至 Adopt
42
+ - `dual-phase-output`(DEC-031):Trial 6 個月後升至 Adopt
43
+ - `security-decision`(DEC-035):Trial 6 個月後升至 Adopt
44
+ - `immutability-first`(DEC-038):Trial 6 個月後升至 Adopt
45
+ - `failure-source-taxonomy`(DEC-040):Trial 6 個月後升至 Adopt
46
+
47
+ [5.1.0]: https://github.com/AsiaOstrich/universal-dev-standards/compare/v5.1.0-beta.7...v5.1.0
48
+
20
49
  ## [5.1.0-beta.7] - 2026-04-17
21
50
 
22
51
  > **Beta Release**:DEC-043 Wave 1 — 六個 Trial 狀態標準,涵蓋可靠性模式與治理 Meta 框架。
@@ -6,7 +6,7 @@
6
6
 
7
7
  > **語言**: [English](../../README.md) | 繁體中文 | [简体中文](../zh-CN/README.md)
8
8
 
9
- **版本**: 5.1.0-beta.7 (Pre-release) | **發布日期**: 2026-04-13 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
9
+ **版本**: 5.1.0 | **發布日期**: 2026-04-13 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
10
10
 
11
11
  語言無關、框架無關的軟體專案文件標準。透過 AI 原生工作流,確保不同技術堆疊之間的一致性、品質和可維護性。
12
12
 
@@ -1,3 +1,11 @@
1
+ ---
2
+ source: ../../../core/anti-sycophancy-prompting.md
3
+ source_version: 1.0.0
4
+ translation_version: 1.0.0
5
+ last_synced: 2026-04-20
6
+ status: current
7
+ ---
8
+
1
9
  # 防迎合提示詞設計標準
2
10
 
3
11
  > **語言**: [English](../../../core/anti-sycophancy-prompting.md) | 繁體中文
@@ -0,0 +1,111 @@
1
+ ---
2
+ source: ../../../core/capability-declaration.md
3
+ source_version: 1.0.0
4
+ translation_version: 1.0.0
5
+ last_synced: 2026-04-20
6
+ status: current
7
+ ---
8
+
9
+ # 能力聲明標準
10
+
11
+ > **語言**: [English](../../../core/capability-declaration.md) | 繁體中文
12
+
13
+ **版本**: 1.0.0
14
+ **最後更新**: 2026-04-15
15
+ **適用範圍**: 所有工具、Adapter、Agent 組件
16
+ **Scope**: universal
17
+ **來源**: XSPEC-037(claude-code-book Ch.3 Fail-Closed buildTool factory)
18
+
19
+ ---
20
+
21
+ ## 目的
22
+
23
+ Fail-Closed 能力聲明:工具/Adapter/Agent 必須顯式聲明安全性,缺省為最保守預設。
24
+
25
+ 所有工具、Adapter 和 Agent 能力預設為「不安全、需授權」。開發者必須顯式聲明 `isConcurrencySafe: true` 才能享受並行優化。「忘記設權限」的結果是保守行為而非危險行為。
26
+
27
+ ---
28
+
29
+ ## 核心規範
30
+
31
+ - 所有工具、Adapter、Agent 必須實作 `CapabilityDeclaration`(即使使用預設值)
32
+ - `isConcurrencySafe` 和 `isReadOnly` 預設為 `false` — 必須顯式聲明才能解鎖優化路徑
33
+ - 框架必須在缺少聲明時使用 `FAIL_CLOSED_DEFAULTS`,並記錄警告
34
+ - 聲明必須反映實際能力,虛假聲明(如謊稱 `isReadOnly`)視為安全漏洞
35
+ - `trustLevel` 影響沙箱隔離強度,不可降低至低於 `userSettings` 允許的等級
36
+
37
+ ---
38
+
39
+ ## CapabilityDeclaration 介面
40
+
41
+ | 欄位 | 類型 | 預設值 | 說明 |
42
+ |------|------|--------|------|
43
+ | `isConcurrencySafe` | `boolean` | `false` | 是否對並行執行安全(無競態、無共享可變狀態)。設為 `true` 後可加入並行批次執行 |
44
+ | `isReadOnly` | `boolean` | `false` | 是否為純讀取操作(不修改任何持久化狀態)。設為 `true` 後可跳過寫入相關的 Safety Hook 階段 |
45
+ | `requiresUserConfirmation` | `boolean` | `true` | 執行前是否需要使用者明確確認。設為 `false` 後進入自動執行模式(需 `userSettings` 允許) |
46
+ | `trustLevel` | enum | `untrusted` | 工具的信任等級,影響沙箱隔離強度 |
47
+
48
+ ### trustLevel 值對應
49
+
50
+ | 值 | 說明 |
51
+ |----|------|
52
+ | `trusted` | 內建工具或已審核插件,無沙箱限制 |
53
+ | `sandboxed` | 第三方工具,在受限環境中執行 |
54
+ | `untrusted` | 未知來源,最嚴格限制(預設) |
55
+
56
+ ---
57
+
58
+ ## Fail-Closed 預設值
59
+
60
+ 缺少聲明時使用的保守預設:
61
+
62
+ | 欄位 | 值 |
63
+ |------|-----|
64
+ | `isConcurrencySafe` | `false` |
65
+ | `isReadOnly` | `false` |
66
+ | `requiresUserConfirmation` | `true` |
67
+ | `trustLevel` | `untrusted` |
68
+
69
+ 使用預設時記錄警告:`[WARN] Capability not declared, using Fail-Closed defaults for: {component_name}`
70
+
71
+ ---
72
+
73
+ ## 常見工具聲明範例
74
+
75
+ | 工具 | `isConcurrencySafe` | `isReadOnly` | `requiresUserConfirmation` | `trustLevel` |
76
+ |------|--------------------|--------------|-----------------------------|-------------|
77
+ | GrepTool | `true` | `true` | `false` | `trusted` |
78
+ | GlobTool | `true` | `true` | `false` | `trusted` |
79
+ | FileReadTool | `true` | `true` | `false` | `trusted` |
80
+ | FileEditTool | `false` | `false` | `true` | `trusted` |
81
+ | BashTool | `false` | `false` | `true` | `sandboxed` |
82
+
83
+ ---
84
+
85
+ ## 執行規範
86
+
87
+ | 情況 | 行動 |
88
+ |------|------|
89
+ | 缺少聲明 | 使用 `FAIL_CLOSED_DEFAULTS`,記錄警告 |
90
+ | 虛假聲明(聲明 `isReadOnly: true` 但實際執行了寫入) | 記錄 `CAPABILITY_MISMATCH` 事件,降級至 `FAIL_CLOSED_DEFAULTS` |
91
+
92
+ ---
93
+
94
+ ## 適用組件
95
+
96
+ - DevAP AgentAdapter(ClaudeAdapter / OpenCodeAdapter / CliAdapter)
97
+ - DevAP Tool 呼叫系統
98
+ - VibeOps ToolExecutor
99
+ - VibeOps Agent(planner / builder / evaluator 等)
100
+ - 所有 MCP 工具插件
101
+
102
+ ---
103
+
104
+ ## 錯誤碼
105
+
106
+ | 代碼 | 說明 |
107
+ |------|------|
108
+ | `CAP-001` | `CAPABILITY_NOT_DECLARED` — 使用 Fail-Closed 預設 |
109
+ | `CAP-002` | `CAPABILITY_MISMATCH` — 實際行為與聲明不符 |
110
+ | `CAP-003` | `TRUST_LEVEL_INSUFFICIENT` — `trustLevel` 低於場景要求 |
111
+ | `CAP-004` | `CONCURRENT_UNSAFE` — 嘗試並行執行 `isConcurrencySafe: false` 的組件 |
@@ -0,0 +1,111 @@
1
+ ---
2
+ source: ../../../core/circuit-breaker.md
3
+ source_version: 1.0.0
4
+ translation_version: 1.0.0
5
+ last_synced: 2026-04-20
6
+ status: current
7
+ ---
8
+
9
+ # 斷路器標準
10
+
11
+ > **語言**: [English](../../../core/circuit-breaker.md) | 繁體中文
12
+
13
+ **版本**: 1.0.0
14
+ **最後更新**: 2026-04-15
15
+ **適用範圍**: 所有依賴外部 API 或具備重試機制的 Agent 組件
16
+ **Scope**: universal
17
+ **來源**: XSPEC-036(claude-code-book Ch.2 MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES)
18
+
19
+ ---
20
+
21
+ ## 目的
22
+
23
+ 通用斷路器模式:連續失敗後開路,防止 API 呼叫雪崩。
24
+
25
+ 任何依賴外部 API 或重試機制的 Agent 組件都應使用斷路器保護。實測:引入斷路器前每日浪費約 250K API 呼叫(1279 個 session 各超過 50 次連續失敗)。
26
+
27
+ ---
28
+
29
+ ## 核心規範
30
+
31
+ - 任何重試機制必須使用斷路器包裝,不得直接無限重試
32
+ - 斷路器狀態必須透過遙測可觀測(`circuit_breaker_state_change` 事件)
33
+ - OPEN 狀態下的請求必須立即失敗(fail fast),不等待 timeout
34
+ - `failureThreshold` 預設值為 3,與 claude-code-book 及 DevAP Fix Loop 一致
35
+ - 斷路器必須按照「功能單元」建立,不得全域共享單一斷路器
36
+
37
+ ---
38
+
39
+ ## 三態模型
40
+
41
+ | 狀態 | 描述 | 轉換條件 |
42
+ |------|------|----------|
43
+ | **CLOSED**(閉路) | 正常運作,請求正常轉發 | 連續失敗次數 >= `failureThreshold` → OPEN |
44
+ | **OPEN**(開路) | 立即拒絕所有請求,回傳 `CircuitOpenError` | 等待 `cooldownMs` 後 → HALF_OPEN |
45
+ | **HALF_OPEN**(半開) | 允許一次探針呼叫 | 成功 → CLOSED;失敗 → OPEN |
46
+
47
+ ---
48
+
49
+ ## 介面定義
50
+
51
+ ### CircuitBreaker
52
+
53
+ | 欄位/方法 | 類型 | 說明 |
54
+ |-----------|------|------|
55
+ | `name` | `string` | 斷路器識別名稱 |
56
+ | `state` | `CLOSED \| HALF_OPEN \| OPEN` | 目前狀態 |
57
+ | `execute<T>(fn)` | `async () => Promise<T>` | 受保護的執行入口 |
58
+ | `getState()` | `() => CircuitBreakerState` | 查詢目前狀態 |
59
+ | `reset()` | `() => void` | 手動重設(管理員用) |
60
+
61
+ ### CircuitBreakerConfig
62
+
63
+ | 欄位 | 類型 | 預設值 | 說明 |
64
+ |------|------|--------|------|
65
+ | `failureThreshold` | `number` | `3` | 連續失敗 N 次後開路 |
66
+ | `cooldownMs` | `number` | `30000` | OPEN → HALF_OPEN 等待時間(毫秒) |
67
+ | `successThreshold` | `number` | `1` | HALF_OPEN → CLOSED 需要的連續成功次數 |
68
+
69
+ ### CircuitOpenError
70
+
71
+ | 欄位 | 類型 |
72
+ |------|------|
73
+ | `code` | `"CIRCUIT_OPEN"` |
74
+ | `breakerName` | `string` |
75
+ | `state` | `"OPEN"` |
76
+ | `cooldownRemainingMs` | `number` |
77
+
78
+ ---
79
+
80
+ ## 遙測事件
81
+
82
+ **`circuit_breaker_state_change`**(每次狀態轉換時上傳)
83
+
84
+ | 欄位 | 類型 |
85
+ |------|------|
86
+ | `breaker_name` | `string` |
87
+ | `from_state` | `CLOSED \| HALF_OPEN \| OPEN` |
88
+ | `to_state` | `CLOSED \| HALF_OPEN \| OPEN` |
89
+ | `failure_count` | `number` |
90
+ | `timestamp` | `string` |
91
+
92
+ ---
93
+
94
+ ## 適用場景
95
+
96
+ - DevAP Fix Loop Agent 呼叫重試
97
+ - DevAP Judge / Quality Gate 重試
98
+ - DevAP API 呼叫(LLM API 不穩定保護)
99
+ - VibeOps Feedback Loop 重試
100
+ - VibeOps FLARE 主動檢索重試
101
+ - VibeOps AutoCompact(原始靈感來源)
102
+
103
+ ---
104
+
105
+ ## 錯誤碼
106
+
107
+ | 代碼 | 說明 |
108
+ |------|------|
109
+ | `CB-001` | `CIRCUIT_OPEN` — 斷路器開路,請求被拒絕 |
110
+ | `CB-002` | `PROBE_FAILED` — HALF_OPEN 探針失敗,重新開路 |
111
+ | `CB-003` | `INVALID_CONFIG` — `failureThreshold` 必須 >= 1 |
@@ -0,0 +1,132 @@
1
+ ---
2
+ source: ../../../core/dual-phase-output.md
3
+ source_version: 1.0.0
4
+ translation_version: 1.0.0
5
+ last_synced: 2026-04-20
6
+ status: current
7
+ ---
8
+
9
+ # 雙階段 LLM 輸出標準
10
+
11
+ > **語言**: [English](../../../core/dual-phase-output.md) | 繁體中文
12
+
13
+ **版本**: 1.0.0
14
+ **最後更新**: 2026-04-15
15
+ **適用範圍**: 所有需要 LLM 審查的場景(Judge、Evaluator、Guardian、AutoCompact)
16
+ **Scope**: universal
17
+ **來源**: XSPEC-035(claude-code-book Ch.7 formatCompactSummary dual-phase output)
18
+
19
+ ---
20
+
21
+ ## 目的
22
+
23
+ 雙階段 LLM 輸出模式:`<analysis>` 思考丟棄,`<summary>` 結構化保留。
24
+
25
+ 讓 LLM 充分推理的同時,避免思考過程累積在上下文中消耗 token 預算。
26
+
27
+ ---
28
+
29
+ ## 核心規範
30
+
31
+ - 所有 LLM 審查 Agent 必須要求雙階段輸出格式(`<analysis>` + `<summary>`)
32
+ - `<analysis>` 在後處理時必須丟棄,不得寫入持久化上下文或對話歷史
33
+ - `<summary>` 必須包含結構化結論欄位(`decision`、`confidence`、`findings`、`next_action`)
34
+ - 若回應缺少雙階段格式,後處理器必須降級相容(完整回應視為 summary)並記錄警告
35
+ - `summary` 欄位命名需遵循本標準,各應用場景可擴充但不可刪減核心欄位
36
+
37
+ ---
38
+
39
+ ## 輸出格式
40
+
41
+ ### `<analysis>` 標籤
42
+
43
+ - **用途**:LLM 思考草稿 — 後處理時丟棄
44
+ - **內容指引**:
45
+ - 逐條審查邏輯
46
+ - 邊界情境考量
47
+ - 替代方案比較
48
+
49
+ ### `<summary>` 標籤
50
+
51
+ - **用途**:結構化結論 — 後處理時保留
52
+
53
+ **核心欄位**(必填):
54
+
55
+ | 欄位 | 類型 | 值 |
56
+ |------|------|-----|
57
+ | `decision` | enum | `approved \| rejected \| needs_revision` |
58
+ | `confidence` | enum | `high \| medium \| low` |
59
+ | `findings` | array | `[type] description` 格式 |
60
+ | `next_action` | string | 建議的後續行動 |
61
+
62
+ **擴充欄位**(依場景新增,不可刪減核心欄位):
63
+
64
+ | 場景 | 額外欄位範例 |
65
+ |------|------------|
66
+ | 安全審查 | `severity: critical \| high \| medium \| low`, `cwe_ids: [CWE-NNN]` |
67
+ | 品質審查 | `test_coverage: number`, `tech_debt_score: number` |
68
+
69
+ ---
70
+
71
+ ## Prompt 模板
72
+
73
+ ```
74
+ You MUST respond using EXACTLY this two-phase XML structure:
75
+
76
+ <analysis>
77
+ [Your reasoning process — will be DISCARDED after processing]
78
+ - Step-by-step evaluation
79
+ - Edge case considerations
80
+ - Alternative comparisons
81
+ </analysis>
82
+
83
+ <summary>
84
+ decision: approved | rejected | needs_revision
85
+ confidence: high | medium | low
86
+ findings:
87
+ - [type] description
88
+ next_action: [recommended follow-up action]
89
+ </summary>
90
+
91
+ IMPORTANT: The <analysis> block is your scratchpad. Only <summary> persists.
92
+ ```
93
+
94
+ ---
95
+
96
+ ## 後處理規則
97
+
98
+ | 步驟 | 動作 |
99
+ |------|------|
100
+ | 提取 summary | 用正則 `<summary>([\s\S]*?)</summary>` 擷取 |
101
+ | 丟棄 analysis | 用正則 `<analysis>([\s\S]*?)</analysis>` 移除 |
102
+ | 降級相容 | 若缺少 `<summary>` 標籤,完整回應視為 summary 內容,記錄 `warn` 日誌 |
103
+
104
+ ---
105
+
106
+ ## Token 節省估算
107
+
108
+ | 指標 | 數值 |
109
+ |------|------|
110
+ | `<analysis>` 佔一般審查回應比例 | 50–70% |
111
+ | 每次審查節省 token | 1,000–3,500 |
112
+ | Fix Loop 3 輪累計節省 | 3,000–10,500 |
113
+ | 備註 | 節省效果在重複審查場景(Fix Loop、Feedback Loop)中累積 |
114
+
115
+ ---
116
+
117
+ ## 適用 Agent
118
+
119
+ - DevAP Judge Agent
120
+ - VibeOps Evaluator Agent
121
+ - VibeOps Guardian Agent
122
+ - 任何 LLM 驅動的 AutoCompact/摘要組件
123
+
124
+ ---
125
+
126
+ ## 錯誤碼
127
+
128
+ | 代碼 | 說明 |
129
+ |------|------|
130
+ | `DPO-001` | `summary` 標籤缺失 — 降級相容已啟用 |
131
+ | `DPO-002` | `analysis` 標籤缺失 — 完整回應照常處理 |
132
+ | `DPO-003` | `summary` 必填欄位缺失 — 解析錯誤 |