universal-dev-standards 5.1.0-beta.6 → 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.
- package/README.md +6 -0
- package/bin/uds.js +14 -0
- package/bundled/ai/standards/agent-communication-protocol.ai.yaml +34 -0
- package/bundled/ai/standards/anti-sycophancy-prompting.ai.yaml +111 -0
- package/bundled/ai/standards/capability-declaration.ai.yaml +113 -0
- package/bundled/ai/standards/circuit-breaker.ai.yaml +93 -0
- package/bundled/ai/standards/developer-memory.ai.yaml +13 -0
- package/bundled/ai/standards/dual-phase-output.ai.yaml +108 -0
- package/bundled/ai/standards/failure-source-taxonomy.ai.yaml +115 -0
- package/bundled/ai/standards/frontend-design-standards.ai.yaml +305 -0
- package/bundled/ai/standards/health-check-standards.ai.yaml +140 -0
- package/bundled/ai/standards/immutability-first.ai.yaml +112 -0
- package/bundled/ai/standards/model-selection.ai.yaml +111 -3
- package/bundled/ai/standards/packaging-standards.ai.yaml +142 -0
- package/bundled/ai/standards/recovery-recipe-registry.ai.yaml +200 -0
- package/bundled/ai/standards/retry-standards.ai.yaml +134 -0
- package/bundled/ai/standards/security-decision.ai.yaml +87 -0
- package/bundled/ai/standards/skill-standard-alignment-check.ai.yaml +119 -0
- package/bundled/ai/standards/standard-admission-criteria.ai.yaml +107 -0
- package/bundled/ai/standards/standard-lifecycle-management.ai.yaml +144 -0
- package/bundled/ai/standards/timeout-standards.ai.yaml +104 -0
- package/bundled/ai/standards/token-budget.ai.yaml +108 -0
- package/bundled/ai/standards/translation-lifecycle-standards.ai.yaml +145 -0
- package/bundled/core/anti-sycophancy-prompting.md +184 -0
- package/bundled/core/capability-declaration.md +59 -0
- package/bundled/core/circuit-breaker.md +58 -0
- package/bundled/core/developer-memory.md +29 -1
- package/bundled/core/dual-phase-output.md +56 -0
- package/bundled/core/failure-source-taxonomy.md +72 -0
- package/bundled/core/frontend-design-standards.md +474 -0
- package/bundled/core/health-check-standards.md +72 -0
- package/bundled/core/immutability-first.md +105 -0
- package/bundled/core/model-selection.md +80 -0
- package/bundled/core/packaging-standards.md +216 -0
- package/bundled/core/recovery-recipe-registry.md +69 -0
- package/bundled/core/retry-standards.md +62 -0
- package/bundled/core/security-decision.md +65 -0
- package/bundled/core/skill-standard-alignment-check.md +79 -0
- package/bundled/core/standard-admission-criteria.md +84 -0
- package/bundled/core/standard-lifecycle-management.md +94 -0
- package/bundled/core/timeout-standards.md +63 -0
- package/bundled/core/token-budget.md +58 -0
- package/bundled/core/translation-lifecycle-standards.md +162 -0
- package/bundled/locales/zh-CN/CHANGELOG.md +51 -3
- package/bundled/locales/zh-CN/README.md +1 -1
- package/bundled/locales/zh-CN/core/anti-hallucination.md +22 -3
- package/bundled/locales/zh-CN/core/anti-sycophancy-prompting.md +192 -0
- package/bundled/locales/zh-CN/core/capability-declaration.md +123 -0
- package/bundled/locales/zh-CN/core/circuit-breaker.md +106 -0
- package/bundled/locales/zh-CN/core/dual-phase-output.md +103 -0
- package/bundled/locales/zh-CN/core/failure-source-taxonomy.md +99 -0
- package/bundled/locales/zh-CN/core/frontend-design-standards.md +289 -0
- package/bundled/locales/zh-CN/core/health-check-standards.md +144 -0
- package/bundled/locales/zh-CN/core/immutability-first.md +96 -0
- package/bundled/locales/zh-CN/core/packaging-standards.md +224 -0
- package/bundled/locales/zh-CN/core/recovery-recipe-registry.md +146 -0
- package/bundled/locales/zh-CN/core/retry-standards.md +131 -0
- package/bundled/locales/zh-CN/core/security-decision.md +104 -0
- package/bundled/locales/zh-CN/core/skill-standard-alignment-check.md +112 -0
- package/bundled/locales/zh-CN/core/standard-admission-criteria.md +104 -0
- package/bundled/locales/zh-CN/core/standard-lifecycle-management.md +116 -0
- package/bundled/locales/zh-CN/core/timeout-standards.md +117 -0
- package/bundled/locales/zh-CN/core/token-budget.md +108 -0
- package/bundled/locales/zh-CN/core/translation-lifecycle-standards.md +159 -0
- package/bundled/locales/zh-TW/CHANGELOG.md +51 -3
- package/bundled/locales/zh-TW/README.md +1 -1
- package/bundled/locales/zh-TW/core/anti-sycophancy-prompting.md +192 -0
- package/bundled/locales/zh-TW/core/capability-declaration.md +111 -0
- package/bundled/locales/zh-TW/core/circuit-breaker.md +111 -0
- package/bundled/locales/zh-TW/core/dual-phase-output.md +132 -0
- package/bundled/locales/zh-TW/core/failure-source-taxonomy.md +146 -0
- package/bundled/locales/zh-TW/core/frontend-design-standards.md +460 -0
- package/bundled/locales/zh-TW/core/health-check-standards.md +144 -0
- package/bundled/locales/zh-TW/core/immutability-first.md +159 -0
- package/bundled/locales/zh-TW/core/packaging-standards.md +224 -0
- package/bundled/locales/zh-TW/core/recovery-recipe-registry.md +146 -0
- package/bundled/locales/zh-TW/core/retry-standards.md +140 -0
- package/bundled/locales/zh-TW/core/security-decision.md +120 -0
- package/bundled/locales/zh-TW/core/skill-standard-alignment-check.md +112 -0
- package/bundled/locales/zh-TW/core/standard-admission-criteria.md +104 -0
- package/bundled/locales/zh-TW/core/standard-lifecycle-management.md +116 -0
- package/bundled/locales/zh-TW/core/timeout-standards.md +117 -0
- package/bundled/locales/zh-TW/core/token-budget.md +143 -0
- package/bundled/locales/zh-TW/core/translation-lifecycle-standards.md +159 -0
- package/bundled/skills/e2e-assistant/SKILL.md +19 -5
- package/bundled/skills/testing-guide/SKILL.md +5 -0
- package/bundled/skills/testing-guide/test-skeleton-templates.md +316 -0
- package/package.json +2 -1
- package/src/commands/check.js +6 -0
- package/src/commands/config.js +9 -0
- package/src/commands/init.js +97 -46
- package/src/commands/mcp.js +26 -0
- package/src/commands/run-intent.js +66 -0
- package/src/commands/update.js +41 -4
- package/src/core/command-router.js +85 -0
- package/src/core/project-config.js +91 -0
- package/src/flows/init-flow.js +6 -1
- package/src/i18n/messages.js +6 -6
- package/src/mcp/__tests__/server.test.js +251 -0
- package/src/mcp/server.js +352 -0
- package/src/prompts/init.js +157 -1
- package/src/reconciler/actual-state-scanner.js +24 -0
- package/src/uninstallers/hook-uninstaller.js +32 -1
- package/src/utils/detect-self-adoption.js +173 -0
- package/src/utils/e2e-analyzer.js +88 -5
- package/src/utils/e2e-detector.js +73 -1
- package/src/utils/integration-generator.js +22 -3
- package/standards-registry.json +203 -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
|
|
4
|
-
translation_version: 5.1.0
|
|
5
|
-
last_synced: 2026-04-
|
|
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,54 @@ 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
|
+
|
|
49
|
+
## [5.1.0-beta.7] - 2026-04-17
|
|
50
|
+
|
|
51
|
+
> **Beta Release**:DEC-043 Wave 1 — 六個 Trial 狀態標準,涵蓋可靠性模式與治理 Meta 框架。
|
|
52
|
+
|
|
53
|
+
### 新增
|
|
54
|
+
- **Reliability 包(XSPEC-067)**:三個 Trial 狀態的韌性模式標準。
|
|
55
|
+
- `retry-standards`:重試策略(指數退避、Jitter、冪等性保護)。
|
|
56
|
+
- `timeout-standards`:分層 timeout 預算(call / request / end-to-end)與傳遞規則。
|
|
57
|
+
- `health-check-standards`:Liveness / Readiness / Startup probe 語義。
|
|
58
|
+
- **治理 Meta 包(XSPEC-070,Wave 1 前置)**:三個定義「標準如何被納入、管理、與 Skill 對齊」的 Trial 標準。
|
|
59
|
+
- `standard-admission-criteria`:新標準提案的入場門檻。
|
|
60
|
+
- `standard-lifecycle-management`:Trial → Stable → Deprecated → Archived 狀態流轉。
|
|
61
|
+
- `skill-standard-alignment-check`:Skill 與其引用標準之間的對齊稽核。
|
|
62
|
+
- 六份標準皆遵循 UDS 三方同步要求:`.ai.yaml`(機器)+ `.md`(人類)+ `cli/standards-registry.json` entry(+66 行)。
|
|
63
|
+
|
|
64
|
+
### 背景
|
|
65
|
+
- 由 **DEC-043**(UDS 覆蓋完整性路線圖)驅動。治理 Meta 包為 Wave 1 前置條件,解鎖 Wave 2–4(八個主題標準包:SRE / CI-CD / IaC / 合規 / Reliability / 資料工程 / 產品 / 治理 — XSPEC-063~070)。
|
|
66
|
+
- PR:#77
|
|
67
|
+
|
|
20
68
|
## [5.1.0-beta.6] - 2026-04-13
|
|
21
69
|
|
|
22
70
|
> **Beta 版本**:修復 `uds init` 當機問題、E2E 測試隔離問題,以及 macOS 顯示語言偵測失效問題。
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
> **語言**: [English](../../README.md) | 繁體中文 | [简体中文](../zh-CN/README.md)
|
|
8
8
|
|
|
9
|
-
**版本**: 5.1.0
|
|
9
|
+
**版本**: 5.1.0 | **發布日期**: 2026-04-13 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
|
|
10
10
|
|
|
11
11
|
語言無關、框架無關的軟體專案文件標準。透過 AI 原生工作流,確保不同技術堆疊之間的一致性、品質和可維護性。
|
|
12
12
|
|
|
@@ -0,0 +1,192 @@
|
|
|
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
|
+
|
|
9
|
+
# 防迎合提示詞設計標準
|
|
10
|
+
|
|
11
|
+
> **語言**: [English](../../../core/anti-sycophancy-prompting.md) | 繁體中文
|
|
12
|
+
|
|
13
|
+
**版本**: 1.0.0
|
|
14
|
+
**最後更新**: 2026-04-15
|
|
15
|
+
**適用範圍**: 所有 AI Agent 實作與 LLM Prompt 設計
|
|
16
|
+
**Scope**: universal
|
|
17
|
+
**業界標準**: 無(UDS 原創,參考 RLHF 迎合性研究)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 目的
|
|
22
|
+
|
|
23
|
+
本標準定義一套技法與規則,用於設計能讓 LLM 給出真實、批判性回應的提示詞,而非迎合使用者的隱含偏好。
|
|
24
|
+
|
|
25
|
+
LLM 的迎合性源自 RLHF 訓練目標:人類評分者傾向於給予令人愉快的回應高分,導致模型將「讓使用者滿意」置於「準確性」之上。
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 核心技法
|
|
30
|
+
|
|
31
|
+
### 1. Socratic 反詰框架(REQ-1)
|
|
32
|
+
|
|
33
|
+
將任務從「評估我的想法」改為「攻擊我的想法」,消除迎合誘因。
|
|
34
|
+
|
|
35
|
+
| 應該做 | 不應該做 |
|
|
36
|
+
|--------|----------|
|
|
37
|
+
| ✅ 要求列出最致命的 3 個質疑 | ❌ 問「這個想法好嗎?」 |
|
|
38
|
+
| ✅ 每個質疑必須有技術依據 | ❌ 允許模糊的正向框架 |
|
|
39
|
+
| ✅ 明確禁止正向開場詞語 | ❌ 接受「很好的想法,但是...」模式 |
|
|
40
|
+
|
|
41
|
+
**Prompt 模板**:
|
|
42
|
+
```
|
|
43
|
+
不要評估好壞。
|
|
44
|
+
針對以下想法,列出最致命的 3 個質疑:[你的想法]
|
|
45
|
+
每個質疑必須有技術依據,且讓我無法輕易反駁。
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
### 2. 先問立場防錨定協議(REQ-2)
|
|
51
|
+
|
|
52
|
+
在使用者揭示立場前先取得 LLM 的獨立判斷,防止錨定效應。
|
|
53
|
+
|
|
54
|
+
| 步驟 | 動作 |
|
|
55
|
+
|------|------|
|
|
56
|
+
| 1 | 在未揭示偏好的情況下詢問中立比較 |
|
|
57
|
+
| 2 | 取得獨立判斷 |
|
|
58
|
+
| 3 | 揭示使用者立場 |
|
|
59
|
+
| 4 | 若模型改變立場,要求提出明確的技術理由 |
|
|
60
|
+
|
|
61
|
+
**工作流程**:
|
|
62
|
+
```
|
|
63
|
+
回合 1:「針對 [情境],[A] 和 [B] 哪個更好?」
|
|
64
|
+
→ 等待獨立判斷
|
|
65
|
+
|
|
66
|
+
回合 2:「我傾向 [A]。這改變你的評估嗎?為什麼?」
|
|
67
|
+
→ 模型若改口必須以技術事實為依據
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### 3. 強制雙欄對稱輸出(REQ-3)
|
|
73
|
+
|
|
74
|
+
用格式約束強迫呈現對立觀點的平衡。
|
|
75
|
+
|
|
76
|
+
**必要格式**:
|
|
77
|
+
```
|
|
78
|
+
| 支持這個決策的論點 | 反對這個決策的論點 |
|
|
79
|
+
|-------------------|-------------------|
|
|
80
|
+
| [同等份量的內容] | [同等份量的內容] |
|
|
81
|
+
|
|
82
|
+
淨建議:[必須明確表態,可以是「建議反對」]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**規則**:
|
|
86
|
+
- 兩欄字數差距不超過 20%
|
|
87
|
+
- 淨建議必須明確,可以是否定的
|
|
88
|
+
- 模型不得藉由填充一欄來規避格式
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### 4. 信心度與不確定性標記(REQ-4)
|
|
93
|
+
|
|
94
|
+
要求在所有建議上附加信心評分,呈現不確定性。
|
|
95
|
+
|
|
96
|
+
**格式**:
|
|
97
|
+
```
|
|
98
|
+
建議:[具體行動]
|
|
99
|
+
信心:[1-5] — [不確定性原因]
|
|
100
|
+
未知:[哪些資訊會改變這個評估]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**信心度定義**:
|
|
104
|
+
|
|
105
|
+
| 等級 | 意義 |
|
|
106
|
+
|------|------|
|
|
107
|
+
| 5 | 已在類似規模驗證,高確定性 |
|
|
108
|
+
| 4 | 業界標準,有充分文獻支持 |
|
|
109
|
+
| 3 | 合理推斷,建議 PoC 驗證 |
|
|
110
|
+
| 2 | 不確定,強烈建議先進行 Spike |
|
|
111
|
+
| 1 | 高度不確定,不建議直接採用 |
|
|
112
|
+
|
|
113
|
+
**規則**:
|
|
114
|
+
- 信心 < 3 必須標示「需要更多資訊才能確認」
|
|
115
|
+
- 所有重要主張都需要信心標記
|
|
116
|
+
- 不確定性必須具體(說明哪些資訊可以解決不確定性)
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### 5. 迎合性回應啟發式偵測(REQ-5)
|
|
121
|
+
|
|
122
|
+
用於偵測迎合性回應的啟發式規則,可用於自動化後處理。
|
|
123
|
+
|
|
124
|
+
| 信號類型 | 偵測規則 |
|
|
125
|
+
|----------|----------|
|
|
126
|
+
| 正向開場 | 回應前 50 個 token 包含迎合性詞語(如「很好」「有趣」「當然」「當然可以」) |
|
|
127
|
+
| 立場翻轉 | 使用者揭示偏好後,模型在沒有新技術證據的情況下改變立場 |
|
|
128
|
+
| 風險淡化 | 句式:「雖然有些小問題,但整體上...」而未說明具體問題 |
|
|
129
|
+
| 缺乏量化 | 重要建議缺少信心評分或具體度量指標 |
|
|
130
|
+
|
|
131
|
+
**觸發條件**:偵測到 2 個以上信號 → 以 Red Team 框架觸發再評估。
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 禁止行為
|
|
136
|
+
|
|
137
|
+
| 禁止 | 正確做法 |
|
|
138
|
+
|------|----------|
|
|
139
|
+
| 以正向肯定開場批評 | 直接從分析開始 |
|
|
140
|
+
| 在無新技術證據的情況下改變立場 | 維持立場,或引用具體的新資訊 |
|
|
141
|
+
| 在無依據的情況下將風險描述為「小問題」 | 量化風險或解釋為何風險有界 |
|
|
142
|
+
| 提供重要建議卻不附信心評分 | 始終附上信心(1-5)與不確定性說明 |
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## 與 Agent Prompt 的整合
|
|
147
|
+
|
|
148
|
+
套用至 AI Agent 時:
|
|
149
|
+
|
|
150
|
+
| Agent 類型 | 套用規則 |
|
|
151
|
+
|------------|----------|
|
|
152
|
+
| 程式碼審查 Agent | REQ-1(Socratic)+ REQ-3(雙欄)+ REQ-5(偵測) |
|
|
153
|
+
| 架構建議 Agent | REQ-2(先問立場)+ REQ-4(信心度)+ REQ-5(偵測) |
|
|
154
|
+
| Bug 分析 Agent | REQ-1(Socratic)+ REQ-4(信心度) |
|
|
155
|
+
| 一般諮詢 Agent | REQ-3(雙欄)+ REQ-4(信心度) |
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 完整防迎合 Prompt 模板
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
你是一位對我毫無感情的領域專家。
|
|
163
|
+
你的職責是找出我思考中的盲點,不是讓我感覺良好。
|
|
164
|
+
|
|
165
|
+
規則:
|
|
166
|
+
- 禁止以正向詞語開場(很好、有趣、不錯、當然)
|
|
167
|
+
- 每個建議必須附上信心等級(1-5)和你不確定的地方
|
|
168
|
+
- 若你認為我的方向是錯的,直接說
|
|
169
|
+
|
|
170
|
+
我的問題:[問題]
|
|
171
|
+
|
|
172
|
+
請先列出這個問題中我可能持有的錯誤假設,
|
|
173
|
+
再給出你認為正確的建議。
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 檢查清單
|
|
179
|
+
|
|
180
|
+
- [ ] 提示詞未邀請認同(「這樣好嗎?」)
|
|
181
|
+
- [ ] 明確禁止正向開場詞語
|
|
182
|
+
- [ ] 在揭示使用者偏好前先取得模型的獨立立場(若適用)
|
|
183
|
+
- [ ] 評估任務強制使用雙欄格式
|
|
184
|
+
- [ ] 重要建議需要信心等級
|
|
185
|
+
- [ ] 對輸出套用迎合性偵測,再呈現給使用者
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 相關標準
|
|
190
|
+
|
|
191
|
+
- [anti-hallucination.md](../../../core/anti-hallucination.md) — 防止幻覺;與防迎合互補
|
|
192
|
+
- [agent-epistemic-calibration.md](../../../core/agent-epistemic-calibration.md) — Agent 設計中的認知謙遜(若適用)
|
|
@@ -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 |
|