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.
- package/README.md +35 -2
- package/filter-test-output.sh +52 -0
- package/mods/oma.ts +347 -0
- package/package.json +30 -4
- package/skills/_shared/conditional/experiment-ledger.md +28 -0
- package/skills/_shared/conditional/exploration-loop.md +22 -0
- package/skills/_shared/conditional/quality-score.md +33 -0
- package/skills/_shared/core/anti-ai-prose.md +191 -0
- package/skills/_shared/core/api-contracts/README.md +28 -0
- package/skills/_shared/core/api-contracts/template.md +90 -0
- package/skills/_shared/core/clarification-protocol.md +23 -0
- package/skills/_shared/core/code-intelligence.md +46 -0
- package/skills/_shared/core/collaboration-policy.md +28 -0
- package/skills/_shared/core/common-checklist.md +28 -0
- package/skills/_shared/core/context-budget.md +22 -0
- package/skills/_shared/core/context-loading.md +34 -0
- package/skills/_shared/core/difficulty-guide.md +26 -0
- package/skills/_shared/core/execution-policy.md +31 -0
- package/skills/_shared/core/lessons-learned.md +33 -0
- package/skills/_shared/core/prompt-structure.md +18 -0
- package/skills/_shared/core/quality-principles.md +11 -0
- package/skills/_shared/core/session-metrics.md +35 -0
- package/skills/_shared/core/skill-routing.md +39 -0
- package/skills/_shared/core/test-approach.md +54 -0
- package/skills/_shared/core/vendor-detection.md +52 -0
- package/skills/_shared/runtime/memory-protocol.md +118 -0
- package/skills/_shared/runtime/result-contract.md +64 -0
- package/skills/_shared/ui-interaction-quality.md +133 -0
- package/skills/oma-academic-writing/SKILL.md +181 -0
- package/skills/oma-academic-writing/resources/abstract-guide.md +51 -0
- package/skills/oma-academic-writing/resources/academic-verb-tiers.md +42 -0
- package/skills/oma-academic-writing/resources/anti-ai-checklist.md +52 -0
- package/skills/oma-academic-writing/resources/hedging-guide.md +132 -0
- package/skills/oma-academic-writing/resources/sentence-structure-reference.md +151 -0
- package/skills/oma-architecture/SKILL.md +203 -0
- package/skills/oma-architecture/resources/api-evolution.md +41 -0
- package/skills/oma-architecture/resources/checklist.md +42 -0
- package/skills/oma-architecture/resources/execution-protocol.md +115 -0
- package/skills/oma-architecture/resources/methodology-selection.md +92 -0
- package/skills/oma-architecture/resources/migration-patterns.md +28 -0
- package/skills/oma-architecture/resources/output-templates.md +111 -0
- package/skills/oma-architecture/resources/stakeholder-synthesis.md +80 -0
- package/skills/oma-backend/SKILL.md +202 -0
- package/skills/oma-backend/resources/checklist.md +45 -0
- package/skills/oma-backend/resources/error-playbook.md +97 -0
- package/skills/oma-backend/resources/execution-protocol.md +39 -0
- package/skills/oma-backend/resources/orm-reference.md +61 -0
- package/skills/oma-backend/variants/node/api-template.ts +315 -0
- package/skills/oma-backend/variants/node/snippets.md +475 -0
- package/skills/oma-backend/variants/node/stack.yaml +21 -0
- package/skills/oma-backend/variants/node/tech-stack.md +33 -0
- package/skills/oma-backend/variants/python/api-template.py +378 -0
- package/skills/oma-backend/variants/python/snippets.md +199 -0
- package/skills/oma-backend/variants/python/stack.yaml +18 -0
- package/skills/oma-backend/variants/python/tech-stack.md +45 -0
- package/skills/oma-backend/variants/rust/api-template.rs +635 -0
- package/skills/oma-backend/variants/rust/snippets.md +471 -0
- package/skills/oma-backend/variants/rust/stack.yaml +20 -0
- package/skills/oma-backend/variants/rust/tech-stack.md +36 -0
- package/skills/oma-backend/variants/stack.schema.json +73 -0
- package/skills/oma-brainstorm/SKILL.md +166 -0
- package/skills/oma-brainstorm/resources/triz-lite.md +117 -0
- package/skills/oma-coordination/SKILL.md +171 -0
- package/skills/oma-db/SKILL.md +201 -0
- package/skills/oma-db/resources/anti-patterns.md +177 -0
- package/skills/oma-db/resources/checklist.md +67 -0
- package/skills/oma-db/resources/document-templates.md +107 -0
- package/skills/oma-db/resources/error-playbook.md +50 -0
- package/skills/oma-db/resources/examples.md +170 -0
- package/skills/oma-db/resources/execution-protocol.md +127 -0
- package/skills/oma-db/resources/iso-controls.md +98 -0
- package/skills/oma-db/resources/migration-playbook.md +93 -0
- package/skills/oma-db/resources/query-tuning.md +57 -0
- package/skills/oma-db/resources/vector-db.md +159 -0
- package/skills/oma-debug/SKILL.md +146 -0
- package/skills/oma-debug/resources/bug-report-template.md +327 -0
- package/skills/oma-debug/resources/checklist.md +31 -0
- package/skills/oma-debug/resources/common-patterns.md +734 -0
- package/skills/oma-debug/resources/debugging-checklist.md +364 -0
- package/skills/oma-debug/resources/error-playbook.md +94 -0
- package/skills/oma-debug/resources/execution-protocol.md +40 -0
- package/skills/oma-design/SKILL.md +135 -0
- package/skills/oma-design/resources/asset-strategy.md +34 -0
- package/skills/oma-design/resources/checklist.md +63 -0
- package/skills/oma-design/resources/data-grid.md +48 -0
- package/skills/oma-design/resources/design-md-spec.md +107 -0
- package/skills/oma-design/resources/design-tokens.md +53 -0
- package/skills/oma-design/resources/error-playbook.md +18 -0
- package/skills/oma-design/resources/execution-protocol.md +95 -0
- package/skills/oma-design/resources/external-design-skills.md +130 -0
- package/skills/oma-design/resources/getdesign-fetcher.md +104 -0
- package/skills/oma-design/resources/product-interface-review.md +59 -0
- package/skills/oma-design/resources/redesign-protocol.md +52 -0
- package/skills/oma-design/resources/stitch-integration.md +244 -0
- package/skills/oma-dev-workflow/SKILL.md +375 -0
- package/skills/oma-dev-workflow/resources/affected-checks.py +58 -0
- package/skills/oma-dev-workflow/resources/api-workflows.md +58 -0
- package/skills/oma-dev-workflow/resources/database-patterns.md +107 -0
- package/skills/oma-dev-workflow/resources/i18n-patterns.md +63 -0
- package/skills/oma-dev-workflow/resources/release-coordination.md +240 -0
- package/skills/oma-dev-workflow/resources/tooling-profiles.md +217 -0
- package/skills/oma-dev-workflow/resources/troubleshooting.md +78 -0
- package/skills/oma-dev-workflow/resources/validation-pipeline.md +246 -0
- package/skills/oma-docs/SKILL.md +77 -0
- package/skills/oma-docs/resources/commands.md +76 -0
- package/skills/oma-explanation/SKILL.md +212 -0
- package/skills/oma-explanation/resources/document-structure.md +115 -0
- package/skills/oma-explanation/resources/draft-format.md +199 -0
- package/skills/oma-explanation/resources/html-contract.md +102 -0
- package/skills/oma-frontend/SKILL.md +227 -0
- package/skills/oma-frontend/resources/angular-rules.md +110 -0
- package/skills/oma-frontend/resources/checklist.md +76 -0
- package/skills/oma-frontend/resources/error-playbook.md +125 -0
- package/skills/oma-frontend/resources/execution-protocol.md +46 -0
- package/skills/oma-frontend/resources/snippets.md +354 -0
- package/skills/oma-frontend/resources/specialized-visual-implementation.md +193 -0
- package/skills/oma-frontend/resources/tailwind-rules.md +83 -0
- package/skills/oma-frontend/resources/tech-stack.md +156 -0
- package/skills/oma-hwp/SKILL.md +166 -0
- package/skills/oma-hwp/config/hwp-config.yaml +35 -0
- package/skills/oma-hwp/resources/balanced-tables.ts +39 -0
- package/skills/oma-hwp/resources/execution-protocol.md +145 -0
- package/skills/oma-hwp/resources/flatten-tables.ts +101 -0
- package/skills/oma-hwp/resources/package.json +13 -0
- package/skills/oma-hwp/resources/troubleshooting.md +70 -0
- package/skills/oma-hwp/resources/tsconfig.json +10 -0
- package/skills/oma-hwp/resources/turndown-plugin-gfm.d.ts +9 -0
- package/skills/oma-image/SKILL.md +142 -0
- package/skills/oma-image/config/image-config.yaml +70 -0
- package/skills/oma-image/resources/checklist.md +18 -0
- package/skills/oma-image/resources/execution-protocol.md +117 -0
- package/skills/oma-image/resources/invocation.md +105 -0
- package/skills/oma-image/resources/prompt-tips.md +71 -0
- package/skills/oma-image/resources/vendor-matrix.md +90 -0
- package/skills/oma-market/SKILL.md +142 -0
- package/skills/oma-market/resources/checklist.md +12 -0
- package/skills/oma-market/resources/error-playbook.md +12 -0
- package/skills/oma-market/resources/execution-protocol.md +60 -0
- package/skills/oma-market/resources/frameworks/pestel.md +101 -0
- package/skills/oma-market/resources/frameworks/porters-5f.md +90 -0
- package/skills/oma-market/resources/frameworks/swot.md +61 -0
- package/skills/oma-market/resources/intent-rules.md +35 -0
- package/skills/oma-market/resources/output-laws.md +53 -0
- package/skills/oma-mobile/SKILL.md +168 -0
- package/skills/oma-mobile/resources/checklist.md +77 -0
- package/skills/oma-mobile/resources/error-playbook.md +198 -0
- package/skills/oma-mobile/resources/execution-protocol.md +47 -0
- package/skills/oma-mobile/resources/screen-template.dart +331 -0
- package/skills/oma-mobile/resources/screen-template.swift +239 -0
- package/skills/oma-mobile/resources/screen-template.tsx +179 -0
- package/skills/oma-mobile/resources/tech-stack.md +69 -0
- package/skills/oma-mobile/variants/README.md +45 -0
- package/skills/oma-mobile/variants/flutter/api-template.dart +461 -0
- package/skills/oma-mobile/variants/flutter/snippets.md +1353 -0
- package/skills/oma-mobile/variants/flutter/stack.yaml +21 -0
- package/skills/oma-mobile/variants/flutter/tech-stack.md +201 -0
- package/skills/oma-mobile/variants/kotlin-android/api-template.kt +182 -0
- package/skills/oma-mobile/variants/kotlin-android/snippets.md +871 -0
- package/skills/oma-mobile/variants/kotlin-android/stack.yaml +32 -0
- package/skills/oma-mobile/variants/kotlin-android/tech-stack.md +159 -0
- package/skills/oma-mobile/variants/react-native/api-template.ts +531 -0
- package/skills/oma-mobile/variants/react-native/snippets.md +1014 -0
- package/skills/oma-mobile/variants/react-native/stack.yaml +22 -0
- package/skills/oma-mobile/variants/react-native/tech-stack.md +192 -0
- package/skills/oma-mobile/variants/stack.schema.json +68 -0
- package/skills/oma-mobile/variants/swift-ios/api-template.swift +165 -0
- package/skills/oma-mobile/variants/swift-ios/snippets.md +1028 -0
- package/skills/oma-mobile/variants/swift-ios/stack.yaml +25 -0
- package/skills/oma-mobile/variants/swift-ios/tech-stack.md +174 -0
- package/skills/oma-observability/SKILL.md +225 -0
- package/skills/oma-observability/resources/anti-patterns.md +555 -0
- package/skills/oma-observability/resources/boundaries/cross-application.md +348 -0
- package/skills/oma-observability/resources/boundaries/multi-tenant.md +290 -0
- package/skills/oma-observability/resources/boundaries/release.md +372 -0
- package/skills/oma-observability/resources/boundaries/slo.md +225 -0
- package/skills/oma-observability/resources/checklist.md +123 -0
- package/skills/oma-observability/resources/examples.md +448 -0
- package/skills/oma-observability/resources/execution-protocol.md +166 -0
- package/skills/oma-observability/resources/incident-forensics.md +348 -0
- package/skills/oma-observability/resources/intent-rules.md +307 -0
- package/skills/oma-observability/resources/layers/L3-network.md +281 -0
- package/skills/oma-observability/resources/layers/L4-transport.md +299 -0
- package/skills/oma-observability/resources/layers/L7-application/crash-analytics.md +359 -0
- package/skills/oma-observability/resources/layers/L7-application/mobile-rum.md +278 -0
- package/skills/oma-observability/resources/layers/L7-application/waf.md +246 -0
- package/skills/oma-observability/resources/layers/L7-application/web-rum.md +350 -0
- package/skills/oma-observability/resources/layers/mesh.md +368 -0
- package/skills/oma-observability/resources/matrix.md +177 -0
- package/skills/oma-observability/resources/meta-observability.md +605 -0
- package/skills/oma-observability/resources/observability-as-code.md +666 -0
- package/skills/oma-observability/resources/signals/audit.md +310 -0
- package/skills/oma-observability/resources/signals/cost.md +303 -0
- package/skills/oma-observability/resources/signals/logs.md +263 -0
- package/skills/oma-observability/resources/signals/metrics.md +478 -0
- package/skills/oma-observability/resources/signals/privacy.md +351 -0
- package/skills/oma-observability/resources/signals/profiles.md +245 -0
- package/skills/oma-observability/resources/signals/traces.md +360 -0
- package/skills/oma-observability/resources/standards.md +214 -0
- package/skills/oma-observability/resources/transport/collector-topology.md +308 -0
- package/skills/oma-observability/resources/transport/otlp-grpc-vs-http.md +256 -0
- package/skills/oma-observability/resources/transport/sampling-recipes.md +297 -0
- package/skills/oma-observability/resources/transport/udp-statsd-mtu.md +167 -0
- package/skills/oma-observability/resources/vendor-categories.md +352 -0
- package/skills/oma-orchestration/SKILL.md +302 -0
- package/skills/oma-orchestration/config/cli-config.yaml +92 -0
- package/skills/oma-orchestration/resources/memory-schema.md +232 -0
- package/skills/oma-orchestration/resources/subagent-prompt-template.md +30 -0
- package/skills/oma-orchestration/scripts/parallel-run.sh +6 -0
- package/skills/oma-orchestration/scripts/spawn-agent.sh +5 -0
- package/skills/oma-orchestration/scripts/verify.sh +20 -0
- package/skills/oma-orchestration/templates/backend-task.md +19 -0
- package/skills/oma-orchestration/templates/debug-task.md +16 -0
- package/skills/oma-orchestration/templates/frontend-task.md +18 -0
- package/skills/oma-orchestration/templates/mobile-task.md +18 -0
- package/skills/oma-orchestration/templates/qa-task.md +16 -0
- package/skills/oma-orchestration/templates/tasks-example.yaml +15 -0
- package/skills/oma-pdf/SKILL.md +162 -0
- package/skills/oma-pdf/config/pdf-config.yaml +27 -0
- package/skills/oma-pdf/resources/execution-protocol.md +127 -0
- package/skills/oma-pm/SKILL.md +157 -0
- package/skills/oma-pm/resources/error-playbook.md +75 -0
- package/skills/oma-pm/resources/examples.md +439 -0
- package/skills/oma-pm/resources/execution-protocol.md +62 -0
- package/skills/oma-pm/resources/iso-planning.md +110 -0
- package/skills/oma-pm/resources/plan-phase-protocol.md +66 -0
- package/skills/oma-pm/resources/task-template.json +86 -0
- package/skills/oma-qa/SKILL.md +141 -0
- package/skills/oma-qa/resources/checklist.md +339 -0
- package/skills/oma-qa/resources/error-playbook.md +98 -0
- package/skills/oma-qa/resources/execution-protocol.md +169 -0
- package/skills/oma-qa/resources/iso-quality.md +82 -0
- package/skills/oma-qa/resources/verify-ship-protocol.md +116 -0
- package/skills/oma-recap/SKILL.md +245 -0
- package/skills/oma-recap/resources/output-formats.md +83 -0
- package/skills/oma-refactor/SKILL.md +184 -0
- package/skills/oma-refactor/resources/definition.md +108 -0
- package/skills/oma-refactor/resources/governance.md +33 -0
- package/skills/oma-refactor/resources/hotspots.py +44 -0
- package/skills/oma-refactor/resources/measurement.md +93 -0
- package/skills/oma-scholar/SKILL.md +276 -0
- package/skills/oma-scholar/config/scholar-config.yaml +79 -0
- package/skills/oma-scholar/resources/api-endpoints.md +174 -0
- package/skills/oma-scholar/resources/checklist.md +92 -0
- package/skills/oma-scholar/resources/execution-protocol.md +224 -0
- package/skills/oma-scholar/resources/fallback-providers.md +143 -0
- package/skills/oma-scholar/resources/setup-openalex.md +85 -0
- package/skills/oma-scholar/resources/sidecar-spec.md +341 -0
- package/skills/oma-scholar/resources/upstream-spec-cache.md +972 -0
- package/skills/oma-scm/SKILL.md +103 -0
- package/skills/oma-scm/resources/cm-operations.md +56 -0
- package/skills/oma-scm/resources/codeowners-playbook.md +45 -0
- package/skills/oma-scm/resources/conventional-commits.md +108 -0
- package/skills/oma-scm/resources/merge-risk.md +76 -0
- package/skills/oma-scm/resources/onboarding-risk-signals.md +71 -0
- package/skills/oma-search/SKILL.md +125 -0
- package/skills/oma-search/resources/checklist.md +36 -0
- package/skills/oma-search/resources/error-playbook.md +66 -0
- package/skills/oma-search/resources/examples.md +80 -0
- package/skills/oma-search/resources/execution-protocol.md +86 -0
- package/skills/oma-search/resources/intent-rules.md +47 -0
- package/skills/oma-search/resources/trust-registry.md +53 -0
- package/skills/oma-security/SKILL.md +172 -0
- package/skills/oma-security/resources/artex.md +108 -0
- package/skills/oma-security/resources/ci.md +134 -0
- package/skills/oma-security/resources/cisco-source.md +108 -0
- package/skills/oma-security/resources/deepsec-config.md +45 -0
- package/skills/oma-security/resources/deepsec-matchers.md +35 -0
- package/skills/oma-security/resources/deepsec-scanning.md +45 -0
- package/skills/oma-security/resources/deepsec-setup.md +41 -0
- package/skills/oma-security/resources/findings-contract.md +408 -0
- package/skills/oma-security/resources/mcp-scanning.md +122 -0
- package/skills/oma-security/resources/skill-scanning.md +106 -0
- package/skills/oma-security/resources/validation.md +71 -0
- package/skills/oma-skill-creation/SKILL.md +84 -0
- package/skills/oma-skill-creation/resources/prompt-evaluation.md +36 -0
- package/skills/oma-skill-creation/resources/ssl-lite-template.md +108 -0
- package/skills/oma-skill-creation/resources/validation-checklist.md +101 -0
- package/skills/oma-slide/SKILL.md +277 -0
- package/skills/oma-slide/resources/animation-patterns.md +245 -0
- package/skills/oma-slide/resources/assets/deck-stage.js +514 -0
- package/skills/oma-slide/resources/assets/viewport-base.css +257 -0
- package/skills/oma-slide/resources/canva-integration.md +203 -0
- package/skills/oma-slide/resources/checklist.md +46 -0
- package/skills/oma-slide/resources/design-doctrine.md +260 -0
- package/skills/oma-slide/resources/fixed-stage.md +232 -0
- package/skills/oma-slide/resources/generation-protocol.md +393 -0
- package/skills/oma-slide/resources/native-pptx.md +84 -0
- package/skills/oma-slide/resources/selection-index.json +461 -0
- package/skills/oma-slide/resources/style-presets.LICENSE +10 -0
- package/skills/oma-slide/resources/style-presets.md +520 -0
- package/skills/oma-tf-infra/SKILL.md +201 -0
- package/skills/oma-tf-infra/resources/checklist.md +53 -0
- package/skills/oma-tf-infra/resources/cost-optimization.md +574 -0
- package/skills/oma-tf-infra/resources/error-playbook.md +68 -0
- package/skills/oma-tf-infra/resources/examples.md +38 -0
- package/skills/oma-tf-infra/resources/execution-protocol.md +129 -0
- package/skills/oma-tf-infra/resources/iso-42001-infra.md +229 -0
- package/skills/oma-tf-infra/resources/multi-cloud-examples.md +241 -0
- package/skills/oma-tf-infra/resources/policy-testing-examples.md +332 -0
- package/skills/oma-translation/SKILL.md +229 -0
- package/skills/oma-translation/resources/anti-ai-patterns.md +104 -0
- package/skills/oma-translation/resources/lang/_template.md +73 -0
- package/skills/oma-translation/resources/lang/en.md +123 -0
- package/skills/oma-translation/resources/lang/ja.md +274 -0
- package/skills/oma-translation/resources/lang/ko.md +228 -0
- package/skills/oma-translation/resources/lang/zh.md +285 -0
- package/skills/oma-translation/resources/style-skills.md +104 -0
- package/skills/oma-translation/resources/translation-rubric.md +126 -0
- package/skills/oma-video/SKILL.md +229 -0
- package/skills/oma-video/config/video-config.yaml +60 -0
- package/skills/oma-video/resources/checklist.md +26 -0
- package/skills/oma-video/resources/execution-protocol.md +122 -0
- package/skills/oma-video/resources/existing-media.md +185 -0
- package/skills/oma-video/resources/hyperframes-authoring/README.md +44 -0
- package/skills/oma-video/resources/hyperframes-authoring/demo.md +31 -0
- package/skills/oma-video/resources/hyperframes-authoring/explainer.md +10 -0
- package/skills/oma-video/resources/hyperframes-authoring/shorts.md +10 -0
- package/skills/oma-video/resources/motion-principles.md +81 -0
- package/skills/oma-video/resources/mpt/driver.py +301 -0
- package/skills/oma-video/resources/prompt-tips.md +75 -0
- package/skills/oma-video/resources/script-schema.md +81 -0
- package/skills/oma-video/resources/sound-design.md +127 -0
- package/skills/oma-video/resources/strudel/package.json +11 -0
- package/skills/oma-video/resources/strudel/page.html +87 -0
- package/skills/oma-video/resources/strudel/render.mjs +295 -0
- package/skills/oma-video/resources/vendor-matrix.md +124 -0
- package/skills/oma-voice/SKILL.md +249 -0
- package/skills/oma-voice/config/voice-config.yaml +30 -0
- package/skills/oma-voice/resources/audio-processing.md +119 -0
- package/skills/oma-voice/resources/checklist.md +47 -0
- package/skills/oma-voice/resources/execution-protocol.md +215 -0
- package/skills/oma-voice/resources/prompt-tips.md +43 -0
- package/skills/oma-voice/resources/voice-matrix.md +51 -0
- package/skills/oma-voice/resources/voicestudio.md +87 -0
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
# Release Boundary
|
|
2
|
+
|
|
3
|
+
## 1. Scope
|
|
4
|
+
|
|
5
|
+
The release boundary is the **temporal boundary between versions of a service**; the window
|
|
6
|
+
where new code enters production and either stabilizes or is rolled back.
|
|
7
|
+
|
|
8
|
+
Covers: progressive delivery strategies, Flagger canary analysis, Argo Rollouts, OpenFeature
|
|
9
|
+
feature flags, GitOps engine reconcile observability, and Kubernetes operator reconcile metrics.
|
|
10
|
+
|
|
11
|
+
Out of scope: SLI/SLO definitions and error budget math (see `slo.md`); dashboard layout
|
|
12
|
+
and code (see `../observability-as-code.md`); post-incident timelines (see `../incident-forensics.md`).
|
|
13
|
+
|
|
14
|
+
This boundary **consumes** SLI/SLO metrics as promotion gates; it does not define SLOs.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 2. Progressive Delivery Strategies
|
|
19
|
+
|
|
20
|
+
| Strategy | Traffic split | Blast radius | Metric feedback speed | When to use |
|
|
21
|
+
|----------|--------------|-------------|----------------------|-------------|
|
|
22
|
+
| **Blue/Green** | Full switch | High | Fast (all traffic) | Low-frequency, reversible deploys |
|
|
23
|
+
| **Canary** | Gradual % shift | Low to high | Progressive | Most stateless services |
|
|
24
|
+
| **A/B testing** | Cohort split | Low | Slow (UX signal) | Product/UX variant evaluation |
|
|
25
|
+
|
|
26
|
+
Choose based on: blast radius tolerance × metric feedback speed. Canary is the default
|
|
27
|
+
recommendation for services with Prometheus SLI coverage.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 3. Flagger (CNCF Graduated, part of Flux)
|
|
32
|
+
|
|
33
|
+
Source: <https://flagger.app>
|
|
34
|
+
|
|
35
|
+
Flagger automates canary promotion and rollback decisions using Prometheus, Datadog, or
|
|
36
|
+
NewRelic metric queries. It integrates natively with Flux and supports any service mesh or
|
|
37
|
+
ingress (Istio, Linkerd, Nginx, Contour).
|
|
38
|
+
|
|
39
|
+
**Feedback loop:** Flagger samples metrics on a configurable interval (30s–60s). If the
|
|
40
|
+
metric breaches the threshold for N consecutive samples (`failureThreshold`), it rolls back.
|
|
41
|
+
Promotion requires all metric checks to pass for the full `iterations` count.
|
|
42
|
+
|
|
43
|
+
```yaml
|
|
44
|
+
# Flagger Canary CR — canary analysis referencing PromQL SLI
|
|
45
|
+
apiVersion: flagger.app/v1beta1
|
|
46
|
+
kind: Canary
|
|
47
|
+
metadata:
|
|
48
|
+
name: checkout
|
|
49
|
+
namespace: prod
|
|
50
|
+
spec:
|
|
51
|
+
targetRef:
|
|
52
|
+
apiVersion: apps/v1
|
|
53
|
+
kind: Deployment
|
|
54
|
+
name: checkout
|
|
55
|
+
progressDeadlineSeconds: 600
|
|
56
|
+
service:
|
|
57
|
+
port: 8080
|
|
58
|
+
analysis:
|
|
59
|
+
interval: 60s # sample every 60 seconds
|
|
60
|
+
threshold: 5 # max failed checks before rollback
|
|
61
|
+
maxWeight: 50 # max canary traffic weight (%)
|
|
62
|
+
stepWeight: 10 # increment per successful check
|
|
63
|
+
metrics:
|
|
64
|
+
- name: error-rate
|
|
65
|
+
templateRef:
|
|
66
|
+
name: error-rate
|
|
67
|
+
namespace: flagger-system
|
|
68
|
+
thresholdRange:
|
|
69
|
+
max: 1 # fail if error rate > 1%
|
|
70
|
+
interval: 60s
|
|
71
|
+
- name: latency-p99
|
|
72
|
+
templateRef:
|
|
73
|
+
name: latency
|
|
74
|
+
namespace: flagger-system
|
|
75
|
+
thresholdRange:
|
|
76
|
+
max: 500 # fail if p99 > 500ms
|
|
77
|
+
interval: 60s
|
|
78
|
+
---
|
|
79
|
+
apiVersion: flagger.app/v1beta1
|
|
80
|
+
kind: MetricTemplate
|
|
81
|
+
metadata:
|
|
82
|
+
name: error-rate
|
|
83
|
+
namespace: flagger-system
|
|
84
|
+
spec:
|
|
85
|
+
provider:
|
|
86
|
+
type: prometheus
|
|
87
|
+
address: http://prometheus.monitoring:9090
|
|
88
|
+
query: |
|
|
89
|
+
sum(rate(http_requests_total{
|
|
90
|
+
namespace="{{ namespace }}",
|
|
91
|
+
service="{{ target }}",
|
|
92
|
+
status=~"5.."
|
|
93
|
+
}[{{ interval }}]))
|
|
94
|
+
/
|
|
95
|
+
sum(rate(http_requests_total{
|
|
96
|
+
namespace="{{ namespace }}",
|
|
97
|
+
service="{{ target }}"
|
|
98
|
+
}[{{ interval }}])) * 100
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Cross-ref `slo.md §3` for the full SLI PromQL patterns used as the canary threshold source.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 4. Argo Rollouts
|
|
106
|
+
|
|
107
|
+
Source: <https://argoproj.github.io/rollouts>
|
|
108
|
+
|
|
109
|
+
Argo Rollouts integrates with Argo CD for GitOps-native progressive delivery. Supports
|
|
110
|
+
canary, blue-green, and experiment steps. `AnalysisTemplate` CRD gates promotion with
|
|
111
|
+
metric-based pass/fail.
|
|
112
|
+
|
|
113
|
+
```yaml
|
|
114
|
+
# Argo Rollout — canary with AnalysisTemplate reference
|
|
115
|
+
apiVersion: argoproj.io/v1alpha1
|
|
116
|
+
kind: Rollout
|
|
117
|
+
metadata:
|
|
118
|
+
name: checkout
|
|
119
|
+
spec:
|
|
120
|
+
replicas: 5
|
|
121
|
+
strategy:
|
|
122
|
+
canary:
|
|
123
|
+
steps:
|
|
124
|
+
- setWeight: 20
|
|
125
|
+
- pause: { duration: 2m }
|
|
126
|
+
- analysis:
|
|
127
|
+
templates:
|
|
128
|
+
- templateName: error-rate-check
|
|
129
|
+
- setWeight: 50
|
|
130
|
+
- pause: { duration: 5m }
|
|
131
|
+
- analysis:
|
|
132
|
+
templates:
|
|
133
|
+
- templateName: error-rate-check
|
|
134
|
+
canaryService: checkout-canary
|
|
135
|
+
stableService: checkout-stable
|
|
136
|
+
---
|
|
137
|
+
apiVersion: argoproj.io/v1alpha1
|
|
138
|
+
kind: AnalysisTemplate
|
|
139
|
+
metadata:
|
|
140
|
+
name: error-rate-check
|
|
141
|
+
spec:
|
|
142
|
+
metrics:
|
|
143
|
+
- name: error-rate
|
|
144
|
+
interval: 60s
|
|
145
|
+
successCondition: result[0] < 1.0 # < 1% error rate
|
|
146
|
+
failureLimit: 3
|
|
147
|
+
provider:
|
|
148
|
+
prometheus:
|
|
149
|
+
address: http://prometheus.monitoring:9090
|
|
150
|
+
query: |
|
|
151
|
+
sum(rate(http_requests_total{
|
|
152
|
+
job="checkout-canary",
|
|
153
|
+
status=~"5.."
|
|
154
|
+
}[5m]))
|
|
155
|
+
/
|
|
156
|
+
sum(rate(http_requests_total{
|
|
157
|
+
job="checkout-canary"
|
|
158
|
+
}[5m])) * 100
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 5. Feature Flags via OpenFeature (CNCF Incubating, 2023-11-21)
|
|
164
|
+
|
|
165
|
+
Source: <https://openfeature.dev> | CNCF graduation: <https://www.cncf.io/projects/openfeature/>
|
|
166
|
+
|
|
167
|
+
OpenFeature defines a vendor-agnostic SDK specification for feature flag evaluation via the
|
|
168
|
+
**OFREP** (OpenFeature Remote Evaluation Protocol). The SDK core is provider-agnostic;
|
|
169
|
+
teams swap providers without changing application code.
|
|
170
|
+
|
|
171
|
+
**Supported providers:** LaunchDarkly, Flagsmith, GrowthBook, Unleash, ConfigCat, Harness FF.
|
|
172
|
+
|
|
173
|
+
**Evaluation context** carries targeting attributes:
|
|
174
|
+
|
|
175
|
+
| Attribute | Example | Use |
|
|
176
|
+
|-----------|---------|-----|
|
|
177
|
+
| `user.id` | `usr_abc123` | Per-user targeting |
|
|
178
|
+
| `tenant.id` | `org_xyz` | Tenant-gated rollout |
|
|
179
|
+
| `environment` | `production` | Environment guard |
|
|
180
|
+
| `app.version` | `2.4.1` | Version-gated flag |
|
|
181
|
+
|
|
182
|
+
Integration with Flagger/Rollouts: use feature flags to gate traffic routing at the
|
|
183
|
+
application layer while Flagger controls infrastructure-level traffic weight.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 6. Observing Feature Flag Evaluations
|
|
188
|
+
|
|
189
|
+
OTel semantic conventions: `feature_flag.*` (Release Candidate as of semconv 1.43.0).
|
|
190
|
+
|
|
191
|
+
Key span attributes emitted on each flag evaluation:
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
feature_flag.key = "checkout-v2-enabled"
|
|
195
|
+
feature_flag.variant = "on"
|
|
196
|
+
feature_flag.provider_name = "flagsmith"
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Example span attributes (JSON log-compatible):
|
|
200
|
+
|
|
201
|
+
```json
|
|
202
|
+
{
|
|
203
|
+
"name": "feature_flag.evaluation",
|
|
204
|
+
"attributes": {
|
|
205
|
+
"feature_flag.key": "checkout-v2-enabled",
|
|
206
|
+
"feature_flag.variant": "on",
|
|
207
|
+
"feature_flag.provider_name": "flagsmith",
|
|
208
|
+
"user.id": "usr_abc123",
|
|
209
|
+
"tenant.id": "org_enterprise"
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**Metrics to track per flag:**
|
|
215
|
+
|
|
216
|
+
| Metric | Labels | Purpose |
|
|
217
|
+
|--------|--------|---------|
|
|
218
|
+
| `feature_flag_evaluation_total` | `flag`, `variant`, `tenant` | Variant distribution |
|
|
219
|
+
| Error rate delta per variant | `flag`, `variant` | A/B regression detection |
|
|
220
|
+
| Latency p99 delta per variant | `flag`, `variant` | Performance regression |
|
|
221
|
+
|
|
222
|
+
Dashboards cross-ref `../observability-as-code.md` for the flag evaluation panel template.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## 7. GitOps Engines
|
|
227
|
+
|
|
228
|
+
### 7.1 Argo CD
|
|
229
|
+
|
|
230
|
+
Source: <https://argo-cd.readthedocs.io>
|
|
231
|
+
|
|
232
|
+
Declarative Kubernetes sync using app-of-apps pattern. Reconcile metrics exposed via `/metrics`:
|
|
233
|
+
|
|
234
|
+
| Metric | Type | Description |
|
|
235
|
+
|--------|------|-------------|
|
|
236
|
+
| `argocd_app_info` | Gauge | App metadata; sync status label |
|
|
237
|
+
| `argocd_app_sync_total` | Counter | Sync operations by phase |
|
|
238
|
+
| `argocd_app_reconcile_bucket` | Histogram | Reconcile latency distribution |
|
|
239
|
+
|
|
240
|
+
Drift detection alert (cluster state ≠ git manifest):
|
|
241
|
+
|
|
242
|
+
```promql
|
|
243
|
+
argocd_app_info{sync_status="OutOfSync"} == 1
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### 7.2 Flux (CNCF Graduated)
|
|
247
|
+
|
|
248
|
+
Source: <https://fluxcd.io>; Flagger ships as part of the Flux ecosystem.
|
|
249
|
+
|
|
250
|
+
| Metric | Type | Description |
|
|
251
|
+
|--------|------|-------------|
|
|
252
|
+
| `gotk_reconcile_duration_seconds` | Histogram | Per-controller reconcile latency |
|
|
253
|
+
| `gotk_reconcile_condition` | Gauge | `ready` or `stalled` per resource |
|
|
254
|
+
|
|
255
|
+
Stalled resource alert:
|
|
256
|
+
|
|
257
|
+
```promql
|
|
258
|
+
gotk_reconcile_condition{type="Ready",status="False"} == 1
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Cross-ref `../signals/metrics.md` for Prometheus scrape config snippets for both engines.
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## 8. Kubernetes Operator Reconcile Observability
|
|
266
|
+
|
|
267
|
+
Every operator built on `controller-runtime` exposes `/metrics` automatically.
|
|
268
|
+
|
|
269
|
+
**Built-in metrics:**
|
|
270
|
+
|
|
271
|
+
| Metric | Type | Description |
|
|
272
|
+
|--------|------|-------------|
|
|
273
|
+
| `controller_runtime_reconcile_total` | Counter | Reconcile attempts by result |
|
|
274
|
+
| `controller_runtime_reconcile_errors_total` | Counter | Failed reconcile loops |
|
|
275
|
+
| `controller_runtime_reconcile_time_seconds` | Histogram | Reconcile loop duration |
|
|
276
|
+
|
|
277
|
+
Monitor CRD readiness via `.status.conditions[]`:
|
|
278
|
+
|
|
279
|
+
```promql
|
|
280
|
+
# Alert on reconcile error spike
|
|
281
|
+
rate(controller_runtime_reconcile_errors_total[5m]) > 0.1
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Custom CRDs must emit reconcile metrics. Pattern: wrap reconcile logic in `ObservedGeneration`
|
|
285
|
+
guard and expose a `status.conditions` entry per managed resource.
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## 9. Release Markers in Telemetry
|
|
290
|
+
|
|
291
|
+
- `service.version` (OTel Stable): set on every span, metric data point, and log record
|
|
292
|
+
via the OTel Resource at SDK initialization. Never patch per-signal.
|
|
293
|
+
- Emit a **deployment event** at release time:
|
|
294
|
+
|
|
295
|
+
```json
|
|
296
|
+
{
|
|
297
|
+
"event.name": "deployment",
|
|
298
|
+
"service.name": "checkout",
|
|
299
|
+
"service.version": "2.4.1",
|
|
300
|
+
"deployment.environment": "production",
|
|
301
|
+
"timestamp": "2026-04-21T10:00:00Z"
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
- Pipeline this event to Grafana → vertical annotation line on all timeseries dashboards.
|
|
306
|
+
- **Correlation rule:** incidents within ≤30 minutes of a deployment event are flagged as
|
|
307
|
+
release suspects. Cross-ref `../incident-forensics.md §Scenario C` for the triage playbook.
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## 10. Canary Analysis Metric Suite
|
|
312
|
+
|
|
313
|
+
| Signal | Source | Gate |
|
|
314
|
+
|--------|--------|------|
|
|
315
|
+
| SLI compliance | `slo.md` PromQL | Pass/fail per iteration |
|
|
316
|
+
| Error rate delta (new vs prev) | `http_requests_total` | Max +0.5% allowed |
|
|
317
|
+
| Latency p99 delta | `http_request_duration_seconds_bucket` | Max +50ms allowed |
|
|
318
|
+
| Crash-Free Rate delta | Cross-ref `../layers/L7-application/crash-analytics.md` | Mobile/web only |
|
|
319
|
+
| Conversion / revenue delta | Product analytics | Product team domain; not in Flagger |
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## 11. Rollback and Hotfix Pipeline
|
|
324
|
+
|
|
325
|
+
| Trigger | Mechanism | Action |
|
|
326
|
+
|---------|-----------|--------|
|
|
327
|
+
| Metric breach (N consecutive) | Flagger / Argo Rollouts automated | Instant rollback to stable |
|
|
328
|
+
| Manual override | `kubectl argo rollouts abort` or Flagger annotation | Operator-initiated |
|
|
329
|
+
| Hotfix deploy | Standard pipeline, skip canary analysis steps if authorized | Requires audit entry |
|
|
330
|
+
|
|
331
|
+
Manual override always remains possible regardless of automated analysis state.
|
|
332
|
+
|
|
333
|
+
Post-mortem audit trail required for every rollback event.
|
|
334
|
+
Cross-ref `../signals/audit.md` for the required audit log fields.
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## 12. Matrix.md Cells (release row)
|
|
339
|
+
|
|
340
|
+
| Layer | Signal | Status | Detail |
|
|
341
|
+
|-------|--------|--------|--------|
|
|
342
|
+
| L7 × release | metrics | PASS | Canary SLI delta; error rate and latency per version |
|
|
343
|
+
| L7 × release | logs | PASS | Deployment events with `service.version` |
|
|
344
|
+
| L7 × release | traces | PASS | `service.version` tagging on every span |
|
|
345
|
+
| L7 × release | profiles | PARTIAL | Regression comparison v(new) vs v(prev); tooling-dependent |
|
|
346
|
+
| L7 × release | cost | PARTIAL | Cost delta per variant requires OpenCost label propagation |
|
|
347
|
+
| mesh × release | metrics | PARTIAL | Canary routing rules observable via Envoy stats if mesh present |
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## 13. Anti-Patterns (candidates for `../anti-patterns.md §Section E Release & Deployment`)
|
|
352
|
+
|
|
353
|
+
| Anti-pattern | Problem | Fix |
|
|
354
|
+
|-------------|---------|-----|
|
|
355
|
+
| No release markers in telemetry | Cannot correlate deploys to incidents | Set `service.version` on OTel Resource; emit deployment event |
|
|
356
|
+
| Canary analysis without SLI metric | Promotion is blind; regressions ship silently | Add MetricTemplate/AnalysisTemplate referencing PromQL SLI |
|
|
357
|
+
| Feature flag evaluation not observed | Variant effect invisible; A/B regression undetected | Emit `feature_flag.*` span attributes on every evaluation |
|
|
358
|
+
| GitOps drift unalerted | Ghost state; cluster diverges from git manifest silently | Alert on `argocd_app_info{sync_status="OutOfSync"}` or `gotk_reconcile_condition{status="False"}` |
|
|
359
|
+
| Rollback without post-mortem audit trail | No learning loop; same failure repeats | Record rollback event in audit log; cross-ref `../signals/audit.md` |
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## References
|
|
364
|
+
|
|
365
|
+
- Flagger: <https://flagger.app>
|
|
366
|
+
- Argo Rollouts: <https://argoproj.github.io/rollouts>
|
|
367
|
+
- OpenFeature: <https://openfeature.dev>
|
|
368
|
+
- CNCF OpenFeature incubating announcement: <https://cncf.io/blog/2023/12/>
|
|
369
|
+
- Flux (includes Flagger): <https://fluxcd.io>
|
|
370
|
+
- Argo CD: <https://argo-cd.readthedocs.io>
|
|
371
|
+
- OTel feature_flag semconv: <https://opentelemetry.io/docs/specs/semconv/feature-flags/>
|
|
372
|
+
- controller-runtime metrics: <https://book.kubebuilder.io/reference/metrics>
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# SLO Boundary
|
|
2
|
+
|
|
3
|
+
## 1. Scope
|
|
4
|
+
|
|
5
|
+
SLO (Service Level Objective) is the contractual reliability target bounding acceptable error rates
|
|
6
|
+
and response times. Covers: SLI definition, SLO math, error budget, burn-rate alerts, tool options.
|
|
7
|
+
|
|
8
|
+
Out of scope: dashboard config (`observability-as-code.md`); progressive delivery gates (`release.md`);
|
|
9
|
+
pipeline SLOs (`../meta-observability.md §Section F`).
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 2. Terminology
|
|
14
|
+
|
|
15
|
+
| Term | Definition | Example |
|
|
16
|
+
|------|-----------|---------|
|
|
17
|
+
| **SLI** | Measurable property of a service | 99.2% of requests returned 2xx in past 30d |
|
|
18
|
+
| **SLO** | Internal reliability target | 99.9% availability, 28-day rolling window |
|
|
19
|
+
| **SLA** | Customer contract with consequences | SLO − buffer; breach triggers credits |
|
|
20
|
+
| **Error budget** | `100% − SLO`; headroom before breach | 0.1% = 43.2 min/month at 99.9% SLO |
|
|
21
|
+
|
|
22
|
+
Rule: SLA target < SLO target. Never set SLA = SLO (no operations buffer).
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 3. SLI Selection
|
|
27
|
+
|
|
28
|
+
| Method | Best for | Signals |
|
|
29
|
+
|--------|---------|---------|
|
|
30
|
+
| Golden Signals (Google SRE) | Any service | Latency, Traffic, Errors, Saturation |
|
|
31
|
+
| RED | Request-serving | Rate, Errors, Duration |
|
|
32
|
+
| USE | Resources | Utilization, Saturation, Errors |
|
|
33
|
+
|
|
34
|
+
Cross-ref `../signals/metrics.md §SLI` for PromQL sketches per method.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 4. SLO Math
|
|
39
|
+
|
|
40
|
+
Availability SLI (28-day rolling window):
|
|
41
|
+
|
|
42
|
+
```promql
|
|
43
|
+
sum(rate(http_requests_total{status=~"2..|3.."}[28d]))
|
|
44
|
+
/ sum(rate(http_requests_total[28d]))
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Latency SLI (fraction of requests under 300ms):
|
|
48
|
+
|
|
49
|
+
```promql
|
|
50
|
+
sum(rate(http_request_duration_seconds_bucket{le="0.3"}[28d]))
|
|
51
|
+
/ sum(rate(http_request_duration_seconds_count[28d]))
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 5. OpenSLO Spec
|
|
57
|
+
|
|
58
|
+
Source: <https://openslo.com>; community-driven, not CNCF. Vendor-neutral YAML; validate support in the selected consumer or adapter. Sloth and Pyrra native formats are separate.
|
|
59
|
+
|
|
60
|
+
```yaml
|
|
61
|
+
apiVersion: openslo/v1
|
|
62
|
+
kind: SLO
|
|
63
|
+
metadata:
|
|
64
|
+
name: checkout-availability
|
|
65
|
+
spec:
|
|
66
|
+
service: checkout
|
|
67
|
+
budgetingMethod: Occurrences
|
|
68
|
+
timeWindow:
|
|
69
|
+
- duration: 28d
|
|
70
|
+
isRolling: true
|
|
71
|
+
objectives:
|
|
72
|
+
- target: 0.999
|
|
73
|
+
indicator:
|
|
74
|
+
metadata:
|
|
75
|
+
name: checkout-success-ratio
|
|
76
|
+
spec:
|
|
77
|
+
ratioMetric:
|
|
78
|
+
counter: false # queries return window counts, not monotonic counters
|
|
79
|
+
good:
|
|
80
|
+
metricSource:
|
|
81
|
+
type: Prometheus
|
|
82
|
+
spec:
|
|
83
|
+
query: sum(increase(http_requests_total{service="checkout",status=~"2..|3.."}[28d]))
|
|
84
|
+
total:
|
|
85
|
+
metricSource:
|
|
86
|
+
type: Prometheus
|
|
87
|
+
spec:
|
|
88
|
+
query: sum(increase(http_requests_total{service="checkout"}[28d]))
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The v1 structure follows <https://openslo.com/specification/>.
|
|
92
|
+
`metricSource.spec` is implementation-defined: verify the chosen consumer's
|
|
93
|
+
Prometheus adapter, window evaluation, and counter semantics. This example
|
|
94
|
+
does not imply Sloth or Pyrra directly accepts OpenSLO; native definitions
|
|
95
|
+
require a verified adapter/conversion if OpenSLO is the input.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 6. Tool Options (as of 2026-Q2)
|
|
100
|
+
|
|
101
|
+
| Tool | Type | CNCF | Output |
|
|
102
|
+
|------|------|------|--------|
|
|
103
|
+
| Sloth | OSS CLI + k8s operator | No | PrometheusRule CRDs |
|
|
104
|
+
| Pyrra | OSS CLI + k8s operator | No | PrometheusRule CRDs |
|
|
105
|
+
| Grafana SLO | Grafana Cloud product | No | Cloud-native alerts |
|
|
106
|
+
| Nobl9 | Commercial SaaS | No | Multi-backend |
|
|
107
|
+
| Google Cloud Service Monitoring | GCP-native | No | GCP alerts |
|
|
108
|
+
|
|
109
|
+
Cross-ref `../vendor-categories.md §OSS Full-Stack`. Sloth and Pyrra are the recommended OSS path
|
|
110
|
+
for Kubernetes-native GitOps deployments.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 7. Burn-Rate Alert Design
|
|
115
|
+
|
|
116
|
+
### 7.1 Problem
|
|
117
|
+
|
|
118
|
+
A simple error-budget-exhausted alert fires after damage is done. Multi-window burn-rate alerts
|
|
119
|
+
detect fast-burning incidents while they still have budget remaining.
|
|
120
|
+
|
|
121
|
+
Source: <https://sre.google/workbook/alerting-on-slos/>
|
|
122
|
+
|
|
123
|
+
### 7.2 Multi-Window Tiers (99.9% SLO)
|
|
124
|
+
|
|
125
|
+
| Tier | Budget consumed | Long window | Short window | Multiplier | Action |
|
|
126
|
+
|------|----------------|------------|-------------|-----------|--------|
|
|
127
|
+
| Fast burn | About 2.14% of 28d in 1h | 1h | 5m | 14.4× | Page immediately |
|
|
128
|
+
| Slow burn | About 5.36% of 28d in 6h | 6h | 30m | 6× | Create ticket |
|
|
129
|
+
|
|
130
|
+
**Window arithmetic:** a 28-day window is 672h. The classic 30-day
|
|
131
|
+
thresholds 14.4× and 6× consume about 2.14% in 1h and 5.36% in 6h
|
|
132
|
+
when used unchanged for 28d. For exactly 2% and 5%, use 13.44× and
|
|
133
|
+
5.6× respectively. Full-budget exhaustion at constant burn is
|
|
134
|
+
`window_hours / burn_rate`; remaining budget changes that horizon.
|
|
135
|
+
|
|
136
|
+
### 7.3 Fast Burn PromQL
|
|
137
|
+
|
|
138
|
+
```promql
|
|
139
|
+
(
|
|
140
|
+
(1 - sum(rate(http_requests_total{status=~"2..|3.."}[1h]))
|
|
141
|
+
/ sum(rate(http_requests_total[1h])))
|
|
142
|
+
> (1 - 0.999) * 14.4
|
|
143
|
+
)
|
|
144
|
+
and
|
|
145
|
+
(
|
|
146
|
+
(1 - sum(rate(http_requests_total{status=~"2..|3.."}[5m]))
|
|
147
|
+
/ sum(rate(http_requests_total[5m])))
|
|
148
|
+
> (1 - 0.999) * 14.4
|
|
149
|
+
)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### 7.4 Slow Burn PromQL
|
|
153
|
+
|
|
154
|
+
```promql
|
|
155
|
+
(
|
|
156
|
+
(1 - sum(rate(http_requests_total{status=~"2..|3.."}[6h]))
|
|
157
|
+
/ sum(rate(http_requests_total[6h])))
|
|
158
|
+
> (1 - 0.999) * 6
|
|
159
|
+
)
|
|
160
|
+
and
|
|
161
|
+
(
|
|
162
|
+
(1 - sum(rate(http_requests_total{status=~"2..|3.."}[30m]))
|
|
163
|
+
/ sum(rate(http_requests_total[30m])))
|
|
164
|
+
> (1 - 0.999) * 6
|
|
165
|
+
)
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
The short window gates the long window: long window detects sustained burns; short window
|
|
169
|
+
suppresses false positives from transient spikes.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 8. Error Budget Policy
|
|
174
|
+
|
|
175
|
+
| Budget remaining | Action |
|
|
176
|
+
|-----------------|--------|
|
|
177
|
+
| > 50% | Normal feature velocity |
|
|
178
|
+
| 25–50% | Review reliability vs feature ratio |
|
|
179
|
+
| < 25% | Reliability sprint |
|
|
180
|
+
| 0% (exhausted) | Freeze deploys until budget recovers |
|
|
181
|
+
|
|
182
|
+
Cross-ref `release.md`; Flagger and Argo Rollouts use the SLI error rate as canary promotion gate;
|
|
183
|
+
the same threshold enforces budget-aware deployment freeze.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 9. Cross-Integration
|
|
188
|
+
|
|
189
|
+
| File | Integration |
|
|
190
|
+
|------|------------|
|
|
191
|
+
| `release.md` | Flagger/Argo use SLI metric for canary promotion; SLO failure = rollback |
|
|
192
|
+
| `observability-as-code.md` | OpenSLO YAML in Git; Sloth/Pyrra generate PrometheusRule CRDs in CI |
|
|
193
|
+
| `../meta-observability.md §Section F` | Pipeline has its own burn-rate alerts for computation lag |
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## 10. Matrix Coverage (slo row)
|
|
198
|
+
|
|
199
|
+
| Layer | Signal | Status | Detail |
|
|
200
|
+
|-------|--------|--------|--------|
|
|
201
|
+
| L7-application | metrics | PASS | SLI calculation from HTTP/gRPC counters and histograms |
|
|
202
|
+
| L7-application | logs | PARTIAL | Burn-rate source when metrics unavailable; higher latency |
|
|
203
|
+
| L7-application | traces | PARTIAL | Critical path traces complement metrics-based SLI |
|
|
204
|
+
| mesh | metrics | PASS | Golden signals from Envoy; zero-code instrumentation |
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 11. Anti-Patterns (candidates for `../anti-patterns.md §Section D`)
|
|
209
|
+
|
|
210
|
+
| Anti-pattern | Problem | Fix |
|
|
211
|
+
|-------------|---------|-----|
|
|
212
|
+
| SLO without burn-rate alert | Alert fires after budget exhausted | Add multi-window PrometheusRule |
|
|
213
|
+
| Burn-rate without multi-window | False alarms (short) or slow detection (long) | Gate long window with short window |
|
|
214
|
+
| SLO without error budget policy | No action framework for budget consumption | Define policy table (§8) |
|
|
215
|
+
| Customer SLA = SLO | No buffer; any breach triggers penalty | Set SLA target below SLO target |
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## References
|
|
220
|
+
|
|
221
|
+
- Google SRE Workbook: Alerting on SLOs: <https://sre.google/workbook/alerting-on-slos/>
|
|
222
|
+
- OpenSLO specification: <https://openslo.com>
|
|
223
|
+
- Sloth: <https://github.com/slok/sloth>
|
|
224
|
+
- Pyrra: <https://github.com/pyrra-dev/pyrra>
|
|
225
|
+
- Grafana SLO plugin: <https://grafana.com/grafana/plugins/grafana-slo-app>
|