chokkin 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 (532) hide show
  1. chokkin-0.1.0/.cargo/audit.toml +13 -0
  2. chokkin-0.1.0/.cargo/config.toml +2 -0
  3. chokkin-0.1.0/.claude/hooks/stop-wrapup.sh +58 -0
  4. chokkin-0.1.0/.claude/settings.json +29 -0
  5. chokkin-0.1.0/.claude/skills/grill-me/SKILL.md +17 -0
  6. chokkin-0.1.0/.claude/skills/update-design/SKILL.md +41 -0
  7. chokkin-0.1.0/.claude/skills/update-docs/SKILL.md +48 -0
  8. chokkin-0.1.0/.claude/skills/update-plan/SKILL.md +43 -0
  9. chokkin-0.1.0/.claude/skills/wrapup/SKILL.md +42 -0
  10. chokkin-0.1.0/.codex/skills/grill-me/SKILL.md +17 -0
  11. chokkin-0.1.0/.codex/skills/update-design/SKILL.md +41 -0
  12. chokkin-0.1.0/.codex/skills/update-docs/SKILL.md +48 -0
  13. chokkin-0.1.0/.codex/skills/update-plan/SKILL.md +43 -0
  14. chokkin-0.1.0/.codex/skills/wrapup/SKILL.md +42 -0
  15. chokkin-0.1.0/.cursor/environment.json +3 -0
  16. chokkin-0.1.0/.cursor/hooks.json +14 -0
  17. chokkin-0.1.0/.cursor/ptuf-hook.sh +13 -0
  18. chokkin-0.1.0/.cursor/skills/grill-me/SKILL.md +17 -0
  19. chokkin-0.1.0/.cursor/skills/update-design/SKILL.md +41 -0
  20. chokkin-0.1.0/.cursor/skills/update-docs/SKILL.md +48 -0
  21. chokkin-0.1.0/.cursor/skills/update-plan/SKILL.md +43 -0
  22. chokkin-0.1.0/.cursor/skills/wrapup/SKILL.md +42 -0
  23. chokkin-0.1.0/.github/actionlint.yaml +8 -0
  24. chokkin-0.1.0/.github/copilot-instructions.md +13 -0
  25. chokkin-0.1.0/.github/dependabot.yml +25 -0
  26. chokkin-0.1.0/.github/workflows/audit.yml +40 -0
  27. chokkin-0.1.0/.github/workflows/ci.yml +196 -0
  28. chokkin-0.1.0/.github/workflows/release.yml +155 -0
  29. chokkin-0.1.0/.github/zizmor.yml +19 -0
  30. chokkin-0.1.0/.gitignore +34 -0
  31. chokkin-0.1.0/AGENTS.md +173 -0
  32. chokkin-0.1.0/CHANGELOG.md +29 -0
  33. chokkin-0.1.0/CLAUDE.md +65 -0
  34. chokkin-0.1.0/CONTRIBUTING.md +85 -0
  35. chokkin-0.1.0/Cargo.lock +1780 -0
  36. chokkin-0.1.0/Cargo.toml +142 -0
  37. chokkin-0.1.0/LICENSE +21 -0
  38. chokkin-0.1.0/Makefile +95 -0
  39. chokkin-0.1.0/PKG-INFO +247 -0
  40. chokkin-0.1.0/README.ja.md +226 -0
  41. chokkin-0.1.0/README.md +226 -0
  42. chokkin-0.1.0/SECURITY.md +31 -0
  43. chokkin-0.1.0/benches/manifest.rs +70 -0
  44. chokkin-0.1.0/benches/sources.rs +80 -0
  45. chokkin-0.1.0/benches/support/mod.rs +183 -0
  46. chokkin-0.1.0/clippy.toml +12 -0
  47. chokkin-0.1.0/data/binary-map.seed.json +48 -0
  48. chokkin-0.1.0/data/package-map.seed.json +360 -0
  49. chokkin-0.1.0/deny.toml +53 -0
  50. chokkin-0.1.0/docs/adr/0001-parser-selection.md +47 -0
  51. chokkin-0.1.0/docs/dev/ci-porting-notes.md +101 -0
  52. chokkin-0.1.0/docs/dev/oss-validation-report.md +67 -0
  53. chokkin-0.1.0/docs/dev/plans/README.md +91 -0
  54. chokkin-0.1.0/docs/dev/plans/VALIDATION.md +72 -0
  55. chokkin-0.1.0/docs/dev/plans/phase-0-cli-vertical-slice.md +372 -0
  56. chokkin-0.1.0/docs/dev/plans/phase-0-parser-spike-graph-core.md +526 -0
  57. chokkin-0.1.0/docs/dev/plans/phase-1-cli-reporter.md +230 -0
  58. chokkin-0.1.0/docs/dev/plans/phase-1.5-fp-remediation.md +344 -0
  59. chokkin-0.1.0/docs/dev/plans/step-01-root-discovery.md +380 -0
  60. chokkin-0.1.0/docs/dev/plans/step-02-config-load.md +562 -0
  61. chokkin-0.1.0/docs/dev/plans/step-03-manifest-extraction.md +581 -0
  62. chokkin-0.1.0/docs/dev/plans/step-04-source-file-discovery.md +591 -0
  63. chokkin-0.1.0/docs/dev/plans/step-05-config-plugin-extraction.md +682 -0
  64. chokkin-0.1.0/docs/dev/plans/step-06-python-parse.md +385 -0
  65. chokkin-0.1.0/docs/dev/plans/step-07-import-resolution.md +385 -0
  66. chokkin-0.1.0/docs/dev/plans/step-08-entry-root-construction.md +217 -0
  67. chokkin-0.1.0/docs/dev/plans/step-09-reachability-analysis.md +259 -0
  68. chokkin-0.1.0/docs/dev/plans/step-10-dependency-reconciliation.md +251 -0
  69. chokkin-0.1.0/docs/dev/plans/step-11-symbol-usage-analysis.md +188 -0
  70. chokkin-0.1.0/docs/dev/plans/step-12-issue-emission.md +271 -0
  71. chokkin-0.1.0/docs/dev/plans/step-13-optional-fix.md +181 -0
  72. chokkin-0.1.0/docs/dev/spec.ja.md +1053 -0
  73. chokkin-0.1.0/proptest-regressions/manifest/pep508_util.txt +8 -0
  74. chokkin-0.1.0/proptest-regressions/sources/context.txt +7 -0
  75. chokkin-0.1.0/pyproject.toml +29 -0
  76. chokkin-0.1.0/rustfmt.toml +15 -0
  77. chokkin-0.1.0/scripts/bootstrap-agent.sh +18 -0
  78. chokkin-0.1.0/scripts/clone-oss-fixtures.sh +129 -0
  79. chokkin-0.1.0/scripts/generate-package-map.py +209 -0
  80. chokkin-0.1.0/scripts/oss-clones.manifest +40 -0
  81. chokkin-0.1.0/scripts/oss-fixtures.labels.tsv +180 -0
  82. chokkin-0.1.0/scripts/oss-fixtures.manifest +19 -0
  83. chokkin-0.1.0/scripts/oss-metrics.sh +306 -0
  84. chokkin-0.1.0/scripts/oss-recall.manifest +14 -0
  85. chokkin-0.1.0/scripts/run-oss-fixture.sh +163 -0
  86. chokkin-0.1.0/src/cli.rs +201 -0
  87. chokkin-0.1.0/src/config/defaults.rs +347 -0
  88. chokkin-0.1.0/src/config/error.rs +46 -0
  89. chokkin-0.1.0/src/config/load.rs +169 -0
  90. chokkin-0.1.0/src/config/mod.rs +16 -0
  91. chokkin-0.1.0/src/config/parse.rs +529 -0
  92. chokkin-0.1.0/src/config/source.rs +30 -0
  93. chokkin-0.1.0/src/config/types.rs +518 -0
  94. chokkin-0.1.0/src/discovery/error.rs +31 -0
  95. chokkin-0.1.0/src/discovery/mod.rs +7 -0
  96. chokkin-0.1.0/src/discovery/root.rs +275 -0
  97. chokkin-0.1.0/src/entry/apply.rs +104 -0
  98. chokkin-0.1.0/src/entry/auto.rs +183 -0
  99. chokkin-0.1.0/src/entry/build.rs +311 -0
  100. chokkin-0.1.0/src/entry/error.rs +12 -0
  101. chokkin-0.1.0/src/entry/merge.rs +121 -0
  102. chokkin-0.1.0/src/entry/mod.rs +15 -0
  103. chokkin-0.1.0/src/entry/mode.rs +256 -0
  104. chokkin-0.1.0/src/entry/module.rs +118 -0
  105. chokkin-0.1.0/src/entry/types.rs +102 -0
  106. chokkin-0.1.0/src/fix/apply.rs +241 -0
  107. chokkin-0.1.0/src/fix/containment.rs +38 -0
  108. chokkin-0.1.0/src/fix/error.rs +31 -0
  109. chokkin-0.1.0/src/fix/mod.rs +15 -0
  110. chokkin-0.1.0/src/fix/plan.rs +311 -0
  111. chokkin-0.1.0/src/fix/pyproject.rs +165 -0
  112. chokkin-0.1.0/src/fix/requirements.rs +98 -0
  113. chokkin-0.1.0/src/fix/setup_cfg.rs +195 -0
  114. chokkin-0.1.0/src/fix/types.rs +68 -0
  115. chokkin-0.1.0/src/fix/write.rs +94 -0
  116. chokkin-0.1.0/src/graph/build.rs +44 -0
  117. chokkin-0.1.0/src/graph/edges.rs +104 -0
  118. chokkin-0.1.0/src/graph/error.rs +19 -0
  119. chokkin-0.1.0/src/graph/mod.rs +14 -0
  120. chokkin-0.1.0/src/graph/types.rs +383 -0
  121. chokkin-0.1.0/src/lib.rs +141 -0
  122. chokkin-0.1.0/src/main.rs +203 -0
  123. chokkin-0.1.0/src/manifest/error.rs +50 -0
  124. chokkin-0.1.0/src/manifest/extract.rs +450 -0
  125. chokkin-0.1.0/src/manifest/literals.rs +253 -0
  126. chokkin-0.1.0/src/manifest/mod.rs +23 -0
  127. chokkin-0.1.0/src/manifest/pep508_util.rs +349 -0
  128. chokkin-0.1.0/src/manifest/pyproject.rs +560 -0
  129. chokkin-0.1.0/src/manifest/requirements.rs +474 -0
  130. chokkin-0.1.0/src/manifest/setup_cfg.rs +245 -0
  131. chokkin-0.1.0/src/manifest/setup_py.rs +229 -0
  132. chokkin-0.1.0/src/manifest/types.rs +128 -0
  133. chokkin-0.1.0/src/manifest/util.rs +133 -0
  134. chokkin-0.1.0/src/manifest/uv_lock.rs +170 -0
  135. chokkin-0.1.0/src/manifest/warnings.rs +61 -0
  136. chokkin-0.1.0/src/parser/decorators.rs +69 -0
  137. chokkin-0.1.0/src/parser/dynamic.rs +186 -0
  138. chokkin-0.1.0/src/parser/error.rs +17 -0
  139. chokkin-0.1.0/src/parser/exports.rs +76 -0
  140. chokkin-0.1.0/src/parser/ignores.rs +116 -0
  141. chokkin-0.1.0/src/parser/mod.rs +22 -0
  142. chokkin-0.1.0/src/parser/parse.rs +210 -0
  143. chokkin-0.1.0/src/parser/platform_guard.rs +71 -0
  144. chokkin-0.1.0/src/parser/relative.rs +180 -0
  145. chokkin-0.1.0/src/parser/syntax.rs +52 -0
  146. chokkin-0.1.0/src/parser/type_checking.rs +38 -0
  147. chokkin-0.1.0/src/parser/types.rs +187 -0
  148. chokkin-0.1.0/src/parser/visit.rs +350 -0
  149. chokkin-0.1.0/src/pipeline/analyze.rs +251 -0
  150. chokkin-0.1.0/src/pipeline/error.rs +97 -0
  151. chokkin-0.1.0/src/pipeline/mod.rs +13 -0
  152. chokkin-0.1.0/src/pipeline/probe.rs +317 -0
  153. chokkin-0.1.0/src/pipeline/trace.rs +69 -0
  154. chokkin-0.1.0/src/pipeline/warnings.rs +137 -0
  155. chokkin-0.1.0/src/plugins/config_scan.rs +580 -0
  156. chokkin-0.1.0/src/plugins/context.rs +20 -0
  157. chokkin-0.1.0/src/plugins/django.rs +205 -0
  158. chokkin-0.1.0/src/plugins/error.rs +26 -0
  159. chokkin-0.1.0/src/plugins/extract.rs +119 -0
  160. chokkin-0.1.0/src/plugins/fastapi.rs +117 -0
  161. chokkin-0.1.0/src/plugins/mod.rs +22 -0
  162. chokkin-0.1.0/src/plugins/pytest.rs +223 -0
  163. chokkin-0.1.0/src/plugins/stub.rs +18 -0
  164. chokkin-0.1.0/src/plugins/types.rs +168 -0
  165. chokkin-0.1.0/src/plugins/util.rs +338 -0
  166. chokkin-0.1.0/src/plugins/warnings.rs +39 -0
  167. chokkin-0.1.0/src/reachability/bfs.rs +225 -0
  168. chokkin-0.1.0/src/reachability/build.rs +167 -0
  169. chokkin-0.1.0/src/reachability/error.rs +22 -0
  170. chokkin-0.1.0/src/reachability/mod.rs +16 -0
  171. chokkin-0.1.0/src/reachability/module_index.rs +120 -0
  172. chokkin-0.1.0/src/reachability/trace.rs +111 -0
  173. chokkin-0.1.0/src/reachability/types.rs +139 -0
  174. chokkin-0.1.0/src/reporters/compact.rs +38 -0
  175. chokkin-0.1.0/src/reporters/default.rs +88 -0
  176. chokkin-0.1.0/src/reporters/format.rs +86 -0
  177. chokkin-0.1.0/src/reporters/json.rs +152 -0
  178. chokkin-0.1.0/src/reporters/markdown.rs +73 -0
  179. chokkin-0.1.0/src/reporters/mod.rs +30 -0
  180. chokkin-0.1.0/src/reporters/traits.rs +11 -0
  181. chokkin-0.1.0/src/reporters/types.rs +65 -0
  182. chokkin-0.1.0/src/resolver/apply.rs +96 -0
  183. chokkin-0.1.0/src/resolver/bundled/binaries.rs +52 -0
  184. chokkin-0.1.0/src/resolver/bundled/mod.rs +6 -0
  185. chokkin-0.1.0/src/resolver/bundled/package_modules.rs +289 -0
  186. chokkin-0.1.0/src/resolver/error.rs +12 -0
  187. chokkin-0.1.0/src/resolver/first_party.rs +99 -0
  188. chokkin-0.1.0/src/resolver/maps.rs +189 -0
  189. chokkin-0.1.0/src/resolver/metadata.rs +45 -0
  190. chokkin-0.1.0/src/resolver/mod.rs +24 -0
  191. chokkin-0.1.0/src/resolver/resolve.rs +283 -0
  192. chokkin-0.1.0/src/resolver/stdlib/py311.txt +181 -0
  193. chokkin-0.1.0/src/resolver/stdlib.rs +38 -0
  194. chokkin-0.1.0/src/resolver/transitive.rs +48 -0
  195. chokkin-0.1.0/src/resolver/types.rs +119 -0
  196. chokkin-0.1.0/src/resolver/venv.rs +255 -0
  197. chokkin-0.1.0/src/rules/chk001.rs +59 -0
  198. chokkin-0.1.0/src/rules/deps/binary.rs +53 -0
  199. chokkin-0.1.0/src/rules/deps/context.rs +215 -0
  200. chokkin-0.1.0/src/rules/deps/duplicate.rs +66 -0
  201. chokkin-0.1.0/src/rules/deps/misplaced.rs +100 -0
  202. chokkin-0.1.0/src/rules/deps/missing.rs +303 -0
  203. chokkin-0.1.0/src/rules/deps/mod.rs +12 -0
  204. chokkin-0.1.0/src/rules/deps/reconcile.rs +311 -0
  205. chokkin-0.1.0/src/rules/deps/unused.rs +164 -0
  206. chokkin-0.1.0/src/rules/deps/used.rs +215 -0
  207. chokkin-0.1.0/src/rules/emit.rs +315 -0
  208. chokkin-0.1.0/src/rules/filter.rs +106 -0
  209. chokkin-0.1.0/src/rules/ignore.rs +340 -0
  210. chokkin-0.1.0/src/rules/mod.rs +17 -0
  211. chokkin-0.1.0/src/rules/symbols/analyze.rs +286 -0
  212. chokkin-0.1.0/src/rules/symbols/exports.rs +99 -0
  213. chokkin-0.1.0/src/rules/symbols/external.rs +52 -0
  214. chokkin-0.1.0/src/rules/symbols/graph.rs +129 -0
  215. chokkin-0.1.0/src/rules/symbols/mod.rs +11 -0
  216. chokkin-0.1.0/src/rules/symbols/types.rs +18 -0
  217. chokkin-0.1.0/src/rules/types.rs +276 -0
  218. chokkin-0.1.0/src/sources/context.rs +245 -0
  219. chokkin-0.1.0/src/sources/discover.rs +67 -0
  220. chokkin-0.1.0/src/sources/error.rs +26 -0
  221. chokkin-0.1.0/src/sources/glob.rs +120 -0
  222. chokkin-0.1.0/src/sources/layout.rs +308 -0
  223. chokkin-0.1.0/src/sources/mod.rs +19 -0
  224. chokkin-0.1.0/src/sources/types.rs +117 -0
  225. chokkin-0.1.0/src/sources/walk.rs +462 -0
  226. chokkin-0.1.0/src/sources/warnings.rs +41 -0
  227. chokkin-0.1.0/tests/cli_analyze.rs +97 -0
  228. chokkin-0.1.0/tests/cli_probe.rs +97 -0
  229. chokkin-0.1.0/tests/config_load.rs +356 -0
  230. chokkin-0.1.0/tests/deps_reconcile.rs +284 -0
  231. chokkin-0.1.0/tests/discovery_root.rs +157 -0
  232. chokkin-0.1.0/tests/entry_build.rs +243 -0
  233. chokkin-0.1.0/tests/fix_apply.rs +131 -0
  234. chokkin-0.1.0/tests/fixtures/config/backslash_entry/pyproject.toml +6 -0
  235. chokkin-0.1.0/tests/fixtures/config/broken_toml/pyproject.toml +6 -0
  236. chokkin-0.1.0/tests/fixtures/config/chokkin_toml_only/chokkin.toml +2 -0
  237. chokkin-0.1.0/tests/fixtures/config/chokkin_toml_only/requirements.txt +1 -0
  238. chokkin-0.1.0/tests/fixtures/config/defaults_only/pyproject.toml +3 -0
  239. chokkin-0.1.0/tests/fixtures/config/dot_chokkin_only/.chokkin.toml +2 -0
  240. chokkin-0.1.0/tests/fixtures/config/dot_chokkin_only/requirements.txt +1 -0
  241. chokkin-0.1.0/tests/fixtures/config/empty_chokkin_toml/chokkin.toml +0 -0
  242. chokkin-0.1.0/tests/fixtures/config/empty_chokkin_toml/requirements.txt +1 -0
  243. chokkin-0.1.0/tests/fixtures/config/empty_workspace_path/pyproject.toml +6 -0
  244. chokkin-0.1.0/tests/fixtures/config/entry_empty_symbol/pyproject.toml +6 -0
  245. chokkin-0.1.0/tests/fixtures/config/incomplete_dependencies/pyproject.toml +6 -0
  246. chokkin-0.1.0/tests/fixtures/config/invalid_confidence/pyproject.toml +6 -0
  247. chokkin-0.1.0/tests/fixtures/config/invalid_entry/pyproject.toml +6 -0
  248. chokkin-0.1.0/tests/fixtures/config/invalid_exclude_path/pyproject.toml +6 -0
  249. chokkin-0.1.0/tests/fixtures/config/invalid_ignore/pyproject.toml +6 -0
  250. chokkin-0.1.0/tests/fixtures/config/invalid_mode/pyproject.toml +6 -0
  251. chokkin-0.1.0/tests/fixtures/config/invalid_plugin_type/pyproject.toml +6 -0
  252. chokkin-0.1.0/tests/fixtures/config/invalid_project_path/pyproject.toml +6 -0
  253. chokkin-0.1.0/tests/fixtures/config/invalid_target_version/pyproject.toml +6 -0
  254. chokkin-0.1.0/tests/fixtures/config/invalid_uv_workspace_members/pyproject.toml +6 -0
  255. chokkin-0.1.0/tests/fixtures/config/merge_priority/.chokkin.toml +1 -0
  256. chokkin-0.1.0/tests/fixtures/config/merge_priority/chokkin.toml +2 -0
  257. chokkin-0.1.0/tests/fixtures/config/merge_priority/pyproject.toml +7 -0
  258. chokkin-0.1.0/tests/fixtures/config/no_config/requirements.txt +1 -0
  259. chokkin-0.1.0/tests/fixtures/config/partial_plugins/pyproject.toml +6 -0
  260. chokkin-0.1.0/tests/fixtures/config/pyproject_full/pyproject.toml +38 -0
  261. chokkin-0.1.0/tests/fixtures/config/unknown_dependencies_key/pyproject.toml +6 -0
  262. chokkin-0.1.0/tests/fixtures/config/unknown_plugin/pyproject.toml +6 -0
  263. chokkin-0.1.0/tests/fixtures/config/unknown_top_level_key/pyproject.toml +6 -0
  264. chokkin-0.1.0/tests/fixtures/config/unknown_workspace_key/pyproject.toml +7 -0
  265. chokkin-0.1.0/tests/fixtures/config/uv_workspace_hint/pyproject.toml +6 -0
  266. chokkin-0.1.0/tests/fixtures/config/uv_workspace_string_member/pyproject.toml +6 -0
  267. chokkin-0.1.0/tests/fixtures/config/workspace_overrides/pyproject.toml +8 -0
  268. chokkin-0.1.0/tests/fixtures/deps/binary_mkdocs_theme/mkdocs.yml +3 -0
  269. chokkin-0.1.0/tests/fixtures/deps/binary_mkdocs_theme/pyproject.toml +7 -0
  270. chokkin-0.1.0/tests/fixtures/deps/binary_mkdocs_theme/src/acme/main.py +5 -0
  271. chokkin-0.1.0/tests/fixtures/deps/binary_tool_pyproject/pyproject.toml +16 -0
  272. chokkin-0.1.0/tests/fixtures/deps/binary_tool_pyproject/src/acme/main.py +5 -0
  273. chokkin-0.1.0/tests/fixtures/deps/dev_group_only/pyproject.toml +10 -0
  274. chokkin-0.1.0/tests/fixtures/deps/dev_group_only/src/acme/main.py +5 -0
  275. chokkin-0.1.0/tests/fixtures/deps/duplicate_requests/pyproject.toml +10 -0
  276. chokkin-0.1.0/tests/fixtures/deps/duplicate_requests/src/acme/__init__.py +0 -0
  277. chokkin-0.1.0/tests/fixtures/deps/duplicate_requests/src/acme/main.py +5 -0
  278. chokkin-0.1.0/tests/fixtures/deps/map_alias/pyproject.toml +7 -0
  279. chokkin-0.1.0/tests/fixtures/deps/map_alias/src/acme/main.py +5 -0
  280. chokkin-0.1.0/tests/fixtures/deps/marker_pywin32/pyproject.toml +10 -0
  281. chokkin-0.1.0/tests/fixtures/deps/marker_pywin32/src/acme/__init__.py +0 -0
  282. chokkin-0.1.0/tests/fixtures/deps/marker_pywin32/src/acme/main.py +5 -0
  283. chokkin-0.1.0/tests/fixtures/deps/misplaced_pytest/pyproject.toml +10 -0
  284. chokkin-0.1.0/tests/fixtures/deps/misplaced_pytest/src/acme/__init__.py +0 -0
  285. chokkin-0.1.0/tests/fixtures/deps/misplaced_pytest/src/acme/main.py +5 -0
  286. chokkin-0.1.0/tests/fixtures/deps/missing_yaml/pyproject.toml +7 -0
  287. chokkin-0.1.0/tests/fixtures/deps/missing_yaml/src/acme/__init__.py +0 -0
  288. chokkin-0.1.0/tests/fixtures/deps/missing_yaml/src/acme/main.py +7 -0
  289. chokkin-0.1.0/tests/fixtures/deps/optional_try_import/pyproject.toml +10 -0
  290. chokkin-0.1.0/tests/fixtures/deps/optional_try_import/src/acme/__init__.py +3 -0
  291. chokkin-0.1.0/tests/fixtures/deps/optional_try_import/src/acme/main.py +6 -0
  292. chokkin-0.1.0/tests/fixtures/deps/optional_try_import/src/acme/response.py +4 -0
  293. chokkin-0.1.0/tests/fixtures/deps/pdm_dev_deps/pyproject.toml +10 -0
  294. chokkin-0.1.0/tests/fixtures/deps/pdm_dev_deps/src/acme/main.py +5 -0
  295. chokkin-0.1.0/tests/fixtures/deps/platform_guard_import/pyproject.toml +7 -0
  296. chokkin-0.1.0/tests/fixtures/deps/platform_guard_import/src/acme/main.py +6 -0
  297. chokkin-0.1.0/tests/fixtures/deps/self_extra/pyproject.toml +7 -0
  298. chokkin-0.1.0/tests/fixtures/deps/self_extra/src/self_extra/main.py +2 -0
  299. chokkin-0.1.0/tests/fixtures/deps/transitive_urllib3/pyproject.toml +7 -0
  300. chokkin-0.1.0/tests/fixtures/deps/transitive_urllib3/src/acme/__init__.py +0 -0
  301. chokkin-0.1.0/tests/fixtures/deps/transitive_urllib3/src/acme/main.py +7 -0
  302. chokkin-0.1.0/tests/fixtures/deps/transitive_urllib3/uv.lock +14 -0
  303. chokkin-0.1.0/tests/fixtures/deps/unlisted_pytest/pyproject.toml +10 -0
  304. chokkin-0.1.0/tests/fixtures/deps/unlisted_pytest/src/acme/__init__.py +0 -0
  305. chokkin-0.1.0/tests/fixtures/deps/unlisted_pytest/src/acme/main.py +5 -0
  306. chokkin-0.1.0/tests/fixtures/deps/unlisted_pytest/tests/test_sample.py +2 -0
  307. chokkin-0.1.0/tests/fixtures/deps/unused_boto3/pyproject.toml +7 -0
  308. chokkin-0.1.0/tests/fixtures/deps/unused_boto3/src/acme/__init__.py +0 -0
  309. chokkin-0.1.0/tests/fixtures/deps/unused_boto3/src/acme/main.py +5 -0
  310. chokkin-0.1.0/tests/fixtures/discovery/monorepo_subdir/root/pkg/sub/pyproject.toml +3 -0
  311. chokkin-0.1.0/tests/fixtures/discovery/monorepo_subdir/root/pyproject.toml +3 -0
  312. chokkin-0.1.0/tests/fixtures/discovery/multi_marker/pyproject.toml +3 -0
  313. chokkin-0.1.0/tests/fixtures/discovery/multi_marker/requirements.txt +1 -0
  314. chokkin-0.1.0/tests/fixtures/discovery/nested_src/pyproject.toml +3 -0
  315. chokkin-0.1.0/tests/fixtures/discovery/nested_src/src/pkg/module.py +1 -0
  316. chokkin-0.1.0/tests/fixtures/discovery/pyproject_only/pyproject.toml +3 -0
  317. chokkin-0.1.0/tests/fixtures/discovery/requirements_only/requirements.txt +1 -0
  318. chokkin-0.1.0/tests/fixtures/discovery/setup_cfg_only/setup.cfg +3 -0
  319. chokkin-0.1.0/tests/fixtures/discovery/setup_py_only/setup.py +3 -0
  320. chokkin-0.1.0/tests/fixtures/discovery/uv_lock_only/uv.lock +1 -0
  321. chokkin-0.1.0/tests/fixtures/entry/explicit_entry/manage.py +1 -0
  322. chokkin-0.1.0/tests/fixtures/entry/explicit_entry/pyproject.toml +6 -0
  323. chokkin-0.1.0/tests/fixtures/entry/fastapi_asgi/pyproject.toml +4 -0
  324. chokkin-0.1.0/tests/fixtures/entry/fastapi_asgi/src/acme/__init__.py +0 -0
  325. chokkin-0.1.0/tests/fixtures/entry/fastapi_asgi/src/acme/asgi.py +1 -0
  326. chokkin-0.1.0/tests/fixtures/entry/library_only/pyproject.toml +3 -0
  327. chokkin-0.1.0/tests/fixtures/entry/library_only/src/acme/__init__.py +1 -0
  328. chokkin-0.1.0/tests/fixtures/manifest/broken_pyproject/pyproject.toml +2 -0
  329. chokkin-0.1.0/tests/fixtures/manifest/duplicate_deps/pyproject.toml +4 -0
  330. chokkin-0.1.0/tests/fixtures/manifest/duplicate_deps/requirements-dev.txt +1 -0
  331. chokkin-0.1.0/tests/fixtures/manifest/metadata_conflict/pyproject.toml +3 -0
  332. chokkin-0.1.0/tests/fixtures/manifest/metadata_conflict/setup.cfg +3 -0
  333. chokkin-0.1.0/tests/fixtures/manifest/poetry_detected/pyproject.toml +7 -0
  334. chokkin-0.1.0/tests/fixtures/manifest/pyproject_dynamic/pyproject.toml +4 -0
  335. chokkin-0.1.0/tests/fixtures/manifest/pyproject_dynamic/requirements.txt +1 -0
  336. chokkin-0.1.0/tests/fixtures/manifest/pyproject_full/pyproject.toml +20 -0
  337. chokkin-0.1.0/tests/fixtures/manifest/pyproject_minimal/pyproject.toml +4 -0
  338. chokkin-0.1.0/tests/fixtures/manifest/requirements_constraints/constraints.txt +1 -0
  339. chokkin-0.1.0/tests/fixtures/manifest/requirements_constraints/requirements.txt +2 -0
  340. chokkin-0.1.0/tests/fixtures/manifest/requirements_editable/requirements.txt +1 -0
  341. chokkin-0.1.0/tests/fixtures/manifest/requirements_egg/requirements.txt +1 -0
  342. chokkin-0.1.0/tests/fixtures/manifest/requirements_long_flag/dev.txt +1 -0
  343. chokkin-0.1.0/tests/fixtures/manifest/requirements_long_flag/requirements.txt +1 -0
  344. chokkin-0.1.0/tests/fixtures/manifest/requirements_only/requirements.txt +1 -0
  345. chokkin-0.1.0/tests/fixtures/manifest/requirements_opaque_url/requirements.txt +1 -0
  346. chokkin-0.1.0/tests/fixtures/manifest/requirements_recursive/nested.txt +1 -0
  347. chokkin-0.1.0/tests/fixtures/manifest/requirements_recursive/requirements.txt +2 -0
  348. chokkin-0.1.0/tests/fixtures/manifest/setup_cfg_install_requires/setup.cfg +12 -0
  349. chokkin-0.1.0/tests/fixtures/manifest/setup_py_dynamic/setup.py +8 -0
  350. chokkin-0.1.0/tests/fixtures/manifest/setup_py_partial_comment/setup.py +6 -0
  351. chokkin-0.1.0/tests/fixtures/manifest/setup_py_static/setup.py +8 -0
  352. chokkin-0.1.0/tests/fixtures/manifest/uv_lock_graph/pyproject.toml +3 -0
  353. chokkin-0.1.0/tests/fixtures/manifest/uv_lock_graph/uv.lock +20 -0
  354. chokkin-0.1.0/tests/fixtures/manifest/uv_workspace_hint/pyproject.toml +6 -0
  355. chokkin-0.1.0/tests/fixtures/parse/broken/invalid_syntax.py +1 -0
  356. chokkin-0.1.0/tests/fixtures/parse/dynamic/dunder_import.py +1 -0
  357. chokkin-0.1.0/tests/fixtures/parse/dynamic/importlib_literal.py +3 -0
  358. chokkin-0.1.0/tests/fixtures/parse/dynamic/importlib_opaque.py +3 -0
  359. chokkin-0.1.0/tests/fixtures/parse/exports/all_list.py +1 -0
  360. chokkin-0.1.0/tests/fixtures/parse/exports/all_tuple.py +1 -0
  361. chokkin-0.1.0/tests/fixtures/parse/ignores/file_ignore.py +2 -0
  362. chokkin-0.1.0/tests/fixtures/parse/ignores/inline_ignore.py +1 -0
  363. chokkin-0.1.0/tests/fixtures/parse/ignores/standalone_file_ignore.py +2 -0
  364. chokkin-0.1.0/tests/fixtures/parse/imports/absolute_import.py +1 -0
  365. chokkin-0.1.0/tests/fixtures/parse/imports/src/acme/__init__.py +2 -0
  366. chokkin-0.1.0/tests/fixtures/parse/imports/src/acme/api/__init__.py +1 -0
  367. chokkin-0.1.0/tests/fixtures/parse/imports/src/acme/api/routes.py +1 -0
  368. chokkin-0.1.0/tests/fixtures/parse/imports/src/acme/api/util.py +2 -0
  369. chokkin-0.1.0/tests/fixtures/parse/imports/src/acme/models.py +2 -0
  370. chokkin-0.1.0/tests/fixtures/parse/imports/try_optional_import.py +4 -0
  371. chokkin-0.1.0/tests/fixtures/parse/imports/type_checking_block.py +4 -0
  372. chokkin-0.1.0/tests/fixtures/parse/symbols/decorated_fixture.py +3 -0
  373. chokkin-0.1.0/tests/fixtures/parse/symbols/fastapi_route.py +3 -0
  374. chokkin-0.1.0/tests/fixtures/parse/symbols/private_assign.py +2 -0
  375. chokkin-0.1.0/tests/fixtures/parse/symbols/top_level_defs.py +5 -0
  376. chokkin-0.1.0/tests/fixtures/parse/syntax/match_import.py +3 -0
  377. chokkin-0.1.0/tests/fixtures/parser_spike/p1_empty_init.py +0 -0
  378. chokkin-0.1.0/tests/fixtures/parser_spike/p2_basic_imports.py +2 -0
  379. chokkin-0.1.0/tests/fixtures/parser_spike/p3_relative_import.py +1 -0
  380. chokkin-0.1.0/tests/fixtures/parser_spike/p4_type_checking.py +4 -0
  381. chokkin-0.1.0/tests/fixtures/parser_spike/p5_try_import.py +4 -0
  382. chokkin-0.1.0/tests/fixtures/parser_spike/p6_fstring.py +2 -0
  383. chokkin-0.1.0/tests/fixtures/parser_spike/p7_match.py +6 -0
  384. chokkin-0.1.0/tests/fixtures/parser_spike/p8_ignore_comment.py +1 -0
  385. chokkin-0.1.0/tests/fixtures/parser_spike/p9_syntax_error.py +1 -0
  386. chokkin-0.1.0/tests/fixtures/plugins/django_manage/manage.py +8 -0
  387. chokkin-0.1.0/tests/fixtures/plugins/django_manage/mysite/settings.py +8 -0
  388. chokkin-0.1.0/tests/fixtures/plugins/django_manage/mysite/urls.py +3 -0
  389. chokkin-0.1.0/tests/fixtures/plugins/django_manage/pyproject.toml +4 -0
  390. chokkin-0.1.0/tests/fixtures/plugins/django_migrations/manage.py +4 -0
  391. chokkin-0.1.0/tests/fixtures/plugins/django_migrations/mysite/migrations/0001_initial.py +5 -0
  392. chokkin-0.1.0/tests/fixtures/plugins/django_migrations/mysite/settings.py +1 -0
  393. chokkin-0.1.0/tests/fixtures/plugins/django_migrations/pyproject.toml +4 -0
  394. chokkin-0.1.0/tests/fixtures/plugins/django_partial_settings/manage.py +4 -0
  395. chokkin-0.1.0/tests/fixtures/plugins/django_partial_settings/mysite/settings.py +1 -0
  396. chokkin-0.1.0/tests/fixtures/plugins/django_partial_settings/pyproject.toml +4 -0
  397. chokkin-0.1.0/tests/fixtures/plugins/fastapi_scripts/pyproject.toml +7 -0
  398. chokkin-0.1.0/tests/fixtures/plugins/fastapi_scripts/src/pkg/main.py +3 -0
  399. chokkin-0.1.0/tests/fixtures/plugins/fastapi_uvicorn_tool/pyproject.toml +7 -0
  400. chokkin-0.1.0/tests/fixtures/plugins/fastapi_uvicorn_tool/src/pkg/main.py +3 -0
  401. chokkin-0.1.0/tests/fixtures/plugins/no_django/pyproject.toml +4 -0
  402. chokkin-0.1.0/tests/fixtures/plugins/no_django/src/plain/__init__.py +0 -0
  403. chokkin-0.1.0/tests/fixtures/plugins/plugins_disabled/pyproject.toml +8 -0
  404. chokkin-0.1.0/tests/fixtures/plugins/plugins_disabled/tests/test_disabled.py +2 -0
  405. chokkin-0.1.0/tests/fixtures/plugins/pytest_ini/pyproject.toml +3 -0
  406. chokkin-0.1.0/tests/fixtures/plugins/pytest_ini/pytest.ini +2 -0
  407. chokkin-0.1.0/tests/fixtures/plugins/pytest_ini/tests/test_one.py +2 -0
  408. chokkin-0.1.0/tests/fixtures/plugins/pytest_pyproject/pyproject.toml +7 -0
  409. chokkin-0.1.0/tests/fixtures/plugins/pytest_pyproject/tests/conftest.py +1 -0
  410. chokkin-0.1.0/tests/fixtures/plugins/pytest_pyproject/tests/test_sample.py +2 -0
  411. chokkin-0.1.0/tests/fixtures/plugins/pytest_setup_cfg/pyproject.toml +3 -0
  412. chokkin-0.1.0/tests/fixtures/plugins/pytest_setup_cfg/setup.cfg +2 -0
  413. chokkin-0.1.0/tests/fixtures/plugins/pytest_setup_cfg/tests/test_cfg.py +2 -0
  414. chokkin-0.1.0/tests/fixtures/probe/empty/pyproject.toml +3 -0
  415. chokkin-0.1.0/tests/fixtures/reachability/chain_import/pyproject.toml +7 -0
  416. chokkin-0.1.0/tests/fixtures/reachability/chain_import/src/acme/__init__.py +0 -0
  417. chokkin-0.1.0/tests/fixtures/reachability/chain_import/src/acme/a.py +1 -0
  418. chokkin-0.1.0/tests/fixtures/reachability/chain_import/src/acme/b.py +1 -0
  419. chokkin-0.1.0/tests/fixtures/reachability/chain_import/src/acme/legacy.py +1 -0
  420. chokkin-0.1.0/tests/fixtures/reachability/chain_import/src/acme/main.py +1 -0
  421. chokkin-0.1.0/tests/fixtures/reachability/dynamic_import/pyproject.toml +6 -0
  422. chokkin-0.1.0/tests/fixtures/reachability/dynamic_import/src/acme/__init__.py +0 -0
  423. chokkin-0.1.0/tests/fixtures/reachability/dynamic_import/src/acme/main.py +3 -0
  424. chokkin-0.1.0/tests/fixtures/reachability/dynamic_import/src/acme/plugins.py +1 -0
  425. chokkin-0.1.0/tests/fixtures/reachability/library_orphan/pyproject.toml +6 -0
  426. chokkin-0.1.0/tests/fixtures/reachability/library_orphan/src/acme/__init__.py +1 -0
  427. chokkin-0.1.0/tests/fixtures/reachability/library_orphan/src/acme/orphan.py +1 -0
  428. chokkin-0.1.0/tests/fixtures/reachability/plugin_module_ref/manage.py +1 -0
  429. chokkin-0.1.0/tests/fixtures/reachability/plugin_module_ref/myapp/__init__.py +0 -0
  430. chokkin-0.1.0/tests/fixtures/reachability/plugin_module_ref/mysite/settings.py +1 -0
  431. chokkin-0.1.0/tests/fixtures/reachability/plugin_module_ref/pyproject.toml +6 -0
  432. chokkin-0.1.0/tests/fixtures/resolver/first_party/pyproject.toml +3 -0
  433. chokkin-0.1.0/tests/fixtures/resolver/first_party/src/acme/__init__.py +0 -0
  434. chokkin-0.1.0/tests/fixtures/resolver/first_party/src/acme/app.py +1 -0
  435. chokkin-0.1.0/tests/fixtures/resolver/pillow_import/main.py +1 -0
  436. chokkin-0.1.0/tests/fixtures/resolver/pillow_import/pyproject.toml +4 -0
  437. chokkin-0.1.0/tests/fixtures/resolver/stdlib/main.py +1 -0
  438. chokkin-0.1.0/tests/fixtures/resolver/stdlib/pyproject.toml +3 -0
  439. chokkin-0.1.0/tests/fixtures/resolver/third_party/main.py +1 -0
  440. chokkin-0.1.0/tests/fixtures/resolver/third_party/pyproject.toml +4 -0
  441. chokkin-0.1.0/tests/fixtures/resolver/user_map/main.py +1 -0
  442. chokkin-0.1.0/tests/fixtures/resolver/user_map/pyproject.toml +6 -0
  443. chokkin-0.1.0/tests/fixtures/resolver/venv_priority/.venv/lib/python3.11/site-packages/demo_dist-1.0.0.dist-info/METADATA +3 -0
  444. chokkin-0.1.0/tests/fixtures/resolver/venv_priority/.venv/lib/python3.11/site-packages/demo_dist-1.0.0.dist-info/top_level.txt +1 -0
  445. chokkin-0.1.0/tests/fixtures/resolver/venv_priority/main.py +1 -0
  446. chokkin-0.1.0/tests/fixtures/resolver/venv_priority/pyproject.toml +3 -0
  447. chokkin-0.1.0/tests/fixtures/sources/ambiguous_flat/acme/__init__.py +0 -0
  448. chokkin-0.1.0/tests/fixtures/sources/ambiguous_flat/acme/foo.py +0 -0
  449. chokkin-0.1.0/tests/fixtures/sources/ambiguous_flat/other/__init__.py +0 -0
  450. chokkin-0.1.0/tests/fixtures/sources/ambiguous_flat/other/bar.py +0 -0
  451. chokkin-0.1.0/tests/fixtures/sources/ambiguous_flat/pyproject.toml +3 -0
  452. chokkin-0.1.0/tests/fixtures/sources/ambiguous_flat_no_name/acme/__init__.py +0 -0
  453. chokkin-0.1.0/tests/fixtures/sources/ambiguous_flat_no_name/acme/foo.py +0 -0
  454. chokkin-0.1.0/tests/fixtures/sources/ambiguous_flat_no_name/other/__init__.py +0 -0
  455. chokkin-0.1.0/tests/fixtures/sources/ambiguous_flat_no_name/other/bar.py +0 -0
  456. chokkin-0.1.0/tests/fixtures/sources/ambiguous_flat_no_name/pyproject.toml +2 -0
  457. chokkin-0.1.0/tests/fixtures/sources/entry_directory/pyproject.toml +6 -0
  458. chokkin-0.1.0/tests/fixtures/sources/entry_directory/src/acme/__init__.py +0 -0
  459. chokkin-0.1.0/tests/fixtures/sources/entry_directory/src/acme/module.py +0 -0
  460. chokkin-0.1.0/tests/fixtures/sources/exclude_tests/pyproject.toml +6 -0
  461. chokkin-0.1.0/tests/fixtures/sources/exclude_tests/src/acme/__init__.py +0 -0
  462. chokkin-0.1.0/tests/fixtures/sources/exclude_tests/src/acme/module.py +0 -0
  463. chokkin-0.1.0/tests/fixtures/sources/exclude_tests/tests/test_module.py +0 -0
  464. chokkin-0.1.0/tests/fixtures/sources/explicit_globs/custom/only.py +0 -0
  465. chokkin-0.1.0/tests/fixtures/sources/explicit_globs/pyproject.toml +6 -0
  466. chokkin-0.1.0/tests/fixtures/sources/explicit_globs/tests/test_other.py +0 -0
  467. chokkin-0.1.0/tests/fixtures/sources/fallback_layout/manage.py +0 -0
  468. chokkin-0.1.0/tests/fixtures/sources/fallback_layout/pyproject.toml +3 -0
  469. chokkin-0.1.0/tests/fixtures/sources/flat_layout/acme/__init__.py +0 -0
  470. chokkin-0.1.0/tests/fixtures/sources/flat_layout/acme/foo.py +0 -0
  471. chokkin-0.1.0/tests/fixtures/sources/flat_layout/pyproject.toml +3 -0
  472. chokkin-0.1.0/tests/fixtures/sources/gitignore_disabled/.gitignore +1 -0
  473. chokkin-0.1.0/tests/fixtures/sources/gitignore_disabled/acme/__init__.py +0 -0
  474. chokkin-0.1.0/tests/fixtures/sources/gitignore_disabled/acme/visible.py +0 -0
  475. chokkin-0.1.0/tests/fixtures/sources/gitignore_disabled/local/hidden.py +0 -0
  476. chokkin-0.1.0/tests/fixtures/sources/gitignore_disabled/pyproject.toml +7 -0
  477. chokkin-0.1.0/tests/fixtures/sources/gitignore_respected/.gitignore +1 -0
  478. chokkin-0.1.0/tests/fixtures/sources/gitignore_respected/acme/__init__.py +0 -0
  479. chokkin-0.1.0/tests/fixtures/sources/gitignore_respected/acme/visible.py +0 -0
  480. chokkin-0.1.0/tests/fixtures/sources/gitignore_respected/pyproject.toml +3 -0
  481. chokkin-0.1.0/tests/fixtures/sources/missing_entry/pyproject.toml +6 -0
  482. chokkin-0.1.0/tests/fixtures/sources/missing_entry/src/acme/__init__.py +0 -0
  483. chokkin-0.1.0/tests/fixtures/sources/missing_entry/src/acme/module.py +0 -0
  484. chokkin-0.1.0/tests/fixtures/sources/nested_ignored/build/fake/ignored.py +0 -0
  485. chokkin-0.1.0/tests/fixtures/sources/nested_ignored/pyproject.toml +3 -0
  486. chokkin-0.1.0/tests/fixtures/sources/nested_ignored/src/acme/__init__.py +0 -0
  487. chokkin-0.1.0/tests/fixtures/sources/nested_ignored/src/acme/module.py +0 -0
  488. chokkin-0.1.0/tests/fixtures/sources/production_mode/chokkin.toml +1 -0
  489. chokkin-0.1.0/tests/fixtures/sources/production_mode/pyproject.toml +3 -0
  490. chokkin-0.1.0/tests/fixtures/sources/production_mode/src/acme/__init__.py +0 -0
  491. chokkin-0.1.0/tests/fixtures/sources/production_mode/src/acme/module.py +0 -0
  492. chokkin-0.1.0/tests/fixtures/sources/production_mode/tests/test_module.py +0 -0
  493. chokkin-0.1.0/tests/fixtures/sources/src_layout/docs/conf.py +0 -0
  494. chokkin-0.1.0/tests/fixtures/sources/src_layout/pyproject.toml +4 -0
  495. chokkin-0.1.0/tests/fixtures/sources/src_layout/scripts/run.py +0 -0
  496. chokkin-0.1.0/tests/fixtures/sources/src_layout/src/acme/__init__.py +0 -0
  497. chokkin-0.1.0/tests/fixtures/sources/src_layout/src/acme/module.py +0 -0
  498. chokkin-0.1.0/tests/fixtures/sources/src_layout/tests/conftest.py +1 -0
  499. chokkin-0.1.0/tests/fixtures/sources/src_layout/tests/test_module.py +0 -0
  500. chokkin-0.1.0/tests/fixtures/symbols/library_mode/pyproject.toml +8 -0
  501. chokkin-0.1.0/tests/fixtures/symbols/library_mode/src/acme/__init__.py +0 -0
  502. chokkin-0.1.0/tests/fixtures/symbols/library_mode/src/acme/main.py +6 -0
  503. chokkin-0.1.0/tests/fixtures/symbols/pytest_fixture/pyproject.toml +7 -0
  504. chokkin-0.1.0/tests/fixtures/symbols/pytest_fixture/src/acme/__init__.py +0 -0
  505. chokkin-0.1.0/tests/fixtures/symbols/pytest_fixture/src/acme/conftest.py +6 -0
  506. chokkin-0.1.0/tests/fixtures/symbols/pytest_fixture/src/acme/main.py +2 -0
  507. chokkin-0.1.0/tests/fixtures/symbols/unresolved_import/pyproject.toml +7 -0
  508. chokkin-0.1.0/tests/fixtures/symbols/unresolved_import/src/acme/__init__.py +0 -0
  509. chokkin-0.1.0/tests/fixtures/symbols/unresolved_import/src/acme/main.py +5 -0
  510. chokkin-0.1.0/tests/fixtures/symbols/unused_export/pyproject.toml +7 -0
  511. chokkin-0.1.0/tests/fixtures/symbols/unused_export/src/acme/__init__.py +0 -0
  512. chokkin-0.1.0/tests/fixtures/symbols/unused_export/src/acme/main.py +5 -0
  513. chokkin-0.1.0/tests/fixtures/symbols/unused_export/src/acme/utils.py +6 -0
  514. chokkin-0.1.0/tests/fixtures/symbols/unused_reexport/pyproject.toml +7 -0
  515. chokkin-0.1.0/tests/fixtures/symbols/unused_reexport/src/acme/__init__.py +1 -0
  516. chokkin-0.1.0/tests/fixtures/symbols/unused_reexport/src/acme/main.py +7 -0
  517. chokkin-0.1.0/tests/fixtures/symbols/unused_reexport/src/acme/sub.py +1 -0
  518. chokkin-0.1.0/tests/fuzz_corpus.rs +274 -0
  519. chokkin-0.1.0/tests/graph_build.rs +54 -0
  520. chokkin-0.1.0/tests/issues_emit.rs +174 -0
  521. chokkin-0.1.0/tests/manifest_extract.rs +357 -0
  522. chokkin-0.1.0/tests/parser_parse.rs +257 -0
  523. chokkin-0.1.0/tests/pipeline_phase0_spike.rs +46 -0
  524. chokkin-0.1.0/tests/plugins_extract.rs +268 -0
  525. chokkin-0.1.0/tests/prop_config.rs +332 -0
  526. chokkin-0.1.0/tests/prop_manifest.proptest-regressions +7 -0
  527. chokkin-0.1.0/tests/prop_manifest.rs +293 -0
  528. chokkin-0.1.0/tests/prop_sources.rs +199 -0
  529. chokkin-0.1.0/tests/reachability_analyze.rs +271 -0
  530. chokkin-0.1.0/tests/resolver_resolve.rs +105 -0
  531. chokkin-0.1.0/tests/sources_discover.rs +304 -0
  532. chokkin-0.1.0/tests/symbols_analyze.rs +196 -0
@@ -0,0 +1,13 @@
1
+ # cargo-audit configuration — keep in sync with deny.toml [advisories].ignore
2
+ #
3
+ # Transitive via rustpython-parser 0.4 (ADR 0001). Revisit when evaluating Ruff parser.
4
+
5
+ [advisories]
6
+ ignore = [
7
+ "RUSTSEC-2025-0075", # unic-char-range
8
+ "RUSTSEC-2025-0080", # unic-common
9
+ "RUSTSEC-2025-0081", # unic-char-property
10
+ "RUSTSEC-2025-0090", # unic-emoji-char
11
+ "RUSTSEC-2025-0098", # unic-ucd-version
12
+ "RUSTSEC-2025-0100", # unic-ucd-ident
13
+ ]
@@ -0,0 +1,2 @@
1
+ [target.x86_64-unknown-linux-gnu]
2
+ rustflags = ["-C", "link-arg=-fuse-ld=lld"]
@@ -0,0 +1,58 @@
1
+ #!/bin/bash
2
+ # Stop hook: Claude が応答を終了する直前に発火し,wrapup skill が
3
+ # 実行済みかをマーカーファイルで検査する。未実行なら decision:"block" で
4
+ # Claude に wrapup 起動を促す。
5
+ #
6
+ # 設計上の注意:
7
+ # - `stop_hook_active` は意図的に見ない。user-level git-check hook が
8
+ # 先に block して再帰した場合に短絡してしまい,wrapup が起動しない罠
9
+ # を回避するため,独自マーカーで状態管理する。
10
+ # - Q&A 応答での誤発火を避けるため,transcript JSONL の末尾 user turn
11
+ # 以降に Edit/Write/MultiEdit/NotebookEdit の tool_use があったかで判定。
12
+ set -euo pipefail
13
+
14
+ # jq 必須。無い環境ではフェイルセーフで素通り。
15
+ command -v jq >/dev/null 2>&1 || exit 0
16
+
17
+ input=$(cat)
18
+
19
+ # git repo 外なら何もしない (CLAUDE_PROJECT_DIR が想定と違うケース)
20
+ git rev-parse --git-dir >/dev/null 2>&1 || exit 0
21
+
22
+ session_id=$(echo "$input" | jq -r '.session_id // "default"')
23
+ transcript=$(echo "$input" | jq -r '.transcript_path // ""')
24
+ marker="${TMPDIR:-/tmp}/chokkin-wrapup-$session_id"
25
+
26
+ # 編集系 tool_use 名のリスト。SKILL.md の手順で「編集」と扱うものと揃える。
27
+ edit_tools_re='"name":"(Edit|Write|MultiEdit|NotebookEdit)"'
28
+
29
+ # マーカー存在 = wrapup 実行済 → 許可。次の user turn で再ブロックする
30
+ # ためにマーカーを削除する。
31
+ if [ -f "$marker" ]; then
32
+ rm -f "$marker"
33
+ exit 0
34
+ fi
35
+
36
+ # Q&A ターン heuristic: transcript を tac で逆順に流し,最後の user turn
37
+ # と編集系 tool_use のうち先に現れた方を `grep -m1` で検出する。
38
+ # 編集系が先 (= 元の順序では user turn の後) → block。
39
+ # user turn が先 (= 編集系が無かった) → skip。
40
+ # transcript が読めない / 空なら安全側に倒して block する。
41
+ should_block=true
42
+ if [ -n "$transcript" ] && [ -r "$transcript" ]; then
43
+ first_match=$(tac "$transcript" 2>/dev/null \
44
+ | grep -m1 -E "(\"type\":\"user\"|$edit_tools_re)" || true)
45
+ case "$first_match" in
46
+ *'"type":"user"'*) should_block=false ;;
47
+ esac
48
+ fi
49
+
50
+ if [ "$should_block" = false ]; then
51
+ exit 0
52
+ fi
53
+
54
+ # block + 指示。skill が拾えるよう reason に marker 絶対パスを埋め込む。
55
+ jq -n --arg marker "$marker" '{
56
+ decision: "block",
57
+ reason: ("終了前に wrapup skill を実行してください。Skill ツールで `wrapup` を呼び出すと simplify と update-docs が順に走り,最後に `/compact` のリマインドが出ます。完了したら最後に `touch " + $marker + "` を必ず実行してください (このマーカーが無いと無限にブロックされます)。git-check hook も同時に block している場合は wrapup を先に終えてから commit&push してください。")
58
+ }'
@@ -0,0 +1,29 @@
1
+ {
2
+ "effortLevel": "high",
3
+ "language": "japanese",
4
+ "autoMemoryEnabled": false,
5
+ "env": {
6
+ "CLAUDE_CODE_DISABLE_1M_CONTEXT": "1"
7
+ },
8
+ "permissions": {
9
+ "allow": [
10
+ "Bash(make:*)",
11
+ "Bash(cargo:*)",
12
+ "Bash(git:*)",
13
+ "Bash(uvx:*)"
14
+ ]
15
+ },
16
+ "hooks": {
17
+ "Stop": [
18
+ {
19
+ "matcher": "",
20
+ "hooks": [
21
+ {
22
+ "type": "command",
23
+ "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/stop-wrapup.sh"
24
+ }
25
+ ]
26
+ }
27
+ ]
28
+ }
29
+ }
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: grill-me
3
+ description: プランや設計について、共通理解に達するまで user を徹底的に問い詰める。決定木の各分岐を 1 つずつ解消する。プランをストレステストしたいとき、設計をレビューさせたいとき、user が「grill me」と言ったときに発動する。
4
+ ---
5
+
6
+ # grill-me
7
+
8
+ このプランのあらゆる側面について、共通理解に達するまで徹底的に問い詰める。
9
+ 設計ツリーの各分岐を辿り、決定間の依存関係を 1 つずつ解消していく。各質問には
10
+ 推奨する回答を添える。
11
+
12
+ 質問は 1 度に 1 つずつ行う。
13
+
14
+ コードベースを探索すれば答えが出る質問は、質問せずに探索で解決する。
15
+
16
+ 共通理解に達したら、決定とその根拠を `docs/adr/` 配下の ADR として記録する
17
+ (ファイル名: `NNNN-<slug>.md`、連番)。`docs/adr/` が無ければ新規作成する。
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: update-design
3
+ description: docs/dev/spec.ja.md の設計書を 5 カテゴリ×20点で評価・改善し、ソースコードとの齟齬を双方向で検出する。設計レビューや実装着手前の品質確認、user が「/update-design」と言ったときに発動する。
4
+ ---
5
+
6
+ # update-design
7
+
8
+ chokkin(Python 向け静的到達可能性解析ツール)の設計書 `docs/dev/spec.ja.md` を
9
+ 体系的に評価・改善するスキル。4 フェーズで検証する。
10
+
11
+ ## Phase 1: コンテキスト収集
12
+
13
+ `docs/dev/spec.ja.md`(§1–§21)と `src/` の API を対応付け、モジュール階層
14
+ (cli/config/manifest/parser/resolver/graph/rules/reporters/fix/plugins)の
15
+ 依存関係を確認する。`Cargo.toml` の lint 設定(unsafe forbid、unwrap/expect/panic 禁止)
16
+ も前提として押さえる。
17
+
18
+ ## Phase 2: 品質評価(100点満点)
19
+
20
+ 5 カテゴリ × 20点で採点する:
21
+
22
+ | カテゴリ | 評価観点 |
23
+ | --- | --- |
24
+ | モジュール / struct 設計 | Rust の境界が明確か、`lib.rs` 中心の構成か |
25
+ | 静的解析制約 | Python コードを実行しない設計が貫かれているか(import/exec/spawn 禁止) |
26
+ | ルール / ポリシー | CHK001–CHK010 の判定ロジックと既定挙動が妥当か |
27
+ | エラー処理 | Result/Option 伝播、unwrap 回避、終了コード規約の遵守 |
28
+ | テスト容易性 | カバレッジ維持戦略、parser/graph のテスト設計 |
29
+
30
+ ## Phase 3: 整合性チェック
31
+
32
+ 設計書とソースコード間の齟齬を双方向で検出する:
33
+ - シンボル名・パスが一致するか
34
+ - 現行コードと設計記述が矛盾していないか
35
+ - フェーズ順序(roadmap)が依存関係と整合するか
36
+
37
+ ## Phase 4: 改善提案
38
+
39
+ - 90点以上で実装準備完了、50点未満は再設計が必要と判定する
40
+ - 指摘を P0 / P1 / P2 の優先度で記述し、設計書へ反映する
41
+ - 採点サマリと主要な所見を末尾に付記する
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: update-docs
3
+ description: src/ の実装変更を README.md / README.ja.md / docs/dev/ / CLAUDE.md / AGENTS.md に同期する。コード変更後やドキュメントの陳腐化が疑われるとき、user が「/update-docs」と言ったときに発動する。
4
+ ---
5
+
6
+ # update-docs
7
+
8
+ chokkin の進化するソースコードと陳腐化しがちなドキュメントの差分を体系的に埋める
9
+ スキル。5 フェーズで実施する。
10
+
11
+ ## Phase 1: コード監査
12
+
13
+ 実装の現状を把握する:
14
+ - `src/lib.rs` の public API(モジュール階層 cli/config/manifest/parser/resolver/
15
+ graph/rules/reporters/fix/plugins のうち実装済みのもの)
16
+ - `src/main.rs` の CLI 挙動(引数ディスパッチ、ExitStatus → 終了コード)
17
+ - `Cargo.toml` / `pyproject.toml` のメタデータ(バージョン、edition、maturin bin 設定)
18
+
19
+ ## Phase 2: 設計ドキュメント更新
20
+
21
+ `docs/dev/spec.ja.md`(§1–§21)を実装と突き合わせる:
22
+ - API 変更を反映する
23
+ - ステータスラベル(design phase / pre-alpha / 実装済み)を実態に合わせる
24
+ - ルール CHK001–CHK010 と reporters(default/compact/JSON/Markdown)の記述を整合させる
25
+
26
+ ## Phase 3: README 更新
27
+
28
+ `README.md`(英)と `README.ja.md`(日)の両方に以下が含まれるか確認・更新する:
29
+ - プロジェクト概要 1 段落(Python 向け到達可能性解析・未使用 files/deps/symbols 検出、
30
+ Knip 相当)
31
+ - インストール/ビルド手順(maturin wheel、`make` ターゲット)
32
+ - CLI 利用例と終了コード(0 = 問題なし、非 0 = 未使用検出 / エラー)
33
+ - `make` ターゲット一覧
34
+
35
+ ## Phase 4: 整合性チェック
36
+
37
+ 全 Markdown 間で次を揃える:
38
+ - コマンド名・パス・クレート識別子・ルール番号・終了コード・用語
39
+ - 言語規約: `README.md` と `CLAUDE.md` / `AGENTS.md` は英語、`README.ja.md` と
40
+ `docs/dev/` 配下(`spec.ja.md` 等)は日本語
41
+ - 「Python コードを絶対に実行しない(static parse only)」の制約が崩れていないか
42
+
43
+ ## Phase 5: 報告
44
+
45
+ 構造化レポートを出す:
46
+ - 更新したファイル一覧
47
+ - ドキュメント化候補(実装にあるが未記載の項目)
48
+ - 設計判断が必要な未解決の不整合
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: update-plan
3
+ description: プランモード完了直前に、プランファイルの品質を update-design 同等の基準で検証・改善し、合格してから ExitPlanMode を呼ぶ統合スキル。プラン確定前、user が「/update-plan」と言ったときに発動する。
4
+ ---
5
+
6
+ # update-plan
7
+
8
+ プランモード終了直前にプランファイルの品質を確保し、設計書と同じ基準で合格して
9
+ から `ExitPlanMode` を呼ぶ統合スキル。4 フェーズで進める。
10
+
11
+ ## Phase 1: コンテキスト収集
12
+
13
+ 現在のプランファイルと、関連成果物を集める:
14
+ - 設計書 `docs/dev/spec.ja.md`
15
+ - プロジェクト文書 `README.md` / `README.ja.md` / `CLAUDE.md` / `AGENTS.md`
16
+ - マニフェスト `Cargo.toml` / `pyproject.toml`
17
+ - プランが触れる `src/` 配下のファイル
18
+
19
+ ## Phase 2: 品質評価(100点満点)
20
+
21
+ `update-design` と同じ 5 カテゴリ × 20点で評価する:
22
+
23
+ | カテゴリ | 評価観点 |
24
+ | --- | --- |
25
+ | モジュール / struct 設計 | プランが Rust の境界を明確に扱っているか |
26
+ | 静的解析制約 | Python コード非実行の制約を崩さないか、変更スコープが妥当か |
27
+ | ルール / ポリシー | YOK ルールの判定ロジックと既定挙動への影響 |
28
+ | エラー処理 | Result 伝播、unwrap 回避、終了コード規約の遵守 |
29
+ | テスト容易性 | カバレッジ維持戦略と具体的なテスト計画 |
30
+
31
+ 合格には 90点以上が必要。
32
+
33
+ ## Phase 3: 整合性チェック
34
+
35
+ - プランと既存コードベースの整合(シンボル名・パス)
36
+ - 現行設計書との突き合わせ
37
+ - 手順の論理順序が依存関係を尊重しているか
38
+
39
+ ## Phase 4: 改善と確定
40
+
41
+ - 検出した課題を P0 / P1 / P2 で分類しプランへ反映する
42
+ - 採点と主要所見の検証サマリをプランに付記する
43
+ - その後 `ExitPlanMode` を呼ぶ
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: wrapup
3
+ description: タスク完了時に simplify と update-docs を順に実行し、最後に /compact のリマインドを出す。Stop hook の block reason から起動されるか、user が「タスク完了」「/wrapup」と言ったときに発動する。
4
+ ---
5
+
6
+ # wrapup
7
+
8
+ chokkin の編集タスク後に手動で行っていた `/simplify` → `/update-docs` → `/compact`
9
+ の連鎖を自動化するスキル。Stop hook (`.claude/hooks/stop-wrapup.sh`) が未実行を
10
+ 検知して `decision:"block"` で起動を促すか、user が「タスク完了」「/wrapup」と
11
+ 言ったときに発動する。
12
+
13
+ ## 実行手順
14
+
15
+ 1. **simplify** を Skill ツールで呼び出し、変更したコードを再利用性・品質・効率の
16
+ 観点でレビュー/リファクタする。
17
+ 2. **update-docs** を Skill ツールで呼び出し、`src/` の変更を `README.md` /
18
+ `README.ja.md` / `docs/dev/spec.ja.md` / `CLAUDE.md` / `AGENTS.md` に同期する。
19
+ 3. ファイルを変更した場合は `make check` を実行し、fmt-check → lint (clippy + doc) →
20
+ test → deny → machete が通ることを確認する。
21
+ 4. **完了マーカーを必ず touch する。** Stop hook の block reason に埋め込まれた
22
+ 絶対パス (例 `/tmp/chokkin-wrapup-<session_id>`) を `touch` する。reason から
23
+ 取得できない場合は `/tmp/chokkin-wrapup-default` をフォールバックに使う。
24
+ 5. user に簡潔にリマインドする: 「wrapup 完了。`/compact` でコンテキストを圧縮して
25
+ ください。」
26
+
27
+ ## 注意
28
+
29
+ - 手順 4 は **常に実行する**。省くと次回 Stop hook で無限ループに陥る。
30
+ - simplify / update-docs が「変更なし」と報告しても、手順 4 と 5 は実行する。
31
+ - git-check hook が同時に commit を要求している場合は、simplify / update-docs が
32
+ ドキュメントを変更しうるため、先に wrapup を終えてから commit & push する。
33
+ - chokkin は Python コードを実行しない静的解析ツール。simplify / update-docs が
34
+ 解析対象プロジェクトのコードを実行することは絶対にない。
35
+
36
+ ## ホスト別の注意 (Codex / Cursor)
37
+
38
+ `.codex/skills` と `.cursor/skills` はこの `.claude/skills` への symlink。
39
+ Codex / Cursor から本スキルを起動した場合、手順 4 のマーカーと手順 5 の
40
+ `/compact` は Claude Code 専用なので省略し、手順 1–3(コード整理 →
41
+ update-docs → `make check`)のコアだけを実行する。`simplify` は Claude Code の
42
+ 組込みスキルなので、Codex / Cursor では同等のコード整理を手動で行う。
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: grill-me
3
+ description: プランや設計について、共通理解に達するまで user を徹底的に問い詰める。決定木の各分岐を 1 つずつ解消する。プランをストレステストしたいとき、設計をレビューさせたいとき、user が「grill me」と言ったときに発動する。
4
+ ---
5
+
6
+ # grill-me
7
+
8
+ このプランのあらゆる側面について、共通理解に達するまで徹底的に問い詰める。
9
+ 設計ツリーの各分岐を辿り、決定間の依存関係を 1 つずつ解消していく。各質問には
10
+ 推奨する回答を添える。
11
+
12
+ 質問は 1 度に 1 つずつ行う。
13
+
14
+ コードベースを探索すれば答えが出る質問は、質問せずに探索で解決する。
15
+
16
+ 共通理解に達したら、決定とその根拠を `docs/adr/` 配下の ADR として記録する
17
+ (ファイル名: `NNNN-<slug>.md`、連番)。`docs/adr/` が無ければ新規作成する。
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: update-design
3
+ description: docs/dev/spec.ja.md の設計書を 5 カテゴリ×20点で評価・改善し、ソースコードとの齟齬を双方向で検出する。設計レビューや実装着手前の品質確認、user が「/update-design」と言ったときに発動する。
4
+ ---
5
+
6
+ # update-design
7
+
8
+ chokkin(Python 向け静的到達可能性解析ツール)の設計書 `docs/dev/spec.ja.md` を
9
+ 体系的に評価・改善するスキル。4 フェーズで検証する。
10
+
11
+ ## Phase 1: コンテキスト収集
12
+
13
+ `docs/dev/spec.ja.md`(§1–§21)と `src/` の API を対応付け、モジュール階層
14
+ (cli/config/manifest/parser/resolver/graph/rules/reporters/fix/plugins)の
15
+ 依存関係を確認する。`Cargo.toml` の lint 設定(unsafe forbid、unwrap/expect/panic 禁止)
16
+ も前提として押さえる。
17
+
18
+ ## Phase 2: 品質評価(100点満点)
19
+
20
+ 5 カテゴリ × 20点で採点する:
21
+
22
+ | カテゴリ | 評価観点 |
23
+ | --- | --- |
24
+ | モジュール / struct 設計 | Rust の境界が明確か、`lib.rs` 中心の構成か |
25
+ | 静的解析制約 | Python コードを実行しない設計が貫かれているか(import/exec/spawn 禁止) |
26
+ | ルール / ポリシー | CHK001–CHK010 の判定ロジックと既定挙動が妥当か |
27
+ | エラー処理 | Result/Option 伝播、unwrap 回避、終了コード規約の遵守 |
28
+ | テスト容易性 | カバレッジ維持戦略、parser/graph のテスト設計 |
29
+
30
+ ## Phase 3: 整合性チェック
31
+
32
+ 設計書とソースコード間の齟齬を双方向で検出する:
33
+ - シンボル名・パスが一致するか
34
+ - 現行コードと設計記述が矛盾していないか
35
+ - フェーズ順序(roadmap)が依存関係と整合するか
36
+
37
+ ## Phase 4: 改善提案
38
+
39
+ - 90点以上で実装準備完了、50点未満は再設計が必要と判定する
40
+ - 指摘を P0 / P1 / P2 の優先度で記述し、設計書へ反映する
41
+ - 採点サマリと主要な所見を末尾に付記する
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: update-docs
3
+ description: src/ の実装変更を README.md / README.ja.md / docs/dev/ / CLAUDE.md / AGENTS.md に同期する。コード変更後やドキュメントの陳腐化が疑われるとき、user が「/update-docs」と言ったときに発動する。
4
+ ---
5
+
6
+ # update-docs
7
+
8
+ chokkin の進化するソースコードと陳腐化しがちなドキュメントの差分を体系的に埋める
9
+ スキル。5 フェーズで実施する。
10
+
11
+ ## Phase 1: コード監査
12
+
13
+ 実装の現状を把握する:
14
+ - `src/lib.rs` の public API(モジュール階層 cli/config/manifest/parser/resolver/
15
+ graph/rules/reporters/fix/plugins のうち実装済みのもの)
16
+ - `src/main.rs` の CLI 挙動(引数ディスパッチ、ExitStatus → 終了コード)
17
+ - `Cargo.toml` / `pyproject.toml` のメタデータ(バージョン、edition、maturin bin 設定)
18
+
19
+ ## Phase 2: 設計ドキュメント更新
20
+
21
+ `docs/dev/spec.ja.md`(§1–§21)を実装と突き合わせる:
22
+ - API 変更を反映する
23
+ - ステータスラベル(design phase / pre-alpha / 実装済み)を実態に合わせる
24
+ - ルール CHK001–CHK010 と reporters(default/compact/JSON/Markdown)の記述を整合させる
25
+
26
+ ## Phase 3: README 更新
27
+
28
+ `README.md`(英)と `README.ja.md`(日)の両方に以下が含まれるか確認・更新する:
29
+ - プロジェクト概要 1 段落(Python 向け到達可能性解析・未使用 files/deps/symbols 検出、
30
+ Knip 相当)
31
+ - インストール/ビルド手順(maturin wheel、`make` ターゲット)
32
+ - CLI 利用例と終了コード(0 = 問題なし、非 0 = 未使用検出 / エラー)
33
+ - `make` ターゲット一覧
34
+
35
+ ## Phase 4: 整合性チェック
36
+
37
+ 全 Markdown 間で次を揃える:
38
+ - コマンド名・パス・クレート識別子・ルール番号・終了コード・用語
39
+ - 言語規約: `README.md` と `CLAUDE.md` / `AGENTS.md` は英語、`README.ja.md` と
40
+ `docs/dev/` 配下(`spec.ja.md` 等)は日本語
41
+ - 「Python コードを絶対に実行しない(static parse only)」の制約が崩れていないか
42
+
43
+ ## Phase 5: 報告
44
+
45
+ 構造化レポートを出す:
46
+ - 更新したファイル一覧
47
+ - ドキュメント化候補(実装にあるが未記載の項目)
48
+ - 設計判断が必要な未解決の不整合
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: update-plan
3
+ description: プランモード完了直前に、プランファイルの品質を update-design 同等の基準で検証・改善し、合格してから ExitPlanMode を呼ぶ統合スキル。プラン確定前、user が「/update-plan」と言ったときに発動する。
4
+ ---
5
+
6
+ # update-plan
7
+
8
+ プランモード終了直前にプランファイルの品質を確保し、設計書と同じ基準で合格して
9
+ から `ExitPlanMode` を呼ぶ統合スキル。4 フェーズで進める。
10
+
11
+ ## Phase 1: コンテキスト収集
12
+
13
+ 現在のプランファイルと、関連成果物を集める:
14
+ - 設計書 `docs/dev/spec.ja.md`
15
+ - プロジェクト文書 `README.md` / `README.ja.md` / `CLAUDE.md` / `AGENTS.md`
16
+ - マニフェスト `Cargo.toml` / `pyproject.toml`
17
+ - プランが触れる `src/` 配下のファイル
18
+
19
+ ## Phase 2: 品質評価(100点満点)
20
+
21
+ `update-design` と同じ 5 カテゴリ × 20点で評価する:
22
+
23
+ | カテゴリ | 評価観点 |
24
+ | --- | --- |
25
+ | モジュール / struct 設計 | プランが Rust の境界を明確に扱っているか |
26
+ | 静的解析制約 | Python コード非実行の制約を崩さないか、変更スコープが妥当か |
27
+ | ルール / ポリシー | YOK ルールの判定ロジックと既定挙動への影響 |
28
+ | エラー処理 | Result 伝播、unwrap 回避、終了コード規約の遵守 |
29
+ | テスト容易性 | カバレッジ維持戦略と具体的なテスト計画 |
30
+
31
+ 合格には 90点以上が必要。
32
+
33
+ ## Phase 3: 整合性チェック
34
+
35
+ - プランと既存コードベースの整合(シンボル名・パス)
36
+ - 現行設計書との突き合わせ
37
+ - 手順の論理順序が依存関係を尊重しているか
38
+
39
+ ## Phase 4: 改善と確定
40
+
41
+ - 検出した課題を P0 / P1 / P2 で分類しプランへ反映する
42
+ - 採点と主要所見の検証サマリをプランに付記する
43
+ - その後 `ExitPlanMode` を呼ぶ
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: wrapup
3
+ description: タスク完了時に simplify と update-docs を順に実行し、最後に /compact のリマインドを出す。Stop hook の block reason から起動されるか、user が「タスク完了」「/wrapup」と言ったときに発動する。
4
+ ---
5
+
6
+ # wrapup
7
+
8
+ chokkin の編集タスク後に手動で行っていた `/simplify` → `/update-docs` → `/compact`
9
+ の連鎖を自動化するスキル。Stop hook (`.claude/hooks/stop-wrapup.sh`) が未実行を
10
+ 検知して `decision:"block"` で起動を促すか、user が「タスク完了」「/wrapup」と
11
+ 言ったときに発動する。
12
+
13
+ ## 実行手順
14
+
15
+ 1. **simplify** を Skill ツールで呼び出し、変更したコードを再利用性・品質・効率の
16
+ 観点でレビュー/リファクタする。
17
+ 2. **update-docs** を Skill ツールで呼び出し、`src/` の変更を `README.md` /
18
+ `README.ja.md` / `docs/dev/spec.ja.md` / `CLAUDE.md` / `AGENTS.md` に同期する。
19
+ 3. ファイルを変更した場合は `make check` を実行し、fmt-check → lint (clippy + doc) →
20
+ test → deny → machete が通ることを確認する。
21
+ 4. **完了マーカーを必ず touch する。** Stop hook の block reason に埋め込まれた
22
+ 絶対パス (例 `/tmp/chokkin-wrapup-<session_id>`) を `touch` する。reason から
23
+ 取得できない場合は `/tmp/chokkin-wrapup-default` をフォールバックに使う。
24
+ 5. user に簡潔にリマインドする: 「wrapup 完了。`/compact` でコンテキストを圧縮して
25
+ ください。」
26
+
27
+ ## 注意
28
+
29
+ - 手順 4 は **常に実行する**。省くと次回 Stop hook で無限ループに陥る。
30
+ - simplify / update-docs が「変更なし」と報告しても、手順 4 と 5 は実行する。
31
+ - git-check hook が同時に commit を要求している場合は、simplify / update-docs が
32
+ ドキュメントを変更しうるため、先に wrapup を終えてから commit & push する。
33
+ - chokkin は Python コードを実行しない静的解析ツール。simplify / update-docs が
34
+ 解析対象プロジェクトのコードを実行することは絶対にない。
35
+
36
+ ## ホスト別の注意 (Codex / Cursor)
37
+
38
+ `.codex/skills` と `.cursor/skills` はこの `.claude/skills` への symlink。
39
+ Codex / Cursor から本スキルを起動した場合、手順 4 のマーカーと手順 5 の
40
+ `/compact` は Claude Code 専用なので省略し、手順 1–3(コード整理 →
41
+ update-docs → `make check`)のコアだけを実行する。`simplify` は Claude Code の
42
+ 組込みスキルなので、Codex / Cursor では同等のコード整理を手動で行う。
@@ -0,0 +1,3 @@
1
+ {
2
+ "install": "bash scripts/bootstrap-agent.sh"
3
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "hooks": {
3
+ "preToolUse": [
4
+ {
5
+ "command": "bash .cursor/ptuf-hook.sh",
6
+ "failClosed": true,
7
+ "matcher": "Shell|Bash|Read|ReadFile|Write|Edit|MCP|WebFetch|Fetch|mcp__.*",
8
+ "timeout": 10,
9
+ "type": "command"
10
+ }
11
+ ]
12
+ },
13
+ "version": 1
14
+ }
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ if [ -x "${HOME}/.cargo/bin/ptuf" ]; then
5
+ PTUF="${HOME}/.cargo/bin/ptuf"
6
+ elif PTUF="$(command -v ptuf 2>/dev/null)"; then
7
+ :
8
+ else
9
+ echo "ptuf is not installed. Run 'bash scripts/bootstrap-agent.sh' to install it." >&2
10
+ exit 1
11
+ fi
12
+
13
+ exec "${PTUF}" hook cursor
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: grill-me
3
+ description: プランや設計について、共通理解に達するまで user を徹底的に問い詰める。決定木の各分岐を 1 つずつ解消する。プランをストレステストしたいとき、設計をレビューさせたいとき、user が「grill me」と言ったときに発動する。
4
+ ---
5
+
6
+ # grill-me
7
+
8
+ このプランのあらゆる側面について、共通理解に達するまで徹底的に問い詰める。
9
+ 設計ツリーの各分岐を辿り、決定間の依存関係を 1 つずつ解消していく。各質問には
10
+ 推奨する回答を添える。
11
+
12
+ 質問は 1 度に 1 つずつ行う。
13
+
14
+ コードベースを探索すれば答えが出る質問は、質問せずに探索で解決する。
15
+
16
+ 共通理解に達したら、決定とその根拠を `docs/adr/` 配下の ADR として記録する
17
+ (ファイル名: `NNNN-<slug>.md`、連番)。`docs/adr/` が無ければ新規作成する。
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: update-design
3
+ description: docs/dev/spec.ja.md の設計書を 5 カテゴリ×20点で評価・改善し、ソースコードとの齟齬を双方向で検出する。設計レビューや実装着手前の品質確認、user が「/update-design」と言ったときに発動する。
4
+ ---
5
+
6
+ # update-design
7
+
8
+ chokkin(Python 向け静的到達可能性解析ツール)の設計書 `docs/dev/spec.ja.md` を
9
+ 体系的に評価・改善するスキル。4 フェーズで検証する。
10
+
11
+ ## Phase 1: コンテキスト収集
12
+
13
+ `docs/dev/spec.ja.md`(§1–§21)と `src/` の API を対応付け、モジュール階層
14
+ (cli/config/manifest/parser/resolver/graph/rules/reporters/fix/plugins)の
15
+ 依存関係を確認する。`Cargo.toml` の lint 設定(unsafe forbid、unwrap/expect/panic 禁止)
16
+ も前提として押さえる。
17
+
18
+ ## Phase 2: 品質評価(100点満点)
19
+
20
+ 5 カテゴリ × 20点で採点する:
21
+
22
+ | カテゴリ | 評価観点 |
23
+ | --- | --- |
24
+ | モジュール / struct 設計 | Rust の境界が明確か、`lib.rs` 中心の構成か |
25
+ | 静的解析制約 | Python コードを実行しない設計が貫かれているか(import/exec/spawn 禁止) |
26
+ | ルール / ポリシー | CHK001–CHK010 の判定ロジックと既定挙動が妥当か |
27
+ | エラー処理 | Result/Option 伝播、unwrap 回避、終了コード規約の遵守 |
28
+ | テスト容易性 | カバレッジ維持戦略、parser/graph のテスト設計 |
29
+
30
+ ## Phase 3: 整合性チェック
31
+
32
+ 設計書とソースコード間の齟齬を双方向で検出する:
33
+ - シンボル名・パスが一致するか
34
+ - 現行コードと設計記述が矛盾していないか
35
+ - フェーズ順序(roadmap)が依存関係と整合するか
36
+
37
+ ## Phase 4: 改善提案
38
+
39
+ - 90点以上で実装準備完了、50点未満は再設計が必要と判定する
40
+ - 指摘を P0 / P1 / P2 の優先度で記述し、設計書へ反映する
41
+ - 採点サマリと主要な所見を末尾に付記する
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: update-docs
3
+ description: src/ の実装変更を README.md / README.ja.md / docs/dev/ / CLAUDE.md / AGENTS.md に同期する。コード変更後やドキュメントの陳腐化が疑われるとき、user が「/update-docs」と言ったときに発動する。
4
+ ---
5
+
6
+ # update-docs
7
+
8
+ chokkin の進化するソースコードと陳腐化しがちなドキュメントの差分を体系的に埋める
9
+ スキル。5 フェーズで実施する。
10
+
11
+ ## Phase 1: コード監査
12
+
13
+ 実装の現状を把握する:
14
+ - `src/lib.rs` の public API(モジュール階層 cli/config/manifest/parser/resolver/
15
+ graph/rules/reporters/fix/plugins のうち実装済みのもの)
16
+ - `src/main.rs` の CLI 挙動(引数ディスパッチ、ExitStatus → 終了コード)
17
+ - `Cargo.toml` / `pyproject.toml` のメタデータ(バージョン、edition、maturin bin 設定)
18
+
19
+ ## Phase 2: 設計ドキュメント更新
20
+
21
+ `docs/dev/spec.ja.md`(§1–§21)を実装と突き合わせる:
22
+ - API 変更を反映する
23
+ - ステータスラベル(design phase / pre-alpha / 実装済み)を実態に合わせる
24
+ - ルール CHK001–CHK010 と reporters(default/compact/JSON/Markdown)の記述を整合させる
25
+
26
+ ## Phase 3: README 更新
27
+
28
+ `README.md`(英)と `README.ja.md`(日)の両方に以下が含まれるか確認・更新する:
29
+ - プロジェクト概要 1 段落(Python 向け到達可能性解析・未使用 files/deps/symbols 検出、
30
+ Knip 相当)
31
+ - インストール/ビルド手順(maturin wheel、`make` ターゲット)
32
+ - CLI 利用例と終了コード(0 = 問題なし、非 0 = 未使用検出 / エラー)
33
+ - `make` ターゲット一覧
34
+
35
+ ## Phase 4: 整合性チェック
36
+
37
+ 全 Markdown 間で次を揃える:
38
+ - コマンド名・パス・クレート識別子・ルール番号・終了コード・用語
39
+ - 言語規約: `README.md` と `CLAUDE.md` / `AGENTS.md` は英語、`README.ja.md` と
40
+ `docs/dev/` 配下(`spec.ja.md` 等)は日本語
41
+ - 「Python コードを絶対に実行しない(static parse only)」の制約が崩れていないか
42
+
43
+ ## Phase 5: 報告
44
+
45
+ 構造化レポートを出す:
46
+ - 更新したファイル一覧
47
+ - ドキュメント化候補(実装にあるが未記載の項目)
48
+ - 設計判断が必要な未解決の不整合