universal-dev-standards 6.8.0 → 6.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/bin/uds.js +12 -2
  2. package/bundled/ai/standards/acceptance-criteria-traceability.ai.yaml +14 -2
  3. package/bundled/ai/standards/adr-standards.ai.yaml +14 -2
  4. package/bundled/ai/standards/code-review.ai.yaml +13 -3
  5. package/bundled/ai/standards/commit-message.ai.yaml +8 -4
  6. package/bundled/ai/standards/deferred-item-exit.ai.yaml +225 -0
  7. package/bundled/ai/standards/feature-discovery-standards.ai.yaml +14 -2
  8. package/bundled/ai/standards/governance-layer.ai.yaml +128 -2
  9. package/bundled/ai/standards/logging.ai.yaml +2 -2
  10. package/bundled/ai/standards/retrospective-standards.ai.yaml +14 -2
  11. package/bundled/ai/standards/reverse-engineering-standards.ai.yaml +73 -2
  12. package/bundled/ai/standards/security-standards.ai.yaml +2 -2
  13. package/bundled/ai/standards/spec-driven-development.ai.yaml +14 -2
  14. package/bundled/ai/standards/tech-debt-standards.ai.yaml +87 -3
  15. package/bundled/ai/standards/turn-completion-integrity.ai.yaml +131 -0
  16. package/bundled/core/acceptance-criteria-traceability.md +5 -2
  17. package/bundled/core/adr-standards.md +26 -2
  18. package/bundled/core/agent-communication-protocol.md +8 -0
  19. package/bundled/core/branch-completion.md +8 -0
  20. package/bundled/core/change-batching-standards.md +8 -0
  21. package/bundled/core/code-review-checklist.md +5 -2
  22. package/bundled/core/context-aware-loading.md +1 -1
  23. package/bundled/core/deferred-item-exit.md +254 -0
  24. package/bundled/core/execution-history.md +8 -0
  25. package/bundled/core/feature-discovery-standards.md +5 -1
  26. package/bundled/core/governance-layer.md +114 -2
  27. package/bundled/core/pipeline-integration-standards.md +8 -0
  28. package/bundled/core/retrospective-standards.md +4 -2
  29. package/bundled/core/reverse-engineering-standards.md +81 -2
  30. package/bundled/core/spec-driven-development.md +8 -2
  31. package/bundled/core/tech-debt-standards.md +67 -8
  32. package/bundled/core/turn-completion-integrity.md +196 -0
  33. package/bundled/core/workflow-enforcement.md +8 -0
  34. package/bundled/core/workflow-state-protocol.md +8 -0
  35. package/bundled/hooks/check-dangerous-cmd.mjs +60 -0
  36. package/bundled/hooks/check-logging-standard.mjs +59 -0
  37. package/bundled/hooks/check-turn-completion.mjs +233 -0
  38. package/bundled/hooks/inject-standards.mjs +183 -0
  39. package/bundled/hooks/telemetry-wrapper.mjs +77 -0
  40. package/bundled/hooks/turn-completion/detect.mjs +99 -0
  41. package/bundled/hooks/turn-completion/locales/en.mjs +159 -0
  42. package/bundled/hooks/turn-completion/locales/zh-TW.mjs +166 -0
  43. package/bundled/hooks/validate-commit-msg.mjs +104 -0
  44. package/bundled/locales/zh-CN/CHANGELOG.md +73 -3
  45. package/bundled/locales/zh-CN/CLAUDE.md +1 -1
  46. package/bundled/locales/zh-CN/README.md +2 -2
  47. package/bundled/locales/zh-CN/SECURITY.md +1 -1
  48. package/bundled/locales/zh-CN/core/adr-standards.md +1 -1
  49. package/bundled/locales/zh-CN/core/agent-communication-protocol.md +7 -0
  50. package/bundled/locales/zh-CN/core/branch-completion.md +7 -0
  51. package/bundled/locales/zh-CN/core/change-batching-standards.md +7 -0
  52. package/bundled/locales/zh-CN/core/execution-history.md +7 -0
  53. package/bundled/locales/zh-CN/core/governance-layer.md +118 -6
  54. package/bundled/locales/zh-CN/core/pipeline-integration-standards.md +7 -0
  55. package/bundled/locales/zh-CN/core/retrospective-standards.md +1 -1
  56. package/bundled/locales/zh-CN/core/tech-debt-standards.md +71 -4
  57. package/bundled/locales/zh-CN/core/turn-completion-integrity.md +190 -0
  58. package/bundled/locales/zh-CN/core/workflow-enforcement.md +7 -0
  59. package/bundled/locales/zh-CN/core/workflow-state-protocol.md +7 -0
  60. package/bundled/locales/zh-CN/docs/CHEATSHEET.md +8 -1
  61. package/bundled/locales/zh-CN/docs/CLI-INIT-OPTIONS.md +29 -68
  62. package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +25 -15
  63. package/bundled/locales/zh-CN/docs/MIGRATION-v6.md +8 -4
  64. package/bundled/locales/zh-CN/docs/USAGE-MODES-COMPARISON.md +1 -2
  65. package/bundled/locales/zh-CN/integrations/google-antigravity/{INSTRUCTIONS.md → AGENTS.md} +1 -1
  66. package/bundled/locales/zh-CN/integrations/google-antigravity/README.md +3 -3
  67. package/bundled/locales/zh-CN/skills/atdd-assistant/SKILL.md +2 -0
  68. package/bundled/locales/zh-CN/skills/bdd-assistant/SKILL.md +2 -0
  69. package/bundled/locales/zh-CN/skills/brainstorm-assistant/SKILL.md +22 -12
  70. package/bundled/locales/zh-CN/skills/brainstorm-assistant/guide.md +12 -9
  71. package/bundled/locales/zh-CN/skills/code-review-assistant/SKILL.md +1 -0
  72. package/bundled/locales/zh-CN/skills/commands/brainstorm.md +17 -13
  73. package/bundled/locales/zh-CN/skills/commands/config.md +0 -1
  74. package/bundled/locales/zh-CN/skills/commands/init.md +1 -2
  75. package/bundled/locales/zh-CN/skills/commit-standards/SKILL.md +2 -0
  76. package/bundled/locales/zh-CN/skills/contract-test-assistant/SKILL.md +1 -0
  77. package/bundled/locales/zh-CN/skills/dev-methodology/SKILL.md +2 -0
  78. package/bundled/locales/zh-CN/skills/observability-assistant/SKILL.md +1 -0
  79. package/bundled/locales/zh-CN/skills/project-structure-guide/SKILL.md +1 -0
  80. package/bundled/locales/zh-CN/skills/release-standards/SKILL.md +3 -0
  81. package/bundled/locales/zh-CN/skills/requirement-assistant/SKILL.md +2 -0
  82. package/bundled/locales/zh-CN/skills/reverse-engineer/SKILL.md +3 -0
  83. package/bundled/locales/zh-CN/skills/runbook-assistant/SKILL.md +1 -0
  84. package/bundled/locales/zh-CN/skills/slo-assistant/SKILL.md +1 -0
  85. package/bundled/locales/zh-CN/skills/tdd-assistant/SKILL.md +2 -0
  86. package/bundled/locales/zh-TW/CHANGELOG.md +74 -3
  87. package/bundled/locales/zh-TW/CLAUDE.md +1 -1
  88. package/bundled/locales/zh-TW/README.md +2 -2
  89. package/bundled/locales/zh-TW/SECURITY.md +1 -1
  90. package/bundled/locales/zh-TW/core/acceptance-criteria-traceability.md +2 -0
  91. package/bundled/locales/zh-TW/core/adr-standards.md +26 -5
  92. package/bundled/locales/zh-TW/core/agent-communication-protocol.md +7 -0
  93. package/bundled/locales/zh-TW/core/branch-completion.md +7 -0
  94. package/bundled/locales/zh-TW/core/change-batching-standards.md +7 -0
  95. package/bundled/locales/zh-TW/core/code-review-checklist.md +2 -0
  96. package/bundled/locales/zh-TW/core/container-image-standards.md +2 -2
  97. package/bundled/locales/zh-TW/core/contract-testing-standards.md +2 -2
  98. package/bundled/locales/zh-TW/core/cross-flow-regression.md +8 -7
  99. package/bundled/locales/zh-TW/core/data-contract.md +2 -2
  100. package/bundled/locales/zh-TW/core/data-migration-testing.md +2 -2
  101. package/bundled/locales/zh-TW/core/data-pipeline.md +2 -2
  102. package/bundled/locales/zh-TW/core/deferred-item-exit.md +251 -0
  103. package/bundled/locales/zh-TW/core/documentation-writing-standards.md +228 -3
  104. package/bundled/locales/zh-TW/core/execution-history.md +7 -0
  105. package/bundled/locales/zh-TW/core/full-coverage-testing.md +15 -2
  106. package/bundled/locales/zh-TW/core/governance-layer.md +118 -5
  107. package/bundled/locales/zh-TW/core/iac-design-principles.md +2 -2
  108. package/bundled/locales/zh-TW/core/incident-response.md +2 -2
  109. package/bundled/locales/zh-TW/core/model-provenance.md +4 -2
  110. package/bundled/locales/zh-TW/core/pii-classification.md +42 -6
  111. package/bundled/locales/zh-TW/core/pipeline-integration-standards.md +7 -0
  112. package/bundled/locales/zh-TW/core/prd-standards.md +4 -2
  113. package/bundled/locales/zh-TW/core/product-metrics-standards.md +4 -2
  114. package/bundled/locales/zh-TW/core/release-readiness-gate.md +2 -2
  115. package/bundled/locales/zh-TW/core/resource-cost-boundary.md +2 -2
  116. package/bundled/locales/zh-TW/core/retrospective-standards.md +5 -3
  117. package/bundled/locales/zh-TW/core/reverse-engineering-standards.md +83 -5
  118. package/bundled/locales/zh-TW/core/runbook.md +2 -2
  119. package/bundled/locales/zh-TW/core/schema-evolution.md +2 -2
  120. package/bundled/locales/zh-TW/core/secret-management-standards.md +2 -2
  121. package/bundled/locales/zh-TW/core/slo-sli.md +2 -2
  122. package/bundled/locales/zh-TW/core/spec-driven-development.md +2 -0
  123. package/bundled/locales/zh-TW/core/tech-debt-standards.md +71 -4
  124. package/bundled/locales/zh-TW/core/turn-completion-integrity.md +190 -0
  125. package/bundled/locales/zh-TW/core/user-journey-testing.md +2 -2
  126. package/bundled/locales/zh-TW/core/user-story-mapping.md +2 -2
  127. package/bundled/locales/zh-TW/core/verification-oracle.md +2 -2
  128. package/bundled/locales/zh-TW/core/workflow-enforcement.md +7 -0
  129. package/bundled/locales/zh-TW/core/workflow-state-protocol.md +7 -0
  130. package/bundled/locales/zh-TW/docs/CHEATSHEET.md +8 -1
  131. package/bundled/locales/zh-TW/docs/CLI-INIT-OPTIONS.md +29 -68
  132. package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +25 -15
  133. package/bundled/locales/zh-TW/docs/MIGRATION-v6.md +8 -4
  134. package/bundled/locales/zh-TW/docs/USAGE-MODES-COMPARISON.md +1 -2
  135. package/bundled/locales/zh-TW/integrations/google-antigravity/{INSTRUCTIONS.md → AGENTS.md} +1 -1
  136. package/bundled/locales/zh-TW/integrations/google-antigravity/README.md +3 -3
  137. package/bundled/locales/zh-TW/skills/adr-assistant/SKILL.md +1 -1
  138. package/bundled/locales/zh-TW/skills/atdd-assistant/SKILL.md +2 -0
  139. package/bundled/locales/zh-TW/skills/bdd-assistant/SKILL.md +2 -0
  140. package/bundled/locales/zh-TW/skills/brainstorm-assistant/SKILL.md +22 -12
  141. package/bundled/locales/zh-TW/skills/brainstorm-assistant/guide.md +12 -9
  142. package/bundled/locales/zh-TW/skills/code-review-assistant/SKILL.md +1 -0
  143. package/bundled/locales/zh-TW/skills/commands/brainstorm.md +17 -13
  144. package/bundled/locales/zh-TW/skills/commands/config.md +0 -1
  145. package/bundled/locales/zh-TW/skills/commands/init.md +1 -2
  146. package/bundled/locales/zh-TW/skills/commit-standards/SKILL.md +2 -0
  147. package/bundled/locales/zh-TW/skills/contract-test-assistant/SKILL.md +2 -1
  148. package/bundled/locales/zh-TW/skills/dev-methodology/SKILL.md +2 -0
  149. package/bundled/locales/zh-TW/skills/dev-workflow-guide/SKILL.md +1 -1
  150. package/bundled/locales/zh-TW/skills/knowledge-graph/guide.md +2 -2
  151. package/bundled/locales/zh-TW/skills/migration-assistant/SKILL.md +1 -1
  152. package/bundled/locales/zh-TW/skills/observability-assistant/SKILL.md +1 -0
  153. package/bundled/locales/zh-TW/skills/project-discovery/SKILL.md +1 -0
  154. package/bundled/locales/zh-TW/skills/project-structure-guide/SKILL.md +1 -0
  155. package/bundled/locales/zh-TW/skills/release-standards/SKILL.md +3 -0
  156. package/bundled/locales/zh-TW/skills/requirement-assistant/SKILL.md +2 -0
  157. package/bundled/locales/zh-TW/skills/reverse-engineer/SKILL.md +3 -0
  158. package/bundled/locales/zh-TW/skills/runbook-assistant/SKILL.md +1 -0
  159. package/bundled/locales/zh-TW/skills/slo-assistant/SKILL.md +1 -0
  160. package/bundled/locales/zh-TW/skills/tdd-assistant/SKILL.md +2 -0
  161. package/bundled/skills/atdd-assistant/SKILL.md +2 -0
  162. package/bundled/skills/bdd-assistant/SKILL.md +2 -0
  163. package/bundled/skills/brainstorm-assistant/SKILL.md +31 -13
  164. package/bundled/skills/brainstorm-assistant/guide.md +9 -6
  165. package/bundled/skills/code-review-assistant/SKILL.md +1 -0
  166. package/bundled/skills/commands/brainstorm.md +12 -9
  167. package/bundled/skills/commands/config.md +0 -1
  168. package/bundled/skills/commands/init.md +2 -3
  169. package/bundled/skills/commit-standards/SKILL.md +2 -0
  170. package/bundled/skills/contract-test-assistant/SKILL.md +1 -0
  171. package/bundled/skills/dev-methodology/SKILL.md +4 -0
  172. package/bundled/skills/observability-assistant/SKILL.md +1 -0
  173. package/bundled/skills/project-discovery/SKILL.md +1 -0
  174. package/bundled/skills/project-structure-guide/SKILL.md +1 -0
  175. package/bundled/skills/release-standards/SKILL.md +3 -0
  176. package/bundled/skills/requirement-assistant/SKILL.md +2 -0
  177. package/bundled/skills/reverse-engineer/SKILL.md +3 -0
  178. package/bundled/skills/runbook-assistant/SKILL.md +1 -0
  179. package/bundled/skills/slo-assistant/SKILL.md +1 -0
  180. package/bundled/skills/tdd-assistant/SKILL.md +2 -0
  181. package/bundled/templates/.ai-context.yaml.template +194 -0
  182. package/bundled/templates/CLAUDE.md.template +145 -0
  183. package/bundled/templates/DESIGN.md +237 -0
  184. package/bundled/templates/SKILL-BRIEF-TEMPLATE.md +57 -0
  185. package/bundled/templates/SKILL-CANDIDATES.md +39 -0
  186. package/bundled/templates/gates/check-error-exit.mjs +309 -0
  187. package/bundled/templates/mcp-config.json +10 -0
  188. package/bundled/templates/methodology-template.yaml +209 -0
  189. package/bundled/templates/migration-template.md +408 -0
  190. package/bundled/templates/requirement-checklist.md +410 -0
  191. package/bundled/templates/requirement-document-template.md +591 -0
  192. package/bundled/templates/requirement-template.md +881 -0
  193. package/bundled/templates/reverse-spec-template.md +409 -0
  194. package/bundled/templates/test-case-template.md +74 -0
  195. package/bundled/templates/test-plan-template.md +74 -0
  196. package/package.json +12 -9
  197. package/src/commands/audit.js +82 -0
  198. package/src/commands/check.js +227 -34
  199. package/src/commands/config.js +19 -19
  200. package/src/commands/init.js +174 -20
  201. package/src/commands/spec.js +2 -2
  202. package/src/commands/update.js +537 -43
  203. package/src/compilers/claude-code-compiler.js +4 -1
  204. package/src/config/ai-agent-paths.js +62 -17
  205. package/src/core/constants.js +42 -11
  206. package/src/core/manifest.js +201 -3
  207. package/src/core/paths.js +2 -2
  208. package/src/i18n/messages.js +42 -29
  209. package/src/installers/hooks-installer.js +167 -75
  210. package/src/installers/integration-installer.js +13 -9
  211. package/src/installers/skills-installer.js +4 -4
  212. package/src/installers/standards-installer.js +3 -3
  213. package/src/prompts/init.js +47 -18
  214. package/src/reconciler/diff-engine.js +57 -2
  215. package/src/reconciler/plan-executor.js +31 -11
  216. package/src/utils/detector.js +21 -1
  217. package/src/utils/effect-boundary.js +1093 -0
  218. package/src/utils/hasher.js +166 -1
  219. package/src/utils/hook-stats.js +1 -1
  220. package/src/utils/integration-generator.js +288 -82
  221. package/src/utils/reference-sync.js +107 -8
  222. package/src/utils/registry.js +57 -0
  223. package/src/utils/spinner.js +31 -0
  224. package/src/utils/yaml-generator.js +51 -9
  225. package/standards-registry.json +32 -9
package/bin/uds.js CHANGED
@@ -130,10 +130,13 @@ program
130
130
  .option('--framework <framework>', 'Framework extension (fat-free)')
131
131
  .option('--locale <locale>', 'Locale extension (zh-tw)')
132
132
  .option('--skills-location <location>', 'Skills location (marketplace, user, project, none) [default: marketplace]')
133
- .option('--content-mode <mode>', 'Content mode for integration files (minimal, index, full) [default: index]')
133
+ // No double quotes in this description: generate-usage-docs.mjs parses the
134
+ // option table out of this file and truncates at the first one, which turned
135
+ // the retirement note into a dangling semicolon in three locales.
136
+ .option('--content-mode <mode>', 'Content mode for integration files (minimal, index) [default: index]; full is retired and resolves to index')
134
137
  .option('--agents-md', 'Generate AGENTS.md universal summary')
135
138
  .option('--no-agents-md', 'Skip AGENTS.md generation')
136
- .option('--with-hooks', 'Install enforcement hooks (commit-msg, security, logging)')
139
+ .option('--with-hooks', 'Install enforcement hooks declared by the installed standards')
137
140
  .option('--content-layout <layout>', 'Content layout (flat, layered) [default: flat]')
138
141
  .option('-y, --yes', 'Use defaults, skip interactive prompts')
139
142
  .option('-E, --experimental', 'Enable experimental features (methodology)')
@@ -223,6 +226,7 @@ program
223
226
  .option('--plan', 'Show reconciliation plan without executing (like terraform plan); combines with --skills/--commands to plan just that scope, still writing nothing')
224
227
  .option('--apply', 'Apply exactly the plan --plan prints (plain `uds update` does not); with --skills/--commands it does the reconciliation AND that scope, not only the scope')
225
228
  .option('--force', 'Force update all files, ignoring hash comparison')
229
+ .option('--prune', 'Delete .standards/ files UDS wrote but no longer ships (listed without this flag; never touches files UDS did not write)')
226
230
  .option('--rollback', 'Rollback to the most recent backup')
227
231
  .option('--locale <locale>', 'Override locale for skills install (zh-tw, zh-cn, en); also reads .uds/install.yaml + UDS_LOCALE env')
228
232
  .action(updateCommand);
@@ -250,6 +254,12 @@ program
250
254
  .option('--trend', 'Show historical score trend (use with --score)')
251
255
  .option('--ci', 'CI mode: output score only, exit 1 if below threshold (use with --score)')
252
256
  .option('--threshold <n>', 'Score threshold for CI mode (default: 75)', '75')
257
+ // XSPEC-383 R8 — static effect boundary gate. Exits 0 clean / 1 findings /
258
+ // 2 cannot measure. Attached to `audit` rather than a new top-level command
259
+ // because `audit` already means "walk the code looking for a shape", and a new
260
+ // command is surface every adopter has to learn.
261
+ .option('--effects', 'Static effect boundary gate: do the implementations of each declared effect interface reach anything outside this process')
262
+ .option('--effects-config <path>', 'Path to the effect-family config (default: .uds/effect-boundary.json)')
253
263
  .action(auditCommand);
254
264
 
255
265
  program
@@ -7,8 +7,8 @@ standard:
7
7
  description: AC-to-test traceability matrix, coverage calculation, and spec generation quality rules
8
8
 
9
9
  meta:
10
- version: "1.1.0"
11
- updated: "2026-03-18"
10
+ version: "1.2.0"
11
+ updated: "2026-08-24"
12
12
  source: core/acceptance-criteria-traceability.md
13
13
  references:
14
14
  - "ISO/IEC/IEEE 29119-3 (Test Documentation — Traceability Matrix)"
@@ -268,3 +268,15 @@ related_standards:
268
268
  - testing-standards.md
269
269
  - checkin-standards.md
270
270
  - test-governance.md
271
+
272
+ # ── Deferred items produced here ─────────────────────────────────────────────
273
+ # Pointer, not a summary: the exit invariant is stated once, in deferred-item-exit.
274
+ deferred_items:
275
+ produced_here:
276
+ - "Gaps: Uncovered AC / Partial AC"
277
+ - "Threshold Exceptions"
278
+ - "report Action Items"
279
+ governed_by: deferred-item-exit
280
+ note: >
281
+ 規則只在 core/deferred-item-exit.md 一處陳述;此處放指標不放摘要。
282
+ 摘要會腐壞,指標不會。
@@ -3,8 +3,8 @@
3
3
 
4
4
  id: adr-standards
5
5
  meta:
6
- version: "1.0.0"
7
- updated: "2026-03-26"
6
+ version: "1.1.0"
7
+ updated: "2026-08-24"
8
8
  source: core/adr-standards.md
9
9
  guide: skills/adr-assistant/guide.md
10
10
  description: Architecture Decision Records for tracking significant technical decisions
@@ -91,3 +91,15 @@ dec_borrowing_rules:
91
91
  tech_radar_index:
92
92
  location: "cross-project/decisions/TECH-RADAR.md"
93
93
  sync_rule: "Update TECH-RADAR.md whenever a DEC's radar state changes"
94
+
95
+ # ── Deferred items produced here ─────────────────────────────────────────────
96
+ # Pointer, not a summary: the exit invariant is stated once, in deferred-item-exit.
97
+ deferred_items:
98
+ produced_here:
99
+ - "Consequences → Bad / Accepted risk"
100
+ - "Links"
101
+ - "options considered but not taken up"
102
+ governed_by: deferred-item-exit
103
+ note: >
104
+ 規則只在 core/deferred-item-exit.md 一處陳述;此處放指標不放摘要。
105
+ 摘要會腐壞,指標不會。
@@ -12,8 +12,8 @@ standard:
12
12
  - "Be constructive and explain 'why'"
13
13
 
14
14
  meta:
15
- version: "2.1.0"
16
- updated: "2026-06-18"
15
+ version: "2.2.0"
16
+ updated: "2026-08-24"
17
17
  source: core/code-review-checklist.md
18
18
  description: Systematic checklist for reviewing code quality and security
19
19
 
@@ -137,4 +137,14 @@ physical_spec:
137
137
  type: filesystem_schema
138
138
  validator:
139
139
  command: "test -d .github/PULL_REQUEST_TEMPLATE || test -f .github/pull_request_template.md || test -f .github/PULL_REQUEST_TEMPLATE.md"
140
- rule: "pr_template_exists"
140
+ rule: "pr_template_exists"
141
+
142
+ # ── Deferred items produced here ─────────────────────────────────────────────
143
+ # Pointer, not a summary: the exit invariant is stated once, in deferred-item-exit.
144
+ deferred_items:
145
+ produced_here:
146
+ - "non-blocking comments accepted without a change in this change"
147
+ governed_by: deferred-item-exit
148
+ note: >
149
+ 規則只在 core/deferred-item-exit.md 一處陳述;此處放指標不放摘要。
150
+ 摘要會腐壞,指標不會。
@@ -119,9 +119,13 @@ physical_spec:
119
119
  command: 'echo "{input}" | npx commitlint'
120
120
 
121
121
  enforcement:
122
- hook_type: PreCommit
123
- trigger: UserPromptSubmit
124
- script_ref: "scripts/hooks/validate-commit-msg.js"
125
- hook_script: "scripts/hooks/validate-commit-msg.js"
122
+ # 🔴 hook_type was "PreCommit" — Claude Code has no such event — and the
123
+ # trigger was UserPromptSubmit, so the validator ran on every prompt and
124
+ # exited 1 every time. It belongs on the Bash call that makes the commit.
125
+ hook_type: PreToolUse
126
+ trigger: PreToolUse
127
+ matcher: Bash
128
+ script_ref: "scripts/hooks/validate-commit-msg.mjs"
129
+ hook_script: "scripts/hooks/validate-commit-msg.mjs"
126
130
  severity: error
127
131
  timeout_ms: 500
@@ -0,0 +1,225 @@
1
+ # Deferred Item Exit Standard - AI Optimized
2
+ # Source: core/deferred-item-exit.md
3
+
4
+ standard:
5
+ id: deferred-item-exit
6
+ name: Deferred Item Exit Standard
7
+ description: 延後項目出口標準——延後項目必須離開文件
8
+
9
+ meta:
10
+ version: "1.0.0"
11
+ updated: "2026-08-24"
12
+ source: core/deferred-item-exit.md
13
+ description: >
14
+ 有一批標準會產出延後項目(ADR 的既受風險、規格的未納入清單、retrospective 的
15
+ action items、探索矩陣的未確認候選、review 的非阻斷建議、AC 報告的缺口),
16
+ 每一條都規定了那份文件要怎麼寫好,沒有一條規定那些項目之後去哪。
17
+ 於是文件寫完就是終點。本標準補上那個缺失的關係:延後項目必須有一個
18
+ 在文件之外的可追蹤出口,而出口的識別字寫在文件裡。
19
+
20
+ iron_law: >
21
+ 一個記錄在文件裡的延後項目,必須在該文件之外有一個可追蹤的出口,
22
+ 而該出口的識別字必須寫在文件裡、緊鄰該項目。
23
+ 判準是「這個項目離開文件了嗎」,不是「用了什麼工具」。
24
+
25
+ # ── 寫法約束:先讀這一段,它拘束下面每一條 ────────────────────────────────
26
+ # DEC-049「UDS defines activities, adoption layers orchestrate」曾據以在 6.0.0
27
+ # 刪掉八條機器可讀標準(其中七條正是工作流狀態)。寫成編排協定會被同一條理由擋下。
28
+ writing_constraint:
29
+ basis: DEC-049
30
+ reference: docs/MIGRATION-v6.md §2
31
+ admissible_what:
32
+ - "artefact 之間必須存在的關係"
33
+ - "一項宣稱要算作證據所必須具備的性質"
34
+ - "一份回報必須保留的區別"
35
+ - "延後項目必須有出口"
36
+ inadmissible_how:
37
+ - "artefact 必須通過的狀態機"
38
+ - "必須產出該宣稱的 pipeline 階段"
39
+ - "回報格式、工具或 schema"
40
+ - "哪一個 issue tracker/看板/檔案是那個出口"
41
+ rule: >
42
+ 每一條要求都寫成「必須存在什麼關係」,絕不寫成「應使用什麼機制維持它」。
43
+ UDS 本來就有一整類這個形狀的標準——acceptance-criteria-traceability
44
+ 要求每一條 AC 都能被某個測試到達,而不規定用什麼維持那條可達性。
45
+ consequence: >
46
+ 本標準不附帶任何閘門。它只說什麼必須為真;有沒有東西在檢查是採用專案的決定,
47
+ 而 DEX-004 是用來讓那個決定沒辦法被默默做掉的。
48
+
49
+ guidelines:
50
+ - "延後項目必須離開文件——**判準是「離開了嗎」,不是「用了什麼工具」**"
51
+ - "出口的載體刻意不指定:issue/tracked TODO/manifest 條目/backlog 一列都算"
52
+ - "**出口必須在產出該文件的那次變更落地之後仍然解析得到**,且仍承載該項目"
53
+ - "**連結存在不等於連結有效**——必須驗證那個出口確實承載這個項目"
54
+ - "「有連結且已驗證內容」與「有連結但內容未驗證」**不得印出同一個綠**"
55
+ - "**錨點走訪結構,不走訪措辭**——結構可窮舉,措辭不可"
56
+ - "措辭清單的涵蓋率是未知的,必須明示;它的綠燈不得被讀成完整"
57
+ - "任何窗口/閾值必須寫下來歷,或標為未校準"
58
+ - "**一支從未紅過的檢查,與一支不可能紅的檢查,輸出一模一樣**"
59
+
60
+ # ── 出口的三條關係,全部成立才滿足不變量 ──────────────────────────────────
61
+ exit_relations:
62
+ - order: 1
63
+ relation: "出口存在於這份文件之外"
64
+ fails_when: "該項目唯一的紀錄就是這份文件的文字"
65
+ - order: 2
66
+ relation: "出口可由一個寫在文件裡的識別字定址"
67
+ fails_when: "文件寫著「之後再處理」而沒有任何可定址的東西"
68
+ - order: 3
69
+ relation: "產出該文件的那次變更落地之後,出口仍然解析得到"
70
+ fails_when: "出口被同一次變更關閉、刪除或取代"
71
+ observed_leaks:
72
+ - "待辦寫進會被本次合併關閉的 issue——文件指向一筆在工作被接受當下就停止存在的紀錄"
73
+ - "待辦寫進出口的留言而非本體,被後續留言推走——出口解析得到,讀出口卻讀不到那個項目"
74
+
75
+ # ── 連結存在 ≠ 連結有效 ────────────────────────────────────────────────
76
+ link_validity:
77
+ instance: >
78
+ 文件寫著「與 issue #19 一併決定」,而 #19 裡根本沒有這件事。
79
+ 三條關係全部成立,項目照樣不見了。一道只問識別字在不在的閘門會放行這份文件,
80
+ 而它印出的綠燈與「出口都為真」的綠燈逐位元相同。
81
+ two_states_required:
82
+ - state: linked_verified
83
+ meaning: "讀過出口,它承載這個項目"
84
+ - state: linked_unverified
85
+ meaning: "識別字在,但它有沒有承載這個項目未知"
86
+ - state: no_exit
87
+ meaning: "違反 DEX-001"
88
+ why_not_one_state: >
89
+ 把前兩態合併成單一通過數,不是通往規則的捷徑——那正是這條規則要防的缺陷,
90
+ 被制度化並給了一個編號。一個被回報成通過的未知,比一個被回報成未知的未知更糟,
91
+ 因為後者還找得到。
92
+ partial_adoption: >
93
+ 只做得起便宜那一半,屬於 verification-evidence VE-012 / class-level-fix CLF-008
94
+ 已經在管的涵蓋缺口:**必須登記到帶到期日的例外清冊,不能只寫一句揭露**。此處不複述。
95
+
96
+ # ── 錨點:走訪結構,不走訪措辭 ────────────────────────────────────────────
97
+ anchors:
98
+ principle: "結構由「要求產出這份文件的那條標準」定義,因此可窮舉;措辭不可窮舉,而且沒有任何一張措辭清單能被證明完整"
99
+ structural_locations:
100
+ adr: ["Consequences → Bad / Accepted risk", "Links", "被考慮而未採用的選項"]
101
+ spec: ["未納入/不在本版的段落", "open questions", "待確認的 assumptions"]
102
+ retrospective: ["Action Items", "Previous Action Items Review 中仍為 Open 的列", "附理由 Cancelled 的項目"]
103
+ feature_discovery: ["零打勾候選", "dead_code_candidates", "升級為人工觀察的候選"]
104
+ code_review: ["非阻斷留言類別(⚠️ IMPORTANT/💡 SUGGESTION/[SUGGESTION]/[NIT])本次未改而被接受者"]
105
+ ac_coverage_report: ["Gaps → Uncovered AC / Partial AC", "Threshold Exceptions", "Action Items"]
106
+ wording_list:
107
+ allowed: true
108
+ but: >
109
+ DEX-008 隨即適用:涵蓋率未知必須明示,綠燈不得被讀成「沒有漏掉延後項目」。
110
+ 一張含「待決定」「未納入」的清單,對「這一點我們先放著」這句話什麼也沒說。
111
+ general_form: class-level-fix
112
+ note: "閘門自行列舉範圍,正確到有人新增第四個成員為止——措辭清單在構造上就是這個失敗"
113
+ thresholds: >
114
+ 「識別字須出現在項目後 3 行內」這類判準決定了建立其上的一切的召回率。
115
+ 沒有東西記下 3 是怎麼來的,就沒有人能評估把它改成 2 或 5,也沒有人分得出它是量出來的還是猜的。
116
+ 寫下來歷,或標為未校準——兩者都可接受,沉默不行。
117
+
118
+ # ── 證據可採性 ────────────────────────────────────────────────────────
119
+ evidence_admissibility:
120
+ rule: >
121
+ 一支被提出作為本標準證據的檢查,必須已經被觀察到「對一個刻意違規的樣本回報失敗」。
122
+ 從未紅過的檢查不是可採信的證據。
123
+ why: "一支從未失敗過的檢查,與一支不可能失敗的檢查,輸出一模一樣"
124
+ procedure_lives_in: class-level-fix # 逐子集合成成員;此處不複述
125
+ exit_code_caveat_lives_in: verification-evidence
126
+
127
+ anti_patterns:
128
+ - pattern: "記下延後項目,然後核准文件"
129
+ why: "文件是唯一的載體,而它現在被視為完成了"
130
+ - pattern: "出口被產出該文件的同一次變更關閉"
131
+ why: "指標在工作進行中解析得到,工作結束後就不再解析得到"
132
+ - pattern: "項目寫進出口的留言而不是出口本體"
133
+ why: "出口解析得到;讀出口卻讀不到那個項目"
134
+ - pattern: "檢查識別字在不在"
135
+ why: "「在」與「對」印出同一個綠"
136
+ - pattern: "已驗證與未驗證的連結共用一個通過狀態"
137
+ why: "把上一列的缺陷變成永久的,還給了它一個編號"
138
+ - pattern: "把措辭清單當成「延後」的定義"
139
+ why: "正確到有人換一種寫法為止,而沒有東西會說"
140
+ - pattern: "沒有記下來歷的窗口大小"
141
+ why: "它決定整個判定的召回率,而沒有人能檢查它"
142
+ - pattern: "從未被觀察到失敗的檢查"
143
+ why: "與一支不可能失敗的檢查無從分辨"
144
+
145
+ rules:
146
+ - id: DEX-001
147
+ rule: "文件裡記下的延後項目,必須在文件之外有可追蹤的出口,且文件在該項目旁載明出口識別字"
148
+ severity: error
149
+ - id: DEX-002
150
+ rule: "產出該文件的變更落地之後,出口仍然解析得到且仍承載該項目"
151
+ severity: error
152
+ - id: DEX-003
153
+ rule: "本標準的每一條要求都必須可表述為 artefact 之間可判定的關係;不能如此表述的要求不得進入本標準"
154
+ severity: error
155
+ - id: DEX-004
156
+ rule: "被提出作為本標準證據的檢查,必須已被觀察到對刻意違規的樣本回報失敗;從未紅過的檢查不是可採信的證據"
157
+ severity: error
158
+ - id: DEX-005
159
+ rule: "驗證必須確立「那個出口承載這個項目」,而不只是「識別字解析得到」"
160
+ severity: error
161
+ - id: DEX-006
162
+ rule: "「有連結且已驗證內容」與「有連結但內容未驗證」須回報為兩個相異狀態;合併為單一通過狀態即不滿足 DEX-005"
163
+ severity: error
164
+ - id: DEX-007
165
+ rule: "「這裡有一個延後項目」的錨點,必須是可由該文件自身既定結構窮舉出來的位置"
166
+ severity: error
167
+ - id: DEX-008
168
+ rule: "以措辭清單補充結構錨點時,須明示其涵蓋率未知,且其綠燈不得被回報為完整"
169
+ severity: warning
170
+ - id: DEX-009
171
+ rule: "該判定所用的任何窗口或閾值,須載明來歷,或標為未校準"
172
+ severity: warning
173
+
174
+ # ── 本標準在 UDS 側沒有閘門,這件事被記錄而非被暗示 ──────────────────────
175
+ enforcement:
176
+ automated_gate: false
177
+ why_not: >
178
+ 依上面的寫法約束,UDS 陳述關係,有沒有東西判定它是採用專案的決定。
179
+ UDS 不出貨這些文件本身,只出貨要求產出它們的標準。
180
+ what_it_does_instead: >
181
+ DEX-003 保證這裡每一條「能」被判定;DEX-004 固定「一次判定要算數需要什麼」;
182
+ DEX-006/DEX-008 固定「一次不完整的判定容許印出什麼」。
183
+ honest_boundary: >
184
+ 一個採用本標準而什麼都沒建的專案並未違反它——但它同樣不能宣稱自己的延後項目有出口,
185
+ 因為它沒有任何可採信的證據說明有。
186
+ reopen_condition: >
187
+ 若 UDS 開始出貨那些文件本身而不只是產出它們的標準,
188
+ 走訪 anchors.structural_locations 就在本 repo 內變得可能,屆時誠實的做法是去跑它。
189
+
190
+ # ── 產出延後項目的標準:各自放指標,不放摘要 ────────────────────────────
191
+ producers:
192
+ list:
193
+ - id: adr-standards
194
+ produces: "既受風險、負面後果、被考慮而未採用的選項"
195
+ - id: spec-driven-development
196
+ produces: "未納入項目、open questions、待確認的 assumptions"
197
+ - id: retrospective-standards
198
+ produces: "action items,以及仍為 Open 的上期項目"
199
+ - id: feature-discovery-standards
200
+ produces: "未確認候選與 dead_code_candidates"
201
+ - id: code-review-checklist
202
+ produces: "本次未改而被接受的非阻斷留言"
203
+ - id: acceptance-criteria-traceability
204
+ produces: "涵蓋缺口、閾值例外、報告的 action items"
205
+ pointer_not_summary: >
206
+ 六條各加一行指回本標準,**不各自複述規則**——同一條規則複述六次會各自腐壞。
207
+ 摘要會腐壞,指標不會。指標會斷,但斷了是可檢查的(走訪六條,缺指標即失敗)。
208
+
209
+ related:
210
+ - id: acceptance-criteria-traceability
211
+ relation: "上一層的同一個形狀:要求每條 AC 都能被驗證項到達,而不規定用什麼維持。本標準要求每個延後項目都能被出口到達"
212
+ - id: class-level-fix
213
+ relation: "提供 DEX-004 所要求證據的產生程序;也是 DEX-008 所揭露之措辭清單失敗的通則形式"
214
+ - id: verification-evidence
215
+ relation: "VE-012 的帶到期日例外清冊,正是 DEX-006 那群「未驗證」項目該被登記進去的地方,而不是揭露一次就放著"
216
+ - id: self-review-protocol
217
+ relation: "自我複查抓得到矛盾、抓不到缺漏;沒有出口的延後項目正是缺漏"
218
+
219
+ physical_spec:
220
+ applies_to:
221
+ - "任何標準要求產出、且可能記下延後項目的文件"
222
+ deliverables:
223
+ - "每個延後項目旁的出口識別字"
224
+ - "已驗證/未驗證兩態分開的回報,而非單一通過數"
225
+ - "任何措辭清單的涵蓋率未知聲明,與任何閾值的來歷(或未校準標示)"
@@ -3,8 +3,8 @@
3
3
 
4
4
  id: feature-discovery-standards
5
5
  meta:
6
- version: "1.0.0"
7
- updated: "2026-05-13"
6
+ version: "1.1.0"
7
+ updated: "2026-08-24"
8
8
  source: core/feature-discovery-standards.md
9
9
  description: Language-agnostic methodology for exhaustive feature discovery in legacy systems; defines Deterministic-First principle, Software Form Taxonomy, five static foundations, dynamic/human observation protocols, and cross-layer validation matrix
10
10
  pipeline_position: "Discovery → feature-manifest-standard → behavior-snapshot"
@@ -457,3 +457,15 @@ related_standards:
457
457
  - anti-hallucination.ai.yaml
458
458
  - acceptance-criteria-traceability.ai.yaml
459
459
  - refactoring-standards.ai.yaml
460
+
461
+ # ── Deferred items produced here ─────────────────────────────────────────────
462
+ # Pointer, not a summary: the exit invariant is stated once, in deferred-item-exit.
463
+ deferred_items:
464
+ produced_here:
465
+ - "zero-checkmark candidates"
466
+ - "dead_code_candidates"
467
+ - "candidates escalated to human observation"
468
+ governed_by: deferred-item-exit
469
+ note: >
470
+ 規則只在 core/deferred-item-exit.md 一處陳述;此處放指標不放摘要。
471
+ 摘要會腐壞,指標不會。
@@ -3,8 +3,8 @@
3
3
 
4
4
  id: governance-layer
5
5
  meta:
6
- version: "1.0.0"
7
- updated: "2026-05-07"
6
+ version: "1.1.0"
7
+ updated: "2026-08-20"
8
8
  source: core/governance-layer.md
9
9
  description: "治理層標準(Vision/Mission/Goals 三層架構 + KPI + 紅線清單)"
10
10
  scope: universal
@@ -83,7 +83,119 @@ risk_acceptance:
83
83
  - signatory
84
84
  - gates_bypassed
85
85
  - risks_accepted
86
+ - review_by # Date the acceptance stops being valid and must be decided again
86
87
  fail_closed: "Pipeline MUST refuse to start without a valid Risk Acceptance Clause"
88
+ expiry:
89
+ rule: "A clause whose review_by has passed is NOT valid; the pipeline fails closed as if no clause existed"
90
+ why: >
91
+ `date` records when the risk was accepted, not when it should be re-examined. Without
92
+ review_by an acceptance signed once stays in force forever while every field still reads
93
+ as correct.
94
+ dispositions:
95
+ re_accept: "A current signatory signs again with a new review_by"
96
+ withdraw: "The bypass is removed and human gates are restored"
97
+ extend: "A new review_by AND a written reason, recorded together"
98
+ prohibited: >
99
+ Automatic extension of review_by. It converts a fail-closed gate into a fail-open one
100
+ while leaving every field looking correct.
101
+
102
+ # R3 — pending decisions are governed at the same level as accepted risks
103
+ pending_decisions:
104
+ principle: "'Undecided' is a governance state, not the absence of one"
105
+ requirements:
106
+ - id: GOV-PD-001
107
+ priority: required
108
+ rule: >
109
+ Declare WHERE pending decisions are recorded and WHAT marks one — a fixed token
110
+ (status value, label, literal marker string), never free prose. Enumeration must not
111
+ depend on guessing the wording.
112
+ - id: GOV-PD-002
113
+ priority: required
114
+ rule: >
115
+ Enumeration MUST report a total AND the number of sources that could not be parsed.
116
+ "No pending decisions found" carries no information without the size of the walked set.
117
+ - id: GOV-PD-003
118
+ priority: required
119
+ rule: >
120
+ Every pending decision carries a decide-by date. On expiry apply one of three
121
+ dispositions — decide / withdraw the question / extend with a written reason.
122
+ Automatic extension is prohibited.
123
+ - id: GOV-PD-004
124
+ priority: required
125
+ rule: >
126
+ If nothing enumerates pending decisions on a schedule, carry an Unattended Declaration
127
+ naming owner, review cadence, and last-review date. Unenumerated is acceptable;
128
+ unenumerated and undeclared is not.
129
+
130
+ # R4 — every aggregate report must declare what it could not evaluate
131
+ aggregate_reporting:
132
+ principle: "A report is a claim about a set; it is worth what its account of the unevaluable is worth"
133
+ requirements:
134
+ - id: GOV-RPT-001
135
+ priority: required
136
+ rule: "Print three counts, never two: passed, failed, and undecidable (unparseable / missing field / unreachable source / unsupported format)"
137
+ - id: GOV-RPT-002
138
+ priority: required
139
+ rule: "undecidable MUST NOT be folded into passed and MUST NOT be omitted. An unparseable file is not a clean file"
140
+ - id: GOV-RPT-003
141
+ priority: required
142
+ rule: >
143
+ State the denominator and how it was derived. A report whose scope comes from a
144
+ hardcoded list reports on that list, not on the project. Derive by walking and
145
+ excluding, never by enumerating (see class-level-fix).
146
+ - id: GOV-RPT-004
147
+ priority: required
148
+ rule: >
149
+ Report positive and negative counts separately; never collapse into one score.
150
+ A metric on which doing nothing scores the same as doing the work is not measuring
151
+ the work ("5 of 11 passed" and "the checker never started" give the same figure).
152
+ - id: GOV-RPT-005
153
+ priority: recommended
154
+ rule: >
155
+ Include a canary — a check with a known-failing input that MUST fail. If the canary
156
+ passes, report the whole run as undecidable, not green.
157
+
158
+ # R5 — freshness indicators must name which clock they read
159
+ freshness_metrics:
160
+ clocks:
161
+ edit_time:
162
+ answers: "How long since this artifact was last changed?"
163
+ readable_from: "File mtime / last commit touching the file / a 'last updated' field"
164
+ reconciliation_time:
165
+ answers: "How long since this artifact was last compared against the source of truth it describes?"
166
+ readable_from: "The recorded date of that comparison — nothing else can supply it"
167
+ requirements:
168
+ - id: GOV-FRESH-001
169
+ priority: required
170
+ rule: "Any freshness/staleness indicator MUST name which of the two clocks it reads"
171
+ - id: GOV-FRESH-002
172
+ priority: required
173
+ rule: >
174
+ The two MUST NOT share a field or a column heading. A document edited today whose
175
+ contents were never checked against reality is zero days old by edit time and
176
+ unbounded by reconciliation time.
177
+ - id: GOV-FRESH-003
178
+ priority: required
179
+ rule: >
180
+ Where only edit time is available, label the column as edit time AND report
181
+ reconciliation age as undecidable — never as fresh, never by omission.
182
+ - id: GOV-FRESH-004
183
+ priority: recommended
184
+ rule: >
185
+ Reconciliation time is meaningful only if recorded by whatever performed the
186
+ comparison. A date typed in afterwards is an assertion, not a measurement — label it.
187
+
188
+ enforcement_reality:
189
+ ships_a_checker: false
190
+ note: >
191
+ Applies to every rule in this standard, including the fail-closed Risk Acceptance
192
+ requirement present since 1.0.0 — measured 2026-08-20, `review_by` / `risks_accepted` /
193
+ `gates_bypassed` appear in no program at all, so that clause has never stopped a pipeline.
194
+ UDS defines these requirements but ships no program that enforces them. Adopters must
195
+ write the enumerator, the three-count reporter, and the reconciliation-date recorder
196
+ themselves, and most will not — the same failure this standard describes. The minimum bar
197
+ is therefore not "build the tooling" but: anything recorded as pending, accepted, or fresh
198
+ must either point at something that runs, or say plainly that nothing is watching it.
87
199
 
88
200
  # Governance file structure
89
201
  file_structure:
@@ -112,3 +224,17 @@ compliance_checks:
112
224
  check: "If gate.mode=trace_only, Risk Acceptance Clause exists in mission.md"
113
225
  - id: CK-07
114
226
  check: "Evaluator weights 0.4/0.3/0.3 with fail-closed veto at < 0.3"
227
+ - id: CK-08
228
+ check: "Every Risk Acceptance Clause has a review_by date and none is past it"
229
+ - id: CK-09
230
+ check: "The project declares where pending decisions live and what fixed token marks one"
231
+ - id: CK-10
232
+ check: "Every pending decision has a decide-by date"
233
+ - id: CK-11
234
+ check: "Pending decisions are either enumerated by something that runs, or covered by an Unattended Declaration"
235
+ - id: CK-12
236
+ check: "Every governance report prints passed / failed / undecidable separately and states its denominator and how it was derived"
237
+ - id: CK-13
238
+ check: "No report collapses positive and negative counts into a single score"
239
+ - id: CK-14
240
+ check: "Every freshness indicator names edit time vs reconciliation time, and the two do not share a field"
@@ -281,7 +281,7 @@ enforcement:
281
281
  matcher:
282
282
  tool: Write
283
283
  path: "src/**/*.ts"
284
- script_ref: "scripts/hooks/check-logging-standard.js"
285
- hook_script: "scripts/hooks/check-logging-standard.js"
284
+ script_ref: "scripts/hooks/check-logging-standard.mjs"
285
+ hook_script: "scripts/hooks/check-logging-standard.mjs"
286
286
  severity: warning
287
287
  timeout_ms: 500
@@ -3,8 +3,8 @@
3
3
 
4
4
  id: retrospective-standards
5
5
  meta:
6
- version: "1.0.0"
7
- updated: "2026-03-26"
6
+ version: "1.1.0"
7
+ updated: "2026-08-24"
8
8
  source: core/retrospective-standards.md
9
9
  guide: skills/retrospective-assistant/guide.md
10
10
  description: Structured team retrospectives with facilitation techniques and action item tracking
@@ -41,3 +41,15 @@ rules:
41
41
  - "Always review previous action items first"
42
42
  - "Gather data (git log, metrics) before the session"
43
43
  - "Focus on process, not people — no blame"
44
+
45
+ # ── Deferred items produced here ─────────────────────────────────────────────
46
+ # Pointer, not a summary: the exit invariant is stated once, in deferred-item-exit.
47
+ deferred_items:
48
+ produced_here:
49
+ - "Action Items"
50
+ - "Previous Action Items Review rows still Open"
51
+ - "items Cancelled with a reason"
52
+ governed_by: deferred-item-exit
53
+ note: >
54
+ 規則只在 core/deferred-item-exit.md 一處陳述;此處放指標不放摘要。
55
+ 摘要會腐壞,指標不會。