universal-dev-standards 6.3.4 → 6.3.6
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/bundled/ai/standards/agent-behavior-discipline.ai.yaml +1 -1
- package/bundled/ai/standards/container-security.ai.yaml +1 -1
- package/bundled/ai/standards/full-coverage-testing.ai.yaml +5 -5
- package/bundled/ai/standards/knowledge-graph-memory.ai.yaml +1 -1
- package/bundled/locales/zh-CN/CHANGELOG.md +19 -2
- package/bundled/locales/zh-CN/README.md +1 -1
- package/bundled/locales/zh-CN/ai/options/git-workflow/gitflow.ai.yaml +4 -4
- package/bundled/locales/zh-CN/ai/options/git-workflow/github-flow.ai.yaml +1 -1
- package/bundled/locales/zh-CN/ai/options/git-workflow/merge-commit.ai.yaml +3 -3
- package/bundled/locales/zh-CN/ai/options/git-workflow/rebase-ff.ai.yaml +2 -2
- package/bundled/locales/zh-CN/ai/options/git-workflow/squash-merge.ai.yaml +4 -4
- package/bundled/locales/zh-CN/ai/options/git-workflow/trunk-based.ai.yaml +2 -2
- package/bundled/locales/zh-CN/ai/options/testing/security-testing.ai.yaml +1 -1
- package/bundled/locales/zh-TW/CHANGELOG.md +19 -2
- package/bundled/locales/zh-TW/README.md +1 -1
- package/bundled/locales/zh-TW/ai/options/git-workflow/gitflow.ai.yaml +4 -4
- package/bundled/locales/zh-TW/ai/options/git-workflow/github-flow.ai.yaml +1 -1
- package/bundled/locales/zh-TW/ai/options/git-workflow/merge-commit.ai.yaml +3 -3
- package/bundled/locales/zh-TW/ai/options/git-workflow/rebase-ff.ai.yaml +2 -2
- package/bundled/locales/zh-TW/ai/options/git-workflow/squash-merge.ai.yaml +4 -4
- package/bundled/locales/zh-TW/ai/options/git-workflow/trunk-based.ai.yaml +2 -2
- package/bundled/locales/zh-TW/ai/options/testing/security-testing.ai.yaml +1 -1
- package/bundled/skills/ai/standards/checkin.ai.yaml +9 -9
- package/bundled/skills/ai/standards/commit.ai.yaml +7 -7
- package/bundled/skills/ai/standards/refactoring.ai.yaml +15 -15
- package/bundled/skills/ai/standards/testing.ai.yaml +11 -11
- package/package.json +1 -1
- package/standards-registry.json +7 -7
|
@@ -59,7 +59,7 @@ principles:
|
|
|
59
59
|
triggers:
|
|
60
60
|
- Any edit or refactor task
|
|
61
61
|
do:
|
|
62
|
-
- Declare scope before editing ("I will modify: X. I will not touch: Y.")
|
|
62
|
+
- 'Declare scope before editing ("I will modify: X. I will not touch: Y.")'
|
|
63
63
|
- Match the local code style rather than enforcing personal preferences
|
|
64
64
|
- Flag pre-existing issues found out-of-scope with a verbal note only
|
|
65
65
|
do_not:
|
|
@@ -93,7 +93,7 @@ categories:
|
|
|
93
93
|
required_settings:
|
|
94
94
|
- readOnlyRootFilesystem: true
|
|
95
95
|
- allowPrivilegeEscalation: false
|
|
96
|
-
- drop: [ALL] capabilities
|
|
96
|
+
- drop: "[ALL] capabilities"
|
|
97
97
|
seccomp:
|
|
98
98
|
profile: RuntimeDefault (or custom restricted profile)
|
|
99
99
|
audit_mode: allowed for profiling only; not for production
|
|
@@ -161,23 +161,23 @@ standard:
|
|
|
161
161
|
deployment_gates:
|
|
162
162
|
pre_push_to_main:
|
|
163
163
|
action: block
|
|
164
|
-
trigger: "// WARNING: STUB" marker found in src/
|
|
164
|
+
trigger: '"// WARNING: STUB" marker found in src/'
|
|
165
165
|
message: "[STUB-BLOCK] STUB markers detected. Push to main rejected."
|
|
166
166
|
deploy_to_uat:
|
|
167
167
|
action: block
|
|
168
|
-
trigger: "// WARNING: STUB" marker found in src/
|
|
168
|
+
trigger: '"// WARNING: STUB" marker found in src/'
|
|
169
169
|
message: "[DEPLOY-BLOCK] STUB markers detected. UAT deployment aborted."
|
|
170
170
|
deploy_to_production:
|
|
171
171
|
action: block
|
|
172
|
-
trigger: "// WARNING: STUB" marker found in src/
|
|
172
|
+
trigger: '"// WARNING: STUB" marker found in src/'
|
|
173
173
|
message: "[CRITICAL] Production deployment with STUB markers is strictly prohibited."
|
|
174
174
|
deploy_to_staging:
|
|
175
175
|
action: warn
|
|
176
|
-
trigger: "// WARNING: STUB" marker found in src/
|
|
176
|
+
trigger: '"// WARNING: STUB" marker found in src/'
|
|
177
177
|
message: "[STUB-WARN] Deploying with STUB markers to staging. NOT permitted in UAT/production."
|
|
178
178
|
feature_branch_push:
|
|
179
179
|
action: warn
|
|
180
|
-
trigger: "// WARNING: STUB" marker found in src/
|
|
180
|
+
trigger: '"// WARNING: STUB" marker found in src/'
|
|
181
181
|
message: "[STUB-WARN] STUB markers found. Must remove before merging to main."
|
|
182
182
|
|
|
183
183
|
migration_from_pyramid:
|
|
@@ -54,7 +54,7 @@ standard:
|
|
|
54
54
|
- rule: "Spec impacted_by:[DEC] => IMPACTS (Decision -> Spec)"
|
|
55
55
|
- rule: "Decision supersedes:[DEC] => SUPERSEDES (Decision -> Decision)"
|
|
56
56
|
- rule: "[[XSPEC-NNN]] link in a Decision body => IMPACTS (Decision -> Spec)"
|
|
57
|
-
idempotent: "Declaring a relationship from both ends yields one edge, not two"
|
|
57
|
+
- idempotent: "Declaring a relationship from both ends yields one edge, not two"
|
|
58
58
|
|
|
59
59
|
modes:
|
|
60
60
|
degraded:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../CHANGELOG.md
|
|
3
|
-
source_version: 6.3.
|
|
4
|
-
translation_version: 6.3.
|
|
3
|
+
source_version: 6.3.6
|
|
4
|
+
translation_version: 6.3.6
|
|
5
5
|
last_synced: 2026-08-07
|
|
6
6
|
status: current
|
|
7
7
|
---
|
|
@@ -17,6 +17,23 @@ status: current
|
|
|
17
17
|
|
|
18
18
|
## [Unreleased]
|
|
19
19
|
|
|
20
|
+
## [6.3.6] - 2026-08-07
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- **6.3.5 说出货的标准全部可解析。它数的是 287 份里的 141 份。** 6.3.5 加的那道闸门**明文列举三个目录且不递归**,于是 `ai/options/`、`locales/`、`skills/`——三者皆由 `prepack` 打包进 tarball——都落在它的分母之外。6.3.5 发布后,那些目录里仍有 **10 份无法解析**,散在两个中文语系与 `skills/`。**一道自行列举范围的闸门,在下一次有人新增目录时就过期了**,因此它已改为走访整个 repo、检查构建与 vendor 路径之外的每一份 `.ai.yaml`——本 repo 为 759 份,而它先前宣称「完整」的是 423 份。
|
|
25
|
+
- **另有 8 份能解析、但解析出来是错的——这是任何「能不能解析」的检查都看不见的。** `{UT:70%,IT:20%}` 不是映射:冒号后没有空格时,YAML 读到的是一个纯量键 `UT:70%`、其值为 null。未加引号的 `- git commit -m "feat: add model"` 会变成 `{'git commit -m "feat': 'add model"'}`。**它们通过每一项语法检查,同时交给 agent 一堆胡言。** 闸门现在也会拒绝「键含引号字符」或「冒号后无空格」——那是纯量被静默读成映射的指纹——两个分支皆以对照组实测而非假设。
|
|
26
|
+
|
|
27
|
+
## [6.3.5] - 2026-08-07
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **四份出货的 `.ai.yaml` 标准无法解析。** 6.3.4 交付了 141 份机器可读标准,其中 `agent-behavior-discipline`、`container-security`、`full-coverage-testing`、`knowledge-graph-memory` 是语法无效的 YAML。同样四份也在 `.standards/`——那正是 `uds init` 放进采用者目录的东西。**agent 读它们得到的是异常而非空内容**,而下游若 catch 掉,得到的沉默与「这份标准没有规则」无从分辨。四份的失败方式相同:未加引号的纯量带着 YAML 语义字符——括号内的冒号、flow 序列后接散文、在值中途结束的引号、与兄弟项不同缩进的键。以加引号或调缩进修正,不重构结构。
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- **`npm run check:ai-yaml`——每一份 `.ai.yaml` 都必须可解析,并已接上 pre-commit 与发版流程。** 上述四份之所以进得了发版,是因为有八个脚本会读那个目录而**没有一个解析全集**;`check-standards-sync.sh` 比对的是版本与注册表项目,一份无法解析的文件能安然通过。此检查读 `ai/`、`.standards/` 与 `cli/bundled/` 三处,且**无条件执行**而非藏在路径 glob 后面——一个窄到会跳过这次的 glob 就是同一个错误换个位置。**exit 2 保留给「检查跑不起来」**:读不到的目录、里面没有 `.ai.yaml` 的目录、载不到的 YAML 库。那不算通过,而且会挡下发版——因为一个「没问题」与「查不了」输出相同的检查,会把未知转成安心。
|
|
36
|
+
|
|
20
37
|
## [6.3.4] - 2026-08-07
|
|
21
38
|
|
|
22
39
|
### Fixed
|
|
@@ -15,7 +15,7 @@ status: current
|
|
|
15
15
|
|
|
16
16
|
> **语言**: [English](../../README.md) | [繁體中文](../zh-TW/README.md) | 简体中文
|
|
17
17
|
|
|
18
|
-
**版本**: 6.3.
|
|
18
|
+
**版本**: 6.3.6 | **发布日期**: 2026-07-31 | **授权**: [双重授权](../../LICENSE) (CC BY 4.0 + MIT)
|
|
19
19
|
|
|
20
20
|
语言无关、框架无关的软件项目文档标准。通过 AI 原生工作流,确保不同技术栈之间的一致性、质量和可维护性。
|
|
21
21
|
|
|
@@ -76,7 +76,7 @@ workflow:
|
|
|
76
76
|
commands:
|
|
77
77
|
- "# 进行变更..."
|
|
78
78
|
- git add .
|
|
79
|
-
- git commit -m "feat: {描述}"
|
|
79
|
+
- 'git commit -m "feat: {描述}"'
|
|
80
80
|
|
|
81
81
|
- step: 合併到 develop
|
|
82
82
|
commands:
|
|
@@ -114,7 +114,7 @@ workflow:
|
|
|
114
114
|
- step: 修正并完成
|
|
115
115
|
commands:
|
|
116
116
|
- "# 修正問題"
|
|
117
|
-
- git commit -m "fix: {描述}"
|
|
117
|
+
- 'git commit -m "fix: {描述}"'
|
|
118
118
|
- git checkout main
|
|
119
119
|
- git merge --no-ff hotfix/{問題}
|
|
120
120
|
- git tag -a v{版本}
|
|
@@ -126,8 +126,8 @@ quick_reference:
|
|
|
126
126
|
branches:
|
|
127
127
|
columns: [分支, 用途, 来源, 合併到]
|
|
128
128
|
rows:
|
|
129
|
-
- [main, 正式發布,
|
|
130
|
-
- [develop, 集成, main, -]
|
|
129
|
+
- [main, 正式發布, "-", "-"]
|
|
130
|
+
- [develop, 集成, main, "-"]
|
|
131
131
|
- [feature/*, 新功能, develop, develop]
|
|
132
132
|
- [release/*, 發布准备, develop, "main, develop"]
|
|
133
133
|
- [hotfix/*, 緊急修正, main, "main, develop"]
|
|
@@ -44,9 +44,9 @@ workflow:
|
|
|
44
44
|
|
|
45
45
|
- step: 进行多次有意義的提交
|
|
46
46
|
commands:
|
|
47
|
-
- git commit -m "feat: add user model"
|
|
48
|
-
- git commit -m "feat: add user service"
|
|
49
|
-
- git commit -m "test: add user tests"
|
|
47
|
+
- 'git commit -m "feat: add user model"'
|
|
48
|
+
- 'git commit -m "feat: add user service"'
|
|
49
|
+
- 'git commit -m "test: add user tests"'
|
|
50
50
|
|
|
51
51
|
- step: 使用合併提交合併
|
|
52
52
|
commands:
|
|
@@ -49,8 +49,8 @@ workflow:
|
|
|
49
49
|
|
|
50
50
|
- step: 进行提交
|
|
51
51
|
commands:
|
|
52
|
-
- git commit -m "feat: implement feature part 1"
|
|
53
|
-
- git commit -m "feat: implement feature part 2"
|
|
52
|
+
- 'git commit -m "feat: implement feature part 1"'
|
|
53
|
+
- 'git commit -m "feat: implement feature part 2"'
|
|
54
54
|
|
|
55
55
|
- step: 变基到最新 main
|
|
56
56
|
commands:
|
|
@@ -43,9 +43,9 @@ workflow:
|
|
|
43
43
|
|
|
44
44
|
- step: 进行多次提交
|
|
45
45
|
commands:
|
|
46
|
-
- git commit -m "wip: initial implementation"
|
|
47
|
-
- git commit -m "wip: add tests"
|
|
48
|
-
- git commit -m "wip: fix lint errors"
|
|
46
|
+
- 'git commit -m "wip: initial implementation"'
|
|
47
|
+
- 'git commit -m "wip: add tests"'
|
|
48
|
+
- 'git commit -m "wip: fix lint errors"'
|
|
49
49
|
|
|
50
50
|
- step: 壓縮合併(通過 GitHub/GitLab)
|
|
51
51
|
commands:
|
|
@@ -56,7 +56,7 @@ workflow:
|
|
|
56
56
|
commands:
|
|
57
57
|
- git checkout main
|
|
58
58
|
- git merge --squash feature/{功能名称}
|
|
59
|
-
- git commit -m "feat(scope): 總結消息 (#PR号)"
|
|
59
|
+
- 'git commit -m "feat(scope): 總結消息 (#PR号)"'
|
|
60
60
|
|
|
61
61
|
example:
|
|
62
62
|
before: |
|
|
@@ -61,7 +61,7 @@ workflow:
|
|
|
61
61
|
commands:
|
|
62
62
|
- "# 进行小而聚焦的变更"
|
|
63
63
|
- git add .
|
|
64
|
-
- git commit -m "feat: {描述}"
|
|
64
|
+
- 'git commit -m "feat: {描述}"'
|
|
65
65
|
|
|
66
66
|
- step: 推送到 trunk
|
|
67
67
|
commands:
|
|
@@ -79,7 +79,7 @@ workflow:
|
|
|
79
79
|
commands:
|
|
80
80
|
- "# 进行变更..."
|
|
81
81
|
- git add .
|
|
82
|
-
- git commit -m "feat: {描述}"
|
|
82
|
+
- 'git commit -m "feat: {描述}"'
|
|
83
83
|
|
|
84
84
|
- step: 快速合併
|
|
85
85
|
commands:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../CHANGELOG.md
|
|
3
|
-
source_version: 6.3.
|
|
4
|
-
translation_version: 6.3.
|
|
3
|
+
source_version: 6.3.6
|
|
4
|
+
translation_version: 6.3.6
|
|
5
5
|
last_synced: 2026-08-07
|
|
6
6
|
status: current
|
|
7
7
|
---
|
|
@@ -17,6 +17,23 @@ status: current
|
|
|
17
17
|
|
|
18
18
|
## [Unreleased]
|
|
19
19
|
|
|
20
|
+
## [6.3.6] - 2026-08-07
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- **6.3.5 說出貨的標準全部可解析。它數的是 287 份裡的 141 份。** 6.3.5 加的那道閘門**明文列舉三個目錄且不遞迴**,於是 `ai/options/`、`locales/`、`skills/`——三者皆由 `prepack` 打包進 tarball——都落在它的分母之外。6.3.5 發布後,那些目錄裡仍有 **10 份無法解析**,散在兩個中文語系與 `skills/`。**一道自行列舉範圍的閘門,在下一次有人新增目錄時就過期了**,因此它已改為走訪整個 repo、檢查建置與 vendor 路徑之外的每一份 `.ai.yaml`——本 repo 為 759 份,而它先前宣稱「完整」的是 423 份。
|
|
25
|
+
- **另有 8 份能解析、但解析出來是錯的——這是任何「能不能解析」的檢查都看不見的。** `{UT:70%,IT:20%}` 不是對映:冒號後沒有空格時,YAML 讀到的是一個純量鍵 `UT:70%`、其值為 null。未加引號的 `- git commit -m "feat: add model"` 會變成 `{'git commit -m "feat': 'add model"'}`。**它們通過每一項語法檢查,同時交給 agent 一堆胡言。** 閘門現在也會拒絕「鍵含引號字元」或「冒號後無空格」——那是純量被靜默讀成對映的指紋——兩個分支皆以對照組實測而非假設。
|
|
26
|
+
|
|
27
|
+
## [6.3.5] - 2026-08-07
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **四份出貨的 `.ai.yaml` 標準無法解析。** 6.3.4 交付了 141 份機器可讀標準,其中 `agent-behavior-discipline`、`container-security`、`full-coverage-testing`、`knowledge-graph-memory` 是語法無效的 YAML。同樣四份也在 `.standards/`——那正是 `uds init` 放進採用者目錄的東西。**agent 讀它們得到的是例外而非空內容**,而下游若 catch 掉,得到的沉默與「這份標準沒有規則」無從分辨。四份的失敗方式相同:未加引號的純量帶著 YAML 語意字元——括號內的冒號、flow 序列後接散文、在值中途結束的引號、與兄弟項不同縮排的鍵。以加引號或調縮排修正,不重構結構。
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- **`npm run check:ai-yaml`——每一份 `.ai.yaml` 都必須可解析,並已接上 pre-commit 與發版流程。** 上述四份之所以進得了發版,是因為有八個腳本會讀那個目錄而**沒有一個解析全集**;`check-standards-sync.sh` 比對的是版本與註冊表項目,一份無法解析的檔案能安然通過。此檢查讀 `ai/`、`.standards/` 與 `cli/bundled/` 三處,且**無條件執行**而非藏在路徑 glob 後面——一個窄到會跳過這次的 glob 就是同一個錯誤換個位置。**exit 2 保留給「檢查跑不起來」**:讀不到的目錄、裡面沒有 `.ai.yaml` 的目錄、載不到的 YAML 函式庫。那不算通過,而且會擋下發版——因為一個「沒問題」與「查不了」輸出相同的檢查,會把未知轉成安心。
|
|
36
|
+
|
|
20
37
|
## [6.3.4] - 2026-08-07
|
|
21
38
|
|
|
22
39
|
### Fixed
|
|
@@ -15,7 +15,7 @@ status: current
|
|
|
15
15
|
|
|
16
16
|
> **語言**: [English](../../README.md) | 繁體中文 | [简体中文](../zh-CN/README.md)
|
|
17
17
|
|
|
18
|
-
**版本**: 6.3.
|
|
18
|
+
**版本**: 6.3.6 | **發布日期**: 2026-07-31 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
|
|
19
19
|
|
|
20
20
|
語言無關、框架無關的軟體專案文件標準。透過 AI 原生工作流,確保不同技術堆疊之間的一致性、品質和可維護性。
|
|
21
21
|
|
|
@@ -76,7 +76,7 @@ workflow:
|
|
|
76
76
|
commands:
|
|
77
77
|
- "# 進行變更..."
|
|
78
78
|
- git add .
|
|
79
|
-
- git commit -m "feat: {描述}"
|
|
79
|
+
- 'git commit -m "feat: {描述}"'
|
|
80
80
|
|
|
81
81
|
- step: 合併到 develop
|
|
82
82
|
commands:
|
|
@@ -114,7 +114,7 @@ workflow:
|
|
|
114
114
|
- step: 修正並完成
|
|
115
115
|
commands:
|
|
116
116
|
- "# 修正問題"
|
|
117
|
-
- git commit -m "fix: {描述}"
|
|
117
|
+
- 'git commit -m "fix: {描述}"'
|
|
118
118
|
- git checkout main
|
|
119
119
|
- git merge --no-ff hotfix/{問題}
|
|
120
120
|
- git tag -a v{版本}
|
|
@@ -126,8 +126,8 @@ quick_reference:
|
|
|
126
126
|
branches:
|
|
127
127
|
columns: [分支, 用途, 來源, 合併到]
|
|
128
128
|
rows:
|
|
129
|
-
- [main, 正式發布,
|
|
130
|
-
- [develop, 整合, main, -]
|
|
129
|
+
- [main, 正式發布, "-", "-"]
|
|
130
|
+
- [develop, 整合, main, "-"]
|
|
131
131
|
- [feature/*, 新功能, develop, develop]
|
|
132
132
|
- [release/*, 發布準備, develop, "main, develop"]
|
|
133
133
|
- [hotfix/*, 緊急修正, main, "main, develop"]
|
|
@@ -44,9 +44,9 @@ workflow:
|
|
|
44
44
|
|
|
45
45
|
- step: 進行多次有意義的提交
|
|
46
46
|
commands:
|
|
47
|
-
- git commit -m "feat: add user model"
|
|
48
|
-
- git commit -m "feat: add user service"
|
|
49
|
-
- git commit -m "test: add user tests"
|
|
47
|
+
- 'git commit -m "feat: add user model"'
|
|
48
|
+
- 'git commit -m "feat: add user service"'
|
|
49
|
+
- 'git commit -m "test: add user tests"'
|
|
50
50
|
|
|
51
51
|
- step: 使用合併提交合併
|
|
52
52
|
commands:
|
|
@@ -49,8 +49,8 @@ workflow:
|
|
|
49
49
|
|
|
50
50
|
- step: 進行提交
|
|
51
51
|
commands:
|
|
52
|
-
- git commit -m "feat: implement feature part 1"
|
|
53
|
-
- git commit -m "feat: implement feature part 2"
|
|
52
|
+
- 'git commit -m "feat: implement feature part 1"'
|
|
53
|
+
- 'git commit -m "feat: implement feature part 2"'
|
|
54
54
|
|
|
55
55
|
- step: 變基到最新 main
|
|
56
56
|
commands:
|
|
@@ -43,9 +43,9 @@ workflow:
|
|
|
43
43
|
|
|
44
44
|
- step: 進行多次提交
|
|
45
45
|
commands:
|
|
46
|
-
- git commit -m "wip: initial implementation"
|
|
47
|
-
- git commit -m "wip: add tests"
|
|
48
|
-
- git commit -m "wip: fix lint errors"
|
|
46
|
+
- 'git commit -m "wip: initial implementation"'
|
|
47
|
+
- 'git commit -m "wip: add tests"'
|
|
48
|
+
- 'git commit -m "wip: fix lint errors"'
|
|
49
49
|
|
|
50
50
|
- step: 壓縮合併(通過 GitHub/GitLab)
|
|
51
51
|
commands:
|
|
@@ -56,7 +56,7 @@ workflow:
|
|
|
56
56
|
commands:
|
|
57
57
|
- git checkout main
|
|
58
58
|
- git merge --squash feature/{功能名稱}
|
|
59
|
-
- git commit -m "feat(scope): 總結訊息 (#PR號)"
|
|
59
|
+
- 'git commit -m "feat(scope): 總結訊息 (#PR號)"'
|
|
60
60
|
|
|
61
61
|
example:
|
|
62
62
|
before: |
|
|
@@ -61,7 +61,7 @@ workflow:
|
|
|
61
61
|
commands:
|
|
62
62
|
- "# 進行小而聚焦的變更"
|
|
63
63
|
- git add .
|
|
64
|
-
- git commit -m "feat: {描述}"
|
|
64
|
+
- 'git commit -m "feat: {描述}"'
|
|
65
65
|
|
|
66
66
|
- step: 推送到 trunk
|
|
67
67
|
commands:
|
|
@@ -79,7 +79,7 @@ workflow:
|
|
|
79
79
|
commands:
|
|
80
80
|
- "# 進行變更..."
|
|
81
81
|
- git add .
|
|
82
|
-
- git commit -m "feat: {描述}"
|
|
82
|
+
- 'git commit -m "feat: {描述}"'
|
|
83
83
|
|
|
84
84
|
- step: 快速合併
|
|
85
85
|
commands:
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
v: 1.3.0
|
|
3
3
|
philosophy: [complete_unit,working_state,reversible,has_tests,understandable]
|
|
4
4
|
checklist:
|
|
5
|
-
build: {compile:"0 errors/warnings",deps:"installed,locked"}
|
|
6
|
-
test: {pass:"100%",new_tested:true,"cov":"not_decreased"}
|
|
7
|
-
quality: {standards:true,smells:"methods≤50,nest≤3,complex≤10,no_dup",security:"no_secrets,no_sqli,no_xss"}
|
|
8
|
-
docs: {api:true,readme:"if_needed",changelog:"user_facing→[Unreleased]"}
|
|
9
|
-
workflow: {branch:"feature/|fix/|docs/|chore/",commit:conventional,synced:true}
|
|
5
|
+
build: {compile: "0 errors/warnings",deps: "installed,locked"}
|
|
6
|
+
test: {pass: "100%",new_tested: true,"cov": "not_decreased"}
|
|
7
|
+
quality: {standards: true,smells: "methods≤50,nest≤3,complex≤10,no_dup",security: "no_secrets,no_sqli,no_xss"}
|
|
8
|
+
docs: {api: true,readme: "if_needed",changelog: "user_facing→[Unreleased]"}
|
|
9
|
+
workflow: {branch: "feature/|fix/|docs/|chore/",commit: conventional,synced: true}
|
|
10
10
|
never_commit: [build_error,test_fail,incomplete_feature,WIP_critical,debug_code,commented_code]
|
|
11
11
|
timing:
|
|
12
12
|
good: [completed_unit,bug_fixed_with_test,independent_refactor,runnable]
|
|
13
13
|
bad: [build_fail,test_fail,incomplete,experimental_TODO]
|
|
14
14
|
granularity:
|
|
15
|
-
size: {files:"1-10",lines:"50-300",scope:single_concern}
|
|
15
|
+
size: {files: "1-10",lines: "50-300",scope: single_concern}
|
|
16
16
|
combine: [feature+tests,tightly_related]
|
|
17
17
|
separate: [A+B,refactor+feature,fix+incidental]
|
|
18
18
|
special:
|
|
19
|
-
emergency: {stash:"git stash save WIP:desc",wip_branch:"git checkout -b wip/name"}
|
|
20
|
-
experimental: {branch:"experiment/name",free_commits:true,success:"squash→merge",fail:"doc_lessons→delete"}
|
|
21
|
-
hotfix: {from:main,minimal:true,mark:"[URGENT]"}
|
|
19
|
+
emergency: {stash: "git stash save WIP:desc",wip_branch: "git checkout -b wip/name"}
|
|
20
|
+
experimental: {branch: "experiment/name",free_commits: true,success: "squash→merge",fail: "doc_lessons→delete"}
|
|
21
|
+
hotfix: {from: main,minimal: true,mark: "[URGENT]"}
|
|
@@ -3,17 +3,17 @@ v: 1.0.0
|
|
|
3
3
|
format: "<type>(<scope>): <subject>\n\n<body>\n\n<footer>"
|
|
4
4
|
types: [feat,fix,refactor,docs,style,test,perf,build,ci,chore,revert,security]
|
|
5
5
|
types_zh: [功能,修復,重構,文件,樣式,測試,效能,建置,CI,雜項,回退,安全]
|
|
6
|
-
subject: {len:"≤72(50ideal)",tense:imperative,cap:first,period:no}
|
|
6
|
+
subject: {len: "≤72(50ideal)",tense: imperative,cap: first,period: no}
|
|
7
7
|
lang_decision:
|
|
8
8
|
tree: [open_source?→EN, intl_team?→EN, single_lang_team?→team_pref|EN, mixed→bilingual]
|
|
9
9
|
matrix:
|
|
10
|
-
open_source: {l:EN,r:"intl contributors"}
|
|
11
|
-
intl_team: {l:EN,r:"common lang"}
|
|
12
|
-
local_EN: {l:EN,r:"tools,mobility"}
|
|
13
|
-
local_ZH: {l:ZH,r:"clarity,preference"}
|
|
14
|
-
mixed: {l:bilingual,r:"best of both"}
|
|
10
|
+
open_source: {l: EN,r: "intl contributors"}
|
|
11
|
+
intl_team: {l: EN,r: "common lang"}
|
|
12
|
+
local_EN: {l: EN,r: "tools,mobility"}
|
|
13
|
+
local_ZH: {l: ZH,r: "clarity,preference"}
|
|
14
|
+
mixed: {l: bilingual,r: "best of both"}
|
|
15
15
|
bilingual_format: "type(scope): EN subject. 中文 subject.\n\nEN body\n\n中文 body\n\nfooter"
|
|
16
|
-
refs: {closes:"#N→auto_close",fixes:"#N→auto_close",refs:"#N→link_only"}
|
|
16
|
+
refs: {closes: "#N→auto_close",fixes: "#N→auto_close",refs: "#N→link_only"}
|
|
17
17
|
breaking: "BREAKING CHANGE: description\n\nMigration guide:\n1. step"
|
|
18
18
|
examples:
|
|
19
19
|
good: ["feat(auth): Add OAuth2 Google login","fix(api): Resolve memory leak"]
|
|
@@ -2,33 +2,33 @@
|
|
|
2
2
|
# Token-optimized for AI assistants
|
|
3
3
|
v: 1.0.0
|
|
4
4
|
decision:
|
|
5
|
-
tree: [in_prod?→n:rewrite|y:next, understand?→n:char_tests|y:next, "cov>60%?"→n:add_tests|y:next, arch_ok?→n:strangler|y:incr_refactor]
|
|
5
|
+
tree: [in_prod?→n:rewrite|y:next, understand?→n:char_tests|y:next, '"cov>60%?"→n:add_tests|y:next', arch_ok?→n:strangler|y:incr_refactor]
|
|
6
6
|
refactor: [large_code,good_tests,critical_biz,team_knows,sound_arch,tight_deadline,low_risk]
|
|
7
7
|
rewrite: [small,no_tests,downtime_ok,no_knowledge,flawed_arch,flex_time,high_risk]
|
|
8
8
|
warn: "Second-System Effect: Don't add features, over-abstract, ignore lessons"
|
|
9
9
|
scales:
|
|
10
|
-
S: {t:"5-15m",s:method,tech:[extract,rename,inline,const]}
|
|
11
|
-
M: {t:"hrs-days",s:module,req:"cov>80%"}
|
|
12
|
-
L: {t:"wks-mos",s:system,patterns:[strangler,branch_abstract,expand_contract]}
|
|
10
|
+
S: {t: "5-15m",s: method,tech: [extract,rename,inline,const]}
|
|
11
|
+
M: {t: "hrs-days",s: module,req: "cov>80%"}
|
|
12
|
+
L: {t: "wks-mos",s: system,patterns: [strangler,branch_abstract,expand_contract]}
|
|
13
13
|
patterns:
|
|
14
|
-
strangler: {1:intercept,2:migrate_partial,3:complete_decommission}
|
|
15
|
-
branch_abstract: {1:"client→iface→old",2:"→[old,new_toggled]",3:"→new_only"}
|
|
16
|
-
expand_contract: {expand:"add_both",migrate:"switch_clients",contract:"remove_old"}
|
|
14
|
+
strangler: {1: intercept,2: migrate_partial,3: complete_decommission}
|
|
15
|
+
branch_abstract: {1: "client→iface→old",2: "→[old,new_toggled]",3: "→new_only"}
|
|
16
|
+
expand_contract: {expand: "add_both",migrate: "switch_clients",contract: "remove_old"}
|
|
17
17
|
legacy:
|
|
18
18
|
def: "code without tests"
|
|
19
19
|
char_test: [call,expect_fail,run,update_assert,repeat]
|
|
20
|
-
seams: {obj:polymorphism,preproc:macros,link:DI}
|
|
21
|
-
sprout: {method:"new_fn→call_from_old",class:"new_class→ref_from_old"}
|
|
22
|
-
wrap: {method:"rename→wrapper",class:decorator}
|
|
20
|
+
seams: {obj: polymorphism,preproc: macros,link: DI}
|
|
21
|
+
sprout: {method: "new_fn→call_from_old",class: "new_class→ref_from_old"}
|
|
22
|
+
wrap: {method: "rename→wrapper",class: decorator}
|
|
23
23
|
db:
|
|
24
|
-
expand_contract: {1:"add_new,write_both",2:"copy,verify,read_new",3:"drop_old"}
|
|
24
|
+
expand_contract: {1: "add_new,write_both",2: "copy,verify,read_new",3: "drop_old"}
|
|
25
25
|
workflow:
|
|
26
26
|
before: [success_criteria,"cov>80%",clean_dir,branch,communicate]
|
|
27
27
|
during: [one_change,test_every,revert_if_fail,commit_often,no_new_func]
|
|
28
28
|
after: [tests_pass,measurably_better,docs,reviewed]
|
|
29
29
|
metrics:
|
|
30
|
-
code: {complexity:"<10",dup:"<3%"}
|
|
31
|
-
test: {cov:"≥80%",speed:faster,flaky:decrease}
|
|
30
|
+
code: {complexity: "<10",dup: "<3%"}
|
|
31
|
+
test: {cov: "≥80%",speed: faster,flaky: decrease}
|
|
32
32
|
debt:
|
|
33
|
-
quadrant: {prudent_delib:"know_debt",reckless_delib:"no_time",prudent_inadv:"learned_now",reckless_inadv:"what_layering?"}
|
|
34
|
-
priority: {H:"blocks→immediate",M:"slows→next_sprint",L:"minor→opportunistic"}
|
|
33
|
+
quadrant: {prudent_delib: "know_debt",reckless_delib: "no_time",prudent_inadv: "learned_now",reckless_inadv: "what_layering?"}
|
|
34
|
+
priority: {H: "blocks→immediate",M: "slows→next_sprint",L: "minor→opportunistic"}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
# Testing Standards - Ultra Compressed
|
|
2
2
|
v: 1.1.0
|
|
3
|
-
pyramid: {UT:70%,IT:20%,E2E:10%}
|
|
3
|
+
pyramid: {UT: 70%,IT: 20%,E2E: 10%}
|
|
4
4
|
levels:
|
|
5
|
-
UT: {scope:fn/class,speed:"<100ms",deps:mocked}
|
|
6
|
-
IT: {scope:components,speed:"1-10s",deps:"real_db(container)"}
|
|
7
|
-
ST: {scope:full_system,speed:min,deps:prod_like}
|
|
8
|
-
E2E: {scope:user_journey,speed:"30s+",deps:all_real}
|
|
9
|
-
coverage: {line:"70→85%",branch:"60→80%",fn:"80→90%"}
|
|
5
|
+
UT: {scope: fn/class,speed: "<100ms",deps: mocked}
|
|
6
|
+
IT: {scope: components,speed: "1-10s",deps: "real_db(container)"}
|
|
7
|
+
ST: {scope: full_system,speed: min,deps: prod_like}
|
|
8
|
+
E2E: {scope: user_journey,speed: "30s+",deps: all_real}
|
|
9
|
+
coverage: {line: "70→85%",branch: "60→80%",fn: "80→90%"}
|
|
10
10
|
theory:
|
|
11
11
|
chain: "error(human)→defect(code)→failure(runtime)"
|
|
12
12
|
oracle: [spec,reference,consistency,heuristic]
|
|
13
|
-
static: {def:"no_exec",tech:[review,analysis],tools:[ESLint,SonarQube]}
|
|
14
|
-
dynamic: {def:"execute",tech:[unit,integration,system]}
|
|
13
|
+
static: {def: "no_exec",tech: [review,analysis],tools: [ESLint,SonarQube]}
|
|
14
|
+
dynamic: {def: "execute",tech: [unit,integration,system]}
|
|
15
15
|
design:
|
|
16
16
|
black_box:
|
|
17
17
|
equiv_partition: "divide inputs→classes"
|
|
18
18
|
boundary: "test at edges"
|
|
19
19
|
decision_table: "conditions→actions"
|
|
20
20
|
state_trans: "valid state sequences"
|
|
21
|
-
white_box: {stmt:"every_stmt",branch:"every_decision",cond:"T/F",path:"all_paths"}
|
|
22
|
-
risk: {formula:"likelihood×impact",HH:extensive,HL:good,LH:good,LL:basic}
|
|
21
|
+
white_box: {stmt: "every_stmt",branch: "every_decision",cond: "T/F",path: "all_paths"}
|
|
22
|
+
risk: {formula: "likelihood×impact",HH: extensive,HL: good,LH: good,LL: basic}
|
|
23
23
|
doubles:
|
|
24
24
|
stub: "predefined returns"
|
|
25
25
|
mock: "verify interactions"
|
|
26
26
|
fake: "simplified impl"
|
|
27
27
|
spy: "record+delegate"
|
|
28
|
-
use: {UT:mock_all,IT:"fake_db,stub_api",ST:"real,fake_external",E2E:all_real}
|
|
28
|
+
use: {UT: mock_all,IT: "fake_db,stub_api",ST: "real,fake_external",E2E: all_real}
|
|
29
29
|
FIRST: [Fast,Independent,Repeatable,Self_validating,Timely]
|
|
30
30
|
AAA: [Arrange,Act,Assert]
|
|
31
31
|
antipatterns: [interdependence,flaky,impl_details,over_mock,no_assert,magic_values]
|
package/package.json
CHANGED
package/standards-registry.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"version": "6.3.
|
|
3
|
+
"version": "6.3.6",
|
|
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.3.
|
|
61
|
+
"version": "6.3.6"
|
|
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.3.
|
|
68
|
+
"version": "6.3.6",
|
|
69
69
|
"note": "Skills are now included in the main repository under skills/"
|
|
70
70
|
}
|
|
71
71
|
},
|
|
@@ -2236,7 +2236,7 @@
|
|
|
2236
2236
|
"id": "license-compliance",
|
|
2237
2237
|
"name": "License Compliance Standards",
|
|
2238
2238
|
"nameZh": "授權合規標準",
|
|
2239
|
-
"version": "6.3.
|
|
2239
|
+
"version": "6.3.6",
|
|
2240
2240
|
"source": {
|
|
2241
2241
|
"human": "core/license-compliance.md",
|
|
2242
2242
|
"ai": "ai/standards/license-compliance.ai.yaml"
|
|
@@ -2248,7 +2248,7 @@
|
|
|
2248
2248
|
"id": "verification-oracle",
|
|
2249
2249
|
"name": "Verification Oracle Standards",
|
|
2250
2250
|
"nameZh": "驗證 Oracle 標準",
|
|
2251
|
-
"version": "6.3.
|
|
2251
|
+
"version": "6.3.6",
|
|
2252
2252
|
"source": {
|
|
2253
2253
|
"human": "core/verification-oracle.md",
|
|
2254
2254
|
"ai": "ai/standards/verification-oracle.ai.yaml"
|
|
@@ -2260,7 +2260,7 @@
|
|
|
2260
2260
|
"id": "model-provenance",
|
|
2261
2261
|
"name": "Model Provenance Policy Standards",
|
|
2262
2262
|
"nameZh": "模型來源政策標準",
|
|
2263
|
-
"version": "6.3.
|
|
2263
|
+
"version": "6.3.6",
|
|
2264
2264
|
"source": {
|
|
2265
2265
|
"human": "core/model-provenance.md",
|
|
2266
2266
|
"ai": "ai/standards/model-provenance.ai.yaml"
|
|
@@ -2272,7 +2272,7 @@
|
|
|
2272
2272
|
"id": "resource-cost-boundary",
|
|
2273
2273
|
"name": "Resource / Cost Boundary Declaration Standards",
|
|
2274
2274
|
"nameZh": "資源/成本邊界宣告標準",
|
|
2275
|
-
"version": "6.3.
|
|
2275
|
+
"version": "6.3.6",
|
|
2276
2276
|
"source": {
|
|
2277
2277
|
"human": "core/resource-cost-boundary.md",
|
|
2278
2278
|
"ai": "ai/standards/resource-cost-boundary.ai.yaml"
|