oh-my-agent-commandcode 0.0.0-stage → 20.38.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/README.md +35 -2
  2. package/filter-test-output.sh +52 -0
  3. package/mods/oma.ts +347 -0
  4. package/package.json +30 -4
  5. package/skills/_shared/conditional/experiment-ledger.md +28 -0
  6. package/skills/_shared/conditional/exploration-loop.md +22 -0
  7. package/skills/_shared/conditional/quality-score.md +33 -0
  8. package/skills/_shared/core/anti-ai-prose.md +191 -0
  9. package/skills/_shared/core/api-contracts/README.md +28 -0
  10. package/skills/_shared/core/api-contracts/template.md +90 -0
  11. package/skills/_shared/core/clarification-protocol.md +23 -0
  12. package/skills/_shared/core/code-intelligence.md +46 -0
  13. package/skills/_shared/core/collaboration-policy.md +28 -0
  14. package/skills/_shared/core/common-checklist.md +28 -0
  15. package/skills/_shared/core/context-budget.md +22 -0
  16. package/skills/_shared/core/context-loading.md +34 -0
  17. package/skills/_shared/core/difficulty-guide.md +26 -0
  18. package/skills/_shared/core/execution-policy.md +31 -0
  19. package/skills/_shared/core/lessons-learned.md +33 -0
  20. package/skills/_shared/core/prompt-structure.md +18 -0
  21. package/skills/_shared/core/quality-principles.md +11 -0
  22. package/skills/_shared/core/session-metrics.md +35 -0
  23. package/skills/_shared/core/skill-routing.md +39 -0
  24. package/skills/_shared/core/test-approach.md +54 -0
  25. package/skills/_shared/core/vendor-detection.md +52 -0
  26. package/skills/_shared/runtime/memory-protocol.md +118 -0
  27. package/skills/_shared/runtime/result-contract.md +64 -0
  28. package/skills/_shared/ui-interaction-quality.md +133 -0
  29. package/skills/oma-academic-writing/SKILL.md +181 -0
  30. package/skills/oma-academic-writing/resources/abstract-guide.md +51 -0
  31. package/skills/oma-academic-writing/resources/academic-verb-tiers.md +42 -0
  32. package/skills/oma-academic-writing/resources/anti-ai-checklist.md +52 -0
  33. package/skills/oma-academic-writing/resources/hedging-guide.md +132 -0
  34. package/skills/oma-academic-writing/resources/sentence-structure-reference.md +151 -0
  35. package/skills/oma-architecture/SKILL.md +203 -0
  36. package/skills/oma-architecture/resources/api-evolution.md +41 -0
  37. package/skills/oma-architecture/resources/checklist.md +42 -0
  38. package/skills/oma-architecture/resources/execution-protocol.md +115 -0
  39. package/skills/oma-architecture/resources/methodology-selection.md +92 -0
  40. package/skills/oma-architecture/resources/migration-patterns.md +28 -0
  41. package/skills/oma-architecture/resources/output-templates.md +111 -0
  42. package/skills/oma-architecture/resources/stakeholder-synthesis.md +80 -0
  43. package/skills/oma-backend/SKILL.md +202 -0
  44. package/skills/oma-backend/resources/checklist.md +45 -0
  45. package/skills/oma-backend/resources/error-playbook.md +97 -0
  46. package/skills/oma-backend/resources/execution-protocol.md +39 -0
  47. package/skills/oma-backend/resources/orm-reference.md +61 -0
  48. package/skills/oma-backend/variants/node/api-template.ts +315 -0
  49. package/skills/oma-backend/variants/node/snippets.md +475 -0
  50. package/skills/oma-backend/variants/node/stack.yaml +21 -0
  51. package/skills/oma-backend/variants/node/tech-stack.md +33 -0
  52. package/skills/oma-backend/variants/python/api-template.py +378 -0
  53. package/skills/oma-backend/variants/python/snippets.md +199 -0
  54. package/skills/oma-backend/variants/python/stack.yaml +18 -0
  55. package/skills/oma-backend/variants/python/tech-stack.md +45 -0
  56. package/skills/oma-backend/variants/rust/api-template.rs +635 -0
  57. package/skills/oma-backend/variants/rust/snippets.md +471 -0
  58. package/skills/oma-backend/variants/rust/stack.yaml +20 -0
  59. package/skills/oma-backend/variants/rust/tech-stack.md +36 -0
  60. package/skills/oma-backend/variants/stack.schema.json +73 -0
  61. package/skills/oma-brainstorm/SKILL.md +166 -0
  62. package/skills/oma-brainstorm/resources/triz-lite.md +117 -0
  63. package/skills/oma-coordination/SKILL.md +171 -0
  64. package/skills/oma-db/SKILL.md +201 -0
  65. package/skills/oma-db/resources/anti-patterns.md +177 -0
  66. package/skills/oma-db/resources/checklist.md +67 -0
  67. package/skills/oma-db/resources/document-templates.md +107 -0
  68. package/skills/oma-db/resources/error-playbook.md +50 -0
  69. package/skills/oma-db/resources/examples.md +170 -0
  70. package/skills/oma-db/resources/execution-protocol.md +127 -0
  71. package/skills/oma-db/resources/iso-controls.md +98 -0
  72. package/skills/oma-db/resources/migration-playbook.md +93 -0
  73. package/skills/oma-db/resources/query-tuning.md +57 -0
  74. package/skills/oma-db/resources/vector-db.md +159 -0
  75. package/skills/oma-debug/SKILL.md +146 -0
  76. package/skills/oma-debug/resources/bug-report-template.md +327 -0
  77. package/skills/oma-debug/resources/checklist.md +31 -0
  78. package/skills/oma-debug/resources/common-patterns.md +734 -0
  79. package/skills/oma-debug/resources/debugging-checklist.md +364 -0
  80. package/skills/oma-debug/resources/error-playbook.md +94 -0
  81. package/skills/oma-debug/resources/execution-protocol.md +40 -0
  82. package/skills/oma-design/SKILL.md +135 -0
  83. package/skills/oma-design/resources/asset-strategy.md +34 -0
  84. package/skills/oma-design/resources/checklist.md +63 -0
  85. package/skills/oma-design/resources/data-grid.md +48 -0
  86. package/skills/oma-design/resources/design-md-spec.md +107 -0
  87. package/skills/oma-design/resources/design-tokens.md +53 -0
  88. package/skills/oma-design/resources/error-playbook.md +18 -0
  89. package/skills/oma-design/resources/execution-protocol.md +95 -0
  90. package/skills/oma-design/resources/external-design-skills.md +130 -0
  91. package/skills/oma-design/resources/getdesign-fetcher.md +104 -0
  92. package/skills/oma-design/resources/product-interface-review.md +59 -0
  93. package/skills/oma-design/resources/redesign-protocol.md +52 -0
  94. package/skills/oma-design/resources/stitch-integration.md +244 -0
  95. package/skills/oma-dev-workflow/SKILL.md +375 -0
  96. package/skills/oma-dev-workflow/resources/affected-checks.py +58 -0
  97. package/skills/oma-dev-workflow/resources/api-workflows.md +58 -0
  98. package/skills/oma-dev-workflow/resources/database-patterns.md +107 -0
  99. package/skills/oma-dev-workflow/resources/i18n-patterns.md +63 -0
  100. package/skills/oma-dev-workflow/resources/release-coordination.md +240 -0
  101. package/skills/oma-dev-workflow/resources/tooling-profiles.md +217 -0
  102. package/skills/oma-dev-workflow/resources/troubleshooting.md +78 -0
  103. package/skills/oma-dev-workflow/resources/validation-pipeline.md +246 -0
  104. package/skills/oma-docs/SKILL.md +77 -0
  105. package/skills/oma-docs/resources/commands.md +76 -0
  106. package/skills/oma-explanation/SKILL.md +212 -0
  107. package/skills/oma-explanation/resources/document-structure.md +115 -0
  108. package/skills/oma-explanation/resources/draft-format.md +199 -0
  109. package/skills/oma-explanation/resources/html-contract.md +102 -0
  110. package/skills/oma-frontend/SKILL.md +227 -0
  111. package/skills/oma-frontend/resources/angular-rules.md +110 -0
  112. package/skills/oma-frontend/resources/checklist.md +76 -0
  113. package/skills/oma-frontend/resources/error-playbook.md +125 -0
  114. package/skills/oma-frontend/resources/execution-protocol.md +46 -0
  115. package/skills/oma-frontend/resources/snippets.md +354 -0
  116. package/skills/oma-frontend/resources/specialized-visual-implementation.md +193 -0
  117. package/skills/oma-frontend/resources/tailwind-rules.md +83 -0
  118. package/skills/oma-frontend/resources/tech-stack.md +156 -0
  119. package/skills/oma-hwp/SKILL.md +166 -0
  120. package/skills/oma-hwp/config/hwp-config.yaml +35 -0
  121. package/skills/oma-hwp/resources/balanced-tables.ts +39 -0
  122. package/skills/oma-hwp/resources/execution-protocol.md +145 -0
  123. package/skills/oma-hwp/resources/flatten-tables.ts +101 -0
  124. package/skills/oma-hwp/resources/package.json +13 -0
  125. package/skills/oma-hwp/resources/troubleshooting.md +70 -0
  126. package/skills/oma-hwp/resources/tsconfig.json +10 -0
  127. package/skills/oma-hwp/resources/turndown-plugin-gfm.d.ts +9 -0
  128. package/skills/oma-image/SKILL.md +142 -0
  129. package/skills/oma-image/config/image-config.yaml +70 -0
  130. package/skills/oma-image/resources/checklist.md +18 -0
  131. package/skills/oma-image/resources/execution-protocol.md +117 -0
  132. package/skills/oma-image/resources/invocation.md +105 -0
  133. package/skills/oma-image/resources/prompt-tips.md +71 -0
  134. package/skills/oma-image/resources/vendor-matrix.md +90 -0
  135. package/skills/oma-market/SKILL.md +142 -0
  136. package/skills/oma-market/resources/checklist.md +12 -0
  137. package/skills/oma-market/resources/error-playbook.md +12 -0
  138. package/skills/oma-market/resources/execution-protocol.md +60 -0
  139. package/skills/oma-market/resources/frameworks/pestel.md +101 -0
  140. package/skills/oma-market/resources/frameworks/porters-5f.md +90 -0
  141. package/skills/oma-market/resources/frameworks/swot.md +61 -0
  142. package/skills/oma-market/resources/intent-rules.md +35 -0
  143. package/skills/oma-market/resources/output-laws.md +53 -0
  144. package/skills/oma-mobile/SKILL.md +168 -0
  145. package/skills/oma-mobile/resources/checklist.md +77 -0
  146. package/skills/oma-mobile/resources/error-playbook.md +198 -0
  147. package/skills/oma-mobile/resources/execution-protocol.md +47 -0
  148. package/skills/oma-mobile/resources/screen-template.dart +331 -0
  149. package/skills/oma-mobile/resources/screen-template.swift +239 -0
  150. package/skills/oma-mobile/resources/screen-template.tsx +179 -0
  151. package/skills/oma-mobile/resources/tech-stack.md +69 -0
  152. package/skills/oma-mobile/variants/README.md +45 -0
  153. package/skills/oma-mobile/variants/flutter/api-template.dart +461 -0
  154. package/skills/oma-mobile/variants/flutter/snippets.md +1353 -0
  155. package/skills/oma-mobile/variants/flutter/stack.yaml +21 -0
  156. package/skills/oma-mobile/variants/flutter/tech-stack.md +201 -0
  157. package/skills/oma-mobile/variants/kotlin-android/api-template.kt +182 -0
  158. package/skills/oma-mobile/variants/kotlin-android/snippets.md +871 -0
  159. package/skills/oma-mobile/variants/kotlin-android/stack.yaml +32 -0
  160. package/skills/oma-mobile/variants/kotlin-android/tech-stack.md +159 -0
  161. package/skills/oma-mobile/variants/react-native/api-template.ts +531 -0
  162. package/skills/oma-mobile/variants/react-native/snippets.md +1014 -0
  163. package/skills/oma-mobile/variants/react-native/stack.yaml +22 -0
  164. package/skills/oma-mobile/variants/react-native/tech-stack.md +192 -0
  165. package/skills/oma-mobile/variants/stack.schema.json +68 -0
  166. package/skills/oma-mobile/variants/swift-ios/api-template.swift +165 -0
  167. package/skills/oma-mobile/variants/swift-ios/snippets.md +1028 -0
  168. package/skills/oma-mobile/variants/swift-ios/stack.yaml +25 -0
  169. package/skills/oma-mobile/variants/swift-ios/tech-stack.md +174 -0
  170. package/skills/oma-observability/SKILL.md +225 -0
  171. package/skills/oma-observability/resources/anti-patterns.md +555 -0
  172. package/skills/oma-observability/resources/boundaries/cross-application.md +348 -0
  173. package/skills/oma-observability/resources/boundaries/multi-tenant.md +290 -0
  174. package/skills/oma-observability/resources/boundaries/release.md +372 -0
  175. package/skills/oma-observability/resources/boundaries/slo.md +225 -0
  176. package/skills/oma-observability/resources/checklist.md +123 -0
  177. package/skills/oma-observability/resources/examples.md +448 -0
  178. package/skills/oma-observability/resources/execution-protocol.md +166 -0
  179. package/skills/oma-observability/resources/incident-forensics.md +348 -0
  180. package/skills/oma-observability/resources/intent-rules.md +307 -0
  181. package/skills/oma-observability/resources/layers/L3-network.md +281 -0
  182. package/skills/oma-observability/resources/layers/L4-transport.md +299 -0
  183. package/skills/oma-observability/resources/layers/L7-application/crash-analytics.md +359 -0
  184. package/skills/oma-observability/resources/layers/L7-application/mobile-rum.md +278 -0
  185. package/skills/oma-observability/resources/layers/L7-application/waf.md +246 -0
  186. package/skills/oma-observability/resources/layers/L7-application/web-rum.md +350 -0
  187. package/skills/oma-observability/resources/layers/mesh.md +368 -0
  188. package/skills/oma-observability/resources/matrix.md +177 -0
  189. package/skills/oma-observability/resources/meta-observability.md +605 -0
  190. package/skills/oma-observability/resources/observability-as-code.md +666 -0
  191. package/skills/oma-observability/resources/signals/audit.md +310 -0
  192. package/skills/oma-observability/resources/signals/cost.md +303 -0
  193. package/skills/oma-observability/resources/signals/logs.md +263 -0
  194. package/skills/oma-observability/resources/signals/metrics.md +478 -0
  195. package/skills/oma-observability/resources/signals/privacy.md +351 -0
  196. package/skills/oma-observability/resources/signals/profiles.md +245 -0
  197. package/skills/oma-observability/resources/signals/traces.md +360 -0
  198. package/skills/oma-observability/resources/standards.md +214 -0
  199. package/skills/oma-observability/resources/transport/collector-topology.md +308 -0
  200. package/skills/oma-observability/resources/transport/otlp-grpc-vs-http.md +256 -0
  201. package/skills/oma-observability/resources/transport/sampling-recipes.md +297 -0
  202. package/skills/oma-observability/resources/transport/udp-statsd-mtu.md +167 -0
  203. package/skills/oma-observability/resources/vendor-categories.md +352 -0
  204. package/skills/oma-orchestration/SKILL.md +302 -0
  205. package/skills/oma-orchestration/config/cli-config.yaml +92 -0
  206. package/skills/oma-orchestration/resources/memory-schema.md +232 -0
  207. package/skills/oma-orchestration/resources/subagent-prompt-template.md +30 -0
  208. package/skills/oma-orchestration/scripts/parallel-run.sh +6 -0
  209. package/skills/oma-orchestration/scripts/spawn-agent.sh +5 -0
  210. package/skills/oma-orchestration/scripts/verify.sh +20 -0
  211. package/skills/oma-orchestration/templates/backend-task.md +19 -0
  212. package/skills/oma-orchestration/templates/debug-task.md +16 -0
  213. package/skills/oma-orchestration/templates/frontend-task.md +18 -0
  214. package/skills/oma-orchestration/templates/mobile-task.md +18 -0
  215. package/skills/oma-orchestration/templates/qa-task.md +16 -0
  216. package/skills/oma-orchestration/templates/tasks-example.yaml +15 -0
  217. package/skills/oma-pdf/SKILL.md +162 -0
  218. package/skills/oma-pdf/config/pdf-config.yaml +27 -0
  219. package/skills/oma-pdf/resources/execution-protocol.md +127 -0
  220. package/skills/oma-pm/SKILL.md +157 -0
  221. package/skills/oma-pm/resources/error-playbook.md +75 -0
  222. package/skills/oma-pm/resources/examples.md +439 -0
  223. package/skills/oma-pm/resources/execution-protocol.md +62 -0
  224. package/skills/oma-pm/resources/iso-planning.md +110 -0
  225. package/skills/oma-pm/resources/plan-phase-protocol.md +66 -0
  226. package/skills/oma-pm/resources/task-template.json +86 -0
  227. package/skills/oma-qa/SKILL.md +141 -0
  228. package/skills/oma-qa/resources/checklist.md +339 -0
  229. package/skills/oma-qa/resources/error-playbook.md +98 -0
  230. package/skills/oma-qa/resources/execution-protocol.md +169 -0
  231. package/skills/oma-qa/resources/iso-quality.md +82 -0
  232. package/skills/oma-qa/resources/verify-ship-protocol.md +116 -0
  233. package/skills/oma-recap/SKILL.md +245 -0
  234. package/skills/oma-recap/resources/output-formats.md +83 -0
  235. package/skills/oma-refactor/SKILL.md +184 -0
  236. package/skills/oma-refactor/resources/definition.md +108 -0
  237. package/skills/oma-refactor/resources/governance.md +33 -0
  238. package/skills/oma-refactor/resources/hotspots.py +44 -0
  239. package/skills/oma-refactor/resources/measurement.md +93 -0
  240. package/skills/oma-scholar/SKILL.md +276 -0
  241. package/skills/oma-scholar/config/scholar-config.yaml +79 -0
  242. package/skills/oma-scholar/resources/api-endpoints.md +174 -0
  243. package/skills/oma-scholar/resources/checklist.md +92 -0
  244. package/skills/oma-scholar/resources/execution-protocol.md +224 -0
  245. package/skills/oma-scholar/resources/fallback-providers.md +143 -0
  246. package/skills/oma-scholar/resources/setup-openalex.md +85 -0
  247. package/skills/oma-scholar/resources/sidecar-spec.md +341 -0
  248. package/skills/oma-scholar/resources/upstream-spec-cache.md +972 -0
  249. package/skills/oma-scm/SKILL.md +103 -0
  250. package/skills/oma-scm/resources/cm-operations.md +56 -0
  251. package/skills/oma-scm/resources/codeowners-playbook.md +45 -0
  252. package/skills/oma-scm/resources/conventional-commits.md +108 -0
  253. package/skills/oma-scm/resources/merge-risk.md +76 -0
  254. package/skills/oma-scm/resources/onboarding-risk-signals.md +71 -0
  255. package/skills/oma-search/SKILL.md +125 -0
  256. package/skills/oma-search/resources/checklist.md +36 -0
  257. package/skills/oma-search/resources/error-playbook.md +66 -0
  258. package/skills/oma-search/resources/examples.md +80 -0
  259. package/skills/oma-search/resources/execution-protocol.md +86 -0
  260. package/skills/oma-search/resources/intent-rules.md +47 -0
  261. package/skills/oma-search/resources/trust-registry.md +53 -0
  262. package/skills/oma-security/SKILL.md +172 -0
  263. package/skills/oma-security/resources/artex.md +108 -0
  264. package/skills/oma-security/resources/ci.md +134 -0
  265. package/skills/oma-security/resources/cisco-source.md +108 -0
  266. package/skills/oma-security/resources/deepsec-config.md +45 -0
  267. package/skills/oma-security/resources/deepsec-matchers.md +35 -0
  268. package/skills/oma-security/resources/deepsec-scanning.md +45 -0
  269. package/skills/oma-security/resources/deepsec-setup.md +41 -0
  270. package/skills/oma-security/resources/findings-contract.md +408 -0
  271. package/skills/oma-security/resources/mcp-scanning.md +122 -0
  272. package/skills/oma-security/resources/skill-scanning.md +106 -0
  273. package/skills/oma-security/resources/validation.md +71 -0
  274. package/skills/oma-skill-creation/SKILL.md +84 -0
  275. package/skills/oma-skill-creation/resources/prompt-evaluation.md +36 -0
  276. package/skills/oma-skill-creation/resources/ssl-lite-template.md +108 -0
  277. package/skills/oma-skill-creation/resources/validation-checklist.md +101 -0
  278. package/skills/oma-slide/SKILL.md +277 -0
  279. package/skills/oma-slide/resources/animation-patterns.md +245 -0
  280. package/skills/oma-slide/resources/assets/deck-stage.js +514 -0
  281. package/skills/oma-slide/resources/assets/viewport-base.css +257 -0
  282. package/skills/oma-slide/resources/canva-integration.md +203 -0
  283. package/skills/oma-slide/resources/checklist.md +46 -0
  284. package/skills/oma-slide/resources/design-doctrine.md +260 -0
  285. package/skills/oma-slide/resources/fixed-stage.md +232 -0
  286. package/skills/oma-slide/resources/generation-protocol.md +393 -0
  287. package/skills/oma-slide/resources/native-pptx.md +84 -0
  288. package/skills/oma-slide/resources/selection-index.json +461 -0
  289. package/skills/oma-slide/resources/style-presets.LICENSE +10 -0
  290. package/skills/oma-slide/resources/style-presets.md +520 -0
  291. package/skills/oma-tf-infra/SKILL.md +201 -0
  292. package/skills/oma-tf-infra/resources/checklist.md +53 -0
  293. package/skills/oma-tf-infra/resources/cost-optimization.md +574 -0
  294. package/skills/oma-tf-infra/resources/error-playbook.md +68 -0
  295. package/skills/oma-tf-infra/resources/examples.md +38 -0
  296. package/skills/oma-tf-infra/resources/execution-protocol.md +129 -0
  297. package/skills/oma-tf-infra/resources/iso-42001-infra.md +229 -0
  298. package/skills/oma-tf-infra/resources/multi-cloud-examples.md +241 -0
  299. package/skills/oma-tf-infra/resources/policy-testing-examples.md +332 -0
  300. package/skills/oma-translation/SKILL.md +229 -0
  301. package/skills/oma-translation/resources/anti-ai-patterns.md +104 -0
  302. package/skills/oma-translation/resources/lang/_template.md +73 -0
  303. package/skills/oma-translation/resources/lang/en.md +123 -0
  304. package/skills/oma-translation/resources/lang/ja.md +274 -0
  305. package/skills/oma-translation/resources/lang/ko.md +228 -0
  306. package/skills/oma-translation/resources/lang/zh.md +285 -0
  307. package/skills/oma-translation/resources/style-skills.md +104 -0
  308. package/skills/oma-translation/resources/translation-rubric.md +126 -0
  309. package/skills/oma-video/SKILL.md +229 -0
  310. package/skills/oma-video/config/video-config.yaml +60 -0
  311. package/skills/oma-video/resources/checklist.md +26 -0
  312. package/skills/oma-video/resources/execution-protocol.md +122 -0
  313. package/skills/oma-video/resources/existing-media.md +185 -0
  314. package/skills/oma-video/resources/hyperframes-authoring/README.md +44 -0
  315. package/skills/oma-video/resources/hyperframes-authoring/demo.md +31 -0
  316. package/skills/oma-video/resources/hyperframes-authoring/explainer.md +10 -0
  317. package/skills/oma-video/resources/hyperframes-authoring/shorts.md +10 -0
  318. package/skills/oma-video/resources/motion-principles.md +81 -0
  319. package/skills/oma-video/resources/mpt/driver.py +301 -0
  320. package/skills/oma-video/resources/prompt-tips.md +75 -0
  321. package/skills/oma-video/resources/script-schema.md +81 -0
  322. package/skills/oma-video/resources/sound-design.md +127 -0
  323. package/skills/oma-video/resources/strudel/package.json +11 -0
  324. package/skills/oma-video/resources/strudel/page.html +87 -0
  325. package/skills/oma-video/resources/strudel/render.mjs +295 -0
  326. package/skills/oma-video/resources/vendor-matrix.md +124 -0
  327. package/skills/oma-voice/SKILL.md +249 -0
  328. package/skills/oma-voice/config/voice-config.yaml +30 -0
  329. package/skills/oma-voice/resources/audio-processing.md +119 -0
  330. package/skills/oma-voice/resources/checklist.md +47 -0
  331. package/skills/oma-voice/resources/execution-protocol.md +215 -0
  332. package/skills/oma-voice/resources/prompt-tips.md +43 -0
  333. package/skills/oma-voice/resources/voice-matrix.md +51 -0
  334. package/skills/oma-voice/resources/voicestudio.md +87 -0
@@ -0,0 +1,555 @@
1
+ # oma-observability Anti-Patterns
2
+
3
+ > Consolidated catalog of patterns that break observability/traceability.
4
+ > Each entry: pattern name, why-it-fails, remediation, severity.
5
+
6
+ ## Severity legend
7
+
8
+ - **CRITICAL**: security breach / compliance violation / production data loss
9
+ - **HIGH**: blocks on-call ability to resolve incidents
10
+ - **MEDIUM**: degrades observability quality / cost / maintainability
11
+ - **LOW**: style or minor optimization
12
+
13
+ ---
14
+
15
+ ## A: Privacy & Sensitive Data
16
+
17
+ ### A.1 Claiming "anonymization" for pseudonymized data
18
+
19
+ **Severity**: CRITICAL
20
+ **Why it fails**: Pseudonymized data (reversible with a key) is still personal data under GDPR Article 4(1). Misclassifying it as anonymous data leads to non-compliant retention periods, missing erasure obligations, and exposes the organization to 4% global-turnover fines.
21
+ **Remediation**: Apply the reversibility test from `signals/privacy.md §3`: "Could we recover the original value if compelled?" If yes, it is pseudonymization. Update your ROPA and re-classify accordingly.
22
+ **See also**: `signals/privacy.md §3 Anonymization vs Pseudonymization`
23
+
24
+ ### A.2 OTel Collector `hash` action on low-entropy user IDs
25
+
26
+ **Severity**: CRITICAL
27
+ **Why it fails**: The Collector's built-in `hash` action applies SHA-256 without a salt. Numeric user IDs (e.g., 6-digit codes) are reversible via rainbow tables, making the pseudonymization ineffective and constituting a GDPR breach.
28
+ **Remediation**: Perform HMAC-SHA256 with a vault-managed key at the SDK layer before emitting spans. Store the salt in a separate region with independent IAM (GDPR Art. 32). Rotate quarterly.
29
+ **See also**: `signals/privacy.md §8 Salted Hashing Caveats`
30
+
31
+ ### A.3 Baggage carrying PII across trust boundaries
32
+
33
+ **Severity**: CRITICAL
34
+ **Why it fails**: W3C Baggage propagates to every downstream service, including external partners. Placing `user.email`, session tokens, or credentials in baggage violates W3C Baggage §Security and GDPR Article 5(1)(c) minimization, leaking PII to untrusted collectors.
35
+ **Remediation**: Apply a baggage allowlist at every egress trust boundary (API gateway, external webhook). Allowed values: `tenant.id`, `feature.variant`, `deployment.sha`, `region.hint`. Strip all other keys.
36
+ **See also**: `boundaries/cross-application.md §4 Baggage Rules`, `signals/privacy.md §4 Common PII`
37
+
38
+ ### A.4 PII in crash stack traces without redaction filter
39
+
40
+ **Severity**: CRITICAL
41
+ **Why it fails**: Exception messages frequently capture SQL queries, HTTP headers, and URL query strings verbatim, exposing `user.email`, `Authorization` tokens, card numbers, and passwords in vendor SaaS storage; a GDPR and PIPA breach.
42
+ **Remediation**: Implement a `beforeSend` / `before_send` allowlist hook in your crash SDK. Strip `Authorization`, `Cookie`, and any regex-matching email/card patterns before the crash report is serialized. Do not rely on server-side redaction alone.
43
+ **See also**: `layers/L7-application/crash-analytics.md §8 Privacy and PII`, `signals/privacy.md §7 SDK-Layer Redaction`
44
+
45
+ ### A.5 Raw IP addresses retained without redaction
46
+
47
+ **Severity**: CRITICAL
48
+ **Why it fails**: IP addresses linked to natural persons are personal data under GDPR Article 4(1) and PIPA. Storing raw `srcaddr` / `client.address` in long-retention backends violates the data minimization principle (GDPR Art. 5(1)(c)) and is grounds for regulatory action.
49
+ **Remediation**: Truncate the last IPv4 octet (e.g., `203.0.113.0`) or apply rotating-salt SHA-256 pseudonymization at pipeline ingestion. Never store raw IPs beyond the 7-day raw retention tier.
50
+ **See also**: `signals/privacy.md §5 PII Handling Rules`, `layers/L3-network.md §3.3 Privacy Note`
51
+
52
+ ### A.6 `db.query.text` with untrimmed PII
53
+
54
+ **Severity**: CRITICAL
55
+ **Why it fails**: SQL query text in `db.query.text` span attributes frequently contains `WHERE email = 'user@example.com'` or `WHERE ssn = '...'`. These surface verbatim in trace backends, violating GDPR minimization and leaking credentials.
56
+ **Remediation**: Use the OTel Collector `redaction` processor with an allowlist; block free-text query content unless it matches safe patterns. Apply SQL parameterization at the SDK layer so user data never enters query text.
57
+ **See also**: `signals/privacy.md §6 OTel Collector Processors`, `signals/traces.md`
58
+
59
+ ### A.7 Observability backend open to all engineers (no RBAC)
60
+
61
+ **Severity**: HIGH
62
+ **Why it fails**: Production traces and logs containing even pseudonymized user data are sensitive. Unrestricted access violates the principle of least privilege, increases PII exposure risk, and fails SOC 2 CC7.2 and ISO/IEC 27001 A.8.15 access controls.
63
+ **Remediation**: Implement role-scoped access: on-call engineers see own-service traces (24h); security analysts see all services (30d); auditors get read-only audit index. Use Grafana folder permissions or Datadog Teams scopes.
64
+ **See also**: `signals/privacy.md §12 Backend RBAC`
65
+
66
+ ### A.8 Routing telemetry to 3rd-party vendor without DPA
67
+
68
+ **Severity**: HIGH
69
+ **Why it fails**: Observability vendors receiving personal data are data processors under GDPR Article 28. Routing data before signing a Data Processing Agreement is a direct GDPR violation.
70
+ **Remediation**: Block data flows to Datadog, Sentry, Grafana Cloud, Honeycomb, New Relic, or Elastic Cloud until a DPA is signed. Confirm storage region matches your compliance obligations. Reference the legal team's approved vendor list.
71
+ **See also**: `signals/privacy.md §13 Third-Party Processor Obligations`
72
+
73
+ ### A.9 Session replay without client-side PII masking
74
+
75
+ **Severity**: HIGH
76
+ **Why it fails**: Session replay captures DOM mutations including `<input>` fields. Without SDK-level masking, email addresses, credit card numbers, and passwords are captured in replay payloads before reaching the vendor; a GDPR Article 6 consent violation.
77
+ **Remediation**: Enable input masking in the SDK config (Sentry, Datadog both support this). Wire replay consent to the cookie consent flow. Test via automated replay review that sensitive fields are masked.
78
+ **See also**: `layers/L7-application/web-rum.md §8 Session Replay`, `signals/privacy.md §5`
79
+
80
+ ### A.10 Unencrypted telemetry queue on mobile device
81
+
82
+ **Severity**: HIGH
83
+ **Why it fails**: Mobile telemetry queued to disk is PII at rest on user devices. If the device is lost, compromised, or forensically examined, unencrypted queue files expose personal data; violating GDPR Art. 32 and PIPA § 29 safety measures.
84
+ **Remediation**: Encrypt the queue using platform-native key storage: iOS Keychain, Android Keystore. Apply field-level redaction before write, not before send.
85
+ **See also**: `layers/L7-application/mobile-rum.md §3 Offline-First Queuing`
86
+
87
+ ### A.11 Cross-region telemetry routing without GDPR mechanism
88
+
89
+ **Severity**: HIGH
90
+ **Why it fails**: GDPR Chapter V prohibits transfer of personal data to non-adequate countries without Standard Contractual Clauses or an adequacy decision. Routing EU telemetry through a US-hosted collector without SCC in place is a direct violation.
91
+ **Remediation**: Implement routing connector per `signals/privacy.md §10`: route EU traffic to EU-region backend, KR traffic to KR-region backend. Confirm SCC or adequacy decision with legal before routing.
92
+ **See also**: `signals/privacy.md §10 Cross-Border Transfer`, `transport/collector-topology.md §7`
93
+
94
+ ---
95
+
96
+ ## B: Cardinality & Cost
97
+
98
+ ### B.1 `user.id` as metric label
99
+
100
+ **Severity**: CRITICAL
101
+ **Why it fails**: Creates one TSDB time series per user. For a service with 1M users, this is 1M series; instant storage explosion, query latency degradation, and SaaS vendor bill spike. Additionally, user IDs are PII under GDPR Art. 4(1).
102
+ **Remediation**: Replace with `user.tier`, `user.cohort`, or aggregated bucket labels. Never use any unbounded identifier as a metric label. Enforce via OTel SDK View attribute allow-list.
103
+ **See also**: `signals/metrics.md §9 Cardinality Budget`, `meta-observability.md §Section C`
104
+
105
+ ### B.2 New metric name per tenant
106
+
107
+ **Severity**: HIGH
108
+ **Why it fails**: Creating `http_requests_total_tenant_acme` for each tenant bypasses TSDB cardinality controls entirely and cannot be aggregated across tenants. It also disables cardinality budget alerting.
109
+ **Remediation**: Use `http_requests_total{tenant_id="acme"}` with a top-N cap (≤ 1000 explicit tenants). Map overflow to label value `"other"`. Apply Collector `transform` processor for normalization.
110
+ **See also**: `signals/metrics.md §9.3 Tenant Cap`, `signals/cost.md §10`
111
+
112
+ ### B.3 Raw `url.full` as metric label
113
+
114
+ **Severity**: HIGH
115
+ **Why it fails**: URL query strings are unbounded and may contain tokens or email addresses (`?token=...`, `?email=...`). Using raw `url.full` as a label causes cardinality explosion and PII leakage in the TSDB.
116
+ **Remediation**: Use `http.route` (normalized route) instead. Apply `replace_pattern` in OTel Collector `transform` processor to strip numeric IDs and UUIDs from route segments.
117
+ **See also**: `meta-observability.md §Section C`, `signals/metrics.md §3.3 Label Rules`
118
+
119
+ ### B.4 Cost label at per-request metric granularity
120
+
121
+ **Severity**: HIGH
122
+ **Why it fails**: Writing `gen_ai.cost.total_usd` as a metric label at request granularity creates one series per request; causing OOM on the TSDB ingestor and making cost attribution unusable.
123
+ **Remediation**: Use `gen_ai.cost.total_usd` as a span attribute only. Aggregate cost metrics by `tenant_id`, `namespace`, and `workload` at the metric surface. Configure tail-sampler to always retain spans where cost exceeds $0.50.
124
+ **See also**: `signals/cost.md §10`, `transport/sampling-recipes.md §3`
125
+
126
+ ### B.5 Summary instrument for cross-service aggregation
127
+
128
+ **Severity**: MEDIUM
129
+ **Why it fails**: Prometheus Summary computes quantiles client-side per process. p99 from three replicas cannot be merged into a fleet-level p99; the values are mathematically incompatible.
130
+ **Remediation**: Replace Summary with Histogram + `histogram_quantile()` at query time. Set explicit bucket boundaries matching the expected value range (e.g., seconds-scale for request duration, not the default millisecond buckets).
131
+ **See also**: `signals/metrics.md §2.5 Summary`
132
+
133
+ ### B.6 Histogram with default bucket boundaries
134
+
135
+ **Severity**: MEDIUM
136
+ **Why it fails**: The OTel SDK default buckets are millisecond-scale `[0, 5, 10, 25, 50, ...]`. For second-scale operations (database queries, LLM inference, file uploads), all measurements land in the last bucket, making `histogram_quantile()` meaningless.
137
+ **Remediation**: Set explicit bucket boundaries per instrument view using `View(instrument_name=..., aggregation=ExplicitBucketHistogramAggregation([0.01, 0.05, 0.1, 0.5, 1, 2, 5]))`.
138
+ **See also**: `signals/metrics.md §2.4 Histogram`
139
+
140
+ ### B.7 LLM spans not tail-sampled on cost threshold
141
+
142
+ **Severity**: MEDIUM
143
+ **Why it fails**: High-cost LLM spans (e.g., $2+ per trace) may be dropped by probabilistic sampling before they reach the backend. Silent budget blowup is invisible until the cloud billing invoice arrives.
144
+ **Remediation**: Use a `transform` processor to set `sampling.keep_reason = "high_cost"` on spans where `gen_ai.cost.total_usd > 0.50`, then add a `string_attribute` policy in `tail_sampling` that always retains these spans.
145
+ **See also**: `signals/cost.md §6`, `transport/sampling-recipes.md §3`
146
+
147
+ ---
148
+
149
+ ## C: Pipeline & Collector
150
+
151
+ ### C.1 Missing `memory_limiter` processor
152
+
153
+ **Severity**: CRITICAL
154
+ **Why it fails**: Without `memory_limiter`, a traffic spike or backend backpressure causes the Collector heap to grow unbounded until the process OOM-kills. All in-flight signals are lost and the pipeline is silent until the pod restarts.
155
+ **Remediation**: Add `memory_limiter` as the **first** processor in every pipeline (traces, metrics, logs). Set `limit_percentage: 75` and `spike_limit_percentage: 20`. Apply to both DaemonSet agents and gateway tiers.
156
+ **See also**: `meta-observability.md §Section A3`, `transport/collector-topology.md §2`, `transport/otlp-grpc-vs-http.md §4.3`
157
+
158
+ ### C.2 Sidecar collectors on standard Kubernetes nodes
159
+
160
+ **Severity**: HIGH
161
+ **Why it fails**: Sidecar mode injects one Collector per application pod. A 100-pod deployment runs 100 Collectors. CPU and memory cost scales linearly with pod count, overwhelming cluster resources. Additionally, sidecar collectors see only spans from their own pod, breaking tail sampling.
162
+ **Remediation**: Use DaemonSet mode (one Collector per node) for standard Kubernetes. Reserve sidecar mode for AWS Fargate or GCP Cloud Run where DaemonSets are unavailable.
163
+ **See also**: `transport/collector-topology.md §3 When to Use Sidecar`
164
+
165
+ ### C.3 Tail sampling in sidecar
166
+
167
+ **Severity**: HIGH
168
+ **Why it fails**: A sidecar Collector only sees spans from its own pod. A trace spanning multiple services has spans on different pods, each with a different sidecar. No single sidecar has the complete trace; sampling decisions are based on incomplete data, producing systematically wrong retention.
169
+ **Remediation**: Run `tail_sampling` processor in the gateway tier (Deployment mode) only, combined with a `loadbalancing` exporter using consistent hash by `trace_id` to ensure trace completeness.
170
+ **See also**: `transport/collector-topology.md §3`, `transport/sampling-recipes.md §2`
171
+
172
+ ### C.4 Single gateway replica
173
+
174
+ **Severity**: HIGH
175
+ **Why it fails**: A single gateway Collector is a single point of failure. Under backend backpressure or a rolling restart, all telemetry is lost for the duration. This eliminates observability exactly when it is most needed.
176
+ **Remediation**: Deploy a minimum of 2–3 gateway replicas. Use a PodDisruptionBudget to prevent simultaneous eviction. Add a `loadbalancing` exporter upstream for trace-complete routing.
177
+ **See also**: `transport/collector-topology.md §6 High-Throughput Gateway Scaling`
178
+
179
+ ### C.5 Log migration based on an unsupported deprecation claim
180
+
181
+ **Severity**: MEDIUM
182
+ **Why it fails**: Fluentd remains CNCF Graduated. The CNCF migration guide does not deprecate it, and Fluent Bit configuration syntax/plugins are not a drop-in replacement. A migration without conversion and parity checks can lose logs.
183
+ **Remediation**: Choose from actual plugin, route, resource, and support requirements. Convert configuration and validate representative records in parallel before cutover.
184
+ **See also**: `signals/logs.md §6 Collector and Agent Options`, `vendor-categories.md §(h)`
185
+
186
+ ### C.6 Prometheus receiver on multiple replicas without target allocator
187
+
188
+ **Severity**: MEDIUM
189
+ **Why it fails**: When multiple gateway Collector replicas each run a `prometheus` receiver, every replica scrapes every target. This produces duplicate metrics in the TSDB backend and inflates series counts.
190
+ **Remediation**: Enable the OTel Operator's `spec.targetAllocator` to distribute scrape targets across replicas. Each replica scrapes a non-overlapping subset of targets.
191
+ **See also**: `transport/collector-topology.md §4 Component Placement Reference`
192
+
193
+ ### C.7 Collector self-metrics not scraped by independent instance
194
+
195
+ **Severity**: MEDIUM
196
+ **Why it fails**: If the Collector scrapes its own `:8888/metrics` endpoint and the Collector fails, the metrics that would reveal the failure are also lost. The pipeline's health is invisible at the moment of failure.
197
+ **Remediation**: Scrape Collector self-metrics from a separate Prometheus instance or second Collector instance. Expose `otelcol_*` metrics at `service.telemetry.metrics.address: 0.0.0.0:8888` with `level: detailed`.
198
+ **See also**: `meta-observability.md §Section A1`
199
+
200
+ ---
201
+
202
+ ## D: Sampling & Retention
203
+
204
+ ### D.1 Head-based sampling on multi-service call paths
205
+
206
+ **Severity**: HIGH
207
+ **Why it fails**: Head-based sampling makes a sampling decision at the trace root. If a downstream service independently samples out, its spans are dropped; the reconstructed trace has gaps. Tracing backends show incomplete traces that mislead incident investigation.
208
+ **Remediation**: Use tail-based sampling in the gateway tier for multi-service systems. Propagate `traceparent` on every hop regardless of local sampling decision. The gateway buffers all spans and decides after the trace is complete.
209
+ **See also**: `transport/sampling-recipes.md §1`, `transport/sampling-recipes.md §6 Pitfalls`
210
+
211
+ ### D.2 Missing `loadbalancing` exporter before tail sampler
212
+
213
+ **Severity**: HIGH
214
+ **Why it fails**: Without consistent-hash routing, spans for the same trace arrive at different gateway replicas. Each replica's `tail_sampling` processor sees an incomplete trace and makes wrong retention decisions; high-value traces are dropped, low-value traces are retained.
215
+ **Remediation**: Deploy `loadbalancing` exporter (with `routing_key: traceID`) in the tier upstream of `tail_sampling`. Use a headless Kubernetes Service so the exporter resolves per-pod DNS.
216
+ **See also**: `transport/sampling-recipes.md §2`, `transport/collector-topology.md §6`
217
+
218
+ ### D.3 Audit evidence can be altered without detection
219
+
220
+ **Severity**: HIGH
221
+ **Why it fails**: Missing access controls and tamper protection can invalidate required audit evidence. The applicable framework and record class determine the controls; there is no common requirement that every audit log use WORM.
222
+ **Remediation**: Record the integrity requirement, access controls, and retention/legal-hold policy. Choose Object Lock or equivalent only when justified; select Governance/Compliance mode according to the approved control and deletion obligations.
223
+ **See also**: `signals/audit.md §5 Immutable WORM Storage`
224
+
225
+ ### D.4 Audit retention does not match its approved schedule
226
+
227
+ **Severity**: HIGH
228
+ **Why it fails**: Records may be erased before a required period or kept beyond their lawful purpose. HIPAA required security documentation and operational audit logs are different record classes; six years is not a blanket raw-log minimum.
229
+ **Remediation**: Map each class to applicable legal/contractual obligations and purpose, including erasure and legal-hold exceptions. Configure lifecycle/lock controls and a scheduled policy check against that schedule rather than a universal seven-year threshold.
230
+ **See also**: `signals/audit.md §7 Evidence-Specific Retention Policy`, `meta-observability.md §Section F Alert 5`
231
+
232
+ ### D.5 No tamper evidence on audit trail
233
+
234
+ **Severity**: HIGH
235
+ **Why it fails**: WORM prevents deletion but does not prove that records were not silently modified or that records are not missing. An audit trail without a hash chain or Merkle root anchoring cannot satisfy forensic integrity requirements for SOC 2 or ISO/IEC 27001.
236
+ **Remediation**: Implement per-event hash chain: `event_N.hash = SHA256(event_N.payload + event_{N-1}.hash)`. Anchor daily Merkle root to an external transparency log (rekor/sigstore). Run automated chain verification weekly.
237
+ **See also**: `signals/audit.md §6 Tamper Evidence`
238
+
239
+ ### D.6 Kubernetes audit logs routed to operational log store
240
+
241
+ **Severity**: HIGH
242
+ **Why it fails**: Operational log stores (Loki, Elasticsearch) are mutable and have short retention policies. Kubernetes API audit logs; which record secret access, RBAC mutations, and cluster-admin actions; require WORM storage with multi-year retention to satisfy PCI DSS Requirement 10.
243
+ **Remediation**: Route K8s audit logs via a separate pipeline to the WORM cold tier (S3 Glacier Deep Archive with Object Lock). Tag with `source: k8s_apiserver`. Do not co-mingle with operational logs.
244
+ **See also**: `signals/audit.md §9 Kubernetes Audit Logs`
245
+
246
+ ### D.7 Decision wait too short in tail sampler
247
+
248
+ **Severity**: MEDIUM
249
+ **Why it fails**: If `decision_wait` is shorter than the p99 inter-service latency, spans from slow downstream services arrive after the sampling decision is finalized. Those spans are dropped unconditionally, making tail sampling silently incomplete.
250
+ **Remediation**: Set `decision_wait` to exceed your p99 cross-service latency (typically 30–60 s for synchronous calls). For cross-region deployments, account for additional propagation delay. Monitor `otelcol_processor_queued_retry_send_queue_length` for buffer pressure.
251
+ **See also**: `transport/sampling-recipes.md §6 Pitfalls`
252
+
253
+ ---
254
+
255
+ ## E: Release & Deployment
256
+
257
+ ### E.1 No release markers in telemetry
258
+
259
+ **Severity**: HIGH
260
+ **Why it fails**: Without `service.version` on spans, metrics, and logs; and without a deployment event at release time; there is no way to correlate a metric anomaly or error spike to a specific deploy. Incident investigation degrades to git bisect guesswork.
261
+ **Remediation**: Set `service.version` on the OTel Resource at SDK init (injected via CI as `OTEL_RESOURCE_ATTRIBUTES`). Emit a structured deployment event at release time and pipeline it to Grafana as a vertical annotation line.
262
+ **See also**: `boundaries/release.md §9 Release Markers`
263
+
264
+ ### E.2 Canary analysis without SLI metric
265
+
266
+ **Severity**: HIGH
267
+ **Why it fails**: Promoting a canary without a Flagger `MetricTemplate` or Argo Rollouts `AnalysisTemplate` means the promotion decision is manual and intuition-based. Regressions in error rate or latency ship silently to 100% of traffic.
268
+ **Remediation**: Gate every canary on at minimum: error rate (max +0.5% allowed) and p99 latency (max +50ms allowed). Reference PromQL SLI queries from `boundaries/slo.md` as the metric source.
269
+ **See also**: `boundaries/release.md §10 Canary Analysis Metric Suite`
270
+
271
+ ### E.3 Symbol upload not automated in CI (mobile / web)
272
+
273
+ **Severity**: HIGH
274
+ **Why it fails**: Without automated dSYM / ProGuard / source map upload on every release, production crashes produce unreadable minified stack traces. Incident investigation time for mobile/web crashes increases by 30–60 minutes per incident.
275
+ **Remediation**: Add symbol upload as a mandatory CI step, gated on the same pipeline step as container image push or app store submission. Use Sentry CLI, `fastlane-plugin-sentry`, or Gradle Sentry plugin. Never store symbols in git LFS.
276
+ **See also**: `layers/L7-application/crash-analytics.md §9 CI Integration`
277
+
278
+ ### E.4 GitOps drift unalerted
279
+
280
+ **Severity**: MEDIUM
281
+ **Why it fails**: When the cluster state diverges from the git manifest (OutOfSync in Argo CD, stalled Flux reconcile), the cluster is running unintended configuration. This silently breaks observability contracts; dashboards may reference metrics from a previous config version.
282
+ **Remediation**: Alert on `argocd_app_info{sync_status="OutOfSync"} == 1` and `gotk_reconcile_condition{type="Ready",status="False"} == 1`. Treat drift as an incident, not a warning.
283
+ **See also**: `boundaries/release.md §7 GitOps Engines`
284
+
285
+ ### E.5 Feature flag evaluation not observed
286
+
287
+ **Severity**: MEDIUM
288
+ **Why it fails**: Without `feature_flag.*` span attributes on every flag evaluation, A/B experiment effects are invisible. A latency regression introduced by a new feature variant cannot be attributed to the flag without telemetry.
289
+ **Remediation**: Emit `feature_flag.key`, `feature_flag.variant`, and `feature_flag.provider_name` as span attributes on every evaluation (OTel `feature_flag.*` semconv, Experimental tier). Track `feature_flag_evaluation_total` and error rate delta per variant.
290
+ **See also**: `boundaries/release.md §6 Observing Feature Flag Evaluations`
291
+
292
+ ### E.6 Rollback without post-mortem audit trail
293
+
294
+ **Severity**: MEDIUM
295
+ **Why it fails**: A rollback event without an audit record severs the learning loop. The same deployment failure repeats because there is no evidence of what was deployed, who authorized it, and what metric triggered rollback.
296
+ **Remediation**: Record every rollback in the audit log with: `actor.type`, `action: rollback`, `service.version` (both from and to), `event.outcome`, and `trace_id`. Cross-reference to the triggering alert.
297
+ **See also**: `signals/audit.md §3 Audit Event Categories`, `boundaries/release.md §11`
298
+
299
+ ---
300
+
301
+ ## F: Security & Compliance
302
+
303
+ ### F.0 Audit pipeline supply-chain integrity unverified
304
+
305
+ **Severity**: CRITICAL
306
+ **Why it fails**: If the Collector binary, Falco rules, or sigstore/rekor clients shipped into the audit pipeline are tampered with, every downstream "immutable" audit record inherits the compromise. WORM storage guarantees nothing about the ingestor's trustworthiness.
307
+ **Remediation**: Sign all audit-pipeline container images with cosign (sigstore). Pin Falco rule SHA digests in Helm values. Verify rekor transparency-log entries for rule provenance. Deploy an admission controller (e.g., Kyverno + `verifyImages`) that rejects unsigned images from the observability namespace. Cross-ref `signals/audit.md §8 Falco` and sigstore documentation.
308
+ **See also**: `signals/audit.md`, sigstore.dev
309
+
310
+ ### F.1 `traceparent` stripped at service boundary
311
+
312
+ **Severity**: HIGH
313
+ **Why it fails**: Stripping `traceparent` on outbound calls silently breaks distributed trace continuity. The downstream service starts a new root trace, making it impossible to correlate a customer-reported request across services. MTTR increases by 15–30 minutes per incident.
314
+ **Remediation**: Every outbound HTTP/gRPC call MUST forward `traceparent`. Configure the OTel SDK auto-instrumentation to inject the header automatically. Test with an integration test that asserts the `traceparent` header on every outbound call.
315
+ **See also**: `standards.md §2.2 W3C Trace Context`
316
+
317
+ ### F.2 Mixed propagators without normalization at ingress
318
+
319
+ **Severity**: HIGH
320
+ **Why it fails**: When B3 (Zipkin), AWS X-Ray, and W3C headers coexist without a composite propagator at the ingress gateway, spans from different origins appear as disconnected root spans in the trace backend. Waterfall correlation is impossible across cloud or vendor boundaries.
321
+ **Remediation**: Configure the ingress gateway with a composite propagator that extracts all known formats (tracecontext, b3multi, awsxray, datadog) and emits only W3C downstream.
322
+ **See also**: `boundaries/cross-application.md §3 Propagator Matrix`
323
+
324
+ ### F.3 `request_id` not exposed to frontend users
325
+
326
+ **Severity**: MEDIUM
327
+ **Why it fails**: Without a user-visible `request_id` in error banners, customer support cannot correlate a user-reported error to backend traces. Support agents must rely on user-provided timestamps and symptoms; escalations that should take 2 minutes take 20.
328
+ **Remediation**: Return `x-request-id` in every HTTP response header. Display it in frontend error banners. Customer support uses this ID; engineers use it to pivot to `trace_id` in the log system.
329
+ **See also**: `boundaries/cross-application.md §7 request_id to trace_id Integration`
330
+
331
+ ### F.4 `service.namespace` not set on services
332
+
333
+ **Severity**: MEDIUM
334
+ **Why it fails**: Without `service.namespace`, a system with 80+ microservices presents a flat, unordered list in trace backends and dashboards. Domain-level KPIs (e.g., payment-domain error rate vs. inventory-domain error rate) are impossible to compute.
335
+ **Remediation**: Assign `service.namespace` per DDD bounded context at deployment time via `OTEL_RESOURCE_ATTRIBUTES` or OTel Collector `resource` processor. Align namespaces with domain boundaries, not team names.
336
+ **See also**: `boundaries/cross-application.md §5 DDD Bounded Context`
337
+
338
+ ### F.5 New `trace_id` generated on DLQ replay
339
+
340
+ **Severity**: MEDIUM
341
+ **Why it fails**: Generating a new `trace_id` at dead letter queue replay severs the forensic chain from the original failure span to the replay event. Root cause analysis of repeated failures requires tracing back to the originating request.
342
+ **Remediation**: Re-inject the original `traceparent` and `causation_id` from the failed message headers when replaying. Use a span link; not parent-child; to connect replay span to the original trace.
343
+ **See also**: `boundaries/cross-application.md §8 Idempotency and Event-Driven Trace Lineage`
344
+
345
+ ### F.6 WAF rule hit / block rate unmonitored
346
+
347
+ **Severity**: HIGH
348
+ **Why it fails**: When a WAF rule update over-blocks legitimate traffic, the edge returns 403 to users while backend services see request volume drop. Service-level error rate stays flat; the on-call investigates "missing traffic" rather than "WAF blocking my users", and the FP storm is discovered only via customer complaints. MTTR runs into hours.
349
+ **Remediation**: Emit `waf_action_total{action, rule_id, rule_set_version}` from the edge tier. Alert when the block rate per `rule.id` step-changes more than 3σ above its rolling 24h baseline. Dashboard the action distribution alongside the application 5xx rate so block-vs-error is visible side-by-side.
350
+ **See also**: `layers/L7-application/waf.md §5 False-Positive Surge`
351
+
352
+ ### F.7 WAF rule-set deploy without release marker
353
+
354
+ **Severity**: HIGH
355
+ **Why it fails**: Without a release marker stream for ruleset rollouts, an edge 403 surge cannot be aligned with the rule change that caused it. The rollback decision is guesswork; engineers may roll back the application instead of the ruleset.
356
+ **Remediation**: Emit a structured deployment event on every ruleset rollout carrying `waf.rule.set.version`, `waf.vendor`, and the rollout strategy (full vs canary). Treat WAF ruleset versions as a peer to `service.version` for release-correlation purposes per `boundaries/release.md`.
357
+ **See also**: `layers/L7-application/waf.md §3 Required Attributes`, `boundaries/release.md`
358
+
359
+ ### F.8 WAF fail-closed without dependency-health signal
360
+
361
+ **Severity**: HIGH
362
+ **Why it fails**: WAFs that consult external services (IP reputation, bot scoring, GeoIP, threat-intel API) inherit those dependencies' failure modes. A fail-closed policy without dependency telemetry means a third-party API outage silently blocks 100% of traffic; on-call has no signal that the security layer is the cause.
363
+ **Remediation**: Emit `waf_dependency_failure_total{dependency, policy}` per external dependency. Alert when non-zero for more than 60 s. Document the fail-open vs fail-closed policy per rule and surface it on the WAF dashboard.
364
+ **See also**: `layers/L7-application/waf.md §6 Fail-Open vs Fail-Closed`
365
+
366
+ ### F.9 WAF logs detached from application trace context
367
+
368
+ **Severity**: MEDIUM
369
+ **Why it fails**: When the WAF blocks a request and emits a log without trace correlation, the application has no record of the attempt. On-call cannot answer "did this user even reach our service?" without manually joining vendor-specific identifiers (e.g., `cf-ray`, `X-Amzn-Trace-Id`) to the application trace.
370
+ **Remediation**: Configure the WAF to propagate `traceparent` even on block actions. Map vendor headers (`cf-ray`, `X-Amzn-Trace-Id`, Akamai `X-Akamai-*`) to W3C baggage at the edge so application traces and WAF logs join cleanly on `trace_id`.
371
+ **See also**: `layers/L7-application/waf.md §7 Vendor Telemetry Surfaces`, `boundaries/cross-application.md §Propagators`
372
+
373
+ ### F.10 WAF rules promoted to `block` without `log`-mode soak
374
+
375
+ **Severity**: MEDIUM
376
+ **Why it fails**: A new rule promoted directly to `block` action carries unknown FP rate; first contact with production traffic doubles as the rule's correctness test. The failure mode is a mass-block incident affecting real customers.
377
+ **Remediation**: Mandatory minimum 24 h `log`-mode (detect-only) soak per new rule with FP rate verified below a target ratio (commonly < 0.1% of matched traffic) before promotion to `block`. Encode the soak requirement as a CI gate on the ruleset repository so promotion bypass is auditable.
378
+ **See also**: `layers/L7-application/waf.md §2 WAF Action Model §5 False-Positive Surge`
379
+
380
+ ---
381
+
382
+ ## G: Frontend / Mobile
383
+
384
+ ### G.1 3rd-party script loaded without CSP monitoring
385
+
386
+ **Severity**: HIGH
387
+ **Why it fails**: Third-party scripts loaded without a Content Security Policy are an unmonitored XSS and supply-chain attack vector. A compromised CDN script executes in the user's browser with full page access. LCP regressions from script load delays are also invisible without attribution.
388
+ **Remediation**: Add `Content-Security-Policy` header with `report-to` endpoint. Pipe CSP violation reports to the log backend and alert on new `blocked-uri` origins. Pin script hashes with Subresource Integrity (`integrity="sha384-..."`).
389
+ **See also**: `layers/L7-application/web-rum.md §6 Third-Party Scripts and CSP`
390
+
391
+ ### G.2 Source maps not uploaded to error vendor
392
+
393
+ **Severity**: HIGH
394
+ **Why it fails**: Minified production bundles produce unreadable stack traces: `at t.<anonymous> (bundle.min.js:1:74821)`. Without source maps, engineers cannot identify the failing line of code. Incident investigation for frontend crashes is impossible.
395
+ **Remediation**: Upload source maps to the error tracking vendor on every CI release pipeline step, before the release is considered complete. Use Sentry CLI or equivalent. Never store source maps in git LFS; use vendor symbol storage.
396
+ **See also**: `layers/L7-application/web-rum.md §9 Error Tracking`, `layers/L7-application/crash-analytics.md §3`
397
+
398
+ ### G.3 FID still reported in dashboards after March 2024
399
+
400
+ **Severity**: MEDIUM
401
+ **Why it fails**: First Input Delay (FID) was removed from Core Web Vitals in March 2024 and replaced by Interaction to Next Paint (INP). Dashboards still reporting FID mislead SLO reviews; FID scores passing does not mean the INP SLO is met.
402
+ **Remediation**: Replace FID with INP in all dashboards and OpenSLO definitions. SLI target: INP p75 ≤ 200 ms. Use `web-vitals` JS library v4.x which provides `onINP`.
403
+ **See also**: `layers/L7-application/web-rum.md §2 Core Web Vitals`
404
+
405
+ ### G.4 `propagateTraceHeaderCorsUrls` / `allowedTracingUrls` not configured
406
+
407
+ **Severity**: MEDIUM
408
+ **Why it fails**: Browser CORS preflight rejects injection of the `traceparent` header to origins not listed in the SDK allowlist. Client-to-server trace correlation silently breaks; frontend traces appear disconnected from backend traces.
409
+ **Remediation**: Add all API origin patterns to `FetchInstrumentation`'s `propagateTraceHeaderCorsUrls` (OTel JS) or Datadog RUM's `allowedTracingUrls`. Test in a browser network inspector to confirm the header is present.
410
+ **See also**: `layers/L7-application/web-rum.md §5 Client-to-Server Error Correlation`
411
+
412
+ ### G.5 Missing `traceparent` injection on mobile outbound HTTP
413
+
414
+ **Severity**: MEDIUM
415
+ **Why it fails**: Without `traceparent` on outbound requests from the mobile app, the mobile user session is invisible in backend distributed traces. Customer-reported mobile errors cannot be linked to backend spans.
416
+ **Remediation**: Configure the mobile SDK's HTTP interceptor at initialization time (not at individual call sites). Verify with a network proxy tool (Charles, mitmproxy) that `traceparent` appears on all outbound API calls.
417
+ **See also**: `layers/L7-application/mobile-rum.md §9 W3C Trace Context Propagation`
418
+
419
+ ### G.6 No event TTL on mobile offline queue
420
+
421
+ **Severity**: MEDIUM
422
+ **Why it fails**: Stale events queued on-device for hours or days eventually upload when the network reconnects. Events with device timestamps that are 24+ hours old mislead dashboards and SLO calculations; a crash from two days ago appears as a current incident.
423
+ **Remediation**: Set an event TTL of 24–72 hours on the mobile offline queue. Drop events that exceed the TTL before upload, not after. Log dropped event counts as a metric for monitoring queue health.
424
+ **See also**: `layers/L7-application/mobile-rum.md §3 Offline-First Queuing`
425
+
426
+ ### G.7 No release marker for crash correlation on mobile
427
+
428
+ **Severity**: MEDIUM
429
+ **Why it fails**: Without `service.version` set on every crash event and without a release marker event at deploy time, a crash rate spike cannot be attributed to a specific app version. Investigation requires manual version comparison across crash groups.
430
+ **Remediation**: Set `service.version` as a custom key on every crash report. Automate release marker events at submission time. Use the release marker to draw vertical lines on CFR trend charts for before/after comparison.
431
+ **See also**: `layers/L7-application/crash-analytics.md §4 Release Tracking Integration`
432
+
433
+ ---
434
+
435
+ ## H: Network / BGP / Clock
436
+
437
+ ### H.1 NTP drift left unmonitored
438
+
439
+ **Severity**: HIGH
440
+ **Why it fails**: Distributed traces depend on synchronized clocks. When two nodes diverge by more than 100 ms, waterfall charts show child spans starting before their parent; engineers chase phantom race conditions instead of real bugs. MTTR increases by hours.
441
+ **Remediation**: Emit `node_clock_drift_ms` from every host (chrony textfile collector or node exporter). Alert when drift exceeds 100 ms for 5 minutes. Run `chronyc makestep` to force resync. For financial / telco workloads requiring sub-ms precision, use PTP (IEEE 1588).
442
+ **See also**: `standards.md §6 Clock Discipline`, `meta-observability.md §Section B`
443
+
444
+ ### H.2 Own-ASN BGP hijack left unmonitored
445
+
446
+ **Severity**: HIGH
447
+ **Why it fails**: A BGP prefix hijack diverts traffic to a rogue AS, which may cause a complete outage or a silent man-in-the-middle attack. Without MOAS detection, hijacks go undetected for hours or days while traffic is silently stolen.
448
+ **Remediation**: Deploy BGPalerter or ARTEMIS with MOAS detection for your ASN prefixes. Subscribe to Cloudflare Radar alerts for your prefixes. Validate RPKI ROA records at your RIR and enable ROV enforcement on border routers.
449
+ **See also**: `layers/L3-network.md §6.4 Security Observability`
450
+
451
+ ### H.3 PMTUD black hole left uncorrected
452
+
453
+ **Severity**: HIGH
454
+ **Why it fails**: When firewalls block ICMP Type 3 Code 4 ("Fragmentation Needed"), PMTUD fails silently. Large TCP transfers stall while health checks (small packets) pass; masking the problem. Services appear healthy in monitors while bulk data transfers time out.
455
+ **Remediation**: Enable MSS clamping at VPN/tunnel endpoints. Allow ICMP Type 3 Code 4 through security groups. Verify the fix with `ping -M do -s 1472 <destination>`. Cross-reference UDP MTU constraints for StatsD pipelines.
456
+ **See also**: `layers/L3-network.md §4 PMTUD`, `transport/udp-statsd-mtu.md §2`
457
+
458
+ ### H.4 RPKI-ROV not configured on advertised prefixes
459
+
460
+ **Severity**: HIGH
461
+ **Why it fails**: An IP prefix announced without a valid RPKI ROA record is marked "Not Found" by downstream validators; not "Invalid", but also not cryptographically anchored. Rogue AS announcements for your prefix are undetectable by validators, increasing hijack risk.
462
+ **Remediation**: Create ROA records at your RIR (ARIN, RIPE NCC, APNIC) for all advertised prefixes. Enable ROV enforcement on border routers to drop or de-prefer RPKI Invalid routes.
463
+ **See also**: `layers/L3-network.md §6.4 RPKI-ROV`
464
+
465
+ ### H.5 Connection pool observability absent
466
+
467
+ **Severity**: HIGH
468
+ **Why it fails**: Pool queue saturation causes application latency spikes that are invisible in TCP metrics alone. Neither retransmit rate nor error rate spikes until connection timeouts fire; engineers investigate network issues while the actual problem is a saturated database pool.
469
+ **Remediation**: Instrument connection pool size, wait time, and timeout counters at the application layer (not only at the TCP layer). Alert on pool utilization > 80% before timeouts occur.
470
+ **See also**: `layers/L4-transport.md §3.3 Common Pitfalls`
471
+
472
+ ### H.6 QUIC adoption without HTTP/3 trace tooling validation
473
+
474
+ **Severity**: HIGH
475
+ **Why it fails**: Enabling QUIC without verifying that OTel SDKs emit `network.transport: quic` and `network.protocol.version: "3"` creates a transport-layer blind spot. UDP-based QUIC flows are invisible in TCP metrics (`/proc/net/tcp`), leaving L4 observability dark.
476
+ **Remediation**: Add a canary assertion in staging: verify `network.transport: quic` appears in spans and that Envoy access logs show QUIC connection IDs. Confirm tooling (Beyla QUIC uprobe) before production rollout.
477
+ **See also**: `layers/L4-transport.md §7 QUIC / HTTP3 Transport Semantics`
478
+
479
+ ### H.7 eBPF agent deployed without kernel/capability preflight
480
+
481
+ **Severity**: HIGH
482
+ **Why it fails**: Beyla or Pixie DaemonSets on incompatible kernels (< 4.14) or without CAP_BPF fail silently, providing no operator-visible error or metric. The observability gap is discovered only during an incident.
483
+ **Remediation**: Add an `initContainer` that asserts kernel version (`uname -r >= 4.14`) and CAP_BPF presence. Exit non-zero if requirements are unmet. This surfaces the incompatibility during deployment, not during an incident.
484
+ **See also**: `layers/L4-transport.md §5.2 Kernel and Privilege Requirements`
485
+
486
+ ---
487
+
488
+ ## I: As-Code & GitOps
489
+
490
+ ### I.1 Production dashboards edited directly in UI
491
+
492
+ **Severity**: HIGH
493
+ **Why it fails**: UI-edited dashboards have no version history, no rollback path, no peer review, and no audit trail. SOC 2 change-management controls require an audit-traceable change process for detection and response configuration. A dashboard overwritten by mistake cannot be recovered without a backup.
494
+ **Remediation**: Version all dashboards in git using Grafonnet (Jsonnet) or Terraform Grafana provider. Apply via CI/CD only. Gate on PR review and linting (`jsonnetfmt --test`). Treat the git history as the audit trail.
495
+ **See also**: `observability-as-code.md §1 Why Observability-as-Code`
496
+
497
+ ### I.2 Alert thresholds hardcoded per-environment without parameterization
498
+
499
+ **Severity**: MEDIUM
500
+ **Why it fails**: Hardcoded thresholds in per-environment alert YAML files diverge silently over time. Production runs a different error-rate threshold than staging, masking regressions that staging was supposed to catch.
501
+ **Remediation**: Parameterize alert thresholds as Jsonnet or Terraform variables. Derive environment-specific values from a shared defaults map. Apply the same alert code to all environments with environment-scoped variable overrides.
502
+ **See also**: `observability-as-code.md §2 Dashboards-as-Code`
503
+
504
+ ### I.3 SLO definitions stored only in the vendor UI
505
+
506
+ **Severity**: MEDIUM
507
+ **Why it fails**: SLO definitions stored only in Datadog, Grafana Cloud, or Honeycomb UIs are not version-controlled, not peer-reviewed, and cannot be reconstructed after a vendor migration. SLO drift goes undetected.
508
+ **Remediation**: Define SLOs in OpenSLO YAML, committed to git. Apply via sloth or the vendor's Terraform provider. The git commit history is the audit trail for SLO changes.
509
+ **See also**: `observability-as-code.md`, `boundaries/slo.md`
510
+
511
+ ---
512
+
513
+ ## Z: Cross-cutting
514
+
515
+ ### Z.1 `trace_id` missing from log records
516
+
517
+ **Severity**: HIGH
518
+ **Why it fails**: Without `trace_id` and `span_id` on every log record, log-trace join during incident forensics fails. Engineers cannot pivot from a log error to the distributed trace waterfall, adding 15–30 minutes to MTTR per incident.
519
+ **Remediation**: Inject `trace_id` and `span_id` into every log record via the OTel SDK context hook (Python: `structlog`; Java: Logback `OpenTelemetryAppender`; Node.js: `pino-opentelemetry-transport`). Assert in integration tests.
520
+ **See also**: `signals/logs.md §7 Trace ID Injection Rules`, `incident-forensics.md §2.3`
521
+
522
+ ### Z.2 `service.version` missing from resource attributes
523
+
524
+ **Severity**: HIGH
525
+ **Why it fails**: Without `service.version` on every signal, before/after comparison across a release is impossible. Canary analysis, SLO delta calculation, and post-incident release attribution all fail.
526
+ **Remediation**: Set `service.version` on the OTel Resource at SDK initialization. Inject via CI as `OTEL_RESOURCE_ATTRIBUTES=service.version=${GIT_SHA}`. Never set it per-signal; the Resource is the single source.
527
+ **See also**: `incident-forensics.md §2.1 Resource Attributes`, `boundaries/release.md §9`
528
+
529
+ ### Z.3 Pipeline delivery ratio unmonitored
530
+
531
+ **Severity**: HIGH
532
+ **Why it fails**: If the OTel Collector is silently dropping 10% of traces, every SLO dashboard and alert is built on incomplete data. The pipeline degradation is invisible until SLO violations appear; at which point on-call cannot distinguish real incidents from telemetry gaps.
533
+ **Remediation**: Inspect receiver refusals, exporter failures, and queues per pipeline/hop. Use completed synthetic backend-delivery probes for end-to-end checks, accounting for configured sampling/filter expectations. A global sent/accepted ratio is not a loss measure; see `meta-observability.md §A6`.
534
+ **See also**: `meta-observability.md §Section A6`, `meta-observability.md §Section F Alert 1`
535
+
536
+ ### Z.4 Tenant ID absent from multi-tenant telemetry
537
+
538
+ **Severity**: HIGH
539
+ **Why it fails**: In a multi-tenant system, telemetry without `tenant.id` makes per-tenant SLO computation, chargeback, and incident isolation impossible. All tenants are indistinguishable in dashboards; a single noisy tenant can mask SLO violations for the entire fleet.
540
+ **Remediation**: Propagate `tenant.id` via W3C Baggage from the API gateway through all downstream services. Emit it on every span, log record, and metric data point. Apply top-N cap (≤ 1000) when used as a metric label.
541
+ **See also**: `incident-forensics.md §2.3`, `boundaries/multi-tenant.md`
542
+
543
+ ### Z.5 Incident forensics without 6-dimension MRA attributes
544
+
545
+ **Severity**: HIGH
546
+ **Why it fails**: Missing Minimum Required Attributes (`service.name`, `service.namespace`, `service.version`, `deployment.environment`, `cloud.region`, `k8s.pod.name`) break the 6-dimension narrowing flow; Code / Service / Layer / Host / Region / Infra pivots fail silently.
547
+ **Remediation**: Enforce MRA completeness at CI via an OTel attribute coverage gate. Set all resource attributes via `OTEL_RESOURCE_ATTRIBUTES` or the OTel Collector `resource` processor. Validate with `otelcol` debug exporter in staging before production rollout.
548
+ **See also**: `incident-forensics.md §2 Minimum Required Attributes`
549
+
550
+ ### Z.6 Cost dashboard accessible to all engineers without RBAC
551
+
552
+ **Severity**: MEDIUM
553
+ **Why it fails**: Per-tenant cost data reveals revenue tier, contract value, and resource consumption patterns. Exposing this to all engineers violates least-privilege access principles and may constitute a data breach under GDPR if cost data is linked to identifiable customers.
554
+ **Remediation**: Separate cost dashboards by role: Finance sees full cost by tenant; Platform Engineering sees cost by namespace/workload; Application Engineering sees only their own service. Apply Grafana folder permissions or OPA policies.
555
+ **See also**: `signals/cost.md §9 Privacy & Access Control`