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.
Files changed (176) hide show
  1. deadends_dev-0.1.0/LICENSE +21 -0
  2. deadends_dev-0.1.0/PKG-INFO +165 -0
  3. deadends_dev-0.1.0/README.md +132 -0
  4. deadends_dev-0.1.0/data/__init__.py +0 -0
  5. deadends_dev-0.1.0/data/canons/__init__.py +0 -0
  6. deadends_dev-0.1.0/data/canons/aws/access-denied-exception/awscli2-linux.json +104 -0
  7. deadends_dev-0.1.0/data/canons/aws/expired-token-exception/awscli2-linux.json +95 -0
  8. deadends_dev-0.1.0/data/canons/aws/invalid-security-token/awscli2-linux.json +78 -0
  9. deadends_dev-0.1.0/data/canons/aws/no-credentials-error/awscli2-linux.json +78 -0
  10. deadends_dev-0.1.0/data/canons/aws/resource-not-found/awscli2-linux.json +95 -0
  11. deadends_dev-0.1.0/data/canons/aws/throttling-exception/awscli2-linux.json +78 -0
  12. deadends_dev-0.1.0/data/canons/cuda/cublas-init-error/cuda11.8-rtx3090.json +131 -0
  13. deadends_dev-0.1.0/data/canons/cuda/cublas-init-error/cuda12.1-a100.json +130 -0
  14. deadends_dev-0.1.0/data/canons/cuda/cudnn-not-compiled/cuda12-a100.json +81 -0
  15. deadends_dev-0.1.0/data/canons/cuda/device-side-assert/cuda12-a100.json +99 -0
  16. deadends_dev-0.1.0/data/canons/cuda/illegal-memory-access/cuda12-a100.json +81 -0
  17. deadends_dev-0.1.0/data/canons/cuda/nccl-timeout/torch2.0-multi-gpu.json +145 -0
  18. deadends_dev-0.1.0/data/canons/cuda/nccl-timeout/torch2.1-multi-gpu.json +148 -0
  19. deadends_dev-0.1.0/data/canons/cuda/nvidia-smi-failed/cuda12-linux.json +96 -0
  20. deadends_dev-0.1.0/data/canons/cuda/torch-not-compiled-cuda/cuda12-rtx4090.json +104 -0
  21. deadends_dev-0.1.0/data/canons/cuda/version-mismatch/cuda11.8-torch2.0.json +121 -0
  22. deadends_dev-0.1.0/data/canons/cuda/version-mismatch/cuda12.1-torch2.1.json +130 -0
  23. deadends_dev-0.1.0/data/canons/docker/apt-get-update-failed/docker27-linux.json +78 -0
  24. deadends_dev-0.1.0/data/canons/docker/bind-address-already-in-use/docker27-linux.json +96 -0
  25. deadends_dev-0.1.0/data/canons/docker/cannot-connect-to-docker-daemon/docker27-linux.json +101 -0
  26. deadends_dev-0.1.0/data/canons/docker/context-too-large/docker27-linux.json +78 -0
  27. deadends_dev-0.1.0/data/canons/docker/exec-format-error/docker27-linux.json +96 -0
  28. deadends_dev-0.1.0/data/canons/docker/healthcheck-unhealthy/docker27-linux.json +79 -0
  29. deadends_dev-0.1.0/data/canons/docker/manifest-not-found/docker27-linux.json +84 -0
  30. deadends_dev-0.1.0/data/canons/docker/network-bridge-conflict/docker24-linux.json +102 -0
  31. deadends_dev-0.1.0/data/canons/docker/network-bridge-conflict/docker24-vpn.json +106 -0
  32. deadends_dev-0.1.0/data/canons/docker/no-space-left/docker24-linux.json +104 -0
  33. deadends_dev-0.1.0/data/canons/docker/no-space-left/docker24-macos.json +106 -0
  34. deadends_dev-0.1.0/data/canons/docker/oci-runtime-create-failed/docker27-linux.json +100 -0
  35. deadends_dev-0.1.0/data/canons/docker/permission-denied-sock/docker24-linux.json +93 -0
  36. deadends_dev-0.1.0/data/canons/docker/permission-denied-sock/docker24-wsl2.json +105 -0
  37. deadends_dev-0.1.0/data/canons/git/cannot-lock-ref/git2-linux.json +79 -0
  38. deadends_dev-0.1.0/data/canons/git/detached-head/git2-linux.json +79 -0
  39. deadends_dev-0.1.0/data/canons/git/failed-to-push-refs/git2-linux.json +96 -0
  40. deadends_dev-0.1.0/data/canons/git/local-changes-overwritten/git2-linux.json +96 -0
  41. deadends_dev-0.1.0/data/canons/git/merge-conflict/git2-linux.json +84 -0
  42. deadends_dev-0.1.0/data/canons/git/not-a-git-repository/git2-linux.json +96 -0
  43. deadends_dev-0.1.0/data/canons/git/pathspec-no-match/git2-linux.json +95 -0
  44. deadends_dev-0.1.0/data/canons/git/permission-denied-publickey/git2-linux.json +79 -0
  45. deadends_dev-0.1.0/data/canons/git/refusing-to-merge-unrelated/git2.40-linux.json +110 -0
  46. deadends_dev-0.1.0/data/canons/git/refusing-to-merge-unrelated/git2.40-macos.json +111 -0
  47. deadends_dev-0.1.0/data/canons/go/cannot-convert-type/go1-linux.json +78 -0
  48. deadends_dev-0.1.0/data/canons/go/cannot-use-as-type/go1-linux.json +99 -0
  49. deadends_dev-0.1.0/data/canons/go/declared-not-used/go1-linux.json +78 -0
  50. deadends_dev-0.1.0/data/canons/go/imported-not-used/go1-linux.json +95 -0
  51. deadends_dev-0.1.0/data/canons/go/multiple-value-in-single-context/go1-linux.json +79 -0
  52. deadends_dev-0.1.0/data/canons/go/nil-pointer-dereference/go1-linux.json +78 -0
  53. deadends_dev-0.1.0/data/canons/go/undefined-reference/go1-linux.json +95 -0
  54. deadends_dev-0.1.0/data/canons/kubernetes/crashloopbackoff/k8s1-linux.json +101 -0
  55. deadends_dev-0.1.0/data/canons/kubernetes/createcontainerconfigerror/k8s1-linux.json +79 -0
  56. deadends_dev-0.1.0/data/canons/kubernetes/evicted-pod/k8s1-linux.json +77 -0
  57. deadends_dev-0.1.0/data/canons/kubernetes/imagepullbackoff/k8s1-linux.json +96 -0
  58. deadends_dev-0.1.0/data/canons/kubernetes/oomkilled/k8s1-linux.json +99 -0
  59. deadends_dev-0.1.0/data/canons/kubernetes/pod-pending/k8s1-linux.json +89 -0
  60. deadends_dev-0.1.0/data/canons/kubernetes/service-not-found/k8s1-linux.json +78 -0
  61. deadends_dev-0.1.0/data/canons/nextjs/cannot-read-properties-searchparams/nextjs14-linux.json +78 -0
  62. deadends_dev-0.1.0/data/canons/nextjs/dynamic-server-usage/nextjs14-linux.json +77 -0
  63. deadends_dev-0.1.0/data/canons/nextjs/hydration-failed/nextjs14-linux.json +96 -0
  64. deadends_dev-0.1.0/data/canons/nextjs/module-not-found-resolve/nextjs14-linux.json +99 -0
  65. deadends_dev-0.1.0/data/canons/nextjs/server-component-client-hook/nextjs14-linux.json +100 -0
  66. deadends_dev-0.1.0/data/canons/node/cannot-find-module-npm/node20-linux.json +104 -0
  67. deadends_dev-0.1.0/data/canons/node/eacces-permission-denied/node20-linux.json +95 -0
  68. deadends_dev-0.1.0/data/canons/node/eaddrinuse-port/node20-linux.json +103 -0
  69. deadends_dev-0.1.0/data/canons/node/eaddrinuse-port/node20-macos.json +104 -0
  70. deadends_dev-0.1.0/data/canons/node/econnrefused/node20-linux.json +78 -0
  71. deadends_dev-0.1.0/data/canons/node/enoent-no-such-file/node20-linux-arm64.json +99 -0
  72. deadends_dev-0.1.0/data/canons/node/enoent-no-such-file/node20-macos-x64.json +107 -0
  73. deadends_dev-0.1.0/data/canons/node/enospc-watchers/node20-linux.json +78 -0
  74. deadends_dev-0.1.0/data/canons/node/err-invalid-arg-type/node20-linux.json +77 -0
  75. deadends_dev-0.1.0/data/canons/node/err-module-not-found/node20-linux.json +104 -0
  76. deadends_dev-0.1.0/data/canons/node/err-require-esm/node20-linux.json +100 -0
  77. deadends_dev-0.1.0/data/canons/node/err-unknown-file-extension/node20-linux.json +79 -0
  78. deadends_dev-0.1.0/data/canons/node/heap-out-of-memory/node18-linux.json +104 -0
  79. deadends_dev-0.1.0/data/canons/node/heap-out-of-memory/node20-linux.json +110 -0
  80. deadends_dev-0.1.0/data/canons/node/syntaxerror-unexpected-token/node20-linux.json +104 -0
  81. deadends_dev-0.1.0/data/canons/node/typeerror-cannot-read-undefined/node20-linux.json +78 -0
  82. deadends_dev-0.1.0/data/canons/node/unhandled-promise-rejection/node20-linux.json +78 -0
  83. deadends_dev-0.1.0/data/canons/pip/build-wheel-failed/pip23-linux-arm64.json +107 -0
  84. deadends_dev-0.1.0/data/canons/pip/build-wheel-failed/pip23-macos-arm64.json +116 -0
  85. deadends_dev-0.1.0/data/canons/pip/conflicting-dependencies/pip23-linux.json +104 -0
  86. deadends_dev-0.1.0/data/canons/pip/conflicting-dependencies/pip23-macos.json +104 -0
  87. deadends_dev-0.1.0/data/canons/pip/dependency-resolver-conflict/pip24-linux.json +97 -0
  88. deadends_dev-0.1.0/data/canons/pip/externally-managed-environment/pip24-linux.json +78 -0
  89. deadends_dev-0.1.0/data/canons/pip/metadata-generation-failed/pip24-linux.json +79 -0
  90. deadends_dev-0.1.0/data/canons/pip/no-matching-distribution/pip24-linux.json +96 -0
  91. deadends_dev-0.1.0/data/canons/python/attributeerror-no-attribute/py311-linux.json +84 -0
  92. deadends_dev-0.1.0/data/canons/python/attributeerror-tensor-no-grad/torch2.0-linux.json +143 -0
  93. deadends_dev-0.1.0/data/canons/python/attributeerror-tensor-no-grad/torch2.1-linux.json +120 -0
  94. deadends_dev-0.1.0/data/canons/python/connectionrefusederror/py311-linux.json +101 -0
  95. deadends_dev-0.1.0/data/canons/python/cuda-out-of-memory/torch2.1-a100-40gb.json +133 -0
  96. deadends_dev-0.1.0/data/canons/python/cuda-out-of-memory/torch2.1-rtx3090.json +120 -0
  97. deadends_dev-0.1.0/data/canons/python/filenotfounderror/py311-linux.json +101 -0
  98. deadends_dev-0.1.0/data/canons/python/importerror-cannot-import-name/py311-linux.json +79 -0
  99. deadends_dev-0.1.0/data/canons/python/importerror-libcuda/torch2.1-linux.json +134 -0
  100. deadends_dev-0.1.0/data/canons/python/indexerror-list-out-of-range/py311-linux.json +92 -0
  101. deadends_dev-0.1.0/data/canons/python/jsondecodeerror/py311-linux.json +79 -0
  102. deadends_dev-0.1.0/data/canons/python/keyerror/py311-linux.json +101 -0
  103. deadends_dev-0.1.0/data/canons/python/memoryerror/py311-linux.json +96 -0
  104. deadends_dev-0.1.0/data/canons/python/modulenotfounderror/py310-macos.json +127 -0
  105. deadends_dev-0.1.0/data/canons/python/modulenotfounderror/py311-linux.json +126 -0
  106. deadends_dev-0.1.0/data/canons/python/nameerror-not-defined/py311-linux.json +78 -0
  107. deadends_dev-0.1.0/data/canons/python/oserror-too-many-open-files/py311-linux.json +80 -0
  108. deadends_dev-0.1.0/data/canons/python/permissionerror-errno13/py311-linux.json +106 -0
  109. deadends_dev-0.1.0/data/canons/python/pickle-unpickling-error/py311-linux.json +128 -0
  110. deadends_dev-0.1.0/data/canons/python/recursion-limit-exceeded/py311-linux.json +106 -0
  111. deadends_dev-0.1.0/data/canons/python/runtimeerror-event-loop/py311-linux.json +79 -0
  112. deadends_dev-0.1.0/data/canons/python/segfault-numpy-import/py311-linux-arm64.json +132 -0
  113. deadends_dev-0.1.0/data/canons/python/ssl-certificate-verify-failed/py310-linux.json +118 -0
  114. deadends_dev-0.1.0/data/canons/python/ssl-certificate-verify-failed/py311-macos.json +127 -0
  115. deadends_dev-0.1.0/data/canons/python/syntaxerror-invalid-syntax/py311-linux.json +79 -0
  116. deadends_dev-0.1.0/data/canons/python/timeouterror/py311-linux.json +78 -0
  117. deadends_dev-0.1.0/data/canons/python/typeerror-missing-argument/py311-linux.json +78 -0
  118. deadends_dev-0.1.0/data/canons/python/typeerror-nonetype-not-subscriptable/py311-linux.json +101 -0
  119. deadends_dev-0.1.0/data/canons/python/typeerror-unhashable-list/py311-linux.json +79 -0
  120. deadends_dev-0.1.0/data/canons/python/unicodedecodeerror/py311-linux.json +96 -0
  121. deadends_dev-0.1.0/data/canons/python/valueerror-invalid-literal/py311-linux.json +101 -0
  122. deadends_dev-0.1.0/data/canons/python/valueerror-too-many-values-unpack/py311-linux.json +79 -0
  123. deadends_dev-0.1.0/data/canons/python/zerodivisionerror/py311-linux.json +79 -0
  124. deadends_dev-0.1.0/data/canons/react/cannot-update-while-rendering/react18-linux.json +95 -0
  125. deadends_dev-0.1.0/data/canons/react/each-child-unique-key/react18-linux.json +78 -0
  126. deadends_dev-0.1.0/data/canons/react/invalid-hook-call/react18-linux.json +100 -0
  127. deadends_dev-0.1.0/data/canons/react/objects-not-valid-as-child/react18-linux.json +79 -0
  128. deadends_dev-0.1.0/data/canons/react/too-many-rerenders/react18-linux.json +100 -0
  129. deadends_dev-0.1.0/data/canons/react/useeffect-missing-dependency/react18-linux.json +77 -0
  130. deadends_dev-0.1.0/data/canons/rust/e0277-trait-bound/rust1-linux.json +96 -0
  131. deadends_dev-0.1.0/data/canons/rust/e0308-mismatched-types/rust1-linux.json +100 -0
  132. deadends_dev-0.1.0/data/canons/rust/e0382-borrow-moved-value/rust1-linux.json +100 -0
  133. deadends_dev-0.1.0/data/canons/rust/e0425-unresolved-name/rust1-linux.json +78 -0
  134. deadends_dev-0.1.0/data/canons/rust/e0502-mutable-immutable-borrow/rust1-linux.json +83 -0
  135. deadends_dev-0.1.0/data/canons/rust/e0599-no-method-named/rust1-linux.json +78 -0
  136. deadends_dev-0.1.0/data/canons/terraform/cycle-in-module/tf1-linux.json +95 -0
  137. deadends_dev-0.1.0/data/canons/terraform/invalid-reference/tf1-linux.json +78 -0
  138. deadends_dev-0.1.0/data/canons/terraform/plugin-crashed/tf1-linux.json +78 -0
  139. deadends_dev-0.1.0/data/canons/terraform/provider-not-present/tf1-linux.json +95 -0
  140. deadends_dev-0.1.0/data/canons/terraform/resource-already-exists/tf1-linux.json +85 -0
  141. deadends_dev-0.1.0/data/canons/terraform/state-lock-error/tf1-linux.json +95 -0
  142. deadends_dev-0.1.0/data/canons/typescript/ts2304-cannot-find-name/ts5-linux.json +78 -0
  143. deadends_dev-0.1.0/data/canons/typescript/ts2307-cannot-find-module/ts5-linux.json +104 -0
  144. deadends_dev-0.1.0/data/canons/typescript/ts2322-type-not-assignable/ts5-linux.json +95 -0
  145. deadends_dev-0.1.0/data/canons/typescript/ts2339-property-not-exist/ts5-linux.json +79 -0
  146. deadends_dev-0.1.0/data/canons/typescript/ts2345-argument-not-assignable/ts5-linux.json +94 -0
  147. deadends_dev-0.1.0/data/canons/typescript/ts2741-missing-property/ts5-linux.json +78 -0
  148. deadends_dev-0.1.0/data/canons/typescript/ts7006-implicitly-any/ts5-linux.json +100 -0
  149. deadends_dev-0.1.0/deadends_dev.egg-info/PKG-INFO +165 -0
  150. deadends_dev-0.1.0/deadends_dev.egg-info/SOURCES.txt +174 -0
  151. deadends_dev-0.1.0/deadends_dev.egg-info/dependency_links.txt +1 -0
  152. deadends_dev-0.1.0/deadends_dev.egg-info/entry_points.txt +3 -0
  153. deadends_dev-0.1.0/deadends_dev.egg-info/requires.txt +14 -0
  154. deadends_dev-0.1.0/deadends_dev.egg-info/top_level.txt +3 -0
  155. deadends_dev-0.1.0/generator/__init__.py +0 -0
  156. deadends_dev-0.1.0/generator/build_site.py +1256 -0
  157. deadends_dev-0.1.0/generator/bulk_generate.py +955 -0
  158. deadends_dev-0.1.0/generator/bulk_generate_v2.py +329 -0
  159. deadends_dev-0.1.0/generator/bulk_generate_v3.py +905 -0
  160. deadends_dev-0.1.0/generator/collect_evidence.py +286 -0
  161. deadends_dev-0.1.0/generator/collect_signatures.py +418 -0
  162. deadends_dev-0.1.0/generator/generate_canons.py +347 -0
  163. deadends_dev-0.1.0/generator/generate_pairs.py +215 -0
  164. deadends_dev-0.1.0/generator/lookup.py +175 -0
  165. deadends_dev-0.1.0/generator/pipeline.py +98 -0
  166. deadends_dev-0.1.0/generator/schema.py +195 -0
  167. deadends_dev-0.1.0/generator/validate.py +332 -0
  168. deadends_dev-0.1.0/mcp/__init__.py +0 -0
  169. deadends_dev-0.1.0/mcp/server.py +389 -0
  170. deadends_dev-0.1.0/pyproject.toml +71 -0
  171. deadends_dev-0.1.0/setup.cfg +4 -0
  172. deadends_dev-0.1.0/tests/test_build.py +98 -0
  173. deadends_dev-0.1.0/tests/test_build_integration.py +183 -0
  174. deadends_dev-0.1.0/tests/test_pipeline.py +213 -0
  175. deadends_dev-0.1.0/tests/test_schema.py +74 -0
  176. 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
+ }