Skip to content

Failure Patterns

Pipeline Doctor ships with 88 regex-based failure patterns across 8 categories. When analyze_failure or suggest_fix is called, logs are matched against these patterns to classify the root cause and generate fix suggestions.

Categories

Dependency (20 patterns)

Package installation, resolution, and registry failures.

PatternConfidenceDescription
npm-eresolve95%npm peer dependency conflict — two packages require incompatible versions of a shared dependency
npm-missing-package90%npm package not found in registry
npm-engine-mismatch90%npm engine version mismatch — the project requires a different Node.js or npm version
npm-lockfile-outdated95%Lockfile is out of sync with package.json
npm-cache-integrity85%npm cache integrity check failed — cached package is corrupted
npm-audit-critical70%Critical npm security vulnerabilities detected
yarn-resolution90%Yarn dependency resolution failure
yarn-integrity90%Yarn lockfile integrity mismatch — checksum does not match
pnpm-lockfile-outdated95%pnpm lockfile out of date with package.json
pip-dependency90%Python pip dependency resolution failure
pip-build-fail85%Python pip wheel build failure — likely missing system libraries
go-module-not-found85%Go module not found — missing or inaccessible module
cargo-version85%Rust cargo dependency version conflict
maven-not-found85%Maven artifact not found in repository
gradle-resolution85%Gradle dependency resolution failure
nuget-not-found85%.NET NuGet package not found
composer-not-found85%PHP Composer package not found or version unsatisfiable
gem-not-found85%Ruby gem not found or version conflict
private-registry-auth90%Authentication failure against a private package registry
git-submodule-fail85%Git submodule initialization or clone failed

Environment (14 patterns)

Runtime environment, toolchain, and system configuration issues.

PatternConfidenceDescription
node-version-mismatch90%Node.js version mismatch — project requires a different version than the runner provides
python-version-mismatch85%Python version not available or incompatible
python-syntax-version80%Python syntax error — likely running on an older Python version
python-module-not-found80%Python module not found — missing dependency or wrong environment
java-version-mismatch90%Java version mismatch or JAVA_HOME not configured
ruby-version-mismatch85%Ruby version mismatch with Gemfile requirements
dotnet-sdk-mismatch85%.NET SDK version does not support the target framework
command-not-found85%Required command or tool is not installed on the runner
docker-not-running95%Docker daemon is not running or not available on the runner
missing-env-var80%Required environment variable is not set
missing-system-library85%Missing native system library or header file
shell-syntax80%Shell syntax error — likely a bash-ism running in sh
chrome-headless85%Headless Chrome/Chromium failed to launch on CI runner
corepack-not-enabled85%Project uses Corepack packageManager field but Corepack is not enabled

Test (13 patterns)

Test execution, assertion, and coverage failures.

PatternConfidenceDescription
jest-assertion95%Jest test assertion failure — expected vs received values do not match
jest-snapshot95%Jest snapshot test does not match stored snapshot
pytest-assertion90%Pytest assertion failure
pytest-fixture-not-found85%Pytest fixture not found or collection error
vitest-fail85%Vitest test assertion failure
go-test-fail85%Go test failure
rspec-failure85%RSpec test failure
dotnet-test-fail80%.NET test run failure
test-suites-failed85%One or more test suites reported failures
test-db-connection90%Test database or service connection refused — service is not running or not ready
test-fixture-missing80%Test fixture or data file not found
coverage-threshold85%Code coverage is below the configured threshold
test-exit-nonzero50%Process exited with non-zero code (generic test failure)

Timeout (7 patterns)

Job, step, and operation timeout failures.

PatternConfidenceDescription
job-timeout95%Job exceeded the maximum execution time limit
step-timeout85%A workflow step timed out
test-timeout90%Test exceeded its timeout — an async operation likely did not complete
download-timeout85%Network download or connection timed out
health-check-timeout85%Service health check timed out during startup
docker-pull-timeout85%Docker image pull timed out (registry slow or rate-limited)
terraform-lock-timeout85%Terraform state lock acquisition timed out

Permission (8 patterns)

Authentication and authorization failures.

PatternConfidenceDescription
http-40390%HTTP 403 Forbidden — access denied to a resource
http-40195%HTTP 401 Unauthorized — authentication failed
token-scope90%Authentication token lacks required scopes or permissions
npm-publish-auth90%npm registry authentication failure during publish
docker-push-denied90%Docker/container registry push denied — not authenticated
ssh-key-auth90%SSH authentication failure — public key rejected or host key mismatch
aws-credentials90%AWS credentials not found or invalid
eacces-permission80%File system permission denied

Config (11 patterns)

Workflow configuration, syntax, and action reference errors.

PatternConfidenceDescription
yaml-syntax95%Workflow YAML syntax error
unknown-action90%Referenced GitHub Action not found or inaccessible
missing-input90%Required action input is not provided in the workflow
deprecated-command70%Workflow uses a deprecated GitHub Actions command
invalid-runner85%No runner available matching the requested labels
empty-matrix90%Matrix strategy produced zero job combinations
invalid-cron90%Invalid cron expression in schedule trigger
invalid-expression90%Invalid GitHub Actions expression syntax
docker-copy-fail85%Docker COPY failed — file not in build context
checkout-ref-fail85%Git checkout failed — branch or ref does not exist
artifact-not-found85%Workflow artifact not found for download

Resource (7 patterns)

Runner resource exhaustion.

PatternConfidenceDescription
oom-heap95%Node.js process ran out of heap memory
disk-full95%Runner disk is full — no space left on device
exit-13790%Process killed with signal 9 (SIGKILL) — typically an OOM kill by the OS or container runtime
exit-139-segfault85%Segmentation fault (exit code 139)
container-memory-limit90%Container hit its memory limit
too-many-files85%Process exceeded the open file descriptor limit
inotify-limit90%inotify file watcher limit reached

Network (8 patterns)

Network connectivity and external service failures.

PatternConfidenceDescription
dns-failure90%DNS resolution failed — hostname could not be resolved
connection-refused75%TCP connection refused by remote host
ssl-certificate90%SSL/TLS certificate validation failed
registry-timeout85%Package registry timed out
rate-limit85%API rate limit exceeded
docker-hub-rate-limit95%Docker Hub pull rate limit exceeded
connection-reset80%Network connection was reset unexpectedly
fetch-failed80%HTTP fetch request failed

Unknown

When logs contain error indicators (e.g., error, failed, exit codes) but no pattern matches, the unknown category is returned with confidence 10%. The matched error lines are included so the AI assistant can still provide context-aware guidance.

Dynamic Fix Suggestions

Five patterns use dynamic suggestFix functions that extract context from the matched error lines to generate more specific fixes:

PatternWhat it extracts
npm-eresolveConflicting package name from the While resolving: line
node-version-mismatchRequired version number for the setup-node suggestion
command-not-foundMissing command name for the installation suggestion
missing-env-varVariable name for the env block example
missing-inputInput field name for the with block example

This is why patterns are stored as TypeScript rather than JSON — dynamic functions can't be serialized as data.