planpilot 2.3.0__tar.gz → 2.4.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 (168) hide show
  1. {planpilot-2.3.0 → planpilot-2.4.0}/PKG-INFO +107 -48
  2. {planpilot-2.3.0 → planpilot-2.4.0}/README.md +103 -44
  3. {planpilot-2.3.0 → planpilot-2.4.0}/pyproject.toml +16 -14
  4. planpilot-2.4.0/src/planpilot/.claude-plugin/marketplace.json +17 -0
  5. planpilot-2.4.0/src/planpilot/.claude-plugin/plugin.json +18 -0
  6. planpilot-2.4.0/src/planpilot/AGENTS.md +35 -0
  7. planpilot-2.4.0/src/planpilot/__init__.py +80 -0
  8. planpilot-2.4.0/src/planpilot/cli/__init__.py +109 -0
  9. planpilot-2.4.0/src/planpilot/cli/__main__.py +6 -0
  10. planpilot-2.4.0/src/planpilot/cli/app.py +63 -0
  11. planpilot-2.4.0/src/planpilot/cli/commands/__init__.py +1 -0
  12. planpilot-2.4.0/src/planpilot/cli/commands/clean.py +49 -0
  13. planpilot-2.4.0/src/planpilot/cli/commands/init.py +270 -0
  14. planpilot-2.4.0/src/planpilot/cli/commands/map_sync.py +101 -0
  15. planpilot-2.4.0/src/planpilot/cli/commands/sync.py +99 -0
  16. planpilot-2.4.0/src/planpilot/cli/common.py +20 -0
  17. planpilot-2.4.0/src/planpilot/cli/init/__init__.py +5 -0
  18. planpilot-2.4.0/src/planpilot/cli/init/validation.py +12 -0
  19. planpilot-2.4.0/src/planpilot/cli/parser.py +69 -0
  20. planpilot-2.4.0/src/planpilot/cli/persistence/__init__.py +12 -0
  21. planpilot-2.4.0/src/planpilot/cli/persistence/remote_plan.py +71 -0
  22. planpilot-2.4.0/src/planpilot/cli/persistence/sync_map.py +39 -0
  23. planpilot-2.4.0/src/planpilot/cli/progress/__init__.py +5 -0
  24. planpilot-2.3.0/src/planpilot/progress.py → planpilot-2.4.0/src/planpilot/cli/progress/rich.py +1 -8
  25. planpilot-2.4.0/src/planpilot/cli/scaffold/__init__.py +17 -0
  26. planpilot-2.4.0/src/planpilot/cli/scaffold/config_builder.py +17 -0
  27. planpilot-2.4.0/src/planpilot/commands/prd.md +6 -0
  28. planpilot-2.4.0/src/planpilot/commands/spec.md +6 -0
  29. planpilot-2.4.0/src/planpilot/commands/sync.md +6 -0
  30. planpilot-2.4.0/src/planpilot/core/__init__.py +1 -0
  31. planpilot-2.4.0/src/planpilot/core/auth/__init__.py +21 -0
  32. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/auth/factory.py +6 -6
  33. planpilot-2.4.0/src/planpilot/core/auth/preflight.py +168 -0
  34. planpilot-2.4.0/src/planpilot/core/auth/resolvers/__init__.py +7 -0
  35. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/auth/resolvers/env.py +2 -2
  36. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/auth/resolvers/gh_cli.py +2 -2
  37. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/auth/resolvers/static.py +2 -2
  38. planpilot-2.4.0/src/planpilot/core/clean/__init__.py +5 -0
  39. planpilot-2.4.0/src/planpilot/core/clean/deletion_planner.py +100 -0
  40. planpilot-2.4.0/src/planpilot/core/config/__init__.py +19 -0
  41. planpilot-2.4.0/src/planpilot/core/config/loader.py +67 -0
  42. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core/config}/scaffold.py +17 -39
  43. planpilot-2.4.0/src/planpilot/core/contracts/__init__.py +29 -0
  44. planpilot-2.4.0/src/planpilot/core/contracts/init.py +16 -0
  45. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/contracts/item.py +5 -1
  46. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/contracts/provider.py +1 -1
  47. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/contracts/renderer.py +1 -1
  48. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/contracts/sync.py +3 -2
  49. planpilot-2.4.0/src/planpilot/core/engine/__init__.py +6 -0
  50. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/engine/engine.py +52 -27
  51. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/engine/utils.py +3 -25
  52. planpilot-2.4.0/src/planpilot/core/init/__init__.py +5 -0
  53. planpilot-2.4.0/src/planpilot/core/init/validation.py +17 -0
  54. planpilot-2.4.0/src/planpilot/core/map_sync/__init__.py +7 -0
  55. planpilot-2.4.0/src/planpilot/core/map_sync/parser.py +79 -0
  56. planpilot-2.4.0/src/planpilot/core/map_sync/persistence.py +25 -0
  57. planpilot-2.4.0/src/planpilot/core/map_sync/reconciler.py +41 -0
  58. planpilot-2.4.0/src/planpilot/core/metadata.py +30 -0
  59. planpilot-2.4.0/src/planpilot/core/plan/__init__.py +7 -0
  60. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/plan/hasher.py +1 -1
  61. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/plan/loader.py +3 -3
  62. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/plan/validator.py +2 -2
  63. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/AGENTS.md +5 -5
  64. planpilot-2.4.0/src/planpilot/core/providers/__init__.py +7 -0
  65. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/dry_run.py +12 -4
  66. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/factory.py +4 -4
  67. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/AGENTS.md +7 -7
  68. planpilot-2.4.0/src/planpilot/core/providers/github/__init__.py +5 -0
  69. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/_retrying_transport.py +2 -2
  70. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/add_blocked_by.py +1 -1
  71. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/add_labels.py +1 -1
  72. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/add_project_item.py +1 -1
  73. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/add_sub_issue.py +1 -1
  74. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/client.py +1 -1
  75. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/close_issue.py +1 -1
  76. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/create_issue.py +1 -1
  77. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/create_label.py +1 -1
  78. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/delete_issue.py +1 -1
  79. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/enums.py +1 -1
  80. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/fetch_org_project.py +1 -1
  81. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/fetch_project_fields.py +1 -1
  82. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/fetch_project_items.py +1 -1
  83. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/fetch_relations.py +1 -1
  84. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/fetch_repo.py +1 -1
  85. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/fetch_user_project.py +1 -1
  86. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/find_labels.py +1 -1
  87. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/fragments.py +1 -1
  88. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/get_issue.py +1 -1
  89. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/input_types.py +1 -1
  90. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/operations.py +1 -1
  91. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/remove_blocked_by.py +1 -1
  92. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/remove_labels.py +1 -1
  93. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/remove_sub_issue.py +1 -1
  94. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/search_issues.py +1 -1
  95. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/update_issue.py +1 -1
  96. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/update_project_field.py +1 -1
  97. planpilot-2.4.0/src/planpilot/core/providers/github/item.py +101 -0
  98. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/mapper.py +4 -14
  99. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/models.py +1 -1
  100. planpilot-2.4.0/src/planpilot/core/providers/github/ops/__init__.py +1 -0
  101. planpilot-2.4.0/src/planpilot/core/providers/github/ops/convert.py +41 -0
  102. planpilot-2.4.0/src/planpilot/core/providers/github/ops/crud.py +121 -0
  103. planpilot-2.4.0/src/planpilot/core/providers/github/ops/labels.py +71 -0
  104. planpilot-2.4.0/src/planpilot/core/providers/github/ops/project.py +129 -0
  105. planpilot-2.4.0/src/planpilot/core/providers/github/ops/relations.py +22 -0
  106. planpilot-2.4.0/src/planpilot/core/providers/github/provider.py +469 -0
  107. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/schema.graphql +1 -1
  108. planpilot-2.4.0/src/planpilot/core/renderers/__init__.py +6 -0
  109. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/renderers/factory.py +2 -2
  110. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/renderers/markdown.py +2 -2
  111. planpilot-2.4.0/src/planpilot/core/targets/__init__.py +5 -0
  112. planpilot-2.4.0/src/planpilot/core/targets/github_project.py +21 -0
  113. planpilot-2.4.0/src/planpilot/sdk.py +388 -0
  114. planpilot-2.4.0/src/planpilot/skills/INSTALL.agent.md +155 -0
  115. planpilot-2.4.0/src/planpilot/skills/INSTALL.md +169 -0
  116. planpilot-2.4.0/src/planpilot/skills/create-prd/SKILL.md +208 -0
  117. planpilot-2.4.0/src/planpilot/skills/create-tech-spec/SKILL.md +352 -0
  118. planpilot-2.4.0/src/planpilot/skills/plan-sync/SKILL.md +623 -0
  119. planpilot-2.3.0/src/planpilot/AGENTS.md +0 -40
  120. planpilot-2.3.0/src/planpilot/__init__.py +0 -59
  121. planpilot-2.3.0/src/planpilot/auth/__init__.py +0 -6
  122. planpilot-2.3.0/src/planpilot/auth/resolvers/__init__.py +0 -7
  123. planpilot-2.3.0/src/planpilot/cli.py +0 -764
  124. planpilot-2.3.0/src/planpilot/contracts/__init__.py +0 -54
  125. planpilot-2.3.0/src/planpilot/engine/__init__.py +0 -6
  126. planpilot-2.3.0/src/planpilot/plan/__init__.py +0 -7
  127. planpilot-2.3.0/src/planpilot/providers/__init__.py +0 -7
  128. planpilot-2.3.0/src/planpilot/providers/github/__init__.py +0 -5
  129. planpilot-2.3.0/src/planpilot/providers/github/item.py +0 -79
  130. planpilot-2.3.0/src/planpilot/providers/github/provider.py +0 -606
  131. planpilot-2.3.0/src/planpilot/renderers/__init__.py +0 -6
  132. planpilot-2.3.0/src/planpilot/sdk.py +0 -630
  133. {planpilot-2.3.0 → planpilot-2.4.0}/LICENSE +0 -0
  134. {planpilot-2.3.0 → planpilot-2.4.0}/src/planpilot/__main__.py +0 -0
  135. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/auth/base.py +0 -0
  136. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/contracts/config.py +0 -0
  137. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/contracts/exceptions.py +0 -0
  138. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/contracts/plan.py +0 -0
  139. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/engine/progress.py +0 -0
  140. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/base.py +0 -0
  141. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/__init__.py +0 -0
  142. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/async_base_client.py +0 -0
  143. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/base_model.py +0 -0
  144. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/github_gql/exceptions.py +0 -0
  145. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/add_blocked_by.graphql +0 -0
  146. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/add_labels.graphql +0 -0
  147. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/add_project_item.graphql +0 -0
  148. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/add_sub_issue.graphql +0 -0
  149. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/close_issue.graphql +0 -0
  150. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/create_issue.graphql +0 -0
  151. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/create_label.graphql +0 -0
  152. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/delete_issue.graphql +0 -0
  153. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/fetch_org_project.graphql +0 -0
  154. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/fetch_project_fields.graphql +0 -0
  155. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/fetch_project_items.graphql +0 -0
  156. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/fetch_relations.graphql +0 -0
  157. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/fetch_repo.graphql +0 -0
  158. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/fetch_user_project.graphql +0 -0
  159. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/find_labels.graphql +0 -0
  160. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/fragments.graphql +0 -0
  161. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/get_issue.graphql +0 -0
  162. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/remove_blocked_by.graphql +0 -0
  163. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/remove_labels.graphql +0 -0
  164. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/remove_sub_issue.graphql +0 -0
  165. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/search_issues.graphql +0 -0
  166. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/update_issue.graphql +0 -0
  167. {planpilot-2.3.0/src/planpilot → planpilot-2.4.0/src/planpilot/core}/providers/github/operations/update_project_field.graphql +0 -0
  168. {planpilot-2.3.0 → planpilot-2.4.0}/src/planpilot/py.typed +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: planpilot
3
- Version: 2.3.0
3
+ Version: 2.4.0
4
4
  Summary: Sync roadmap plans (epics, stories, tasks) to GitHub Issues and Projects v2
5
5
  License: MIT
6
6
  License-File: LICENSE
7
7
  Keywords: github,projects,roadmap,sync,issues,project-management,cli,asyncio
8
- Author: aryeko
9
- Maintainer: aryeko
10
- Requires-Python: >=3.11
8
+ Author: Arye Kogan
9
+ Maintainer: Arye Kogan
10
+ Requires-Python: >=3.11,<4.0
11
11
  Classifier: Development Status :: 4 - Beta
12
12
  Classifier: Environment :: Console
13
13
  Classifier: Intended Audience :: Developers
@@ -35,7 +35,7 @@ Description-Content-Type: text/markdown
35
35
  # <img src="https://raw.githubusercontent.com/aryeko/planpilot/main/assets/branding/navigator/navigator-square-512.png" alt="planpilot logo" width="32" height="32" align="absmiddle" /> planpilot
36
36
 
37
37
  [![CI](https://github.com/aryeko/planpilot/actions/workflows/ci.yml/badge.svg)](https://github.com/aryeko/planpilot/actions/workflows/ci.yml)
38
- [![codecov](https://codecov.io/gh/aryeko/planpilot/graph/badge.svg?token=3I2A515YTI)](https://codecov.io/gh/aryeko/planpilot)
38
+ [![codecov](https://codecov.io/gh/aryeko/planpilot/graph/badge.svg)](https://codecov.io/gh/aryeko/planpilot)
39
39
  [![PyPI](https://img.shields.io/pypi/v/planpilot)](https://pypi.org/project/planpilot/)
40
40
  [![Python](https://img.shields.io/pypi/pyversions/planpilot)](https://pypi.org/project/planpilot/)
41
41
  [![Downloads](https://static.pepy.tech/badge/planpilot)](https://pepy.tech/project/planpilot)
@@ -45,6 +45,12 @@ Sync roadmap plans (epics, stories, tasks) to GitHub Issues and Projects v2.
45
45
 
46
46
  > **⭐ If planpilot helps you manage your roadmaps, consider [giving it a star](https://github.com/aryeko/planpilot)!**
47
47
 
48
+ ## Why planpilot?
49
+
50
+ Managing roadmaps through GitHub's UI works for small projects, but breaks down fast: manually creating dozens of issues, linking parent/child hierarchies, setting up blocked-by dependencies, and keeping project board fields in sync is tedious and error-prone. Scripting the GitHub API directly means dealing with pagination, rate limits, idempotency, and GraphQL complexity.
51
+
52
+ **planpilot treats your roadmap as code.** Define epics, stories, and tasks in JSON files, commit them alongside your source code, and let planpilot handle the rest — creating issues, wiring up sub-issue hierarchies, setting blocked-by relations, and populating project board fields. It's idempotent (safe to rerun), supports dry-run previews, and works across multiple epics in a single run.
53
+
48
54
  ## What it does
49
55
 
50
56
  **planpilot** takes structured plan files and turns them into a fully linked project board:
@@ -72,26 +78,21 @@ planpilot follows SOLID principles with a modular, provider-agnostic design:
72
78
 
73
79
  ```text
74
80
  src/planpilot/
75
- ├── contracts/ # Core types, ABCs, and exception hierarchy
76
- ├── plan/ # Plan loading, validation, and hashing
77
- ├── auth/ # Token resolver strategy + factory
78
- ├── renderers/ # Body rendering implementations
79
- ├── engine/ # 5-phase sync orchestration
80
- ├── providers/ # Provider adapter layer
81
- │ └── github/ # GitHub GraphQL adapter + generated client
82
- ├── sdk.py # Composition root and config loading
83
- └── cli.py # CLI entry point
81
+ ├── core/ # Runtime domains (auth/config/contracts/engine/plan/providers/renderers)
82
+ ├── cli/ # CLI parser/app/commands and persistence helpers
83
+ ├── sdk.py # SDK composition root and public facade
84
+ └── __init__.py # Public API exports
84
85
  ```
85
86
 
86
- Core modules depend on contracts, and the SDK composes the runtime pieces. This keeps provider and renderer implementations swappable without changing engine internals.
87
+ Core domains provide business logic, and the SDK composes runtime pieces. This keeps provider and renderer implementations swappable without changing engine internals.
87
88
 
88
89
  See [docs/design/architecture.md](docs/design/architecture.md) for the full architecture guide.
89
90
 
90
91
  ## Requirements
91
92
 
92
93
  - Python 3.11+
93
- - [`gh` CLI](https://cli.github.com/) installed and authenticated
94
- - GitHub token scopes: `repo`, `project`
94
+ - GitHub token with `repo` and `project` scopes
95
+ - [`gh` CLI](https://cli.github.com/) only when using `auth: "gh-cli"`
95
96
 
96
97
  ## Installation
97
98
 
@@ -120,42 +121,83 @@ pip install planpilot
120
121
  <summary>From source (Poetry)</summary>
121
122
 
122
123
  ```bash
123
- poetry add planpilot
124
+ poetry install
124
125
  ```
125
126
 
126
127
  </details>
127
128
 
128
- ## Install Agent Skill
129
+ ## Try it now
129
130
 
130
- ### Agent Self-Install
131
-
132
- Tell your agent:
131
+ See planpilot in action without any configuration or GitHub token — the built-in example runs a fully offline dry-run:
133
132
 
133
+ ```bash
134
+ git clone https://github.com/aryeko/planpilot.git && cd planpilot
135
+ pipx install . # or: pip install .
136
+ planpilot sync --config examples/sync-workflow/planpilot.json --dry-run
134
137
  ```
135
- Fetch and follow instructions from https://raw.githubusercontent.com/aryeko/planpilot/refs/heads/main/skills/INSTALL.agent.md
138
+
139
+ ```text
140
+ planpilot - sync complete (dry-run)
141
+
142
+ Plan ID: 3832d3ffce22
143
+ Target: example-org/example-repo
144
+ Board: https://github.com/orgs/example-org/projects/1
145
+
146
+ Items: 6 total (1 epic, 2 stories, 3 tasks)
147
+ Created: 6 (1 epic, 2 stories, 3 tasks)
148
+
149
+ Sync map: /absolute/path/to/examples/sync-workflow/output/sync-map-sample.json.dry-run
150
+
151
+ [dry-run] No changes were made
136
152
  ```
137
153
 
138
- The agent will install both `planpilot` and the skill automatically.
154
+ ## Install Agent Skills
139
155
 
140
- ### Manual Install
156
+ planpilot ships three agent skills that form a complete product workflow:
157
+
158
+ | Skill | Purpose |
159
+ |-------|---------|
160
+ | `create-prd` | Generate structured PRDs from feature ideas |
161
+ | `create-tech-spec` | Create codebase-aware technical specs from PRDs |
162
+ | `plan-sync` | Sync specs to GitHub Issues + Projects v2 |
141
163
 
142
- Install the skill to the open discovery path used by agent platforms that support filesystem skills:
164
+ ### Claude Code Plugin
165
+
166
+ Install the planpilot plugin directly in Claude Code (the planpilot CLI is installed automatically from PyPI):
143
167
 
144
168
  ```bash
145
- mkdir -p ~/.agents/skills/roadmap-to-github-project
169
+ claude plugin marketplace add aryeko/planpilot
170
+ claude plugin install planpilot@planpilot
171
+ ```
172
+
173
+ Then use:
174
+ - `/planpilot:prd` — create a PRD from a feature idea
175
+ - `/planpilot:spec` — create a tech spec from a PRD
176
+ - `/planpilot:sync` — generate `.plans` JSON and sync to GitHub
177
+
178
+ ### Agent Self-Install
146
179
 
147
- curl -fsSL "https://raw.githubusercontent.com/aryeko/planpilot/main/skills/roadmap-to-github-project/SKILL.md" \
148
- -o ~/.agents/skills/roadmap-to-github-project/SKILL.md
180
+ Tell your agent:
181
+
182
+ ```text
183
+ Fetch and follow instructions from https://raw.githubusercontent.com/aryeko/planpilot/main/src/planpilot/skills/INSTALL.agent.md
149
184
  ```
150
185
 
151
- Or from a local checkout:
186
+ The agent will install `planpilot` and all three skills automatically.
187
+
188
+ ### Manual Install
189
+
190
+ Install skills to the open discovery path used by agent platforms that support filesystem skills:
152
191
 
153
192
  ```bash
154
- cp skills/roadmap-to-github-project/SKILL.md \
155
- ~/.agents/skills/roadmap-to-github-project/SKILL.md
193
+ for skill in create-prd create-tech-spec plan-sync; do
194
+ mkdir -p ~/.agents/skills/$skill
195
+ curl -fsSL "https://raw.githubusercontent.com/aryeko/planpilot/main/src/planpilot/skills/$skill/SKILL.md" \
196
+ -o ~/.agents/skills/$skill/SKILL.md
197
+ done
156
198
  ```
157
199
 
158
- Full standalone instructions: [`skills/INSTALL.md`](skills/INSTALL.md)
200
+ Full standalone instructions: [`src/planpilot/skills/INSTALL.md`](src/planpilot/skills/INSTALL.md)
159
201
 
160
202
  ## Quickstart
161
203
 
@@ -178,7 +220,7 @@ cat > planpilot.json <<'JSON'
178
220
  "stories": ".plans/stories.json",
179
221
  "tasks": ".plans/tasks.json"
180
222
  },
181
- "sync_path": ".plans/github-sync-map.json"
223
+ "sync_path": ".plans/sync-map.json"
182
224
  }
183
225
  JSON
184
226
  ```
@@ -248,23 +290,39 @@ Full CLI reference: [docs/modules/cli.md](docs/modules/cli.md)
248
290
 
249
291
  ## Plan file schemas
250
292
 
251
- See [docs/schemas.md](docs/schemas.md) for plan schema examples and [docs/modules/plan.md](docs/modules/plan.md) for validation behavior.
293
+ See [docs/reference/plan-schemas.md](docs/reference/plan-schemas.md) for plan schema examples and [docs/modules/plan.md](docs/modules/plan.md) for validation behavior.
252
294
 
253
295
  A complete working example is in the [examples/](examples/) directory, including sample rendered issue bodies and a sync-map output.
254
296
 
255
297
  ## Documentation
256
298
 
257
- - [Docs Index](docs/README.md) -- v2 documentation hub
258
- - [How It Works](docs/how-it-works.md) -- end-to-end sync behavior
259
- - [E2E Testing](docs/e2e-testing.md) -- offline end-to-end test design, coverage, and usage
260
- - [Plan Schemas](docs/schemas.md) -- plan JSON shapes and examples
261
- - [Architecture](docs/design/architecture.md) -- layer rules and data flow
262
- - [Contracts](docs/design/contracts.md) -- core domain and adapter contracts
263
- - [Engine](docs/design/engine.md) -- sync pipeline behavior
264
- - [CLI](docs/modules/cli.md) -- command structure, output, and exit codes
265
- - [SDK](docs/modules/sdk.md) -- public API and composition root
266
- - [Providers](docs/modules/providers.md) -- provider model and extension guide
267
- - [Release Guide](RELEASE.md) -- automated versioning, publishing, and release pipeline
299
+ - Start here:
300
+ - [Docs Index](docs/README.md)
301
+ - [CLI Reference](docs/reference/cli-reference.md)
302
+ - [SDK Reference](docs/reference/sdk-reference.md)
303
+ - [Config Reference](docs/reference/config-reference.md)
304
+ - [Exit Codes](docs/reference/exit-codes.md)
305
+ - [Workflows Reference](docs/reference/workflows-reference.md)
306
+ - [Developer Workflow](docs/reference/developer-workflow.md)
307
+ - [Docs Inventory](docs/reference/docs-inventory.md)
308
+ - [Troubleshooting](docs/guides/troubleshooting.md)
309
+ - Architecture and behavior:
310
+ - [How It Works](docs/how-it-works.md)
311
+ - [Architecture](docs/design/architecture.md)
312
+ - [Contracts](docs/design/contracts.md)
313
+ - [Engine](docs/design/engine.md)
314
+ - [Map Sync Design](docs/design/map-sync.md)
315
+ - [Clean Workflow Design](docs/design/clean.md)
316
+ - [Code Map](docs/design/codemap.md)
317
+ - Module implementation details:
318
+ - [CLI](docs/modules/cli.md)
319
+ - [SDK](docs/modules/sdk.md)
320
+ - [Providers](docs/modules/providers.md)
321
+ - [GitHub Provider](docs/modules/github-provider.md)
322
+ - Operations:
323
+ - [E2E Testing](docs/testing/e2e.md)
324
+ - [Release Guide](RELEASE.md)
325
+ - [Changelog](CHANGELOG.md)
268
326
 
269
327
  ## Support
270
328
 
@@ -282,12 +340,13 @@ Development tasks use [poethepoet](https://github.com/nat-n/poethepoet):
282
340
  ```bash
283
341
  poe lint # ruff check
284
342
  poe format # ruff format
285
- poe test # pytest -v
343
+ poe docs-links # validate local markdown links
344
+ poe test # pytest -v --ignore=tests/e2e
286
345
  poe test-e2e # run offline E2E suite
287
346
  poe coverage # pytest + HTML coverage report
288
347
  poe coverage-e2e # E2E-only coverage XML
289
348
  poe typecheck # mypy
290
- poe check # lint + format-check + tests (all-in-one)
349
+ poe check # lint + format-check + typecheck + tests
291
350
  ```
292
351
 
293
352
  ## Contributing
@@ -1,7 +1,7 @@
1
1
  # <img src="https://raw.githubusercontent.com/aryeko/planpilot/main/assets/branding/navigator/navigator-square-512.png" alt="planpilot logo" width="32" height="32" align="absmiddle" /> planpilot
2
2
 
3
3
  [![CI](https://github.com/aryeko/planpilot/actions/workflows/ci.yml/badge.svg)](https://github.com/aryeko/planpilot/actions/workflows/ci.yml)
4
- [![codecov](https://codecov.io/gh/aryeko/planpilot/graph/badge.svg?token=3I2A515YTI)](https://codecov.io/gh/aryeko/planpilot)
4
+ [![codecov](https://codecov.io/gh/aryeko/planpilot/graph/badge.svg)](https://codecov.io/gh/aryeko/planpilot)
5
5
  [![PyPI](https://img.shields.io/pypi/v/planpilot)](https://pypi.org/project/planpilot/)
6
6
  [![Python](https://img.shields.io/pypi/pyversions/planpilot)](https://pypi.org/project/planpilot/)
7
7
  [![Downloads](https://static.pepy.tech/badge/planpilot)](https://pepy.tech/project/planpilot)
@@ -11,6 +11,12 @@ Sync roadmap plans (epics, stories, tasks) to GitHub Issues and Projects v2.
11
11
 
12
12
  > **⭐ If planpilot helps you manage your roadmaps, consider [giving it a star](https://github.com/aryeko/planpilot)!**
13
13
 
14
+ ## Why planpilot?
15
+
16
+ Managing roadmaps through GitHub's UI works for small projects, but breaks down fast: manually creating dozens of issues, linking parent/child hierarchies, setting up blocked-by dependencies, and keeping project board fields in sync is tedious and error-prone. Scripting the GitHub API directly means dealing with pagination, rate limits, idempotency, and GraphQL complexity.
17
+
18
+ **planpilot treats your roadmap as code.** Define epics, stories, and tasks in JSON files, commit them alongside your source code, and let planpilot handle the rest — creating issues, wiring up sub-issue hierarchies, setting blocked-by relations, and populating project board fields. It's idempotent (safe to rerun), supports dry-run previews, and works across multiple epics in a single run.
19
+
14
20
  ## What it does
15
21
 
16
22
  **planpilot** takes structured plan files and turns them into a fully linked project board:
@@ -38,26 +44,21 @@ planpilot follows SOLID principles with a modular, provider-agnostic design:
38
44
 
39
45
  ```text
40
46
  src/planpilot/
41
- ├── contracts/ # Core types, ABCs, and exception hierarchy
42
- ├── plan/ # Plan loading, validation, and hashing
43
- ├── auth/ # Token resolver strategy + factory
44
- ├── renderers/ # Body rendering implementations
45
- ├── engine/ # 5-phase sync orchestration
46
- ├── providers/ # Provider adapter layer
47
- │ └── github/ # GitHub GraphQL adapter + generated client
48
- ├── sdk.py # Composition root and config loading
49
- └── cli.py # CLI entry point
47
+ ├── core/ # Runtime domains (auth/config/contracts/engine/plan/providers/renderers)
48
+ ├── cli/ # CLI parser/app/commands and persistence helpers
49
+ ├── sdk.py # SDK composition root and public facade
50
+ └── __init__.py # Public API exports
50
51
  ```
51
52
 
52
- Core modules depend on contracts, and the SDK composes the runtime pieces. This keeps provider and renderer implementations swappable without changing engine internals.
53
+ Core domains provide business logic, and the SDK composes runtime pieces. This keeps provider and renderer implementations swappable without changing engine internals.
53
54
 
54
55
  See [docs/design/architecture.md](docs/design/architecture.md) for the full architecture guide.
55
56
 
56
57
  ## Requirements
57
58
 
58
59
  - Python 3.11+
59
- - [`gh` CLI](https://cli.github.com/) installed and authenticated
60
- - GitHub token scopes: `repo`, `project`
60
+ - GitHub token with `repo` and `project` scopes
61
+ - [`gh` CLI](https://cli.github.com/) only when using `auth: "gh-cli"`
61
62
 
62
63
  ## Installation
63
64
 
@@ -86,42 +87,83 @@ pip install planpilot
86
87
  <summary>From source (Poetry)</summary>
87
88
 
88
89
  ```bash
89
- poetry add planpilot
90
+ poetry install
90
91
  ```
91
92
 
92
93
  </details>
93
94
 
94
- ## Install Agent Skill
95
+ ## Try it now
95
96
 
96
- ### Agent Self-Install
97
-
98
- Tell your agent:
97
+ See planpilot in action without any configuration or GitHub token — the built-in example runs a fully offline dry-run:
99
98
 
99
+ ```bash
100
+ git clone https://github.com/aryeko/planpilot.git && cd planpilot
101
+ pipx install . # or: pip install .
102
+ planpilot sync --config examples/sync-workflow/planpilot.json --dry-run
100
103
  ```
101
- Fetch and follow instructions from https://raw.githubusercontent.com/aryeko/planpilot/refs/heads/main/skills/INSTALL.agent.md
104
+
105
+ ```text
106
+ planpilot - sync complete (dry-run)
107
+
108
+ Plan ID: 3832d3ffce22
109
+ Target: example-org/example-repo
110
+ Board: https://github.com/orgs/example-org/projects/1
111
+
112
+ Items: 6 total (1 epic, 2 stories, 3 tasks)
113
+ Created: 6 (1 epic, 2 stories, 3 tasks)
114
+
115
+ Sync map: /absolute/path/to/examples/sync-workflow/output/sync-map-sample.json.dry-run
116
+
117
+ [dry-run] No changes were made
102
118
  ```
103
119
 
104
- The agent will install both `planpilot` and the skill automatically.
120
+ ## Install Agent Skills
105
121
 
106
- ### Manual Install
122
+ planpilot ships three agent skills that form a complete product workflow:
123
+
124
+ | Skill | Purpose |
125
+ |-------|---------|
126
+ | `create-prd` | Generate structured PRDs from feature ideas |
127
+ | `create-tech-spec` | Create codebase-aware technical specs from PRDs |
128
+ | `plan-sync` | Sync specs to GitHub Issues + Projects v2 |
107
129
 
108
- Install the skill to the open discovery path used by agent platforms that support filesystem skills:
130
+ ### Claude Code Plugin
131
+
132
+ Install the planpilot plugin directly in Claude Code (the planpilot CLI is installed automatically from PyPI):
109
133
 
110
134
  ```bash
111
- mkdir -p ~/.agents/skills/roadmap-to-github-project
135
+ claude plugin marketplace add aryeko/planpilot
136
+ claude plugin install planpilot@planpilot
137
+ ```
138
+
139
+ Then use:
140
+ - `/planpilot:prd` — create a PRD from a feature idea
141
+ - `/planpilot:spec` — create a tech spec from a PRD
142
+ - `/planpilot:sync` — generate `.plans` JSON and sync to GitHub
143
+
144
+ ### Agent Self-Install
112
145
 
113
- curl -fsSL "https://raw.githubusercontent.com/aryeko/planpilot/main/skills/roadmap-to-github-project/SKILL.md" \
114
- -o ~/.agents/skills/roadmap-to-github-project/SKILL.md
146
+ Tell your agent:
147
+
148
+ ```text
149
+ Fetch and follow instructions from https://raw.githubusercontent.com/aryeko/planpilot/main/src/planpilot/skills/INSTALL.agent.md
115
150
  ```
116
151
 
117
- Or from a local checkout:
152
+ The agent will install `planpilot` and all three skills automatically.
153
+
154
+ ### Manual Install
155
+
156
+ Install skills to the open discovery path used by agent platforms that support filesystem skills:
118
157
 
119
158
  ```bash
120
- cp skills/roadmap-to-github-project/SKILL.md \
121
- ~/.agents/skills/roadmap-to-github-project/SKILL.md
159
+ for skill in create-prd create-tech-spec plan-sync; do
160
+ mkdir -p ~/.agents/skills/$skill
161
+ curl -fsSL "https://raw.githubusercontent.com/aryeko/planpilot/main/src/planpilot/skills/$skill/SKILL.md" \
162
+ -o ~/.agents/skills/$skill/SKILL.md
163
+ done
122
164
  ```
123
165
 
124
- Full standalone instructions: [`skills/INSTALL.md`](skills/INSTALL.md)
166
+ Full standalone instructions: [`src/planpilot/skills/INSTALL.md`](src/planpilot/skills/INSTALL.md)
125
167
 
126
168
  ## Quickstart
127
169
 
@@ -144,7 +186,7 @@ cat > planpilot.json <<'JSON'
144
186
  "stories": ".plans/stories.json",
145
187
  "tasks": ".plans/tasks.json"
146
188
  },
147
- "sync_path": ".plans/github-sync-map.json"
189
+ "sync_path": ".plans/sync-map.json"
148
190
  }
149
191
  JSON
150
192
  ```
@@ -214,23 +256,39 @@ Full CLI reference: [docs/modules/cli.md](docs/modules/cli.md)
214
256
 
215
257
  ## Plan file schemas
216
258
 
217
- See [docs/schemas.md](docs/schemas.md) for plan schema examples and [docs/modules/plan.md](docs/modules/plan.md) for validation behavior.
259
+ See [docs/reference/plan-schemas.md](docs/reference/plan-schemas.md) for plan schema examples and [docs/modules/plan.md](docs/modules/plan.md) for validation behavior.
218
260
 
219
261
  A complete working example is in the [examples/](examples/) directory, including sample rendered issue bodies and a sync-map output.
220
262
 
221
263
  ## Documentation
222
264
 
223
- - [Docs Index](docs/README.md) -- v2 documentation hub
224
- - [How It Works](docs/how-it-works.md) -- end-to-end sync behavior
225
- - [E2E Testing](docs/e2e-testing.md) -- offline end-to-end test design, coverage, and usage
226
- - [Plan Schemas](docs/schemas.md) -- plan JSON shapes and examples
227
- - [Architecture](docs/design/architecture.md) -- layer rules and data flow
228
- - [Contracts](docs/design/contracts.md) -- core domain and adapter contracts
229
- - [Engine](docs/design/engine.md) -- sync pipeline behavior
230
- - [CLI](docs/modules/cli.md) -- command structure, output, and exit codes
231
- - [SDK](docs/modules/sdk.md) -- public API and composition root
232
- - [Providers](docs/modules/providers.md) -- provider model and extension guide
233
- - [Release Guide](RELEASE.md) -- automated versioning, publishing, and release pipeline
265
+ - Start here:
266
+ - [Docs Index](docs/README.md)
267
+ - [CLI Reference](docs/reference/cli-reference.md)
268
+ - [SDK Reference](docs/reference/sdk-reference.md)
269
+ - [Config Reference](docs/reference/config-reference.md)
270
+ - [Exit Codes](docs/reference/exit-codes.md)
271
+ - [Workflows Reference](docs/reference/workflows-reference.md)
272
+ - [Developer Workflow](docs/reference/developer-workflow.md)
273
+ - [Docs Inventory](docs/reference/docs-inventory.md)
274
+ - [Troubleshooting](docs/guides/troubleshooting.md)
275
+ - Architecture and behavior:
276
+ - [How It Works](docs/how-it-works.md)
277
+ - [Architecture](docs/design/architecture.md)
278
+ - [Contracts](docs/design/contracts.md)
279
+ - [Engine](docs/design/engine.md)
280
+ - [Map Sync Design](docs/design/map-sync.md)
281
+ - [Clean Workflow Design](docs/design/clean.md)
282
+ - [Code Map](docs/design/codemap.md)
283
+ - Module implementation details:
284
+ - [CLI](docs/modules/cli.md)
285
+ - [SDK](docs/modules/sdk.md)
286
+ - [Providers](docs/modules/providers.md)
287
+ - [GitHub Provider](docs/modules/github-provider.md)
288
+ - Operations:
289
+ - [E2E Testing](docs/testing/e2e.md)
290
+ - [Release Guide](RELEASE.md)
291
+ - [Changelog](CHANGELOG.md)
234
292
 
235
293
  ## Support
236
294
 
@@ -248,12 +306,13 @@ Development tasks use [poethepoet](https://github.com/nat-n/poethepoet):
248
306
  ```bash
249
307
  poe lint # ruff check
250
308
  poe format # ruff format
251
- poe test # pytest -v
309
+ poe docs-links # validate local markdown links
310
+ poe test # pytest -v --ignore=tests/e2e
252
311
  poe test-e2e # run offline E2E suite
253
312
  poe coverage # pytest + HTML coverage report
254
313
  poe coverage-e2e # E2E-only coverage XML
255
314
  poe typecheck # mypy
256
- poe check # lint + format-check + tests (all-in-one)
315
+ poe check # lint + format-check + typecheck + tests
257
316
  ```
258
317
 
259
318
  ## Contributing
@@ -1,11 +1,11 @@
1
1
  [tool.poetry]
2
2
  name = "planpilot"
3
- version = "2.3.0"
3
+ version = "2.4.0"
4
4
  description = "Sync roadmap plans (epics, stories, tasks) to GitHub Issues and Projects v2"
5
5
  readme = "README.md"
6
6
  license = "MIT"
7
- authors = ["aryeko"]
8
- maintainers = ["aryeko"]
7
+ authors = ["Arye Kogan"]
8
+ maintainers = ["Arye Kogan"]
9
9
  homepage = "https://github.com/aryeko/planpilot"
10
10
  repository = "https://github.com/aryeko/planpilot"
11
11
  documentation = "https://github.com/aryeko/planpilot/tree/main/docs"
@@ -27,7 +27,6 @@ classifiers = [
27
27
  packages = [
28
28
  {include = "planpilot", from = "src"},
29
29
  ]
30
- exclude = ["skills"]
31
30
 
32
31
  [tool.poetry.urls]
33
32
  "Bug Tracker" = "https://github.com/aryeko/planpilot/issues"
@@ -38,7 +37,7 @@ exclude = ["skills"]
38
37
  planpilot = "planpilot.cli:main"
39
38
 
40
39
  [tool.poetry.dependencies]
41
- python = ">=3.11"
40
+ python = ">=3.11,<4.0"
42
41
  pydantic = "^2.12.5"
43
42
  httpx = "^0.28"
44
43
  questionary = "^2.1"
@@ -51,7 +50,7 @@ mypy = ">=1.0"
51
50
  pytest-cov = "^7.0.0"
52
51
  pytest-asyncio = "^1.3.0"
53
52
  commitlint = ">=1.3"
54
- poethepoet = "^0.40.0"
53
+ poethepoet = ">=0.40,<0.42"
55
54
  python-semantic-release = {version = "10.5.3", python = ">=3.11,<4.0"}
56
55
  # ariadne-codegen is run via pipx (click conflict with python-semantic-release)
57
56
  # pipx run --spec "ariadne-codegen>=0.17,<0.18" ariadne-codegen
@@ -64,6 +63,8 @@ build-backend = "poetry.core.masonry.api"
64
63
  lint = "ruff check ."
65
64
  format = "ruff format ."
66
65
  format-check = "ruff format --check ."
66
+ workflow-lint = "./scripts/actionlint.sh"
67
+ docs-links = "python scripts/check_markdown_links.py"
67
68
  test = "pytest -v --ignore=tests/e2e"
68
69
  test-e2e = "pytest -v tests/e2e/test_cli_e2e.py"
69
70
  coverage = "pytest -v --cov-report=html:.coverage/html"
@@ -77,7 +78,7 @@ shell = "export GITHUB_TOKEN=\"bearer $(gh auth token)\" && pipx run --spec 'ari
77
78
 
78
79
  [tool.poe.tasks.gen-client]
79
80
  help = "Generate typed GraphQL client from schema and operations"
80
- shell = "rm -rf src/planpilot/providers/github/github_gql && pipx run --spec 'ariadne-codegen>=0.17,<0.18' ariadne-codegen && ruff check --fix src/planpilot/providers/github/github_gql && ruff format src/planpilot/providers/github/github_gql"
81
+ shell = "rm -rf src/planpilot/core/providers/github/github_gql && pipx run --spec 'ariadne-codegen>=0.17,<0.18' ariadne-codegen && ruff check --fix src/planpilot/core/providers/github/github_gql && ruff format src/planpilot/core/providers/github/github_gql"
81
82
 
82
83
  [tool.poe.tasks.gen-gql]
83
84
  help = "Download schema and generate GraphQL client"
@@ -98,7 +99,7 @@ source = ["planpilot"]
98
99
  branch = true
99
100
  data_file = ".coverage/coverage.db"
100
101
  omit = [
101
- "src/planpilot/providers/github/github_gql/*",
102
+ "src/planpilot/core/providers/github/github_gql/*",
102
103
  ]
103
104
 
104
105
  [tool.coverage.report]
@@ -127,7 +128,7 @@ select = [
127
128
  ]
128
129
 
129
130
  [tool.ruff.lint.per-file-ignores]
130
- "src/planpilot/providers/github/github_gql/*" = ["F401", "RUF022", "UP042", "UP045", "E501"]
131
+ "src/planpilot/core/providers/github/github_gql/*" = ["F401", "RUF022", "UP042", "UP045", "E501"]
131
132
 
132
133
  [tool.ruff.lint.isort]
133
134
  known-first-party = ["planpilot"]
@@ -138,11 +139,12 @@ warn_return_any = true
138
139
  warn_unused_configs = true
139
140
  disallow_untyped_defs = true
140
141
  plugins = ["pydantic.mypy"]
141
- exclude = "(^src/planpilot/providers/github/github_gql/)"
142
+ files = ["src/planpilot"]
143
+ exclude = "(^src/planpilot/core/providers/github/github_gql/)"
142
144
 
143
145
  [tool.semantic_release]
144
146
  version_toml = ["pyproject.toml:tool.poetry.version"]
145
- version_variables = ["src/planpilot/__init__.py:__version__"]
147
+ version_variables = ["src/planpilot/__init__.py:__version__", "src/planpilot/.claude-plugin/plugin.json:version"]
146
148
  commit_parser = "conventional"
147
149
  commit_message = "chore(release): {version}"
148
150
  tag_format = "v{version}"
@@ -163,10 +165,10 @@ mode = "update"
163
165
  type = "github"
164
166
 
165
167
  [tool.ariadne-codegen]
166
- schema_path = "src/planpilot/providers/github/schema.graphql"
167
- queries_path = "src/planpilot/providers/github/operations"
168
+ schema_path = "src/planpilot/core/providers/github/schema.graphql"
169
+ queries_path = "src/planpilot/core/providers/github/operations"
168
170
  target_package_name = "github_gql"
169
- target_package_path = "src/planpilot/providers/github"
171
+ target_package_path = "src/planpilot/core/providers/github"
170
172
  client_name = "GitHubGraphQLClient"
171
173
  client_file_name = "client"
172
174
  async_client = true
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
3
+ "name": "planpilot",
4
+ "owner": {
5
+ "name": "Arye Kogan",
6
+ "email": "aryekogan@gmail.com"
7
+ },
8
+ "plugins": [
9
+ {
10
+ "name": "planpilot",
11
+ "source": {
12
+ "source": "pip",
13
+ "package": "planpilot"
14
+ }
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "planpilot",
3
+ "version": "2.4.0",
4
+ "description": "Claude Code skills and commands for planning workflows: create PRDs, tech specs, and sync plans to GitHub Issues + Projects v2",
5
+ "author": {
6
+ "name": "Arye Kogan",
7
+ "email": "aryekogan@gmail.com",
8
+ "url": "https://github.com/aryeko/planpilot"
9
+ },
10
+ "homepage": "https://github.com/aryeko/planpilot",
11
+ "repository": "https://github.com/aryeko/planpilot",
12
+ "license": "MIT",
13
+ "keywords": ["planning", "github", "roadmap", "issues", "projects", "prd", "spec"],
14
+ "category": "workflow",
15
+ "tags": ["planning", "github-projects", "roadmap", "prd", "tech-spec", "skills", "commands"],
16
+ "skills": ["./skills/"],
17
+ "commands": ["./commands/"]
18
+ }