Appearance
Failure Patterns
Pipeline Doctor ships with 88 regex-based failure patterns across 9 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 and resolution failures.
| Pattern | Confidence | Description |
|---|---|---|
npm-eresolve | 95% | npm peer dependency conflict |
npm-missing-package | 90% | npm package not found in registry |
npm-engine-mismatch | 90% | npm engine version mismatch |
npm-lockfile-outdated | 85% | npm lockfile out of sync |
npm-audit-critical | 70% | npm audit found critical vulnerabilities |
yarn-resolution | 90% | Yarn dependency resolution failure |
yarn-integrity | 85% | Yarn integrity check failed |
pip-resolution | 90% | pip version resolution failure |
pip-missing-package | 90% | Python package not found |
pip-build-deps | 85% | Missing build dependencies for Python package |
go-module-resolution | 90% | Go module resolution failure |
go-checksum-mismatch | 90% | Go module checksum mismatch |
cargo-resolution | 90% | Cargo/Rust dependency resolution failure |
maven-dependency | 85% | Maven dependency resolution failure |
gradle-dependency | 85% | Gradle dependency resolution failure |
composer-dependency | 85% | Composer/PHP dependency failure |
nuget-dependency | 85% | NuGet/.NET dependency failure |
gem-dependency | 85% | Ruby gem dependency failure |
apt-package | 80% | apt/dpkg package installation failure |
brew-dependency | 80% | Homebrew package installation failure |
Environment (14 patterns)
Runtime environment and toolchain issues.
| Pattern | Confidence | Description |
|---|---|---|
node-version-mismatch | 90% | Node.js version mismatch |
python-version-mismatch | 90% | Python version mismatch |
java-version-mismatch | 90% | Java/JDK version mismatch |
docker-not-running | 95% | Docker daemon not running |
docker-pull-failed | 85% | Docker image pull failed |
command-not-found | 90% | Required command/tool not found |
path-not-found | 85% | PATH or binary not found |
missing-system-lib | 80% | Missing system library (ld/linker) |
env-var-missing | 85% | Required environment variable not set |
xcode-select | 80% | Xcode command line tools not installed |
wasm-runtime | 75% | WASM runtime not available |
shell-syntax | 85% | Shell script syntax error |
git-not-configured | 80% | Git identity not configured |
locale-error | 70% | Locale/encoding misconfiguration |
Test (13 patterns)
Test execution and assertion failures.
| Pattern | Confidence | Description |
|---|---|---|
jest-assertion | 90% | Jest test assertion failure |
jest-snapshot | 90% | Jest snapshot mismatch |
pytest-assertion | 90% | pytest assertion failure |
test-suite-failed | 85% | Test suite failed to run |
test-timeout | 85% | Test timed out |
db-connection-test | 80% | Database connection failure in tests |
test-fixture-missing | 80% | Test fixture/factory missing |
coverage-threshold | 75% | Code coverage below threshold |
mocha-failure | 85% | Mocha test failure |
rspec-failure | 85% | RSpec test failure |
junit-failure | 85% | JUnit test failure |
go-test-failure | 85% | Go test failure |
test-exit-code | 80% | Non-zero exit code from test runner |
Timeout (7 patterns)
Job, step, and operation timeout failures.
| Pattern | Confidence | Description |
|---|---|---|
job-timeout | 95% | Job exceeded maximum execution time |
step-timeout | 90% | Step timed out |
operation-timeout | 85% | Generic operation timeout |
download-timeout | 80% | Download/fetch operation timed out |
api-timeout | 80% | API call timed out |
build-timeout | 85% | Build process timed out |
deploy-timeout | 85% | Deployment timed out |
Permission (8 patterns)
Authentication and authorization failures.
| Pattern | Confidence | Description |
|---|---|---|
http-403 | 90% | HTTP 403 Forbidden |
http-401 | 90% | HTTP 401 Unauthorized |
token-scope | 85% | Token lacks required scopes |
npm-publish-auth | 90% | npm publish authentication failure |
docker-push-denied | 85% | Docker push permission denied |
ssh-key-denied | 90% | SSH key authentication failed |
github-token-permission | 85% | GITHUB_TOKEN insufficient permissions |
eacces-permission | 85% | File system EACCES permission denied |
Config (11 patterns)
Workflow configuration and syntax errors.
| Pattern | Confidence | Description |
|---|---|---|
invalid-workflow-yaml | 95% | Invalid workflow YAML file |
unknown-action | 90% | Referenced action not found |
action-input-missing | 85% | Required action input not provided |
deprecated-set-output | 80% | Deprecated ::set-output command |
deprecated-save-state | 80% | Deprecated ::save-state command |
invalid-runs-on | 85% | Invalid runner label |
empty-matrix | 80% | Empty matrix strategy |
invalid-cron | 85% | Invalid cron expression |
workflow-syntax | 90% | General workflow syntax error |
action-version-missing | 75% | Action missing version tag |
env-context-error | 80% | Expression/context syntax error |
Resource (7 patterns)
Runner resource exhaustion.
| Pattern | Confidence | Description |
|---|---|---|
oom-kill | 95% | Out of memory (JavaScript heap) |
exit-137 | 90% | Process killed (exit code 137 / OOM) |
disk-full | 90% | Disk space full |
container-oom | 90% | Container OOM killed |
file-descriptor-limit | 80% | File descriptor limit exceeded |
inode-exhaustion | 75% | Inode exhaustion |
process-limit | 80% | Process/thread limit exceeded |
Network (8 patterns)
Network connectivity and external service failures.
| Pattern | Confidence | Description |
|---|---|---|
dns-resolution | 90% | DNS resolution failed |
connection-refused | 85% | Connection refused |
ssl-certificate | 90% | SSL/TLS certificate error |
fetch-failed | 80% | HTTP fetch/download failed |
registry-timeout | 85% | Package registry timeout |
rate-limit | 85% | API rate limit exceeded |
proxy-error | 80% | Proxy connection error |
socket-hangup | 80% | Socket hang up / connection reset |
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 lines to generate more specific fixes. For example, the npm-eresolve pattern parses the conflicting package name from the While resolving: line and includes it in the fix suggestion.
This is why patterns are stored as TypeScript rather than JSON — dynamic functions can't be serialized as data.
