universal-dev-standards 5.4.0 → 5.6.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/adversarial-test.ai.yaml +277 -0
- package/bundled/ai/standards/audit-trail.ai.yaml +113 -0
- package/bundled/ai/standards/browser-compatibility-standards.ai.yaml +63 -0
- package/bundled/ai/standards/chaos-injection-tests.ai.yaml +91 -0
- package/bundled/ai/standards/container-image-standards.ai.yaml +88 -0
- package/bundled/ai/standards/container-security.ai.yaml +331 -0
- package/bundled/ai/standards/contract-testing-standards.ai.yaml +62 -0
- package/bundled/ai/standards/cost-budget-test.ai.yaml +96 -0
- package/bundled/ai/standards/cross-flow-regression.ai.yaml +61 -0
- package/bundled/ai/standards/data-contract.ai.yaml +110 -0
- package/bundled/ai/standards/data-migration-testing.ai.yaml +96 -0
- package/bundled/ai/standards/data-pipeline.ai.yaml +113 -0
- package/bundled/ai/standards/disaster-recovery-drill.ai.yaml +89 -0
- package/bundled/ai/standards/flaky-test-management.ai.yaml +89 -0
- package/bundled/ai/standards/flow-based-testing.ai.yaml +240 -0
- package/bundled/ai/standards/full-coverage-testing.ai.yaml +192 -0
- package/bundled/ai/standards/iac-design-principles.ai.yaml +83 -0
- package/bundled/ai/standards/incident-response.ai.yaml +107 -0
- package/bundled/ai/standards/license-compliance.ai.yaml +106 -0
- package/bundled/ai/standards/llm-output-validation.ai.yaml +269 -0
- package/bundled/ai/standards/mock-boundary.ai.yaml +250 -0
- package/bundled/ai/standards/mutation-testing.ai.yaml +192 -0
- package/bundled/ai/standards/pii-classification.ai.yaml +109 -0
- package/bundled/ai/standards/policy-as-code-testing.ai.yaml +227 -0
- package/bundled/ai/standards/prd-standards.ai.yaml +88 -0
- package/bundled/ai/standards/product-metrics-standards.ai.yaml +111 -0
- package/bundled/ai/standards/prompt-regression.ai.yaml +94 -0
- package/bundled/ai/standards/property-based-testing.ai.yaml +105 -0
- package/bundled/ai/standards/release-quality-manifest.ai.yaml +135 -0
- package/bundled/ai/standards/release-readiness-gate.ai.yaml +77 -0
- package/bundled/ai/standards/replay-test.ai.yaml +111 -0
- package/bundled/ai/standards/runbook.ai.yaml +104 -0
- package/bundled/ai/standards/sast-advanced.ai.yaml +135 -0
- package/bundled/ai/standards/schema-evolution.ai.yaml +111 -0
- package/bundled/ai/standards/secret-management-standards.ai.yaml +105 -0
- package/bundled/ai/standards/secure-op.ai.yaml +365 -0
- package/bundled/ai/standards/security-testing.ai.yaml +171 -0
- package/bundled/ai/standards/server-ops-security.ai.yaml +274 -0
- package/bundled/ai/standards/slo-sli.ai.yaml +97 -0
- package/bundled/ai/standards/smoke-test.ai.yaml +87 -0
- package/bundled/ai/standards/supply-chain-attestation.ai.yaml +109 -0
- package/bundled/ai/standards/test-completeness-dimensions.ai.yaml +52 -5
- package/bundled/ai/standards/testing.ai.yaml +20 -13
- package/bundled/ai/standards/user-story-mapping.ai.yaml +108 -0
- package/bundled/core/accessibility-standards.md +58 -0
- package/bundled/core/adversarial-test.md +212 -0
- package/bundled/core/branch-completion.md +4 -0
- package/bundled/core/browser-compatibility-standards.md +220 -0
- package/bundled/core/chaos-injection-tests.md +116 -0
- package/bundled/core/checkin-standards.md +1 -0
- package/bundled/core/container-security.md +521 -0
- package/bundled/core/contract-testing-standards.md +182 -0
- package/bundled/core/cost-budget-test.md +69 -0
- package/bundled/core/cross-flow-regression.md +190 -0
- package/bundled/core/data-migration-testing.md +110 -0
- package/bundled/core/disaster-recovery-drill.md +73 -0
- package/bundled/core/flaky-test-management.md +73 -0
- package/bundled/core/flow-based-testing.md +275 -0
- package/bundled/core/full-coverage-testing.md +183 -0
- package/bundled/core/llm-output-validation.md +178 -0
- package/bundled/core/mock-boundary.md +100 -0
- package/bundled/core/mutation-testing.md +97 -0
- package/bundled/core/performance-standards.md +65 -0
- package/bundled/core/policy-as-code-testing.md +188 -0
- package/bundled/core/prompt-regression.md +72 -0
- package/bundled/core/property-based-testing.md +73 -0
- package/bundled/core/release-quality-manifest.md +193 -0
- package/bundled/core/release-readiness-gate.md +184 -0
- package/bundled/core/replay-test.md +86 -0
- package/bundled/core/sast-advanced.md +300 -0
- package/bundled/core/secure-op.md +314 -0
- package/bundled/core/security-testing.md +87 -0
- package/bundled/core/server-ops-security.md +493 -0
- package/bundled/core/smoke-test.md +65 -0
- package/bundled/core/supply-chain-attestation.md +117 -0
- package/bundled/locales/zh-CN/CHANGELOG.md +3 -3
- package/bundled/locales/zh-CN/README.md +1 -1
- package/bundled/locales/zh-CN/skills/ai-instruction-standards/SKILL.md +5 -5
- package/bundled/locales/zh-TW/CHANGELOG.md +3 -3
- package/bundled/locales/zh-TW/README.md +1 -1
- package/bundled/locales/zh-TW/core/browser-compatibility-standards.md +11 -0
- 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/release-readiness-gate.md +11 -0
- package/bundled/locales/zh-TW/skills/ai-instruction-standards/SKILL.md +183 -79
- package/bundled/skills/README.md +4 -3
- package/bundled/skills/SKILL_NAMING.md +94 -0
- package/bundled/skills/ai-instruction-standards/SKILL.md +181 -88
- package/bundled/skills/atdd-assistant/SKILL.md +8 -0
- package/bundled/skills/bdd-assistant/SKILL.md +7 -0
- package/bundled/skills/checkin-assistant/SKILL.md +8 -0
- package/bundled/skills/code-review-assistant/SKILL.md +7 -0
- package/bundled/skills/journey-test-assistant/SKILL.md +203 -0
- package/bundled/skills/orchestrate/SKILL.md +167 -0
- package/bundled/skills/plan/SKILL.md +234 -0
- package/bundled/skills/pr-automation-assistant/SKILL.md +8 -0
- package/bundled/skills/push/SKILL.md +49 -2
- package/bundled/skills/{process-automation → skill-builder}/SKILL.md +1 -1
- package/bundled/skills/{forward-derivation → spec-derivation}/SKILL.md +1 -1
- package/bundled/skills/spec-driven-dev/SKILL.md +7 -0
- package/bundled/skills/sweep/SKILL.md +145 -0
- package/bundled/skills/tdd-assistant/SKILL.md +7 -0
- package/package.json +6 -6
- package/src/commands/check.js +43 -0
- package/src/commands/flow.js +8 -0
- package/src/commands/init.js +2 -1
- package/src/commands/start.js +14 -0
- package/src/commands/sweep.js +8 -0
- package/src/commands/update.js +10 -0
- package/src/commands/workflow.js +8 -0
- package/standards-registry.json +483 -5
- package/bundled/locales/zh-CN/skills/ac-coverage-assistant/SKILL.md +0 -190
- package/bundled/locales/zh-CN/skills/forward-derivation/SKILL.md +0 -71
- package/bundled/locales/zh-CN/skills/forward-derivation/guide.md +0 -130
- package/bundled/locales/zh-CN/skills/methodology-system/SKILL.md +0 -88
- package/bundled/locales/zh-CN/skills/methodology-system/create-methodology.md +0 -350
- package/bundled/locales/zh-CN/skills/methodology-system/guide.md +0 -131
- package/bundled/locales/zh-CN/skills/methodology-system/runtime.md +0 -279
- package/bundled/locales/zh-CN/skills/process-automation/SKILL.md +0 -143
- package/bundled/locales/zh-TW/skills/ac-coverage-assistant/SKILL.md +0 -195
- package/bundled/locales/zh-TW/skills/deploy-assistant/SKILL.md +0 -178
- package/bundled/locales/zh-TW/skills/forward-derivation/SKILL.md +0 -69
- package/bundled/locales/zh-TW/skills/forward-derivation/guide.md +0 -415
- package/bundled/locales/zh-TW/skills/methodology-system/SKILL.md +0 -86
- package/bundled/locales/zh-TW/skills/methodology-system/create-methodology.md +0 -350
- package/bundled/locales/zh-TW/skills/methodology-system/guide.md +0 -131
- package/bundled/locales/zh-TW/skills/methodology-system/runtime.md +0 -279
- package/bundled/locales/zh-TW/skills/process-automation/SKILL.md +0 -144
- /package/bundled/skills/{ac-coverage-assistant → ac-coverage}/SKILL.md +0 -0
- /package/bundled/skills/{methodology-system → dev-methodology}/SKILL.md +0 -0
- /package/bundled/skills/{methodology-system → dev-methodology}/create-methodology.md +0 -0
- /package/bundled/skills/{methodology-system → dev-methodology}/guide.md +0 -0
- /package/bundled/skills/{methodology-system → dev-methodology}/integrated-flow.md +0 -0
- /package/bundled/skills/{methodology-system → dev-methodology}/prerequisite-check.md +0 -0
- /package/bundled/skills/{methodology-system → dev-methodology}/runtime.md +0 -0
- /package/bundled/skills/{forward-derivation → spec-derivation}/guide.md +0 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
# Server Operations Security Standard - AI Optimized
|
|
2
|
+
# Source: core/server-ops-security.md
|
|
3
|
+
|
|
4
|
+
id: server-ops-security
|
|
5
|
+
meta:
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
updated: "2026-05-04"
|
|
8
|
+
source: core/server-ops-security.md
|
|
9
|
+
description: >
|
|
10
|
+
Server and infrastructure operational security covering SSH hardening,
|
|
11
|
+
host configuration, privilege management, bastion patterns, patch management,
|
|
12
|
+
and network isolation for AI Agent production environments.
|
|
13
|
+
|
|
14
|
+
# ─────────────────────────────────────────────────────────
|
|
15
|
+
# Core Categories
|
|
16
|
+
# ─────────────────────────────────────────────────────────
|
|
17
|
+
categories:
|
|
18
|
+
- id: ssh_hardening
|
|
19
|
+
name: SSH Hardening
|
|
20
|
+
description: SSH service must use key-based authentication only; password login is prohibited
|
|
21
|
+
required_sshd_config:
|
|
22
|
+
- directive: PasswordAuthentication
|
|
23
|
+
value: "no"
|
|
24
|
+
- directive: PermitRootLogin
|
|
25
|
+
value: "no"
|
|
26
|
+
- directive: PubkeyAuthentication
|
|
27
|
+
value: "yes"
|
|
28
|
+
- directive: Port
|
|
29
|
+
value: "non-default (not 22)"
|
|
30
|
+
- directive: MaxAuthTries
|
|
31
|
+
value: 3
|
|
32
|
+
- directive: LoginGraceTime
|
|
33
|
+
value: 30
|
|
34
|
+
- directive: AllowUsers
|
|
35
|
+
value: explicit allowlist
|
|
36
|
+
- directive: ClientAliveInterval
|
|
37
|
+
value: 300
|
|
38
|
+
- directive: ClientAliveCountMax
|
|
39
|
+
value: 2
|
|
40
|
+
tools:
|
|
41
|
+
- name: fail2ban
|
|
42
|
+
purpose: Block brute-force IPs
|
|
43
|
+
config:
|
|
44
|
+
jailtime: ">= 3600 seconds (1 hour)"
|
|
45
|
+
findtime: 600
|
|
46
|
+
maxretry: 5
|
|
47
|
+
key_management:
|
|
48
|
+
algorithm: Ed25519 (not RSA-1024)
|
|
49
|
+
private_key: Must be passphrase-protected
|
|
50
|
+
rotation: Annual or on suspected compromise
|
|
51
|
+
iso_mapping:
|
|
52
|
+
- "ISO/IEC 27001:2022 A.8.5 Secure Authentication"
|
|
53
|
+
- "ISO/IEC 27001:2022 A.8.20 Network Security"
|
|
54
|
+
|
|
55
|
+
- id: host_hardening
|
|
56
|
+
name: Host Hardening
|
|
57
|
+
description: Minimal OS installation; only retain required services
|
|
58
|
+
cis_benchmark: CIS Benchmark Level 1 (Linux)
|
|
59
|
+
required_actions:
|
|
60
|
+
- action: Disable unused services
|
|
61
|
+
examples: [avahi-daemon, cups, bluetooth]
|
|
62
|
+
- action: Enable firewall
|
|
63
|
+
tools: [UFW, iptables]
|
|
64
|
+
- action: Enable auditd
|
|
65
|
+
purpose: System call auditing
|
|
66
|
+
target_score: ">= 75 (Lynis audit score)"
|
|
67
|
+
- action: Apply sysctl hardening
|
|
68
|
+
settings:
|
|
69
|
+
- "kernel.dmesg_restrict = 1"
|
|
70
|
+
- "net.ipv4.ip_forward = 0 (unless router)"
|
|
71
|
+
- "kernel.randomize_va_space = 2"
|
|
72
|
+
- action: Disable USB storage
|
|
73
|
+
when: USB storage not required
|
|
74
|
+
- action: Set umask 027
|
|
75
|
+
scope: system-wide default
|
|
76
|
+
tools:
|
|
77
|
+
- name: Lynis
|
|
78
|
+
command: "lynis audit system"
|
|
79
|
+
gate: Score >= 75
|
|
80
|
+
- name: OpenSCAP
|
|
81
|
+
purpose: CIS Benchmark compliance scanning
|
|
82
|
+
iso_mapping:
|
|
83
|
+
- "ISO/IEC 27001:2022 A.8.9 Configuration Management"
|
|
84
|
+
- "NIST SP 800-123 Guide to General Server Security"
|
|
85
|
+
|
|
86
|
+
- id: privilege_management
|
|
87
|
+
name: Privilege Management
|
|
88
|
+
description: Least privilege principle; service accounts must not have shell or sudo access
|
|
89
|
+
rules:
|
|
90
|
+
- rule: AI Agent service account is non-root with no login shell (/sbin/nologin)
|
|
91
|
+
- rule: Service account has access only to required directories
|
|
92
|
+
- rule: sudo entries must be explicit allowlist (no NOPASSWD ALL)
|
|
93
|
+
- rule: Each service uses an independent Unix account (no sharing)
|
|
94
|
+
- rule: Privileged accounts audited quarterly
|
|
95
|
+
sudo_policy:
|
|
96
|
+
location: /etc/sudoers.d/
|
|
97
|
+
prohibited: "NOPASSWD ALL"
|
|
98
|
+
required: Explicit command allowlist per account
|
|
99
|
+
pam_lockout:
|
|
100
|
+
module: pam_faillock (or pam_tally2 on older systems)
|
|
101
|
+
failed_attempts: 5
|
|
102
|
+
lockout_duration: "15 minutes (900 seconds)"
|
|
103
|
+
audit_tools:
|
|
104
|
+
- "sudo -l (per account review)"
|
|
105
|
+
- last
|
|
106
|
+
- lastlog
|
|
107
|
+
iso_mapping:
|
|
108
|
+
- "ISO/IEC 27001:2022 A.8.2 Privileged Access Rights"
|
|
109
|
+
- "ISO/IEC 27001:2022 A.8.18 Use of privileged utility programs"
|
|
110
|
+
|
|
111
|
+
- id: bastion_pattern
|
|
112
|
+
name: Bastion / Jump Host Pattern
|
|
113
|
+
description: Production environments must be accessed through a Bastion Host; direct SSH to prod nodes is prohibited
|
|
114
|
+
applicability:
|
|
115
|
+
staging: recommended
|
|
116
|
+
production: required
|
|
117
|
+
architecture:
|
|
118
|
+
bastion_host:
|
|
119
|
+
- Dedicated VM; sole external SSH entry point
|
|
120
|
+
- MFA enforced (TOTP or YubiKey)
|
|
121
|
+
- Session recording enabled
|
|
122
|
+
prod_nodes:
|
|
123
|
+
- Firewall rule: "iptables -A INPUT -p tcp --dport 22 -s <bastion_ip> -j ACCEPT; DROP all other SSH"
|
|
124
|
+
- No direct internet SSH exposure
|
|
125
|
+
session_recording:
|
|
126
|
+
tools: [tmux + script, Teleport, AWS Session Manager]
|
|
127
|
+
purpose: All shell sessions recorded and auditable
|
|
128
|
+
emergency_access:
|
|
129
|
+
method: Out-of-band console (iLO / iDRAC / console server)
|
|
130
|
+
purpose: Access when Bastion is unavailable
|
|
131
|
+
iso_mapping:
|
|
132
|
+
- "ISO/IEC 27001:2022 A.8.3 Information Access Restriction"
|
|
133
|
+
- "NIST SP 800-207 Zero Trust Architecture"
|
|
134
|
+
|
|
135
|
+
- id: patch_management
|
|
136
|
+
name: Patch Management
|
|
137
|
+
description: OS and packages must be regularly updated; CVE remediation has defined SLAs
|
|
138
|
+
sla:
|
|
139
|
+
- severity: Critical CVE
|
|
140
|
+
deadline: "Patch or isolate within 24 hours"
|
|
141
|
+
- severity: High CVE
|
|
142
|
+
deadline: "Patch within 72 hours"
|
|
143
|
+
- severity: Medium CVE
|
|
144
|
+
deadline: "Patch within 7 days"
|
|
145
|
+
- severity: Low CVE
|
|
146
|
+
deadline: "Next maintenance window (≤ 30 days)"
|
|
147
|
+
automation:
|
|
148
|
+
debian_ubuntu:
|
|
149
|
+
tool: unattended-upgrades
|
|
150
|
+
config: "APT::Periodic::Unattended-Upgrade 1; security updates auto-applied"
|
|
151
|
+
rhel_centos:
|
|
152
|
+
tools: [yum-cron, dnf-automatic]
|
|
153
|
+
config: "apply_updates = yes (security only)"
|
|
154
|
+
scanning:
|
|
155
|
+
containers:
|
|
156
|
+
tool: Trivy
|
|
157
|
+
command: "trivy image <image>"
|
|
158
|
+
frequency: Weekly + on every build
|
|
159
|
+
systems:
|
|
160
|
+
tool: OpenVAS
|
|
161
|
+
frequency: Weekly
|
|
162
|
+
ai_agent_specific:
|
|
163
|
+
- rule: Use official base images only
|
|
164
|
+
- rule: Base image update cadence must not exceed 90 days
|
|
165
|
+
- rule: Guardian OPA Sidecar and application containers follow same patch SLA
|
|
166
|
+
iso_mapping:
|
|
167
|
+
- "ISO/IEC 27001:2022 A.8.8 Management of Technical Vulnerabilities"
|
|
168
|
+
|
|
169
|
+
- id: network_isolation
|
|
170
|
+
name: Network Isolation
|
|
171
|
+
description: Services are network-isolated; attack surface is minimized
|
|
172
|
+
rules:
|
|
173
|
+
- rule: Prod nodes must not be directly internet-facing; expose only through load balancer or API gateway
|
|
174
|
+
- rule: Inter-service communication uses internal VPC or overlay network (no public IPs)
|
|
175
|
+
- rule: AI Agent outbound traffic uses an explicit allowlist of permitted API endpoints
|
|
176
|
+
- rule: Database ports (5432, 3306, 6379) must not be exposed externally
|
|
177
|
+
- rule: Monitoring ports (Prometheus :9090, Grafana :3000) accessible from internal network only
|
|
178
|
+
tools:
|
|
179
|
+
on_prem: [iptables, nftables]
|
|
180
|
+
aws: [Security Groups, NACLs, VPC Flow Logs]
|
|
181
|
+
gcp: [VPC Firewall Rules, Cloud Armor]
|
|
182
|
+
outbound_allowlist_format: |
|
|
183
|
+
# Example: /etc/vibeops/outbound-allowlist.conf
|
|
184
|
+
ALLOW api.openai.com:443
|
|
185
|
+
ALLOW registry.npmjs.org:443
|
|
186
|
+
DENY *:* (default deny)
|
|
187
|
+
iso_mapping:
|
|
188
|
+
- "ISO/IEC 27001:2022 A.8.20 Networks Security"
|
|
189
|
+
- "ISO/IEC 27001:2022 A.8.22 Web Filtering"
|
|
190
|
+
|
|
191
|
+
# ─────────────────────────────────────────────────────────
|
|
192
|
+
# Quality Gates
|
|
193
|
+
# ─────────────────────────────────────────────────────────
|
|
194
|
+
quality_gates:
|
|
195
|
+
pre_deploy:
|
|
196
|
+
- ssh_password_auth: disabled
|
|
197
|
+
- root_login: disabled
|
|
198
|
+
- fail2ban: enabled
|
|
199
|
+
- firewall: enabled_and_configured
|
|
200
|
+
- unattended_upgrades: enabled
|
|
201
|
+
prod_only:
|
|
202
|
+
- bastion_host: required
|
|
203
|
+
- mfa_on_bastion: required
|
|
204
|
+
- session_recording: enabled
|
|
205
|
+
- all_critical_cve: patched
|
|
206
|
+
ai_agent_specific:
|
|
207
|
+
- service_account: non_root_no_shell
|
|
208
|
+
- outbound_whitelist: configured
|
|
209
|
+
- guardian_sidecar: running
|
|
210
|
+
- audit_log: enabled
|
|
211
|
+
|
|
212
|
+
# ─────────────────────────────────────────────────────────
|
|
213
|
+
# Rules
|
|
214
|
+
# ─────────────────────────────────────────────────────────
|
|
215
|
+
rules:
|
|
216
|
+
- id: ssh-key-only
|
|
217
|
+
trigger: configuring SSH on any server
|
|
218
|
+
instruction: >
|
|
219
|
+
Set PasswordAuthentication no and PermitRootLogin no in /etc/ssh/sshd_config.
|
|
220
|
+
Verify with: sshd -T | grep -E "passwordauthentication|permitrootlogin"
|
|
221
|
+
priority: required
|
|
222
|
+
|
|
223
|
+
- id: least-privilege-service-accounts
|
|
224
|
+
trigger: deploying any AI Agent or service
|
|
225
|
+
instruction: >
|
|
226
|
+
Create a dedicated non-root Unix account for each service.
|
|
227
|
+
Set shell to /sbin/nologin. Grant only necessary directory permissions.
|
|
228
|
+
priority: required
|
|
229
|
+
|
|
230
|
+
- id: bastion-for-prod
|
|
231
|
+
trigger: accessing production servers
|
|
232
|
+
instruction: >
|
|
233
|
+
Always connect via Bastion Host. Never SSH directly to prod nodes.
|
|
234
|
+
Verify Bastion MFA is active before connecting.
|
|
235
|
+
priority: required
|
|
236
|
+
|
|
237
|
+
- id: patch-critical-cvs-24h
|
|
238
|
+
trigger: critical CVE disclosure affecting deployed system
|
|
239
|
+
instruction: >
|
|
240
|
+
Apply patch or isolate affected system within 24 hours.
|
|
241
|
+
If patch unavailable, block network access to vulnerable component.
|
|
242
|
+
priority: required
|
|
243
|
+
|
|
244
|
+
- id: outbound-allowlist
|
|
245
|
+
trigger: deploying AI Agent to production
|
|
246
|
+
instruction: >
|
|
247
|
+
Configure explicit outbound allowlist. Default deny all outbound.
|
|
248
|
+
Document each permitted endpoint with business justification.
|
|
249
|
+
priority: required
|
|
250
|
+
|
|
251
|
+
anti_patterns:
|
|
252
|
+
- Direct SSH to prod nodes without Bastion
|
|
253
|
+
- PasswordAuthentication yes in /etc/ssh/sshd_config
|
|
254
|
+
- Service running as root user
|
|
255
|
+
- NOPASSWD ALL in /etc/sudoers or /etc/sudoers.d/
|
|
256
|
+
- Database or monitoring ports exposed to internet
|
|
257
|
+
- Base images older than 90 days without CVE re-scan
|
|
258
|
+
- No outbound traffic restriction on AI Agent hosts
|
|
259
|
+
|
|
260
|
+
quick_reference:
|
|
261
|
+
server_ops_security_checklist: |
|
|
262
|
+
□ SSH password auth disabled (PasswordAuthentication no)
|
|
263
|
+
□ Root SSH login disabled (PermitRootLogin no)
|
|
264
|
+
□ fail2ban enabled with jailtime >= 1 hour
|
|
265
|
+
□ Firewall enabled and default-deny inbound
|
|
266
|
+
□ unattended-upgrades (security) enabled
|
|
267
|
+
□ AI Agent service account: non-root, no shell
|
|
268
|
+
□ sudo entries: explicit commands only, no NOPASSWD ALL
|
|
269
|
+
□ Bastion Host in place for prod access
|
|
270
|
+
□ MFA enforced on Bastion
|
|
271
|
+
□ Session recording enabled
|
|
272
|
+
□ Critical CVEs patched within 24h SLA
|
|
273
|
+
□ AI Agent outbound allowlist configured
|
|
274
|
+
□ DB/monitoring ports not exposed externally
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# SLO/SLI Standards - AI Optimized
|
|
2
|
+
# Source: XSPEC-063 Wave 3 SRE Pack
|
|
3
|
+
|
|
4
|
+
id: slo-sli
|
|
5
|
+
title: SLO/SLI Definition Standards
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
status: Active
|
|
8
|
+
tags: [sre, reliability, observability, slo, sli, error-budget]
|
|
9
|
+
summary: |
|
|
10
|
+
Defines how teams select, measure, and govern Service Level Indicators (SLIs)
|
|
11
|
+
and Service Level Objectives (SLOs). Covers SLI selection per service type,
|
|
12
|
+
SLO target-setting methodology, error budget policies, and multi-window
|
|
13
|
+
burn-rate alerting. Designed to bridge engineering reliability work with
|
|
14
|
+
customer-facing SLA commitments.
|
|
15
|
+
|
|
16
|
+
requirements:
|
|
17
|
+
- id: REQ-001
|
|
18
|
+
title: SLI Selection Per Service Type
|
|
19
|
+
description: |
|
|
20
|
+
Every production service MUST define at least one SLI matched to its
|
|
21
|
+
service type. API services must measure availability (non-5xx / total)
|
|
22
|
+
and latency (requests below threshold proportion). Batch jobs must
|
|
23
|
+
measure freshness (data lag ≤ threshold) and correctness (successfully
|
|
24
|
+
processed / total). Frontend services must measure Core Web Vitals
|
|
25
|
+
(LCP < 2.5s, FID < 100ms, CLS < 0.1).
|
|
26
|
+
level: MUST
|
|
27
|
+
examples:
|
|
28
|
+
- "availability_sli = count(http_status != 5xx) / count(all_requests)"
|
|
29
|
+
- "latency_sli = count(request_duration_ms < 200) / count(all_requests)"
|
|
30
|
+
- "freshness_sli = 1 if data_lag_minutes <= 5 else 0"
|
|
31
|
+
|
|
32
|
+
- id: REQ-002
|
|
33
|
+
title: SLO Target Setting Methodology
|
|
34
|
+
description: |
|
|
35
|
+
SLO targets MUST be set using historical baseline data. Teams MUST
|
|
36
|
+
start from the observed P5 performance (i.e., the 5th-percentile
|
|
37
|
+
worst period) over at least 28 rolling days, then add a small
|
|
38
|
+
buffer. The SLO target MUST be strictly higher than any external
|
|
39
|
+
SLA commitment (e.g., SLA 99.9% → SLO ≥ 99.95%).
|
|
40
|
+
level: MUST
|
|
41
|
+
examples:
|
|
42
|
+
- "Historical 28-day availability P5 = 99.92% → SLO = 99.95%"
|
|
43
|
+
- "SLA guarantees 99.9% → internal SLO set to 99.95%"
|
|
44
|
+
- "Never set SLO equal to SLA; maintain ≥ 0.05% buffer"
|
|
45
|
+
|
|
46
|
+
- id: REQ-003
|
|
47
|
+
title: Error Budget Policy
|
|
48
|
+
description: |
|
|
49
|
+
Every service with an SLO MUST have a written Error Budget Policy
|
|
50
|
+
specifying actions when the error budget is partially or fully
|
|
51
|
+
exhausted. At minimum the policy must define: (1) freeze threshold
|
|
52
|
+
(typically 50% exhausted → release freeze), (2) reliability sprint
|
|
53
|
+
trigger (100% exhausted), and (3) SLO review cadence (quarterly).
|
|
54
|
+
level: MUST
|
|
55
|
+
examples:
|
|
56
|
+
- "50% budget consumed → new feature deploys require VP approval"
|
|
57
|
+
- "100% budget consumed → team enters reliability sprint, no new features"
|
|
58
|
+
- "Error budget policy must be linked from the service runbook"
|
|
59
|
+
|
|
60
|
+
- id: REQ-004
|
|
61
|
+
title: Multi-Window Burn-Rate Alerting
|
|
62
|
+
description: |
|
|
63
|
+
Teams SHOULD implement multi-window burn-rate alerts to catch both
|
|
64
|
+
fast and slow budget exhaustion. Recommended thresholds: fast burn
|
|
65
|
+
(2% of monthly budget consumed in 1 hour → P1 page), medium burn
|
|
66
|
+
(5% in 6 hours → P2 alert), slow burn (10% in 3 days → P3 ticket).
|
|
67
|
+
level: SHOULD
|
|
68
|
+
examples:
|
|
69
|
+
- "fast_burn: burn_rate > 14.4 for 5 minutes → PagerDuty P1"
|
|
70
|
+
- "medium_burn: burn_rate > 6 for 30 minutes → Slack #oncall P2"
|
|
71
|
+
- "slow_burn: burn_rate > 3 for 6 hours → Jira ticket auto-created"
|
|
72
|
+
|
|
73
|
+
- id: REQ-005
|
|
74
|
+
title: SLO Documentation and Review Cadence
|
|
75
|
+
description: |
|
|
76
|
+
Each SLO MUST be documented in a standard SLO spec file containing:
|
|
77
|
+
service name, SLI formula, measurement window, target value, error
|
|
78
|
+
budget, alerting thresholds, and owner. SLO specs MUST be reviewed
|
|
79
|
+
quarterly and updated within 2 weeks of any major architecture change.
|
|
80
|
+
level: MUST
|
|
81
|
+
examples:
|
|
82
|
+
- "File: docs/slos/payment-api.slo.yaml with all required fields"
|
|
83
|
+
- "Quarterly review scheduled as recurring calendar event for service owner"
|
|
84
|
+
- "After database migration, SLO re-baselining completed within 14 days"
|
|
85
|
+
|
|
86
|
+
- id: REQ-006
|
|
87
|
+
title: SLO Compliance Reporting
|
|
88
|
+
description: |
|
|
89
|
+
Teams SHOULD publish a monthly SLO compliance report to stakeholders.
|
|
90
|
+
The report must include: achieved vs. target SLI value, error budget
|
|
91
|
+
remaining, significant incidents affecting SLO, and planned reliability
|
|
92
|
+
improvements. Dashboard links must be included.
|
|
93
|
+
level: SHOULD
|
|
94
|
+
examples:
|
|
95
|
+
- "Monthly Slack post in #reliability with SLO compliance dashboard link"
|
|
96
|
+
- "Report includes: 99.97% achieved (target 99.95%), budget 85% remaining"
|
|
97
|
+
- "Incident summary: 2 incidents, root causes addressed, no budget risk"
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
name: Smoke Test Standards
|
|
3
|
+
nameZh: 煙霧測試標準
|
|
4
|
+
id: smoke-test
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
category: testing
|
|
7
|
+
scope: deployment-validation
|
|
8
|
+
summary: >
|
|
9
|
+
Post-deployment sanity checks that verify critical system paths are
|
|
10
|
+
operational within 30 seconds of deployment. Smoke tests fail fast and
|
|
11
|
+
alert on-call before users encounter broken deployments.
|
|
12
|
+
|
|
13
|
+
requirements:
|
|
14
|
+
- id: REQ-01
|
|
15
|
+
title: Critical Path Coverage
|
|
16
|
+
titleZh: 關鍵路徑覆蓋
|
|
17
|
+
level: MUST
|
|
18
|
+
description: >
|
|
19
|
+
Smoke tests MUST cover the minimum set of critical paths: (1) process
|
|
20
|
+
starts and binds to expected port, (2) health endpoint returns 200,
|
|
21
|
+
(3) at least one core feature responds correctly. Smoke tests MUST NOT
|
|
22
|
+
cover edge cases, performance, or correctness — that is the unit test suite's job.
|
|
23
|
+
|
|
24
|
+
- id: REQ-02
|
|
25
|
+
title: Execution Time
|
|
26
|
+
titleZh: 執行時間
|
|
27
|
+
level: MUST
|
|
28
|
+
description: >
|
|
29
|
+
The full smoke test suite MUST complete in under 30 seconds. Tests that
|
|
30
|
+
take longer provide false confidence — if smoke tests run for 5 minutes,
|
|
31
|
+
on-call won't run them after every deployment.
|
|
32
|
+
|
|
33
|
+
- id: REQ-03
|
|
34
|
+
title: Zero Dependencies
|
|
35
|
+
titleZh: 零外部依賴
|
|
36
|
+
level: MUST
|
|
37
|
+
description: >
|
|
38
|
+
Smoke tests MUST NOT depend on external services (LLM APIs, databases,
|
|
39
|
+
third-party APIs) unless verifying the integration itself. Use local
|
|
40
|
+
stubs or mock servers for external dependencies.
|
|
41
|
+
|
|
42
|
+
- id: REQ-04
|
|
43
|
+
title: Deployment Integration
|
|
44
|
+
titleZh: 部署整合
|
|
45
|
+
level: SHOULD
|
|
46
|
+
description: >
|
|
47
|
+
Smoke tests SHOULD be invocable via a single command (e.g. `npm run smoke`
|
|
48
|
+
or `./smoke.sh`) and SHOULD be wired into the deployment pipeline to run
|
|
49
|
+
automatically after each deployment.
|
|
50
|
+
|
|
51
|
+
- id: REQ-05
|
|
52
|
+
title: Exit Code Contract
|
|
53
|
+
titleZh: 退出碼契約
|
|
54
|
+
level: MUST
|
|
55
|
+
description: >
|
|
56
|
+
Smoke tests MUST exit with code 0 on success and non-zero on any failure.
|
|
57
|
+
The failure message MUST identify which check failed and why.
|
|
58
|
+
|
|
59
|
+
examples:
|
|
60
|
+
- name: "Node.js health check smoke test"
|
|
61
|
+
code: |
|
|
62
|
+
#!/usr/bin/env node
|
|
63
|
+
const http = require('http')
|
|
64
|
+
function check(path, expectedStatus = 200) {
|
|
65
|
+
return new Promise((resolve, reject) => {
|
|
66
|
+
http.get(`http://localhost:3000${path}`, (res) => {
|
|
67
|
+
if (res.statusCode !== expectedStatus) reject(new Error(`${path}: ${res.statusCode}`))
|
|
68
|
+
else resolve()
|
|
69
|
+
}).on('error', reject)
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
Promise.all([check('/health'), check('/api/status')])
|
|
73
|
+
.then(() => { console.log('Smoke: PASS'); process.exit(0) })
|
|
74
|
+
.catch(e => { console.error('Smoke: FAIL', e.message); process.exit(1) })
|
|
75
|
+
|
|
76
|
+
anti_patterns:
|
|
77
|
+
- description: >
|
|
78
|
+
Running full integration test suite as smoke tests — smoke tests should
|
|
79
|
+
complete in 30s, not 5 minutes.
|
|
80
|
+
- description: >
|
|
81
|
+
Not failing on non-200 HTTP status — always assert the status code,
|
|
82
|
+
not just that the server responded.
|
|
83
|
+
|
|
84
|
+
related_standards:
|
|
85
|
+
- testing
|
|
86
|
+
- deployment-standards
|
|
87
|
+
- performance-standards
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
name: Supply Chain Attestation Standards
|
|
3
|
+
nameZh: 供應鏈溯源標準
|
|
4
|
+
id: supply-chain-attestation
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
category: security
|
|
7
|
+
scope: software-delivery
|
|
8
|
+
summary: >
|
|
9
|
+
SBOM generation, SLSA provenance, and cosign signing to establish verifiable
|
|
10
|
+
software supply chain integrity from source to deployed artefact.
|
|
11
|
+
|
|
12
|
+
requirements:
|
|
13
|
+
- id: REQ-01
|
|
14
|
+
title: Software Bill of Materials (SBOM)
|
|
15
|
+
titleZh: 軟體材料清單(SBOM)
|
|
16
|
+
level: MUST
|
|
17
|
+
description: >
|
|
18
|
+
Every release artefact MUST be accompanied by a CycloneDX JSON SBOM
|
|
19
|
+
listing all direct and transitive dependencies with name, version,
|
|
20
|
+
licence, and PURL. SBOM MUST be generated at build time from the
|
|
21
|
+
lock file (not package.json) to capture exact resolved versions.
|
|
22
|
+
implementation: |
|
|
23
|
+
# npm + CycloneDX
|
|
24
|
+
npm install -g @cyclonedx/cyclonedx-npm
|
|
25
|
+
cyclonedx-npm --output-format JSON --output-file sbom.cdx.json
|
|
26
|
+
|
|
27
|
+
- id: REQ-02
|
|
28
|
+
title: SLSA Provenance
|
|
29
|
+
titleZh: SLSA 溯源聲明
|
|
30
|
+
level: MUST
|
|
31
|
+
description: >
|
|
32
|
+
Every release MUST include a SLSA provenance document (minimum SLSA L1)
|
|
33
|
+
attesting the build inputs, builder identity, and build environment.
|
|
34
|
+
SLSA L2 is RECOMMENDED for public releases (requires GitHub Actions
|
|
35
|
+
OIDC token signing via slsa-framework/slsa-github-generator).
|
|
36
|
+
implementation: |
|
|
37
|
+
# SLSA L1 self-attestation (minimum)
|
|
38
|
+
provenance.json includes: buildType, builder.id,
|
|
39
|
+
invocation.configSource (repo+commit), materials, metadata.
|
|
40
|
+
|
|
41
|
+
- id: REQ-03
|
|
42
|
+
title: Artefact Signing
|
|
43
|
+
titleZh: 製品簽章
|
|
44
|
+
level: MUST
|
|
45
|
+
description: >
|
|
46
|
+
The SBOM, provenance document, and all release artefacts MUST be signed
|
|
47
|
+
using cosign (keyless Sigstore OIDC or key-based). Signatures MUST be
|
|
48
|
+
bundled with the release artefact for offline verification.
|
|
49
|
+
implementation: |
|
|
50
|
+
cosign sign-blob --key env://COSIGN_PRIVATE_KEY sbom.cdx.json > sbom.cdx.json.sig
|
|
51
|
+
cosign sign-blob --key env://COSIGN_PRIVATE_KEY provenance.json > provenance.json.sig
|
|
52
|
+
|
|
53
|
+
- id: REQ-04
|
|
54
|
+
title: Release Bundle
|
|
55
|
+
titleZh: 發布包完整性
|
|
56
|
+
level: MUST
|
|
57
|
+
description: >
|
|
58
|
+
The release bundle MUST include: primary artefact, sbom.cdx.json,
|
|
59
|
+
provenance.json, checksums.txt, and all .sig files.
|
|
60
|
+
SHA-256 checksums MUST cover all artefacts including SBOM and provenance.
|
|
61
|
+
|
|
62
|
+
- id: REQ-05
|
|
63
|
+
title: Verification Instructions
|
|
64
|
+
titleZh: 驗證指引
|
|
65
|
+
level: SHOULD
|
|
66
|
+
description: >
|
|
67
|
+
Release notes SHOULD include one-command verification instructions for
|
|
68
|
+
end-users to confirm artefact integrity using cosign and the SBOM.
|
|
69
|
+
|
|
70
|
+
examples:
|
|
71
|
+
- name: "CycloneDX SBOM in GitHub Actions"
|
|
72
|
+
code: |
|
|
73
|
+
- name: Generate SBOM
|
|
74
|
+
run: |
|
|
75
|
+
npm install -g @cyclonedx/cyclonedx-npm
|
|
76
|
+
cyclonedx-npm --output-format JSON \
|
|
77
|
+
--output-file sbom.cdx.json \
|
|
78
|
+
--package-lock-only
|
|
79
|
+
|
|
80
|
+
- name: "SLSA L1 provenance generation"
|
|
81
|
+
code: |
|
|
82
|
+
- name: Generate SLSA L1 provenance
|
|
83
|
+
run: |
|
|
84
|
+
cat > provenance.json << EOF
|
|
85
|
+
{
|
|
86
|
+
"_type": "https://in-toto.io/Statement/v0.1",
|
|
87
|
+
"predicateType": "https://slsa.dev/provenance/v0.2",
|
|
88
|
+
"subject": [{"name": "vibeops", "digest": {"sha256": "${IMAGE_DIGEST}"}}],
|
|
89
|
+
"predicate": {
|
|
90
|
+
"buildType": "https://github.com/Attestations/GitHubActionsWorkflow@v1",
|
|
91
|
+
"builder": {"id": "https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"},
|
|
92
|
+
"invocation": {"configSource": {"uri": "git+https://github.com/${GITHUB_REPOSITORY}@${GITHUB_SHA}"}},
|
|
93
|
+
"metadata": {"buildInvocationId": "${GITHUB_RUN_ID}"}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
EOF
|
|
97
|
+
|
|
98
|
+
anti_patterns:
|
|
99
|
+
- description: >
|
|
100
|
+
Generating SBOM from package.json alone — always use the lock file
|
|
101
|
+
to capture exact resolved versions, not declared ranges.
|
|
102
|
+
- description: >
|
|
103
|
+
Signing only the primary artefact and omitting SBOM/provenance from
|
|
104
|
+
the signature scope — all attestation documents must also be signed.
|
|
105
|
+
|
|
106
|
+
related_standards:
|
|
107
|
+
- supply-chain-security-standards
|
|
108
|
+
- container-security
|
|
109
|
+
- sast-advanced
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
|
|
4
4
|
id: test-completeness-dimensions
|
|
5
5
|
meta:
|
|
6
|
-
version: "1.
|
|
7
|
-
updated: "2026-
|
|
6
|
+
version: "1.2.0"
|
|
7
|
+
updated: "2026-05-04"
|
|
8
8
|
source: core/test-completeness-dimensions.md
|
|
9
|
-
description: Framework for evaluating test completeness across
|
|
9
|
+
description: Framework for evaluating test completeness across 10 dimensions (v1.2.0 adds Flow Completeness and Branch Coverage)
|
|
10
10
|
|
|
11
11
|
dimensions:
|
|
12
12
|
- id: 1
|
|
@@ -92,6 +92,28 @@ dimensions:
|
|
|
92
92
|
naming: Descriptive names (should_reject_invalid_email)
|
|
93
93
|
coverage_intent: Covers all code paths meaningfully
|
|
94
94
|
|
|
95
|
+
- id: 9
|
|
96
|
+
name: Flow Completeness
|
|
97
|
+
description: At least one complete path from initial state to each terminal state exists
|
|
98
|
+
test_items:
|
|
99
|
+
- Happy path flow covers all steps in sequence with shared context
|
|
100
|
+
- Each failure terminal state has at least one flow test that reaches it
|
|
101
|
+
- Shared context (state) is verified at each intermediate step, not only the final step
|
|
102
|
+
- Preconditions are explicitly established, not assumed from previous test runs
|
|
103
|
+
when_required: When feature has 3 or more sequential steps
|
|
104
|
+
note: See flow-based-testing.ai.yaml for the full 3-step flow decomposition methodology
|
|
105
|
+
|
|
106
|
+
- id: 10
|
|
107
|
+
name: Branch Coverage
|
|
108
|
+
description: Each decision point in a flow has all branches covered by at least one scenario
|
|
109
|
+
test_items:
|
|
110
|
+
- Every if/else branch has a corresponding test scenario
|
|
111
|
+
- Each distinct error branch (not just the "main" error) has its own test
|
|
112
|
+
- Decision table applied with minimum Each-Choice coverage strategy
|
|
113
|
+
- Critical flows (auth / payment / license / security) use All-Combinations strategy
|
|
114
|
+
when_required: When flow has any conditional logic or decision points
|
|
115
|
+
note: Use decision_table_expansion from flow-based-testing.ai.yaml to enumerate scenarios
|
|
116
|
+
|
|
95
117
|
feature_type_mapping:
|
|
96
118
|
note: "Dimension 8 (AI Generation Quality) applies when tests are AI-generated"
|
|
97
119
|
types:
|
|
@@ -119,6 +141,12 @@ feature_type_mapping:
|
|
|
119
141
|
dimensions: [1, 3, 7]
|
|
120
142
|
with_ai: [1, 3, 7, 8]
|
|
121
143
|
|
|
144
|
+
- type: Workflow / Multi-step Process
|
|
145
|
+
dimensions: [1, 3, 4, 5, 9, 10]
|
|
146
|
+
with_ai: [1, 3, 4, 5, 9, 10, 8]
|
|
147
|
+
required_pattern: journey-chained-test
|
|
148
|
+
note: Apply flow-based-testing standard; use shared ctx; Each-Choice minimum branch coverage
|
|
149
|
+
|
|
122
150
|
error_code_coverage:
|
|
123
151
|
- code: 200
|
|
124
152
|
meaning: Success
|
|
@@ -162,11 +190,15 @@ anti_patterns:
|
|
|
162
190
|
- Accepting AI-generated tests without review
|
|
163
191
|
- Assuming high line coverage means effective tests
|
|
164
192
|
- Skipping mutation testing for critical code
|
|
193
|
+
- Testing all steps in a multi-step flow independently without state threading (misses step interaction bugs)
|
|
194
|
+
- Using a single test case for a flow with multiple decision points (hides which branch failed)
|
|
195
|
+
- Resetting shared context between steps in journey tests (breaks state accumulation)
|
|
196
|
+
- Applying All-Combinations to every flow (unmaintainable; reserve for critical auth/payment/security paths)
|
|
165
197
|
|
|
166
198
|
rules:
|
|
167
199
|
- id: use-checklist
|
|
168
200
|
trigger: designing tests for a feature
|
|
169
|
-
instruction: Use the
|
|
201
|
+
instruction: Use the 10 dimensions checklist to ensure completeness (dim 8 for AI-generated tests; dim 9/10 for multi-step workflows)
|
|
170
202
|
priority: required
|
|
171
203
|
|
|
172
204
|
- id: authorization-matrix
|
|
@@ -234,6 +266,18 @@ checklist_template: |
|
|
|
234
266
|
□ Tests are independent and self-contained
|
|
235
267
|
□ Mutation score > 80% (if evaluated)
|
|
236
268
|
|
|
269
|
+
□ Flow Completeness (for multi-step features, 3+ steps)
|
|
270
|
+
□ Happy path journey test covers all steps in sequence
|
|
271
|
+
□ Each failure terminal state has a flow test reaching it
|
|
272
|
+
□ Intermediate step state verified in ctx, not only final result
|
|
273
|
+
□ Preconditions explicitly set up before Step 1
|
|
274
|
+
|
|
275
|
+
□ Branch Coverage (for flows with conditional logic)
|
|
276
|
+
□ Decision table created with all decision points and values
|
|
277
|
+
□ Each-Choice minimum coverage applied
|
|
278
|
+
□ Each distinct error branch has its own describe block
|
|
279
|
+
□ Critical flows (auth/payment/security) use All-Combinations
|
|
280
|
+
|
|
237
281
|
quick_reference:
|
|
238
282
|
dimensions:
|
|
239
283
|
columns: [ID, Dimension, Key Focus]
|
|
@@ -246,9 +290,11 @@ quick_reference:
|
|
|
246
290
|
- [6, Validation, Format and business rules]
|
|
247
291
|
- [7, Integration, Real query verification]
|
|
248
292
|
- [8, AI Generation, AI-generated test quality]
|
|
293
|
+
- [9, Flow Completeness, Complete path to each terminal state]
|
|
294
|
+
- [10, Branch Coverage, All decision-point branches covered]
|
|
249
295
|
|
|
250
296
|
feature_dimensions:
|
|
251
|
-
note: "*Dimension 8 applies when tests are AI-generated"
|
|
297
|
+
note: "*Dimension 8 applies when tests are AI-generated; †Dimensions 9/10 apply to multi-step workflows"
|
|
252
298
|
columns: [Feature Type, Required Dimensions]
|
|
253
299
|
rows:
|
|
254
300
|
- [CRUD API, "1,2,3,4,6,7,8*"]
|
|
@@ -257,3 +303,4 @@ quick_reference:
|
|
|
257
303
|
- [Validation, "1,2,3,6,8*"]
|
|
258
304
|
- [Background Job, "1,3,5,8*"]
|
|
259
305
|
- [External Integration, "1,3,7,8*"]
|
|
306
|
+
- [Workflow / Multi-step Process, "1,3,4,5,9†,10†,8*"]
|