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,605 @@
1
+ ---
2
+ otel_spec: "1.x (stable API/SDK)"
3
+ otel_semconv: "1.43.0 (2026-07)"
4
+ ---
5
+
6
+ # Meta-Observability
7
+
8
+ ## Why Meta-Observability
9
+
10
+ "Observing the observer"; if the OTel Collector is silently dropping 10% of traces, every SLO
11
+ dashboard, every alerting rule, and every incident forensics query is built on incomplete data.
12
+ You will not know the pipeline is degraded unless you instrument the pipeline itself.
13
+
14
+ Other files in this skill assume a reliable telemetry pipeline. This file forces you to verify
15
+ that assumption. Four disciplines close the gap:
16
+
17
+ | Discipline | Risk if ignored | Section |
18
+ |---|---|---|
19
+ | Pipeline self-health | Silent data loss, metric gaps, memory crashes | A |
20
+ | Clock skew / NTP | Waterfall charts lie; phantom race conditions chased | B |
21
+ | Cardinality guardrails | TSDB storage explosion, query latency, vendor bill spikes | C |
22
+ | Retention matrix | Compliance violations, over-spend on raw data, data unavailable at audit | D |
23
+
24
+ Cross-cutting failure modes and recovery paths are in Section E. Alert/dashboard scaffolding
25
+ that feeds `resources/observability-as-code.md` is in Section F.
26
+
27
+ ---
28
+
29
+ ## Section A: Pipeline Self-Health
30
+
31
+ ### A1. OTel Collector Self-Metrics
32
+
33
+ The Collector exposes its own telemetry via a Prometheus scrape endpoint (default `:8888/metrics`).
34
+ Enable it explicitly:
35
+
36
+ ```yaml
37
+ # otelcol-config.yaml — telemetry block
38
+ service:
39
+ telemetry:
40
+ metrics:
41
+ level: detailed # normal | detailed | none
42
+ address: 0.0.0.0:8888
43
+ logs:
44
+ level: info
45
+ ```
46
+
47
+ Scrape this endpoint from a separate Prometheus instance (or a second Collector) so that
48
+ Collector failures do not destroy their own observability.
49
+
50
+ ### A2. Key otelcol_* Metrics
51
+
52
+ | Metric | What it measures | Alert threshold |
53
+ |---|---|---|
54
+ | `otelcol_receiver_accepted_spans` | Spans accepted from upstream | Baseline drop > 10% |
55
+ | `otelcol_receiver_refused_spans` | Spans refused (parse failure, queue full) | > 0 sustained for 2m |
56
+ | `otelcol_exporter_sent_spans` | Spans successfully shipped to backend | Baseline drop > 10% |
57
+ | `otelcol_exporter_send_failed_spans` | Export failures (network, auth, rate-limit) | > 1% of sent for 5m |
58
+ | `otelcol_processor_queued_retry_send_queue_length` | Backpressure queue depth | > 80% of queue capacity |
59
+ | `otelcol_process_runtime_heap_alloc_bytes` | Collector heap usage | > 75% of container limit |
60
+ | `otelcol_processor_memory_limiter_refused_spans` | Forced drops due to memory limit | > 0 |
61
+ | `otelcol_processor_memory_limiter_refused_metric_points` | Same, for metrics | > 0 |
62
+ | `otelcol_processor_memory_limiter_refused_log_records` | Same, for logs | > 0 |
63
+
64
+ The same `*_accepted_*`, `*_refused_*`, `*_sent_*`, and `*_send_failed_*` counter families exist
65
+ for metric points (`metric_points`) and log records (`log_records`). Apply identical thresholds.
66
+
67
+ ### A3. Memory Limiter Processor (Required)
68
+
69
+ Add `memory_limiter` as the first processor in every pipeline to prevent OOM crashes:
70
+
71
+ ```yaml
72
+ processors:
73
+ memory_limiter:
74
+ check_interval: 1s
75
+ limit_percentage: 75 # hard limit: refuse new data above 75% heap
76
+ spike_limit_percentage: 20 # headroom for burst above limit_percentage
77
+
78
+ service:
79
+ pipelines:
80
+ traces:
81
+ receivers: [otlp]
82
+ processors: [memory_limiter, batch, ...]
83
+ exporters: [otlp]
84
+ metrics:
85
+ receivers: [otlp, prometheus]
86
+ processors: [memory_limiter, batch, ...]
87
+ exporters: [prometheusremotewrite]
88
+ logs:
89
+ receivers: [otlp, fluentforward]
90
+ processors: [memory_limiter, batch, ...]
91
+ exporters: [loki]
92
+ ```
93
+
94
+ ### A4. Self-Scrape Configuration
95
+
96
+ Scrape Collector self-metrics into the same metrics pipeline so they land in the same TSDB
97
+ alongside application metrics:
98
+
99
+ ```yaml
100
+ receivers:
101
+ prometheus:
102
+ config:
103
+ scrape_configs:
104
+ - job_name: otelcol-self
105
+ scrape_interval: 15s
106
+ static_configs:
107
+ - targets: ["localhost:8888"]
108
+ metric_relabel_configs:
109
+ - source_labels: [__name__]
110
+ regex: otelcol_.*
111
+ action: keep
112
+ ```
113
+
114
+ ### A5. Agent Self-Resource Consumption
115
+
116
+ | Agent | Typical RAM | Typical CPU | Source |
117
+ |---|---|---|---|
118
+ | Fluent Bit | 5–15 MB | < 1% (idle), < 5% (burst) | Fluent Bit 2.x benchmarks |
119
+ | OTel Collector (DaemonSet) | 30–100 MB | < 5% (moderate load) | VictoriaMetrics 2026 benchmark |
120
+ | OTel Collector (gateway) | 100–500 MB | scales with throughput | VictoriaMetrics 2026 benchmark |
121
+
122
+ Collect host-level CPU and memory for agent processes via `hostmetrics` receiver:
123
+
124
+ ```yaml
125
+ receivers:
126
+ hostmetrics:
127
+ collection_interval: 30s
128
+ scrapers:
129
+ process:
130
+ include:
131
+ names: ["otelcol", "fluent-bit"]
132
+ match_type: regexp
133
+ mute_process_name_error: true
134
+ ```
135
+
136
+ Fluent Bit exposes its own Prometheus metrics at `:2020/api/v1/metrics/prometheus`:
137
+
138
+ - `fluentbit_input_records_total`: records ingested per input plugin
139
+ - `fluentbit_output_proc_records_total`: records successfully processed per output plugin
140
+ - `fluentbit_output_errors_total`: output failures
141
+
142
+ ### A6. End-to-End Delivery Checks
143
+
144
+ Do not divide global exporter-sent spans by global receiver-accepted spans to
145
+ estimate delivery. Sampling and filters intentionally remove spans; fan-out and
146
+ multiple Collector hops can count a span several times. Queueing also shifts
147
+ the accounting windows. Diagnose each pipeline/hop separately using receiver
148
+ refusals, exporter failures, queue depth, and expected post-policy volume.
149
+ Collector counters alone do not establish backend ingestion.
150
+
151
+ Implement an end-to-end synthetic probe: send identifiable traces expected to
152
+ be retained under the configured policy, query the selected backend after its
153
+ ingestion deadline, and record each completed check once. The following is a
154
+ **team-implemented metric**, not a Collector default:
155
+ `telemetry_probe_completed_total{pipeline="...",result="delivered|missing"}`.
156
+ Keep pipeline labels bounded and initialize both result counters to zero for
157
+ each pipeline, so an all-missing population still has a delivered=0 series.
158
+ Count only completed checks in both numerator
159
+ and denominator so ingestion lag does not compare different populations.
160
+
161
+ ```promql
162
+ sum by (pipeline) (rate(telemetry_probe_completed_total{result="delivered"}[5m]))
163
+ /
164
+ (sum by (pipeline) (rate(telemetry_probe_completed_total[5m])) > 0)
165
+ ```
166
+
167
+ Set the probe deadline, volume, and threshold for the selected pipeline; 99%
168
+ below is an example target. Verify sampling expectations and query permissions
169
+ before enabling the alert. Missing probe runs need a separate job-health check.
170
+
171
+ ---
172
+
173
+ ## Section B: Clock Skew & NTP Discipline
174
+
175
+ ### B1. Why Trace Waterfalls Lie
176
+
177
+ Distributed traces use wall-clock timestamps from the node where each span is recorded.
178
+ If two nodes have diverging clocks, the waterfall view in any tracing backend will show:
179
+
180
+ - A child span appearing to start before its parent span started.
181
+ - Negative durations on synthetic computed spans.
182
+
183
+ These patterns warrant investigation, not an automatic clock-drift verdict.
184
+ An asynchronous child can legitimately outlive its parent; ending the parent
185
+ does not end its children. Compare measured host offsets and operation semantics
186
+ before attributing suspicious cross-host ordering to clocks.
187
+
188
+ Typical NTP accuracy on well-connected cloud VMs: < 50 ms. On baremetal with good NTP: < 10 ms.
189
+ PTP (IEEE 1588) achieves sub-millisecond accuracy for financial and telco workloads.
190
+
191
+ Reference: `resources/standards.md §Clock Discipline` for the span timestamp validation rule.
192
+
193
+ ### B2. NTP Requirements
194
+
195
+ All host VMs, container hosts, and Kubernetes nodes MUST run a time synchronization daemon:
196
+
197
+ - **Linux (systemd)**: `systemd-timesyncd` (lightweight) or `chrony` (recommended for accuracy)
198
+ - **Kubernetes**: Node time sync is the Linux host's responsibility. The kubelet and containers
199
+ inherit the host clock. The path is: hypervisor NTP → node OS → container runtime → container.
200
+ Confirm this chain with your cloud provider's documentation.
201
+
202
+ Cloud-provider time sources:
203
+
204
+ | Cloud | NTP endpoint | Notes |
205
+ |---|---|---|
206
+ | AWS | `169.254.169.123` (Amazon Time Sync Service) | PTP-backed, link-local; add to `chrony.conf`; verify with `chronyc sources -v` |
207
+ | GCP | `metadata.google.internal` | Internal hypervisor sync. `timedatectl show` only shows daemon state; use `chronyc sources -v` for actual offset |
208
+ | Azure | Hyper-V IC timesync primary; `time.windows.com` external NTP is fallback only | Azure Linux VMs with IC tools use host time. External NTP as a parallel peer can conflict; configure as fallback. Docs: <https://learn.microsoft.com/azure/virtual-machines/linux/time-sync> |
209
+
210
+ For sub-millisecond requirements (financial trading, high-frequency event processing):
211
+ use **PTP (IEEE 1588)** with hardware timestamping. Cloud support varies; AWS supports PTP on
212
+ Nitro instances via the Amazon Time Sync Service; verify availability before committing.
213
+
214
+ ### B3. Span Timestamp Diagnostics
215
+
216
+ Validate each span's own start/end ordering and compare suspicious cross-host
217
+ timestamps with measured NTP/PTP offsets. The Trace API does not require child
218
+ intervals to be contained in parent intervals. Do not emit a clock violation
219
+ merely because a child ends later, and do not use nonexistent OTTL parent-time
220
+ fields as an executable Collector rule. Backend diagnostics need the operation's
221
+ actual synchronous/asynchronous semantics to classify timestamp evidence.
222
+
223
+ Source: <https://opentelemetry.io/docs/specs/otel/trace/api/>.
224
+
225
+ ### B4. chrony Offset Metric
226
+
227
+ Emit `node.clock.drift_ms` from each host using a cron job or node exporter textfile collector:
228
+
229
+ ```bash
230
+ #!/bin/sh
231
+ # /etc/cron.d/chrony-offset — runs every minute
232
+ OFFSET=$(chronyc tracking | awk '/System time/ {gsub(/[^0-9.-]/, "", $4); print $4 * 1000}')
233
+ echo "node_clock_drift_ms $OFFSET" > /var/lib/node_exporter/textfile/chrony_offset.prom
234
+ ```
235
+
236
+ Alert rule (see Section F, Alert 3):
237
+
238
+ ```promql
239
+ node_clock_drift_ms > 100
240
+ ```
241
+
242
+ ---
243
+
244
+ ## Section C: Cardinality Guardrails
245
+
246
+ ### C1. Why Cardinality Matters
247
+
248
+ Every unique label combination in a TSDB (Prometheus, VictoriaMetrics, Thanos, Mimir) creates a
249
+ separate time series. A metric with 3 labels each having 100 values creates 1,000,000 series.
250
+
251
+ Consequences of label explosion:
252
+ - TSDB storage grows quadratically with cardinality.
253
+ - Query latency increases: each query fans out across more series.
254
+ - Vendor bill spikes: SaaS TSDBs charge per active series.
255
+ - Ingestion falls behind; scrape intervals are missed.
256
+
257
+ ### C2. Hard Rules
258
+
259
+ | Label | Rule | Reason |
260
+ |---|---|---|
261
+ | `user.id` | **NEVER** as metric label | Unbounded; one series per user |
262
+ | `request.id` | **NEVER** as metric label | One series per request; instant explosion |
263
+ | `trace.id` | **NEVER** as metric label | One series per trace |
264
+ | `user.email` | **NEVER** as metric label | PII + cardinality double violation |
265
+ | `tenant.id` | Cap at top-N (e.g., top-1000); overflow → label value `"other"` | Bounded set of known tenants |
266
+ | `endpoint` / `route` | Normalize high-cardinality routes: `/users/42` → `/users/_` | URL parameters are unbounded |
267
+ | `url.full` | **NEVER** raw; use `http.route` (normalized) | Query strings are unbounded |
268
+ | `error.message` | **NEVER** as label; use error type/code only | Free-text strings are unbounded |
269
+
270
+ Implement route normalization in the Collector `transform` processor:
271
+
272
+ ```yaml
273
+ processors:
274
+ transform/normalize_routes:
275
+ error_mode: ignore
276
+ metric_statements:
277
+ - context: datapoint
278
+ statements:
279
+ - replace_pattern(attributes["http.route"], "/[0-9]+", "/_")
280
+ - replace_pattern(attributes["http.route"], "/[0-9a-f-]{36}", "/_") # UUID
281
+ ```
282
+
283
+ ### C3. Cardinality Measurement
284
+
285
+ Measure active series per metric name in Prometheus-compatible TSDBs:
286
+
287
+ ```promql
288
+ # Count distinct series for a specific metric
289
+ count(http_request_duration_seconds_bucket) by (job)
290
+
291
+ # Top 10 highest-cardinality metrics in the entire TSDB
292
+ topk(10, count({__name__!=""}) by (__name__))
293
+ ```
294
+
295
+ VictoriaMetrics exposes `/api/v1/status/tsdb` for cardinality breakdown by metric name
296
+ and label value; use this for bulk auditing.
297
+
298
+ OTel metric SDK cardinality limit (Development feature as of SDK 1.x):
299
+
300
+ ```python
301
+ # Python SDK example
302
+ from opentelemetry.sdk.metrics import MeterProvider
303
+ from opentelemetry.sdk.metrics.view import View
304
+
305
+ view = View(
306
+ instrument_name="http_request_duration",
307
+ attribute_keys={"http.request.method", "http.response.status_code", "http.route"}, # explicit allow-list
308
+ )
309
+ provider = MeterProvider(views=[view])
310
+ ```
311
+
312
+ Explicitly allow-listing attributes is the most effective cardinality control.
313
+
314
+ ### C4. Series Budget
315
+
316
+ Set a per-service series budget. The 5,000-series figure below is an illustrative starting baseline; high-throughput services legitimately operate at 20k-100k series. Calibrate to your service's traffic shape and TSDB ingestion cost.
317
+
318
+ ```promql
319
+ # Alert: service approaching cardinality budget (example baseline: 5000 series/service)
320
+ count({job="my-service"}) > 4000
321
+ ```
322
+
323
+ Cardinality explosion is an anti-pattern. See `resources/anti-patterns.md §Section B` for
324
+ the full cardinality anti-pattern list.
325
+
326
+ ---
327
+
328
+ ## Section D: Retention Matrix
329
+
330
+ Retention policy governs how long raw and aggregated data is kept, at what resolution,
331
+ and under what storage class. Failing to set explicit retention leads to either:
332
+ - Over-spend: keeping full-resolution data for years.
333
+ - Compliance violation: flushing audit logs before mandatory retention periods expire.
334
+
335
+ ### D1. Unified Per-Signal Retention Policy
336
+
337
+ | Signal | Raw resolution | Aggregated / downsampled | Archive |
338
+ |---|---|---|---|
339
+ | Metrics | 15d full-res | 90d @ 5m resolution | 2y @ 1h resolution |
340
+ | Logs (operational) | 7d | 30d | 90d |
341
+ | Logs (audit) | Per-class approved schedule | Per-class approved schedule | Tamper protection; WORM if required |
342
+ | Traces (sampled, tail-based) | 30d | N/A | N/A |
343
+ | Traces (full 100% sample) | 3d | N/A | N/A |
344
+ | Profiles | 14d | N/A | N/A |
345
+ | Events | 30d | 90d | N/A |
346
+
347
+ ### D2. Rationale by Signal
348
+
349
+ **Metrics (15d / 90d / 2y)**: Full-resolution metrics are needed for hourly/daily incident
350
+ investigation (15d covers most post-incident reviews). Downsampled 5m aggregates cover quarterly
351
+ business reviews and SLO trend reporting (90d). 1h aggregates for 2y support year-over-year
352
+ capacity planning without raw-data storage cost.
353
+
354
+ **Logs (operational, 7d / 30d / 90d)**: Operational logs (app errors, access logs) are used
355
+ within days of generation. 30d aggregated (e.g., error-count rollups) covers sprint-level
356
+ incident retrospectives. 90d archive is a common compliance floor for operational data.
357
+
358
+ **Logs (audit)**: document the applicable obligation and purpose for each
359
+ record class, then select retention and tamper-protection controls. There is no
360
+ universal seven-year WORM minimum across SOC 2, ISO 27001, PCI DSS, and HIPAA.
361
+ HIPAA's six-year requirement covers required security documentation, not every
362
+ raw audit event. Personal audit data still requires a lawful purpose and
363
+ eligible erasure, subject to GDPR Article 17(3) exceptions such as a legal
364
+ obligation or legal claims. A longer lock is not automatically safer.
365
+ Cross-ref: `signals/audit.md` for evidence-specific retention and integrity.
366
+
367
+ **Traces (sampled, 30d)**: Sampled traces (tail-based, typically 1-10% of production traffic)
368
+ are the primary debugging artifact. 30d covers cross-sprint incident investigations. No
369
+ aggregation applies; traces are point-in-time artifacts, not time-series.
370
+
371
+ **Traces (full 100% sample, 3d)**: 100% sampling is expensive. Keep for 3 days only; long
372
+ enough to cover a release rollout + initial stability period. Use head-based or tail-based
373
+ sampling to reduce to 1-10% thereafter.
374
+
375
+ **Profiles (14d)**: Continuous profiling data (Parca, Pyroscope) is used for performance
376
+ regression detection immediately after a deploy and for on-call debugging. 14d covers
377
+ two sprint cycles. No aggregation standard exists for profiling data yet.
378
+
379
+ **Events (30d / 90d)**: Structured events (deployment markers, feature flag changes, SLO
380
+ breaches) are retained for 30d raw (covers post-release review). Aggregated event counts
381
+ (deploys per day, flag toggles per week) are retained for 90d to support quarterly reviews.
382
+
383
+ ### D3. Storage Class Configuration Example (Loki)
384
+
385
+ ```yaml
386
+ # loki-config.yaml — example retention per stream selector
387
+ # NOTE: table_manager was removed in Loki 3.x. For Loki 3+, configure retention
388
+ # via compactor only. The block below applies to Loki 2.8-2.9 legacy.
389
+
390
+ # Legacy (Loki 2.x): table_manager
391
+ table_manager:
392
+ retention_deletes_enabled: true
393
+ retention_period: 720h # default 30d
394
+
395
+ # Per-stream retention via compactor (Loki 2.8+ and required on Loki 3.x)
396
+ compactor:
397
+ retention_enabled: true
398
+ retention_delete_delay: 2h
399
+
400
+ # Stream-level policy in ruler or via label matchers:
401
+ # {log_type="audit"} → approved per-class period, with hold/erasure rules
402
+ # {log_type="operational"} → 2160h (90d)
403
+ # {log_type="debug"} → 168h (7d)
404
+ ```
405
+
406
+ Cross-ref: `signals/audit.md` for WORM immutable storage configuration (S3 Object Lock,
407
+ GCS Object Hold, Azure Immutable Blob Storage). Cross-ref: `signals/privacy.md` for
408
+ GDPR Article 5(1)(e) storage limitation (data not kept longer than necessary for the purpose).
409
+
410
+ ---
411
+
412
+ ## Section E: Pipeline Failure Modes
413
+
414
+ | Failure mode | Symptom | Remediation |
415
+ |---|---|---|
416
+ | Upstream receiver overflow | `otelcol_receiver_refused_*` rising; `send_queue_length` climbing | Add `memory_limiter` processor; scale gateway Collector replicas horizontally |
417
+ | Exporter backpressure | `otelcol_processor_queued_retry_send_queue_length` rising; `send_failed_*` incrementing | Check vendor rate limits; tune exporter `retry_on_failure` with exponential backoff; reduce batch size |
418
+ | Clock drift spike | Waterfall inversion; `node_clock_drift_ms > 100` alert fires | Run `chronyc makestep` to force immediate re-sync; for persistent drift, check NTP source reachability; escalate to PTP for sub-ms requirements |
419
+ | Cardinality bomb | TSDB ingestion lag; query timeouts; vendor bill alert | Identify offending metric with `topk(10, count({__name__!=""}) by (__name__))`, add `filter` processor to drop or `transform` to remove offending label |
420
+ | Memory OOM crash | Collector process exits; gap in all signals | `memory_limiter` prevents this if configured; if reached anyway, increase container memory limit or reduce `limit_percentage` |
421
+ | Audit log retention violation | Audit records purged before WORM period | Verify S3/GCS Object Lock policy; confirm `retention_period` in log backend matches 7y; cross-ref `signals/audit.md §WORM` |
422
+
423
+ ### E1. Exporter Retry Configuration
424
+
425
+ ```yaml
426
+ exporters:
427
+ otlp:
428
+ endpoint: backend:4317
429
+ retry_on_failure:
430
+ enabled: true
431
+ initial_interval: 5s
432
+ max_interval: 30s
433
+ max_elapsed_time: 300s # give up after 5 minutes; prevents infinite queue growth
434
+ sending_queue:
435
+ enabled: true
436
+ num_consumers: 10
437
+ queue_size: 1000
438
+ ```
439
+
440
+ ### E2. Filter Processor for Cardinality Drop
441
+
442
+ ```yaml
443
+ processors:
444
+ filter/drop_high_cardinality:
445
+ error_mode: ignore
446
+ metrics:
447
+ datapoint:
448
+ - 'attributes["user.id"] != nil' # drop any datapoint carrying user.id
449
+ - 'attributes["request.id"] != nil' # drop request.id label
450
+ ```
451
+
452
+ Cross-ref: `resources/checklist.md §7 Recovery` for the full recovery procedure checklist.
453
+ Cross-ref: `resources/anti-patterns.md §Section C Pipeline` for pipeline anti-patterns.
454
+
455
+ ---
456
+
457
+ ## Section F: Alerts & Dashboards
458
+
459
+ ### F1. Five Golden Meta-Observability Alerts
460
+
461
+ These five alerts MUST be in place before any other observability alerting is considered
462
+ reliable. Without them, you cannot trust your alerts.
463
+
464
+ **Alert 1; Synthetic pipeline delivery below the selected target**
465
+
466
+ Requires the team-implemented completed-probe metric defined in A6; this is not
467
+ a ratio of default Collector receiver/exporter counters.
468
+
469
+ ```yaml
470
+ # Alert rule entry within a PrometheusRule.spec.groups[].rules[] list
471
+ - alert: TelemetryProbeDeliveryBelowTarget
472
+ expr: |
473
+ (
474
+ sum by (pipeline) (rate(telemetry_probe_completed_total{result="delivered"}[5m]))
475
+ /
476
+ (sum by (pipeline) (rate(telemetry_probe_completed_total[5m])) > 0)
477
+ ) < 0.99
478
+ for: 5m
479
+ labels:
480
+ severity: critical
481
+ annotations:
482
+ summary: "Synthetic telemetry delivery below the selected 99% target"
483
+ description: "Inspect completed probes, configured sampling, backend ingestion, exporter errors, and queues."
484
+ ```
485
+
486
+ **Alert 2; Exporter send failures above 1%**
487
+
488
+ ```promql
489
+ # Ratio of failed exports to sent (any signal)
490
+ (
491
+ sum(rate(otelcol_exporter_send_failed_spans[5m]))
492
+ /
493
+ (sum(rate(otelcol_exporter_sent_spans[5m])) > 0)
494
+ ) > 0.01
495
+ ```
496
+
497
+ ```yaml
498
+ - alert: OtelcolExporterSendFailed
499
+ expr: |
500
+ (
501
+ sum(rate(otelcol_exporter_send_failed_spans[5m]))
502
+ /
503
+ (sum(rate(otelcol_exporter_sent_spans[5m])) > 0)
504
+ ) > 0.01
505
+ for: 5m
506
+ labels:
507
+ severity: warning
508
+ annotations:
509
+ summary: "OTel Collector exporter failures above 1%"
510
+ description: "Check vendor rate limits, network connectivity, and exporter authentication."
511
+ ```
512
+
513
+ **Alert 3; Node clock drift above 100 ms**
514
+
515
+ ```yaml
516
+ - alert: NodeClockDriftHigh
517
+ expr: node_clock_drift_ms > 100
518
+ for: 5m
519
+ labels:
520
+ severity: warning
521
+ annotations:
522
+ summary: "Node clock drift exceeds 100ms on {{ $labels.instance }}"
523
+ description: "Trace waterfall ordering may be unreliable. Run chronyc makestep or check NTP source."
524
+ ```
525
+
526
+ **Alert 4; Service approaching cardinality budget**
527
+
528
+ ```yaml
529
+ - alert: MetricCardinalityBudgetExceeded
530
+ expr: count({job=~".+"}) by (job) > 4000
531
+ for: 10m
532
+ labels:
533
+ severity: warning
534
+ annotations:
535
+ summary: "{{ $labels.job }} exceeds 80% of 5000-series cardinality budget"
536
+ description: "Identify high-cardinality labels with topk(10, count({job='{{ $labels.job }}'}) by (__name__)). Apply attribute filter."
537
+ ```
538
+
539
+ **Alert 5; Audit log retention policy violation**
540
+
541
+ This alert cannot be expressed in PromQL alone; implement it as a scheduled policy check in
542
+ your compliance tooling. The metric below must be implemented by that job;
543
+ it is not automatically emitted by a storage backend or Collector. Check
544
+ both premature expiry and unjustified over-retention against the approved
545
+ record-class policy, and monitor job freshness separately:
546
+
547
+ ```yaml
548
+ - alert: AuditLogRetentionViolation
549
+ expr: audit_log_retention_compliant{log_type="audit"} == 0 # custom policy-check job: 1=compliant, 0=violation
550
+ for: 1h
551
+ labels:
552
+ severity: critical
553
+ annotations:
554
+ summary: "Audit retention violates the approved record-class policy"
555
+ description: "Check the applicable schedule, lock/lifecycle controls, eligible erasure, and legal holds. Cross-ref signals/audit.md."
556
+ ```
557
+
558
+ ### F2. Grafana Dashboard Blueprint
559
+
560
+ A meta-observability Grafana dashboard MUST include the following panels:
561
+
562
+ | Panel | Query summary | Visualization |
563
+ |---|---|---|
564
+ | Pipeline delivery ratio (traces) | `sent / accepted` rate | Stat (green > 99%, red < 99%) |
565
+ | Pipeline delivery ratio (metrics) | same for metric_points | Stat |
566
+ | Pipeline delivery ratio (logs) | same for log_records | Stat |
567
+ | Receiver accepted vs refused | `rate(accepted)` and `rate(refused)` | Time series |
568
+ | Exporter sent vs failed | `rate(sent)` and `rate(failed)` | Time series |
569
+ | Queue depth | `send_queue_length` per exporter | Gauge |
570
+ | Collector heap usage | `heap_alloc_bytes` vs limit | Gauge |
571
+ | Node clock drift (all hosts) | `node_clock_drift_ms` | Heatmap by instance |
572
+ | Top cardinality metrics | `topk(10, count(...) by (__name__))` | Table (auto-refresh 5m) |
573
+ | Fluent Bit input vs output records | `fluentbit_input_records_total` vs `fluentbit_output_proc_records_total` | Time series |
574
+
575
+ The full Jsonnet/YAML implementation of this dashboard belongs in `resources/observability-as-code.md`
576
+ (Grafana-as-code section). This section provides the blueprint; that file provides the code.
577
+
578
+ ---
579
+
580
+ ## Cross-References
581
+
582
+ | Topic | File |
583
+ |---|---|
584
+ | Clock discipline normative requirements | `resources/standards.md §Clock Discipline` |
585
+ | WORM immutable storage for audit logs | `signals/audit.md` |
586
+ | GDPR storage limitation (Art. 5(1)(e)) | `signals/privacy.md` |
587
+ | Cardinality anti-patterns (Section B) | `resources/anti-patterns.md` |
588
+ | Pipeline anti-patterns (Section C) | `resources/anti-patterns.md` |
589
+ | Recovery checklist (§7) | `resources/checklist.md` |
590
+ | Dashboard/alert as code | `resources/observability-as-code.md` |
591
+ | Two-tier Collector topology | `transport/collector-topology.md` |
592
+ | Tail-based sampling configuration | `transport/sampling-recipes.md` |
593
+ | SLO burn-rate alerts | `boundaries/slo.md` |
594
+ | Incident forensics (6-dimension localization) | `resources/incident-forensics.md` |
595
+
596
+ ---
597
+
598
+ ## Review and Maintenance
599
+
600
+ - **Review triggers**: same as `resources/standards.md` (no scheduled cadence; see `SKILL.md` §Versioning & Deprecation).
601
+ - On OTel Collector minor version bump: verify `otelcol_*` metric names have not changed.
602
+ Metric names are stable within a major version but have changed between 0.x and 1.x.
603
+ - On cloud provider NTP endpoint changes: update Section B2 table.
604
+ - On TSDB migration (e.g., Prometheus → VictoriaMetrics): verify cardinality query syntax
605
+ in Section C3; VictoriaMetrics uses `/api/v1/status/tsdb` instead of PromQL cardinality queries.