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.
- 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/agent-communication-protocol.md +8 -0
- package/bundled/core/branch-completion.md +8 -0
- package/bundled/core/change-batching-standards.md +8 -0
- 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/execution-history.md +8 -0
- package/bundled/core/feature-discovery-standards.md +5 -1
- package/bundled/core/governance-layer.md +114 -2
- package/bundled/core/pipeline-integration-standards.md +8 -0
- 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/core/workflow-enforcement.md +8 -0
- package/bundled/core/workflow-state-protocol.md +8 -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 +73 -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/agent-communication-protocol.md +7 -0
- package/bundled/locales/zh-CN/core/branch-completion.md +7 -0
- package/bundled/locales/zh-CN/core/change-batching-standards.md +7 -0
- package/bundled/locales/zh-CN/core/execution-history.md +7 -0
- package/bundled/locales/zh-CN/core/governance-layer.md +118 -6
- package/bundled/locales/zh-CN/core/pipeline-integration-standards.md +7 -0
- 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/core/workflow-enforcement.md +7 -0
- package/bundled/locales/zh-CN/core/workflow-state-protocol.md +7 -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/MIGRATION-v6.md +8 -4
- 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 +74 -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/agent-communication-protocol.md +7 -0
- package/bundled/locales/zh-TW/core/branch-completion.md +7 -0
- package/bundled/locales/zh-TW/core/change-batching-standards.md +7 -0
- 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/execution-history.md +7 -0
- 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/pipeline-integration-standards.md +7 -0
- 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/core/workflow-enforcement.md +7 -0
- package/bundled/locales/zh-TW/core/workflow-state-protocol.md +7 -0
- 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/MIGRATION-v6.md +8 -4
- 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 +12 -9
- package/src/commands/audit.js +82 -0
- package/src/commands/check.js +227 -34
- package/src/commands/config.js +19 -19
- package/src/commands/init.js +174 -20
- package/src/commands/spec.js +2 -2
- package/src/commands/update.js +537 -43
- 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 +42 -29
- package/src/installers/hooks-installer.js +167 -75
- package/src/installers/integration-installer.js +13 -9
- package/src/installers/skills-installer.js +4 -4
- package/src/installers/standards-installer.js +3 -3
- package/src/prompts/init.js +47 -18
- package/src/reconciler/diff-engine.js +57 -2
- package/src/reconciler/plan-executor.js +31 -11
- 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 +288 -82
- package/src/utils/reference-sync.js +107 -8
- package/src/utils/registry.js +57 -0
- package/src/utils/spinner.js +31 -0
- package/src/utils/yaml-generator.js +51 -9
- 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
|
-
|
|
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
|
|
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.
|
|
11
|
-
updated: "2026-
|
|
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.
|
|
7
|
-
updated: "2026-
|
|
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.
|
|
16
|
-
updated: "2026-
|
|
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
|
|
123
|
-
trigger
|
|
124
|
-
|
|
125
|
-
|
|
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.
|
|
7
|
-
updated: "2026-
|
|
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.
|
|
7
|
-
updated: "2026-
|
|
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.
|
|
285
|
-
hook_script: "scripts/hooks/check-logging-standard.
|
|
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.
|
|
7
|
-
updated: "2026-
|
|
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
|
+
摘要會腐壞,指標不會。
|