universal-dev-standards 6.12.0 → 6.13.0-beta.1

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.
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  source: ../../../docs/CLI-INIT-OPTIONS.md
3
- source_version: 3.5.2
4
- translation_version: 3.5.2
5
- last_synced: 2026-09-18
3
+ source_version: 3.6.0
4
+ translation_version: 3.6.0
5
+ last_synced: 2026-09-25
6
6
  status: current
7
7
  ---
8
8
 
@@ -10,8 +10,8 @@ status: current
10
10
 
11
11
  > **语言**: [English](../../../docs/CLI-INIT-OPTIONS.md) | [简体中文](../../zh-TW/docs/CLI-INIT-OPTIONS.md) | 简体中文
12
12
  >
13
- > **版本**: 3.5.2
14
- > **最后更新**: 2026-09-18
13
+ > **版本**: 3.6.0
14
+ > **最后更新**: 2026-09-25
15
15
 
16
16
  本文档详细说明 `uds init` 命令的每一个选项,包含使用情境、影响范围和建议选择。
17
17
 
@@ -838,6 +838,25 @@ uds init --experimental
838
838
  | Claude Code 目标文件 | `--claude-target` | Claude Code 集成内容要写到哪里:`project`(`CLAUDE.md`,默认)或 `local`(`CLAUDE.local.md`) |
839
839
  | 模式(已弃用) | `-m, --mode` | 安装模式(skills, full)- 请改用 `--skills-location` |
840
840
 
841
+ ### Claude Code 以外的强制执行 Hooks
842
+
843
+ `--with-hooks` 一定会安装进 `.claude/settings.json`。四个有 hook 支持的标准
844
+ 之一——`turn-completion-integrity`(见 CHANGELOG,Unreleased)——也会装进
845
+ **Codex** 与 **Gemini CLI**,门槛是你有没有在 [AI 工具选择](#1-ai-工具选择)
846
+ 里选了那个工具(或用非交互模式的工具标志带入):
847
+
848
+ | 工具 | 写入的配置文件 | 触发条件 |
849
+ |------|---------------|---------|
850
+ | Codex | `.codex/hooks.json` | 选了 **OpenAI Codex** |
851
+ | Gemini CLI | `.gemini/settings.json` | 选了 **Gemini CLI** |
852
+
853
+ 没选的工具不会写入任何东西——`uds init` 不会在没用到 Codex 或 Gemini CLI
854
+ 的项目里创建 `.codex/` 或 `.gemini/` 目录。其余三个有 hook 支持的标准
855
+ (commit message 校验、logging、security)目前仍只支持 Claude Code;
856
+ 为什么目前只推广 turn-completion-integrity,以及 Cursor 的现状
857
+ (已评估、不支持),见
858
+ [支持的执行环境](../../../core/turn-completion-integrity.md#supported-harnesses)。
859
+
841
860
  ### Claude Code 集成目标文件(`--claude-target`)
842
861
 
843
862
  UDS 默认把 Claude Code 内容写进 `CLAUDE.md`——团队共用、会进版本控制的那个文件。
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  source: ../../CHANGELOG.md
3
- source_version: 6.12.0
4
- translation_version: 6.12.0
5
- last_synced: 2026-09-24
3
+ source_version: 6.13.0-beta.1
4
+ translation_version: 6.13.0-beta.1
5
+ last_synced: 2026-09-25
6
6
  status: current
7
7
  ---
8
8
 
@@ -17,6 +17,20 @@ status: current
17
17
 
18
18
  ## [Unreleased]
19
19
 
20
+ ## [6.13.0-beta.1] - 2026-09-26
21
+
22
+ > **測試版** — 以 `npm install -g universal-dev-standards@beta` 安裝。要測什麼、已知限制、如何退回正式版:見 [docs/PRE-RELEASE.md](../../docs/PRE-RELEASE.md)。已知限制:`uds uninstall` 尚不會移除 Codex/Gemini CLI 設定裡的關卡。
23
+
24
+ ### 新增
25
+
26
+ - **`turn-completion-integrity` 1.4.0 把 Stop 關卡推廣到 Codex 與 Gemini CLI,與既有的 Claude Code 轉接層並存。** 判斷邏輯(語料包、冷卻、滾動視窗、自我回音標記)抽到共用的 `turn-completion/engine.mjs`,三支工具腳本各自只轉譯自己工具的契約,不再各帶一份判斷邏輯。Codex(`.codex/hooks.json`,Stop 事件)直接從 stdin 讀 `last_assistant_message`,在 exit 0 時於 stdout 印 `{"decision":"block","reason":...}` 來擋下——官方文件寫明這個事件純文字或空輸出無效,這點與 Claude Code 的「沉默即放行」不同;使用者的最後一則訊息用 `transcript_path` 盡力讀取,因為其確切格式未對照真實安裝驗證過,所以 R9(豁免使用者主動喊停的回合)在 Codex 上是文件記載的已知落差,不是靜默失效。Gemini CLI(`.gemini/settings.json`,`AfterAgent` 事件)的 stdin 直接給 `prompt` 與 `prompt_response`,完全不需要解析逐字稿,擋下方式是 `{"decision":"deny","reason":...}`——官方文件標記為優先於 exit code 2 的做法。`uds init --with-hooks` 現在也會呼叫 `installCodexHooks`/`installGeminiHooks`,門檻是採用者有沒有選那個工具,沒用到 Codex 或 Gemini CLI 的專案不會被寫入任何東西。Cursor 已評估,明確標記為不支援(Cursor 的 stop hook 能不能真的擋下一個回合仍未確定)。見[支援的執行環境](../../core/turn-completion-integrity.md#supported-harnesses)與 [CLI-INIT-OPTIONS.md](../../docs/CLI-INIT-OPTIONS.md#claude-code-以外的強制執行-hooks)。
27
+
28
+ - **`developer-memory` 1.2.0:新增 `code-reference` 過期查核——記憶引用的檔案路徑或符號一旦搬走或不存在,浮出前就會被標記,不再被悄悄沿用。** 沿用 `knowledge-graph-memory` 1.0.0 已定義的雙模式(§2),不另外發明第三種:降級模式(沒有圖引擎——AI 自己用 Glob/Grep/Read 確認引用還在,與既有的記憶驗證原則同一套機制)與引擎模式(有圖引擎時,例如 EngramGraph 的 `egr refs check`,回報每個引用的狀態:`present`/`moved`(附新位置)/`missing`/`unresolvable`)。`unresolvable` 一律不得當成 `present` 或 `missing`——它代表查核器無法判斷,不是引用沒事或已消失。時機掛在既有的 `proactive-surfacing` 規則(§4.1),查核在記憶浮出**之前**進行,不是之後。第一批只涵蓋檔案路徑與符號名稱(函式/類別);`file:line` 明確排除在外——行號會隨任何不相關的編輯漂移,屬於不同種類的過期(見 DEC-115 OQ-1,2027-01-31 前重新評估)。`core/developer-memory.md` §11 加入一段非規範性的 Claude Code `SessionStart` hook 範例;其他工具則改走各自 repo 的說明檔(CLAUDE.md/AGENTS.md/.cursorrules 等)。(DEC-115-L1)
29
+
30
+ ### 修正
31
+
32
+ - **`turn-completion-integrity` 的 zh-TW 與 en 偵測器,會在前提是使用者自己決定的條件式承諾上誤擋。** 「你選定後,我會把這一輪的發想寫成正式決策紀錄…」被判成未兌現的承諾——既有的豁免只涵蓋「要求資訊」與「要求回報」,沒有涵蓋「前提是使用者的決定」這種條件句。zh-TW 新增一支窄樣式:你 + 短決定動詞(選定/選好/決定/確認/回覆/點頭)+ 後 + 逗號 + 我;en 新增以文法為準(不是動詞清單,延續本包既有設計)的 `(once|after|as soon as) you ..., I` 樣式。兩份語料都補了成對的反例(主詞不是你/you,或只有一半的形狀),證明收窄沒有連帶漏擋真的未兌現承諾;en 版本也記下一個刻意留下未解的已知限制(前提與 "I" 之間沒有逗號時仍會誤擋——放寬會漏擋真的未兌現承諾)。
33
+
20
34
  ## [6.12.0] - 2026-09-25
21
35
 
22
36
  ### 新增
@@ -15,7 +15,7 @@ status: current
15
15
 
16
16
  > **語言**: [English](../../README.md) | 繁體中文 | [简体中文](../zh-CN/README.md)
17
17
 
18
- **版本**: 6.12.0 | **發布日期**: 2026-09-25 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
18
+ **版本**: 6.13.0-beta.1 (Pre-release) | **發布日期**: 2026-09-26 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
19
19
 
20
20
  語言無關、框架無關的軟體專案文件標準。透過 AI 原生工作流,確保不同技術堆疊之間的一致性、品質和可維護性。
21
21
 
@@ -13,6 +13,7 @@ status: current
13
13
  <!-- UDS_SUPPORTED_VERSIONS_START -->
14
14
  | 版本 | 支援狀態 |
15
15
  |------|--------|
16
+ | 6.13.0-beta.1 | ✅ 預發布版本 |
16
17
  | 6.12.0 | ✅ 最新正式版 |
17
18
  | < 6.0.0 | ❌ 已終止支援 |
18
19
  <!-- UDS_SUPPORTED_VERSIONS_END -->
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  source: ../../../core/turn-completion-integrity.md
3
- source_version: 1.3.0
4
- translation_version: 1.3.0
5
- last_synced: 2026-09-08
6
- source_hash: c396baa28423
3
+ source_version: 1.4.0
4
+ translation_version: 1.4.0
5
+ last_synced: 2026-09-25
6
+ source_hash: 8966d46d5f79
7
7
  status: current
8
8
  ---
9
9
 
@@ -11,8 +11,8 @@ status: current
11
11
 
12
12
  > **Language**: [English](../../../core/turn-completion-integrity.md) | 繁體中文
13
13
 
14
- **版本**: 1.3.0
15
- **最後更新**: 2026-09-08
14
+ **版本**: 1.4.0
15
+ **最後更新**: 2026-09-25
16
16
  **適用範圍**: 任何由 agent 結束回合、把控制權交還給人的執行環境
17
17
  **Scope**: universal
18
18
  **產業標準**: 不宣稱任何來源——由實際觀察到的失敗歸納,見「證據」
@@ -141,6 +141,34 @@ agent 寫下「我接著做 X」,然後結束回合,而 X 沒有做。
141
141
 
142
142
  ---
143
143
 
144
+ ## 支援的執行環境
145
+
146
+ 這個檢查只在「轉接層存在,且 hook 真的被接進該執行環境自己的設定」時才生效。
147
+ 截至 v1.4.0:
148
+
149
+ | 執行環境 | 事件 | 設定檔 | 阻擋契約 |
150
+ |---|---|---|---|
151
+ | Claude Code | Stop | `.claude/settings.json` | stdout 印 `{"decision":"block","reason":...}`,exit 0;沉默即放行 |
152
+ | Codex | Stop | `.codex/hooks.json` | stdout 印 `{"decision":"block","reason":...}`,exit 0——官方文件寫明這個事件純文字或空輸出無效 |
153
+ | Gemini CLI | AfterAgent | `.gemini/settings.json` | stdout 印 `{"decision":"deny","reason":...}`,exit 0——官方文件標記為優先於 exit code 2 的做法 |
154
+
155
+ Codex 的 R9 豁免是盡力而為,不是靜默失效:Codex 的 Stop payload 直接給
156
+ agent 的最後一則訊息,卻不給使用者的;要拿到使用者那一側必須解析一份
157
+ 逐字稿檔案,而它的確切格式在撰寫本表時未對照真實安裝驗證過。解析失敗時
158
+ 使用者那一側會變空——偵測仍照樣跑在 agent 訊息上,只有那一輪的 R9 豁免
159
+ 可能漏掉。
160
+
161
+ Cursor 已評估但不支援:截至撰寫本文時,Cursor 的 stop hook 能不能真的
162
+ 擋下一個回合仍未確定,若對著一個沒人驗證過的契約出一份轉接層,
163
+ 等於重演 R3 要防的那個失敗——一個沒人確認過真的在執法的執法機制。
164
+
165
+ 不在上表的任何執行環境,這個檢查都是失效的——與語言不支援(R8)同一種
166
+ 「預設沉默」失敗。`uds init --with-hooks` 會回報它把 hook 接進了哪些
167
+ 執行環境;它不會在這裡窮舉其餘的,因為那份清單是一張等著在下一個
168
+ 執行環境被加入或移除時就過期的引用。
169
+
170
+ ---
171
+
144
172
  ## 偵測器比對什麼
145
173
 
146
174
  形狀是:**第一人稱未來標記,接一個動作動詞,在同一個句子裡**,再減掉三個排除項。
@@ -188,3 +216,5 @@ agent 寫下「我接著做 X」,然後結束回合,而 X 沒有做。
188
216
  - [ ] 檢查認得出自己的攔阻訊息,不把它讀成人說的話
189
217
  - [ ] 檢查認得出 R2 定義的逐項卡點結束,而且不擋它
190
218
  - [ ] 歸屬詞的搜尋排除檢查自己的標題與結構
219
+ - [ ] 每個支援的執行環境的阻擋契約都對照該環境自己的官方文件驗證過,不是照抄另一個環境
220
+ - [ ] 安裝器只為採用者實際選擇的執行環境寫入該環境的 hook 設定
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  source: ../../../docs/CLI-INIT-OPTIONS.md
3
- source_version: 3.5.2
4
- translation_version: 3.5.2
5
- last_synced: 2026-09-18
3
+ source_version: 3.6.0
4
+ translation_version: 3.6.0
5
+ last_synced: 2026-09-25
6
6
  status: current
7
7
  ---
8
8
 
@@ -10,8 +10,8 @@ status: current
10
10
 
11
11
  > **語言**: [English](../../../docs/CLI-INIT-OPTIONS.md) | 繁體中文 | [简体中文](../../zh-CN/docs/CLI-INIT-OPTIONS.md)
12
12
  >
13
- > **版本**: 3.5.2
14
- > **最後更新**: 2026-09-18
13
+ > **版本**: 3.6.0
14
+ > **最後更新**: 2026-09-25
15
15
 
16
16
  本文件詳細說明 `uds init` 命令的每一個選項,包含使用情境、影響範圍和建議選擇。
17
17
 
@@ -838,6 +838,25 @@ uds init --experimental
838
838
  | Claude Code 目標檔 | `--claude-target` | Claude Code 整合內容要寫到哪裡:`project`(`CLAUDE.md`,預設)或 `local`(`CLAUDE.local.md`) |
839
839
  | 模式(已棄用) | `-m, --mode` | 安裝模式(skills, full)- 請改用 `--skills-location` |
840
840
 
841
+ ### Claude Code 以外的強制執行 Hooks
842
+
843
+ `--with-hooks` 一定會安裝進 `.claude/settings.json`。四個有 hook 支援的標準
844
+ 之一——`turn-completion-integrity`(見 CHANGELOG,Unreleased)——也會裝進
845
+ **Codex** 與 **Gemini CLI**,門檻是你有沒有在 [AI 工具選擇](#1-ai-工具選擇)
846
+ 裡選了那個工具(或用非互動模式的工具旗標帶入):
847
+
848
+ | 工具 | 寫入的設定檔 | 觸發條件 |
849
+ |------|-------------|---------|
850
+ | Codex | `.codex/hooks.json` | 選了 **OpenAI Codex** |
851
+ | Gemini CLI | `.gemini/settings.json` | 選了 **Gemini CLI** |
852
+
853
+ 沒選的工具不會寫入任何東西——`uds init` 不會在沒用到 Codex 或 Gemini CLI
854
+ 的專案裡建立 `.codex/` 或 `.gemini/` 目錄。其餘三個有 hook 支援的標準
855
+ (commit message 驗證、logging、security)目前仍只支援 Claude Code;
856
+ 為什麼目前只推廣 turn-completion-integrity,以及 Cursor 的現況
857
+ (已評估、不支援),見
858
+ [支援的執行環境](../../../core/turn-completion-integrity.md#supported-harnesses)。
859
+
841
860
  ### Claude Code 整合目標檔(`--claude-target`)
842
861
 
843
862
  UDS 預設把 Claude Code 內容寫進 `CLAUDE.md`——團隊共用、會進版控的那個檔案。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "universal-dev-standards",
3
- "version": "6.12.0",
3
+ "version": "6.13.0-beta.1",
4
4
  "description": "CLI tool for adopting Universal Development Standards",
5
5
  "keywords": [
6
6
  "documentation",
@@ -279,6 +279,32 @@ export async function initCommand(options) {
279
279
  console.log(chalk.gray(` ${line}`));
280
280
  }
281
281
  }
282
+
283
+ // turn-completion-integrity is also extended to Codex and Gemini CLI
284
+ // (2026-09-25), each with its own config file and output contract — see
285
+ // installCodexHooks/installGeminiHooks in hooks-installer.js. Gated on the
286
+ // tools the adopter actually selected: writing a hooks.json into every
287
+ // project's .codex/ regardless of whether Codex is used would be noise,
288
+ // not help.
289
+ const selectedTools = config.integrations || config.aiTools || [];
290
+ if (selectedTools.includes('codex')) {
291
+ const { installCodexHooks } = await import('../installers/hooks-installer.js');
292
+ const codexResult = installCodexHooks(projectPath);
293
+ if (codexResult.installed) {
294
+ console.log(chalk.green(' ✓ Codex Stop hook installed (turn-completion-integrity)'));
295
+ } else {
296
+ console.log(chalk.yellow(` ⚠ Codex hook not installed — ${codexResult.reason}`));
297
+ }
298
+ }
299
+ if (selectedTools.includes('gemini-cli')) {
300
+ const { installGeminiHooks } = await import('../installers/hooks-installer.js');
301
+ const geminiResult = installGeminiHooks(projectPath);
302
+ if (geminiResult.installed) {
303
+ console.log(chalk.green(' ✓ Gemini CLI AfterAgent hook installed (turn-completion-integrity)'));
304
+ } else {
305
+ console.log(chalk.yellow(` ⚠ Gemini CLI hook not installed — ${geminiResult.reason}`));
306
+ }
307
+ }
282
308
  }
283
309
 
284
310
  // 5. Setup Pre-commit Hook
@@ -218,3 +218,107 @@ export function installHooks(projectPath) {
218
218
  languageLimits: probeLanguageLimits(hooksDir, scripts),
219
219
  };
220
220
  }
221
+
222
+ /**
223
+ * turn-completion-integrity is the only standard extended to Codex and Gemini
224
+ * CLI so far (2026-09-25). Unlike installHooks() above, these two functions do
225
+ * NOT walk every standard's `enforcement:` block — the other three shipped
226
+ * standards declare Claude-Code-specific events (PreToolUse/PostToolUse with
227
+ * a Bash/Write matcher) that Codex and Gemini CLI's hook models don't obviously
228
+ * map onto, and generalizing that mapping is a separate piece of work. These
229
+ * are narrowly scoped to the one hook that has been verified against each
230
+ * tool's own docs.
231
+ *
232
+ * @see core/turn-completion-integrity.md
233
+ */
234
+ const CODEX_HOOK_SCRIPT = 'check-turn-completion-codex.mjs';
235
+ const GEMINI_HOOK_SCRIPT = 'check-turn-completion-gemini.mjs';
236
+
237
+ /** Copy the shared hook scripts into the project, same as installHooks() does. */
238
+ function copyHookScripts(hookDir, hooksDir) {
239
+ if (!existsSync(hooksDir)) mkdirSync(hooksDir, { recursive: true });
240
+ cpSync(hookDir, hooksDir, { recursive: true });
241
+ }
242
+
243
+ /**
244
+ * Install the turn-completion-integrity Stop hook for Codex.
245
+ *
246
+ * Config lives at <project>/.codex/hooks.json — a dedicated file, NOT
247
+ * config.toml's [hooks] table. Codex runs matching hooks from every file that
248
+ * defines them (https://learn.chatgpt.com/docs/hooks, fetched 2026-09-25), so
249
+ * writing only hooks.json here is a deliberate choice, not an oversight: it
250
+ * does not need to also read or merge config.toml to avoid double-registering
251
+ * the same hook, and an adopter who already has a Stop hook in config.toml
252
+ * keeps it untouched.
253
+ *
254
+ * @param {string} projectPath
255
+ * @returns {{ installed: boolean, settingsPath: string, event?: string, reason?: string }}
256
+ */
257
+ export function installCodexHooks(projectPath) {
258
+ const hooksJsonPath = join(projectPath, '.codex', 'hooks.json');
259
+ const hookDir = hooksSourceDir();
260
+
261
+ if (!hookDir || !existsSync(join(hookDir, CODEX_HOOK_SCRIPT))) {
262
+ return { installed: false, settingsPath: hooksJsonPath, reason: `hook script not found: ${CODEX_HOOK_SCRIPT}` };
263
+ }
264
+
265
+ const codexDir = join(projectPath, '.codex');
266
+ if (!existsSync(codexDir)) mkdirSync(codexDir, { recursive: true });
267
+ copyHookScripts(hookDir, join(projectPath, 'scripts', 'hooks'));
268
+
269
+ let config = {};
270
+ if (existsSync(hooksJsonPath)) {
271
+ try { config = JSON.parse(readFileSync(hooksJsonPath, 'utf-8')); } catch { config = {}; }
272
+ }
273
+ if (!config.hooks) config.hooks = {};
274
+ if (!config.hooks.Stop) config.hooks.Stop = [];
275
+
276
+ // Matcher is omitted, not empty-stringed: Codex ignores any matcher on Stop
277
+ // ("any configured matcher is ignored"), and mergeHookArray's dedupe treats
278
+ // undefined === undefined, so this still merges idempotently.
279
+ config.hooks.Stop = mergeHookArray(config.hooks.Stop, [
280
+ { hooks: [{ type: 'command', command: `node scripts/hooks/${CODEX_HOOK_SCRIPT}`, timeout: 30 }] },
281
+ ]);
282
+
283
+ writeFileSync(hooksJsonPath, JSON.stringify(config, null, 2) + '\n');
284
+ return { installed: true, settingsPath: hooksJsonPath, event: 'Stop' };
285
+ }
286
+
287
+ /**
288
+ * Install the turn-completion-integrity AfterAgent hook for Gemini CLI.
289
+ *
290
+ * Config lives at <project>/.gemini/settings.json — shared with the rest of
291
+ * Gemini CLI's project settings, so only the `hooks.AfterAgent` key is ever
292
+ * touched here (https://geminicli.com/docs/hooks/, fetched 2026-09-25).
293
+ *
294
+ * @param {string} projectPath
295
+ * @returns {{ installed: boolean, settingsPath: string, event?: string, reason?: string }}
296
+ */
297
+ export function installGeminiHooks(projectPath) {
298
+ const settingsPath = join(projectPath, '.gemini', 'settings.json');
299
+ const hookDir = hooksSourceDir();
300
+
301
+ if (!hookDir || !existsSync(join(hookDir, GEMINI_HOOK_SCRIPT))) {
302
+ return { installed: false, settingsPath, reason: `hook script not found: ${GEMINI_HOOK_SCRIPT}` };
303
+ }
304
+
305
+ const geminiDir = join(projectPath, '.gemini');
306
+ if (!existsSync(geminiDir)) mkdirSync(geminiDir, { recursive: true });
307
+ copyHookScripts(hookDir, join(projectPath, 'scripts', 'hooks'));
308
+
309
+ let settings = {};
310
+ if (existsSync(settingsPath)) {
311
+ try { settings = JSON.parse(readFileSync(settingsPath, 'utf-8')); } catch { settings = {}; }
312
+ }
313
+ if (!settings.hooks) settings.hooks = {};
314
+ if (!settings.hooks.AfterAgent) settings.hooks.AfterAgent = [];
315
+
316
+ // AfterAgent does not use matchers either (matchers apply only to Tool
317
+ // hooks); see the Codex function above for why matcher is omitted, not "".
318
+ settings.hooks.AfterAgent = mergeHookArray(settings.hooks.AfterAgent, [
319
+ { hooks: [{ type: 'command', command: `node scripts/hooks/${GEMINI_HOOK_SCRIPT}`, timeout: 5000 }] },
320
+ ]);
321
+
322
+ writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
323
+ return { installed: true, settingsPath, event: 'AfterAgent' };
324
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "version": "6.12.0",
3
+ "version": "6.13.0-beta.1",
4
4
  "lastUpdated": "2026-05-13",
5
5
  "description": "Standards registry for universal-dev-standards with integrated skills and AI-optimized formats",
6
6
  "formats": {
@@ -58,14 +58,14 @@
58
58
  "standards": {
59
59
  "name": "universal-dev-standards",
60
60
  "url": "https://github.com/AsiaOstrich/universal-dev-standards",
61
- "version": "6.12.0"
61
+ "version": "6.13.0-beta.1"
62
62
  },
63
63
  "skills": {
64
64
  "name": "universal-dev-standards",
65
65
  "url": "https://github.com/AsiaOstrich/universal-dev-standards",
66
66
  "localPath": "skills",
67
67
  "rawUrl": "https://raw.githubusercontent.com/AsiaOstrich/universal-dev-standards/main/skills",
68
- "version": "6.12.0",
68
+ "version": "6.13.0-beta.1",
69
69
  "note": "Skills are now included in the main repository under skills/"
70
70
  }
71
71
  },
@@ -2295,7 +2295,7 @@
2295
2295
  "id": "license-compliance",
2296
2296
  "name": "License Compliance Standards",
2297
2297
  "nameZh": "授權合規標準",
2298
- "version": "6.12.0",
2298
+ "version": "6.13.0-beta.1",
2299
2299
  "source": {
2300
2300
  "human": "core/license-compliance.md",
2301
2301
  "ai": "ai/standards/license-compliance.ai.yaml"
@@ -2307,7 +2307,7 @@
2307
2307
  "id": "verification-oracle",
2308
2308
  "name": "Verification Oracle Standards",
2309
2309
  "nameZh": "驗證 Oracle 標準",
2310
- "version": "6.12.0",
2310
+ "version": "6.13.0-beta.1",
2311
2311
  "source": {
2312
2312
  "human": "core/verification-oracle.md",
2313
2313
  "ai": "ai/standards/verification-oracle.ai.yaml"
@@ -2319,7 +2319,7 @@
2319
2319
  "id": "model-provenance",
2320
2320
  "name": "Model Provenance Policy Standards",
2321
2321
  "nameZh": "模型來源政策標準",
2322
- "version": "6.12.0",
2322
+ "version": "6.13.0-beta.1",
2323
2323
  "source": {
2324
2324
  "human": "core/model-provenance.md",
2325
2325
  "ai": "ai/standards/model-provenance.ai.yaml"
@@ -2331,7 +2331,7 @@
2331
2331
  "id": "resource-cost-boundary",
2332
2332
  "name": "Resource / Cost Boundary Declaration Standards",
2333
2333
  "nameZh": "資源/成本邊界宣告標準",
2334
- "version": "6.12.0",
2334
+ "version": "6.13.0-beta.1",
2335
2335
  "source": {
2336
2336
  "human": "core/resource-cost-boundary.md",
2337
2337
  "ai": "ai/standards/resource-cost-boundary.ai.yaml"