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,351 @@
1
+ ---
2
+ otel_semconv: "1.43.0 (2026-07); GDPR: 2016/679; PIPA: 2023 amendment"
3
+ ---
4
+
5
+ # Privacy in Telemetry
6
+
7
+ ## 1. Scope and Distinction from Audit
8
+
9
+ **Privacy** answers: *what personal data flows through telemetry, and how do we minimize, redact, or anonymize it?*
10
+
11
+ **Audit** answers: *what actions occurred, who performed them, and can we prove it?*
12
+
13
+ These are architecturally opposite concerns. See Design Decision D5 for the split rationale.
14
+
15
+ | Dimension | Privacy | Audit |
16
+ |-----------|---------|-------|
17
+ | Goal | Collect less, protect subjects | Prove what happened |
18
+ | Mutability | Supports deletion (right to erasure) | Immutable, append-only |
19
+ | Retention | Short raw tier; long anonymized tier | Long-term (7–10 years typical) |
20
+ | Consumer | DPO, privacy engineers, legal | Security ops, compliance, auditors |
21
+ | Regulation driver | GDPR Art. 5, Art. 17; PIPA § 21 | SOX, PCI-DSS, ISO/IEC 27001 |
22
+
23
+ **D5 Split rationale.** Merging privacy and audit into a single signal pipeline produces conflicting retention policies (erasure vs. immutability), access control models (broad deletion rights vs. tamper-evident storage), and regulatory obligations. Separating them lets each pipeline satisfy its own obligations without compromise. Cross-references between the two are explicit rather than implicit (see §9 and `audit.md`).
24
+
25
+ Primary consumers of this file: Data Protection Officers (DPO), privacy engineers, legal counsel.
26
+
27
+ ---
28
+
29
+ ## 2. Regulatory Drivers
30
+
31
+ | Regulation | Jurisdiction | Key Articles / Principles | Max Penalty |
32
+ |------------|-------------|--------------------------|-------------|
33
+ | GDPR | EU / EEA | Art. 5(1)(c) minimization; Art. 5(1)(e) storage limitation; Art. 17 erasure; Art. 32 security | 4% global annual turnover |
34
+ | PIPA | South Korea | § 3 minimization; § 21 destruction; § 29 safety measures; separate sensitive data consent | KRW 300M or 3% revenue |
35
+ | CCPA / CPRA | California, US | Opt-out of sale; right to delete; sensitive PI category | USD 7,500 per intentional violation |
36
+ | HIPAA | United States | PHI definition; minimum necessary standard; breach notification | USD 100–50,000 per violation |
37
+ | PIPEDA | Canada | Fair information principles; breach of security safeguards | CAD 100,000 per violation |
38
+ | LGPD | Brazil | Art. 6 finality + necessity; Art. 18 erasure rights | 2% Brazil revenue, max BRL 50M |
39
+
40
+ **Misclassification risk.** Treating identifiable pseudonymized data as anonymous can cause applicable GDPR duties to be missed. A theoretical maximum fine is not evidence that a particular misclassification received that penalty. Assess reasonable identification using §3.
41
+
42
+ ---
43
+
44
+ ## 3. Anonymization vs Pseudonymization vs Tokenization
45
+
46
+ Assess whether a person can reasonably be identified, directly or indirectly, using this data and other available information. GDPR Recital 26 considers means likely to be used by the controller or another person, including singling out; inability to recover the original value alone does not establish anonymity.
47
+
48
+ | Technique | Identification/linkage assessment | GDPR Applies? | Typical Tooling |
49
+ |-----------|-------------|---------------|-----------------|
50
+ | Anonymization | No reasonable identification, including linkage to other available data | No, only when that assessment is met | Evaluated aggregation, generalization, or privacy-preserving methods |
51
+ | Pseudonymization | Additional information or other reasonably available means may re-identify | Yes | HMAC with separately held key, format-preserving encryption (FPE), AES-FF1 |
52
+ | Tokenization | Vault lookup can link the token to the person | Yes | Payment token vaults, HSM-backed services |
53
+ | Hashing (no salt, low entropy) | Enumeration/linkage can identify despite one-way hashing | Yes when reasonably identifiable | SHA-256 without salt on numeric IDs |
54
+
55
+ **Decision rule.** Evaluate reasonable re-identification, linkage, and singling-out risks and record the assumptions. Treat the result as personal data if identification remains reasonably possible or the assessment is unresolved. A stable hash or deletion of a local lookup key does not by itself prove anonymity.
56
+
57
+ **Key separation.** Keep additional identifying information and keys separately with independent access controls. Art. 32 requires security measures appropriate to risk; it does not mandate a different geographic region. Select the storage/access boundary according to the threat model, residency policy, and applicable transfer requirements.
58
+
59
+ ---
60
+
61
+ ## 4. Common PII in Telemetry
62
+
63
+ | PII Category | Where It Appears in Telemetry | OTel Semconv Attribute |
64
+ |-------------|------------------------------|------------------------|
65
+ | IP address | HTTP server spans, logs, network metrics | `client.address`, `network.peer.address` |
66
+ | User ID | Span attributes, baggage, log body | `enduser.id` (deprecated → `user.id`) |
67
+ | Email, name, phone | Log body, error traces, baggage | None; must not be added |
68
+ | Session token / cookie | HTTP headers, span attributes | `http.request.header.*` |
69
+ | Browser user-agent | HTTP server spans | `user_agent.original` |
70
+ | Geolocation | IP-derived enrichment, custom attrs | `geo.city`, `geo.country_iso_code` |
71
+ | Query string parameters | URL full string | `url.full`, `url.query` |
72
+ | Stack trace with user data | Exception events | `exception.stacktrace` |
73
+ | Request body on error | Trace event attributes | Custom; avoid entirely |
74
+ | Baggage values | W3C Baggage header, propagated downstream | See `../boundaries/cross-application.md §Baggage rules` |
75
+
76
+ Baggage is especially dangerous: values propagate across service boundaries and can be logged or traced by any downstream collector. Apply trust-boundary filters before injecting user-derived values into baggage.
77
+
78
+ ---
79
+
80
+ ## 5. PII Handling Rules by Field
81
+
82
+ | Field | Required Action | Technique |
83
+ |-------|----------------|-----------|
84
+ | IPv4 address | Mask last octet (`192.0.2.0`) or drop | Truncation / drop |
85
+ | IPv6 address | Mask last 80 bits or drop | Truncation / drop |
86
+ | Email address | Drop local part (`***@example.com`) or drop entirely | Redaction |
87
+ | User ID (internal) | Salted HMAC with vault-managed key | Pseudonymization |
88
+ | Card number, SSN | Drop entirely; never collect | Drop |
89
+ | Phone number | Drop entirely | Drop |
90
+ | Session token, password, `Authorization` header | Drop entirely | Drop |
91
+ | Timestamp (high-resolution) | Truncate to minute (metrics) or hour (logs) depending on aggregation tier | Generalization |
92
+ | Geolocation (precise) | Truncate to city or region | Generalization |
93
+ | User-agent string | Keep major browser family only, or drop | Generalization / drop |
94
+ | Query string | Drop or allowlist known safe params | Drop / allowlist |
95
+ | Request body | Drop on error traces; never capture by default | Drop |
96
+
97
+ ---
98
+
99
+ ## 6. OTel Collector Processors for Redaction
100
+
101
+ Use a layered pipeline: **attributes** (known PII keys) → **transform/OTTL** (pattern-based) → **redaction** (safety-net allowlist) → storage.
102
+
103
+ ### 6.1 `attributes` Processor: Named Key Actions
104
+
105
+ ```yaml
106
+ processors:
107
+ attributes/minimize:
108
+ actions:
109
+ - key: user.email
110
+ action: delete
111
+ - key: user.id
112
+ action: hash
113
+ - key: http.request.header.authorization
114
+ action: delete
115
+ - key: http.request.header.cookie
116
+ action: delete
117
+ - key: url.query
118
+ action: delete
119
+ ```
120
+
121
+ > **Warning on `action: hash`**: the Collector's built-in `hash` action does not apply a salt. For low-entropy inputs such as numeric user IDs, an unsalted hash is reversible by brute force and is treated as pseudonymization (not anonymization) under GDPR. See §8 for salted-hash alternatives at the SDK layer.
122
+
123
+ ### 6.2 `transform` Processor (OTTL): Pattern-Based Transformation
124
+
125
+ ```yaml
126
+ processors:
127
+ transform/ip_mask:
128
+ error_mode: ignore
129
+ trace_statements:
130
+ - context: span
131
+ statements:
132
+ # IPv4: replace last octet with .0
133
+ - replace_pattern(attributes["client.address"], "\\.\\d+$", ".0")
134
+ # Drop precise geolocation
135
+ - delete_key(attributes, "geo.coordinates")
136
+ # Truncate email to domain only
137
+ - replace_pattern(attributes["user.email"], "^[^@]+", "***")
138
+ ```
139
+
140
+ ### 6.3 `redaction` Processor: Allowlist Safety Net
141
+
142
+ ```yaml
143
+ processors:
144
+ redaction/allowlist:
145
+ allow_all_keys: false
146
+ allowed_keys:
147
+ - http.request.method
148
+ - http.response.status_code
149
+ - http.route
150
+ - service.name
151
+ - trace.id
152
+ - span.id
153
+ - db.system
154
+ - rpc.system.name
155
+ blocked_values:
156
+ - "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b" # email pattern
157
+ - "\\b(?:\\d[ -]?){13,16}\\b" # card number pattern
158
+ summary: debug
159
+ ```
160
+
161
+ ### 6.4 Pipeline Assembly
162
+
163
+ ```yaml
164
+ service:
165
+ pipelines:
166
+ traces:
167
+ receivers: [otlp]
168
+ processors:
169
+ - attributes/minimize
170
+ - transform/ip_mask
171
+ - redaction/allowlist
172
+ - batch
173
+ exporters: [otlp/backend]
174
+ ```
175
+
176
+ ---
177
+
178
+ ## 7. SDK-Layer Redaction (Prefer over Pipeline)
179
+
180
+ Redacting at the instrumentation layer is always preferable: PII never enters the pipeline or wire.
181
+
182
+ | SDK / Tool | Mechanism |
183
+ |------------|-----------|
184
+ | OTel SDK (all languages) | Attribute processor on `TracerProvider` at construction time |
185
+ | Sentry | `before_send` / `before_send_transaction` callbacks |
186
+ | Datadog | `before_send` callback; `obfuscation_config` in agent |
187
+ | OpenTelemetry JS/Python | `SpanProcessor` with custom `onStart` / `onEnd` |
188
+
189
+ **Rule.** SDK-layer redaction is the first line of defense. Collector processors are the second line. Treat collector processors as a safety net, not the primary mechanism.
190
+
191
+ ---
192
+
193
+ ## 8. Salted Hashing Caveats
194
+
195
+ OTel Collector's built-in `hash` action uses SHA-256 **without salt**. On low-entropy inputs (numeric user IDs, 6-digit codes), this is reversible via brute-force rainbow tables.
196
+
197
+ **Requirements for safe pseudonymization:**
198
+
199
+ 1. Apply salt using a vault-managed key (e.g., HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager).
200
+ 2. Store the key in an independently access-controlled vault separated from telemetry access. Geographic separation is an optional risk-based design choice, subject to residency and transfer requirements.
201
+ 3. Rotate the salt on a defined schedule (quarterly recommended); document rotation in the key management policy.
202
+ 4. Use HMAC-SHA256 with the salt, not bare SHA-256.
203
+ 5. Because the Collector `hash` action cannot inject vault-managed salts, perform HMAC at the **SDK layer** before emitting spans.
204
+
205
+ ```python
206
+ # SDK-layer HMAC pseudonymization (Python example)
207
+ import hmac, hashlib, os
208
+
209
+ def pseudonymize_user_id(user_id: str, vault_key: bytes) -> str:
210
+ return hmac.new(vault_key, user_id.encode(), hashlib.sha256).hexdigest()
211
+ ```
212
+
213
+ ---
214
+
215
+ ## 9. Retention and Right to Erasure (GDPR Art. 17)
216
+
217
+ | Tier | Content | Max Retention | Erasure Support |
218
+ |------|---------|---------------|-----------------|
219
+ | Raw (with PII) | Full spans, logs, unredacted | Example: purpose-justified 7 days | Delete eligible records after checking grounds/exceptions |
220
+ | Redacted short | Direct identifiers removed; assess remaining linkage | Example: 30 days | Required when remaining data is personal and an erasure ground applies |
221
+ | Anonymized long | Data assessed as no longer reasonably identifiable | Purpose-defined period | GDPR erasure does not apply only when the anonymity assessment is met |
222
+ | Audit events | Access/action evidence, minimized for its purpose | Applicable law/contract and purpose-specific schedule | Assess erasure grounds and documented legal-retention/legal-claim exceptions |
223
+
224
+ Erasure pipeline: request → verify identity and the applicable erasure ground → identify personal records across relevant tiers → check documented retention/legal-claim exceptions → delete eligible records under the approved schedule → record the action and justified exceptions. Audit records do not have a blanket exemption.
225
+
226
+ Cross-reference: `../meta-observability.md §Retention Matrix` for full retention policy. Cross-reference: `audit.md` for erasure audit trail requirements.
227
+
228
+ ---
229
+
230
+ ## 10. Cross-Border Transfer
231
+
232
+ GDPR Chapter V prohibits transfer of personal data to non-adequate countries without a legal mechanism.
233
+
234
+ | Mechanism | When to Use |
235
+ |-----------|-------------|
236
+ | Standard Contractual Clauses (SCC) | EU → US, EU → most non-adequate countries |
237
+ | Binding Corporate Rules (BCR) | Intra-group transfers |
238
+ | Adequacy decision | EU → UK, Japan, Canada (PIPEDA), South Korea (partial) |
239
+ | PIPA § 17 | KR → non-KR: contractual safeguards + PIPC notification |
240
+
241
+ **Collector routing for regional compliance.**
242
+
243
+ ```yaml
244
+ # Route EU telemetry to EU backend, KR to KR backend
245
+ connectors:
246
+ routing:
247
+ default_pipelines: [traces/global]
248
+ table:
249
+ - statement: attributes["deployment.region"] == "eu-west-1"
250
+ pipelines: [traces/eu]
251
+ - statement: attributes["deployment.region"] == "ap-northeast-2"
252
+ pipelines: [traces/kr]
253
+ ```
254
+
255
+ Cross-reference: `../transport/collector-topology.md §Multi-cluster + regional`.
256
+
257
+ ---
258
+
259
+ ## 11. TLS Context Attributes (L6 Development Status)
260
+
261
+ OTel `tls.*` semantic conventions are **Development** stability tier as of semconv 1.43.0 (verified 2026-07). See `../standards.md` for stability tier definitions.
262
+
263
+ | Attribute | Type | Use Case |
264
+ |-----------|------|----------|
265
+ | `tls.protocol.version` | string | Detect TLS 1.0/1.1 downgrade attacks |
266
+ | `tls.cipher` | string | Flag weak ciphers (RC4, DES, 3DES) |
267
+ | `tls.established` | boolean | Alert on handshake failures |
268
+ | `tls.resumed` | boolean | Session resumption analysis |
269
+ | `tls.server.certificate.expiry` | int (epoch) | Certificate expiry alerting |
270
+
271
+ **Scope boundary.** These attributes provide *security context* for observability purposes (downgrade detection, cert expiry alerting). Full TLS inspection (decrypting payload for content analysis) is out of scope; use dedicated network inspection tooling.
272
+
273
+ **Privacy note.** TLS cipher and protocol version are not PII. Certificate subject fields (CN, SAN) may contain hostnames; do not log end-user certificate subjects from mTLS without legal basis.
274
+
275
+ ---
276
+
277
+ ## 12. Backend Access Control (RBAC on Observability Data)
278
+
279
+ Production traces and logs containing even pseudonymized data are sensitive. Access must be role-gated.
280
+
281
+ | Role | Scope | Time Range | Example Tools |
282
+ |------|-------|-----------|---------------|
283
+ | On-call engineer | Own service traces + logs | Last 24h | Grafana folder permission |
284
+ | Incident responder | Cross-service traces | Incident window | Datadog Teams, Honeycomb environments |
285
+ | Security analyst | All services, security events | 30 days | Separate security-tier datasource |
286
+ | Auditor | Audit events only (see `audit.md`) | Full retention | Read-only audit index |
287
+ | Finance | Cost metrics only | 90 days | See `cost.md` |
288
+ | DPO / Privacy engineer | Redaction pipeline config, raw tier | Short window only | Separate admin role |
289
+
290
+ **Environment isolation.** Production backends must be strictly separated from non-production. Never allow dev/staging pipelines to receive or store production telemetry; this is a direct PII leak path.
291
+
292
+ Vendor-specific RBAC: Grafana folder permissions + team sync; Datadog Teams with scoped monitors; Honeycomb environments with team-scoped API keys.
293
+
294
+ ---
295
+
296
+ ## 13. Third-Party Processor Obligations (GDPR Art. 28)
297
+
298
+ Observability vendors receiving telemetry containing personal data are **data processors** under GDPR. A Data Processing Agreement (DPA) is mandatory before routing data to them.
299
+
300
+ | Obligation | Action Required |
301
+ |------------|----------------|
302
+ | DPA in place | Signed before any data flows to vendor |
303
+ | Sub-processor transparency | Vendor must disclose and notify of sub-processor changes |
304
+ | Data residency | Confirm vendor's storage region matches your compliance obligations |
305
+ | Deletion / return | Vendor must support data deletion on contract termination |
306
+
307
+ Common vendors requiring DPA review: Datadog, Honeycomb, Grafana Cloud, Sentry, New Relic, Elastic Cloud. Each vendor publishes a DPA at their legal/privacy page. Reference your legal team's approved vendor list before routing production data.
308
+
309
+ ---
310
+
311
+ ## 14. Matrix Coverage Notes
312
+
313
+ The following cells in `../matrix.md` have privacy-specific guidance from this file:
314
+
315
+ | Layer × Boundary | Privacy Status | Notes |
316
+ |-----------------|---------------|-------|
317
+ | L3 (Network) × any | Warning | IP addresses are GDPR Art. 4(1) personal data identifiers; mask or drop |
318
+ | L4 (Transport) × any | Warning | Connection 5-tuple (src IP, dst IP, ports) can identify individuals |
319
+ | L7 (Application) × multi-tenant | Primary coverage | Per-tenant data minimization; tenant ID must not leak across boundaries |
320
+ | L7 × cross-application | Warning | Baggage crosses trust boundaries; apply filter at ingress (§4) |
321
+ | Release / feature flags × any | Overlap | Feature flag cohort membership may constitute profiling under GDPR Art. 4(4) |
322
+
323
+ ---
324
+
325
+ ## 15. Anti-Patterns
326
+
327
+ > These entries feed into `../anti-patterns.md §Section A Privacy`.
328
+
329
+ | Anti-Pattern | Risk | Remediation |
330
+ |-------------|------|-------------|
331
+ | Claiming anonymity from hashing or local irreversibility alone | Personal data may be misclassified and its safeguards omitted | Apply the re-identification assessment (§3); re-classify and update ROPA |
332
+ | Hash without salt on low-entropy IDs | Rainbow-table reversal; GDPR breach | HMAC-SHA256 with vault-managed salt at SDK layer (§8) |
333
+ | Key and telemetry accessible through the same permissions | One access compromise enables re-identification | Separate vault/IAM and access audit; choose geography under the risk and residency policy |
334
+ | Baggage crossing trust boundary without filter | PII propagated to untrusted downstream collectors | Apply baggage allowlist at service ingress (cross-ref `../boundaries/cross-application.md`) |
335
+ | Observability backend open to all engineers (no RBAC) | PII exposure; compliance failure | Implement role-scoped access per §12 |
336
+ | Routing to 3rd-party vendor without DPA | GDPR Art. 28 violation | Block data flow until DPA is signed (§13) |
337
+ | Capturing raw request body on error trace | Request bodies frequently contain credentials, PII | Drop request body by default; allowlist specific non-sensitive fields at SDK layer (§7) |
338
+ | Cross-region telemetry routing without GDPR mechanism | GDPR Chapter V violation | Implement routing connector per §10; confirm SCC or adequacy decision |
339
+ | OTel Collector `hash` action on production user IDs | Unsalted; brute-force reversible | Migrate to SDK-layer HMAC with vault key (§8) |
340
+ | Logging `user_agent.original` without assessment | User-agent can be a unique identifier for profiling | Generalize to browser family only or drop (§5) |
341
+
342
+ ---
343
+
344
+ ## References
345
+
346
+ - GDPR text: <https://gdpr-info.eu>
347
+ - PIPA (Korean): <https://www.pipc.go.kr>
348
+ - OTel sensitive data handling: <https://opentelemetry.io/docs/security/handling-sensitive-data/>
349
+ - OTel Collector processors: <https://opentelemetry.io/docs/collector/configuration/>
350
+ - W3C Baggage PII warning: <https://www.w3.org/TR/baggage/>
351
+ - Cross-references: `../standards.md`, `../matrix.md`, `../meta-observability.md`, `../boundaries/cross-application.md`, `../transport/collector-topology.md`, `audit.md`, `cost.md`
@@ -0,0 +1,245 @@
1
+ ---
2
+ otel_spec: "1.x (stable API/SDK)"
3
+ otel_semconv: "1.43.0 (2026-07)"
4
+ notes:
5
+ - "Profiles signal (OTEP 0239) is Development-status; semconv in development"
6
+ ---
7
+
8
+ # Profiles Signal
9
+
10
+ > **EXPERIMENTAL; OTEP 0239 Development (as of 2026-Q2)**
11
+ > Continuous profiling tooling (Parca, Pyroscope) is production-ready.
12
+ > The OpenTelemetry profiling data model and OTLP signal are in alpha / active development; semantic conventions and wire format may change without backward compatibility.
13
+ > Do NOT define SLOs against OTel-native profiling attributes. Treat any `profile.*` OTel semconv as experimental tier.
14
+ > Cross-ref: `../standards.md §3 OTel semconv stability` for tier definitions.
15
+
16
+ ---
17
+
18
+ ## 1. Scope
19
+
20
+ Continuous profiling; whole-cluster or whole-service CPU, memory, and allocation sampling running at low, steady overhead in production. Flamegraphs are the primary visualization artifact. The output answers the question "in which function is time or memory being spent?"
21
+
22
+ This file does NOT cover ad-hoc developer profiling sessions (e.g., `go tool pprof http://localhost:6060/debug/pprof/profile` run once during a development investigation). Those are single-use diagnostics. Continuous profiling generates persistent, comparable data over time and is as much a production signal as metrics or logs.
23
+
24
+ ---
25
+
26
+ ## 2. The 5th Pillar: MELT to MELT+P
27
+
28
+ Observability was originally described as three pillars (Metrics, Logs, Traces). Events as LogRecords and cost extended that. Profiles add the fifth pillar.
29
+
30
+ | Signal | Answers |
31
+ |--------|---------|
32
+ | Metrics | What is slow / broken? (rate, error rate, latency quantile) |
33
+ | Traces | Where is it slow? (which service, which span, which dependency) |
34
+ | Profiles | In which function is CPU time or memory spent? (line-level attribution) |
35
+ | Logs | Why, in context? (structured event with variables and error detail) |
36
+ | Cost | What is the financial impact of the above? |
37
+
38
+ Correlation is the mechanism that makes MELT+P actionable rather than five isolated views. Profiles share resource labels (`service.name`, `service.version`, `k8s.pod.name`) with metrics and traces, and can be linked to a specific trace by attaching a `trace_id` label to profile samples; a pattern pioneered by Grafana Tempo + Pyroscope.
39
+
40
+ ---
41
+
42
+ ## 3. Tools Landscape (as of 2026-Q2)
43
+
44
+ Verify live status at <https://landscape.cncf.io>.
45
+
46
+ | Tool | Category | Mechanism | CNCF Status | Notes |
47
+ |------|----------|-----------|-------------|-------|
48
+ | Parca | OSS, continuous | eBPF kernel-level, no agent code | Sandbox | Written in Go; Polar Signals led; whole-cluster, no language SDK required for CPU profiles |
49
+ | Grafana Pyroscope | OSS / SaaS, continuous | Pull + push (eBPF + language SDKs) | Sandbox (verify; CNCF status uncertain post-Grafana Labs acquisition, 2023) | Formerly independent; Grafana acquired 2023; integrated into Grafana stack |
50
+ | Polar Signals Cloud | Commercial SaaS | Parca-based, hosted | N/A | Commercial offering backed by Parca OSS; Polar Signals is the primary Parca maintainer |
51
+ | Go `net/http/pprof` | Language-specific, on-demand | HTTP handler; sample on request | N/A | Built-in; not continuous; heavier per request; MUST NOT be left exposed on production endpoints |
52
+ | Fgprof | Language-specific | Wall-clock profiler for Go | N/A | Supplements `pprof` by measuring off-CPU time as well as on-CPU |
53
+ | py-spy | Language-specific, continuous | Native code (Rust); attaches without code change | N/A | Low overhead; works on CPython; no SDK injection |
54
+ | pyroscope-python | Language-specific, continuous | Python SDK; sends to Pyroscope server | N/A | Requires SDK import; supports async runtimes |
55
+ | async-profiler | JVM, continuous | JVMTI + `perf_events`; async-safe | N/A | Primary choice for JVM profiling; supports CPU, alloc, lock, wall modes |
56
+ | JFR (Java Flight Recorder) | JVM, continuous | JVM-native; available from JDK 11+ | N/A | Enable with JVM flags; low overhead; integrates with async-profiler |
57
+ | `0x` / V8 Inspector | Node.js, on-demand | V8 CPU profiler | N/A | `0x` wraps `node --prof` for flamegraph generation |
58
+ | pyroscope-node | Node.js, continuous | Node SDK; sends to Pyroscope | N/A | Continuous alternative to `0x` |
59
+ | stackprof | Ruby, continuous | Sampling profiler | N/A | Low overhead; supports wall, object, custom modes |
60
+ | php-spx / phpspy | PHP, continuous | Extension (spx) or attach (spy) | N/A | `php-spx` requires extension install; `phpspy` attaches without code change |
61
+ | Beyla / Pixie | eBPF, language-agnostic | eBPF user-space probes | Beyla CNCF Incubating (2024); Pixie CNCF Sandbox | No language integration needed; covers Go, Python, JVM, Node.js for latency profiling |
62
+
63
+ **eBPF unified approach note:** For CPU and off-CPU profiling without language-level SDK integration, Parca, Beyla, and Pixie are the primary choices. They instrument at the kernel/eBPF level, making them language-agnostic for CPU time attribution.
64
+
65
+ ---
66
+
67
+ ## 4. Sampling Overhead
68
+
69
+ Continuous profiling is viable in production only when overhead is provably low.
70
+
71
+ | Tool / Mode | Typical CPU overhead | Sampling rate | Notes |
72
+ |------------|---------------------|---------------|-------|
73
+ | Parca (eBPF) | < 1% CPU | ~19 Hz per CPU core | Kernel-level; process namespaces handled correctly |
74
+ | Pyroscope (eBPF mode) | < 1% CPU | Configurable, default ~100 Hz | Overhead scales with sampling rate; start conservatively |
75
+ | async-profiler (CPU) | < 1% CPU | Configurable; default 100 Hz | AsyncGetCallTrace avoids safe-point bias |
76
+ | JFR (CPU + alloc) | < 1% CPU typical | JVM-managed | Monitor GC pause impact separately |
77
+ | py-spy | < 1% CPU | Configurable; default 100 Hz | External; no Python overhead |
78
+ | `net/http/pprof` | ~5-10% during active profile | On-demand only | Never enable `/debug/pprof` permanently on production endpoints; see anti-patterns |
79
+
80
+ Always measure baseline and profiled CPU utilization in staging before enabling continuous profiling in production. Set a budget threshold (e.g., < 1% CPU) and alert if actual overhead exceeds it.
81
+
82
+ ---
83
+
84
+ ## 5. OTEP 0239: OTel Profiling Signal Data Model
85
+
86
+ Source: <https://github.com/open-telemetry/oteps/blob/main/text/profiles/0239-profiles-data-model.md>
87
+
88
+ Status: **alpha / in active development (2026-Q2)**. The data model, wire format, and semantic conventions are all subject to breaking change.
89
+
90
+ Key design points:
91
+ - Profiles are transmitted as a fourth OTLP signal alongside metrics, traces, and logs. A new `ExportProfilesServiceRequest` protobuf message parallels `ExportMetricsServiceRequest`.
92
+ - The data model derives from the pprof format (Google); a profile is a directed call graph with sample counts per stack frame.
93
+ - Proposed profile types: CPU, Heap, Allocation, Mutex, Lock. Stored in `profile.type` attribute.
94
+ - `profile.name` identifies the profile within a service and collection window.
95
+ - Semantic conventions for profile attributes (e.g., mapping to `service.*`, `k8s.*`, `thread.*`) are in draft. Do not treat them as stable.
96
+
97
+ ```
98
+ # Conceptual OTLP profile payload (pseudocode — not final spec)
99
+ ProfilesData {
100
+ resource_profiles: [
101
+ ResourceProfiles {
102
+ resource: { attributes: [service.name, service.version, k8s.pod.name] }
103
+ scope_profiles: [
104
+ ScopeProfiles {
105
+ profiles: [
106
+ Profile {
107
+ profile_id: <16-byte random>
108
+ start_time_unix_nano: ...
109
+ end_time_unix_nano: ...
110
+ sample_type: [{ type: "cpu", unit: "nanoseconds" }]
111
+ sample: [{ location_id: [...], value: [...], label: [...] }]
112
+ }
113
+ ]
114
+ }
115
+ ]
116
+ }
117
+ ]
118
+ }
119
+ ```
120
+
121
+ Most production deployments (2026-Q2) use Parca's own gRPC API or Pyroscope's push API, not OTLP profiles. OTLP profile support in collectors and backends is experimental. Plan OTLP profile adoption only after the spec reaches RC status.
122
+
123
+ ---
124
+
125
+ ## 6. Use Cases
126
+
127
+ | Use case | Profile type | How to investigate |
128
+ |----------|-------------|-------------------|
129
+ | CPU bottleneck; which function consumes CPU? | CPU | Flamegraph: wide frame = high CPU; sort by self-time |
130
+ | Memory leak; heap growing over time? | Heap | Heap profile over hours; compare allocation counts |
131
+ | Allocation rate; GC pressure? | Allocation | Allocation profile; identify hot allocation sites |
132
+ | Lock contention; threads blocked? | Mutex / Lock | Mutex profile; look for frames holding locks across many samples |
133
+ | Off-CPU; threads blocked on I/O or sleep? | Off-CPU (eBPF) | eBPF off-CPU flamegraph; I/O, syscall, and scheduler frames visible |
134
+
135
+ ---
136
+
137
+ ## 7. Correlation with Traces
138
+
139
+ Profiles are the diagnostic tool you reach for after traces identify which service and span is slow. The linkage mechanism is attaching the current `trace_id` as a label on profile samples.
140
+
141
+ ```
142
+ # Pyroscope Go SDK — attach trace_id to profile (conceptual)
143
+ pyroscope.TagWrapper(ctx, pyroscope.Labels("trace_id", span.SpanContext().TraceID().String()), func() {
144
+ // code under profiling
145
+ })
146
+ ```
147
+
148
+ Grafana Tempo + Pyroscope integration implements this as a first-class UI feature: clicking a slow trace span offers a "View Profile" link that loads the flamegraph for that time window and service.
149
+
150
+ **Limitation:** Profiles are statistical (sampled across all requests). Traces are per-request. The correlation is probabilistic; a trace_id label on a profile sample means that request was running during that sample, not that the sample is causally attributed to that exact request. This is a fundamental constraint of sampling-based profiling; document it clearly when presenting correlation results to stakeholders.
151
+
152
+ ---
153
+
154
+ ## 8. Mobile and Client-Side Profiling
155
+
156
+ Client-side continuous profiling in production is not yet established practice. Platform tools provide opt-in session profiling:
157
+
158
+ | Platform | Tool | Mode | Notes |
159
+ |----------|------|------|-------|
160
+ | iOS | Instruments (Time Profiler, Allocations) | Developer / TestFlight | Requires Xcode; not continuous in App Store builds |
161
+ | Android | Android Studio Profiler (CPU, Memory) | Developer / debug build | Production CPU profiling requires `<profileable>` manifest flag |
162
+
163
+ For production mobile observability, rely on crash analytics and RUM metrics to surface performance regressions. Cross-ref `../layers/L7-application/mobile-rum.md` for mobile RUM patterns and `../layers/L7-application/crash-analytics.md` for crash rate metrics.
164
+
165
+ ---
166
+
167
+ ## 9. Storage Backends
168
+
169
+ | Backend | Primary use | Symbol resolution |
170
+ |---------|------------|-------------------|
171
+ | Parca server | OSS; local or k8s deployment; uses Parquet-backed storage | Upload ELF debug info / DWARF symbols; agent resolves at collection time |
172
+ | Pyroscope OSS | Self-hosted; integrates with Grafana stack | Upload symbol files per build |
173
+ | Grafana Cloud Profiles | Managed Pyroscope; SaaS | Upload symbols via Pyroscope API |
174
+ | Polar Signals Cloud | Managed Parca; SaaS; automatic symbol upload | Symbols uploaded via CI step; no manual resolution needed |
175
+
176
+ Symbol resolution is a critical operational concern. Without debug symbols (or source maps for Node.js), flamegraph frames appear as raw memory addresses or mangled names. Treat symbol upload as a required CI step alongside binary deployment; it has the same relationship to profiles as sourcemaps have to crash analytics.
177
+
178
+ ---
179
+
180
+ ## 10. Privacy and Security
181
+
182
+ Stack traces expose function names, which may reveal proprietary algorithm structure or internal service architecture. This is especially sensitive for multi-tenant SaaS operators.
183
+
184
+ - Apply access control to the profiling backend (Parca server, Pyroscope) equivalent to trace backend access control. Cross-ref `../signals/privacy.md §Backend RBAC`.
185
+ - For multi-tenant deployments, isolate flamegraph access by tenant label. A tenant MUST NOT be able to query another tenant's flamegraph.
186
+ - Function name redaction (stripping internal frames from exported profiles) is technically possible but rare and operationally complex. Consider it only if profile data is shared externally (e.g., vendor support handoff).
187
+
188
+ ---
189
+
190
+ ## 11. Matrix Cells: Profiles Column Summary
191
+
192
+ Cross-ref: `../matrix.md` for full cell detail. Summary for the profiles signal column:
193
+
194
+ | Layer × Boundary | profiles cell | Rationale |
195
+ |-----------------|---------------|-----------|
196
+ | L3 × all | N/A | IP routing has no process-level profiling artifact |
197
+ | L4 × multi-tenant | PASS | eBPF CPU/off-CPU profiling covers socket-level overhead per process |
198
+ | L4 × cross-application | PASS | eBPF off-CPU shows network-wait time between services |
199
+ | L4 × slo | N/A | SLO is application-defined; L4 profiles are diagnostic, not SLO inputs |
200
+ | L4 × release | N/A | Release events are L7 constructs |
201
+ | mesh × all | PARTIAL | Proxy CPU visible via eBPF on sidecar process; not mesh-native |
202
+ | L7 × multi-tenant | PASS | Per-tenant flamegraph via label-based isolation in Parca/Pyroscope |
203
+ | L7 × cross-application | PASS | Application-level profiling with trace_id correlation |
204
+ | L7 × slo | N/A | SLO is computed from metrics; profiles are diagnostic |
205
+ | L7 × release | PARTIAL | Pre/post-release profile diff for performance regression detection |
206
+
207
+ ---
208
+
209
+ ## 12. Anti-Patterns
210
+
211
+ These candidates belong in `../anti-patterns.md` and are flagged here for consolidation.
212
+
213
+ | Anti-pattern | Risk | Mitigation |
214
+ |-------------|------|-----------|
215
+ | Continuous profiling enabled in production without overhead measurement in staging | Unexpected CPU spike > 1%; service degradation | Benchmark overhead in staging first; set alert on profiler CPU budget |
216
+ | Symbol upload missing at deploy time | Flamegraphs show raw addresses or mangled names; engineers cannot act on data | Add symbol upload as a required CI step immediately after binary upload; gate deployment on symbol upload success |
217
+ | `/debug/pprof` endpoint left enabled on production HTTP servers | Exposes CPU/heap profiles and internal function names to any caller who discovers the path; also a denial-of-service vector (profile requests are expensive) | Disable `net/http/pprof` import in production builds, or restrict to internal network behind authentication middleware |
218
+ | Profile labels include high-cardinality dimensions (e.g., `request_id`, `user_id`) | Storage blowup; query performance degradation in Parca/Pyroscope backend | Label with low-cardinality dimensions only: `service.name`, `service.version`, `tenant.id` (for multi-tenant), `environment` |
219
+
220
+ ---
221
+
222
+ ## 13. References
223
+
224
+
225
+ Internal cross-references:
226
+
227
+ - `../standards.md §3`: OTel semconv stability tiers (experimental badge rationale)
228
+ - `../matrix.md`: full 112-cell coverage matrix
229
+ - `../layers/L4-transport.md`: eBPF profiling at socket level
230
+ - `../layers/L7-application/mobile-rum.md`: mobile performance signals
231
+ - `../layers/L7-application/crash-analytics.md`: crash rate and symbolication
232
+ - `../boundaries/multi-tenant.md`: per-tenant label isolation
233
+ - `../boundaries/release.md`: pre/post-release profile comparison
234
+ - `../signals/privacy.md`: backend RBAC and access control
235
+ - `../anti-patterns.md`: consolidated anti-pattern list
236
+
237
+ ## References
238
+
239
+ - OTEP 0239 (profiling data model): <https://github.com/open-telemetry/oteps/blob/main/text/profiles/0239-profiles-data-model.md>
240
+ - Parca: <https://parca.dev>
241
+ - Grafana Pyroscope: <https://grafana.com/oss/pyroscope/>
242
+ - Polar Signals Cloud: <https://polarsignals.com>
243
+ - async-profiler: <https://github.com/jvm-profiling-tools/async-profiler>
244
+ - py-spy: <https://github.com/benfred/py-spy>
245
+ - CNCF Landscape (verify current CNCF status): <https://landscape.cncf.io>