deadends-dev 0.1.0__tar.gz
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.
- deadends_dev-0.1.0/LICENSE +21 -0
- deadends_dev-0.1.0/PKG-INFO +165 -0
- deadends_dev-0.1.0/README.md +132 -0
- deadends_dev-0.1.0/data/__init__.py +0 -0
- deadends_dev-0.1.0/data/canons/__init__.py +0 -0
- deadends_dev-0.1.0/data/canons/aws/access-denied-exception/awscli2-linux.json +104 -0
- deadends_dev-0.1.0/data/canons/aws/expired-token-exception/awscli2-linux.json +95 -0
- deadends_dev-0.1.0/data/canons/aws/invalid-security-token/awscli2-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/aws/no-credentials-error/awscli2-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/aws/resource-not-found/awscli2-linux.json +95 -0
- deadends_dev-0.1.0/data/canons/aws/throttling-exception/awscli2-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/cuda/cublas-init-error/cuda11.8-rtx3090.json +131 -0
- deadends_dev-0.1.0/data/canons/cuda/cublas-init-error/cuda12.1-a100.json +130 -0
- deadends_dev-0.1.0/data/canons/cuda/cudnn-not-compiled/cuda12-a100.json +81 -0
- deadends_dev-0.1.0/data/canons/cuda/device-side-assert/cuda12-a100.json +99 -0
- deadends_dev-0.1.0/data/canons/cuda/illegal-memory-access/cuda12-a100.json +81 -0
- deadends_dev-0.1.0/data/canons/cuda/nccl-timeout/torch2.0-multi-gpu.json +145 -0
- deadends_dev-0.1.0/data/canons/cuda/nccl-timeout/torch2.1-multi-gpu.json +148 -0
- deadends_dev-0.1.0/data/canons/cuda/nvidia-smi-failed/cuda12-linux.json +96 -0
- deadends_dev-0.1.0/data/canons/cuda/torch-not-compiled-cuda/cuda12-rtx4090.json +104 -0
- deadends_dev-0.1.0/data/canons/cuda/version-mismatch/cuda11.8-torch2.0.json +121 -0
- deadends_dev-0.1.0/data/canons/cuda/version-mismatch/cuda12.1-torch2.1.json +130 -0
- deadends_dev-0.1.0/data/canons/docker/apt-get-update-failed/docker27-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/docker/bind-address-already-in-use/docker27-linux.json +96 -0
- deadends_dev-0.1.0/data/canons/docker/cannot-connect-to-docker-daemon/docker27-linux.json +101 -0
- deadends_dev-0.1.0/data/canons/docker/context-too-large/docker27-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/docker/exec-format-error/docker27-linux.json +96 -0
- deadends_dev-0.1.0/data/canons/docker/healthcheck-unhealthy/docker27-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/docker/manifest-not-found/docker27-linux.json +84 -0
- deadends_dev-0.1.0/data/canons/docker/network-bridge-conflict/docker24-linux.json +102 -0
- deadends_dev-0.1.0/data/canons/docker/network-bridge-conflict/docker24-vpn.json +106 -0
- deadends_dev-0.1.0/data/canons/docker/no-space-left/docker24-linux.json +104 -0
- deadends_dev-0.1.0/data/canons/docker/no-space-left/docker24-macos.json +106 -0
- deadends_dev-0.1.0/data/canons/docker/oci-runtime-create-failed/docker27-linux.json +100 -0
- deadends_dev-0.1.0/data/canons/docker/permission-denied-sock/docker24-linux.json +93 -0
- deadends_dev-0.1.0/data/canons/docker/permission-denied-sock/docker24-wsl2.json +105 -0
- deadends_dev-0.1.0/data/canons/git/cannot-lock-ref/git2-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/git/detached-head/git2-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/git/failed-to-push-refs/git2-linux.json +96 -0
- deadends_dev-0.1.0/data/canons/git/local-changes-overwritten/git2-linux.json +96 -0
- deadends_dev-0.1.0/data/canons/git/merge-conflict/git2-linux.json +84 -0
- deadends_dev-0.1.0/data/canons/git/not-a-git-repository/git2-linux.json +96 -0
- deadends_dev-0.1.0/data/canons/git/pathspec-no-match/git2-linux.json +95 -0
- deadends_dev-0.1.0/data/canons/git/permission-denied-publickey/git2-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/git/refusing-to-merge-unrelated/git2.40-linux.json +110 -0
- deadends_dev-0.1.0/data/canons/git/refusing-to-merge-unrelated/git2.40-macos.json +111 -0
- deadends_dev-0.1.0/data/canons/go/cannot-convert-type/go1-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/go/cannot-use-as-type/go1-linux.json +99 -0
- deadends_dev-0.1.0/data/canons/go/declared-not-used/go1-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/go/imported-not-used/go1-linux.json +95 -0
- deadends_dev-0.1.0/data/canons/go/multiple-value-in-single-context/go1-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/go/nil-pointer-dereference/go1-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/go/undefined-reference/go1-linux.json +95 -0
- deadends_dev-0.1.0/data/canons/kubernetes/crashloopbackoff/k8s1-linux.json +101 -0
- deadends_dev-0.1.0/data/canons/kubernetes/createcontainerconfigerror/k8s1-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/kubernetes/evicted-pod/k8s1-linux.json +77 -0
- deadends_dev-0.1.0/data/canons/kubernetes/imagepullbackoff/k8s1-linux.json +96 -0
- deadends_dev-0.1.0/data/canons/kubernetes/oomkilled/k8s1-linux.json +99 -0
- deadends_dev-0.1.0/data/canons/kubernetes/pod-pending/k8s1-linux.json +89 -0
- deadends_dev-0.1.0/data/canons/kubernetes/service-not-found/k8s1-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/nextjs/cannot-read-properties-searchparams/nextjs14-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/nextjs/dynamic-server-usage/nextjs14-linux.json +77 -0
- deadends_dev-0.1.0/data/canons/nextjs/hydration-failed/nextjs14-linux.json +96 -0
- deadends_dev-0.1.0/data/canons/nextjs/module-not-found-resolve/nextjs14-linux.json +99 -0
- deadends_dev-0.1.0/data/canons/nextjs/server-component-client-hook/nextjs14-linux.json +100 -0
- deadends_dev-0.1.0/data/canons/node/cannot-find-module-npm/node20-linux.json +104 -0
- deadends_dev-0.1.0/data/canons/node/eacces-permission-denied/node20-linux.json +95 -0
- deadends_dev-0.1.0/data/canons/node/eaddrinuse-port/node20-linux.json +103 -0
- deadends_dev-0.1.0/data/canons/node/eaddrinuse-port/node20-macos.json +104 -0
- deadends_dev-0.1.0/data/canons/node/econnrefused/node20-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/node/enoent-no-such-file/node20-linux-arm64.json +99 -0
- deadends_dev-0.1.0/data/canons/node/enoent-no-such-file/node20-macos-x64.json +107 -0
- deadends_dev-0.1.0/data/canons/node/enospc-watchers/node20-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/node/err-invalid-arg-type/node20-linux.json +77 -0
- deadends_dev-0.1.0/data/canons/node/err-module-not-found/node20-linux.json +104 -0
- deadends_dev-0.1.0/data/canons/node/err-require-esm/node20-linux.json +100 -0
- deadends_dev-0.1.0/data/canons/node/err-unknown-file-extension/node20-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/node/heap-out-of-memory/node18-linux.json +104 -0
- deadends_dev-0.1.0/data/canons/node/heap-out-of-memory/node20-linux.json +110 -0
- deadends_dev-0.1.0/data/canons/node/syntaxerror-unexpected-token/node20-linux.json +104 -0
- deadends_dev-0.1.0/data/canons/node/typeerror-cannot-read-undefined/node20-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/node/unhandled-promise-rejection/node20-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/pip/build-wheel-failed/pip23-linux-arm64.json +107 -0
- deadends_dev-0.1.0/data/canons/pip/build-wheel-failed/pip23-macos-arm64.json +116 -0
- deadends_dev-0.1.0/data/canons/pip/conflicting-dependencies/pip23-linux.json +104 -0
- deadends_dev-0.1.0/data/canons/pip/conflicting-dependencies/pip23-macos.json +104 -0
- deadends_dev-0.1.0/data/canons/pip/dependency-resolver-conflict/pip24-linux.json +97 -0
- deadends_dev-0.1.0/data/canons/pip/externally-managed-environment/pip24-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/pip/metadata-generation-failed/pip24-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/pip/no-matching-distribution/pip24-linux.json +96 -0
- deadends_dev-0.1.0/data/canons/python/attributeerror-no-attribute/py311-linux.json +84 -0
- deadends_dev-0.1.0/data/canons/python/attributeerror-tensor-no-grad/torch2.0-linux.json +143 -0
- deadends_dev-0.1.0/data/canons/python/attributeerror-tensor-no-grad/torch2.1-linux.json +120 -0
- deadends_dev-0.1.0/data/canons/python/connectionrefusederror/py311-linux.json +101 -0
- deadends_dev-0.1.0/data/canons/python/cuda-out-of-memory/torch2.1-a100-40gb.json +133 -0
- deadends_dev-0.1.0/data/canons/python/cuda-out-of-memory/torch2.1-rtx3090.json +120 -0
- deadends_dev-0.1.0/data/canons/python/filenotfounderror/py311-linux.json +101 -0
- deadends_dev-0.1.0/data/canons/python/importerror-cannot-import-name/py311-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/python/importerror-libcuda/torch2.1-linux.json +134 -0
- deadends_dev-0.1.0/data/canons/python/indexerror-list-out-of-range/py311-linux.json +92 -0
- deadends_dev-0.1.0/data/canons/python/jsondecodeerror/py311-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/python/keyerror/py311-linux.json +101 -0
- deadends_dev-0.1.0/data/canons/python/memoryerror/py311-linux.json +96 -0
- deadends_dev-0.1.0/data/canons/python/modulenotfounderror/py310-macos.json +127 -0
- deadends_dev-0.1.0/data/canons/python/modulenotfounderror/py311-linux.json +126 -0
- deadends_dev-0.1.0/data/canons/python/nameerror-not-defined/py311-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/python/oserror-too-many-open-files/py311-linux.json +80 -0
- deadends_dev-0.1.0/data/canons/python/permissionerror-errno13/py311-linux.json +106 -0
- deadends_dev-0.1.0/data/canons/python/pickle-unpickling-error/py311-linux.json +128 -0
- deadends_dev-0.1.0/data/canons/python/recursion-limit-exceeded/py311-linux.json +106 -0
- deadends_dev-0.1.0/data/canons/python/runtimeerror-event-loop/py311-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/python/segfault-numpy-import/py311-linux-arm64.json +132 -0
- deadends_dev-0.1.0/data/canons/python/ssl-certificate-verify-failed/py310-linux.json +118 -0
- deadends_dev-0.1.0/data/canons/python/ssl-certificate-verify-failed/py311-macos.json +127 -0
- deadends_dev-0.1.0/data/canons/python/syntaxerror-invalid-syntax/py311-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/python/timeouterror/py311-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/python/typeerror-missing-argument/py311-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/python/typeerror-nonetype-not-subscriptable/py311-linux.json +101 -0
- deadends_dev-0.1.0/data/canons/python/typeerror-unhashable-list/py311-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/python/unicodedecodeerror/py311-linux.json +96 -0
- deadends_dev-0.1.0/data/canons/python/valueerror-invalid-literal/py311-linux.json +101 -0
- deadends_dev-0.1.0/data/canons/python/valueerror-too-many-values-unpack/py311-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/python/zerodivisionerror/py311-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/react/cannot-update-while-rendering/react18-linux.json +95 -0
- deadends_dev-0.1.0/data/canons/react/each-child-unique-key/react18-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/react/invalid-hook-call/react18-linux.json +100 -0
- deadends_dev-0.1.0/data/canons/react/objects-not-valid-as-child/react18-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/react/too-many-rerenders/react18-linux.json +100 -0
- deadends_dev-0.1.0/data/canons/react/useeffect-missing-dependency/react18-linux.json +77 -0
- deadends_dev-0.1.0/data/canons/rust/e0277-trait-bound/rust1-linux.json +96 -0
- deadends_dev-0.1.0/data/canons/rust/e0308-mismatched-types/rust1-linux.json +100 -0
- deadends_dev-0.1.0/data/canons/rust/e0382-borrow-moved-value/rust1-linux.json +100 -0
- deadends_dev-0.1.0/data/canons/rust/e0425-unresolved-name/rust1-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/rust/e0502-mutable-immutable-borrow/rust1-linux.json +83 -0
- deadends_dev-0.1.0/data/canons/rust/e0599-no-method-named/rust1-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/terraform/cycle-in-module/tf1-linux.json +95 -0
- deadends_dev-0.1.0/data/canons/terraform/invalid-reference/tf1-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/terraform/plugin-crashed/tf1-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/terraform/provider-not-present/tf1-linux.json +95 -0
- deadends_dev-0.1.0/data/canons/terraform/resource-already-exists/tf1-linux.json +85 -0
- deadends_dev-0.1.0/data/canons/terraform/state-lock-error/tf1-linux.json +95 -0
- deadends_dev-0.1.0/data/canons/typescript/ts2304-cannot-find-name/ts5-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/typescript/ts2307-cannot-find-module/ts5-linux.json +104 -0
- deadends_dev-0.1.0/data/canons/typescript/ts2322-type-not-assignable/ts5-linux.json +95 -0
- deadends_dev-0.1.0/data/canons/typescript/ts2339-property-not-exist/ts5-linux.json +79 -0
- deadends_dev-0.1.0/data/canons/typescript/ts2345-argument-not-assignable/ts5-linux.json +94 -0
- deadends_dev-0.1.0/data/canons/typescript/ts2741-missing-property/ts5-linux.json +78 -0
- deadends_dev-0.1.0/data/canons/typescript/ts7006-implicitly-any/ts5-linux.json +100 -0
- deadends_dev-0.1.0/deadends_dev.egg-info/PKG-INFO +165 -0
- deadends_dev-0.1.0/deadends_dev.egg-info/SOURCES.txt +174 -0
- deadends_dev-0.1.0/deadends_dev.egg-info/dependency_links.txt +1 -0
- deadends_dev-0.1.0/deadends_dev.egg-info/entry_points.txt +3 -0
- deadends_dev-0.1.0/deadends_dev.egg-info/requires.txt +14 -0
- deadends_dev-0.1.0/deadends_dev.egg-info/top_level.txt +3 -0
- deadends_dev-0.1.0/generator/__init__.py +0 -0
- deadends_dev-0.1.0/generator/build_site.py +1256 -0
- deadends_dev-0.1.0/generator/bulk_generate.py +955 -0
- deadends_dev-0.1.0/generator/bulk_generate_v2.py +329 -0
- deadends_dev-0.1.0/generator/bulk_generate_v3.py +905 -0
- deadends_dev-0.1.0/generator/collect_evidence.py +286 -0
- deadends_dev-0.1.0/generator/collect_signatures.py +418 -0
- deadends_dev-0.1.0/generator/generate_canons.py +347 -0
- deadends_dev-0.1.0/generator/generate_pairs.py +215 -0
- deadends_dev-0.1.0/generator/lookup.py +175 -0
- deadends_dev-0.1.0/generator/pipeline.py +98 -0
- deadends_dev-0.1.0/generator/schema.py +195 -0
- deadends_dev-0.1.0/generator/validate.py +332 -0
- deadends_dev-0.1.0/mcp/__init__.py +0 -0
- deadends_dev-0.1.0/mcp/server.py +389 -0
- deadends_dev-0.1.0/pyproject.toml +71 -0
- deadends_dev-0.1.0/setup.cfg +4 -0
- deadends_dev-0.1.0/tests/test_build.py +98 -0
- deadends_dev-0.1.0/tests/test_build_integration.py +183 -0
- deadends_dev-0.1.0/tests/test_pipeline.py +213 -0
- deadends_dev-0.1.0/tests/test_schema.py +74 -0
- deadends_dev-0.1.0/tests/test_validate.py +173 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 YuJin Hong
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: deadends-dev
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Structured failure knowledge for AI agents — dead ends, workarounds, error chains
|
|
5
|
+
Author: YuJin Hong
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://deadends.dev
|
|
8
|
+
Project-URL: Repository, https://github.com/dbwls99706/deadends.dev
|
|
9
|
+
Project-URL: API, https://deadends.dev/api/v1/index.json
|
|
10
|
+
Keywords: error,debugging,dead-end,workaround,ai-agent,mcp,error-handling,troubleshooting
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Topic :: Software Development :: Debuggers
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Requires-Python: >=3.10
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
Requires-Dist: jinja2>=3.1
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
24
|
+
Requires-Dist: ruff>=0.4; extra == "dev"
|
|
25
|
+
Requires-Dist: jsonschema>=4.20; extra == "dev"
|
|
26
|
+
Provides-Extra: mcp
|
|
27
|
+
Requires-Dist: jsonschema>=4.20; extra == "mcp"
|
|
28
|
+
Provides-Extra: pipeline
|
|
29
|
+
Requires-Dist: jsonschema>=4.20; extra == "pipeline"
|
|
30
|
+
Requires-Dist: requests>=2.31; extra == "pipeline"
|
|
31
|
+
Requires-Dist: anthropic>=0.25; extra == "pipeline"
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+
# deadend.dev
|
|
35
|
+
|
|
36
|
+
**Structured failure knowledge for AI coding agents.**
|
|
37
|
+
|
|
38
|
+
87 error entries across 14 domains. When AI agents encounter errors, they waste tokens on approaches that are known to fail. deadend.dev tells agents what NOT to try, what actually works, and what error comes next.
|
|
39
|
+
|
|
40
|
+
## Quick Start — Python SDK
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
from generator.lookup import lookup
|
|
44
|
+
|
|
45
|
+
result = lookup("ModuleNotFoundError: No module named 'torch'")
|
|
46
|
+
|
|
47
|
+
# What NOT to try (saves tokens and time)
|
|
48
|
+
for d in result["dead_ends"]:
|
|
49
|
+
print(f"AVOID: {d['action']} — fails {int(d['fail_rate']*100)}%")
|
|
50
|
+
|
|
51
|
+
# What actually works
|
|
52
|
+
for w in result["workarounds"]:
|
|
53
|
+
print(f"TRY: {w['action']} — works {int(w['success_rate']*100)}%")
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Quick Start — CLI
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
pip install -e .
|
|
60
|
+
python -m generator.lookup "CUDA error: out of memory"
|
|
61
|
+
python -m generator.lookup --list # show all known errors
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Quick Start — MCP Server (Claude Desktop / Cursor)
|
|
65
|
+
|
|
66
|
+
Add to `~/.claude/claude_desktop_config.json`:
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"mcpServers": {
|
|
71
|
+
"deadend": {
|
|
72
|
+
"command": "python",
|
|
73
|
+
"args": ["-m", "mcp.server"],
|
|
74
|
+
"cwd": "/path/to/deadend.dev"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Then Claude will automatically check deadend.dev when encountering errors.
|
|
81
|
+
|
|
82
|
+
## API Endpoints
|
|
83
|
+
|
|
84
|
+
| Endpoint | Description |
|
|
85
|
+
|----------|-------------|
|
|
86
|
+
| [`/api/v1/match.json`](https://deadends.dev/api/v1/match.json) | Lightweight regex matching (fits in context window) |
|
|
87
|
+
| [`/api/v1/index.json`](https://deadends.dev/api/v1/index.json) | Full error index with all metadata |
|
|
88
|
+
| `/api/v1/{domain}/{slug}/{env}.json` | Individual error canon |
|
|
89
|
+
| [`/api/v1/openapi.json`](https://deadends.dev/api/v1/openapi.json) | OpenAPI 3.1 spec |
|
|
90
|
+
| [`/llms.txt`](https://deadends.dev/llms.txt) | LLM-optimized error listing ([llmstxt.org](https://llmstxt.org) standard) |
|
|
91
|
+
| [`/llms-full.txt`](https://deadends.dev/llms-full.txt) | Complete database dump |
|
|
92
|
+
| [`/.well-known/ai-plugin.json`](https://deadends.dev/.well-known/ai-plugin.json) | AI plugin manifest |
|
|
93
|
+
|
|
94
|
+
## Covered Domains (14)
|
|
95
|
+
|
|
96
|
+
| Domain | Errors | Examples |
|
|
97
|
+
|--------|--------|----------|
|
|
98
|
+
| python | 20 | ModuleNotFoundError, TypeError, KeyError, MemoryError |
|
|
99
|
+
| node | 11 | ERR_MODULE_NOT_FOUND, EACCES, ERR_REQUIRE_ESM, heap OOM |
|
|
100
|
+
| docker | 10 | permission denied, no space left, exec format error |
|
|
101
|
+
| cuda | 9 | OOM, version mismatch, device-side assert, NCCL timeout |
|
|
102
|
+
| git | 6 | failed to push refs, merge conflicts, pathspec errors |
|
|
103
|
+
| pip | 6 | build wheel failed, conflicting dependencies |
|
|
104
|
+
| typescript | 4 | TS2307, TS2322, TS2345, TS7006 |
|
|
105
|
+
| rust | 3 | E0382 borrow, E0308 mismatch, E0277 trait bound |
|
|
106
|
+
| go | 3 | undefined reference, imported not used, type mismatch |
|
|
107
|
+
| kubernetes | 3 | CrashLoopBackOff, ImagePullBackOff, OOMKilled |
|
|
108
|
+
| terraform | 3 | state lock, provider not present, cycle |
|
|
109
|
+
| aws | 3 | AccessDenied, ExpiredToken, ResourceNotFound |
|
|
110
|
+
| nextjs | 3 | hydration failed, module not found, server component hooks |
|
|
111
|
+
| react | 3 | invalid hook call, too many re-renders, update while rendering |
|
|
112
|
+
|
|
113
|
+
## ErrorCanon Data Format
|
|
114
|
+
|
|
115
|
+
Each error is a JSON file with:
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"error": { "signature": "...", "regex": "...", "domain": "..." },
|
|
120
|
+
"verdict": { "resolvable": "true|partial|false", "fix_success_rate": 0.88 },
|
|
121
|
+
"dead_ends": [{ "action": "...", "why_fails": "...", "fail_rate": 0.75 }],
|
|
122
|
+
"workarounds": [{ "action": "...", "success_rate": 0.92, "how": "..." }],
|
|
123
|
+
"transition_graph": { "leads_to": [...], "preceded_by": [...] }
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## AI Agent Integration
|
|
128
|
+
|
|
129
|
+
Every page on deadend.dev includes 8 machine-readable formats:
|
|
130
|
+
|
|
131
|
+
1. **JSON API** — RESTful error data at `/api/v1/{id}.json`
|
|
132
|
+
2. **match.json** — Compact regex-only file (load entire DB into context)
|
|
133
|
+
3. **JSON-LD** — Schema.org TechArticle + FAQPage in every `<head>`
|
|
134
|
+
4. **ai-summary** — `<pre id="ai-summary">` with KEY=VALUE pairs
|
|
135
|
+
5. **llms.txt** — [llmstxt.org](https://llmstxt.org) standard
|
|
136
|
+
6. **OpenAPI** — Full API specification
|
|
137
|
+
7. **ai-plugin.json** — Plugin discovery manifest
|
|
138
|
+
8. **robots.txt** — All AI crawlers explicitly welcomed
|
|
139
|
+
|
|
140
|
+
## Development
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
pip install -e ".[dev]"
|
|
144
|
+
|
|
145
|
+
# Full pipeline (validate → generate → build → test)
|
|
146
|
+
python -m generator.pipeline
|
|
147
|
+
|
|
148
|
+
# Individual steps
|
|
149
|
+
python -m generator.bulk_generate # Generate canons from seeds
|
|
150
|
+
python -m generator.build_site # Build static site
|
|
151
|
+
python -m generator.validate # Validate data + site
|
|
152
|
+
python -m pytest tests/ -v # Run tests
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Contributing
|
|
156
|
+
|
|
157
|
+
Add error definitions to `generator/bulk_generate.py` or create JSON files directly in `data/canons/`.
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
python -m generator.validate --data-only # Validate before submitting
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## License
|
|
164
|
+
|
|
165
|
+
MIT (code) · CC BY 4.0 (data)
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# deadend.dev
|
|
2
|
+
|
|
3
|
+
**Structured failure knowledge for AI coding agents.**
|
|
4
|
+
|
|
5
|
+
87 error entries across 14 domains. When AI agents encounter errors, they waste tokens on approaches that are known to fail. deadend.dev tells agents what NOT to try, what actually works, and what error comes next.
|
|
6
|
+
|
|
7
|
+
## Quick Start — Python SDK
|
|
8
|
+
|
|
9
|
+
```python
|
|
10
|
+
from generator.lookup import lookup
|
|
11
|
+
|
|
12
|
+
result = lookup("ModuleNotFoundError: No module named 'torch'")
|
|
13
|
+
|
|
14
|
+
# What NOT to try (saves tokens and time)
|
|
15
|
+
for d in result["dead_ends"]:
|
|
16
|
+
print(f"AVOID: {d['action']} — fails {int(d['fail_rate']*100)}%")
|
|
17
|
+
|
|
18
|
+
# What actually works
|
|
19
|
+
for w in result["workarounds"]:
|
|
20
|
+
print(f"TRY: {w['action']} — works {int(w['success_rate']*100)}%")
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Quick Start — CLI
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pip install -e .
|
|
27
|
+
python -m generator.lookup "CUDA error: out of memory"
|
|
28
|
+
python -m generator.lookup --list # show all known errors
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Quick Start — MCP Server (Claude Desktop / Cursor)
|
|
32
|
+
|
|
33
|
+
Add to `~/.claude/claude_desktop_config.json`:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"mcpServers": {
|
|
38
|
+
"deadend": {
|
|
39
|
+
"command": "python",
|
|
40
|
+
"args": ["-m", "mcp.server"],
|
|
41
|
+
"cwd": "/path/to/deadend.dev"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Then Claude will automatically check deadend.dev when encountering errors.
|
|
48
|
+
|
|
49
|
+
## API Endpoints
|
|
50
|
+
|
|
51
|
+
| Endpoint | Description |
|
|
52
|
+
|----------|-------------|
|
|
53
|
+
| [`/api/v1/match.json`](https://deadends.dev/api/v1/match.json) | Lightweight regex matching (fits in context window) |
|
|
54
|
+
| [`/api/v1/index.json`](https://deadends.dev/api/v1/index.json) | Full error index with all metadata |
|
|
55
|
+
| `/api/v1/{domain}/{slug}/{env}.json` | Individual error canon |
|
|
56
|
+
| [`/api/v1/openapi.json`](https://deadends.dev/api/v1/openapi.json) | OpenAPI 3.1 spec |
|
|
57
|
+
| [`/llms.txt`](https://deadends.dev/llms.txt) | LLM-optimized error listing ([llmstxt.org](https://llmstxt.org) standard) |
|
|
58
|
+
| [`/llms-full.txt`](https://deadends.dev/llms-full.txt) | Complete database dump |
|
|
59
|
+
| [`/.well-known/ai-plugin.json`](https://deadends.dev/.well-known/ai-plugin.json) | AI plugin manifest |
|
|
60
|
+
|
|
61
|
+
## Covered Domains (14)
|
|
62
|
+
|
|
63
|
+
| Domain | Errors | Examples |
|
|
64
|
+
|--------|--------|----------|
|
|
65
|
+
| python | 20 | ModuleNotFoundError, TypeError, KeyError, MemoryError |
|
|
66
|
+
| node | 11 | ERR_MODULE_NOT_FOUND, EACCES, ERR_REQUIRE_ESM, heap OOM |
|
|
67
|
+
| docker | 10 | permission denied, no space left, exec format error |
|
|
68
|
+
| cuda | 9 | OOM, version mismatch, device-side assert, NCCL timeout |
|
|
69
|
+
| git | 6 | failed to push refs, merge conflicts, pathspec errors |
|
|
70
|
+
| pip | 6 | build wheel failed, conflicting dependencies |
|
|
71
|
+
| typescript | 4 | TS2307, TS2322, TS2345, TS7006 |
|
|
72
|
+
| rust | 3 | E0382 borrow, E0308 mismatch, E0277 trait bound |
|
|
73
|
+
| go | 3 | undefined reference, imported not used, type mismatch |
|
|
74
|
+
| kubernetes | 3 | CrashLoopBackOff, ImagePullBackOff, OOMKilled |
|
|
75
|
+
| terraform | 3 | state lock, provider not present, cycle |
|
|
76
|
+
| aws | 3 | AccessDenied, ExpiredToken, ResourceNotFound |
|
|
77
|
+
| nextjs | 3 | hydration failed, module not found, server component hooks |
|
|
78
|
+
| react | 3 | invalid hook call, too many re-renders, update while rendering |
|
|
79
|
+
|
|
80
|
+
## ErrorCanon Data Format
|
|
81
|
+
|
|
82
|
+
Each error is a JSON file with:
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"error": { "signature": "...", "regex": "...", "domain": "..." },
|
|
87
|
+
"verdict": { "resolvable": "true|partial|false", "fix_success_rate": 0.88 },
|
|
88
|
+
"dead_ends": [{ "action": "...", "why_fails": "...", "fail_rate": 0.75 }],
|
|
89
|
+
"workarounds": [{ "action": "...", "success_rate": 0.92, "how": "..." }],
|
|
90
|
+
"transition_graph": { "leads_to": [...], "preceded_by": [...] }
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## AI Agent Integration
|
|
95
|
+
|
|
96
|
+
Every page on deadend.dev includes 8 machine-readable formats:
|
|
97
|
+
|
|
98
|
+
1. **JSON API** — RESTful error data at `/api/v1/{id}.json`
|
|
99
|
+
2. **match.json** — Compact regex-only file (load entire DB into context)
|
|
100
|
+
3. **JSON-LD** — Schema.org TechArticle + FAQPage in every `<head>`
|
|
101
|
+
4. **ai-summary** — `<pre id="ai-summary">` with KEY=VALUE pairs
|
|
102
|
+
5. **llms.txt** — [llmstxt.org](https://llmstxt.org) standard
|
|
103
|
+
6. **OpenAPI** — Full API specification
|
|
104
|
+
7. **ai-plugin.json** — Plugin discovery manifest
|
|
105
|
+
8. **robots.txt** — All AI crawlers explicitly welcomed
|
|
106
|
+
|
|
107
|
+
## Development
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
pip install -e ".[dev]"
|
|
111
|
+
|
|
112
|
+
# Full pipeline (validate → generate → build → test)
|
|
113
|
+
python -m generator.pipeline
|
|
114
|
+
|
|
115
|
+
# Individual steps
|
|
116
|
+
python -m generator.bulk_generate # Generate canons from seeds
|
|
117
|
+
python -m generator.build_site # Build static site
|
|
118
|
+
python -m generator.validate # Validate data + site
|
|
119
|
+
python -m pytest tests/ -v # Run tests
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Contributing
|
|
123
|
+
|
|
124
|
+
Add error definitions to `generator/bulk_generate.py` or create JSON files directly in `data/canons/`.
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
python -m generator.validate --data-only # Validate before submitting
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## License
|
|
131
|
+
|
|
132
|
+
MIT (code) · CC BY 4.0 (data)
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0.0",
|
|
3
|
+
"id": "aws/access-denied-exception/awscli2-linux",
|
|
4
|
+
"url": "https://deadends.dev/aws/access-denied-exception/awscli2-linux",
|
|
5
|
+
"error": {
|
|
6
|
+
"signature": "An error occurred (AccessDeniedException) when calling the X operation",
|
|
7
|
+
"regex": "(AccessDeniedException|AccessDenied|403 Forbidden).*when calling",
|
|
8
|
+
"domain": "aws",
|
|
9
|
+
"category": "auth_error",
|
|
10
|
+
"first_seen": "2023-01-01",
|
|
11
|
+
"last_confirmed": "2026-02-11"
|
|
12
|
+
},
|
|
13
|
+
"environment": {
|
|
14
|
+
"runtime": {
|
|
15
|
+
"name": "aws",
|
|
16
|
+
"version_range": ">=2.0,<3.0"
|
|
17
|
+
},
|
|
18
|
+
"os": "linux"
|
|
19
|
+
},
|
|
20
|
+
"verdict": {
|
|
21
|
+
"resolvable": "true",
|
|
22
|
+
"fix_success_rate": 0.82,
|
|
23
|
+
"confidence": 0.85,
|
|
24
|
+
"last_updated": "2026-02-11",
|
|
25
|
+
"summary": "IAM permissions insufficient for the requested operation."
|
|
26
|
+
},
|
|
27
|
+
"dead_ends": [
|
|
28
|
+
{
|
|
29
|
+
"action": "Add AdministratorAccess policy",
|
|
30
|
+
"why_fails": "Severe security risk, violates least-privilege principle",
|
|
31
|
+
"fail_rate": 0.85,
|
|
32
|
+
"sources": [
|
|
33
|
+
"https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege"
|
|
34
|
+
],
|
|
35
|
+
"condition": ""
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"action": "Use root account credentials",
|
|
39
|
+
"why_fails": "Root should never be used for API calls, critical security issue",
|
|
40
|
+
"fail_rate": 0.95,
|
|
41
|
+
"sources": [
|
|
42
|
+
"https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#lock-away-credentials"
|
|
43
|
+
],
|
|
44
|
+
"condition": ""
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"workarounds": [
|
|
48
|
+
{
|
|
49
|
+
"action": "Check which specific permission is needed using CloudTrail or IAM Access Analyzer",
|
|
50
|
+
"success_rate": 0.85,
|
|
51
|
+
"how": "aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=OperationName",
|
|
52
|
+
"sources": [
|
|
53
|
+
"https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html"
|
|
54
|
+
],
|
|
55
|
+
"condition": ""
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"action": "Add the minimum required IAM policy for the specific action and resource",
|
|
59
|
+
"success_rate": 0.82,
|
|
60
|
+
"sources": [
|
|
61
|
+
"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html"
|
|
62
|
+
],
|
|
63
|
+
"condition": ""
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"transition_graph": {
|
|
67
|
+
"leads_to": [
|
|
68
|
+
{
|
|
69
|
+
"error_id": "aws/expired-token-exception/awscli2-linux",
|
|
70
|
+
"probability": 0.15,
|
|
71
|
+
"condition": "Created temporary credentials that expire"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"error_id": "aws/resource-not-found/awscli2-linux",
|
|
75
|
+
"probability": 0.2,
|
|
76
|
+
"condition": "Has permissions but wrong region or resource name"
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"preceded_by": [
|
|
80
|
+
{
|
|
81
|
+
"error_id": "aws/expired-token-exception/awscli2-linux",
|
|
82
|
+
"probability": 0.25,
|
|
83
|
+
"condition": "Refreshed token but new role has insufficient permissions"
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"frequently_confused_with": [
|
|
87
|
+
{
|
|
88
|
+
"error_id": "aws/expired-token-exception/awscli2-linux",
|
|
89
|
+
"distinction": "ExpiredToken means valid permissions but expired session; AccessDenied means active session but insufficient permissions"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"error_id": "aws/resource-not-found/awscli2-linux",
|
|
93
|
+
"distinction": "ResourceNotFound means resource doesn't exist; AccessDenied means it may exist but you can't access it"
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
"metadata": {
|
|
98
|
+
"generated_by": "bulk_generate.py",
|
|
99
|
+
"generation_date": "2026-02-11",
|
|
100
|
+
"review_status": "auto_generated",
|
|
101
|
+
"evidence_count": 355,
|
|
102
|
+
"last_verification": "2026-02-11"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0.0",
|
|
3
|
+
"id": "aws/expired-token-exception/awscli2-linux",
|
|
4
|
+
"url": "https://deadends.dev/aws/expired-token-exception/awscli2-linux",
|
|
5
|
+
"error": {
|
|
6
|
+
"signature": "An error occurred (ExpiredTokenException): The security token included in the request is expired",
|
|
7
|
+
"regex": "ExpiredTokenException|security token.+is expired|token.+has expired",
|
|
8
|
+
"domain": "aws",
|
|
9
|
+
"category": "auth_error",
|
|
10
|
+
"first_seen": "2023-01-01",
|
|
11
|
+
"last_confirmed": "2026-02-11"
|
|
12
|
+
},
|
|
13
|
+
"environment": {
|
|
14
|
+
"runtime": {
|
|
15
|
+
"name": "aws",
|
|
16
|
+
"version_range": ">=2.0,<3.0"
|
|
17
|
+
},
|
|
18
|
+
"os": "linux"
|
|
19
|
+
},
|
|
20
|
+
"verdict": {
|
|
21
|
+
"resolvable": "true",
|
|
22
|
+
"fix_success_rate": 0.9,
|
|
23
|
+
"confidence": 0.9,
|
|
24
|
+
"last_updated": "2026-02-11",
|
|
25
|
+
"summary": "AWS session token has expired. Common with STS temporary credentials and SSO sessions."
|
|
26
|
+
},
|
|
27
|
+
"dead_ends": [
|
|
28
|
+
{
|
|
29
|
+
"action": "Hardcode long-lived access keys",
|
|
30
|
+
"why_fails": "Security anti-pattern, keys can leak and don't rotate",
|
|
31
|
+
"fail_rate": 0.88,
|
|
32
|
+
"sources": [
|
|
33
|
+
"https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#rotate-credentials"
|
|
34
|
+
],
|
|
35
|
+
"condition": ""
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"action": "Extend token lifetime to maximum",
|
|
39
|
+
"why_fails": "Only delays the problem, tokens still expire",
|
|
40
|
+
"fail_rate": 0.55,
|
|
41
|
+
"sources": [
|
|
42
|
+
"https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html"
|
|
43
|
+
],
|
|
44
|
+
"condition": ""
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"workarounds": [
|
|
48
|
+
{
|
|
49
|
+
"action": "Refresh credentials with aws sso login or aws sts assume-role",
|
|
50
|
+
"success_rate": 0.92,
|
|
51
|
+
"how": "aws sso login --profile my-profile",
|
|
52
|
+
"sources": [
|
|
53
|
+
"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html"
|
|
54
|
+
],
|
|
55
|
+
"condition": ""
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"action": "Use credential_process or credential helpers for automatic refresh",
|
|
59
|
+
"success_rate": 0.85,
|
|
60
|
+
"sources": [
|
|
61
|
+
"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sourcing-external.html"
|
|
62
|
+
],
|
|
63
|
+
"condition": ""
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"transition_graph": {
|
|
67
|
+
"leads_to": [
|
|
68
|
+
{
|
|
69
|
+
"error_id": "aws/access-denied-exception/awscli2-linux",
|
|
70
|
+
"probability": 0.2,
|
|
71
|
+
"condition": "Refreshed credentials may have different/fewer permissions"
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"preceded_by": [
|
|
75
|
+
{
|
|
76
|
+
"error_id": "aws/access-denied-exception/awscli2-linux",
|
|
77
|
+
"probability": 0.15,
|
|
78
|
+
"condition": "Assumed role with temporary credentials that later expire"
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"frequently_confused_with": [
|
|
82
|
+
{
|
|
83
|
+
"error_id": "aws/access-denied-exception/awscli2-linux",
|
|
84
|
+
"distinction": "AccessDenied means wrong permissions; ExpiredToken means right permissions but session has timed out"
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
"metadata": {
|
|
89
|
+
"generated_by": "bulk_generate.py",
|
|
90
|
+
"generation_date": "2026-02-11",
|
|
91
|
+
"review_status": "auto_generated",
|
|
92
|
+
"evidence_count": 240,
|
|
93
|
+
"last_verification": "2026-02-11"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0.0",
|
|
3
|
+
"id": "aws/invalid-security-token/awscli2-linux",
|
|
4
|
+
"url": "https://deadends.dev/aws/invalid-security-token/awscli2-linux",
|
|
5
|
+
"error": {
|
|
6
|
+
"signature": "An error occurred (InvalidClientTokenId): The security token is invalid",
|
|
7
|
+
"regex": "InvalidClientTokenId|security token.*invalid|SignatureDoesNotMatch",
|
|
8
|
+
"domain": "aws",
|
|
9
|
+
"category": "auth_error",
|
|
10
|
+
"first_seen": "2023-01-01",
|
|
11
|
+
"last_confirmed": "2026-02-11"
|
|
12
|
+
},
|
|
13
|
+
"environment": {
|
|
14
|
+
"runtime": {
|
|
15
|
+
"name": "aws",
|
|
16
|
+
"version_range": ">=2.0"
|
|
17
|
+
},
|
|
18
|
+
"os": "linux"
|
|
19
|
+
},
|
|
20
|
+
"verdict": {
|
|
21
|
+
"resolvable": "true",
|
|
22
|
+
"fix_success_rate": 0.88,
|
|
23
|
+
"confidence": 0.9,
|
|
24
|
+
"last_updated": "2026-02-11",
|
|
25
|
+
"summary": "AWS credentials are wrong or expired. Common with temporary session tokens."
|
|
26
|
+
},
|
|
27
|
+
"dead_ends": [
|
|
28
|
+
{
|
|
29
|
+
"action": "Regenerate all access keys",
|
|
30
|
+
"why_fails": "May be unnecessary if it's just an expired session token",
|
|
31
|
+
"fail_rate": 0.5,
|
|
32
|
+
"sources": [
|
|
33
|
+
"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html"
|
|
34
|
+
],
|
|
35
|
+
"condition": ""
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"action": "Disable MFA requirement",
|
|
39
|
+
"why_fails": "Severe security downgrade, doesn't fix the token",
|
|
40
|
+
"fail_rate": 0.85,
|
|
41
|
+
"sources": [
|
|
42
|
+
"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html"
|
|
43
|
+
],
|
|
44
|
+
"condition": ""
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"workarounds": [
|
|
48
|
+
{
|
|
49
|
+
"action": "Check if using temporary credentials that expired; refresh with aws sts get-session-token",
|
|
50
|
+
"success_rate": 0.9,
|
|
51
|
+
"sources": [
|
|
52
|
+
"https://docs.aws.amazon.com/cli/latest/reference/sts/get-session-token.html"
|
|
53
|
+
],
|
|
54
|
+
"condition": ""
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"action": "Verify correct AWS_PROFILE is set, check ~/.aws/credentials",
|
|
58
|
+
"success_rate": 0.88,
|
|
59
|
+
"how": "aws sts get-caller-identity # shows which identity is being used",
|
|
60
|
+
"sources": [
|
|
61
|
+
"https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html"
|
|
62
|
+
],
|
|
63
|
+
"condition": ""
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"transition_graph": {
|
|
67
|
+
"leads_to": [],
|
|
68
|
+
"preceded_by": [],
|
|
69
|
+
"frequently_confused_with": []
|
|
70
|
+
},
|
|
71
|
+
"metadata": {
|
|
72
|
+
"generated_by": "bulk_generate.py",
|
|
73
|
+
"generation_date": "2026-02-11",
|
|
74
|
+
"review_status": "auto_generated",
|
|
75
|
+
"evidence_count": 50,
|
|
76
|
+
"last_verification": "2026-02-11"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0.0",
|
|
3
|
+
"id": "aws/no-credentials-error/awscli2-linux",
|
|
4
|
+
"url": "https://deadends.dev/aws/no-credentials-error/awscli2-linux",
|
|
5
|
+
"error": {
|
|
6
|
+
"signature": "botocore.exceptions.NoCredentialsError: Unable to locate credentials",
|
|
7
|
+
"regex": "NoCredentialsError|Unable to locate credentials",
|
|
8
|
+
"domain": "aws",
|
|
9
|
+
"category": "auth_error",
|
|
10
|
+
"first_seen": "2023-01-01",
|
|
11
|
+
"last_confirmed": "2026-02-11"
|
|
12
|
+
},
|
|
13
|
+
"environment": {
|
|
14
|
+
"runtime": {
|
|
15
|
+
"name": "aws",
|
|
16
|
+
"version_range": ">=2.0"
|
|
17
|
+
},
|
|
18
|
+
"os": "linux"
|
|
19
|
+
},
|
|
20
|
+
"verdict": {
|
|
21
|
+
"resolvable": "true",
|
|
22
|
+
"fix_success_rate": 0.9,
|
|
23
|
+
"confidence": 0.92,
|
|
24
|
+
"last_updated": "2026-02-11",
|
|
25
|
+
"summary": "AWS SDK can't find credentials. Missing env vars, config, or IAM role."
|
|
26
|
+
},
|
|
27
|
+
"dead_ends": [
|
|
28
|
+
{
|
|
29
|
+
"action": "Hardcode credentials in source code",
|
|
30
|
+
"why_fails": "Security risk — credentials in git history",
|
|
31
|
+
"fail_rate": 0.95,
|
|
32
|
+
"sources": [
|
|
33
|
+
"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html"
|
|
34
|
+
],
|
|
35
|
+
"condition": ""
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"action": "Set AWS_ACCESS_KEY_ID in .env and commit",
|
|
39
|
+
"why_fails": "Same security risk as hardcoding",
|
|
40
|
+
"fail_rate": 0.9,
|
|
41
|
+
"sources": [
|
|
42
|
+
"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html"
|
|
43
|
+
],
|
|
44
|
+
"condition": ""
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"workarounds": [
|
|
48
|
+
{
|
|
49
|
+
"action": "Configure credentials: aws configure, or set env vars, or use IAM role",
|
|
50
|
+
"success_rate": 0.95,
|
|
51
|
+
"how": "aws configure # sets ~/.aws/credentials",
|
|
52
|
+
"sources": [
|
|
53
|
+
"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html"
|
|
54
|
+
],
|
|
55
|
+
"condition": ""
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"action": "In EC2/ECS/Lambda: use IAM role (no credentials needed)",
|
|
59
|
+
"success_rate": 0.92,
|
|
60
|
+
"sources": [
|
|
61
|
+
"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html"
|
|
62
|
+
],
|
|
63
|
+
"condition": ""
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"transition_graph": {
|
|
67
|
+
"leads_to": [],
|
|
68
|
+
"preceded_by": [],
|
|
69
|
+
"frequently_confused_with": []
|
|
70
|
+
},
|
|
71
|
+
"metadata": {
|
|
72
|
+
"generated_by": "bulk_generate.py",
|
|
73
|
+
"generation_date": "2026-02-11",
|
|
74
|
+
"review_status": "auto_generated",
|
|
75
|
+
"evidence_count": 50,
|
|
76
|
+
"last_verification": "2026-02-11"
|
|
77
|
+
}
|
|
78
|
+
}
|