universal-dev-standards 5.5.0 → 5.7.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/bundled/ai/options/testing/integration-testing.ai.yaml +2 -2
- package/bundled/ai/options/testing/unit-testing.ai.yaml +2 -2
- package/bundled/ai/standards/agent-communication-protocol.ai.yaml +8 -9
- package/bundled/ai/standards/agent-dispatch.ai.yaml +8 -9
- package/bundled/ai/standards/branch-completion.ai.yaml +8 -10
- package/bundled/ai/standards/browser-compatibility-standards.ai.yaml +63 -0
- package/bundled/ai/standards/capability-declaration.ai.yaml +4 -4
- package/bundled/ai/standards/change-batching-standards.ai.yaml +8 -10
- package/bundled/ai/standards/circuit-breaker.ai.yaml +7 -7
- package/bundled/ai/standards/contract-testing-standards.ai.yaml +62 -0
- package/bundled/ai/standards/cross-flow-regression.ai.yaml +61 -0
- package/bundled/ai/standards/disaster-recovery-drill.ai.yaml +1 -1
- package/bundled/ai/standards/dual-phase-output.ai.yaml +3 -3
- package/bundled/ai/standards/execution-history.ai.yaml +8 -10
- package/bundled/ai/standards/failure-source-taxonomy.ai.yaml +8 -10
- package/bundled/ai/standards/full-coverage-testing.ai.yaml +192 -0
- package/bundled/ai/standards/git-worktree.ai.yaml +1 -1
- package/bundled/ai/standards/governance-layer.ai.yaml +114 -0
- package/bundled/ai/standards/mock-boundary.ai.yaml +1 -1
- package/bundled/ai/standards/model-selection.ai.yaml +1 -1
- package/bundled/ai/standards/packaging-standards.ai.yaml +8 -8
- package/bundled/ai/standards/pipeline-integration-standards.ai.yaml +8 -9
- package/bundled/ai/standards/pipeline-security-gates.ai.yaml +4 -0
- package/bundled/ai/standards/recovery-recipe-registry.ai.yaml +6 -10
- package/bundled/ai/standards/release-readiness-gate.ai.yaml +77 -0
- package/bundled/ai/standards/security-decision.ai.yaml +3 -3
- package/bundled/ai/standards/server-ops-security.ai.yaml +1 -1
- package/bundled/ai/standards/standard-admission-criteria.ai.yaml +1 -1
- package/bundled/ai/standards/standard-lifecycle-management.ai.yaml +1 -1
- package/bundled/ai/standards/supply-chain-attestation.ai.yaml +1 -1
- package/bundled/ai/standards/testing.ai.yaml +20 -13
- package/bundled/ai/standards/token-budget.ai.yaml +3 -3
- package/bundled/ai/standards/workflow-enforcement.ai.yaml +8 -11
- package/bundled/ai/standards/workflow-state-protocol.ai.yaml +8 -10
- package/bundled/core/accessibility-standards.md +58 -0
- package/bundled/core/adversarial-test.md +1 -1
- package/bundled/core/agent-behavior-discipline.md +4 -4
- package/bundled/core/agent-communication-protocol.md +5 -5
- package/bundled/core/branch-completion.md +4 -0
- package/bundled/core/browser-compatibility-standards.md +220 -0
- package/bundled/core/checkin-standards.md +1 -0
- package/bundled/core/circuit-breaker.md +4 -4
- package/bundled/core/container-security.md +8 -8
- package/bundled/core/contract-testing-standards.md +182 -0
- package/bundled/core/cross-flow-regression.md +190 -0
- package/bundled/core/disaster-recovery-drill.md +3 -3
- package/bundled/core/dual-phase-output.md +1 -1
- package/bundled/core/failure-source-taxonomy.md +3 -3
- package/bundled/core/flow-based-testing.md +135 -2
- package/bundled/core/full-coverage-testing.md +183 -0
- package/bundled/core/git-worktree.md +1 -1
- package/bundled/core/governance-layer.md +151 -0
- package/bundled/core/llm-output-validation.md +2 -2
- package/bundled/core/mock-boundary.md +1 -1
- package/bundled/core/packaging-standards.md +14 -14
- package/bundled/core/performance-standards.md +65 -0
- package/bundled/core/policy-as-code-testing.md +9 -9
- package/bundled/core/recovery-recipe-registry.md +2 -2
- package/bundled/core/release-quality-manifest.md +58 -12
- package/bundled/core/release-readiness-gate.md +184 -0
- package/bundled/core/sast-advanced.md +5 -5
- package/bundled/core/secure-op.md +5 -5
- package/bundled/core/security-decision.md +1 -1
- package/bundled/core/server-ops-security.md +15 -15
- package/bundled/core/smoke-test.md +1 -1
- package/bundled/core/standard-admission-criteria.md +1 -1
- package/bundled/core/standard-lifecycle-management.md +1 -1
- package/bundled/core/supply-chain-attestation.md +4 -4
- package/bundled/core/token-budget.md +3 -3
- package/bundled/locales/zh-CN/CHANGELOG.md +51 -4
- package/bundled/locales/zh-CN/README.md +11 -27
- package/bundled/locales/zh-CN/core/agent-communication-protocol.md +5 -5
- package/bundled/locales/zh-CN/core/circuit-breaker.md +1 -1
- package/bundled/locales/zh-CN/core/git-worktree.md +1 -1
- package/bundled/locales/zh-CN/core/packaging-standards.md +14 -14
- package/bundled/locales/zh-CN/core/recovery-recipe-registry.md +6 -9
- package/bundled/locales/zh-CN/core/standard-admission-criteria.md +1 -1
- package/bundled/locales/zh-CN/core/standard-lifecycle-management.md +1 -1
- package/bundled/locales/zh-CN/core/token-budget.md +1 -1
- package/bundled/locales/zh-TW/CHANGELOG.md +51 -4
- package/bundled/locales/zh-TW/README.md +11 -27
- package/bundled/locales/zh-TW/core/agent-communication-protocol.md +5 -5
- package/bundled/locales/zh-TW/core/browser-compatibility-standards.md +11 -0
- package/bundled/locales/zh-TW/core/capability-declaration.md +4 -4
- package/bundled/locales/zh-TW/core/circuit-breaker.md +7 -7
- package/bundled/locales/zh-TW/core/contract-testing-standards.md +11 -0
- package/bundled/locales/zh-TW/core/cross-flow-regression.md +11 -0
- package/bundled/locales/zh-TW/core/dual-phase-output.md +3 -3
- package/bundled/locales/zh-TW/core/failure-source-taxonomy.md +7 -9
- package/bundled/locales/zh-TW/core/governance-layer.md +159 -0
- package/bundled/locales/zh-TW/core/packaging-standards.md +14 -14
- package/bundled/locales/zh-TW/core/recovery-recipe-registry.md +6 -9
- package/bundled/locales/zh-TW/core/release-readiness-gate.md +11 -0
- package/bundled/locales/zh-TW/core/security-decision.md +3 -3
- package/bundled/locales/zh-TW/core/standard-admission-criteria.md +1 -1
- package/bundled/locales/zh-TW/core/standard-lifecycle-management.md +1 -1
- package/bundled/locales/zh-TW/core/token-budget.md +3 -3
- package/bundled/skills/README.md +23 -0
- package/bundled/skills/atdd-assistant/SKILL.md +4 -5
- package/bundled/skills/bdd-assistant/SKILL.md +4 -5
- package/bundled/skills/checkin-assistant/SKILL.md +4 -6
- package/bundled/skills/code-review-assistant/SKILL.md +4 -5
- package/bundled/skills/commands/observability.md +42 -0
- package/bundled/skills/commands/runbook.md +44 -0
- package/bundled/skills/commands/slo.md +45 -0
- package/bundled/skills/journey-test-assistant/SKILL.md +1 -1
- package/bundled/skills/orchestrate/SKILL.md +1 -1
- package/bundled/skills/plan/SKILL.md +1 -1
- package/bundled/skills/pr-automation-assistant/SKILL.md +4 -5
- package/bundled/skills/push/SKILL.md +1 -1
- package/bundled/skills/spec-driven-dev/SKILL.md +4 -5
- package/bundled/skills/sweep/SKILL.md +3 -3
- package/bundled/skills/tdd-assistant/SKILL.md +4 -5
- package/package.json +6 -6
- package/src/commands/check.js +43 -0
- package/src/commands/flow.js +7 -5
- package/src/commands/init.js +2 -1
- package/src/commands/start.js +7 -6
- package/src/commands/sweep.js +7 -6
- package/src/commands/update.js +10 -0
- package/src/commands/workflow.js +7 -6
- package/src/core/agent-communication-protocol.js +10 -3
- package/standards-registry.json +107 -51
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# Full Coverage Testing Standards - AI Optimized
|
|
2
|
+
# XSPEC-178: Replaces pyramid threshold model with behavior-completeness paradigm
|
|
3
|
+
# Source: core/full-coverage-testing.md
|
|
4
|
+
|
|
5
|
+
standard:
|
|
6
|
+
id: full-coverage-testing
|
|
7
|
+
name: Full Coverage Testing Standards
|
|
8
|
+
description: Behavior-completeness full coverage paradigm replacing pyramid thresholds. Enforces anti-fake-test rules, STUB marker protocol, ratchet CI, and @ac traceability.
|
|
9
|
+
|
|
10
|
+
meta:
|
|
11
|
+
version: "1.0.0"
|
|
12
|
+
updated: "2026-05-06"
|
|
13
|
+
source: core/full-coverage-testing.md
|
|
14
|
+
replaces: "testing pyramid thresholds (UT≥80%/IT≥70%/E2E happy-path-only)"
|
|
15
|
+
xspec: "XSPEC-178"
|
|
16
|
+
description: AI-era full coverage paradigm — cost of writing tests equals cost of writing code, so there is no reason to set lower thresholds for any test layer.
|
|
17
|
+
|
|
18
|
+
rationale: |
|
|
19
|
+
Traditional pyramid thresholds (UT≥80%, IT≥70%) assumed tests were expensive to write.
|
|
20
|
+
AI code generation eliminates this cost differential — code and tests are produced at the
|
|
21
|
+
same speed. Therefore: maximize coverage everywhere, with behavior-completeness as the
|
|
22
|
+
measure, not a percentage floor.
|
|
23
|
+
|
|
24
|
+
coverage_model:
|
|
25
|
+
type: behavior_completeness
|
|
26
|
+
description: Every public function must have tests for all three behavioral paths
|
|
27
|
+
required_paths:
|
|
28
|
+
- id: happy_path
|
|
29
|
+
description: Normal input produces correct output
|
|
30
|
+
example: "calculateDiscount(100, 0.1) → 90"
|
|
31
|
+
- id: edge_case
|
|
32
|
+
description: Boundary values do not cause unexpected errors
|
|
33
|
+
example: "calculateDiscount(0, 1.0) → 0 without throwing"
|
|
34
|
+
- id: error_path
|
|
35
|
+
description: Invalid input raises clear error or returns error state
|
|
36
|
+
example: "calculateDiscount(-1, 2.0) → throws ArgumentError"
|
|
37
|
+
|
|
38
|
+
ratchet_policy:
|
|
39
|
+
enabled: true
|
|
40
|
+
description: Coverage can only increase, never decrease. PR that regresses coverage is blocked.
|
|
41
|
+
mechanism:
|
|
42
|
+
- Store baseline in .coverage-baseline.json on main branch
|
|
43
|
+
- Every PR compares current coverage against baseline
|
|
44
|
+
- Regression = PR blocked, not merged
|
|
45
|
+
- Improvement = new baseline set on merge
|
|
46
|
+
note: No fixed floor threshold. The current coverage IS the threshold.
|
|
47
|
+
|
|
48
|
+
rules:
|
|
49
|
+
# ── Behavior completeness ──────────────────────────────────────
|
|
50
|
+
- id: three-path-coverage
|
|
51
|
+
trigger: writing tests for any public function
|
|
52
|
+
instruction: |
|
|
53
|
+
Write at least three tests per public function:
|
|
54
|
+
1. happy_path — normal inputs, expected output
|
|
55
|
+
2. edge_case — boundary values (zero, max, empty, null)
|
|
56
|
+
3. error_path — invalid inputs trigger explicit error or error state
|
|
57
|
+
priority: required
|
|
58
|
+
|
|
59
|
+
- id: ac-traceability
|
|
60
|
+
trigger: writing any test
|
|
61
|
+
instruction: |
|
|
62
|
+
Tag each test with the Acceptance Criteria it covers using JSDoc @ac tag.
|
|
63
|
+
Format: /** @ac AC-ID */ above the test function.
|
|
64
|
+
If no AC maps to this test, use: /** @ac UNTRACED */
|
|
65
|
+
priority: recommended
|
|
66
|
+
example: |
|
|
67
|
+
/**
|
|
68
|
+
* @ac AC-US03-2
|
|
69
|
+
*/
|
|
70
|
+
it('should block PR when coverage regresses', () => { ... })
|
|
71
|
+
|
|
72
|
+
# ── Anti-fake test rules ───────────────────────────────────────
|
|
73
|
+
- id: no-tautology-assertions
|
|
74
|
+
trigger: writing any test assertion
|
|
75
|
+
instruction: |
|
|
76
|
+
FORBIDDEN: Tautology assertions that always pass regardless of behavior.
|
|
77
|
+
These add false coverage without verifying anything.
|
|
78
|
+
priority: required
|
|
79
|
+
forbidden_patterns:
|
|
80
|
+
- "expect(true).toBe(true)"
|
|
81
|
+
- "expect(false).toBe(false)"
|
|
82
|
+
- "expect(result).toBeDefined() // without specific value"
|
|
83
|
+
- "expect(result).not.toBeNull() // without specific value"
|
|
84
|
+
required_instead: "expect(result).toBe(<specific expected value>)"
|
|
85
|
+
|
|
86
|
+
- id: no-mock-business-logic
|
|
87
|
+
trigger: deciding what to mock
|
|
88
|
+
instruction: |
|
|
89
|
+
FORBIDDEN: Mocking core business logic or your own service functions.
|
|
90
|
+
Mocking your own code means the business logic is never actually executed.
|
|
91
|
+
priority: required
|
|
92
|
+
allowed_to_mock:
|
|
93
|
+
- External HTTP APIs (payment gateways, OAuth providers)
|
|
94
|
+
- Hardware interfaces (sensors, GPIO, Docker daemon)
|
|
95
|
+
- Third-party SDKs with no test mode
|
|
96
|
+
- File system (use tmpdir, not mock)
|
|
97
|
+
forbidden_to_mock:
|
|
98
|
+
- Core business calculation functions
|
|
99
|
+
- Your own service layer methods
|
|
100
|
+
- Database queries (use in-memory SQLite instead)
|
|
101
|
+
- Your own utility functions
|
|
102
|
+
|
|
103
|
+
- id: mock-must-have-reason
|
|
104
|
+
trigger: writing any mock/stub/spy
|
|
105
|
+
instruction: |
|
|
106
|
+
Every jest.mock(), vi.mock(), jest.spyOn(), or sinon.stub() must be preceded
|
|
107
|
+
by a comment explaining WHY this dependency must be mocked.
|
|
108
|
+
Format: // MOCK: <reason — what external dependency and why it cannot be real>
|
|
109
|
+
priority: required
|
|
110
|
+
example: |
|
|
111
|
+
// MOCK: External Stripe payment API — no sandbox available in CI
|
|
112
|
+
jest.mock('./payment-gateway', () => ({ charge: jest.fn().mockResolvedValue({ id: 'ch_test' }) }))
|
|
113
|
+
|
|
114
|
+
# ── STUB marker protocol ───────────────────────────────────────
|
|
115
|
+
- id: stub-marker-required
|
|
116
|
+
trigger: writing any temporary/placeholder implementation
|
|
117
|
+
instruction: |
|
|
118
|
+
ALL temporary implementations, placeholder functions, and fake returns
|
|
119
|
+
MUST be marked with the standard STUB marker.
|
|
120
|
+
Format: // WARNING: STUB — Remove before UAT
|
|
121
|
+
This marker is scanned by pre-push hooks and deploy.sh.
|
|
122
|
+
STUB markers block pushes to main and deployments to UAT/production.
|
|
123
|
+
priority: required
|
|
124
|
+
example: |
|
|
125
|
+
// WARNING: STUB — Remove before UAT
|
|
126
|
+
async function validatePayment(card: Card): Promise<boolean> {
|
|
127
|
+
return true; // Always approve — replace with real Stripe call
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
- id: coverage-exempt-format
|
|
131
|
+
trigger: dealing with genuinely untestable external dependencies
|
|
132
|
+
instruction: |
|
|
133
|
+
If a dependency truly cannot be tested (hardware, live external API with no sandbox),
|
|
134
|
+
declare an explicit exemption with a mandatory reason.
|
|
135
|
+
Format: // COVERAGE_EXEMPT: <specific reason why real test is impossible>
|
|
136
|
+
This exemption is respected by STUB scanners and will not trigger blocking.
|
|
137
|
+
The reason MUST be non-empty and specific.
|
|
138
|
+
priority: required
|
|
139
|
+
example: |
|
|
140
|
+
// COVERAGE_EXEMPT: Hardware temperature sensor — no simulation available in CI
|
|
141
|
+
async function readTemperature(): Promise<number> {
|
|
142
|
+
return hardwareSensor.read();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
- id: no-silent-stub
|
|
146
|
+
trigger: reviewing code before commit
|
|
147
|
+
instruction: |
|
|
148
|
+
Stubbed/placeholder code without // WARNING: STUB is a violation.
|
|
149
|
+
Common patterns to watch for: functions that always return hardcoded values,
|
|
150
|
+
empty function bodies that should have logic, TODO comments without STUB marker.
|
|
151
|
+
These will eventually reach production undetected.
|
|
152
|
+
priority: required
|
|
153
|
+
|
|
154
|
+
deployment_gates:
|
|
155
|
+
pre_push_to_main:
|
|
156
|
+
action: block
|
|
157
|
+
trigger: "// WARNING: STUB" marker found in src/
|
|
158
|
+
message: "[STUB-BLOCK] STUB markers detected. Push to main rejected."
|
|
159
|
+
deploy_to_uat:
|
|
160
|
+
action: block
|
|
161
|
+
trigger: "// WARNING: STUB" marker found in src/
|
|
162
|
+
message: "[DEPLOY-BLOCK] STUB markers detected. UAT deployment aborted."
|
|
163
|
+
deploy_to_production:
|
|
164
|
+
action: block
|
|
165
|
+
trigger: "// WARNING: STUB" marker found in src/
|
|
166
|
+
message: "[CRITICAL] Production deployment with STUB markers is strictly prohibited."
|
|
167
|
+
deploy_to_staging:
|
|
168
|
+
action: warn
|
|
169
|
+
trigger: "// WARNING: STUB" marker found in src/
|
|
170
|
+
message: "[STUB-WARN] Deploying with STUB markers to staging. NOT permitted in UAT/production."
|
|
171
|
+
feature_branch_push:
|
|
172
|
+
action: warn
|
|
173
|
+
trigger: "// WARNING: STUB" marker found in src/
|
|
174
|
+
message: "[STUB-WARN] STUB markers found. Must remove before merging to main."
|
|
175
|
+
|
|
176
|
+
migration_from_pyramid:
|
|
177
|
+
deprecated:
|
|
178
|
+
- "UT ≥ 80% coverage threshold"
|
|
179
|
+
- "IT ≥ 70% coverage threshold"
|
|
180
|
+
- "E2E happy-path-only requirement"
|
|
181
|
+
replaced_by:
|
|
182
|
+
- "Behavior-completeness: happy/edge/error per public function"
|
|
183
|
+
- "Ratchet CI: coverage can only increase"
|
|
184
|
+
- "Anti-fake rules: no tautology, no business-logic mocks"
|
|
185
|
+
- "STUB protocol: deployment gates on all environments"
|
|
186
|
+
|
|
187
|
+
physical_spec:
|
|
188
|
+
type: custom_script
|
|
189
|
+
validator:
|
|
190
|
+
command: >
|
|
191
|
+
test -f scripts/check-stubs.sh && test -f scripts/check-anti-fake-tests.sh
|
|
192
|
+
rule: "xspec178_enforcement_scripts_present"
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Governance Layer Standard - AI Optimized
|
|
2
|
+
# Source: core/governance-layer.md
|
|
3
|
+
|
|
4
|
+
id: governance-layer
|
|
5
|
+
meta:
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
updated: "2026-05-07"
|
|
8
|
+
source: core/governance-layer.md
|
|
9
|
+
description: "治理層標準(Vision/Mission/Goals 三層架構 + KPI + 紅線清單)"
|
|
10
|
+
scope: universal
|
|
11
|
+
priority: meta
|
|
12
|
+
|
|
13
|
+
# This is Standard #0 — evaluated before all other standards
|
|
14
|
+
priority_order:
|
|
15
|
+
rule: "Governance layer overrides all other standards on conflict"
|
|
16
|
+
resolution_order:
|
|
17
|
+
1: governance-layer (this standard)
|
|
18
|
+
2: domain standards (testing, commit, deployment, etc.)
|
|
19
|
+
3: project-specific overrides
|
|
20
|
+
|
|
21
|
+
# Three-layer schema requirements
|
|
22
|
+
schema:
|
|
23
|
+
vision:
|
|
24
|
+
required: true
|
|
25
|
+
format: "Single sentence, ≤ 50 tokens"
|
|
26
|
+
content: "Long-term direction; timeless; no metrics"
|
|
27
|
+
change_frequency: annual
|
|
28
|
+
|
|
29
|
+
mission:
|
|
30
|
+
required: true
|
|
31
|
+
format: "3–5 commitments + red_lines table (≤ 300 tokens total)"
|
|
32
|
+
content: "What we do / don't do; red lines with trigger conditions + actions"
|
|
33
|
+
change_frequency: quarterly
|
|
34
|
+
red_lines:
|
|
35
|
+
required_fields:
|
|
36
|
+
- id # Unique identifier (e.g., R1, GUARD-001)
|
|
37
|
+
- category # quality | safety | compliance | ethics
|
|
38
|
+
- clause # Human-readable forbidden/required statement
|
|
39
|
+
- action # block | warn | escalate_to_human
|
|
40
|
+
recommended_fields:
|
|
41
|
+
- mission_clause_ref # Reference to the mission commitment this enforces
|
|
42
|
+
|
|
43
|
+
goals:
|
|
44
|
+
required: true
|
|
45
|
+
format: "KPI table, ≤ 500 tokens"
|
|
46
|
+
change_frequency: per_sprint
|
|
47
|
+
falsifiability: "Every KPI must be measurable — no 'improve', 'enhance', 'better'"
|
|
48
|
+
kpi:
|
|
49
|
+
required_fields:
|
|
50
|
+
- id # Unique identifier (e.g., KPI-01)
|
|
51
|
+
- metric_name # Name of the tracked metric
|
|
52
|
+
- threshold # Quantified target (e.g., ≥ 95%, < 200 ms)
|
|
53
|
+
- measurement_method # How and when the metric is measured
|
|
54
|
+
|
|
55
|
+
# Red line action semantics
|
|
56
|
+
red_line_actions:
|
|
57
|
+
block:
|
|
58
|
+
description: "Halt pipeline immediately; do not proceed"
|
|
59
|
+
warn:
|
|
60
|
+
description: "Log violation and continue; escalate if threshold exceeded"
|
|
61
|
+
escalate_to_human:
|
|
62
|
+
description: "Pause and require human decision before continuing"
|
|
63
|
+
|
|
64
|
+
# AI evaluator integration
|
|
65
|
+
evaluator:
|
|
66
|
+
scoring_axes:
|
|
67
|
+
correctness:
|
|
68
|
+
weight: 0.4
|
|
69
|
+
veto_threshold: 0.3
|
|
70
|
+
mission_alignment:
|
|
71
|
+
weight: 0.3
|
|
72
|
+
veto_threshold: 0.3
|
|
73
|
+
goal_achievement:
|
|
74
|
+
weight: 0.3
|
|
75
|
+
veto_threshold: 0.3
|
|
76
|
+
veto_rule: "Any single axis < 0.3 → FAIL regardless of weighted sum"
|
|
77
|
+
|
|
78
|
+
# Risk acceptance for relaxed gates
|
|
79
|
+
risk_acceptance:
|
|
80
|
+
trigger: "gate.mode = trace_only (or any human gate bypass)"
|
|
81
|
+
required_fields:
|
|
82
|
+
- date
|
|
83
|
+
- signatory
|
|
84
|
+
- gates_bypassed
|
|
85
|
+
- risks_accepted
|
|
86
|
+
fail_closed: "Pipeline MUST refuse to start without a valid Risk Acceptance Clause"
|
|
87
|
+
|
|
88
|
+
# Governance file structure
|
|
89
|
+
file_structure:
|
|
90
|
+
directory: "governance/"
|
|
91
|
+
files:
|
|
92
|
+
- name: "vision.md"
|
|
93
|
+
content: "Single-sentence vision statement"
|
|
94
|
+
- name: "mission.md"
|
|
95
|
+
content: "Commitments + red lines table; Risk Acceptance Clause if applicable"
|
|
96
|
+
- name: "goals.md"
|
|
97
|
+
content: "KPI table (updated each Sprint)"
|
|
98
|
+
|
|
99
|
+
# Compliance checklist (AI-verifiable)
|
|
100
|
+
compliance_checks:
|
|
101
|
+
- id: CK-01
|
|
102
|
+
check: "Vision is a single sentence ≤ 50 tokens with no metrics"
|
|
103
|
+
- id: CK-02
|
|
104
|
+
check: "Mission has 3–5 commitments and a red_lines table"
|
|
105
|
+
- id: CK-03
|
|
106
|
+
check: "Every red line has: id, category, clause, action"
|
|
107
|
+
- id: CK-04
|
|
108
|
+
check: "Goals table present with all KPIs containing required fields"
|
|
109
|
+
- id: CK-05
|
|
110
|
+
check: "No KPI uses vague language (improve / enhance / better)"
|
|
111
|
+
- id: CK-06
|
|
112
|
+
check: "If gate.mode=trace_only, Risk Acceptance Clause exists in mission.md"
|
|
113
|
+
- id: CK-07
|
|
114
|
+
check: "Evaluator weights 0.4/0.3/0.3 with fail-closed veto at < 0.3"
|
|
@@ -20,7 +20,7 @@ core_problem:
|
|
|
20
20
|
a specification of mock behavior rather than system behavior.
|
|
21
21
|
The tests pass in CI while the real system silently fails.
|
|
22
22
|
real_world_example: |
|
|
23
|
-
// SPEC-002.test.ts (
|
|
23
|
+
// SPEC-002.test.ts (multi-agent pipeline project) — hollow test example
|
|
24
24
|
vi.mock('../../src/runner/agent-runner.js') // Core dependency mocked
|
|
25
25
|
vi.mock('../../src/runner/guardian-hooks.js') // Core dependency mocked
|
|
26
26
|
vi.mock('../../src/runner/prototyper.js') // Core dependency mocked
|
|
@@ -103,7 +103,7 @@ standard:
|
|
|
103
103
|
description: "數學推理準確率"
|
|
104
104
|
benchmark: "gsm8k"
|
|
105
105
|
instruction_following:
|
|
106
|
-
description: "
|
|
106
|
+
description: "複雜多步驟指令遵循率(多 Agent pipeline 場景最重視)"
|
|
107
107
|
benchmark: "internal-instruction-bench"
|
|
108
108
|
long_context_quality:
|
|
109
109
|
description: "長文件中間段資訊存取(Lost-in-the-Middle)"
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
standard:
|
|
5
5
|
id: packaging
|
|
6
6
|
name: Packaging Standards
|
|
7
|
-
description: Recipe-based packaging framework for user projects using UDS
|
|
7
|
+
description: Recipe-based packaging framework for user projects using a UDS-aware toolchain
|
|
8
8
|
guidelines:
|
|
9
9
|
- "Recipe-based: use built-in or custom recipes for each packaging target"
|
|
10
|
-
- "Declarative: declare targets in
|
|
10
|
+
- "Declarative: declare targets in your project's packaging config (path is adoption-layer specific)"
|
|
11
11
|
- "Customizable: override config, inject hooks, or write custom recipes"
|
|
12
|
-
- "Pipeline-integrated: packaging runs between Review and Deploy in
|
|
12
|
+
- "Pipeline-integrated: packaging runs between Review and Deploy in the adoption-layer pipeline"
|
|
13
13
|
|
|
14
14
|
meta:
|
|
15
15
|
version: "1.0.0"
|
|
@@ -19,7 +19,7 @@ standard:
|
|
|
19
19
|
principles:
|
|
20
20
|
core:
|
|
21
21
|
- recipe_based: "Every packaging target references a named Recipe; no ad-hoc scripts in pipeline YAML"
|
|
22
|
-
- declarative_targets: "Projects declare targets in
|
|
22
|
+
- declarative_targets: "Projects declare targets in their packaging config (file path is adoption-layer specific); the adoption-layer runtime resolves and executes"
|
|
23
23
|
- customizable: "Four customization layers allow config overrides, hook injection, custom Recipes, and escape hatches"
|
|
24
24
|
- pipeline_integrated: "Packaging runs as a named stage between Review and Deploy"
|
|
25
25
|
|
|
@@ -82,15 +82,15 @@ built_in_recipes:
|
|
|
82
82
|
customization_layers:
|
|
83
83
|
L1:
|
|
84
84
|
name: config_override
|
|
85
|
-
mechanism: "config: block in .
|
|
85
|
+
mechanism: "config: block in .uds/packaging.yaml"
|
|
86
86
|
when: "Change default values (registry URL, tag, output dir)"
|
|
87
87
|
L2:
|
|
88
88
|
name: hook_injection
|
|
89
|
-
mechanism: "hooks: block in .
|
|
89
|
+
mechanism: "hooks: block in .uds/packaging.yaml"
|
|
90
90
|
when: "Run extra commands before/after build or publish"
|
|
91
91
|
L3:
|
|
92
92
|
name: custom_recipe
|
|
93
|
-
mechanism: "New .yaml file in project's .
|
|
93
|
+
mechanism: "New .yaml file in project's .uds/recipes/"
|
|
94
94
|
when: "Entirely different build process; built-ins don't apply"
|
|
95
95
|
L4:
|
|
96
96
|
name: escape_hatch
|
|
@@ -138,5 +138,5 @@ recipe_selection_guide:
|
|
|
138
138
|
physical_spec:
|
|
139
139
|
type: custom_script
|
|
140
140
|
validator:
|
|
141
|
-
command: "test -f .
|
|
141
|
+
command: "test -f .uds/packaging.yaml"
|
|
142
142
|
rule: "packaging_config_declared"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Pipeline Integration Standards - DEPRECATED STUB
|
|
2
|
-
#
|
|
3
|
-
#
|
|
2
|
+
# Runtime details relocated to adoption layer (runtime moved to adoption layer 2026-04-28).
|
|
3
|
+
# Adoption layer must implement an equivalent runtime; UDS retains only the human-readable concept under core/.
|
|
4
4
|
# Migration: XSPEC-086 Phase 2 (2026-04-27)
|
|
5
5
|
#
|
|
6
6
|
# Human-readable standard: core/pipeline-integration-standards.md (remains in UDS)
|
|
@@ -14,20 +14,19 @@ standard:
|
|
|
14
14
|
deprecated: true
|
|
15
15
|
deprecated_since: "5.4.0"
|
|
16
16
|
removal_version: "6.0.0"
|
|
17
|
-
canonical_owner:
|
|
18
|
-
canonical_path: "
|
|
17
|
+
canonical_owner: adoption-layer
|
|
18
|
+
canonical_path: "" # adoption-layer responsibility
|
|
19
19
|
source: core/pipeline-integration-standards.md
|
|
20
20
|
description: >
|
|
21
|
-
DEPRECATED:
|
|
22
|
-
|
|
21
|
+
DEPRECATED: Runtime details relocated to adoption layer (runtime moved to adoption layer 2026-04-28).
|
|
22
|
+
Adoption layer must implement an equivalent runtime.
|
|
23
23
|
|
|
24
24
|
rules:
|
|
25
25
|
- id: deprecation-notice
|
|
26
26
|
trigger: starting pipeline execution
|
|
27
27
|
instruction: >
|
|
28
|
-
|
|
28
|
+
Runtime details for this standard are now adoption-layer responsibility (runtime moved to adoption layer 2026-04-28).
|
|
29
29
|
For the canonical executable definition, load:
|
|
30
|
-
dev-autopilot/standards/flow/pipeline-integration-standards.ai.yaml
|
|
31
30
|
|
|
32
31
|
The human-readable standard remains at:
|
|
33
32
|
universal-dev-standards/core/pipeline-integration-standards.md
|
|
@@ -36,7 +35,7 @@ standard:
|
|
|
36
35
|
- id: fail-safe-defaults
|
|
37
36
|
trigger: toggle not found in configuration
|
|
38
37
|
instruction: >
|
|
39
|
-
DEPRECATED —
|
|
38
|
+
DEPRECATED — see universal-dev-standards/core/ for human-readable concept; runtime is adoption-layer responsibility
|
|
40
39
|
for the current executable pipeline integration rules.
|
|
41
40
|
|
|
42
41
|
Minimal fallback: Default all unset pipeline toggles to OFF (manual mode).
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Pipeline Security Gates (AI-Optimized v1)
|
|
2
2
|
# Source: core/pipeline-security-gates.md
|
|
3
|
+
# DEPRECATION NOTICE (XSPEC-086 Phase 3, 2026-04-28):
|
|
4
|
+
# Security gate orchestration (pipeline stage ordering, escalation flow) is now
|
|
5
|
+
# adoption-layer responsibility — UDS no longer ships an executable runtime.
|
|
6
|
+
# This file retains gate definitions, tools, severity levels, and failure_behavior only.
|
|
3
7
|
|
|
4
8
|
standard:
|
|
5
9
|
id: pipeline-security-gates
|
|
@@ -187,14 +187,10 @@ standard:
|
|
|
187
187
|
on_exhaust: RecoveryStrategy
|
|
188
188
|
message: "string (optional)"
|
|
189
189
|
|
|
190
|
+
# Integration guidance (informative; concrete file paths are adoption-layer concerns).
|
|
190
191
|
integration_points:
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
vibeops:
|
|
197
|
-
files:
|
|
198
|
-
- "src/types/index.ts — 獨立定義 RecoveryRecipe(AGPL 隔離)"
|
|
199
|
-
- "src/runner/recovery-registry.ts — 獨立實作"
|
|
200
|
-
- "recovery-recipes.yaml — 預設 recipe 配置"
|
|
192
|
+
expected_call_sites:
|
|
193
|
+
- "core types module — RecoveryRecipe / RecoveryStrategy type"
|
|
194
|
+
- "recovery-registry module — Registry 實作與預設 recipe"
|
|
195
|
+
- "orchestrator module — fix loop 前查詢 Registry"
|
|
196
|
+
- "recovery-recipes config — 預設 recipe 配置(檔名由採用層決定)"
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Release Readiness Gate Standards - AI Optimized
|
|
2
|
+
# Source: core/release-readiness-gate.md
|
|
3
|
+
|
|
4
|
+
id: release-readiness-gate
|
|
5
|
+
meta:
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
updated: "2026-05-05"
|
|
8
|
+
source: core/release-readiness-gate.md
|
|
9
|
+
description: Single aggregated release gate covering 16 quality dimensions with tiered sign-off template and RQM integration
|
|
10
|
+
|
|
11
|
+
requirements:
|
|
12
|
+
REQ-1:
|
|
13
|
+
id: REQ-RRG-001
|
|
14
|
+
title: 16-Dimension Coverage
|
|
15
|
+
rule: >
|
|
16
|
+
Every production release MUST evaluate all 16 quality dimensions defined in
|
|
17
|
+
core/release-readiness-gate.md. Tier-1 dimensions block release if FAIL.
|
|
18
|
+
Tier-2 dimensions require documented rationale if WARN. Tier-3 dimensions
|
|
19
|
+
require rationale if N/A.
|
|
20
|
+
rationale: >
|
|
21
|
+
Without explicit multi-dimension coverage, teams pass individual gate checks
|
|
22
|
+
but ship with unverified quality dimensions, creating systematic blind spots.
|
|
23
|
+
|
|
24
|
+
REQ-2:
|
|
25
|
+
id: REQ-RRG-002
|
|
26
|
+
title: Release Readiness Sign-off
|
|
27
|
+
rule: >
|
|
28
|
+
A Release Readiness Sign-off document MUST be created from the template in
|
|
29
|
+
core/release-readiness-gate.md for every release tag. It must be stored at
|
|
30
|
+
.release-readiness/<version>.md. The Overall Decision field must be explicitly
|
|
31
|
+
set to GO or NO-GO by a named release owner.
|
|
32
|
+
rationale: >
|
|
33
|
+
Anonymous or implicit GO decisions remove accountability; the sign-off creates
|
|
34
|
+
a named, dated, auditable record of the go/no-go decision and its evidence.
|
|
35
|
+
|
|
36
|
+
REQ-3:
|
|
37
|
+
id: REQ-RRG-003
|
|
38
|
+
title: Tier-1 Hard Block
|
|
39
|
+
rule: >
|
|
40
|
+
ANY Tier-1 dimension at FAIL status MUST block production deployment.
|
|
41
|
+
Tier-1 dimensions are: Security (Dim 2), DB Migration (Dim 5), Operational
|
|
42
|
+
Readiness (Dim 7), Rollback/DR (Dim 13), Production Smoke (Dim 14).
|
|
43
|
+
rationale: >
|
|
44
|
+
Tier-1 dimensions represent existential risks: security vulnerabilities,
|
|
45
|
+
broken rollback, misconfigured monitoring. No business justification
|
|
46
|
+
overrides a Tier-1 FAIL.
|
|
47
|
+
|
|
48
|
+
REQ-4:
|
|
49
|
+
id: REQ-RRG-004
|
|
50
|
+
title: RQM Alignment
|
|
51
|
+
rule: >
|
|
52
|
+
The machine-readable Release Quality Manifest (release-quality-manifest.md)
|
|
53
|
+
MUST include entries for all automated dimensions (a11y_critical, contract_drift,
|
|
54
|
+
cross_flow_cuj_pass_rate, browser_tier1_pass_rate, capacity_headroom_cpu_pct,
|
|
55
|
+
smoke_pass_rate, flow_gate_report). The RQM overall field must be PASS or WARN
|
|
56
|
+
(never FAIL) before deployment.
|
|
57
|
+
rationale: >
|
|
58
|
+
Human sign-off and machine manifest are complementary; the manifest enables
|
|
59
|
+
automated enforcement while the sign-off provides human accountability.
|
|
60
|
+
|
|
61
|
+
REQ-5:
|
|
62
|
+
id: REQ-RRG-005
|
|
63
|
+
title: Incremental Collection
|
|
64
|
+
rule: >
|
|
65
|
+
Release Readiness Sign-off evidence MUST be collected incrementally throughout
|
|
66
|
+
the release cycle (Gate 0 at PRD, Gate 3 pre-UAT, Gate 4 post-UAT). Creating
|
|
67
|
+
the sign-off on the day of deployment is an anti-pattern.
|
|
68
|
+
rationale: >
|
|
69
|
+
Last-minute sign-offs are rubber stamps; evidence collected late cannot
|
|
70
|
+
be acted upon without delaying the release.
|
|
71
|
+
|
|
72
|
+
quick_reference:
|
|
73
|
+
tier_1_dimensions: "Security, DB Migration, Operational Readiness, Rollback/DR, Production Smoke"
|
|
74
|
+
tier_2_dimensions: "Performance, a11y, Cross-flow Regression, i18n, Docs, Feature Flags, Multi-Gate Flow"
|
|
75
|
+
tier_3_dimensions: "Contract Testing, Browser Compat, Capacity, Compliance/Privacy"
|
|
76
|
+
sign_off_location: ".release-readiness/<version>.md"
|
|
77
|
+
rqm_integration: "flow_gate_report.json → release-quality-manifest.yaml field flow_gate_report"
|
|
@@ -76,9 +76,9 @@ standard:
|
|
|
76
76
|
message: "[WARN] projectSettings security override rejected: {operation}"
|
|
77
77
|
|
|
78
78
|
applicable_components:
|
|
79
|
-
- "
|
|
80
|
-
- "
|
|
81
|
-
- "
|
|
79
|
+
- "Safety Hook 實作(採用層)"
|
|
80
|
+
- "CommandPolicy 實作(採用層)"
|
|
81
|
+
- "Governance Framework(採用層;OPA / Cedar / 自訂 policy engine 皆可)"
|
|
82
82
|
- "任何多來源規則合併的安全仲裁場景"
|
|
83
83
|
|
|
84
84
|
error_codes:
|
|
@@ -180,7 +180,7 @@ categories:
|
|
|
180
180
|
aws: [Security Groups, NACLs, VPC Flow Logs]
|
|
181
181
|
gcp: [VPC Firewall Rules, Cloud Armor]
|
|
182
182
|
outbound_allowlist_format: |
|
|
183
|
-
# Example: /etc/
|
|
183
|
+
# Example: /etc/ai-agent/outbound-allowlist.conf
|
|
184
184
|
ALLOW api.openai.com:443
|
|
185
185
|
ALLOW registry.npmjs.org:443
|
|
186
186
|
DENY *:* (default deny)
|
|
@@ -54,7 +54,7 @@ standard:
|
|
|
54
54
|
rejection_example: "與既有 `retry-standards` 80% 內容重複 — 應合併,不通過"
|
|
55
55
|
|
|
56
56
|
ai_executable:
|
|
57
|
-
description: "
|
|
57
|
+
description: "至少一個採用層元件(Quality Gate / Agent prompt / Skill / IDE rule)能消費此標準"
|
|
58
58
|
checks:
|
|
59
59
|
- "定義清楚的 guidelines(bullet point,每條可驗證)"
|
|
60
60
|
- "至少包含 2 個具體 scenarios(Given-When-Then 格式)"
|
|
@@ -104,7 +104,7 @@ standard:
|
|
|
104
104
|
scenarios:
|
|
105
105
|
scenario_1_trial_to_active:
|
|
106
106
|
given: "retry-standards 處於 trial 狀態,since=2026-04-17, expires=2026-10-17"
|
|
107
|
-
when: "2026-08-01
|
|
107
|
+
when: "2026-08-01 審視使用情況,發現多個採用層(Fix Loop / Builder Agent 等)都已採用,無重大缺陷"
|
|
108
108
|
then: "轉移到 Active,更新 status=active, since=2026-08-01,移除 expires 欄位"
|
|
109
109
|
note: "Trial → Active 的典型路徑"
|
|
110
110
|
|
|
@@ -85,7 +85,7 @@ examples:
|
|
|
85
85
|
{
|
|
86
86
|
"_type": "https://in-toto.io/Statement/v0.1",
|
|
87
87
|
"predicateType": "https://slsa.dev/provenance/v0.2",
|
|
88
|
-
"subject": [{"name": "
|
|
88
|
+
"subject": [{"name": "your-app", "digest": {"sha256": "${IMAGE_DIGEST}"}}],
|
|
89
89
|
"predicate": {
|
|
90
90
|
"buildType": "https://github.com/Attestations/GitHubActionsWorkflow@v1",
|
|
91
91
|
"builder": {"id": "https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"},
|