universal-dev-standards 6.8.0 → 6.9.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/bin/uds.js +12 -2
- package/bundled/ai/standards/acceptance-criteria-traceability.ai.yaml +14 -2
- package/bundled/ai/standards/adr-standards.ai.yaml +14 -2
- package/bundled/ai/standards/code-review.ai.yaml +13 -3
- package/bundled/ai/standards/commit-message.ai.yaml +8 -4
- package/bundled/ai/standards/deferred-item-exit.ai.yaml +225 -0
- package/bundled/ai/standards/feature-discovery-standards.ai.yaml +14 -2
- package/bundled/ai/standards/governance-layer.ai.yaml +128 -2
- package/bundled/ai/standards/logging.ai.yaml +2 -2
- package/bundled/ai/standards/retrospective-standards.ai.yaml +14 -2
- package/bundled/ai/standards/reverse-engineering-standards.ai.yaml +73 -2
- package/bundled/ai/standards/security-standards.ai.yaml +2 -2
- package/bundled/ai/standards/spec-driven-development.ai.yaml +14 -2
- package/bundled/ai/standards/tech-debt-standards.ai.yaml +87 -3
- package/bundled/ai/standards/turn-completion-integrity.ai.yaml +131 -0
- package/bundled/core/acceptance-criteria-traceability.md +5 -2
- package/bundled/core/adr-standards.md +26 -2
- package/bundled/core/code-review-checklist.md +5 -2
- package/bundled/core/context-aware-loading.md +1 -1
- package/bundled/core/deferred-item-exit.md +254 -0
- package/bundled/core/feature-discovery-standards.md +5 -1
- package/bundled/core/governance-layer.md +114 -2
- package/bundled/core/retrospective-standards.md +4 -2
- package/bundled/core/reverse-engineering-standards.md +81 -2
- package/bundled/core/spec-driven-development.md +8 -2
- package/bundled/core/tech-debt-standards.md +67 -8
- package/bundled/core/turn-completion-integrity.md +196 -0
- package/bundled/hooks/check-dangerous-cmd.mjs +60 -0
- package/bundled/hooks/check-logging-standard.mjs +59 -0
- package/bundled/hooks/check-turn-completion.mjs +233 -0
- package/bundled/hooks/inject-standards.mjs +183 -0
- package/bundled/hooks/telemetry-wrapper.mjs +77 -0
- package/bundled/hooks/turn-completion/detect.mjs +99 -0
- package/bundled/hooks/turn-completion/locales/en.mjs +159 -0
- package/bundled/hooks/turn-completion/locales/zh-TW.mjs +166 -0
- package/bundled/hooks/validate-commit-msg.mjs +104 -0
- package/bundled/locales/zh-CN/CHANGELOG.md +47 -3
- package/bundled/locales/zh-CN/CLAUDE.md +1 -1
- package/bundled/locales/zh-CN/README.md +2 -2
- package/bundled/locales/zh-CN/SECURITY.md +1 -1
- package/bundled/locales/zh-CN/core/adr-standards.md +1 -1
- package/bundled/locales/zh-CN/core/governance-layer.md +118 -6
- package/bundled/locales/zh-CN/core/retrospective-standards.md +1 -1
- package/bundled/locales/zh-CN/core/tech-debt-standards.md +71 -4
- package/bundled/locales/zh-CN/core/turn-completion-integrity.md +190 -0
- package/bundled/locales/zh-CN/docs/CHEATSHEET.md +8 -1
- package/bundled/locales/zh-CN/docs/CLI-INIT-OPTIONS.md +29 -68
- package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +25 -15
- package/bundled/locales/zh-CN/docs/USAGE-MODES-COMPARISON.md +1 -2
- package/bundled/locales/zh-CN/integrations/google-antigravity/{INSTRUCTIONS.md → AGENTS.md} +1 -1
- package/bundled/locales/zh-CN/integrations/google-antigravity/README.md +3 -3
- package/bundled/locales/zh-CN/skills/atdd-assistant/SKILL.md +2 -0
- package/bundled/locales/zh-CN/skills/bdd-assistant/SKILL.md +2 -0
- package/bundled/locales/zh-CN/skills/brainstorm-assistant/SKILL.md +22 -12
- package/bundled/locales/zh-CN/skills/brainstorm-assistant/guide.md +12 -9
- package/bundled/locales/zh-CN/skills/code-review-assistant/SKILL.md +1 -0
- package/bundled/locales/zh-CN/skills/commands/brainstorm.md +17 -13
- package/bundled/locales/zh-CN/skills/commands/config.md +0 -1
- package/bundled/locales/zh-CN/skills/commands/init.md +1 -2
- package/bundled/locales/zh-CN/skills/commit-standards/SKILL.md +2 -0
- package/bundled/locales/zh-CN/skills/contract-test-assistant/SKILL.md +1 -0
- package/bundled/locales/zh-CN/skills/dev-methodology/SKILL.md +2 -0
- package/bundled/locales/zh-CN/skills/observability-assistant/SKILL.md +1 -0
- package/bundled/locales/zh-CN/skills/project-structure-guide/SKILL.md +1 -0
- package/bundled/locales/zh-CN/skills/release-standards/SKILL.md +3 -0
- package/bundled/locales/zh-CN/skills/requirement-assistant/SKILL.md +2 -0
- package/bundled/locales/zh-CN/skills/reverse-engineer/SKILL.md +3 -0
- package/bundled/locales/zh-CN/skills/runbook-assistant/SKILL.md +1 -0
- package/bundled/locales/zh-CN/skills/slo-assistant/SKILL.md +1 -0
- package/bundled/locales/zh-CN/skills/tdd-assistant/SKILL.md +2 -0
- package/bundled/locales/zh-TW/CHANGELOG.md +47 -3
- package/bundled/locales/zh-TW/CLAUDE.md +1 -1
- package/bundled/locales/zh-TW/README.md +2 -2
- package/bundled/locales/zh-TW/SECURITY.md +1 -1
- package/bundled/locales/zh-TW/core/acceptance-criteria-traceability.md +2 -0
- package/bundled/locales/zh-TW/core/adr-standards.md +26 -5
- package/bundled/locales/zh-TW/core/code-review-checklist.md +2 -0
- package/bundled/locales/zh-TW/core/container-image-standards.md +2 -2
- package/bundled/locales/zh-TW/core/contract-testing-standards.md +2 -2
- package/bundled/locales/zh-TW/core/cross-flow-regression.md +8 -7
- package/bundled/locales/zh-TW/core/data-contract.md +2 -2
- package/bundled/locales/zh-TW/core/data-migration-testing.md +2 -2
- package/bundled/locales/zh-TW/core/data-pipeline.md +2 -2
- package/bundled/locales/zh-TW/core/deferred-item-exit.md +251 -0
- package/bundled/locales/zh-TW/core/documentation-writing-standards.md +228 -3
- package/bundled/locales/zh-TW/core/full-coverage-testing.md +15 -2
- package/bundled/locales/zh-TW/core/governance-layer.md +118 -5
- package/bundled/locales/zh-TW/core/iac-design-principles.md +2 -2
- package/bundled/locales/zh-TW/core/incident-response.md +2 -2
- package/bundled/locales/zh-TW/core/model-provenance.md +4 -2
- package/bundled/locales/zh-TW/core/pii-classification.md +42 -6
- package/bundled/locales/zh-TW/core/prd-standards.md +4 -2
- package/bundled/locales/zh-TW/core/product-metrics-standards.md +4 -2
- package/bundled/locales/zh-TW/core/release-readiness-gate.md +2 -2
- package/bundled/locales/zh-TW/core/resource-cost-boundary.md +2 -2
- package/bundled/locales/zh-TW/core/retrospective-standards.md +5 -3
- package/bundled/locales/zh-TW/core/reverse-engineering-standards.md +83 -5
- package/bundled/locales/zh-TW/core/runbook.md +2 -2
- package/bundled/locales/zh-TW/core/schema-evolution.md +2 -2
- package/bundled/locales/zh-TW/core/secret-management-standards.md +2 -2
- package/bundled/locales/zh-TW/core/slo-sli.md +2 -2
- package/bundled/locales/zh-TW/core/spec-driven-development.md +2 -0
- package/bundled/locales/zh-TW/core/tech-debt-standards.md +71 -4
- package/bundled/locales/zh-TW/core/turn-completion-integrity.md +190 -0
- package/bundled/locales/zh-TW/core/user-journey-testing.md +2 -2
- package/bundled/locales/zh-TW/core/user-story-mapping.md +2 -2
- package/bundled/locales/zh-TW/core/verification-oracle.md +2 -2
- package/bundled/locales/zh-TW/docs/CHEATSHEET.md +8 -1
- package/bundled/locales/zh-TW/docs/CLI-INIT-OPTIONS.md +29 -68
- package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +25 -15
- package/bundled/locales/zh-TW/docs/USAGE-MODES-COMPARISON.md +1 -2
- package/bundled/locales/zh-TW/integrations/google-antigravity/{INSTRUCTIONS.md → AGENTS.md} +1 -1
- package/bundled/locales/zh-TW/integrations/google-antigravity/README.md +3 -3
- package/bundled/locales/zh-TW/skills/adr-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/atdd-assistant/SKILL.md +2 -0
- package/bundled/locales/zh-TW/skills/bdd-assistant/SKILL.md +2 -0
- package/bundled/locales/zh-TW/skills/brainstorm-assistant/SKILL.md +22 -12
- package/bundled/locales/zh-TW/skills/brainstorm-assistant/guide.md +12 -9
- package/bundled/locales/zh-TW/skills/code-review-assistant/SKILL.md +1 -0
- package/bundled/locales/zh-TW/skills/commands/brainstorm.md +17 -13
- package/bundled/locales/zh-TW/skills/commands/config.md +0 -1
- package/bundled/locales/zh-TW/skills/commands/init.md +1 -2
- package/bundled/locales/zh-TW/skills/commit-standards/SKILL.md +2 -0
- package/bundled/locales/zh-TW/skills/contract-test-assistant/SKILL.md +2 -1
- package/bundled/locales/zh-TW/skills/dev-methodology/SKILL.md +2 -0
- package/bundled/locales/zh-TW/skills/dev-workflow-guide/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/knowledge-graph/guide.md +2 -2
- package/bundled/locales/zh-TW/skills/migration-assistant/SKILL.md +1 -1
- package/bundled/locales/zh-TW/skills/observability-assistant/SKILL.md +1 -0
- package/bundled/locales/zh-TW/skills/project-discovery/SKILL.md +1 -0
- package/bundled/locales/zh-TW/skills/project-structure-guide/SKILL.md +1 -0
- package/bundled/locales/zh-TW/skills/release-standards/SKILL.md +3 -0
- package/bundled/locales/zh-TW/skills/requirement-assistant/SKILL.md +2 -0
- package/bundled/locales/zh-TW/skills/reverse-engineer/SKILL.md +3 -0
- package/bundled/locales/zh-TW/skills/runbook-assistant/SKILL.md +1 -0
- package/bundled/locales/zh-TW/skills/slo-assistant/SKILL.md +1 -0
- package/bundled/locales/zh-TW/skills/tdd-assistant/SKILL.md +2 -0
- package/bundled/skills/atdd-assistant/SKILL.md +2 -0
- package/bundled/skills/bdd-assistant/SKILL.md +2 -0
- package/bundled/skills/brainstorm-assistant/SKILL.md +31 -13
- package/bundled/skills/brainstorm-assistant/guide.md +9 -6
- package/bundled/skills/code-review-assistant/SKILL.md +1 -0
- package/bundled/skills/commands/brainstorm.md +12 -9
- package/bundled/skills/commands/config.md +0 -1
- package/bundled/skills/commands/init.md +2 -3
- package/bundled/skills/commit-standards/SKILL.md +2 -0
- package/bundled/skills/contract-test-assistant/SKILL.md +1 -0
- package/bundled/skills/dev-methodology/SKILL.md +4 -0
- package/bundled/skills/observability-assistant/SKILL.md +1 -0
- package/bundled/skills/project-discovery/SKILL.md +1 -0
- package/bundled/skills/project-structure-guide/SKILL.md +1 -0
- package/bundled/skills/release-standards/SKILL.md +3 -0
- package/bundled/skills/requirement-assistant/SKILL.md +2 -0
- package/bundled/skills/reverse-engineer/SKILL.md +3 -0
- package/bundled/skills/runbook-assistant/SKILL.md +1 -0
- package/bundled/skills/slo-assistant/SKILL.md +1 -0
- package/bundled/skills/tdd-assistant/SKILL.md +2 -0
- package/bundled/templates/.ai-context.yaml.template +194 -0
- package/bundled/templates/CLAUDE.md.template +145 -0
- package/bundled/templates/DESIGN.md +237 -0
- package/bundled/templates/SKILL-BRIEF-TEMPLATE.md +57 -0
- package/bundled/templates/SKILL-CANDIDATES.md +39 -0
- package/bundled/templates/gates/check-error-exit.mjs +309 -0
- package/bundled/templates/mcp-config.json +10 -0
- package/bundled/templates/methodology-template.yaml +209 -0
- package/bundled/templates/migration-template.md +408 -0
- package/bundled/templates/requirement-checklist.md +410 -0
- package/bundled/templates/requirement-document-template.md +591 -0
- package/bundled/templates/requirement-template.md +881 -0
- package/bundled/templates/reverse-spec-template.md +409 -0
- package/bundled/templates/test-case-template.md +74 -0
- package/bundled/templates/test-plan-template.md +74 -0
- package/package.json +7 -5
- package/src/commands/audit.js +82 -0
- package/src/commands/check.js +66 -10
- package/src/commands/init.js +161 -16
- package/src/commands/update.js +286 -14
- package/src/compilers/claude-code-compiler.js +4 -1
- package/src/config/ai-agent-paths.js +62 -17
- package/src/core/constants.js +42 -11
- package/src/core/manifest.js +201 -3
- package/src/core/paths.js +2 -2
- package/src/i18n/messages.js +6 -29
- package/src/installers/hooks-installer.js +167 -75
- package/src/installers/integration-installer.js +9 -5
- package/src/prompts/init.js +14 -14
- package/src/utils/detector.js +21 -1
- package/src/utils/effect-boundary.js +1093 -0
- package/src/utils/hasher.js +166 -1
- package/src/utils/hook-stats.js +1 -1
- package/src/utils/integration-generator.js +79 -1
- package/src/utils/reference-sync.js +4 -1
- package/src/utils/yaml-generator.js +51 -9
- package/standards-registry.json +31 -8
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../../core/retrospective-standards.md
|
|
3
|
-
source_version: 1.
|
|
4
|
-
translation_version: 1.
|
|
5
|
-
last_synced: 2026-
|
|
3
|
+
source_version: 1.1.0
|
|
4
|
+
translation_version: 1.1.0
|
|
5
|
+
last_synced: 2026-08-24
|
|
6
6
|
status: current
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -90,6 +90,8 @@ Open ──► In Progress ──► Done
|
|
|
90
90
|
└──► Cancelled(附原因)
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
+
> Retrospective 記下的**延後項目**(`Action Items`、`Previous Action Items Review` 中仍為 Open 的列、附理由 Cancelled 的項目)適用 [deferred-item-exit](deferred-item-exit.md)。
|
|
94
|
+
|
|
93
95
|
### 追蹤規則
|
|
94
96
|
|
|
95
97
|
1. 在每次回顧的**開頭**檢視所有未完成的行動項目。
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../../core/reverse-engineering-standards.md
|
|
3
|
-
source_version: 1.
|
|
4
|
-
translation_version: 1.
|
|
5
|
-
last_synced: 2026-
|
|
3
|
+
source_version: 1.3.0
|
|
4
|
+
translation_version: 1.3.0
|
|
5
|
+
last_synced: 2026-08-20
|
|
6
6
|
status: current
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# 反向工程標準
|
|
10
10
|
|
|
11
|
-
**版本**: 1.
|
|
12
|
-
**最後更新**: 2026-
|
|
11
|
+
**版本**: 1.3.0
|
|
12
|
+
**最後更新**: 2026-08-20
|
|
13
13
|
**適用範圍**: 所有需要將程式碼轉換為規格文件的專案
|
|
14
14
|
|
|
15
15
|
> **語言**: [English](../../../core/reverse-engineering-standards.md) | [繁體中文](reverse-engineering-standards.md)
|
|
@@ -58,10 +58,13 @@ status: current
|
|
|
58
58
|
| **程式碼掃描** | 分析程式碼結構、API、資料模型 | 技術清單 | [已確認] |
|
|
59
59
|
| **測試分析** | 解析現有測試以取得驗收條件 | 草擬驗收條件 | [已確認]/[推論] |
|
|
60
60
|
| **隱含規則掃描** | 掃描非 HTTP 持久化寫入路徑中未文件化的規則 | 隱含規則清單 + 三問解答 | [已確認]/[推論]/[未知] |
|
|
61
|
+
| **授權範圍擷取** | 擷取每一個以操作者自身身分為界的查詢述詞 | 自我限縮述詞清單 + 必要的負向測試 | [已確認]/[推論]/[未知] |
|
|
61
62
|
| **缺口識別** | 列出需要人類輸入的未知項目 | 缺口分析文件 | [未知] 項目 |
|
|
62
63
|
| **規格生成** | 生成草擬規格 | 草擬 SPEC-XXX.md | 混合確定性 |
|
|
63
64
|
| **人類審查** | 利害關係人驗證與填補缺口 | 已驗證的規格 | [已確認] |
|
|
64
65
|
|
|
66
|
+
> **註(v1.3.0)**:**授權範圍擷取** 階段與隱含規則掃描並行——詳見下方[授權範圍擷取(自我指涉的查詢述詞)](#授權範圍擷取自我指涉的查詢述詞)。隱含規則掃描處理的是「因為跑在請求路徑**之外**而隱形」的規則;本階段處理的是「坐在一條被完整操作過的請求路徑**之上**卻仍然隱形」的規則:一個以操作者自身身分為界的 `WHERE` 述詞。它讀起來就像眾多過濾條件之一,而一次把它丟掉的重寫,會回傳形狀完全正確的資料——屬於所有人的資料。
|
|
67
|
+
>
|
|
65
68
|
> **註(v1.2.0)**:在程式碼掃描/測試分析之後、缺口識別之前,插入一個 **隱含規則掃描** 階段——詳見下方[隱含規則掃描(非 HTTP 持久化規則)](#隱含規則掃描非-http-持久化規則)。標準程式碼掃描只提取 HTTP 入口點與資料模型,但持久化欄位的值經常由**非 HTTP 路徑**(cron、佇列、計算欄、trigger、ORM hook)寫入,其業務規則從未被文件化——這是跨語言重寫或跨 DB 遷移時遺漏邏輯的最高發來源。
|
|
66
69
|
|
|
67
70
|
---
|
|
@@ -105,6 +108,80 @@ pre-flight(規劃期)。任何三問未獲解答的非 HTTP 寫入欄位會
|
|
|
105
108
|
|
|
106
109
|
---
|
|
107
110
|
|
|
111
|
+
## 授權範圍擷取(自我指涉的查詢述詞)
|
|
112
|
+
|
|
113
|
+
> **工作流程位置**:與隱含規則掃描並行——在程式碼掃描/測試分析之後、缺口識別之前。
|
|
114
|
+
|
|
115
|
+
**自我指涉述詞**是一個以「誰在問」為界限來限縮結果集的查詢條件:`WHERE tenant_id = :current_user_tenant`、`WHERE owner = :uid`、`WHERE dept_id = (SELECT dept_id FROM member WHERE account = :uid)`。它就是那一行把「列出帳號」變成「列出**你的**帳號」的條件。
|
|
116
|
+
|
|
117
|
+
本階段要回答的問題很窄、也很機械:
|
|
118
|
+
|
|
119
|
+
> **舊碼裡每一個以操作者自身身分為界的查詢述詞,新碼有沒有等價的述詞?**
|
|
120
|
+
|
|
121
|
+
不是「回傳的形狀一不一樣」,也不是「有沒有回傳資料」。是**等價的述詞**:同一個欄位,綁定到同一個「自己」的定義。
|
|
122
|
+
|
|
123
|
+
### 為什麼它需要自己的階段
|
|
124
|
+
|
|
125
|
+
授權不是一個被漏掉的關注點——任何像樣的測試分類法都已經點名跨租戶存取是該測的東西。這個關注點不會消失,**它是不會被想起來**。有三個性質讓這個特定缺陷能穿過每一道本該擋住它的閘門:
|
|
126
|
+
|
|
127
|
+
1. **那條安全關鍵的程式碼看起來像個過濾條件。** 界限住在 `WHERE` 子句裡,不在請求/回應契約裡。負責移植「取得所有帳號」的人看到的是一個 `SELECT` 和一個 `JOIN`;租戶述詞讀起來就是眾多條件之一。
|
|
128
|
+
2. **基於形狀的斷言看不見範圍。** 一個以某個有效管理員身分呼叫該 endpoint、斷言 `200` 加非空清單的測試,在「範圍限縮正確」與「範圍限縮被整條刪掉」兩種情況下**完全一樣地通過**。契約測試、對等快照、response DTO 比對在此結構上全是盲的:兩種情況下回應都是良構的,它只是屬於所有人。
|
|
129
|
+
3. **有一個共用的 resolver,不等於這個 call site 有在用它。** 已經被燒過一次的程式庫通常會長出一支共用的範圍解析工具。一個新的或被忽略的 call site 可以從頭重寫這個查詢而從未呼叫它——此時那支工具的存在反而具有主動誤導性,因為它讀起來像是覆蓋。
|
|
130
|
+
|
|
131
|
+
### 清單來源(derive,機械化)
|
|
132
|
+
|
|
133
|
+
掃描舊系統的資料存取層來列舉候選述詞——不要靠回憶。模式依技術棧調整;目標是任何「右手邊解析成**呼叫者自己的值**」的條件:
|
|
134
|
+
|
|
135
|
+
| 訊號 | 範例 |
|
|
136
|
+
|------|------|
|
|
137
|
+
| **直接自我綁定** | `WHERE <col> = :currentUser` / `:uid` / `$operatorId` / `session.user_id` |
|
|
138
|
+
| **租戶/組織/擁有者欄位** | `tenant_id`、`org_id`、`master_account`、`owner_id`、`dept_id`、`company_id` 與呼叫者導出的值比較 |
|
|
139
|
+
| **解析呼叫者範圍的子查詢** | `WHERE dept_id = (SELECT dept_id FROM member WHERE account = :uid)` |
|
|
140
|
+
| **依角色分支的查詢建構** | 依 `role`/`account_type` 分支,而**每個分支**套用不同範圍——要列舉每一個分支,不是只列 happy path 走到的那個 |
|
|
141
|
+
| **在 SQL 之外套用的範圍** | ORM global scope、query builder mixin、repository 基底類別、row-level security 政策、注入過濾條件的 middleware |
|
|
142
|
+
|
|
143
|
+
最後一列很重要:一個述詞可以由 `SELECT` 語句從未提及的東西來執行。只 grep SQL 會回報一個**比實際更小**的集合,而在這裡,更小的集合讀起來恰好就像更安全的集合。
|
|
144
|
+
|
|
145
|
+
### 逐項記錄
|
|
146
|
+
|
|
147
|
+
對每個候選項記錄——`[已確認]` 必須附 `file:line` 引用:
|
|
148
|
+
|
|
149
|
+
| 欄位 | 內容 |
|
|
150
|
+
|------|------|
|
|
151
|
+
| **位置** | 舊碼中的 `file:line` |
|
|
152
|
+
| **述詞** | 條件的原文 |
|
|
153
|
+
| **自我綁定** | 它解析到哪一個呼叫者導出的值,以及那個值是怎麼取得的 |
|
|
154
|
+
| **觸發分支** | 哪一個角色/參數/程式路徑會走到這個述詞 |
|
|
155
|
+
| **確定性** | `[已確認]`/`[推論]`/`[未知]` |
|
|
156
|
+
|
|
157
|
+
每個 `[未知]`——你無法從程式碼判定的範圍——都交給缺口識別由人類處理。絕不臆測,也絕不假設它不存在。
|
|
158
|
+
|
|
159
|
+
### Oracle(detect)——述詞等價性,逐 call site
|
|
160
|
+
|
|
161
|
+
對每個記錄下來的述詞,在移植後的程式碼中驗證:
|
|
162
|
+
|
|
163
|
+
1. **存在字面上的等價物**——同一個欄位,綁定到同一個「自己」的定義。一個「剛好對現有資料回傳相同列」的不同欄位不是等價物,它是一個帶到期日的巧合。
|
|
164
|
+
2. **每一個分支都被涵蓋。** 若舊碼依角色套用不同範圍,每個分支都需要各自被驗證過的等價物。把五個角色分支塌縮成一個粗糙的「這是不是管理員?」檢查,等於用一個權限取代了一道界限。
|
|
165
|
+
3. **這個 call site 有呼叫共用 resolver。** 若新系統把範圍限縮集中在某支工具裡,要確認**這一個** call site 真的有呼叫它。那支工具存在於程式庫別處,不構成關於這個 endpoint 的證據。
|
|
166
|
+
|
|
167
|
+
### 必要的負向測試
|
|
168
|
+
|
|
169
|
+
**規則 RE-AUTH-001(必要)**——每一個已確認的自我限縮述詞都必須被一個**負向測試**鎖住:由操作者 **A** 發出請求,斷言的是操作者 **B** 的紀錄**不存在**於回應中。A 與 B 都是有效、已認證、且有權使用該 endpoint 的操作者。
|
|
170
|
+
|
|
171
|
+
斷言的對象必須是**不存在**。斷言 `200`、斷言清單非空、斷言回應 schema 相符的測試,都不構成充分證據,且**不得**被計為該述詞的覆蓋——因為把範圍限縮子句刪掉之後,它們每一個都照樣通過。
|
|
172
|
+
|
|
173
|
+
在信任這個測試之前,有一個好用的自我檢查:**在一份暫存副本裡把範圍限縮述詞刪掉,重跑一次。** 如果測試還是通過,那它就不是在測範圍,不管它的名字怎麼寫。
|
|
174
|
+
|
|
175
|
+
### Gate 時機
|
|
176
|
+
|
|
177
|
+
擷取為 pre-flight(規劃期);負向測試為 pre-UAT。
|
|
178
|
+
|
|
179
|
+
**規則 RE-AUTH-002(必要)**——任何「移植後等價物未經驗證」或「沒有負向測試」的自我限縮述詞,一律標為 `not_implemented` 並 **block cutover**。一道未經驗證的授權界限是已知遺漏風險,不是可接受的缺口——它的失敗模式是跨租戶資料外洩,而且它會以綠燈出貨。
|
|
180
|
+
|
|
181
|
+
> **來歷。** 本階段源自一次真實的 PHP → C# 遷移:一個以租戶為界的帳號列表 endpoint 在重寫過程中弄丟了它的隔離述詞。移植版把「依角色限縮範圍」換成粗糙的「這個帳號是不是任何一個已啟用的管理員?」檢查,於是不論是誰在問,它都回傳資料庫裡的每一個帳號。它出貨了、通過了所有既有測試(那個方法一個測試都沒有),最後是客戶回報「我看到了不該看到的帳號資訊」才被發現。
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
108
185
|
## 核心原則
|
|
109
186
|
|
|
110
187
|
### 1. 確定性框架
|
|
@@ -446,6 +523,7 @@ Feature: 購物車
|
|
|
446
523
|
|
|
447
524
|
| 版本 | 日期 | 變更內容 |
|
|
448
525
|
|------|------|----------|
|
|
526
|
+
| 1.3.0 | 2026-08-20 | 新增:授權範圍擷取階段(自我指涉的查詢述詞)——derive 訊號含 SQL 之外的範圍執行點、逐項記錄附 `file:line`、涵蓋每個角色分支與逐 call site resolver 使用的述詞等價性 oracle、規則 RE-AUTH-001(必要負向測試,斷言另一操作者的紀錄「不存在」)與 RE-AUTH-002(未驗證述詞 block cutover)(issue [#166](https://github.com/AsiaOstrich/universal-dev-standards/issues/166)) |
|
|
449
527
|
| 1.2.0 | 2026-06-27 | 新增:隱含規則掃描階段(非 HTTP 持久化寫入路徑擷取)——4 類 derive 清單 + 三問 oracle + 非 HTTP Devil's Advocate + PHP type-juggling 補述 + 確定性/`file:line`(XSPEC-284 R4/AC-8) |
|
|
450
528
|
| 1.1.0 | 2026-06-18 | 新增:失敗處理與升級章節——解析失敗/高未知比例/被推翻推論的升級 + 規則 RE-FAIL-001(XSPEC-292 T7) |
|
|
451
529
|
| 1.0.0 | 2026-01-19 | 初始發布 |
|
|
@@ -45,6 +45,8 @@ SDD 在不同的成熟度層級運作:規格優先(完成後丟棄)、規
|
|
|
45
45
|
| **AC YAML Sidecar** | 建議在 AC 超過 3 條時使用 .ac.yaml(機器可讀 AC) |
|
|
46
46
|
| **AI Agent 行為** | 可選章節,用於在規格中定義 Agent 角色、規則、品質檢查、限制 |
|
|
47
47
|
|
|
48
|
+
> 規格記下的**延後項目**(未納入/不在本版的條目、open questions、仍待確認的 assumptions)適用 [deferred-item-exit](deferred-item-exit.md)。
|
|
49
|
+
|
|
48
50
|
## AC 格式
|
|
49
51
|
|
|
50
52
|
UDS 支援兩種 AC 記法。**GWT 為預設與首選**(Forward Derivation/BDD 場景生成依賴它)。**EARS**(Easy Approach to Requirements Syntax,IBM Rational)為可選補充,對事件/狀態/恆常/異常需求表達更精準。
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
source: ../../../core/tech-debt-standards.md
|
|
3
|
-
source_version: 1.
|
|
4
|
-
translation_version: 1.
|
|
5
|
-
last_synced: 2026-
|
|
3
|
+
source_version: 1.1.0
|
|
4
|
+
translation_version: 1.1.0
|
|
5
|
+
last_synced: 2026-08-20
|
|
6
6
|
status: current
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# 技術債管理標準
|
|
10
10
|
|
|
11
|
-
> 版本: 1.
|
|
11
|
+
> 版本: 1.1.0 | 最後更新: 2026-08-20
|
|
12
12
|
|
|
13
13
|
## 概述
|
|
14
14
|
|
|
@@ -48,6 +48,73 @@ status: current
|
|
|
48
48
|
| 10 | **Created Date** | 登記日期 |
|
|
49
49
|
| 11 | **Target Resolution Date** | 計劃解決日期 |
|
|
50
50
|
|
|
51
|
+
### 登記表儲存選項
|
|
52
|
+
|
|
53
|
+
登記表可存放於下列任一位置,但每個選項**只有在同時滿足右欄的到期檢查條件時才合法**:
|
|
54
|
+
|
|
55
|
+
| 選項 | 適用對象 | 到期檢查條件 |
|
|
56
|
+
|------|---------|-------------|
|
|
57
|
+
| `docs/tech-debt-registry.md` | 小型團隊 | 有一支 repo 檢查會解析該表格,並在有列超過 Target Resolution Date 時失敗——**或**該檔帶有「無人看管宣告」 |
|
|
58
|
+
| Issue tracker(GitHub Issues、Jira) | 較大團隊 | 有一個排程查詢實際會**執行**並發出告警;沒有人打開的儲存查詢不算檢查——**或**帶有「無人看管宣告」 |
|
|
59
|
+
| 專用試算表 | 非技術利害關係人 | 僅當該表以明訂頻率匯出到某個會被檢查讀取的位置時才合法——**或**帶有「無人看管宣告」 |
|
|
60
|
+
|
|
61
|
+
> **這一欄為什麼必須加。** 一份沒有任何程式讀得到的登記表,滿足本節其餘每一條要求:11 個欄位齊全、有 Owner、有 Target Resolution Date。它沒有任何地方是錯的——直到日期過了,然後什麼都沒發生。試算表選項**刻意不移除**(試算表常是出錢的人唯一會打開的格式);不再合法的是「任何一種儲存方式成為日期無聲過期的地方」。
|
|
62
|
+
|
|
63
|
+
### 到期處置
|
|
64
|
+
|
|
65
|
+
一個過了卻沒有任何後果的 **Target Resolution Date**,與根本沒有日期無從分辨。本小節定義「日期到了」是什麼意思。
|
|
66
|
+
|
|
67
|
+
#### 三種合法處置
|
|
68
|
+
|
|
69
|
+
項目到達 Target Resolution Date 時,必須發生且只能發生下列三者之一,並且必須留下痕跡:
|
|
70
|
+
|
|
71
|
+
| 處置 | 意義 | 必留痕跡 |
|
|
72
|
+
|------|------|---------|
|
|
73
|
+
| **做掉(Resolve)** | 把事情做完 | 關閉登記項 + `Tech-Debt: TD-NNN resolved` commit footer |
|
|
74
|
+
| **撤銷(Withdraw)** | 決定不做,並刪掉這筆記載 | 標記為撤銷,附理由與日期。它不再被計為技術債,因為它已經不是了 |
|
|
75
|
+
| **延期(Extend)** | 設定新的 Target Resolution Date | 新日期**與**書面理由必須一起記下;先前的日期保持可見(用附加,不要覆蓋) |
|
|
76
|
+
|
|
77
|
+
沒有第四種處置。「仍然開著、日期過了、沒有人看」不是本標準允許的狀態——那正是本小節存在要指名的失敗。
|
|
78
|
+
|
|
79
|
+
**規則 TD-EXP-001(必要)**——項目超過 Target Resolution Date 而三種處置皆未施用,該登記表即不合規。到期是一個發現,不是中性的背景狀態。
|
|
80
|
+
|
|
81
|
+
**規則 TD-EXP-002(必要,禁止事項)**——到期**不得**被實作成**自動延期**或**自動關閉**。
|
|
82
|
+
|
|
83
|
+
- 自動延期使日期變得不可證偽:它永遠不會被錯過,所以它從未量到任何東西。
|
|
84
|
+
- 自動關閉在沒有任何人做出決定的情況下刪掉了那筆記載。
|
|
85
|
+
|
|
86
|
+
兩者都讓時鐘停止,且都不留下「時鐘停了」的痕跡。一個唯一的消費者是「把它往後推的排程」的日期,只是裝飾。
|
|
87
|
+
|
|
88
|
+
**規則 TD-EXP-003(必要)**——延期時理由必須記在新日期旁邊。只改日期不是延期,那是一次蓋了時間戳的刪除。
|
|
89
|
+
|
|
90
|
+
**規則 TD-EXP-004(建議)**——被延期三次以上、期間沒有記錄任何進度的項目,應重新分流為**撤銷**候選。反覆延期是「沒有人打算做這件事」的證據;老實記下這件事,比第四個日期對下一位讀者更有用。
|
|
91
|
+
|
|
92
|
+
#### 無人看管宣告
|
|
93
|
+
|
|
94
|
+
不是每個團隊都有能力跑一支檢查。**沒有自動到期檢查的登記表仍然合規——但前提是它把這件事寫出來。**
|
|
95
|
+
|
|
96
|
+
「無人看管宣告」是寫在登記表內部、可見且帶日期的一段陳述:
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
無人看管——沒有任何自動檢查在讀這份登記表的到期項目。
|
|
100
|
+
由 <負責人> 以 <頻率> 人工複查。最後複查日期:<日期>。
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**規則 TD-EXP-005(必要)**——登記表必須處於下列兩種狀態之一,且必須讓讀者看得到它處於哪一種:
|
|
104
|
+
|
|
105
|
+
1. **已受檢(Checked)**——有一支具名、跑得起來的檢查在讀這份登記表,並在項目超過 Target Resolution Date 時失敗。
|
|
106
|
+
2. **無人看管(Unattended)**——沒有這樣的檢查,但帶有無人看管宣告,且宣告中寫明負責人、複查頻率與最後複查日期。
|
|
107
|
+
|
|
108
|
+
兩種狀態都不處於的登記表即為不合規。這份宣告不是形式:它就是「知道沒有東西在看的讀者」與「以為有東西在看的讀者」之間的全部差別。
|
|
109
|
+
|
|
110
|
+
**規則 TD-EXP-006(必要)**——無人看管宣告裡的「最後複查日期」本身,受該宣告自己所寫的頻率約束。最後複查日期比自己宣告的頻率還舊的宣告,本身就是一個到期項目,三種處置同樣適用於它。
|
|
111
|
+
|
|
112
|
+
> **本標準不提供任何檢查器,這是已知代價——寫在這裡,而不是留給採用者自己撞到。**
|
|
113
|
+
>
|
|
114
|
+
> UDS 定義的是要求,它不提供一支執行該要求的程式。想要**已受檢**狀態的採用者必須自己寫那支檢查,而多數團隊不會寫——那正是上面描述的失敗模式,現在同樣適用於本小節自己。
|
|
115
|
+
>
|
|
116
|
+
> 所以這裡的最低標準**不是**「去建一支檢查器」,而是**「絕不讓一份登記表在無聲中變成無人看管」**。宣告 `無人看管` 只要一段文字,而且完全合規。無人看管**卻不宣告**才是本標準真正禁止的唯一結果,因為只有它會讓讀者對「有沒有東西在看」產生誤解。
|
|
117
|
+
|
|
51
118
|
## 3. 預算分配
|
|
52
119
|
|
|
53
120
|
| 團隊狀態 | 預算 | 說明 |
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
---
|
|
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
|
|
7
|
+
status: current
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 回合收尾完整性
|
|
11
|
+
|
|
12
|
+
> **Language**: [English](../../../core/turn-completion-integrity.md) | 繁體中文
|
|
13
|
+
|
|
14
|
+
**版本**: 1.3.0
|
|
15
|
+
**最後更新**: 2026-09-08
|
|
16
|
+
**適用範圍**: 任何由 agent 結束回合、把控制權交還給人的執行環境
|
|
17
|
+
**Scope**: universal
|
|
18
|
+
**產業標準**: 不宣稱任何來源——由實際觀察到的失敗歸納,見「證據」
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 目的
|
|
23
|
+
|
|
24
|
+
agent 寫下「我接著做 X」,然後結束回合,而 X 沒有做。
|
|
25
|
+
|
|
26
|
+
人讀到的是一句描述著從未發生的工作的話。沒有任何錯誤、沒有任何檢查變紅,
|
|
27
|
+
逐字稿讀起來像有進展。下一個回合從一個「人以為比實際更前面」的狀態開始。
|
|
28
|
+
|
|
29
|
+
這不是知識上的失敗——agent 說對了下一步。這是**收尾**的失敗:
|
|
30
|
+
回合結束在工作本該開始的那一刻。
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 規則
|
|
35
|
+
|
|
36
|
+
**R1.** 若 agent 最後一則訊息做出了第一人稱的下一步宣告,
|
|
37
|
+
回合**不得**結束,除非那件事做了,或說出它卡在什麼。
|
|
38
|
+
|
|
39
|
+
**R2.** 「卡在什麼」的意思是逐項指名每一件事在等誰、等什麼。
|
|
40
|
+
「主要的都做完了」不是卡點陳述;
|
|
41
|
+
「部署等你的金鑰,文件不卡任何人而我現在就做」才是。
|
|
42
|
+
|
|
43
|
+
**R3.** 只寫在 agent 指令裡的規則不是執法。R1 必須**在回合結束的那一刻**、
|
|
44
|
+
由**不是 agent 的東西**來判斷。
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## R3 為什麼存在
|
|
49
|
+
|
|
50
|
+
這條規則的指令形式曾寫進某專案的 agent 指令,
|
|
51
|
+
而**在讀到它的同一個 session 內就被違反**。
|
|
52
|
+
接著它被寫成已發布的標準、標為 optional、沒有任何檢查器在讀,
|
|
53
|
+
七天後同樣的違反再來一次。
|
|
54
|
+
|
|
55
|
+
指令是一種輸入。失敗發生在一個決策點——「我正要結束這個回合」——
|
|
56
|
+
而一個在那一刻不會被讀到的輸入,就是沒有在生效。
|
|
57
|
+
一般形式是:**一項有文件而在其決策點上沒有執法的要求,是建議;
|
|
58
|
+
它的遵循度不是很高,是沒有被量過。**
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 這個檢查**不得**做的事
|
|
63
|
+
|
|
64
|
+
**R4. 不得因為「永遠還有待辦」而擋。** repo 永遠有未關的 TODO,
|
|
65
|
+
待辦清單永遠有項目。一道每個回合都為真的閘門會被關掉,然後它什麼都不保護。
|
|
66
|
+
這個檢查**只**在 agent 於那則訊息裡做出的宣告上觸發。
|
|
67
|
+
|
|
68
|
+
**R5. 一律 fail open。** 任何錯誤——讀不到逐字稿、欄位缺、JSON 壞掉、
|
|
69
|
+
結構不符——都**必須**讓回合結束。一支會把 session 困住的 hook 比沒有 hook 糟,
|
|
70
|
+
因為人唯一的救援手段是把它關掉,而他會永久關掉它。
|
|
71
|
+
|
|
72
|
+
**R6. 阻擋要有上界。** 檢查**必須**同時具備
|
|
73
|
+
(a) 兩次阻擋之間的冷卻期,與
|
|
74
|
+
(b) **滾動時窗**內的阻擋次數上限。
|
|
75
|
+
|
|
76
|
+
以 session 計且永不重置的上限不是安全閥——它是一個有延遲的關閉開關,
|
|
77
|
+
而且會在「這條規則最重要的那種長 session」裡安靜地自我解除。
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 使用者可以結束回合,而 agent 的用字說不出這件事
|
|
82
|
+
|
|
83
|
+
**R9.** 檢查**必須**豁免由人要求結束的回合,
|
|
84
|
+
而且**必須**從人自己最近一則訊息判斷,不是從 agent 的訊息判斷。
|
|
85
|
+
|
|
86
|
+
這條規則的存在是因為它的缺席被量到過一次——就在本標準上線後的第一次真實觸發。
|
|
87
|
+
人寫的是「先暫停,我要回家了」;agent 照做並列出回來要接的事;
|
|
88
|
+
檢查把它讀成未兌現的承諾並擋下。
|
|
89
|
+
|
|
90
|
+
偵測器對樣式的判斷沒有錯。**由指令結束的回合,與由未兌現承諾結束的回合,
|
|
91
|
+
在 agent 的用字上一模一樣**,因為兩種情況下 agent 都在指名自己現在不做的工作。
|
|
92
|
+
那則訊息裡沒有任何東西分得出來,所以只讀那則訊息的檢查也分不出來。
|
|
93
|
+
|
|
94
|
+
**R10.** 叫停樣式**必須**寫窄,而且它的語料**必須**包含
|
|
95
|
+
「只是含有停止字眼的工作指令」。誤豁免不是漏擋一次,
|
|
96
|
+
而是把檢查在該 session 的剩餘時間全部靜音。
|
|
97
|
+
實作期間該樣式曾比對到「先停用那份硬編碼清單,改成走訪註冊表」
|
|
98
|
+
——一句要求做事的指令,被讀成叫停。
|
|
99
|
+
|
|
100
|
+
**R11.** 檢查自己的攔阻訊息會以人的回合回到逐字稿。
|
|
101
|
+
它**必須**認得出自己的輸出,並在尋找人的最後一則訊息時略過它。
|
|
102
|
+
|
|
103
|
+
沒有這一條,R9 只會生效一次。攔阻訊息會在下一次執行成為「人最近一則訊息」,
|
|
104
|
+
真正那句叫停被蓋在它後面,豁免就消失——而且是靜默地、
|
|
105
|
+
只在它被建立的那種情境裡消失。
|
|
106
|
+
|
|
107
|
+
這與「偵測器比對到解釋它的散文」同一族,再往前一步:**檢查讀到自己的輸出。**
|
|
108
|
+
在攔阻訊息裡帶一個固定標記字串,略過任何含有它的人類回合。
|
|
109
|
+
|
|
110
|
+
**R12.** 檢查**必須**認得出 R2 所定義的那個結束方式。
|
|
111
|
+
一個執行 R2 卻看不見逐項卡點清單的檢查,會擋下標準自己要求的唯一停法
|
|
112
|
+
——它在懲罰正確行為,而那比漏抓一次違規更快被拆掉。
|
|
113
|
+
|
|
114
|
+
辨識需要三個條件,實測拿掉任何一個都會壞:
|
|
115
|
+
|
|
116
|
+
| 條件 | 為什麼 |
|
|
117
|
+
|---|---|
|
|
118
|
+
| 兩項以上的清單 | 只有一項帶歸屬的是句子,不是逐項列出 |
|
|
119
|
+
| 歸屬詞出現在訊息任何位置,不要求每項都有 | 真實寫法把它放在前言——「剩下的每一項都卡在你手上,逐項列:」——而要求每項都有,第一次拿真實訊息一比就漏 |
|
|
120
|
+
| 沒有含糊的完成語 | 「其餘都做完了」正是 R2 拒絕的摘要;靠這種句子把剩下的帶過的清單,是穿著清單外衣的摘要 |
|
|
121
|
+
|
|
122
|
+
🔴 **歸屬詞的搜尋必須排除檢查自己的結構。**
|
|
123
|
+
「要你決定什麼」這個標題本身含有「要你」,於是一份「已經做完了什麼」的清單,
|
|
124
|
+
靠著它上方的標題就滿足了歸屬條件。**偵測器讀到了自己的結構**——與 R11 同一個失敗,低一層。
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 語言涵蓋是正確性問題,不是翻譯工作
|
|
129
|
+
|
|
130
|
+
這個檢查讀的是 agent 寫的散文,所以**它的偵測器與語言綁定**。
|
|
131
|
+
一個只帶著某一種語言樣式的偵測器,出貨給以另一種語言工作的採用者,
|
|
132
|
+
會得到一支裝好了、每回合都執行、exit 0、而**結構上永遠不會觸發**的 hook。
|
|
133
|
+
每一個可觀察的訊號,都與「agent 表現良好」一模一樣。
|
|
134
|
+
|
|
135
|
+
**R7.** 每一個支援的語言**必須**以 locale 包出貨,
|
|
136
|
+
各自帶著**自己的語料**(必須擋的案例與必須放行的案例),
|
|
137
|
+
而該包的自測**必須**在 CI 裡跑。語料不過的 locale 包不出貨。
|
|
138
|
+
|
|
139
|
+
**R8.** 語言沒有對應包的採用者**必須**被告知這個檢查對他們是失效的。
|
|
140
|
+
在這裡沉默,等於把本標準要防的失敗在上一層重演一次。
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 偵測器比對什麼
|
|
145
|
+
|
|
146
|
+
形狀是:**第一人稱未來標記,接一個動作動詞,在同一個句子裡**,再減掉三個排除項。
|
|
147
|
+
|
|
148
|
+
| 元素 | 作用 | 缺了會怎樣 |
|
|
149
|
+
|---|---|---|
|
|
150
|
+
| 第一人稱+未來標記 | 把宣告與描述分開 | 會比對到被引述回來的使用者原話 |
|
|
151
|
+
| 動作動詞 | 把「做」與「講」分開 | 「我來解釋為什麼」會算成工作 |
|
|
152
|
+
| 限定同一句 | 讓兩半保持相關 | 一個否定子句與後面一個真承諾會併成一個不匹配 |
|
|
153
|
+
| 排除報告動詞 | 「我會說/提/記」不是工作 | 檢查會在自己的摘要上觸發 |
|
|
154
|
+
| 排除否定 | 「我不會改那個」是決定,不是承諾 | 一句拒絕會被讀成承諾 |
|
|
155
|
+
| 排除引用與表格 | 樣式的**例子**不是樣式的**實例** | 檢查會在自己的文件上觸發 |
|
|
156
|
+
|
|
157
|
+
上表每一個排除項,都是因為它的缺席在測試中造成過一次誤擋才加上去的。
|
|
158
|
+
少做其中任何一項的實作,會重現那次誤擋。
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 證據
|
|
163
|
+
|
|
164
|
+
單一專案的觀察,2026-08 至 2026-09:
|
|
165
|
+
|
|
166
|
+
| 觀察 | 次數 |
|
|
167
|
+
|---|---|
|
|
168
|
+
| 使用者就「說了下一步卻沒做」提出同一個抱怨 | 5 |
|
|
169
|
+
| 指令形式已存在、而在同一個 session 內被違反 | ≥1 |
|
|
170
|
+
| 偵測器版本被自己原始碼或例子中的樣式打敗 | 5 |
|
|
171
|
+
| 上線前被語料抓到的偵測器誤擋 | 3 |
|
|
172
|
+
|
|
173
|
+
最後一列就是 R7 的論據。五個偵測器缺陷裡有三個**只因為語料存在**才被抓到;
|
|
174
|
+
出貨出去的那兩個,正是沒有任何案例涵蓋的那兩個。
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 檢查清單
|
|
179
|
+
|
|
180
|
+
- [ ] 檢查在回合結束時執行,不是寫成給 agent 的指令
|
|
181
|
+
- [ ] 每一條失敗路徑都不阻擋、直接放行
|
|
182
|
+
- [ ] 冷卻期與滾動時窗上限兩者都在
|
|
183
|
+
- [ ] 每個出貨語言都有語料,而語料在 CI 裡跑
|
|
184
|
+
- [ ] 語言不支援的採用者被告知檢查失效
|
|
185
|
+
- [ ] 檢查不讀取 repo 狀態(未關的 TODO、待辦清單)
|
|
186
|
+
- [ ] 由人要求結束的回合被豁免,且由人的訊息判斷
|
|
187
|
+
- [ ] 叫停語料包含「含有停止字眼的工作指令」
|
|
188
|
+
- [ ] 檢查認得出自己的攔阻訊息,不把它讀成人說的話
|
|
189
|
+
- [ ] 檢查認得出 R2 定義的逐項卡點結束,而且不擋它
|
|
190
|
+
- [ ] 歸屬詞的搜尋排除檢查自己的標題與結構
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# UDS 速查表
|
|
2
2
|
|
|
3
|
-
> Quick reference for all UDS features | Last updated: 2026-
|
|
3
|
+
> Quick reference for all UDS features | Last updated: 2026-09-14
|
|
4
4
|
|
|
5
5
|
**Language**: [English](../../../docs/user/CHEATSHEET.md) | 繁體中文 | [简体中文](../../zh-CN/docs/CHEATSHEET.md)
|
|
6
6
|
|
|
@@ -218,6 +218,7 @@
|
|
|
218
218
|
| `data-migration-testing` | Data Migration Testing |
|
|
219
219
|
| `data-pipeline` | Data Pipeline Standards |
|
|
220
220
|
| `database-standards` | This standard defines guidelines for database desi |
|
|
221
|
+
| `deferred-item-exit` | Several standards require documents that **produce |
|
|
221
222
|
| `deployment-standards` | This standard defines guidelines for safely deploy |
|
|
222
223
|
| `deprecation-standards` | Deprecation & Sunset Standards |
|
|
223
224
|
| `design-document-standards` | Design Document Standards |
|
|
@@ -316,6 +317,7 @@
|
|
|
316
317
|
| `timeout-standards` | Timeout Standards |
|
|
317
318
|
| `token-budget` | Token Budget Zone Standard |
|
|
318
319
|
| `translation-lifecycle-standards` | Translation lifecycle standards: MISSING vs OUTDAT |
|
|
320
|
+
| `turn-completion-integrity` | An agent writes *"I'll do X next"* and then ends t |
|
|
319
321
|
| `user-journey-testing` | User Journey Testing Standard |
|
|
320
322
|
| `user-story-mapping` | User Story Mapping Standards |
|
|
321
323
|
| `verification-evidence` | Establish an "Iron Law" that no task can be claime |
|
|
@@ -337,6 +339,7 @@
|
|
|
337
339
|
| `check-ai-agent-sync.ps1` | Check Ai Agent Sync |
|
|
338
340
|
| `check-ai-agent-sync.sh` | AI Agent Sync Checker |
|
|
339
341
|
| `check-ai-yaml-parses.mjs` | Every shipped .ai.yaml must parse, and must parse |
|
|
342
|
+
| `check-bump-sync-roundtrip.mjs` | check-bump-sync-roundtrip — 測「跑完 bump 之後 check 必須通 |
|
|
340
343
|
| `check-cli-docs-sync.ps1` | Check Cli Docs Sync |
|
|
341
344
|
| `check-cli-docs-sync.sh` | CLI-to-Documentation Sync Checker |
|
|
342
345
|
| `check-commands-sync.ps1` | Check Commands Sync |
|
|
@@ -346,6 +349,7 @@
|
|
|
346
349
|
| `check-docs-integrity.sh` | Documentation Integrity Checker |
|
|
347
350
|
| `check-docs-sync.ps1` | Check Docs Sync |
|
|
348
351
|
| `check-docs-sync.sh` | Documentation Sync Checker |
|
|
352
|
+
| `check-error-exit.mjs` | 🔴 沒填就是沒設定,而沒設定會 exit 2, |
|
|
349
353
|
| `check-external-references.mjs` | External Reference Checker (SPEC-SELFDIAG-001 REQ- |
|
|
350
354
|
| `check-orphan-specs.ps1` | Check Orphan Specs |
|
|
351
355
|
| `check-orphan-specs.sh` | Orphan Spec Detection Script |
|
|
@@ -359,6 +363,7 @@
|
|
|
359
363
|
| `check-standards-reference-sync.sh` | check-standards-reference-sync.sh |
|
|
360
364
|
| `check-standards-sync.ps1` | Check Standards Sync |
|
|
361
365
|
| `check-standards-sync.sh` | Standards Consistency Checker |
|
|
366
|
+
| `check-translation-hash-ratchet.sh` | XSPEC-392 R6 棘輪:新的翻譯必須帶 source_hash,既有的欠債冷凍為基線。 |
|
|
362
367
|
| `check-translation-sync.ps1` | Check Translation Sync |
|
|
363
368
|
| `check-translation-sync.sh` | Translation Sync Checker |
|
|
364
369
|
| `check-usage-docs-sync.ps1` | Check if usage documentation needs to be regenerat |
|
|
@@ -370,7 +375,9 @@
|
|
|
370
375
|
| `convert-md-to-yaml.mjs` | Markdown to AI-YAML Conversion Script |
|
|
371
376
|
| `fix-manifest-paths.ps1` | Fix Manifest Paths |
|
|
372
377
|
| `fix-manifest-paths.sh` | Manifest Path Fixer |
|
|
378
|
+
| `generate-adoption-skills.mjs` | Self-Adoption Skill Copy Generator and Drift Gate |
|
|
373
379
|
| `generate-docs.mjs` | Look up the release date for `version` from CHANGE |
|
|
380
|
+
| `generate-llms-txt.mjs` | llms.txt Generator and Drift Gate — XSPEC-385 |
|
|
374
381
|
| `generate-locale-coverage.mjs` | Locale Coverage Generator |
|
|
375
382
|
| `generate-version-manifest.mjs` | Generate Version Manifest (SPEC-SELFDIAG-001 REQ-9 |
|
|
376
383
|
| `install-hooks.mjs` | Install Hooks |
|