@danieljvdm/dev-kit 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/package.json +1 -1
- package/skill-sources.jsonc +2 -33
- package/skill-sources.lock.json +15 -117
- package/skills/animate/LICENSE +21 -0
- package/skills/animate/NOTICE +10 -0
- package/skills/animate/SKILL.md +34 -0
- package/skills/animate/references/gestures.md +27 -0
- package/skills/animate/references/glossary.md +136 -0
- package/skills/animate/references/implementation.md +22 -0
- package/skills/animate/references/opportunities.md +18 -0
- package/skills/animate/references/principles.md +48 -0
- package/skills/animate/references/review.md +19 -0
- package/skills/cloudflare-workers/LICENSE +202 -0
- package/skills/cloudflare-workers/NOTICE +9 -0
- package/skills/cloudflare-workers/SKILL.md +26 -0
- package/skills/cloudflare-workers/references/durable-objects.md +68 -0
- package/skills/cloudflare-workers/references/sandbox.md +48 -0
- package/skills/cloudflare-workers/references/workers.md +63 -0
- package/skills/cloudflare-workers/references/wrangler.md +56 -0
- package/skills/design-ui/LICENSE +21 -0
- package/skills/design-ui/NOTICE +8 -0
- package/skills/design-ui/SKILL.md +29 -0
- package/skills/design-ui/references/appearance.md +22 -0
- package/skills/design-ui/references/components.md +33 -0
- package/skills/design-ui/references/exploration.md +50 -0
- package/skills/design-ui/references/libraries.md +39 -0
- package/skills/design-ui/references/themes.md +23 -0
- package/skills/dev-kit/SKILL.md +19 -38
- package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
- package/skills/dev-kit/references/skills.md +2 -2
- package/skills/effect-development/SKILL.md +27 -0
- package/skills/effect-development/agents/openai.yaml +4 -0
- package/skills/effect-development/references/api/index.md +32 -0
- package/skills/effect-development/references/api/schema-codecs.md +15 -0
- package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
- package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
- package/skills/effect-development/references/atom/index.md +40 -0
- package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
- package/skills/effect-development/references/cli/index.md +39 -0
- package/skills/effect-development/references/setup.md +15 -0
- package/skills/open-pull-request/SKILL.md +10 -70
- package/skills/open-pull-request/references/evidence.md +22 -0
- package/skills/open-pull-request/references/explanation.md +21 -0
- package/skills/open-pull-request/references/publication.md +21 -0
- package/skills/sentry/LICENSE +202 -0
- package/skills/sentry/LICENSE-UPSTREAM +21 -0
- package/skills/sentry/NOTICE +14 -0
- package/skills/sentry/SKILL.md +33 -0
- package/skills/sentry/references/alert-payloads.md +105 -0
- package/skills/sentry/references/alerts.md +17 -0
- package/skills/sentry/references/artifacts.md +25 -0
- package/skills/sentry/references/auth-token.md +65 -0
- package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
- package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
- package/skills/sentry/references/concepts/crons.md +50 -0
- package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
- package/skills/sentry/references/concepts/errors.md +40 -0
- package/skills/sentry/references/concepts/logging.md +85 -0
- package/skills/sentry/references/concepts/metrics.md +49 -0
- package/skills/sentry/references/concepts/monitors.md +78 -0
- package/skills/sentry/references/concepts/profiling.md +38 -0
- package/skills/sentry/references/concepts/reduce-volume.md +49 -0
- package/skills/sentry/references/concepts/releases.md +43 -0
- package/skills/sentry/references/concepts/session-replay.md +35 -0
- package/skills/sentry/references/concepts/tracing.md +54 -0
- package/skills/sentry/references/concepts/user-feedback.md +36 -0
- package/skills/sentry/references/debug-artifacts/android.md +68 -0
- package/skills/sentry/references/debug-artifacts/apple.md +96 -0
- package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
- package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
- package/skills/sentry/references/debug-artifacts/index.md +75 -0
- package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
- package/skills/sentry/references/debug-artifacts/matching.md +73 -0
- package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
- package/skills/sentry/references/first-error-setup.md +25 -0
- package/skills/sentry/references/instrumentation.md +30 -0
- package/skills/sentry/references/issues.md +32 -0
- package/skills/sentry/references/new-project.md +17 -0
- package/skills/sentry/references/otel-exporter.md +30 -0
- package/skills/sentry/references/release-workflow.md +31 -0
- package/skills/sentry/references/releases/ci-pipeline.md +214 -0
- package/skills/sentry/references/releases/index.md +93 -0
- package/skills/sentry/references/releases/suspect-commits.md +155 -0
- package/skills/sentry/references/releases/tagging.md +131 -0
- package/skills/sentry/references/releases/troubleshooting.md +67 -0
- package/skills/sentry/references/sdks/android/crons.md +305 -0
- package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
- package/skills/sentry/references/sdks/android/index.md +748 -0
- package/skills/sentry/references/sdks/android/integrations.md +48 -0
- package/skills/sentry/references/sdks/android/logging.md +374 -0
- package/skills/sentry/references/sdks/android/metrics.md +288 -0
- package/skills/sentry/references/sdks/android/profiling.md +397 -0
- package/skills/sentry/references/sdks/android/session-replay.md +406 -0
- package/skills/sentry/references/sdks/android/tracing.md +861 -0
- package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
- package/skills/sentry/references/sdks/browser/index.md +714 -0
- package/skills/sentry/references/sdks/browser/logging.md +315 -0
- package/skills/sentry/references/sdks/browser/profiling.md +236 -0
- package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
- package/skills/sentry/references/sdks/browser/tracing.md +561 -0
- package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
- package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
- package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
- package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
- package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
- package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
- package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
- package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
- package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
- package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
- package/skills/sentry/references/sdks/cocoa/index.md +497 -0
- package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
- package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
- package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
- package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
- package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
- package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
- package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
- package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
- package/skills/sentry/references/sdks/dotnet/index.md +614 -0
- package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
- package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
- package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
- package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
- package/skills/sentry/references/sdks/elixir/crons.md +371 -0
- package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
- package/skills/sentry/references/sdks/elixir/index.md +383 -0
- package/skills/sentry/references/sdks/elixir/logging.md +239 -0
- package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
- package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
- package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
- package/skills/sentry/references/sdks/flutter/index.md +728 -0
- package/skills/sentry/references/sdks/flutter/logging.md +387 -0
- package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
- package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
- package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
- package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
- package/skills/sentry/references/sdks/go/crons.md +270 -0
- package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
- package/skills/sentry/references/sdks/go/index.md +324 -0
- package/skills/sentry/references/sdks/go/logging.md +354 -0
- package/skills/sentry/references/sdks/go/metrics.md +273 -0
- package/skills/sentry/references/sdks/go/profiling.md +46 -0
- package/skills/sentry/references/sdks/go/tracing.md +366 -0
- package/skills/sentry/references/sdks/index.md +41 -0
- package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
- package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
- package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
- package/skills/sentry/references/sdks/nestjs/index.md +699 -0
- package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
- package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
- package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
- package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
- package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
- package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
- package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
- package/skills/sentry/references/sdks/nextjs/index.md +491 -0
- package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
- package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
- package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
- package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
- package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
- package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
- package/skills/sentry/references/sdks/node/crons.md +432 -0
- package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
- package/skills/sentry/references/sdks/node/index.md +942 -0
- package/skills/sentry/references/sdks/node/logging.md +380 -0
- package/skills/sentry/references/sdks/node/metrics.md +278 -0
- package/skills/sentry/references/sdks/node/profiling.md +373 -0
- package/skills/sentry/references/sdks/node/tracing.md +878 -0
- package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
- package/skills/sentry/references/sdks/php/crons.md +265 -0
- package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
- package/skills/sentry/references/sdks/php/index.md +362 -0
- package/skills/sentry/references/sdks/php/laravel.md +542 -0
- package/skills/sentry/references/sdks/php/logging.md +242 -0
- package/skills/sentry/references/sdks/php/metrics.md +193 -0
- package/skills/sentry/references/sdks/php/profiling.md +115 -0
- package/skills/sentry/references/sdks/php/symfony.md +552 -0
- package/skills/sentry/references/sdks/php/tracing.md +516 -0
- package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
- package/skills/sentry/references/sdks/python/crons.md +218 -0
- package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
- package/skills/sentry/references/sdks/python/index.md +361 -0
- package/skills/sentry/references/sdks/python/logging.md +234 -0
- package/skills/sentry/references/sdks/python/metrics.md +154 -0
- package/skills/sentry/references/sdks/python/profiling.md +120 -0
- package/skills/sentry/references/sdks/python/tracing.md +364 -0
- package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
- package/skills/sentry/references/sdks/react/index.md +492 -0
- package/skills/sentry/references/sdks/react/logging.md +364 -0
- package/skills/sentry/references/sdks/react/profiling.md +322 -0
- package/skills/sentry/references/sdks/react/react-features.md +1272 -0
- package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
- package/skills/sentry/references/sdks/react/tracing.md +1415 -0
- package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
- package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
- package/skills/sentry/references/sdks/react-native/index.md +1030 -0
- package/skills/sentry/references/sdks/react-native/logging.md +444 -0
- package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
- package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
- package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
- package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
- package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
- package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
- package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
- package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
- package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
- package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
- package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
- package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
- package/skills/sentry/references/sdks/ruby/crons.md +184 -0
- package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
- package/skills/sentry/references/sdks/ruby/index.md +297 -0
- package/skills/sentry/references/sdks/ruby/logging.md +168 -0
- package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
- package/skills/sentry/references/sdks/ruby/migration.md +321 -0
- package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
- package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
- package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
- package/skills/sentry/references/sdks/svelte/index.md +467 -0
- package/skills/sentry/references/sdks/svelte/logging.md +344 -0
- package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
- package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
- package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
- package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
- package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
- package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
- package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
- package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
- package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
- package/skills/sentry/references/search-query-language.md +226 -0
- package/skills/sentry/references/semantics/angular.md +7 -0
- package/skills/sentry/references/semantics/app.md +28 -0
- package/skills/sentry/references/semantics/art.md +17 -0
- package/skills/sentry/references/semantics/aws.md +43 -0
- package/skills/sentry/references/semantics/browser.md +34 -0
- package/skills/sentry/references/semantics/cache.md +12 -0
- package/skills/sentry/references/semantics/client.md +8 -0
- package/skills/sentry/references/semantics/cloud.md +12 -0
- package/skills/sentry/references/semantics/cloudflare.md +23 -0
- package/skills/sentry/references/semantics/code.md +11 -0
- package/skills/sentry/references/semantics/culture.md +11 -0
- package/skills/sentry/references/semantics/db.md +21 -0
- package/skills/sentry/references/semantics/device.md +43 -0
- package/skills/sentry/references/semantics/error.md +7 -0
- package/skills/sentry/references/semantics/event.md +8 -0
- package/skills/sentry/references/semantics/exception.md +10 -0
- package/skills/sentry/references/semantics/faas.md +19 -0
- package/skills/sentry/references/semantics/file.md +8 -0
- package/skills/sentry/references/semantics/flag.md +7 -0
- package/skills/sentry/references/semantics/gcp.md +16 -0
- package/skills/sentry/references/semantics/gen_ai.md +53 -0
- package/skills/sentry/references/semantics/general.md +11 -0
- package/skills/sentry/references/semantics/graphql.md +9 -0
- package/skills/sentry/references/semantics/grpc.md +19 -0
- package/skills/sentry/references/semantics/http.md +34 -0
- package/skills/sentry/references/semantics/index.md +63 -0
- package/skills/sentry/references/semantics/jsonrpc.md +8 -0
- package/skills/sentry/references/semantics/jvm.md +12 -0
- package/skills/sentry/references/semantics/koa.md +7 -0
- package/skills/sentry/references/semantics/logger.md +7 -0
- package/skills/sentry/references/semantics/mcp.md +37 -0
- package/skills/sentry/references/semantics/mdc.md +7 -0
- package/skills/sentry/references/semantics/messaging.md +23 -0
- package/skills/sentry/references/semantics/middleware.md +7 -0
- package/skills/sentry/references/semantics/navigation.md +9 -0
- package/skills/sentry/references/semantics/nel.md +11 -0
- package/skills/sentry/references/semantics/network.md +17 -0
- package/skills/sentry/references/semantics/os.md +15 -0
- package/skills/sentry/references/semantics/otel.md +10 -0
- package/skills/sentry/references/semantics/params.md +7 -0
- package/skills/sentry/references/semantics/process.md +14 -0
- package/skills/sentry/references/semantics/react.md +7 -0
- package/skills/sentry/references/semantics/remix.md +7 -0
- package/skills/sentry/references/semantics/resource.md +7 -0
- package/skills/sentry/references/semantics/rpc.md +10 -0
- package/skills/sentry/references/semantics/score.md +10 -0
- package/skills/sentry/references/semantics/sentry.md +69 -0
- package/skills/sentry/references/semantics/server.md +8 -0
- package/skills/sentry/references/semantics/service.md +8 -0
- package/skills/sentry/references/semantics/session.md +7 -0
- package/skills/sentry/references/semantics/state.md +7 -0
- package/skills/sentry/references/semantics/thread.md +8 -0
- package/skills/sentry/references/semantics/timber.md +7 -0
- package/skills/sentry/references/semantics/trpc.md +8 -0
- package/skills/sentry/references/semantics/ui.md +18 -0
- package/skills/sentry/references/semantics/url.md +15 -0
- package/skills/sentry/references/semantics/user.md +17 -0
- package/skills/sentry/references/semantics/user_agent.md +7 -0
- package/skills/sentry/references/semantics/vercel.md +42 -0
- package/skills/sentry/references/setup-verification.md +39 -0
- package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
- package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
- package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
- package/skills/sentry/references/snapshots/index.md +19 -0
- package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
- package/skills/sentry/references/snapshots/snapshots.md +123 -0
- package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
- package/skills/testing/LICENSE +21 -0
- package/skills/testing/NOTICE +7 -0
- package/skills/testing/SKILL.md +13 -19
- package/skills/testing/agents/openai.yaml +1 -2
- package/skills/testing/references/selection.md +23 -0
- package/skills/testing/references/tdd.md +19 -0
- package/skills/testing/references/test-design.md +17 -0
- package/src/catalog.ts +1 -7
- package/skills/build-effect-apis/SKILL.md +0 -81
- package/skills/build-effect-apis/agents/openai.yaml +0 -4
- package/skills/build-effect-clis/SKILL.md +0 -92
- package/skills/build-effect-clis/agents/openai.yaml +0 -4
- package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
- package/skills/effect-atom-state/SKILL.md +0 -97
- package/skills/effect-atom-state/agents/openai.yaml +0 -4
- package/skills/effect-ts/SKILL.md +0 -35
- package/skills/effect-ts/agents/openai.yaml +0 -4
- /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
- /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Suspect commits, code mappings, and resolve-by-commit
|
|
2
|
+
|
|
3
|
+
“Which change caused this?”
|
|
4
|
+
is the payoff of releases.
|
|
5
|
+
It is also the part most likely to be half-configured, because it runs on **two
|
|
6
|
+
independent mechanisms** and people assume they’re the same one.
|
|
7
|
+
|
|
8
|
+
## The two mechanisms
|
|
9
|
+
|
|
10
|
+
**1. SCM integration + code mappings + blame (the primary path).** With a GitHub or
|
|
11
|
+
GitLab integration installed and valid code mappings, Sentry takes the in-app frames
|
|
12
|
+
from the stack trace and asks the provider for blame on that exact file and line.
|
|
13
|
+
If the most recent commit there is less than a year old, it’s a suspect commit.
|
|
14
|
+
This path does **not** need releases at all.
|
|
15
|
+
|
|
16
|
+
**2. Release commit data (the fallback).** If mechanism 1 isn’t available or fails,
|
|
17
|
+
Sentry falls back to the commits you associated with the release (`set-commits`) and
|
|
18
|
+
matches files touched by those commits against files in the stack trace.
|
|
19
|
+
This is the path for orgs that don’t want Sentry connecting to their repo — send commit
|
|
20
|
+
metadata explicitly and skip the integration.
|
|
21
|
+
|
|
22
|
+
Sentry tries mechanism 1 by default and falls back to 2. Which one you’re relying on
|
|
23
|
+
determines what to fix when it’s empty.
|
|
24
|
+
|
|
25
|
+
## Prerequisites for either mechanism
|
|
26
|
+
|
|
27
|
+
- **Readable in-app frames.** Both mechanisms work off file paths in the stack trace.
|
|
28
|
+
Minified or unsymbolicated frames have nothing usable, so source maps (JavaScript) or
|
|
29
|
+
debug files (native/mobile) come first.
|
|
30
|
+
That is a separate procedure — say so and get it done before promising suspect
|
|
31
|
+
commits.
|
|
32
|
+
- **Frames marked in-app.** A trace where everything is vendor code yields no suspect
|
|
33
|
+
commit.
|
|
34
|
+
- **Events created after setup.** Sentry does not backfill: issues that existed before
|
|
35
|
+
the integration was connected won’t gain suspect commits.
|
|
36
|
+
|
|
37
|
+
## Connecting the repository (the step you can’t do)
|
|
38
|
+
|
|
39
|
+
Installing the SCM integration is an OAuth flow in the Sentry UI. **The agent cannot do
|
|
40
|
+
this** — hand it to the user explicitly rather than leaving it implied:
|
|
41
|
+
|
|
42
|
+
1. **Settings → Integrations**, pick GitHub or GitLab.
|
|
43
|
+
2. Configure/install it, granting access to the relevant org.
|
|
44
|
+
3. **Add the repository** for this project.
|
|
45
|
+
|
|
46
|
+
Then `sentry-cli repos list` confirms it from the terminal, and the repo name it prints
|
|
47
|
+
(`owner-name/repo-name`) is the exact string `--commit "repo@sha"` expects.
|
|
48
|
+
|
|
49
|
+
## Code mappings
|
|
50
|
+
|
|
51
|
+
A code mapping translates the path prefix in a stack trace to the path prefix in the
|
|
52
|
+
repository. Without one, blame lookups can’t find the file.
|
|
53
|
+
|
|
54
|
+
**Often already done:** Sentry auto-creates code mappings for JavaScript, Python, Java,
|
|
55
|
+
PHP, Ruby, Go, C#, and Kotlin projects in orgs with the GitHub integration installed.
|
|
56
|
+
Check before building any.
|
|
57
|
+
|
|
58
|
+
### Deriving the two roots from a real frame
|
|
59
|
+
|
|
60
|
+
1. Open an event and find an **in-app** frame.
|
|
61
|
+
Take its `filename` — the `{}` event-JSON view shows `filename` and `abs_path`
|
|
62
|
+
verbatim if the UI truncates it.
|
|
63
|
+
Say it’s `src/main.py`.
|
|
64
|
+
2. Find that same file in the repository.
|
|
65
|
+
Say it lives at `flask/src/main.py` (the repo name itself is not part of the path).
|
|
66
|
+
3. The shared suffix tells you the pair: **Stack Trace Root** `src/`, **Source Code
|
|
67
|
+
Root** `flask/src/`.
|
|
68
|
+
|
|
69
|
+
Prefer a non-empty stack trace root.
|
|
70
|
+
Java and other package-name platforms need extra care — the prefix is a package path
|
|
71
|
+
(`io/sentry/android/core`), not a file path.
|
|
72
|
+
|
|
73
|
+
### In the UI
|
|
74
|
+
|
|
75
|
+
**Settings → Integrations → [your SCM] → Configurations → Configure → Code Mappings →
|
|
76
|
+
Add Mapping.** Fields: project, repo, default branch (the fallback when commit tracking
|
|
77
|
+
isn’t set up), stack trace root, source code root.
|
|
78
|
+
One mapping per repo per project — a project fed by several repos needs several.
|
|
79
|
+
|
|
80
|
+
### In bulk, from the CLI
|
|
81
|
+
|
|
82
|
+
`sentry-cli code-mappings upload` (CLI 3.3.4+) keeps mappings in version control and
|
|
83
|
+
lets CI resync them as the repo layout moves.
|
|
84
|
+
It needs an **organization token with the `org:ci` scope**:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
sentry-cli code-mappings upload ./mappings.json
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
[
|
|
92
|
+
{
|
|
93
|
+
"stackRoot": "io/sentry/android/core",
|
|
94
|
+
"sourceRoot": "sentry-android-core/src/main/java/io/sentry/android/core"
|
|
95
|
+
},
|
|
96
|
+
{ "stackRoot": "io/sentry", "sourceRoot": "sentry/src/main/java/io/sentry" }
|
|
97
|
+
]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Several mappings may share a `stackRoot` with different `sourceRoot`s — that’s how
|
|
101
|
+
monorepos with a repeated package prefix work.
|
|
102
|
+
Sentry evaluates from most specific to least specific and takes the first that resolves
|
|
103
|
+
to a real file.
|
|
104
|
+
|
|
105
|
+
Code mappings also power source context and CODEOWNERS-based ownership, so they’re worth
|
|
106
|
+
getting right beyond suspect commits.
|
|
107
|
+
|
|
108
|
+
## Resolve by commit and by PR
|
|
109
|
+
|
|
110
|
+
Once commits are associated, the commit message closes the loop:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
Prevent empty queries on users
|
|
114
|
+
|
|
115
|
+
Fixes PROJECT-NAME-12A
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Sentry links the commit to the issue immediately, but **does not resolve it yet** — it
|
|
119
|
+
marks the issue resolved when a release containing that commit is created.
|
|
120
|
+
`fixes <SHORT-ID>` in a PR title or description works the same way, resolving when the
|
|
121
|
+
merge commit lands in a release.
|
|
122
|
+
The short ID is at the top of the Issue Details page.
|
|
123
|
+
|
|
124
|
+
This is the mechanism that closes issues by shipping rather than by a manual status
|
|
125
|
+
change, and it is dead weight without commit association — worth mentioning to the user
|
|
126
|
+
as a reason to finish this setup.
|
|
127
|
+
|
|
128
|
+
## Auto-assignment
|
|
129
|
+
|
|
130
|
+
**[Project] → Settings → Ownership Rules → “Auto-assign to suspect commits”** assigns
|
|
131
|
+
new issues to the suspect commit’s author.
|
|
132
|
+
Caveats worth stating up front:
|
|
133
|
+
|
|
134
|
+
- A manually assigned issue is never reassigned.
|
|
135
|
+
- The author must be a member of the Sentry org, matched by commit email.
|
|
136
|
+
- Assignment can be skipped under high new-issue rates, retried on the next event.
|
|
137
|
+
- On GitHub, “Keep my email address private” in the author’s account settings prevents
|
|
138
|
+
the match.
|
|
139
|
+
|
|
140
|
+
## When suspect commits are missing
|
|
141
|
+
|
|
142
|
+
Work down this list; it’s ordered by how often it’s the cause:
|
|
143
|
+
|
|
144
|
+
1. The stack trace has no in-app frames, or no stack trace at all.
|
|
145
|
+
2. Code mappings are missing or wrong, so no in-app frame resolves to a repo file.
|
|
146
|
+
3. The issue predates the integration.
|
|
147
|
+
4. Blame on those lines is older than a year.
|
|
148
|
+
5. The SCM integration got disconnected (re-check **Settings → Integrations**).
|
|
149
|
+
6. You’re on the fallback path and `set-commits` never ran, or ran without `patch_set`
|
|
150
|
+
data — file-level changes are what power suggested assignees.
|
|
151
|
+
|
|
152
|
+
## Related
|
|
153
|
+
|
|
154
|
+
- [`ci-pipeline.md`](ci-pipeline.md) — `set-commits`, the fallback mechanism’s input.
|
|
155
|
+
- [`troubleshooting.md`](troubleshooting.md) — the wider failure table.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Release tagging (`release` and `environment` on events)
|
|
2
|
+
|
|
3
|
+
Tagging every event with the version it came from is the SDK half of releases, and the
|
|
4
|
+
half that is pure configuration — one or two `init` options, no CI, no integrations.
|
|
5
|
+
It is worth doing as soon as anything ships to production: without it every event is
|
|
6
|
+
“unknown release” and regression detection, crash-free rates, and suspect commits have
|
|
7
|
+
nothing to attach to.
|
|
8
|
+
|
|
9
|
+
This file covers the tag itself.
|
|
10
|
+
Creating the release _object_ — associating commits, finalizing it, recording deploys —
|
|
11
|
+
is a CI-side job: [`ci-pipeline.md`](ci-pipeline.md).
|
|
12
|
+
|
|
13
|
+
## The invariant
|
|
14
|
+
|
|
15
|
+
**The release name the SDK tags events with must be byte-identical to the name CI
|
|
16
|
+
creates the release under.** If they differ by a `v` prefix, a short vs.
|
|
17
|
+
full SHA, or a trailing build number, you get two releases: one with commits and a
|
|
18
|
+
deploy but no events, and one with events but no commits.
|
|
19
|
+
Nothing errors — the features just stay empty.
|
|
20
|
+
|
|
21
|
+
Pick the name **once**, in one place, and derive both sides from it.
|
|
22
|
+
In CI that usually means computing it into an environment variable that the build and
|
|
23
|
+
the release step both read.
|
|
24
|
+
This matters even if you are only doing the tagging half today: choose a name a future
|
|
25
|
+
CI step can reproduce exactly.
|
|
26
|
+
|
|
27
|
+
## Naming rules
|
|
28
|
+
|
|
29
|
+
Release names are **global per Sentry organization**, not per project.
|
|
30
|
+
Two projects that both ship `1.0.0` will collide into one release, so prefix with
|
|
31
|
+
something project-specific (`checkout-api@1.0.0`, not `1.0.0`).
|
|
32
|
+
|
|
33
|
+
A name cannot:
|
|
34
|
+
|
|
35
|
+
- contain newlines, tabs, forward slashes (`/`), or backslashes (`\`)
|
|
36
|
+
- be entirely `.`, `..`, or a space
|
|
37
|
+
- exceed 200 characters
|
|
38
|
+
|
|
39
|
+
Avoid `1.0.0 (42)` — parentheses are how Sentry _displays_ `foo@1.0+2`, so using them in
|
|
40
|
+
the name itself errors.
|
|
41
|
+
|
|
42
|
+
## Two naming strategies
|
|
43
|
+
|
|
44
|
+
**Semantic versioning** — `package@version` or `package@version+build`, e.g.
|
|
45
|
+
`my.project.name@2.3.12+1234`. This is the right choice for anything with a user-facing
|
|
46
|
+
version, and required for mobile, where `package` is the bundle/package id, `version` is
|
|
47
|
+
`CFBundleShortVersionString` / `versionName`, and `build` is `CFBundleVersion` /
|
|
48
|
+
`versionCode`.
|
|
49
|
+
|
|
50
|
+
**Commit SHA** — the full hash, e.g. `da39a3ee5e6b4b0d3255bfef95601890afd80709`. The
|
|
51
|
+
right choice for continuously-deployed services with no meaningful version number.
|
|
52
|
+
`sentry-cli releases propose-version` derives it for you.
|
|
53
|
+
|
|
54
|
+
The choice has a side effect worth knowing: Sentry auto-detects whether a project is
|
|
55
|
+
using semver by looking at recent releases, and **regression detection and
|
|
56
|
+
`release:latest` sorting behave differently** between semver and SHA/time-based
|
|
57
|
+
projects. Don’t switch schemes casually mid-project.
|
|
58
|
+
|
|
59
|
+
## Getting the name onto events
|
|
60
|
+
|
|
61
|
+
Tagging events is the SDK’s half.
|
|
62
|
+
Most SDKs already produce _some_ release name — the table below is as much about knowing
|
|
63
|
+
what the default is as about overriding it, because a default you didn’t know about is
|
|
64
|
+
exactly what breaks the invariant above.
|
|
65
|
+
|
|
66
|
+
| Platform | Default when you set nothing | How to set it explicitly |
|
|
67
|
+
| ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
|
68
|
+
| JavaScript, bundled (`browser`, `react`, `svelte`, `nextjs`, `react-router-framework`, `tanstack-start`, `cloudflare`) | The Sentry bundler plugin detects a name — Cordova, Heroku, AWS CodeBuild, CircleCI, Xcode, and Gradle environments, otherwise the git `HEAD` commit SHA — and **injects** it into the bundle for the SDK to pick up | `release.name` in the bundler plugin options, or `SENTRY_RELEASE` at build time |
|
|
69
|
+
| JavaScript, server-side (`node`, `nestjs`) | `SENTRY_RELEASE` from the runtime environment | `release` in `Sentry.init`, or set `SENTRY_RELEASE` where the process runs |
|
|
70
|
+
| Python | `SENTRY_RELEASE`, otherwise an inferred git commit SHA | `release="myapp@1.0.0"` in `sentry_sdk.init` |
|
|
71
|
+
| Ruby | First match of: `SENTRY_RELEASE`, `KAMAL_VERSION`, git HEAD SHA, a `REVISION` file (Capistrano), `HEROKU_SLUG_COMMIT` | `config.release` |
|
|
72
|
+
| Go | `SENTRY_RELEASE` | `Release` in `sentry.ClientOptions` |
|
|
73
|
+
| PHP (incl. Laravel, Symfony) | `SENTRY_RELEASE` | `release` in `\Sentry\init([...])`, or the framework’s Sentry config |
|
|
74
|
+
| .NET | First match of: `SENTRY_RELEASE`, `AssemblyInformationalVersionAttribute`, `AssemblyVersionAttribute` — the latter two yielding `<assembly-name>@<version>` | `options.Release` |
|
|
75
|
+
| Elixir | — | `config :sentry, release: "myapp@1.0.0"` in `config/prod.exs` |
|
|
76
|
+
| Android | `packageName@versionName+versionCode`, e.g. `my.project.name@2.3.12+1234` | `io.sentry.release` meta-data in `AndroidManifest.xml`, or `options.release` if initializing manually |
|
|
77
|
+
| Apple / Cocoa | `CFBundleIdentifier@CFBundleShortVersionString+CFBundleVersion` | `options.releaseName` |
|
|
78
|
+
| Flutter / Dart | `name@version` from `pubspec.yaml`; on Android and iOS `packageName@versionName+versionCode` | `options.release`; on Flutter Web pass `SENTRY_RELEASE` via `--dart-define` |
|
|
79
|
+
| React Native | The app version and build number from the native project | `release` **and** `dist` in `Sentry.init` — read the warning below |
|
|
80
|
+
|
|
81
|
+
Two traps in that table:
|
|
82
|
+
|
|
83
|
+
- **Don’t set `release` in `Sentry.init` when a Sentry bundler plugin is in the build.**
|
|
84
|
+
The plugin injects its own value; a hardcoded `init` release silently wins over it and
|
|
85
|
+
drifts from the release CI created.
|
|
86
|
+
Change `release.name` in the plugin options instead.
|
|
87
|
+
- **React Native:** setting a custom `release`/`dist` **disables the automatic source
|
|
88
|
+
map upload script**, which only recognizes the default values.
|
|
89
|
+
You then have to upload source maps manually — using the React Native source map
|
|
90
|
+
procedure. Prefer leaving the defaults alone on React Native unless you have a reason.
|
|
91
|
+
|
|
92
|
+
The platform’s own SDK reference has the surrounding `init` and build-plugin
|
|
93
|
+
configuration if you need to see where these options sit.
|
|
94
|
+
|
|
95
|
+
## `dist` — the second half of mobile identity
|
|
96
|
+
|
|
97
|
+
`dist` disambiguates multiple builds of the same release: same `1.0.0`, build `51` vs
|
|
98
|
+
`52`. It matters on iOS, Android, and React Native, where the store version stays put
|
|
99
|
+
across builds, and it must match between the SDK and any artifact upload for that build.
|
|
100
|
+
Server-side platforms can ignore it.
|
|
101
|
+
|
|
102
|
+
## Environment
|
|
103
|
+
|
|
104
|
+
`environment` is a separate tag (`environment` option, or `SENTRY_ENVIRONMENT`) and
|
|
105
|
+
releases need it to be useful: it’s what keeps staging crashes out of production
|
|
106
|
+
crash-free rates, and a deploy is always recorded _into_ an environment.
|
|
107
|
+
Set it alongside the release, not later.
|
|
108
|
+
|
|
109
|
+
## Release health needs sessions
|
|
110
|
+
|
|
111
|
+
Crash-free rate and adoption come from **session** data, not errors, so they only appear
|
|
112
|
+
if the SDK sends sessions.
|
|
113
|
+
Session tracking is on by default in most modern SDKs.
|
|
114
|
+
Release health is supported on Android, Apple, Flutter/Dart, browser and Node
|
|
115
|
+
JavaScript, React Native, .NET, PHP, and Python; it is not available on every platform,
|
|
116
|
+
so don’t promise the graphs before checking the platform.
|
|
117
|
+
|
|
118
|
+
## When the tag isn’t enough
|
|
119
|
+
|
|
120
|
+
Tagging alone gets you release-scoped filtering, regression detection, and (where
|
|
121
|
+
supported) release health.
|
|
122
|
+
It does **not** get you commits on the release, deploy tracking, suspect commits, or
|
|
123
|
+
`Fixes PROJECT-NAME-12A` resolution — those need a release created in CI with its
|
|
124
|
+
commits associated ([`ci-pipeline.md`](ci-pipeline.md)) and, for suspect commits, an SCM
|
|
125
|
+
integration ([`suspect-commits.md`](suspect-commits.md)). Flag that as the natural
|
|
126
|
+
follow-up rather than implying the tag finished the job.
|
|
127
|
+
|
|
128
|
+
## Related
|
|
129
|
+
|
|
130
|
+
- [`../search-query-language.md`](../search-query-language.md) — `release`,
|
|
131
|
+
`firstRelease`, `release.stage`.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# When releases are set up but nothing works
|
|
2
|
+
|
|
3
|
+
Release setup fails **quietly**. Every step below can succeed on its own while producing
|
|
4
|
+
no visible feature, so diagnose by symptom rather than re-running the pipeline and
|
|
5
|
+
hoping.
|
|
6
|
+
|
|
7
|
+
Start by establishing which half is broken: does a recent event carry the release tag
|
|
8
|
+
you expect, and does a release object with that exact name exist with commits attached?
|
|
9
|
+
Almost every entry here is one of those two answers being no.
|
|
10
|
+
|
|
11
|
+
## Symptom table
|
|
12
|
+
|
|
13
|
+
| Symptom | Cause | Fix |
|
|
14
|
+
| ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
15
|
+
| Events show no release, or `release: unknown` | The SDK isn’t tagging. Either nothing set it and the platform has no default, or the value is computed at build time and never reached the runtime | Set it per [`tagging.md`](tagging.md); for bundled JS confirm the plugin’s `inject` is on and the built bundle really contains the value |
|
|
16
|
+
| The release exists in Sentry with commits and a deploy, but **0 events** | Name mismatch — the classic failure. `v1.2.3` vs `1.2.3`, short vs full SHA, a build number on one side only | Derive both sides from one variable; compare the release list against the `release` tag on a real event, character for character |
|
|
17
|
+
| Events attribute correctly, but the release has **no commits** | Commit association never ran, or ran outside the repo | Take the path that matches the build ([`ci-pipeline.md`](ci-pipeline.md)): if a Sentry bundler plugin is already there, fix `release.setCommits` on it rather than adding a second pipeline; otherwise add `set-commits` to CI. Either way it must run where the git repo is checked out |
|
|
18
|
+
| `set-commits --auto` fails, or an “Unable to Fetch Commits” email arrives | The previous release’s commit no longer exists in the repo (squash-merge, rebase, amend, force-push), or CI made a shallow clone | `fetch-depth: 0` on checkout; add `--ignore-missing` (`ignoreMissing: true` in the bundler plugin) so it falls back instead of failing |
|
|
19
|
+
| Commits are associated but there are **no suspect commits** | Usually the blame path, not the release path | Work the ordered list in [`suspect-commits.md`](suspect-commits.md) — in-app frames, then code mappings, then integration state |
|
|
20
|
+
| Suspect commit shows, but no suggested assignee | The commit author isn’t in the Sentry org, or their email is hidden | Match the commit email to an org member; on GitHub uncheck “Keep my email address private” |
|
|
21
|
+
| Frames are minified/unsymbolicated, so nothing resolves | Missing artifacts — a different problem wearing this costume | Upload source maps (JavaScript) or debug files (native/mobile); that procedure is separate from releases |
|
|
22
|
+
| “Resolve in next release” never resolves anything | The release was never **finalized**, so Sentry has no anchor for “next” | Call `sentry-cli releases finalize` at deploy time (or `--finalize` on `new`) |
|
|
23
|
+
| `Fixes PROJECT-NAME-12A` links the commit but the issue stays unresolved | Working as designed until a release **containing that commit** is created | Ensure the post-merge release runs `set-commits` and includes the merge commit |
|
|
24
|
+
| Release health / crash-free rate is empty | No sessions: session tracking disabled, no `environment` set, or the platform doesn’t support release health | Confirm platform support and session tracking in [`tagging.md`](tagging.md) |
|
|
25
|
+
| Production crash-free rate looks terrible | Staging events are landing in the same environment | Set `environment` per build; record deploys into the right environment |
|
|
26
|
+
| No deploys listed on the release | `deploys new` never ran — creating a release does not create a deploy | Add the deploy step; verify with `sentry-cli deploys list --release "$VERSION"` |
|
|
27
|
+
| Two releases appear for one build | A bundler plugin **and** a hand-rolled `sentry-cli` pipeline both ran, with different names | Keep one. If the plugin is in the build, configure it rather than adding CLI steps |
|
|
28
|
+
| Nothing uploads and nothing errors | Missing `SENTRY_AUTH_TOKEN` — most tools skip silently | [`../auth-token.md`](../auth-token.md), including how to check for presence without printing the value |
|
|
29
|
+
| `403` on `code-mappings upload` | Token lacks the `org:ci` scope | Issue an org token with `org:ci` |
|
|
30
|
+
| One project’s release swallowed another’s events | Release names are **global per organization** | Prefix with the project (`checkout-api@1.0.0`) |
|
|
31
|
+
|
|
32
|
+
## Checking from the terminal
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
sentry-cli repos list # is an SCM integration connected, and under what name
|
|
36
|
+
sentry-cli deploys list --release "$VERSION" # did the deploy get recorded
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Checking with the MCP
|
|
40
|
+
|
|
41
|
+
The two halves need two different tools, and using the wrong one is how a mismatch gets
|
|
42
|
+
missed.
|
|
43
|
+
|
|
44
|
+
**The tagging half** — the release fields, but they aren’t interchangeable between
|
|
45
|
+
tools:
|
|
46
|
+
|
|
47
|
+
- `release:<exact-name>` — works on both.
|
|
48
|
+
Do events exist under the name CI created?
|
|
49
|
+
Zero hits here, combined with a release object that _does_ have commits, is the
|
|
50
|
+
mismatch signature.
|
|
51
|
+
- `firstRelease:<name>` — did this issue first appear in that release (regression
|
|
52
|
+
detection working). **`search_issues` only.** On `search_events` it is silently
|
|
53
|
+
rewritten to `release:`, which returns plausible hits for a different question — check
|
|
54
|
+
`## Executed Search` if you’re unsure what ran.
|
|
55
|
+
|
|
56
|
+
The grammar is in [`../search-query-language.md`](../search-query-language.md).
|
|
57
|
+
|
|
58
|
+
**The CI half** — `get_release_details` for that exact version reports the commits and
|
|
59
|
+
deploys hanging off the release.
|
|
60
|
+
An event search can never answer this; it only ever sees the tag.
|
|
61
|
+
It’s a catalog tool, so reach it via `search_sentry_tools` / `execute_sentry_tool` if it
|
|
62
|
+
isn’t exposed directly.
|
|
63
|
+
|
|
64
|
+
## Related
|
|
65
|
+
|
|
66
|
+
- [`tagging.md`](tagging.md) · [`ci-pipeline.md`](ci-pipeline.md) ·
|
|
67
|
+
[`suspect-commits.md`](suspect-commits.md)
|