taskledger 0.4.0__tar.gz → 0.4.1__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 (238) hide show
  1. taskledger-0.4.1/.archledger.toml +62 -0
  2. {taskledger-0.4.0 → taskledger-0.4.1}/.taskledger.toml +1 -1
  3. {taskledger-0.4.0 → taskledger-0.4.1}/AGENTS.md +4 -45
  4. {taskledger-0.4.0 → taskledger-0.4.1}/API.md +7 -2
  5. {taskledger-0.4.0 → taskledger-0.4.1}/CHANGELOG.md +32 -1
  6. {taskledger-0.4.0/taskledger.egg-info → taskledger-0.4.1}/PKG-INFO +85 -2
  7. {taskledger-0.4.0 → taskledger-0.4.1}/README.md +84 -1
  8. {taskledger-0.4.0 → taskledger-0.4.1}/docs/command_contract.rst +13 -0
  9. {taskledger-0.4.0 → taskledger-0.4.1}/docs/full_task_cycle.rst +19 -0
  10. {taskledger-0.4.0 → taskledger-0.4.1}/docs/usage.rst +111 -0
  11. {taskledger-0.4.0 → taskledger-0.4.1}/skills/taskledger/SKILL.md +13 -0
  12. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/_version.py +3 -3
  13. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/handoff.py +30 -19
  14. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli.py +15 -3
  15. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_misc.py +26 -1
  16. taskledger-0.4.1/taskledger/cli_pipeline.py +166 -0
  17. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_plan.py +8 -0
  18. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/command_inventory.py +34 -0
  19. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/handoff.py +6 -1
  20. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/sidecars.py +6 -1
  21. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/doctor_checks/task_checks.py +134 -1
  22. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/handoff.py +72 -140
  23. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/navigation.py +55 -0
  24. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/plan_editing.py +2 -0
  25. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/plan_materialization.py +1 -1
  26. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/planning_flow.py +1 -1
  27. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/task_reports.py +2 -0
  28. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/tasks.py +102 -2
  29. taskledger-0.4.1/taskledger/services/worker_context.py +208 -0
  30. taskledger-0.4.1/taskledger/services/worker_pipeline.py +216 -0
  31. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/project_config.py +21 -0
  32. taskledger-0.4.1/taskledger/storage/worker_pipeline_config.py +419 -0
  33. {taskledger-0.4.0 → taskledger-0.4.1/taskledger.egg-info}/PKG-INFO +85 -2
  34. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger.egg-info/SOURCES.txt +11 -0
  35. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_docs_and_skill.py +18 -0
  36. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_doctor.py +79 -0
  37. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_help_subprocess.py +31 -0
  38. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_json_contracts.py +174 -0
  39. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_service_boundaries.py +10 -4
  40. taskledger-0.4.1/tests/test_worker_pipeline_cli.py +556 -0
  41. taskledger-0.4.1/tests/test_worker_pipeline_config.py +279 -0
  42. taskledger-0.4.1/tests/test_worker_pipeline_context.py +210 -0
  43. taskledger-0.4.1/tests/test_worker_pipeline_handoff.py +163 -0
  44. taskledger-0.4.1/tests/test_worker_pipeline_plan_template.py +158 -0
  45. taskledger-0.4.1/tests/test_worker_pipeline_todos.py +241 -0
  46. {taskledger-0.4.0 → taskledger-0.4.1}/.codecrate.toml +0 -0
  47. {taskledger-0.4.0 → taskledger-0.4.1}/.github/workflows/codecov.yml +0 -0
  48. {taskledger-0.4.0 → taskledger-0.4.1}/.github/workflows/pre-commit.yml +0 -0
  49. {taskledger-0.4.0 → taskledger-0.4.1}/.github/workflows/python-publish.yml +0 -0
  50. {taskledger-0.4.0 → taskledger-0.4.1}/.github/workflows/tests.yml +0 -0
  51. {taskledger-0.4.0 → taskledger-0.4.1}/.gitignore +0 -0
  52. {taskledger-0.4.0 → taskledger-0.4.1}/.pre-commit-config.yaml +0 -0
  53. {taskledger-0.4.0 → taskledger-0.4.1}/.readthedocs.yaml +0 -0
  54. {taskledger-0.4.0 → taskledger-0.4.1}/.ruff.toml +0 -0
  55. {taskledger-0.4.0 → taskledger-0.4.1}/LICENSE +0 -0
  56. {taskledger-0.4.0 → taskledger-0.4.1}/Makefile +0 -0
  57. {taskledger-0.4.0 → taskledger-0.4.1}/docs/Makefile +0 -0
  58. {taskledger-0.4.0 → taskledger-0.4.1}/docs/api.rst +0 -0
  59. {taskledger-0.4.0 → taskledger-0.4.1}/docs/architecture_taskledger_split.rst +0 -0
  60. {taskledger-0.4.0 → taskledger-0.4.1}/docs/build.sh +0 -0
  61. {taskledger-0.4.0 → taskledger-0.4.1}/docs/conf.py +0 -0
  62. {taskledger-0.4.0 → taskledger-0.4.1}/docs/index.rst +0 -0
  63. {taskledger-0.4.0 → taskledger-0.4.1}/docs/multi_repo.rst +0 -0
  64. {taskledger-0.4.0 → taskledger-0.4.1}/docs/public_surface.rst +0 -0
  65. {taskledger-0.4.0 → taskledger-0.4.1}/docs/requirements.txt +0 -0
  66. {taskledger-0.4.0 → taskledger-0.4.1}/docs/service_boundary_whitelist.rst +0 -0
  67. {taskledger-0.4.0 → taskledger-0.4.1}/docs/sync.rst +0 -0
  68. {taskledger-0.4.0 → taskledger-0.4.1}/docs/transfer.rst +0 -0
  69. {taskledger-0.4.0 → taskledger-0.4.1}/pyproject.toml +0 -0
  70. {taskledger-0.4.0 → taskledger-0.4.1}/setup.cfg +0 -0
  71. {taskledger-0.4.0 → taskledger-0.4.1}/setup.py +0 -0
  72. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/__init__.py +0 -0
  73. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/__main__.py +0 -0
  74. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/__init__.py +0 -0
  75. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/introductions.py +0 -0
  76. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/locks.py +0 -0
  77. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/plans.py +0 -0
  78. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/project.py +0 -0
  79. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/questions.py +0 -0
  80. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/releases.py +0 -0
  81. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/search.py +0 -0
  82. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/storage.py +0 -0
  83. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/sync.py +0 -0
  84. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/task_runs.py +0 -0
  85. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/tasks.py +0 -0
  86. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_actor.py +0 -0
  87. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_common.py +0 -0
  88. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_implement.py +0 -0
  89. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_ledger.py +0 -0
  90. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_migrate.py +0 -0
  91. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_question.py +0 -0
  92. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_release.py +0 -0
  93. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_report.py +0 -0
  94. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_storage.py +0 -0
  95. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_sync.py +0 -0
  96. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_task.py +0 -0
  97. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_validate.py +0 -0
  98. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/__init__.py +0 -0
  99. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/_model_utils.py +0 -0
  100. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/active_state.py +0 -0
  101. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/actor.py +0 -0
  102. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/change.py +0 -0
  103. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/check.py +0 -0
  104. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/event.py +0 -0
  105. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/lock.py +0 -0
  106. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/models.py +0 -0
  107. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/plan.py +0 -0
  108. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/policies.py +0 -0
  109. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/question.py +0 -0
  110. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/release.py +0 -0
  111. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/run.py +0 -0
  112. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/states.py +0 -0
  113. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/task.py +0 -0
  114. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/errors.py +0 -0
  115. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/exchange.py +0 -0
  116. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/ids.py +0 -0
  117. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/launcher.py +0 -0
  118. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/py.typed +0 -0
  119. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/search.py +0 -0
  120. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/__init__.py +0 -0
  121. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/actors.py +0 -0
  122. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/agent_logging.py +0 -0
  123. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/agent_transcripts.py +0 -0
  124. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/change_tracking.py +0 -0
  125. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/check_tracking.py +0 -0
  126. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/command_runner.py +0 -0
  127. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/dashboard.py +0 -0
  128. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/doctor.py +0 -0
  129. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/doctor_checks/migration_checks.py +0 -0
  130. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/doctor_checks/project_scan.py +0 -0
  131. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/git_sync.py +0 -0
  132. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/handoff_lifecycle.py +0 -0
  133. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/html_reports.py +0 -0
  134. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/implementation_flow.py +0 -0
  135. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/next_action_model.py +0 -0
  136. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/phase5_lock_transfer.py +0 -0
  137. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/plan_hash.py +0 -0
  138. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/plan_lint.py +0 -0
  139. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/plan_review.py +0 -0
  140. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/releases.py +0 -0
  141. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/run_store.py +0 -0
  142. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/serve_read_model.py +0 -0
  143. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/storage_locations.py +0 -0
  144. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/task_archive.py +0 -0
  145. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/task_collections.py +0 -0
  146. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/task_lifecycle.py +0 -0
  147. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/task_queries.py +0 -0
  148. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/task_repair.py +0 -0
  149. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/tree.py +0 -0
  150. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/validation.py +0 -0
  151. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/validation_flow.py +0 -0
  152. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/web_dashboard.py +0 -0
  153. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/workflow_guidance.py +0 -0
  154. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/__init__.py +0 -0
  155. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/agent_logs.py +0 -0
  156. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/atomic.py +0 -0
  157. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/common.py +0 -0
  158. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/events.py +0 -0
  159. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/frontmatter.py +0 -0
  160. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/indexes.py +0 -0
  161. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/init.py +0 -0
  162. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/ledger_config.py +0 -0
  163. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/locks.py +0 -0
  164. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/meta.py +0 -0
  165. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/migrations.py +0 -0
  166. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/paths.py +0 -0
  167. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/project_identity.py +0 -0
  168. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/repos.py +0 -0
  169. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/task_store.py +0 -0
  170. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/templates/__init__.py +0 -0
  171. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/templates/base.html +0 -0
  172. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/templates/error.html +0 -0
  173. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/templates/site_index.html +0 -0
  174. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/templates/task_report.html +0 -0
  175. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/timeutils.py +0 -0
  176. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger.egg-info/dependency_links.txt +0 -0
  177. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger.egg-info/entry_points.txt +0 -0
  178. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger.egg-info/requires.txt +0 -0
  179. {taskledger-0.4.0 → taskledger-0.4.1}/taskledger.egg-info/top_level.txt +0 -0
  180. {taskledger-0.4.0 → taskledger-0.4.1}/tests/__init__.py +0 -0
  181. {taskledger-0.4.0 → taskledger-0.4.1}/tests/conftest.py +0 -0
  182. {taskledger-0.4.0 → taskledger-0.4.1}/tests/support/__init__.py +0 -0
  183. {taskledger-0.4.0 → taskledger-0.4.1}/tests/support/builders.py +0 -0
  184. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_active_task.py +0 -0
  185. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_actor_harness_state.py +0 -0
  186. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_agent_command_logging.py +0 -0
  187. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_agent_session_protocol.py +0 -0
  188. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_atomic_fast_io.py +0 -0
  189. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_cli_command_contract.py +0 -0
  190. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_cli_import_resilience.py +0 -0
  191. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_command_example_linter.py +0 -0
  192. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_command_inventory.py +0 -0
  193. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_compact_mutation_output.py +0 -0
  194. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_delta_remaining_contracts.py +0 -0
  195. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_domain_policies.py +0 -0
  196. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_events.py +0 -0
  197. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_handoff_lifecycle.py +0 -0
  198. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_html_reports.py +0 -0
  199. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_implementation_change_scan.py +0 -0
  200. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_implementation_checks.py +0 -0
  201. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_legacy_cleanup_contracts.py +0 -0
  202. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_lifecycle_policies.py +0 -0
  203. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_locks_audit.py +0 -0
  204. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_models_v1_schema.py +0 -0
  205. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_next_action_expired_lock.py +0 -0
  206. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_no_log_feature.py +0 -0
  207. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_plan_approval_contract.py +0 -0
  208. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_plan_lint.py +0 -0
  209. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_plan_review.py +0 -0
  210. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_plan_revision_workflow.py +0 -0
  211. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_plan_todo_materialization.py +0 -0
  212. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_project_root_config.py +0 -0
  213. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_question_add_many.py +0 -0
  214. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_question_filter_answers.py +0 -0
  215. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_question_plan_regeneration.py +0 -0
  216. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_release_changelog.py +0 -0
  217. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_search.py +0 -0
  218. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_serve_dashboard.py +0 -0
  219. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_services_dashboard.py +0 -0
  220. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_sidecar_collections.py +0 -0
  221. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_storage_bundle_layout.py +0 -0
  222. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_storage_common.py +0 -0
  223. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_storage_init.py +0 -0
  224. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_storage_migration.py +0 -0
  225. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_storage_repos.py +0 -0
  226. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_storage_sync.py +0 -0
  227. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_sync_git.py +0 -0
  228. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_task_archive.py +0 -0
  229. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_task_events.py +0 -0
  230. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_task_report.py +0 -0
  231. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_taskledger_branch_scoped_ledgers.py +0 -0
  232. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_taskledger_cli_api_parity.py +0 -0
  233. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_taskledger_v2_cli.py +0 -0
  234. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_taskledger_v2_exchange.py +0 -0
  235. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_tasks_service_static.py +0 -0
  236. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_todo_implementation_gate.py +0 -0
  237. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_tree_command.py +0 -0
  238. {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_workflow_guidance.py +0 -0
@@ -0,0 +1,62 @@
1
+ # Project-local archledger configuration.
2
+ # This file lives in the source project root.
3
+ config_version = 5
4
+ archledger_dir = "../archledger-state/taskledger"
5
+
6
+ # Stable project identity. Commit this with your source tree.
7
+ project_uuid = "5d87017e-db40-4c72-90c8-5d3753e13f43"
8
+ project_name = "taskledger"
9
+
10
+ [source]
11
+ format = "markdown"
12
+ front_matter = "yaml"
13
+ section_extension = ".md"
14
+ record_extension = ".md"
15
+ schema_version = 2
16
+
17
+ [build]
18
+ default_format = "markdown"
19
+ default_output_dir = "build"
20
+ include_draft = false
21
+ include_superseded = false
22
+ strict = false
23
+ keep_intermediate = false
24
+ converter = "auto"
25
+
26
+ [arc42]
27
+ template_version = "9.0-EN"
28
+ language = "en"
29
+ title = "Architecture Documentation"
30
+ include_help = false
31
+
32
+ [skill]
33
+ installed = true
34
+ path = "skills/archledger/SKILL.md"
35
+
36
+ [tracking]
37
+ enabled = true
38
+ state_file = "source-state.json"
39
+ scanner = "auto"
40
+ include = [
41
+ "**/*.py",
42
+ "**/*.toml",
43
+ "**/*.md",
44
+ "**/*.adoc",
45
+ "**/*.rst",
46
+ "**/*.j2",
47
+ "**/*.yaml",
48
+ "**/*.yml",
49
+ "**/*.json",
50
+ ]
51
+ exclude = [
52
+ ".git/**",
53
+ ".venv/**",
54
+ "**/__pycache__/**",
55
+ ".mypy_cache/**",
56
+ ".pytest_cache/**",
57
+ ".ruff_cache/**",
58
+ "dist/**",
59
+ "build/**",
60
+ ]
61
+ max_file_bytes = 1000000
62
+ hash_algorithm = "sha256"
@@ -9,7 +9,7 @@ project_uuid = "081c7c05-2d10-42b7-9b37-3d814c2f400a"
9
9
  # Taskledger branch-scoped state. This block is intentionally safe to commit.
10
10
  ledger_ref = "main"
11
11
  ledger_parent_ref = ""
12
- ledger_next_task_number = 87
12
+ ledger_next_task_number = 90
13
13
  ledger_branch_guard = "off"
14
14
 
15
15
  [prompt_profiles.planning]
@@ -356,10 +356,7 @@ Docs, examples, command inventory, and skill files must agree.
356
356
  When changing commands or workflow behavior, update as needed:
357
357
 
358
358
  - `README.md`
359
- - `docs/command_contract.rst`
360
- - `docs/full_task_cycle.rst`
361
- - `docs/usage.rst`
362
- - `docs/public_surface.rst`
359
+ - rst files in `docs/`
363
360
  - `API.md`
364
361
  - `skills/taskledger/SKILL.md`
365
362
  - `taskledger/command_inventory.py`
@@ -375,23 +372,7 @@ Do not package skills inside `taskledger/`.
375
372
 
376
373
  Every non-trivial behavior change needs verification.
377
374
 
378
- Prefer the test closest to the changed logic:
379
-
380
- - policy/gate change -> `tests/test_domain_policies.py` or lifecycle tests
381
- - task lifecycle change -> `tests/test_taskledger_v2_cli.py`, `tests/test_delta_remaining_contracts.py`, or service tests
382
- - active-task behavior -> `tests/test_active_task.py`
383
- - CLI grammar -> `tests/test_cli_command_contract.py`, `tests/test_taskledger_cli_api_parity.py`
384
- - JSON envelope -> `tests/test_json_contracts.py`
385
- - docs/skill command examples -> `tests/test_docs_and_skill.py`, `tests/test_command_example_linter.py`
386
- - plan approval -> `tests/test_plan_approval_contract.py`
387
- - plan todos -> `tests/test_plan_todo_materialization.py`
388
- - questions/regeneration -> `tests/test_question_filter_answers.py`, `tests/test_question_plan_regeneration.py`
389
- - todo gates -> `tests/test_todo_implementation_gate.py`
390
- - locks -> `tests/test_locks_audit.py`, doctor tests
391
- - storage -> `tests/test_storage_*.py`, `tests/test_storage_bundle_layout.py`, `tests/test_sidecar_collections.py`
392
- - handoff -> `tests/test_handoff_lifecycle.py`
393
- - search -> `tests/test_search.py`
394
- - export/import -> `tests/test_taskledger_v2_exchange.py`
375
+ Prefer the test closest to the changed logic.
395
376
 
396
377
  ### 12.2 Regression paths to test
397
378
 
@@ -416,33 +397,11 @@ Include error paths when relevant:
416
397
 
417
398
  ### 12.3 Verification command progression
418
399
 
419
- Start narrow. Expand only when needed.
400
+ Start narrow. Expand only when needed. Try to run specific test files first,
401
+ only one example for a single pytest is given, figure it out which test to run.
420
402
 
421
403
  ```bash
422
- python -m pip install -e .
423
- python -m pip install -e ".[dev]"
424
-
425
404
  pytest tests/test_domain_policies.py
426
- pytest tests/test_active_task.py
427
- pytest tests/test_taskledger_v2_cli.py
428
- pytest tests/test_delta_remaining_contracts.py
429
- pytest tests/test_plan_approval_contract.py
430
- pytest tests/test_plan_todo_materialization.py
431
- pytest tests/test_question_filter_answers.py
432
- pytest tests/test_question_plan_regeneration.py
433
- pytest tests/test_todo_implementation_gate.py
434
- pytest tests/test_locks_audit.py
435
- pytest tests/test_handoff_lifecycle.py
436
- pytest tests/test_json_contracts.py
437
- pytest tests/test_docs_and_skill.py
438
- pytest tests/test_command_example_linter.py
439
- pytest tests/test_storage_bundle_layout.py
440
- pytest tests/test_storage_common.py
441
- pytest tests/test_storage_contexts.py
442
- pytest tests/test_storage_items.py
443
- pytest tests/test_storage_memories.py
444
- pytest tests/test_storage_repos.py
445
- pytest tests/test_storage_validation.py
446
405
  pytest
447
406
 
448
407
  ruff check --config=.ruff.toml .
@@ -198,6 +198,7 @@ render_handoff(
198
198
  *,
199
199
  mode: str | None = None,
200
200
  context_for: str | None = None,
201
+ worker_step_id: str | None = None,
201
202
  scope: str | None = None,
202
203
  todo_id: str | None = None,
203
204
  focus_run_id: str | None = None,
@@ -208,8 +209,9 @@ create_handoff(
208
209
  workspace_root: Path,
209
210
  task_ref: str,
210
211
  *,
211
- mode: str,
212
+ mode: str | None = None,
212
213
  context_for: str | None = None,
214
+ worker_step_id: str | None = None,
213
215
  scope: str | None = None,
214
216
  todo_id: str | None = None,
215
217
  focus_run_id: str | None = None,
@@ -225,7 +227,10 @@ create_handoff(
225
227
 
226
228
  Focused handoffs store the generated Markdown context snapshot in the handoff
227
229
  record body and return compact metadata, including `context_hash` and
228
- `context_path`.
230
+ `context_path`. When `worker_step_id` is supplied, taskledger derives the
231
+ handoff mode and context from the configured worker step, persists
232
+ `worker_step_id` in the handoff record, and includes the resolved worker-step
233
+ details in JSON context payloads.
229
234
 
230
235
  ### `taskledger.api.releases`
231
236
 
@@ -1,6 +1,37 @@
1
1
  # Changelog
2
2
 
3
- ## v0.4.0 - 2026-05-18
3
+ ## v0.4.1 - 2026-05-22
4
+
5
+ ### Added
6
+
7
+ - Added optional configurable worker pipeline overlay: opt-in `[worker_pipeline]` project config, read-only `pipeline show`, `pipeline list`, and `pipeline next` commands, worker-aware `context --worker` and `handoff create --worker` support, and worker-tagged plan todos with materialization and template hints.
8
+ - Added guided worker-pipeline next-action metadata and command hints in `next-action` output for `guided` mode projects.
9
+ - Added worker-pipeline config extraction into `taskledger/storage/worker_pipeline_config.py` and worker-only context rendering into `taskledger/services/worker_context.py`.
10
+ - Added doctor warning diagnostics for stale worker-step todo and handoff references.
11
+ - Added shell completion support: root Typer app now enables completion options, with `--install-completion` and `--show-completion` available.
12
+
13
+ ### Changed
14
+
15
+ - Worker handoff defaults now derive from configured pipeline steps when `--worker` is specified.
16
+ - Worker step metadata is rendered in task reports when present.
17
+ - Review-stage worker routing advances from closed worker handoffs.
18
+ - Plan template and todo parsing preserve `worker_step` metadata across export, regeneration, and materialization.
19
+ - Updated service boundary whitelists for worker-pipeline and doctor scan import sites.
20
+
21
+ ### Documentation
22
+
23
+ - Documented worker pipeline configuration, commands, guided workflow, and config fields in README, `docs/usage.rst`, `docs/full_task_cycle.rst`, and `docs/command_contract.rst`.
24
+ - Updated `skills/taskledger/SKILL.md` with optional worker pipeline protocol guidance and guided next-action hints.
25
+ - Updated `API.md` for public handoff API signatures with `worker_step_id`.
26
+ - Added shell completion install and show command documentation in README and `docs/usage.rst`.
27
+
28
+ ### Quality
29
+
30
+ - Added regression test modules for worker pipeline config, CLI commands, worker context, worker handoffs, worker todo materialization, guided next-action, and doctor warnings.
31
+ - Expanded command inventory, JSON contract, docs/skill, and service boundary tests for the new surface.
32
+ - Full suite: ruff and mypy clean.
33
+
34
+ ## v0.4.0 - 2026-05-19
4
35
 
5
36
  ### Added
6
37
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taskledger
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: Durable project-state storage and CLI for coding workflows
5
5
  Author: Taskledger Contributors
6
6
  Maintainer: Holger Nahrstaedt
@@ -73,7 +73,7 @@ The supported command surface is organized as:
73
73
 
74
74
  **Operations:**
75
75
 
76
- - `context`, `next-action`, `can`, `search`, `grep`, `symbols`, `deps`, `actor`, `view`, `serve`, `storage`, `sync`
76
+ - `context`, `pipeline`, `next-action`, `can`, `search`, `grep`, `symbols`, `deps`, `actor`, `view`, `serve`, `storage`, `sync`
77
77
 
78
78
  **Repair and inspection:**
79
79
 
@@ -130,6 +130,73 @@ This guidance is advisory and cannot override lifecycle gates, user approval,
130
130
  validation requirements, lock rules, or higher-priority harness instructions.
131
131
  See `docs/usage.rst` for the full key reference and workflow details.
132
132
 
133
+ ## Optional worker pipelines
134
+
135
+ Projects may optionally configure worker pipelines in `taskledger.toml` to guide
136
+ fresh-context handoffs. Worker pipelines are advisory overlays on the existing
137
+ planning, implementation, and validation lifecycle. They can be three steps,
138
+ four steps, five steps, or custom. When no worker pipeline is configured, the
139
+ default taskledger behavior is unchanged.
140
+
141
+ ```toml
142
+ [worker_pipeline]
143
+ enabled = true
144
+ name = "tdd-four-context"
145
+ mode = "guided"
146
+
147
+ [[worker_pipeline.steps]]
148
+ id = "planner"
149
+ lifecycle_stage = "planning"
150
+ base_context = "planner"
151
+
152
+ [[worker_pipeline.steps]]
153
+ id = "tester"
154
+ label = "Test Writer"
155
+ lifecycle_stage = "implementation"
156
+ base_context = "implementer"
157
+ actor_role = "implementer"
158
+ kind = "check"
159
+ description = "Add or update failing tests before code changes."
160
+ required_output = ["New or updated failing tests with a short summary."]
161
+ must_not = ["Do not change production code in this step."]
162
+ todo_tag = "tests"
163
+ test_command_policy = "may_fail"
164
+
165
+ [[worker_pipeline.steps]]
166
+ id = "coder"
167
+ lifecycle_stage = "implementation"
168
+ base_context = "implementer"
169
+ kind = "todo"
170
+ description = "Implement the approved change and make the tests pass."
171
+ required_output = ["Code changes plus passing targeted checks."]
172
+ must_not = ["Do not skip required validation evidence."]
173
+ todo_tag = "implementation"
174
+ test_command_policy = "must_pass"
175
+
176
+ [[worker_pipeline.steps]]
177
+ id = "reviewer"
178
+ lifecycle_stage = "review"
179
+ base_context = "code-reviewer"
180
+ kind = "review"
181
+ ```
182
+
183
+ Supported top-level keys are `enabled`, `name`, `mode`, and `steps`. Supported
184
+ step keys are `id`, `label`, `lifecycle_stage`, `base_context`, `actor_role`,
185
+ `kind`, `description`, `required_output`, `must_not`, `todo_tag`, and
186
+ `test_command_policy`. `mode = "guided"` does not add lifecycle gates; it adds
187
+ worker-step hints to `taskledger next-action`, including the pending step id plus
188
+ ready-to-run worker context and handoff commands.
189
+
190
+ ```bash
191
+ taskledger pipeline show
192
+ taskledger pipeline next
193
+ taskledger next-action
194
+ taskledger context --worker tester
195
+ taskledger pipeline context tester
196
+ taskledger handoff create --worker tester --summary "Add failing tests only."
197
+ taskledger plan template --with-worker-pipeline --file ./plan.md
198
+ ```
199
+
133
200
  ## Install
134
201
 
135
202
  ```bash
@@ -137,6 +204,22 @@ python -m pip install -e .
137
204
  python -m pip install -e ".[dev]"
138
205
  ```
139
206
 
207
+ ### Shell completion
208
+
209
+ After installing `taskledger`, install completion for your current shell:
210
+
211
+ ```bash
212
+ taskledger --install-completion
213
+ ```
214
+
215
+ To inspect the generated completion script instead of installing it:
216
+
217
+ ```bash
218
+ taskledger --show-completion
219
+ ```
220
+
221
+ Restart your shell session after installation.
222
+
140
223
  ## Quick start
141
224
 
142
225
  Initialize durable state in the current workspace:
@@ -29,7 +29,7 @@ The supported command surface is organized as:
29
29
 
30
30
  **Operations:**
31
31
 
32
- - `context`, `next-action`, `can`, `search`, `grep`, `symbols`, `deps`, `actor`, `view`, `serve`, `storage`, `sync`
32
+ - `context`, `pipeline`, `next-action`, `can`, `search`, `grep`, `symbols`, `deps`, `actor`, `view`, `serve`, `storage`, `sync`
33
33
 
34
34
  **Repair and inspection:**
35
35
 
@@ -86,6 +86,73 @@ This guidance is advisory and cannot override lifecycle gates, user approval,
86
86
  validation requirements, lock rules, or higher-priority harness instructions.
87
87
  See `docs/usage.rst` for the full key reference and workflow details.
88
88
 
89
+ ## Optional worker pipelines
90
+
91
+ Projects may optionally configure worker pipelines in `taskledger.toml` to guide
92
+ fresh-context handoffs. Worker pipelines are advisory overlays on the existing
93
+ planning, implementation, and validation lifecycle. They can be three steps,
94
+ four steps, five steps, or custom. When no worker pipeline is configured, the
95
+ default taskledger behavior is unchanged.
96
+
97
+ ```toml
98
+ [worker_pipeline]
99
+ enabled = true
100
+ name = "tdd-four-context"
101
+ mode = "guided"
102
+
103
+ [[worker_pipeline.steps]]
104
+ id = "planner"
105
+ lifecycle_stage = "planning"
106
+ base_context = "planner"
107
+
108
+ [[worker_pipeline.steps]]
109
+ id = "tester"
110
+ label = "Test Writer"
111
+ lifecycle_stage = "implementation"
112
+ base_context = "implementer"
113
+ actor_role = "implementer"
114
+ kind = "check"
115
+ description = "Add or update failing tests before code changes."
116
+ required_output = ["New or updated failing tests with a short summary."]
117
+ must_not = ["Do not change production code in this step."]
118
+ todo_tag = "tests"
119
+ test_command_policy = "may_fail"
120
+
121
+ [[worker_pipeline.steps]]
122
+ id = "coder"
123
+ lifecycle_stage = "implementation"
124
+ base_context = "implementer"
125
+ kind = "todo"
126
+ description = "Implement the approved change and make the tests pass."
127
+ required_output = ["Code changes plus passing targeted checks."]
128
+ must_not = ["Do not skip required validation evidence."]
129
+ todo_tag = "implementation"
130
+ test_command_policy = "must_pass"
131
+
132
+ [[worker_pipeline.steps]]
133
+ id = "reviewer"
134
+ lifecycle_stage = "review"
135
+ base_context = "code-reviewer"
136
+ kind = "review"
137
+ ```
138
+
139
+ Supported top-level keys are `enabled`, `name`, `mode`, and `steps`. Supported
140
+ step keys are `id`, `label`, `lifecycle_stage`, `base_context`, `actor_role`,
141
+ `kind`, `description`, `required_output`, `must_not`, `todo_tag`, and
142
+ `test_command_policy`. `mode = "guided"` does not add lifecycle gates; it adds
143
+ worker-step hints to `taskledger next-action`, including the pending step id plus
144
+ ready-to-run worker context and handoff commands.
145
+
146
+ ```bash
147
+ taskledger pipeline show
148
+ taskledger pipeline next
149
+ taskledger next-action
150
+ taskledger context --worker tester
151
+ taskledger pipeline context tester
152
+ taskledger handoff create --worker tester --summary "Add failing tests only."
153
+ taskledger plan template --with-worker-pipeline --file ./plan.md
154
+ ```
155
+
89
156
  ## Install
90
157
 
91
158
  ```bash
@@ -93,6 +160,22 @@ python -m pip install -e .
93
160
  python -m pip install -e ".[dev]"
94
161
  ```
95
162
 
163
+ ### Shell completion
164
+
165
+ After installing `taskledger`, install completion for your current shell:
166
+
167
+ ```bash
168
+ taskledger --install-completion
169
+ ```
170
+
171
+ To inspect the generated completion script instead of installing it:
172
+
173
+ ```bash
174
+ taskledger --show-completion
175
+ ```
176
+
177
+ Restart your shell session after installation.
178
+
96
179
  ## Quick start
97
180
 
98
181
  Initialize durable state in the current workspace:
@@ -276,6 +276,9 @@ Human output should stay concise but actionable:
276
276
  todo-work: Implementation is in progress; 1 todos remain.
277
277
  Next todo: todo-0001 -- Update next-action JSON payload.
278
278
  Command: taskledger todo show todo-0001
279
+ Worker step: tester
280
+ Worker context: taskledger pipeline context tester
281
+ Worker handoff: taskledger handoff create --worker tester --summary "..."
279
282
  Mark todo done after evidence exists: taskledger todo done todo-0001 --evidence "..."
280
283
  Progress: 0/1 todos done
281
284
 
@@ -295,6 +298,9 @@ and may also include:
295
298
  * ``next_item`` for the concrete target
296
299
  * ``commands`` for ordered command hints with one primary command
297
300
  * ``progress`` for question, todo, or validation queues
301
+ * ``worker_pipeline`` when an enabled ``guided`` worker pipeline has a pending
302
+ step; this object includes ``enabled``, ``mode``, ``next_step``,
303
+ ``context_command``, and ``handoff_command``
298
304
  * ``template_command`` plus ``required_plan_fields`` and
299
305
  ``recommended_plan_fields`` when the next step is regenerating a plan from
300
306
  answered questions
@@ -431,6 +437,8 @@ Focused worker contexts keep lifecycle ``mode`` separate from worker-role
431
437
 
432
438
  taskledger context --for planner|implementer|validator|spec-reviewer|code-reviewer|reviewer|full [--scope task|todo|run] [--todo TODO_ID] [--run RUN_ID] [--format markdown|json|text] [--task TASK_REF]
433
439
  taskledger handoff create --mode planning|implementation|validation|review|full [--for planner|implementer|validator|spec-reviewer|code-reviewer|reviewer|full] [--scope task|todo|run] [--todo TODO_ID] [--run RUN_ID] [--task TASK_REF]
440
+ taskledger handoff create --worker STEP_ID [--scope task|todo|run] [--todo TODO_ID] [--run RUN_ID] [--task TASK_REF]
441
+ taskledger pipeline context STEP_ID [--scope task|todo|run] [--todo TODO_ID] [--run RUN_ID] [--format markdown|json|text] [--task TASK_REF]
434
442
  taskledger handoff show HANDOFF_ID --format text|markdown|json [--task TASK_REF]
435
443
 
436
444
  Rules:
@@ -441,6 +449,11 @@ Rules:
441
449
  * ``--scope run`` requires ``--run``.
442
450
  * ``--for implementation|validation|planning|review|full`` remain accepted as
443
451
  compatibility aliases.
452
+ * ``handoff create --worker`` derives mode and context from the configured
453
+ worker step and stores ``worker_step_id`` in the handoff record.
454
+ * ``pipeline context STEP_ID`` is equivalent to ``context --worker STEP_ID``.
455
+ * ``spec-reviewer`` and ``code-reviewer`` worker contexts require ``--run`` or
456
+ explicit ``--scope task`` when they are not bound to a validation/review run.
444
457
  * ``handoff show --format markdown`` prints the stored snapshot body.
445
458
 
446
459
  Removed Pre-Release Aliases
@@ -149,6 +149,25 @@ may also materialize structured plan todos:
149
149
  Mandatory todos gate implementation completion. Optional todos remain visible but
150
150
  do not block ``implement finish``.
151
151
 
152
+ If the project has an enabled worker pipeline, plan todos may optionally target
153
+ configured worker steps. This is an advisory overlay, not a new lifecycle stage:
154
+
155
+ .. code-block:: yaml
156
+
157
+ todos:
158
+ - id: plan-todo-0001
159
+ text: "Add failing regression tests."
160
+ worker_step: "tester"
161
+ validation_hint: "pytest tests/test_parser.py -q"
162
+
163
+ Use the worker overlay explicitly:
164
+
165
+ .. code-block:: bash
166
+
167
+ taskledger pipeline next
168
+ taskledger context --worker tester
169
+ taskledger handoff create --worker tester --summary "Add failing tests only."
170
+
152
171
  All approval escape hatches require ``--reason``:
153
172
 
154
173
  - ``--allow-empty-criteria --reason "..."``
@@ -9,6 +9,23 @@ Installation
9
9
  python -m pip install -e .
10
10
  python -m pip install -e ".[dev]"
11
11
 
12
+ Shell completion
13
+ ----------------
14
+
15
+ After installing ``taskledger``, install completion for the current shell:
16
+
17
+ .. code-block:: bash
18
+
19
+ taskledger --install-completion
20
+
21
+ To print the generated completion script without installing it:
22
+
23
+ .. code-block:: bash
24
+
25
+ taskledger --show-completion
26
+
27
+ Restart your shell session after installation.
28
+
12
29
  Agent workflows work best when the ``taskledger`` skill is installed in the
13
30
  coding harness. The CLI uses a task-first lifecycle with explicit planning,
14
31
  approval, implementation, validation, locks, and handoff gates; without the
@@ -139,6 +156,100 @@ enforce plan fields by itself. It cannot override lifecycle gates, plan approval
139
156
  validation requirements, lock rules, required user answers, or higher-priority
140
157
  harness instructions.
141
158
 
159
+ Optional worker pipelines
160
+ -------------------------
161
+
162
+ Projects may optionally configure worker pipelines in ``taskledger.toml`` to
163
+ guide fresh-context handoffs without changing the underlying task lifecycle.
164
+ Worker pipelines are advisory overlays on the existing planning,
165
+ implementation, and validation lifecycle. They can be three steps, four steps,
166
+ five steps, or custom. When no worker pipeline is configured, taskledger
167
+ behavior is unchanged.
168
+
169
+ Example configuration:
170
+
171
+ .. code-block:: toml
172
+
173
+ [worker_pipeline]
174
+ enabled = true
175
+ name = "api-contract-first"
176
+ mode = "guided"
177
+
178
+ [[worker_pipeline.steps]]
179
+ id = "planner"
180
+ lifecycle_stage = "planning"
181
+ base_context = "planner"
182
+
183
+ [[worker_pipeline.steps]]
184
+ id = "tester"
185
+ label = "Test Writer"
186
+ lifecycle_stage = "implementation"
187
+ base_context = "implementer"
188
+ actor_role = "implementer"
189
+ kind = "check"
190
+ description = "Add or update failing tests before code changes."
191
+ required_output = ["New or updated failing tests with a short summary."]
192
+ must_not = ["Do not change production code in this step."]
193
+ todo_tag = "tests"
194
+ test_command_policy = "may_fail"
195
+
196
+ [[worker_pipeline.steps]]
197
+ id = "coder"
198
+ lifecycle_stage = "implementation"
199
+ base_context = "implementer"
200
+ kind = "todo"
201
+ description = "Implement the approved change and make the tests pass."
202
+ required_output = ["Code changes plus passing targeted checks."]
203
+ must_not = ["Do not skip required validation evidence."]
204
+ todo_tag = "implementation"
205
+ test_command_policy = "must_pass"
206
+
207
+ [[worker_pipeline.steps]]
208
+ id = "domain-reviewer"
209
+ lifecycle_stage = "review"
210
+ base_context = "spec-reviewer"
211
+ kind = "review"
212
+
213
+ Supported top-level keys are ``enabled``, ``name``, ``mode``, and ``steps``.
214
+ Supported step keys are ``id``, ``label``, ``lifecycle_stage``,
215
+ ``base_context``, ``actor_role``, ``kind``, ``description``,
216
+ ``required_output``, ``must_not``, ``todo_tag``, and
217
+ ``test_command_policy``. ``guided`` mode remains advisory: it does not add
218
+ new planning, implementation, or validation gates. Instead it augments
219
+ ``taskledger next-action`` with worker-step metadata plus ready-to-run worker
220
+ context and handoff commands for the pending step.
221
+
222
+ Inspect and use the configured overlay explicitly:
223
+
224
+ .. code-block:: bash
225
+
226
+ taskledger pipeline show
227
+ taskledger pipeline list
228
+ taskledger pipeline next
229
+ taskledger next-action
230
+ taskledger pipeline context tester
231
+ taskledger context --worker tester
232
+ taskledger handoff create --worker tester --summary "Add failing tests only."
233
+ taskledger handoff create --worker domain-reviewer --scope task --summary "Review the implementation."
234
+
235
+ To include worker-step todo hints in a plan template, enable a worker pipeline
236
+ with ``mode = "template"`` or ``mode = "guided"`` and opt in per task:
237
+
238
+ .. code-block:: bash
239
+
240
+ taskledger plan template --with-worker-pipeline --file ./plan.md
241
+
242
+ Use ``worker_step`` only on plan todos for projects that have an enabled worker
243
+ pipeline:
244
+
245
+ .. code-block:: yaml
246
+
247
+ todos:
248
+ - id: plan-todo-0001
249
+ text: "Add failing regression tests."
250
+ worker_step: "tester"
251
+ validation_hint: "pytest -q tests/test_parser.py"
252
+
142
253
  Release tagging and changelog context
143
254
  -------------------------------------
144
255
 
@@ -89,6 +89,18 @@ If any `taskledger ...` command fails with a Python traceback before taskledger
89
89
  `taskledger ledger adopt --from REF TASK_REF` when branch-local task history
90
90
  should be copied into the current ledger.
91
91
 
92
+ ## Optional worker pipeline overlay
93
+
94
+ - Worker pipelines are optional project-local overlays, not mandatory lifecycle stages.
95
+ - No `[worker_pipeline]` config means no workflow change.
96
+ - Use `taskledger pipeline show`, `taskledger pipeline list`, and `taskledger pipeline next` to inspect the configured overlay.
97
+ - Use `taskledger context --worker STEP_ID` or `taskledger pipeline context STEP_ID` to render a worker-specific context on top of the existing base context.
98
+ - Use `taskledger handoff create --worker STEP_ID` to derive handoff mode and context from a configured worker step.
99
+ - In `guided` mode, inspect `taskledger next-action` for `worker_pipeline.next_step`, `context_command`, and `handoff_command` hints. These are advisory only; they do not add new lifecycle gates.
100
+ - Reviewer worker steps (`spec-reviewer`, `code-reviewer`) may require `--scope task` when no focused run is available.
101
+ - Use `taskledger plan template --with-worker-pipeline --file ./plan.md` only when the project has an enabled worker pipeline and the task should use worker-tagged plan todos.
102
+ - `worker_step` on plan todos is valid only when the project has an enabled worker pipeline.
103
+
92
104
  ## Planning protocol
93
105
 
94
106
  1. `taskledger task create "Short task request" --slug <slug>` when creating a fresh task.
@@ -105,6 +117,7 @@ If any `taskledger ...` command fails with a Python traceback before taskledger
105
117
  10. When the user answers in chat, record the answers yourself with `taskledger question answer-many` or `taskledger question answer`.
106
118
  11. Run `taskledger question status` and review all answered questions with `taskledger question answers` before writing the plan.
107
119
  12. Before reading source files to discover plan format, run `taskledger plan template --from-answers --file ./plan.md` when answered questions exist, or `taskledger plan template --file ./plan.md` for a fresh plan skeleton.
120
+ - If the project has an enabled worker pipeline and this task should use worker-tagged todos, add `--with-worker-pipeline`.
108
121
  13. If answered questions exist, write the next plan with `taskledger plan upsert --from-answers --file ./plan.md`.
109
122
  14. Use `taskledger plan upsert --file ./plan.md` for plans that are not based on newly answered questions.
110
123
  15. Never edit `.taskledger/` files directly. Treat `.taskledger/` as Taskledger private durable state.
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.4.0'
22
- __version_tuple__ = version_tuple = (0, 4, 0)
21
+ __version__ = version = '0.4.1'
22
+ __version_tuple__ = version_tuple = (0, 4, 1)
23
23
 
24
- __commit_id__ = commit_id = 'g0b2a991e6'
24
+ __commit_id__ = commit_id = 'gde39c5f9d'