Appearance
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.
| Pattern | Confidence | Description |
|---|---|---|
npm-eresolve | 95% | npm peer dependency conflict — two packages require incompatible versions of a shared dependency |
npm-missing-package | 90% | npm package not found in registry |
npm-engine-mismatch | 90% | npm engine version mismatch — the project requires a different Node.js or npm version |
npm-lockfile-outdated | 95% | Lockfile is out of sync with package.json |
npm-cache-integrity | 85% | npm cache integrity check failed — cached package is corrupted |
npm-audit-critical | 70% | Critical npm security vulnerabilities detected |
yarn-resolution | 90% | Yarn dependency resolution failure |
yarn-integrity | 90% | Yarn lockfile integrity mismatch — checksum does not match |
pnpm-lockfile-outdated | 95% | pnpm lockfile out of date with package.json |
pip-dependency | 90% | Python pip dependency resolution failure |
pip-build-fail | 85% | Python pip wheel build failure — likely missing system libraries |
go-module-not-found | 85% | Go module not found — missing or inaccessible module |
cargo-version | 85% | Rust cargo dependency version conflict |
maven-not-found | 85% | Maven artifact not found in repository |
gradle-resolution | 85% | Gradle dependency resolution failure |
nuget-not-found | 85% | .NET NuGet package not found |
composer-not-found | 85% | PHP Composer package not found or version unsatisfiable |
gem-not-found | 85% | Ruby gem not found or version conflict |
private-registry-auth | 90% | Authentication failure against a private package registry |
git-submodule-fail | 85% | Git submodule initialization or clone failed |
Environment (14 patterns)
Runtime environment, toolchain, and system configuration issues.
| Pattern | Confidence | Description |
|---|---|---|
node-version-mismatch | 90% | Node.js version mismatch — project requires a different version than the runner provides |
python-version-mismatch | 85% | Python version not available or incompatible |
python-syntax-version | 80% | Python syntax error — likely running on an older Python version |
python-module-not-found | 80% | Python module not found — missing dependency or wrong environment |
java-version-mismatch | 90% | Java version mismatch or JAVA_HOME not configured |
ruby-version-mismatch | 85% | Ruby version mismatch with Gemfile requirements |
dotnet-sdk-mismatch | 85% | .NET SDK version does not support the target framework |
command-not-found | 85% | Required command or tool is not installed on the runner |
docker-not-running | 95% | Docker daemon is not running or not available on the runner |
missing-env-var | 80% | Required environment variable is not set |
missing-system-library | 85% | Missing native system library or header file |
shell-syntax | 80% | Shell syntax error — likely a bash-ism running in sh |
chrome-headless | 85% | Headless Chrome/Chromium failed to launch on CI runner |
corepack-not-enabled | 85% | Project uses Corepack packageManager field but Corepack is not enabled |
Test (13 patterns)
Test execution, assertion, and coverage failures.
| Pattern | Confidence | Description |
|---|---|---|
jest-assertion | 95% | Jest test assertion failure — expected vs received values do not match |
jest-snapshot | 95% | Jest snapshot test does not match stored snapshot |
pytest-assertion | 90% | Pytest assertion failure |
pytest-fixture-not-found | 85% | Pytest fixture not found or collection error |
vitest-fail | 85% | Vitest test assertion failure |
go-test-fail | 85% | Go test failure |
rspec-failure | 85% | RSpec test failure |
dotnet-test-fail | 80% | .NET test run failure |
test-suites-failed | 85% | One or more test suites reported failures |
test-db-connection | 90% | Test database or service connection refused — service is not running or not ready |
test-fixture-missing | 80% | Test fixture or data file not found |
coverage-threshold | 85% | Code coverage is below the configured threshold |
test-exit-nonzero | 50% | Process exited with non-zero code (generic test failure) |
Timeout (7 patterns)
Job, step, and operation timeout failures.
| Pattern | Confidence | Description |
|---|---|---|
job-timeout | 95% | Job exceeded the maximum execution time limit |
step-timeout | 85% | A workflow step timed out |
test-timeout | 90% | Test exceeded its timeout — an async operation likely did not complete |
download-timeout | 85% | Network download or connection timed out |
health-check-timeout | 85% | Service health check timed out during startup |
docker-pull-timeout | 85% | Docker image pull timed out (registry slow or rate-limited) |
terraform-lock-timeout | 85% | Terraform state lock acquisition timed out |
Permission (8 patterns)
Authentication and authorization failures.
| Pattern | Confidence | Description |
|---|---|---|
http-403 | 90% | HTTP 403 Forbidden — access denied to a resource |
http-401 | 95% | HTTP 401 Unauthorized — authentication failed |
token-scope | 90% | Authentication token lacks required scopes or permissions |
npm-publish-auth | 90% | npm registry authentication failure during publish |
docker-push-denied | 90% | Docker/container registry push denied — not authenticated |
ssh-key-auth | 90% | SSH authentication failure — public key rejected or host key mismatch |
aws-credentials | 90% | AWS credentials not found or invalid |
eacces-permission | 80% | File system permission denied |
Config (11 patterns)
Workflow configuration, syntax, and action reference errors.
| Pattern | Confidence | Description |
|---|---|---|
yaml-syntax | 95% | Workflow YAML syntax error |
unknown-action | 90% | Referenced GitHub Action not found or inaccessible |
missing-input | 90% | Required action input is not provided in the workflow |
deprecated-command | 70% | Workflow uses a deprecated GitHub Actions command |
invalid-runner | 85% | No runner available matching the requested labels |
empty-matrix | 90% | Matrix strategy produced zero job combinations |
invalid-cron | 90% | Invalid cron expression in schedule trigger |
invalid-expression | 90% | Invalid GitHub Actions expression syntax |
docker-copy-fail | 85% | Docker COPY failed — file not in build context |
checkout-ref-fail | 85% | Git checkout failed — branch or ref does not exist |
artifact-not-found | 85% | Workflow artifact not found for download |
Resource (7 patterns)
Runner resource exhaustion.
| Pattern | Confidence | Description |
|---|---|---|
oom-heap | 95% | Node.js process ran out of heap memory |
disk-full | 95% | Runner disk is full — no space left on device |
exit-137 | 90% | Process killed with signal 9 (SIGKILL) — typically an OOM kill by the OS or container runtime |
exit-139-segfault | 85% | Segmentation fault (exit code 139) |
container-memory-limit | 90% | Container hit its memory limit |
too-many-files | 85% | Process exceeded the open file descriptor limit |
inotify-limit | 90% | inotify file watcher limit reached |
Network (8 patterns)
Network connectivity and external service failures.
| Pattern | Confidence | Description |
|---|---|---|
dns-failure | 90% | DNS resolution failed — hostname could not be resolved |
connection-refused | 75% | TCP connection refused by remote host |
ssl-certificate | 90% | SSL/TLS certificate validation failed |
registry-timeout | 85% | Package registry timed out |
rate-limit | 85% | API rate limit exceeded |
docker-hub-rate-limit | 95% | Docker Hub pull rate limit exceeded |
connection-reset | 80% | Network connection was reset unexpectedly |
fetch-failed | 80% | 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:
| Pattern | What it extracts |
|---|---|
npm-eresolve | Conflicting package name from the While resolving: line |
node-version-mismatch | Required version number for the setup-node suggestion |
command-not-found | Missing command name for the installation suggestion |
missing-env-var | Variable name for the env block example |
missing-input | Input 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.
