specy-road 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 (251) hide show
  1. specy_road-0.1.0/LICENSE +21 -0
  2. specy_road-0.1.0/PKG-INFO +141 -0
  3. specy_road-0.1.0/README.md +109 -0
  4. specy_road-0.1.0/pyproject.toml +64 -0
  5. specy_road-0.1.0/setup.cfg +4 -0
  6. specy_road-0.1.0/specy_road/__init__.py +47 -0
  7. specy_road-0.1.0/specy_road/bundled_scripts/abort_task_pickup.py +295 -0
  8. specy_road-0.1.0/specy_road/bundled_scripts/brief_dependency_context.py +257 -0
  9. specy_road-0.1.0/specy_road/bundled_scripts/do_next_available.py +324 -0
  10. specy_road-0.1.0/specy_road/bundled_scripts/do_next_prompt.py +271 -0
  11. specy_road-0.1.0/specy_road/bundled_scripts/do_next_task.py +399 -0
  12. specy_road-0.1.0/specy_road/bundled_scripts/do_next_task_args.py +85 -0
  13. specy_road-0.1.0/specy_road/bundled_scripts/do_next_task_interactive.py +135 -0
  14. specy_road-0.1.0/specy_road/bundled_scripts/do_next_task_leaf_guards.py +78 -0
  15. specy_road-0.1.0/specy_road/bundled_scripts/do_next_task_pickup_helpers.py +126 -0
  16. specy_road-0.1.0/specy_road/bundled_scripts/do_next_task_self_heal.py +121 -0
  17. specy_road-0.1.0/specy_road/bundled_scripts/do_next_task_virtual_complete.py +48 -0
  18. specy_road-0.1.0/specy_road/bundled_scripts/export_roadmap_md.py +193 -0
  19. specy_road-0.1.0/specy_road/bundled_scripts/finish_task.py +381 -0
  20. specy_road-0.1.0/specy_road/bundled_scripts/generate_brief.py +310 -0
  21. specy_road-0.1.0/specy_road/bundled_scripts/llm_throughput.py +180 -0
  22. specy_road-0.1.0/specy_road/bundled_scripts/mark_implementation_reviewed.py +323 -0
  23. specy_road-0.1.0/specy_road/bundled_scripts/migrate_stable_node_keys.py +115 -0
  24. specy_road-0.1.0/specy_road/bundled_scripts/open_milestone_pr.py +93 -0
  25. specy_road-0.1.0/specy_road/bundled_scripts/planning_artifacts.py +294 -0
  26. specy_road-0.1.0/specy_road/bundled_scripts/planning_rename.py +32 -0
  27. specy_road-0.1.0/specy_road/bundled_scripts/planning_sheet_bootstrap.py +177 -0
  28. specy_road-0.1.0/specy_road/bundled_scripts/pm_gui_git_remote_verify.py +69 -0
  29. specy_road-0.1.0/specy_road/bundled_scripts/pm_sync.py +122 -0
  30. specy_road-0.1.0/specy_road/bundled_scripts/reconcile_milestone_status.py +227 -0
  31. specy_road-0.1.0/specy_road/bundled_scripts/registration_pickup_commit.py +14 -0
  32. specy_road-0.1.0/specy_road/bundled_scripts/review_node.py +860 -0
  33. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_chunk_utils.py +201 -0
  34. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_crud.py +17 -0
  35. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_crud_argparse.py +194 -0
  36. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_crud_dependency_ops.py +114 -0
  37. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_crud_ops.py +380 -0
  38. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_edit_fields.py +281 -0
  39. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_gui_lib.py +202 -0
  40. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_gui_pr_pickers.py +27 -0
  41. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_gui_remote.py +399 -0
  42. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_gui_settings.py +397 -0
  43. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_gui_settings_scope.py +71 -0
  44. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_gui_tree.py +62 -0
  45. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_layout.py +258 -0
  46. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_load.py +261 -0
  47. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_load_at_ref.py +74 -0
  48. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_node_keys.py +25 -0
  49. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_outline_ops.py +239 -0
  50. specy_road-0.1.0/specy_road/bundled_scripts/roadmap_outline_renumber.py +113 -0
  51. specy_road-0.1.0/specy_road/bundled_scripts/scaffold_planning.py +138 -0
  52. specy_road-0.1.0/specy_road/bundled_scripts/start_milestone_session.py +229 -0
  53. specy_road-0.1.0/specy_road/bundled_scripts/sync_planning_artifacts.py +76 -0
  54. specy_road-0.1.0/specy_road/bundled_scripts/update_specy_road.py +398 -0
  55. specy_road-0.1.0/specy_road/bundled_scripts/validate_file_limits.py +52 -0
  56. specy_road-0.1.0/specy_road/bundled_scripts/validate_roadmap.py +146 -0
  57. specy_road-0.1.0/specy_road/bundled_scripts/validate_roadmap_checks.py +367 -0
  58. specy_road-0.1.0/specy_road/bundled_scripts/validate_roadmap_gates.py +42 -0
  59. specy_road-0.1.0/specy_road/bundled_scripts/validate_self_heal.py +150 -0
  60. specy_road-0.1.0/specy_road/bundled_scripts/work_dir_stash.py +50 -0
  61. specy_road-0.1.0/specy_road/cli.py +313 -0
  62. specy_road-0.1.0/specy_road/cli_init.py +187 -0
  63. specy_road-0.1.0/specy_road/cli_init_argparse.py +67 -0
  64. specy_road-0.1.0/specy_road/constitution_scaffold.py +79 -0
  65. specy_road-0.1.0/specy_road/do_next_milestone_pickup.py +63 -0
  66. specy_road-0.1.0/specy_road/feature_rm_registry.py +72 -0
  67. specy_road-0.1.0/specy_road/file_limits_engine.py +289 -0
  68. specy_road-0.1.0/specy_road/finish_land_integration.py +112 -0
  69. specy_road-0.1.0/specy_road/finish_milestone_rollout.py +124 -0
  70. specy_road-0.1.0/specy_road/finish_modes.py +139 -0
  71. specy_road-0.1.0/specy_road/finish_pr_body.py +110 -0
  72. specy_road-0.1.0/specy_road/git_milestone_delivery.py +45 -0
  73. specy_road-0.1.0/specy_road/git_subprocess.py +24 -0
  74. specy_road-0.1.0/specy_road/git_sync_status.py +64 -0
  75. specy_road-0.1.0/specy_road/git_workflow_config.py +380 -0
  76. specy_road-0.1.0/specy_road/governance_completion.py +61 -0
  77. specy_road-0.1.0/specy_road/gui_app.py +98 -0
  78. specy_road-0.1.0/specy_road/gui_app_api.py +29 -0
  79. specy_road-0.1.0/specy_road/gui_app_helpers.py +109 -0
  80. specy_road-0.1.0/specy_road/gui_app_models.py +95 -0
  81. specy_road-0.1.0/specy_road/gui_app_routes_core.py +212 -0
  82. specy_road-0.1.0/specy_road/gui_app_routes_nodes.py +284 -0
  83. specy_road-0.1.0/specy_road/gui_app_routes_planning.py +153 -0
  84. specy_road-0.1.0/specy_road/gui_app_routes_publish.py +31 -0
  85. specy_road-0.1.0/specy_road/gui_app_routes_workspace.py +133 -0
  86. specy_road-0.1.0/specy_road/init_project.py +70 -0
  87. specy_road-0.1.0/specy_road/milestone_chunk_io.py +125 -0
  88. specy_road-0.1.0/specy_road/milestone_lock.py +46 -0
  89. specy_road-0.1.0/specy_road/milestone_rollup_git.py +137 -0
  90. specy_road-0.1.0/specy_road/milestone_session.py +89 -0
  91. specy_road-0.1.0/specy_road/milestone_subtree.py +69 -0
  92. specy_road-0.1.0/specy_road/on_complete_pickup.py +86 -0
  93. specy_road-0.1.0/specy_road/on_complete_session.py +73 -0
  94. specy_road-0.1.0/specy_road/pm_gantt_static/assets/ConstitutionDrawer-DgiRkhrs.js +1 -0
  95. specy_road-0.1.0/specy_road/pm_gantt_static/assets/EditModal-D8Pg4vpG.js +9 -0
  96. specy_road-0.1.0/specy_road/pm_gantt_static/assets/MarkdownWorkspace-6T8YVW1A.js +3 -0
  97. specy_road-0.1.0/specy_road/pm_gantt_static/assets/ModalPersistStatusFooter-COyGYvH1.js +1 -0
  98. specy_road-0.1.0/specy_road/pm_gantt_static/assets/SettingsDrawer-D05lcnA5.js +1 -0
  99. specy_road-0.1.0/specy_road/pm_gantt_static/assets/SharedDocsDrawer-DhgtIH_F.js +1 -0
  100. specy_road-0.1.0/specy_road/pm_gantt_static/assets/VisionDrawer-DWV6VYHV.js +4 -0
  101. specy_road-0.1.0/specy_road/pm_gantt_static/assets/WorkNotesDrawer-BCZRFeuT.js +5 -0
  102. specy_road-0.1.0/specy_road/pm_gantt_static/assets/dnd-stack-ChA4-iz4.js +5 -0
  103. specy_road-0.1.0/specy_road/pm_gantt_static/assets/index-BB0qR2RD.js +5 -0
  104. specy_road-0.1.0/specy_road/pm_gantt_static/assets/index-Bdk2uuZB.css +1 -0
  105. specy_road-0.1.0/specy_road/pm_gantt_static/assets/markdown-stack-BzdnVZOK.js +234 -0
  106. specy_road-0.1.0/specy_road/pm_gantt_static/assets/react-vendor-zEG5fcam.js +9 -0
  107. specy_road-0.1.0/specy_road/pm_gantt_static/assets/rolldown-runtime-S-ySWqyJ.js +1 -0
  108. specy_road-0.1.0/specy_road/pm_gantt_static/assets/usePmGuiHandlers-vI5Q_zm0.js +1 -0
  109. specy_road-0.1.0/specy_road/pm_gantt_static/assets/vendor-C0tHfJtQ.js +6 -0
  110. specy_road-0.1.0/specy_road/pm_gantt_static/favicon.svg +1 -0
  111. specy_road-0.1.0/specy_road/pm_gantt_static/icons.svg +24 -0
  112. specy_road-0.1.0/specy_road/pm_gantt_static/index.html +18 -0
  113. specy_road-0.1.0/specy_road/pm_gui_concurrency.py +121 -0
  114. specy_road-0.1.0/specy_road/pm_gui_fingerprint.py +71 -0
  115. specy_road-0.1.0/specy_road/pm_integration_registry.py +136 -0
  116. specy_road-0.1.0/specy_road/pm_publish.py +322 -0
  117. specy_road-0.1.0/specy_road/registry_remote_overlay.py +336 -0
  118. specy_road-0.1.0/specy_road/registry_remote_overlay_merge.py +185 -0
  119. specy_road-0.1.0/specy_road/runtime_paths.py +32 -0
  120. specy_road-0.1.0/specy_road/specyrd_cli.py +211 -0
  121. specy_road-0.1.0/specy_road/specyrd_init.py +369 -0
  122. specy_road-0.1.0/specy_road/templates/adoption/004-specy-road-consumer.mdc +10 -0
  123. specy_road-0.1.0/specy_road/templates/adoption/005-do-next-registry-publish.mdc +10 -0
  124. specy_road-0.1.0/specy_road/templates/adoption/README.md +9 -0
  125. specy_road-0.1.0/specy_road/templates/adoption/specy-road-consumer-claude-snippet.md +7 -0
  126. specy_road-0.1.0/specy_road/templates/constitution/principles.md.template +8 -0
  127. specy_road-0.1.0/specy_road/templates/constitution/purpose.md.template +5 -0
  128. specy_road-0.1.0/specy_road/templates/planning-node/feature-sheet.md.template +16 -0
  129. specy_road-0.1.0/specy_road/templates/planning-node/gate-sheet.md.template +23 -0
  130. specy_road-0.1.0/specy_road/templates/planning-node/milestone-stub.md.template +65 -0
  131. specy_road-0.1.0/specy_road/templates/project/AGENTS.md +19 -0
  132. specy_road-0.1.0/specy_road/templates/project/constitution/principles.md +7 -0
  133. specy_road-0.1.0/specy_road/templates/project/constitution/purpose.md +5 -0
  134. specy_road-0.1.0/specy_road/templates/project/constraints/README.md +14 -0
  135. specy_road-0.1.0/specy_road/templates/project/constraints/file-limits.yaml +31 -0
  136. specy_road-0.1.0/specy_road/templates/project/docs/supply-chain-security.md +49 -0
  137. specy_road-0.1.0/specy_road/templates/project/planning/M1.1_first-milestone_b2c3d4e5-f6a7-4890-b123-456789abcdef.md +16 -0
  138. specy_road-0.1.0/specy_road/templates/project/planning/M1_unnamed_a1b2c3d4-e5f6-4789-a012-3456789abcde.md +16 -0
  139. specy_road-0.1.0/specy_road/templates/project/planning/README.md +9 -0
  140. specy_road-0.1.0/specy_road/templates/project/roadmap/git-workflow.yaml +14 -0
  141. specy_road-0.1.0/specy_road/templates/project/roadmap/manifest.json +6 -0
  142. specy_road-0.1.0/specy_road/templates/project/roadmap/phases/M1.json +36 -0
  143. specy_road-0.1.0/specy_road/templates/project/roadmap/registry.yaml +5 -0
  144. specy_road-0.1.0/specy_road/templates/project/schemas/git-workflow.schema.json +40 -0
  145. specy_road-0.1.0/specy_road/templates/project/schemas/manifest.schema.json +16 -0
  146. specy_road-0.1.0/specy_road/templates/project/schemas/registry.schema.json +54 -0
  147. specy_road-0.1.0/specy_road/templates/project/schemas/roadmap.schema.json +135 -0
  148. specy_road-0.1.0/specy_road/templates/project/shared/README.md +5 -0
  149. specy_road-0.1.0/specy_road/templates/project/vision.md +3 -0
  150. specy_road-0.1.0/specy_road/templates/project/work/README.md +13 -0
  151. specy_road-0.1.0/specy_road/templates/project/work/implementation-summary.template.md +22 -0
  152. specy_road-0.1.0/specy_road/templates/specyrd/CLAUDE.md.template +50 -0
  153. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-abort-task-pickup.md +21 -0
  154. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-add-node.md +12 -0
  155. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-author.md +41 -0
  156. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-brief.md +23 -0
  157. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-claim.md +47 -0
  158. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-constitution.md +30 -0
  159. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-do-next-task.md +42 -0
  160. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-export.md +27 -0
  161. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-file-limits.md +19 -0
  162. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-finish.md +37 -0
  163. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-list-nodes.md +12 -0
  164. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-mark-reviewed.md +25 -0
  165. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-review-node.md +12 -0
  166. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-show-node.md +12 -0
  167. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-sync.md +14 -0
  168. specy_road-0.1.0/specy_road/templates/specyrd/commands/specyrd-validate.md +23 -0
  169. specy_road-0.1.0/specy_road/templates/specyrd/dot-specyrd/README.md +14 -0
  170. specy_road-0.1.0/specy_road.egg-info/PKG-INFO +141 -0
  171. specy_road-0.1.0/specy_road.egg-info/SOURCES.txt +249 -0
  172. specy_road-0.1.0/specy_road.egg-info/dependency_links.txt +1 -0
  173. specy_road-0.1.0/specy_road.egg-info/entry_points.txt +3 -0
  174. specy_road-0.1.0/specy_road.egg-info/requires.txt +26 -0
  175. specy_road-0.1.0/specy_road.egg-info/top_level.txt +1 -0
  176. specy_road-0.1.0/tests/test_abort_task_pickup.py +170 -0
  177. specy_road-0.1.0/tests/test_brief_dependency_context.py +236 -0
  178. specy_road-0.1.0/tests/test_check_release_version.py +80 -0
  179. specy_road-0.1.0/tests/test_cli.py +394 -0
  180. specy_road-0.1.0/tests/test_cli_init.py +60 -0
  181. specy_road-0.1.0/tests/test_constitution_scaffold.py +92 -0
  182. specy_road-0.1.0/tests/test_do_next_gate.py +168 -0
  183. specy_road-0.1.0/tests/test_do_next_pr_gating.py +40 -0
  184. specy_road-0.1.0/tests/test_do_next_prompt.py +48 -0
  185. specy_road-0.1.0/tests/test_do_next_queue.py +317 -0
  186. specy_road-0.1.0/tests/test_do_next_task_git_helpers.py +66 -0
  187. specy_road-0.1.0/tests/test_do_next_task_pickup.py +315 -0
  188. specy_road-0.1.0/tests/test_do_next_task_self_heal.py +115 -0
  189. specy_road-0.1.0/tests/test_do_next_virtual_pickup.py +384 -0
  190. specy_road-0.1.0/tests/test_export_roadmap_md.py +76 -0
  191. specy_road-0.1.0/tests/test_file_limits_engine.py +151 -0
  192. specy_road-0.1.0/tests/test_finish_merge_mode.py +74 -0
  193. specy_road-0.1.0/tests/test_finish_modes_pr_body.py +61 -0
  194. specy_road-0.1.0/tests/test_finish_pr_body.py +99 -0
  195. specy_road-0.1.0/tests/test_finish_task_commands.py +183 -0
  196. specy_road-0.1.0/tests/test_finish_work_cleanup.py +122 -0
  197. specy_road-0.1.0/tests/test_generate_brief.py +117 -0
  198. specy_road-0.1.0/tests/test_git_milestone_delivery.py +67 -0
  199. specy_road-0.1.0/tests/test_git_subprocess.py +61 -0
  200. specy_road-0.1.0/tests/test_git_workflow_remote_tip.py +203 -0
  201. specy_road-0.1.0/tests/test_governance_completion.py +79 -0
  202. specy_road-0.1.0/tests/test_gui_app.py +348 -0
  203. specy_road-0.1.0/tests/test_gui_app_milestone_lock.py +153 -0
  204. specy_road-0.1.0/tests/test_gui_app_mutations.py +239 -0
  205. specy_road-0.1.0/tests/test_gui_app_routes_nodes_errors.py +156 -0
  206. specy_road-0.1.0/tests/test_init_project.py +62 -0
  207. specy_road-0.1.0/tests/test_init_project_gitignore.py +27 -0
  208. specy_road-0.1.0/tests/test_llm_throughput.py +189 -0
  209. specy_road-0.1.0/tests/test_milestone_lock.py +61 -0
  210. specy_road-0.1.0/tests/test_milestone_session.py +47 -0
  211. specy_road-0.1.0/tests/test_milestone_subtree.py +75 -0
  212. specy_road-0.1.0/tests/test_on_complete.py +104 -0
  213. specy_road-0.1.0/tests/test_outline_renumber.py +107 -0
  214. specy_road-0.1.0/tests/test_planning_artifacts.py +167 -0
  215. specy_road-0.1.0/tests/test_planning_sheet_bootstrap.py +130 -0
  216. specy_road-0.1.0/tests/test_pm_gui_concurrency_autoff.py +327 -0
  217. specy_road-0.1.0/tests/test_pm_gui_field_repros.py +108 -0
  218. specy_road-0.1.0/tests/test_pm_gui_fingerprint.py +112 -0
  219. specy_road-0.1.0/tests/test_pm_gui_git_remote_verify.py +157 -0
  220. specy_road-0.1.0/tests/test_pm_integration_registry.py +172 -0
  221. specy_road-0.1.0/tests/test_pm_publish.py +172 -0
  222. specy_road-0.1.0/tests/test_post_release_readme_cleanup.py +106 -0
  223. specy_road-0.1.0/tests/test_reconcile_milestone_status.py +28 -0
  224. specy_road-0.1.0/tests/test_reconcile_milestone_status_errors.py +125 -0
  225. specy_road-0.1.0/tests/test_registry_remote_overlay.py +215 -0
  226. specy_road-0.1.0/tests/test_registry_remote_overlay_sync.py +312 -0
  227. specy_road-0.1.0/tests/test_review_node.py +362 -0
  228. specy_road-0.1.0/tests/test_roadmap_crud.py +363 -0
  229. specy_road-0.1.0/tests/test_roadmap_crud_dependencies.py +132 -0
  230. specy_road-0.1.0/tests/test_roadmap_crud_ops.py +155 -0
  231. specy_road-0.1.0/tests/test_roadmap_edit_fields.py +70 -0
  232. specy_road-0.1.0/tests/test_roadmap_gui_lib.py +215 -0
  233. specy_road-0.1.0/tests/test_roadmap_gui_pr_pickers.py +53 -0
  234. specy_road-0.1.0/tests/test_roadmap_gui_remote.py +280 -0
  235. specy_road-0.1.0/tests/test_roadmap_gui_tree.py +83 -0
  236. specy_road-0.1.0/tests/test_roadmap_layout.py +183 -0
  237. specy_road-0.1.0/tests/test_roadmap_load.py +166 -0
  238. specy_road-0.1.0/tests/test_roadmap_outline_registry.py +29 -0
  239. specy_road-0.1.0/tests/test_scaffold_planning.py +22 -0
  240. specy_road-0.1.0/tests/test_set_gate_status.py +142 -0
  241. specy_road-0.1.0/tests/test_specyrd_init.py +279 -0
  242. specy_road-0.1.0/tests/test_start_milestone_session_reentry.py +119 -0
  243. specy_road-0.1.0/tests/test_sync_planning_outline.py +115 -0
  244. specy_road-0.1.0/tests/test_update_specy_road.py +302 -0
  245. specy_road-0.1.0/tests/test_validate_file_limits.py +16 -0
  246. specy_road-0.1.0/tests/test_validate_gates.py +63 -0
  247. specy_road-0.1.0/tests/test_validate_roadmap.py +307 -0
  248. specy_road-0.1.0/tests/test_validate_self_heal.py +145 -0
  249. specy_road-0.1.0/tests/test_verify_wheel_contents.py +67 -0
  250. specy_road-0.1.0/tests/test_version_resolution.py +113 -0
  251. specy_road-0.1.0/tests/test_work_dir_stash.py +61 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 specy-road contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,141 @@
1
+ Metadata-Version: 2.4
2
+ Name: specy-road
3
+ Version: 0.1.0
4
+ Summary: Roadmap-first coordination kit for humans and AI agents
5
+ License: MIT
6
+ Requires-Python: >=3.11
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Requires-Dist: PyYAML>=6.0
10
+ Requires-Dist: jsonschema>=4.20
11
+ Provides-Extra: dev
12
+ Requires-Dist: pytest>=7.0; extra == "dev"
13
+ Requires-Dist: fastapi>=0.115; extra == "dev"
14
+ Requires-Dist: httpx>=0.27; extra == "dev"
15
+ Requires-Dist: requests>=2.31; extra == "dev"
16
+ Provides-Extra: review
17
+ Requires-Dist: openai>=1.40; extra == "review"
18
+ Requires-Dist: anthropic>=0.40; extra == "review"
19
+ Provides-Extra: gui
20
+ Requires-Dist: fastapi>=0.115; extra == "gui"
21
+ Requires-Dist: uvicorn[standard]>=0.30; extra == "gui"
22
+ Requires-Dist: requests>=2.31; extra == "gui"
23
+ Requires-Dist: openai>=1.40; extra == "gui"
24
+ Requires-Dist: anthropic>=0.40; extra == "gui"
25
+ Provides-Extra: gui-next
26
+ Requires-Dist: fastapi>=0.115; extra == "gui-next"
27
+ Requires-Dist: uvicorn[standard]>=0.30; extra == "gui-next"
28
+ Requires-Dist: requests>=2.31; extra == "gui-next"
29
+ Requires-Dist: openai>=1.40; extra == "gui-next"
30
+ Requires-Dist: anthropic>=0.40; extra == "gui-next"
31
+ Dynamic: license-file
32
+
33
+ <!--
34
+ TODO(post-release): wire automated PyPI build-and-publish on every tagged
35
+ release (v*.*.*), then replace the install-from-source block below with a
36
+ single `pip install specy-road` line.
37
+ -->
38
+
39
+ # specy-road
40
+
41
+ > ## ⚠️ Pre-release notice
42
+ > **Stable PyPI** does not list `specy-road` yet (`pip install specy-road` from
43
+ > pypi.org). **Prerelease** tags (for example `v0.1.0-rc1`) publish to
44
+ > **TestPyPI** for smoke installs — see
45
+ > [`docs/contributor-guide.md`](docs/contributor-guide.md). For day-to-day work
46
+ > on **this** repository, keep using an **editable install from `dev`** as in
47
+ > [Install](#install). The TODO comment above is removed after **v0.1.0**
48
+ > ships to PyPI and the install block switches to `pip install`.
49
+
50
+ **One roadmap for the whole team**—so product, engineering, and coding agents share the same plan.
51
+
52
+ ## What it is
53
+
54
+ **specy-road** is a toolkit for keeping priorities, written specs, and implementation work aligned. It fits teams that use AI-assisted editors (for example Claude or Cursor) together with product-led planning. Your team maintains a **roadmap** in the repository: what matters, in what order, and what depends on what. A small command-line tool checks that the roadmap is consistent, publishes a readable index, and can build **briefs**—focused packets of context for a single task—so nobody has to reread the entire project to know what to do next.
55
+
56
+ ### Who it’s for
57
+
58
+ - **Product managers and delivery leads** — A single place for direction, sequencing, and visibility into what is active or blocked.
59
+ - **Developers and coding agents** — Task-sized context, shared contracts, and clear ownership areas so work stays parallel without stepping on the same files.
60
+
61
+ ## Why teams use it
62
+
63
+ - **Single source of truth** — Less drift between tickets, docs, and “what we agreed.” The roadmap and planning sheets stay tied together; cross-cutting rules live in `shared/` where they belong.
64
+ - **Right-sized context** — `specy-road brief` pulls the relevant planning sheets and contracts for one roadmap item instead of the whole repository story.
65
+ - **Safer parallel work** — Stable IDs, **touch zones**, and `roadmap/registry.yaml` show who is working on what before files collide.
66
+ - **Your tools, your workflow** — The kit is about roadmaps and specs, not a particular IDE or agent ritual. See [docs/philosophy-and-scope.md](docs/philosophy-and-scope.md).
67
+
68
+ ## Getting started
69
+
70
+ Install the CLI (**Python 3.11+**) and **git**, then follow **[Install](#install)** and **[docs/install-and-usage.md](docs/install-and-usage.md)** for cloning, editable install, and **`specy-road init project`** in an application repo. After that, everyday use boils down to:
71
+
72
+ ### For PMs
73
+
74
+ 1. Prefer **`specy-road gui`** for the dashboard, or edit `roadmap/` and `planning/` directly ([docs/pm-gui.md](docs/pm-gui.md)).
75
+ 2. Run **`specy-road export`** and **`specy-road validate`** before you commit.
76
+
77
+ More detail: [docs/pm-workflow.md](docs/pm-workflow.md). Optional **LLM Review** in the Gantt UI: [docs/pm-llm-review.md](docs/pm-llm-review.md).
78
+
79
+ ### For developers
80
+
81
+ 1. Pick up work with **`specy-road do-next-available-task`**, or **`specy-road brief <NODE_ID>`** for a specific node ([docs/dev-workflow.md](docs/dev-workflow.md)).
82
+ 2. Finish with **`specy-road finish-this-task`**, then land changes with your team’s PR process ([docs/git-workflow.md](docs/git-workflow.md)).
83
+
84
+ ## Install
85
+
86
+ Requires **Python 3.11+** and **git** (with a configured remote — `origin` by default).
87
+
88
+ > **Stable PyPI pending.** Install from source on the `dev` branch (below). The
89
+ > end-user guide is **[docs/install-and-usage.md](docs/install-and-usage.md)**;
90
+ > prerelease/TestPyPI details live in **[docs/contributor-guide.md](docs/contributor-guide.md)**.
91
+
92
+ ```bash
93
+ git clone https://github.com/shanevigil/specy-road.git
94
+ cd specy-road
95
+ git switch dev # main is reserved for tagged releases
96
+ python3 -m venv .venv
97
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
98
+ pip install -e ".[dev,gui-next]" # add ',review' for optional review-node
99
+ ```
100
+
101
+ Consumer **`init project`**, `roadmap/git-workflow.yaml`, optional **`specyrd`** stubs, and bootstrap prompts are covered in **[docs/install-and-usage.md](docs/install-and-usage.md)**. Toolkit contributors (tests, pre-commit, releases): **[docs/contributor-guide.md](docs/contributor-guide.md)**.
102
+
103
+ ## More on how to work with it
104
+
105
+ Typical path in an **application** repository after `specy-road init project`: roadmap and planning for direction and detail; validation, export, and briefs for engineering and agents; registry and branches for safe parallel work. Maintainers working on **this** toolkit follow [AGENTS.md](AGENTS.md), [docs/toolkit-development.md](docs/toolkit-development.md), and [docs/contributor-guide.md](docs/contributor-guide.md).
106
+
107
+ 1. **Bootstrap** — `specy-road init project` (once per repo) creates `constitution/`, `roadmap/`, `shared/`, `constraints/`, `schemas/`, `planning/`, `work/`, and `AGENTS.md`.
108
+ 2. **Author** — Edit JSON chunks under `roadmap/` (listed in `manifest.json`). See [docs/roadmap-authoring.md](docs/roadmap-authoring.md).
109
+ 3. **Validate** — `specy-road validate` (use `--repo-root` if not in the project root).
110
+ 4. **Publish views** — `specy-road export` regenerates `roadmap.md` from the merged graph.
111
+ 5. **Focus a task** — `specy-road brief <NODE_ID> -o work/brief-<NODE_ID>.md`, then implement against `shared/` contracts cited for that node.
112
+ 6. **Branches** — Follow [docs/git-workflow.md](docs/git-workflow.md): register in `roadmap/registry.yaml` on the **integration branch** from `roadmap/git-workflow.yaml`, then `feature/rm-<codename>` (or use `specy-road do-next-available-task`).
113
+ 7. **Optional IDE commands** — `specyrd` installs stubs that invoke the CLI; see [docs/contributor-guide.md#ide-command-stubs-specyrd](docs/contributor-guide.md#ide-command-stubs-specyrd).
114
+
115
+ ## Where to read next
116
+
117
+ | Document | Purpose |
118
+ | -------- | ------- |
119
+ | [docs/install-and-usage.md](docs/install-and-usage.md) | Install from source, `init project`, everyday PM/dev/GUI flows |
120
+ | [docs/contributor-guide.md](docs/contributor-guide.md) | Toolkit contributors: CI parity, pre-commit, releases, `specyrd` |
121
+ | [docs/philosophy-and-scope.md](docs/philosophy-and-scope.md) | What the kit promises and what it leaves to you |
122
+ | [docs/architecture.md](docs/architecture.md) | End-to-end flow: manifest, chunks, validation, briefs |
123
+ | [docs/roadmap-authoring.md](docs/roadmap-authoring.md) | JSON chunks, manifest order, generated `roadmap.md` |
124
+ | [docs/git-workflow.md](docs/git-workflow.md) | Consumer workflow contract (`git-workflow.yaml`), branches, registry, merge-back |
125
+ | [docs/toolkit-development.md](docs/toolkit-development.md) | Short maintainer notes (this repo vs consumer contract) |
126
+ | [docs/optional-ai-tooling-patterns.md](docs/optional-ai-tooling-patterns.md) | Optional patterns (CLAUDE.md, Cursor rules, MCP) for app repos |
127
+ | [suggested_prompts/](suggested_prompts/) | Adoption prompts (clone this repo; not shipped on PyPI) |
128
+ | [AGENTS.md](AGENTS.md) | Short entry for coding agents |
129
+
130
+ ## Related material
131
+
132
+ - [Spec-Kit](https://github.com/github/spec-kit) — inspiration only
133
+ - [docs/optional-ai-tooling-patterns.md](docs/optional-ai-tooling-patterns.md) — optional AI tooling ideas for application repositories
134
+
135
+ ## Contributing to this repository
136
+
137
+ To participate in development of the **specy-road** toolkit itself, contact the repository owner. Technical setup: [docs/contributor-guide.md](docs/contributor-guide.md).
138
+
139
+ ## License
140
+
141
+ MIT — see [LICENSE](LICENSE).
@@ -0,0 +1,109 @@
1
+ <!--
2
+ TODO(post-release): wire automated PyPI build-and-publish on every tagged
3
+ release (v*.*.*), then replace the install-from-source block below with a
4
+ single `pip install specy-road` line.
5
+ -->
6
+
7
+ # specy-road
8
+
9
+ > ## ⚠️ Pre-release notice
10
+ > **Stable PyPI** does not list `specy-road` yet (`pip install specy-road` from
11
+ > pypi.org). **Prerelease** tags (for example `v0.1.0-rc1`) publish to
12
+ > **TestPyPI** for smoke installs — see
13
+ > [`docs/contributor-guide.md`](docs/contributor-guide.md). For day-to-day work
14
+ > on **this** repository, keep using an **editable install from `dev`** as in
15
+ > [Install](#install). The TODO comment above is removed after **v0.1.0**
16
+ > ships to PyPI and the install block switches to `pip install`.
17
+
18
+ **One roadmap for the whole team**—so product, engineering, and coding agents share the same plan.
19
+
20
+ ## What it is
21
+
22
+ **specy-road** is a toolkit for keeping priorities, written specs, and implementation work aligned. It fits teams that use AI-assisted editors (for example Claude or Cursor) together with product-led planning. Your team maintains a **roadmap** in the repository: what matters, in what order, and what depends on what. A small command-line tool checks that the roadmap is consistent, publishes a readable index, and can build **briefs**—focused packets of context for a single task—so nobody has to reread the entire project to know what to do next.
23
+
24
+ ### Who it’s for
25
+
26
+ - **Product managers and delivery leads** — A single place for direction, sequencing, and visibility into what is active or blocked.
27
+ - **Developers and coding agents** — Task-sized context, shared contracts, and clear ownership areas so work stays parallel without stepping on the same files.
28
+
29
+ ## Why teams use it
30
+
31
+ - **Single source of truth** — Less drift between tickets, docs, and “what we agreed.” The roadmap and planning sheets stay tied together; cross-cutting rules live in `shared/` where they belong.
32
+ - **Right-sized context** — `specy-road brief` pulls the relevant planning sheets and contracts for one roadmap item instead of the whole repository story.
33
+ - **Safer parallel work** — Stable IDs, **touch zones**, and `roadmap/registry.yaml` show who is working on what before files collide.
34
+ - **Your tools, your workflow** — The kit is about roadmaps and specs, not a particular IDE or agent ritual. See [docs/philosophy-and-scope.md](docs/philosophy-and-scope.md).
35
+
36
+ ## Getting started
37
+
38
+ Install the CLI (**Python 3.11+**) and **git**, then follow **[Install](#install)** and **[docs/install-and-usage.md](docs/install-and-usage.md)** for cloning, editable install, and **`specy-road init project`** in an application repo. After that, everyday use boils down to:
39
+
40
+ ### For PMs
41
+
42
+ 1. Prefer **`specy-road gui`** for the dashboard, or edit `roadmap/` and `planning/` directly ([docs/pm-gui.md](docs/pm-gui.md)).
43
+ 2. Run **`specy-road export`** and **`specy-road validate`** before you commit.
44
+
45
+ More detail: [docs/pm-workflow.md](docs/pm-workflow.md). Optional **LLM Review** in the Gantt UI: [docs/pm-llm-review.md](docs/pm-llm-review.md).
46
+
47
+ ### For developers
48
+
49
+ 1. Pick up work with **`specy-road do-next-available-task`**, or **`specy-road brief <NODE_ID>`** for a specific node ([docs/dev-workflow.md](docs/dev-workflow.md)).
50
+ 2. Finish with **`specy-road finish-this-task`**, then land changes with your team’s PR process ([docs/git-workflow.md](docs/git-workflow.md)).
51
+
52
+ ## Install
53
+
54
+ Requires **Python 3.11+** and **git** (with a configured remote — `origin` by default).
55
+
56
+ > **Stable PyPI pending.** Install from source on the `dev` branch (below). The
57
+ > end-user guide is **[docs/install-and-usage.md](docs/install-and-usage.md)**;
58
+ > prerelease/TestPyPI details live in **[docs/contributor-guide.md](docs/contributor-guide.md)**.
59
+
60
+ ```bash
61
+ git clone https://github.com/shanevigil/specy-road.git
62
+ cd specy-road
63
+ git switch dev # main is reserved for tagged releases
64
+ python3 -m venv .venv
65
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
66
+ pip install -e ".[dev,gui-next]" # add ',review' for optional review-node
67
+ ```
68
+
69
+ Consumer **`init project`**, `roadmap/git-workflow.yaml`, optional **`specyrd`** stubs, and bootstrap prompts are covered in **[docs/install-and-usage.md](docs/install-and-usage.md)**. Toolkit contributors (tests, pre-commit, releases): **[docs/contributor-guide.md](docs/contributor-guide.md)**.
70
+
71
+ ## More on how to work with it
72
+
73
+ Typical path in an **application** repository after `specy-road init project`: roadmap and planning for direction and detail; validation, export, and briefs for engineering and agents; registry and branches for safe parallel work. Maintainers working on **this** toolkit follow [AGENTS.md](AGENTS.md), [docs/toolkit-development.md](docs/toolkit-development.md), and [docs/contributor-guide.md](docs/contributor-guide.md).
74
+
75
+ 1. **Bootstrap** — `specy-road init project` (once per repo) creates `constitution/`, `roadmap/`, `shared/`, `constraints/`, `schemas/`, `planning/`, `work/`, and `AGENTS.md`.
76
+ 2. **Author** — Edit JSON chunks under `roadmap/` (listed in `manifest.json`). See [docs/roadmap-authoring.md](docs/roadmap-authoring.md).
77
+ 3. **Validate** — `specy-road validate` (use `--repo-root` if not in the project root).
78
+ 4. **Publish views** — `specy-road export` regenerates `roadmap.md` from the merged graph.
79
+ 5. **Focus a task** — `specy-road brief <NODE_ID> -o work/brief-<NODE_ID>.md`, then implement against `shared/` contracts cited for that node.
80
+ 6. **Branches** — Follow [docs/git-workflow.md](docs/git-workflow.md): register in `roadmap/registry.yaml` on the **integration branch** from `roadmap/git-workflow.yaml`, then `feature/rm-<codename>` (or use `specy-road do-next-available-task`).
81
+ 7. **Optional IDE commands** — `specyrd` installs stubs that invoke the CLI; see [docs/contributor-guide.md#ide-command-stubs-specyrd](docs/contributor-guide.md#ide-command-stubs-specyrd).
82
+
83
+ ## Where to read next
84
+
85
+ | Document | Purpose |
86
+ | -------- | ------- |
87
+ | [docs/install-and-usage.md](docs/install-and-usage.md) | Install from source, `init project`, everyday PM/dev/GUI flows |
88
+ | [docs/contributor-guide.md](docs/contributor-guide.md) | Toolkit contributors: CI parity, pre-commit, releases, `specyrd` |
89
+ | [docs/philosophy-and-scope.md](docs/philosophy-and-scope.md) | What the kit promises and what it leaves to you |
90
+ | [docs/architecture.md](docs/architecture.md) | End-to-end flow: manifest, chunks, validation, briefs |
91
+ | [docs/roadmap-authoring.md](docs/roadmap-authoring.md) | JSON chunks, manifest order, generated `roadmap.md` |
92
+ | [docs/git-workflow.md](docs/git-workflow.md) | Consumer workflow contract (`git-workflow.yaml`), branches, registry, merge-back |
93
+ | [docs/toolkit-development.md](docs/toolkit-development.md) | Short maintainer notes (this repo vs consumer contract) |
94
+ | [docs/optional-ai-tooling-patterns.md](docs/optional-ai-tooling-patterns.md) | Optional patterns (CLAUDE.md, Cursor rules, MCP) for app repos |
95
+ | [suggested_prompts/](suggested_prompts/) | Adoption prompts (clone this repo; not shipped on PyPI) |
96
+ | [AGENTS.md](AGENTS.md) | Short entry for coding agents |
97
+
98
+ ## Related material
99
+
100
+ - [Spec-Kit](https://github.com/github/spec-kit) — inspiration only
101
+ - [docs/optional-ai-tooling-patterns.md](docs/optional-ai-tooling-patterns.md) — optional AI tooling ideas for application repositories
102
+
103
+ ## Contributing to this repository
104
+
105
+ To participate in development of the **specy-road** toolkit itself, contact the repository owner. Technical setup: [docs/contributor-guide.md](docs/contributor-guide.md).
106
+
107
+ ## License
108
+
109
+ MIT — see [LICENSE](LICENSE).
@@ -0,0 +1,64 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.2"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "specy-road"
7
+ # Canonical version: `specy_road.__version__` prefers this file when the
8
+ # package lives under this repo; else importlib.metadata; else `0.0.0+unknown`.
9
+ version = "0.1.0"
10
+ description = "Roadmap-first coordination kit for humans and AI agents"
11
+ readme = "README.md"
12
+ requires-python = ">=3.11"
13
+ license = { text = "MIT" }
14
+ dependencies = [
15
+ "PyYAML>=6.0",
16
+ "jsonschema>=4.20",
17
+ ]
18
+
19
+ [project.optional-dependencies]
20
+ dev = [
21
+ "pytest>=7.0",
22
+ "fastapi>=0.115",
23
+ # Required by starlette.testclient.TestClient (tests/test_gui_app.py); not a transitive install.
24
+ "httpx>=0.27",
25
+ "requests>=2.31",
26
+ ]
27
+ review = [
28
+ "openai>=1.40",
29
+ "anthropic>=0.40",
30
+ ]
31
+ gui = [
32
+ "fastapi>=0.115",
33
+ "uvicorn[standard]>=0.30",
34
+ "requests>=2.31",
35
+ "openai>=1.40",
36
+ "anthropic>=0.40",
37
+ ]
38
+ gui-next = [
39
+ "fastapi>=0.115",
40
+ "uvicorn[standard]>=0.30",
41
+ "requests>=2.31",
42
+ "openai>=1.40",
43
+ "anthropic>=0.40",
44
+ ]
45
+
46
+ [project.scripts]
47
+ specy-road = "specy_road.cli:main"
48
+ specyrd = "specy_road.specyrd_cli:main"
49
+
50
+ [tool.setuptools.packages.find]
51
+ where = ["."]
52
+ include = ["specy_road*"]
53
+
54
+ [tool.setuptools.package-data]
55
+ specy_road = [
56
+ "templates/**/*",
57
+ "templates/project/**/*",
58
+ "pm_gantt_static/**/*",
59
+ "bundled_scripts/*.py",
60
+ ]
61
+
62
+ [tool.pytest.ini_options]
63
+ testpaths = ["tests"]
64
+ pythonpath = [".", "specy_road/bundled_scripts"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,47 @@
1
+ """specy-road package (CLI and shared helpers)."""
2
+
3
+ import tomllib
4
+ from importlib.metadata import PackageNotFoundError, version
5
+ from pathlib import Path
6
+
7
+ _UNKNOWN_VERSION = "0.0.0+unknown"
8
+
9
+
10
+ def _version_from_adjacent_pyproject() -> str | None:
11
+ """If this ``specy_road`` package lives under a repo root, read declared version there.
12
+
13
+ Prefer this over ``importlib.metadata`` when both exist so editable checkouts
14
+ stay aligned with ``pyproject.toml`` even if install metadata was not refreshed.
15
+
16
+ Hardened against malformed input: any I/O error (``OSError``) **or** TOML
17
+ parse error (``tomllib.TOMLDecodeError``, which subclasses ``ValueError``)
18
+ falls through to the next resolution step rather than crashing
19
+ ``import specy_road``.
20
+ """
21
+ repo_root = Path(__file__).resolve().parent.parent
22
+ path = repo_root / "pyproject.toml"
23
+ if not path.is_file():
24
+ return None
25
+ try:
26
+ with path.open("rb") as f:
27
+ data = tomllib.load(f)
28
+ except (OSError, ValueError):
29
+ # ValueError covers tomllib.TOMLDecodeError (PEP 8 / stdlib hierarchy).
30
+ return None
31
+ if not isinstance(data, dict):
32
+ return None
33
+ project = data.get("project")
34
+ if not isinstance(project, dict) or project.get("name") != "specy-road":
35
+ return None
36
+ raw = project.get("version")
37
+ return raw.strip() if isinstance(raw, str) and raw.strip() else None
38
+
39
+
40
+ _pyproject_version = _version_from_adjacent_pyproject()
41
+ if _pyproject_version is not None:
42
+ __version__ = _pyproject_version
43
+ else:
44
+ try:
45
+ __version__ = version("specy-road")
46
+ except PackageNotFoundError:
47
+ __version__ = _UNKNOWN_VERSION