taskledger 0.2.0__tar.gz → 0.3.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 (219) hide show
  1. {taskledger-0.2.0 → taskledger-0.3.0}/.codecrate.toml +1 -1
  2. {taskledger-0.2.0 → taskledger-0.3.0}/.pre-commit-config.yaml +0 -8
  3. taskledger-0.3.0/.taskledger.toml +30 -0
  4. {taskledger-0.2.0 → taskledger-0.3.0}/API.md +19 -0
  5. {taskledger-0.2.0 → taskledger-0.3.0}/CHANGELOG.md +35 -0
  6. {taskledger-0.2.0/taskledger.egg-info → taskledger-0.3.0}/PKG-INFO +88 -2
  7. {taskledger-0.2.0 → taskledger-0.3.0}/README.md +87 -1
  8. {taskledger-0.2.0 → taskledger-0.3.0}/docs/api.rst +17 -0
  9. {taskledger-0.2.0 → taskledger-0.3.0}/docs/command_contract.rst +116 -4
  10. {taskledger-0.2.0 → taskledger-0.3.0}/docs/full_task_cycle.rst +8 -5
  11. {taskledger-0.2.0 → taskledger-0.3.0}/docs/index.rst +1 -0
  12. {taskledger-0.2.0 → taskledger-0.3.0}/docs/public_surface.rst +6 -0
  13. taskledger-0.3.0/docs/transfer.rst +49 -0
  14. {taskledger-0.2.0 → taskledger-0.3.0}/docs/usage.rst +138 -5
  15. {taskledger-0.2.0 → taskledger-0.3.0}/pyproject.toml +2 -0
  16. {taskledger-0.2.0 → taskledger-0.3.0}/skills/taskledger/SKILL.md +78 -25
  17. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/_version.py +3 -3
  18. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/api/plans.py +19 -0
  19. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/api/project.py +41 -2
  20. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/api/tasks.py +6 -0
  21. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/cli.py +474 -11
  22. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/cli_common.py +178 -4
  23. taskledger-0.3.0/taskledger/cli_implement.py +507 -0
  24. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/cli_misc.py +61 -5
  25. taskledger-0.3.0/taskledger/cli_plan.py +711 -0
  26. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/cli_question.py +128 -15
  27. taskledger-0.3.0/taskledger/cli_task.py +886 -0
  28. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/cli_validate.py +5 -0
  29. taskledger-0.3.0/taskledger/command_inventory.py +1176 -0
  30. taskledger-0.3.0/taskledger/domain/_model_utils.py +164 -0
  31. taskledger-0.3.0/taskledger/domain/active_state.py +144 -0
  32. taskledger-0.3.0/taskledger/domain/actor.py +119 -0
  33. taskledger-0.3.0/taskledger/domain/change.py +241 -0
  34. taskledger-0.3.0/taskledger/domain/event.py +69 -0
  35. taskledger-0.3.0/taskledger/domain/handoff.py +168 -0
  36. taskledger-0.3.0/taskledger/domain/lock.py +128 -0
  37. taskledger-0.3.0/taskledger/domain/models.py +69 -0
  38. taskledger-0.3.0/taskledger/domain/plan.py +146 -0
  39. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/domain/policies.py +28 -0
  40. taskledger-0.3.0/taskledger/domain/question.py +103 -0
  41. taskledger-0.3.0/taskledger/domain/release.py +65 -0
  42. taskledger-0.3.0/taskledger/domain/run.py +142 -0
  43. taskledger-0.3.0/taskledger/domain/sidecars.py +468 -0
  44. taskledger-0.3.0/taskledger/domain/task.py +255 -0
  45. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/exchange.py +234 -17
  46. taskledger-0.3.0/taskledger/services/agent_logging.py +620 -0
  47. taskledger-0.3.0/taskledger/services/agent_transcripts.py +540 -0
  48. taskledger-0.3.0/taskledger/services/change_tracking.py +251 -0
  49. taskledger-0.3.0/taskledger/services/doctor.py +309 -0
  50. taskledger-0.3.0/taskledger/services/doctor_checks/migration_checks.py +64 -0
  51. taskledger-0.3.0/taskledger/services/doctor_checks/project_scan.py +122 -0
  52. taskledger-0.3.0/taskledger/services/doctor_checks/task_checks.py +408 -0
  53. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/handoff.py +25 -0
  54. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/implementation_flow.py +83 -6
  55. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/navigation.py +269 -124
  56. taskledger-0.3.0/taskledger/services/next_action_model.py +140 -0
  57. taskledger-0.3.0/taskledger/services/plan_editing.py +114 -0
  58. taskledger-0.3.0/taskledger/services/plan_hash.py +23 -0
  59. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/plan_lint.py +12 -12
  60. taskledger-0.3.0/taskledger/services/plan_materialization.py +305 -0
  61. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/planning_flow.py +205 -7
  62. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/releases.py +2 -0
  63. taskledger-0.3.0/taskledger/services/run_store.py +149 -0
  64. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/serve_read_model.py +9 -47
  65. taskledger-0.3.0/taskledger/services/task_archive.py +205 -0
  66. taskledger-0.3.0/taskledger/services/task_collections.py +498 -0
  67. taskledger-0.3.0/taskledger/services/task_lifecycle.py +940 -0
  68. taskledger-0.3.0/taskledger/services/task_repair.py +246 -0
  69. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/task_reports.py +193 -4
  70. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/tasks.py +430 -1927
  71. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/tree.py +18 -3
  72. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/validation_flow.py +3 -0
  73. taskledger-0.3.0/taskledger/services/web_dashboard.py +529 -0
  74. taskledger-0.3.0/taskledger/services/workflow_guidance.py +162 -0
  75. taskledger-0.3.0/taskledger/storage/agent_logs.py +151 -0
  76. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/init.py +3 -0
  77. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/project_config.py +417 -7
  78. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/project_identity.py +57 -1
  79. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/task_store.py +51 -5
  80. taskledger-0.3.0/taskledger/web_assets/dashboard.css +491 -0
  81. taskledger-0.3.0/taskledger/web_assets/dashboard.js +1407 -0
  82. {taskledger-0.2.0 → taskledger-0.3.0/taskledger.egg-info}/PKG-INFO +88 -2
  83. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger.egg-info/SOURCES.txt +41 -0
  84. taskledger-0.3.0/tests/__init__.py +0 -0
  85. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_active_task.py +36 -0
  86. taskledger-0.3.0/tests/test_agent_command_logging.py +657 -0
  87. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_agent_session_protocol.py +98 -0
  88. taskledger-0.3.0/tests/test_cli_command_contract.py +301 -0
  89. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_command_example_linter.py +1 -0
  90. taskledger-0.3.0/tests/test_command_inventory.py +291 -0
  91. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_delta_remaining_contracts.py +1 -1
  92. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_docs_and_skill.py +54 -0
  93. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_doctor.py +4 -0
  94. taskledger-0.3.0/tests/test_help_subprocess.py +57 -0
  95. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_implementation_change_scan.py +108 -0
  96. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_json_contracts.py +100 -0
  97. taskledger-0.3.0/tests/test_next_action_expired_lock.py +115 -0
  98. taskledger-0.3.0/tests/test_no_log_feature.py +442 -0
  99. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_plan_approval_contract.py +127 -1
  100. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_plan_lint.py +182 -0
  101. taskledger-0.3.0/tests/test_plan_revision_workflow.py +388 -0
  102. taskledger-0.3.0/tests/test_project_root_config.py +537 -0
  103. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_question_filter_answers.py +10 -1
  104. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_question_plan_regeneration.py +223 -1
  105. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_serve_dashboard.py +46 -14
  106. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_service_boundaries.py +119 -49
  107. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_services_dashboard.py +31 -4
  108. taskledger-0.3.0/tests/test_task_archive.py +220 -0
  109. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_task_report.py +65 -0
  110. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_taskledger_cli_api_parity.py +3 -0
  111. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_taskledger_v2_cli.py +135 -0
  112. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_taskledger_v2_exchange.py +583 -0
  113. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_tree_command.py +84 -0
  114. taskledger-0.3.0/tests/test_workflow_guidance.py +111 -0
  115. taskledger-0.2.0/.taskledger.toml +0 -29
  116. taskledger-0.2.0/taskledger/cli_implement.py +0 -462
  117. taskledger-0.2.0/taskledger/cli_plan.py +0 -510
  118. taskledger-0.2.0/taskledger/cli_task.py +0 -603
  119. taskledger-0.2.0/taskledger/command_inventory.py +0 -145
  120. taskledger-0.2.0/taskledger/domain/models.py +0 -1794
  121. taskledger-0.2.0/taskledger/services/doctor.py +0 -668
  122. taskledger-0.2.0/taskledger/services/web_dashboard.py +0 -1742
  123. taskledger-0.2.0/tests/test_cli_command_contract.py +0 -157
  124. taskledger-0.2.0/tests/test_command_inventory.py +0 -78
  125. taskledger-0.2.0/tests/test_project_root_config.py +0 -202
  126. {taskledger-0.2.0 → taskledger-0.3.0}/.github/workflows/codecov.yml +0 -0
  127. {taskledger-0.2.0 → taskledger-0.3.0}/.github/workflows/pre-commit.yml +0 -0
  128. {taskledger-0.2.0 → taskledger-0.3.0}/.github/workflows/python-publish.yml +0 -0
  129. {taskledger-0.2.0 → taskledger-0.3.0}/.github/workflows/tests.yml +0 -0
  130. {taskledger-0.2.0 → taskledger-0.3.0}/.gitignore +0 -0
  131. {taskledger-0.2.0 → taskledger-0.3.0}/.readthedocs.yaml +0 -0
  132. {taskledger-0.2.0 → taskledger-0.3.0}/.ruff.toml +0 -0
  133. {taskledger-0.2.0 → taskledger-0.3.0}/AGENTS.md +0 -0
  134. {taskledger-0.2.0 → taskledger-0.3.0}/LICENSE +0 -0
  135. {taskledger-0.2.0 → taskledger-0.3.0}/Makefile +0 -0
  136. {taskledger-0.2.0 → taskledger-0.3.0}/docs/Makefile +0 -0
  137. {taskledger-0.2.0 → taskledger-0.3.0}/docs/architecture_taskledger_split.rst +0 -0
  138. {taskledger-0.2.0 → taskledger-0.3.0}/docs/build.sh +0 -0
  139. {taskledger-0.2.0 → taskledger-0.3.0}/docs/conf.py +0 -0
  140. {taskledger-0.2.0 → taskledger-0.3.0}/docs/multi_repo.rst +0 -0
  141. {taskledger-0.2.0 → taskledger-0.3.0}/docs/requirements.txt +0 -0
  142. {taskledger-0.2.0 → taskledger-0.3.0}/docs/service_boundary_whitelist.rst +0 -0
  143. {taskledger-0.2.0 → taskledger-0.3.0}/setup.cfg +0 -0
  144. {taskledger-0.2.0 → taskledger-0.3.0}/setup.py +0 -0
  145. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/__init__.py +0 -0
  146. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/__main__.py +0 -0
  147. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/api/__init__.py +0 -0
  148. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/api/handoff.py +0 -0
  149. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/api/introductions.py +0 -0
  150. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/api/locks.py +0 -0
  151. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/api/questions.py +0 -0
  152. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/api/releases.py +0 -0
  153. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/api/search.py +0 -0
  154. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/api/task_runs.py +0 -0
  155. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/cli_actor.py +0 -0
  156. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/cli_ledger.py +0 -0
  157. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/cli_migrate.py +0 -0
  158. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/cli_release.py +0 -0
  159. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/domain/__init__.py +0 -0
  160. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/domain/states.py +0 -0
  161. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/errors.py +0 -0
  162. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/ids.py +0 -0
  163. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/launcher.py +0 -0
  164. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/py.typed +0 -0
  165. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/search.py +0 -0
  166. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/__init__.py +0 -0
  167. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/actors.py +0 -0
  168. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/command_runner.py +0 -0
  169. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/dashboard.py +0 -0
  170. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/handoff_lifecycle.py +0 -0
  171. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/phase5_lock_transfer.py +0 -0
  172. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/task_queries.py +0 -0
  173. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/services/validation.py +0 -0
  174. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/__init__.py +0 -0
  175. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/atomic.py +0 -0
  176. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/common.py +0 -0
  177. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/events.py +0 -0
  178. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/frontmatter.py +0 -0
  179. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/indexes.py +0 -0
  180. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/ledger_config.py +0 -0
  181. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/locks.py +0 -0
  182. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/meta.py +0 -0
  183. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/migrations.py +0 -0
  184. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/paths.py +0 -0
  185. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/storage/repos.py +0 -0
  186. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger/timeutils.py +0 -0
  187. {taskledger-0.2.0/tests → taskledger-0.3.0/taskledger/web_assets}/__init__.py +0 -0
  188. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger.egg-info/dependency_links.txt +0 -0
  189. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger.egg-info/entry_points.txt +0 -0
  190. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger.egg-info/requires.txt +0 -0
  191. {taskledger-0.2.0 → taskledger-0.3.0}/taskledger.egg-info/top_level.txt +0 -0
  192. {taskledger-0.2.0 → taskledger-0.3.0}/tests/conftest.py +0 -0
  193. {taskledger-0.2.0 → taskledger-0.3.0}/tests/support/__init__.py +0 -0
  194. {taskledger-0.2.0 → taskledger-0.3.0}/tests/support/builders.py +0 -0
  195. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_actor_harness_state.py +0 -0
  196. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_atomic_fast_io.py +0 -0
  197. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_cli_import_resilience.py +0 -0
  198. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_compact_mutation_output.py +0 -0
  199. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_domain_policies.py +0 -0
  200. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_events.py +0 -0
  201. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_handoff_lifecycle.py +0 -0
  202. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_legacy_cleanup_contracts.py +0 -0
  203. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_lifecycle_policies.py +0 -0
  204. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_locks_audit.py +0 -0
  205. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_models_v1_schema.py +0 -0
  206. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_plan_todo_materialization.py +0 -0
  207. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_question_add_many.py +0 -0
  208. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_release_changelog.py +0 -0
  209. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_search.py +0 -0
  210. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_sidecar_collections.py +0 -0
  211. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_storage_bundle_layout.py +0 -0
  212. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_storage_common.py +0 -0
  213. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_storage_init.py +0 -0
  214. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_storage_migration.py +0 -0
  215. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_storage_repos.py +0 -0
  216. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_task_events.py +0 -0
  217. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_taskledger_branch_scoped_ledgers.py +0 -0
  218. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_tasks_service_static.py +0 -0
  219. {taskledger-0.2.0 → taskledger-0.3.0}/tests/test_todo_implementation_gate.py +0 -0
@@ -6,7 +6,7 @@ respect_gitignore = true
6
6
  # exclude = ["*/.venv/*", "integration_tests", "examples", "docs"]
7
7
  gitignore_allow = ["taskledger/_version.py"]
8
8
  exclude = ["*/.venv/*", "integration_tests", "todo.md"]
9
- include = ["**/*.py", "**/*.toml", "**/*.rst", "**/*.md", "**/*.typed"]
9
+ include = ["**/*.py", "**/*.toml", "**/*.rst", "**/*.md", "**/*.typed", "**/*.js", "**/*.css"]
10
10
  split_max_chars = 0
11
11
  manifest = false
12
12
  layout = "full"
@@ -64,11 +64,3 @@ repos:
64
64
  args:
65
65
  - --plugin=@prettier/plugin-xml
66
66
  files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$
67
- - repo: https://github.com/pre-commit/mirrors-eslint
68
- rev: v10.2.1
69
- hooks:
70
- - id: eslint
71
- verbose: true
72
- args:
73
- - --color
74
- - --fix
@@ -0,0 +1,30 @@
1
+ # Project-local taskledger configuration.
2
+ # This file lives in the source project root.
3
+ config_version = 2
4
+ taskledger_dir = '.taskledger'
5
+
6
+ # Stable project identity. Commit this with your source tree.
7
+ project_uuid = "081c7c05-2d10-42b7-9b37-3d814c2f400a"
8
+
9
+ # Taskledger branch-scoped state. This block is intentionally safe to commit.
10
+ ledger_ref = "main"
11
+ ledger_parent_ref = ""
12
+ ledger_next_task_number = 81
13
+ ledger_branch_guard = "off"
14
+
15
+ [prompt_profiles.planning]
16
+ profile = "balanced"
17
+ question_policy = "ask_when_missing"
18
+ max_required_questions = 5
19
+ min_acceptance_criteria = 1
20
+ todo_granularity = "implementation_steps"
21
+ require_files = true
22
+ require_test_commands = true
23
+ require_expected_outputs = true
24
+ require_validation_hints = true
25
+ plan_body_detail = "normal"
26
+ required_question_topics = []
27
+ extra_guidance = ""
28
+
29
+ [agent_logging]
30
+ enabled = true
@@ -53,6 +53,8 @@ from taskledger.errors import (
53
53
  - `project_doctor`
54
54
  - `project_export`
55
55
  - `project_import`
56
+ - `project_export_archive`
57
+ - `project_import_archive`
56
58
  - `project_snapshot`
57
59
  - `project_tree`
58
60
 
@@ -71,7 +73,10 @@ from taskledger.errors import (
71
73
  - `cancel_task`
72
74
  - `uncancel_task`
73
75
  - `close_task`
76
+ - `archive_task`
77
+ - `unarchive_task`
74
78
  - `create_follow_up_task`
79
+ - `list_archived_task_summaries`
75
80
  - `add_requirement`
76
81
  - `remove_requirement`
77
82
  - `waive_requirement`
@@ -99,17 +104,31 @@ from taskledger.errors import (
99
104
  - `propose_plan`
100
105
  - `plan_template`
101
106
  - `upsert_plan`
107
+ - `export_plan`
108
+ - `amend_plan`
102
109
  - `regenerate_plan_from_answers`
103
110
  - `materialize_plan_todos`
104
111
  - `list_plan_versions`
105
112
  - `show_plan`
106
113
  - `diff_plan`
107
114
  - `lint_plan`
115
+ - `plan_guidance`
108
116
  - `approve_plan`
109
117
  - `reject_plan`
110
118
  - `revise_plan`
111
119
  - `run_planning_command`
112
120
 
121
+ Planning guidance API example:
122
+
123
+ ```python
124
+ from pathlib import Path
125
+
126
+ from taskledger.api.plans import plan_guidance
127
+
128
+ payload = plan_guidance(Path.cwd(), "task-0001")
129
+ # payload includes: kind, task_id, has_project_guidance, guidance, profile, question_policy
130
+ ```
131
+
113
132
  ### `taskledger.api.questions`
114
133
 
115
134
  - `add_question`
@@ -1,5 +1,40 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.2.0 - 2026-05-03
4
+
5
+ ### Added
6
+
7
+ - Added `taskledger task record` for creating done tasks that represent manually completed work, with change records, evidence, and implementation summaries. Does not acquire locks or activate the task. Recorded tasks are included in release changelogs.
8
+ - Added branch-scoped ledger state with `taskledger ledger` command group (`status`, `list`, `fork`, `switch`, `adopt`, `doctor`). Each git branch can maintain its own isolated task ledger, with `adopt` for copying branch-local task history into the current ledger.
9
+ - Added `taskledger tree` command to render ledger and task structure with follow-up nesting, subtree filtering, release boundaries, and per-ledger release counts in both human and JSON output.
10
+ - Added compressed export/import with a project UUID guard to prevent importing archives into the wrong project, plus archive member-count and manifest/payload size limits for safety.
11
+ - Added `taskledger status --check` to run doctor diagnostics alongside status, keeping the default `status` fast by avoiding full record parsing.
12
+ - Added structured diagnostics to `taskledger doctor` JSON output with task IDs, change IDs, run IDs, types, relative paths, and actionable repair hints.
13
+ - Added explicit `repair` command for existing planning-command change records that were incorrectly persisted as code changes.
14
+ - Added a top-level `Makefile` with a `release-check` automation target (compile, test, lint, type-check, build, twine check).
15
+ - Added AST-based service boundary guardrail tests with explicit whitelists and documented rationale.
16
+
17
+ ### Changed
18
+
19
+ - Split core plan/implement/validate service entrypoints from `tasks.py` into dedicated `planning_flow.py`, `implementation_flow.py`, and `validation_flow.py` modules. `tasks.py` remains a compatibility facade.
20
+ - Decoupled validation service from private task helpers by extracting shared query logic into a new `task_queries` module.
21
+ - Planning commands are now persisted as planning-run evidence (worklog/artifacts/event) instead of creating `CodeChangeRecord` entries.
22
+ - Replaced chmod-dependent storage write failure test with a deterministic synthetic `OSError` monkeypatch.
23
+ - Sped up test suite with test-only fast fsync bypass, command-runner seam, and reduced subprocess-heavy setup.
24
+
25
+ ### Fixed
26
+
27
+ - Fixed import replace so it no longer restores stale locks across machines.
28
+
29
+ ### Documentation
30
+
31
+ - Documented branch-scoped ledger workflow, `task record` usage and warnings, `tree` command, and `make release-check` across README, RST docs, API docs, and the taskledger skill.
32
+ - Added `docs/service_boundary_whitelist.md` documenting temporary module/function boundary whitelist entries and split targets.
33
+
34
+ ### Quality
35
+
36
+ - Expanded regression coverage for branch-scoped ledgers, task record, tree command, compressed export/import, doctor diagnostics, status performance, service boundaries, and planning command persistence. Repo-wide pytest, ruff, and mypy passed.
37
+
3
38
  ## v0.1.2 - 2026-04-30
4
39
 
5
40
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taskledger
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Durable project-state storage and CLI for coding workflows
5
5
  Author: Taskledger Contributors
6
6
  Maintainer: Holger Nahrstaedt
@@ -82,6 +82,53 @@ The supported command surface is organized as:
82
82
 
83
83
  - `init`, `status`, `export`, `import`, `snapshot`, `release`
84
84
 
85
+ ### Which read command to use
86
+
87
+ | Need | Command |
88
+ | -------------------------- | --------------------------------------------------- |
89
+ | Next step | `next-action` |
90
+ | Next implementation item | `todo next` |
91
+ | Active task summary | `task show` |
92
+ | Specific task summary | `task show TASK_REF` or `task show --task TASK_REF` |
93
+ | Project/ledger overview | `status`, `tree` |
94
+ | Human dashboard | `serve` |
95
+ | Reviewable markdown report | `task report` |
96
+ | Fresh worker context | `context` or durable `handoff show` |
97
+ | Command audit | `task transcript` |
98
+
99
+ ## Planning guidance profiles
100
+
101
+ Taskledger supports project-local advisory planning guidance under
102
+ `[prompt_profiles.planning]` in the active project config file (`taskledger.toml`
103
+ or `.taskledger.toml` when legacy config is still present).
104
+
105
+ ```toml
106
+ [prompt_profiles.planning]
107
+ profile = "strict"
108
+ question_policy = "always_before_plan"
109
+ max_required_questions = 3
110
+ min_acceptance_criteria = 2
111
+ todo_granularity = "atomic"
112
+ require_files = true
113
+ require_test_commands = true
114
+ require_expected_outputs = true
115
+ require_validation_hints = true
116
+ plan_body_detail = "detailed"
117
+ required_question_topics = ["scope", "compatibility", "test strategy"]
118
+ extra_guidance = "Every plan must mention docs, tests, and rollback or repair behavior."
119
+ ```
120
+
121
+ Inspect guidance for the active task:
122
+
123
+ ```bash
124
+ taskledger plan guidance
125
+ taskledger --json plan guidance
126
+ ```
127
+
128
+ This guidance is advisory and cannot override lifecycle gates, user approval,
129
+ validation requirements, lock rules, or higher-priority harness instructions.
130
+ See `docs/usage.rst` for the full key reference and workflow details.
131
+
85
132
  ## Install
86
133
 
87
134
  ```bash
@@ -137,6 +184,16 @@ taskledger validate check --criterion ac-0001 --status pass --evidence "pytest -
137
184
  taskledger validate finish --result passed --summary "Validated the rewrite."
138
185
  ```
139
186
 
187
+ To revise a proposed plan, re-enter planning and edit an exported workspace
188
+ copy. Never edit `.taskledger/` files directly:
189
+
190
+ ```bash
191
+ taskledger plan revise
192
+ taskledger plan export --version latest --file ./plan.md
193
+ # edit ./plan.md
194
+ taskledger plan upsert --file ./plan.md
195
+ ```
196
+
140
197
  For manually completed work (e.g., manual testing, operations tasks, or work
141
198
  completed outside the task-first lifecycle), use `task record` to create a
142
199
  done task directly without acquiring lifecycle locks. **Note**: `task record`
@@ -148,6 +205,17 @@ taskledger task record "Deploy to production" --summary "Deployed v0.4.1 to prod
148
205
  taskledger task record "Manual API testing" --summary "Tested new endpoints" --allow-empty-record --reason "Exploratory testing, no formal changes tracked"
149
206
  ```
150
207
 
208
+ Archive is a visibility operation: it hides tasks from default list/tree/dashboard
209
+ views without deleting history. Task ids stay monotonic and are never reused.
210
+ Slugs can be reused after archive.
211
+
212
+ ```bash
213
+ taskledger task archive task-0030 --reason "Hide historical task"
214
+ taskledger task list --archived
215
+ taskledger task unarchive task-0030 --reason "Need to continue work" --slug task-0030-reopened
216
+ taskledger tree --include-archived
217
+ ```
218
+
151
219
  If validation finds an implementation bug, keep the accepted plan and restart
152
220
  implementation explicitly:
153
221
 
@@ -340,6 +408,7 @@ Use `--json` for machine-readable payloads:
340
408
  taskledger --json status --full
341
409
  taskledger --json task active
342
410
  taskledger --json task show
411
+ taskledger --json task show task-0001
343
412
  taskledger --json context --for validation --format json
344
413
  ```
345
414
 
@@ -441,11 +510,28 @@ for task-first handoff guidance.
441
510
  ## Export, import, and snapshots
442
511
 
443
512
  ```bash
444
- taskledger export ./taskledger-transfer.tar.gz
513
+ taskledger init --project-name "Taskledger"
514
+ taskledger export
515
+ taskledger import ./taskledger-transfer.tar.gz --dry-run
445
516
  taskledger import ./taskledger-transfer.tar.gz --replace
446
517
  taskledger snapshot ./artifacts
447
518
  ```
448
519
 
520
+ Default export filenames use this policy:
521
+
522
+ ```text
523
+ taskledger-export-{project_slug}-{ledger_ref}-{timestamp}.tar.gz
524
+ ```
525
+
526
+ `project_slug` is derived from `project_name` in `taskledger.toml`. If
527
+ `project_name` is missing, taskledger falls back to the workspace directory name.
528
+ Import safety still relies on `project_uuid`, not the name/slug.
529
+
530
+ `--include-bodies` and `--include-run-artifacts` now change archive content:
531
+
532
+ - `--no-include-bodies` strips record body text (`body` / `context_body`) from exported payloads.
533
+ - `--include-run-artifacts` embeds task and agent-log artifact files under `artifacts/` in the archive.
534
+
449
535
  Cross-machine imports preserve durable task/run data, but imported runtime locks
450
536
  are quarantined by default. After importing an in-progress implementation,
451
537
  run:
@@ -39,6 +39,53 @@ The supported command surface is organized as:
39
39
 
40
40
  - `init`, `status`, `export`, `import`, `snapshot`, `release`
41
41
 
42
+ ### Which read command to use
43
+
44
+ | Need | Command |
45
+ | -------------------------- | --------------------------------------------------- |
46
+ | Next step | `next-action` |
47
+ | Next implementation item | `todo next` |
48
+ | Active task summary | `task show` |
49
+ | Specific task summary | `task show TASK_REF` or `task show --task TASK_REF` |
50
+ | Project/ledger overview | `status`, `tree` |
51
+ | Human dashboard | `serve` |
52
+ | Reviewable markdown report | `task report` |
53
+ | Fresh worker context | `context` or durable `handoff show` |
54
+ | Command audit | `task transcript` |
55
+
56
+ ## Planning guidance profiles
57
+
58
+ Taskledger supports project-local advisory planning guidance under
59
+ `[prompt_profiles.planning]` in the active project config file (`taskledger.toml`
60
+ or `.taskledger.toml` when legacy config is still present).
61
+
62
+ ```toml
63
+ [prompt_profiles.planning]
64
+ profile = "strict"
65
+ question_policy = "always_before_plan"
66
+ max_required_questions = 3
67
+ min_acceptance_criteria = 2
68
+ todo_granularity = "atomic"
69
+ require_files = true
70
+ require_test_commands = true
71
+ require_expected_outputs = true
72
+ require_validation_hints = true
73
+ plan_body_detail = "detailed"
74
+ required_question_topics = ["scope", "compatibility", "test strategy"]
75
+ extra_guidance = "Every plan must mention docs, tests, and rollback or repair behavior."
76
+ ```
77
+
78
+ Inspect guidance for the active task:
79
+
80
+ ```bash
81
+ taskledger plan guidance
82
+ taskledger --json plan guidance
83
+ ```
84
+
85
+ This guidance is advisory and cannot override lifecycle gates, user approval,
86
+ validation requirements, lock rules, or higher-priority harness instructions.
87
+ See `docs/usage.rst` for the full key reference and workflow details.
88
+
42
89
  ## Install
43
90
 
44
91
  ```bash
@@ -94,6 +141,16 @@ taskledger validate check --criterion ac-0001 --status pass --evidence "pytest -
94
141
  taskledger validate finish --result passed --summary "Validated the rewrite."
95
142
  ```
96
143
 
144
+ To revise a proposed plan, re-enter planning and edit an exported workspace
145
+ copy. Never edit `.taskledger/` files directly:
146
+
147
+ ```bash
148
+ taskledger plan revise
149
+ taskledger plan export --version latest --file ./plan.md
150
+ # edit ./plan.md
151
+ taskledger plan upsert --file ./plan.md
152
+ ```
153
+
97
154
  For manually completed work (e.g., manual testing, operations tasks, or work
98
155
  completed outside the task-first lifecycle), use `task record` to create a
99
156
  done task directly without acquiring lifecycle locks. **Note**: `task record`
@@ -105,6 +162,17 @@ taskledger task record "Deploy to production" --summary "Deployed v0.4.1 to prod
105
162
  taskledger task record "Manual API testing" --summary "Tested new endpoints" --allow-empty-record --reason "Exploratory testing, no formal changes tracked"
106
163
  ```
107
164
 
165
+ Archive is a visibility operation: it hides tasks from default list/tree/dashboard
166
+ views without deleting history. Task ids stay monotonic and are never reused.
167
+ Slugs can be reused after archive.
168
+
169
+ ```bash
170
+ taskledger task archive task-0030 --reason "Hide historical task"
171
+ taskledger task list --archived
172
+ taskledger task unarchive task-0030 --reason "Need to continue work" --slug task-0030-reopened
173
+ taskledger tree --include-archived
174
+ ```
175
+
108
176
  If validation finds an implementation bug, keep the accepted plan and restart
109
177
  implementation explicitly:
110
178
 
@@ -297,6 +365,7 @@ Use `--json` for machine-readable payloads:
297
365
  taskledger --json status --full
298
366
  taskledger --json task active
299
367
  taskledger --json task show
368
+ taskledger --json task show task-0001
300
369
  taskledger --json context --for validation --format json
301
370
  ```
302
371
 
@@ -398,11 +467,28 @@ for task-first handoff guidance.
398
467
  ## Export, import, and snapshots
399
468
 
400
469
  ```bash
401
- taskledger export ./taskledger-transfer.tar.gz
470
+ taskledger init --project-name "Taskledger"
471
+ taskledger export
472
+ taskledger import ./taskledger-transfer.tar.gz --dry-run
402
473
  taskledger import ./taskledger-transfer.tar.gz --replace
403
474
  taskledger snapshot ./artifacts
404
475
  ```
405
476
 
477
+ Default export filenames use this policy:
478
+
479
+ ```text
480
+ taskledger-export-{project_slug}-{ledger_ref}-{timestamp}.tar.gz
481
+ ```
482
+
483
+ `project_slug` is derived from `project_name` in `taskledger.toml`. If
484
+ `project_name` is missing, taskledger falls back to the workspace directory name.
485
+ Import safety still relies on `project_uuid`, not the name/slug.
486
+
487
+ `--include-bodies` and `--include-run-artifacts` now change archive content:
488
+
489
+ - `--no-include-bodies` strips record body text (`body` / `context_body`) from exported payloads.
490
+ - `--include-run-artifacts` embeds task and agent-log artifact files under `artifacts/` in the archive.
491
+
406
492
  Cross-machine imports preserve durable task/run data, but imported runtime locks
407
493
  are quarantined by default. After importing an in-progress implementation,
408
494
  run:
@@ -32,6 +32,8 @@ Project API
32
32
  - ``project_doctor``
33
33
  - ``project_export``
34
34
  - ``project_import``
35
+ - ``project_export_archive``
36
+ - ``project_import_archive``
35
37
  - ``project_snapshot``
36
38
  - ``project_tree``
37
39
 
@@ -51,7 +53,10 @@ Task API
51
53
  - ``cancel_task``
52
54
  - ``uncancel_task``
53
55
  - ``close_task``
56
+ - ``archive_task``
57
+ - ``unarchive_task``
54
58
  - ``create_follow_up_task``
59
+ - ``list_archived_task_summaries``
55
60
  - ``add_requirement``
56
61
  - ``remove_requirement``
57
62
  - ``waive_requirement``
@@ -80,10 +85,13 @@ Plan API
80
85
  - ``propose_plan``
81
86
  - ``plan_template``
82
87
  - ``upsert_plan``
88
+ - ``export_plan``
89
+ - ``amend_plan``
83
90
  - ``list_plan_versions``
84
91
  - ``show_plan``
85
92
  - ``diff_plan``
86
93
  - ``lint_plan``
94
+ - ``plan_guidance``
87
95
  - ``approve_plan``
88
96
  - ``reject_plan``
89
97
  - ``revise_plan``
@@ -91,6 +99,15 @@ Plan API
91
99
  - ``materialize_plan_todos``
92
100
  - ``run_planning_command``
93
101
 
102
+ Planning guidance example:
103
+
104
+ .. code-block:: python
105
+
106
+ from pathlib import Path
107
+ from taskledger.api.plans import plan_guidance
108
+
109
+ payload = plan_guidance(Path.cwd(), "task-0001")
110
+
94
111
  Question API
95
112
  ------------
96
113
 
@@ -20,8 +20,8 @@ should prefer ``--root``.
20
20
  Task Scoping
21
21
  ------------
22
22
 
23
- Task-scoped commands default to the active task. Use ``--task TASK_REF`` only
24
- when explicitly targeting another task.
23
+ Task-scoped workflow commands default to the active task. Use
24
+ ``--task TASK_REF`` when explicitly targeting another task.
25
25
 
26
26
  .. code-block:: bash
27
27
 
@@ -32,7 +32,57 @@ when explicitly targeting another task.
32
32
  taskledger implement finish --task task-0001 --summary "Implemented."
33
33
  taskledger validate status --task task-0001
34
34
 
35
- Optional positional task refs are not supported.
35
+ Task-resource commands accept the task as their direct positional resource:
36
+
37
+ .. code-block:: bash
38
+
39
+ taskledger task show task-0001
40
+ taskledger task cancel task-0001 --reason "Duplicate"
41
+ taskledger task archive task-0001 --reason "Hide historical task"
42
+ taskledger task unarchive task-0001 --reason "Restore task"
43
+ taskledger task report task-0001
44
+
45
+ Optional positional task refs are not supported for workflow commands.
46
+
47
+ Plan guidance command
48
+ ---------------------
49
+
50
+ ``taskledger plan guidance`` is a read-only planning helper command:
51
+
52
+ .. code-block:: bash
53
+
54
+ taskledger plan guidance [--task TASK_REF] [--format markdown|json]
55
+
56
+ Rules:
57
+
58
+ * defaults to the active task when ``--task`` is omitted;
59
+ * ``--format`` accepts only ``markdown`` or ``json``;
60
+ * when a planning run is active, it records a one-time guidance-view marker for
61
+ that run and appends a ``plan.guidance.viewed`` event;
62
+ * root ``--json`` continues to return the standard CLI success/error envelope.
63
+
64
+ The command payload shape is:
65
+
66
+ * ``kind``
67
+ * ``task_id``
68
+ * ``has_project_guidance``
69
+ * ``guidance``
70
+ * ``profile``
71
+ * ``question_policy``
72
+
73
+ Plan revision commands
74
+ ----------------------
75
+
76
+ ``taskledger plan export`` renders an editable plan draft outside durable
77
+ storage, and ``taskledger plan amend`` applies structured plan-review edits:
78
+
79
+ .. code-block:: bash
80
+
81
+ taskledger plan export [--task TASK_REF] [--version latest|N] [--file PATH] [--overwrite] [--stdout]
82
+ taskledger plan amend [--task TASK_REF] [--drop-criterion CRITERION_ID ...] [--drop-todo TODO_ID ...] [--remove-file PATH ...] --reason "..."
83
+
84
+ Plan proposal commands that accept ``--file`` reject file paths under
85
+ ``.taskledger/`` because that directory is private durable ledger state.
36
86
 
37
87
  Archive import lock policy
38
88
  --------------------------
@@ -47,6 +97,31 @@ The default is ``quarantine`` so imported source-machine runtime locks are not
47
97
  restored as active ``lock.yaml`` files. ``keep`` is diagnostic-only behavior
48
98
  for full-fidelity lock restoration.
49
99
 
100
+ Transfer archive manifest contract
101
+ ----------------------------------
102
+
103
+ Transfer archives include both machine identity and human-readable metadata:
104
+ ``manifest.project.name`` and ``manifest.project.slug`` are display metadata,
105
+ while ``manifest.project.uuid`` remains the safety identity.
106
+
107
+ .. code-block:: json
108
+
109
+ {
110
+ "project": {
111
+ "uuid": "<project_uuid>",
112
+ "name": "<project_name>",
113
+ "slug": "<project_slug>",
114
+ "ledger_ref": "<ledger_ref>"
115
+ }
116
+ }
117
+
118
+ Import compatibility is backward-safe: older archives that only contain
119
+ ``project.uuid`` and ``project.ledger_ref`` remain valid. UUID comparison is
120
+ still authoritative for import safety.
121
+
122
+ ``taskledger import --dry-run`` must not mutate taskledger state for either
123
+ archive or JSON payload imports.
124
+
50
125
  Positional Resource Refs
51
126
  ------------------------
52
127
 
@@ -138,6 +213,8 @@ and may also include:
138
213
  * ``template_command`` plus ``required_plan_fields`` and
139
214
  ``recommended_plan_fields`` when the next step is regenerating a plan from
140
215
  answered questions
216
+ * ``guidance_command`` when planning guidance should be reviewed before drafting
217
+ or regenerating a plan
141
218
 
142
219
  Agents should inspect ``next_item``, prefer ``next_command`` when it is safe,
143
220
  avoid inventing question answers, and never mark todos done without evidence.
@@ -153,7 +230,8 @@ latest implementation run and no active lock, it should direct agents to
153
230
  For an approved task with a non-implementation run still marked running,
154
231
  ``next-action`` must not direct agents to ``taskledger implement start``.
155
232
  It should report a repair-oriented action and point to ``taskledger doctor``.
156
- Truly cancelled tasks recover through ``taskledger task uncancel --reason "..."``
233
+ Truly cancelled tasks recover through
234
+ ``taskledger task uncancel --task TASK_REF --reason "..."``
157
235
 
158
236
  Compact mutation output
159
237
  ........................
@@ -188,6 +266,40 @@ to a durable non-active stage rather than directly re-entering an active stage.
188
266
  Run and lock repair
189
267
  -------------------
190
268
 
269
+ Managed command wrappers
270
+ ------------------------
271
+
272
+ ``plan command`` and ``implement command`` mirror the inner command exit code by
273
+ default.
274
+
275
+ Use ``--allow-failure`` when you intentionally want to record a non-zero inner
276
+ exit code while returning wrapper exit code ``0``:
277
+
278
+ .. code-block:: bash
279
+
280
+ taskledger plan command -- pytest tests/ -q
281
+ taskledger plan command --allow-failure -- pytest tests/ -q
282
+ taskledger implement command -- ruff check --config=.ruff.toml .
283
+ taskledger implement command --allow-failure -- python -c "raise SystemExit(7)"
284
+
285
+ Transcript review modes
286
+ -----------------------
287
+
288
+ ``task transcript`` defaults to review mode, which groups wrapper +
289
+ managed-shell pairs, highlights failures and wrapper/managed mismatches, and
290
+ flags late lifecycle commands. Raw per-record audit table is available with
291
+ ``--raw``::
292
+
293
+ .. code-block:: bash
294
+
295
+ taskledger task transcript --task TASK_REF
296
+ taskledger task transcript --task TASK_REF --raw
297
+ taskledger task transcript --task TASK_REF --failures
298
+
299
+ ``--review`` is the default (no flag needed). ``--raw`` shows every record
300
+ without collapsing. ``--failures`` renders only failed command rows and retry
301
+ detection. ``--raw``, ``--review``, and ``--failures`` are mutually exclusive.
302
+
191
303
  ``taskledger doctor`` and ``taskledger doctor locks`` report running runs without
192
304
  matching active locks. Orphaned running planning runs can be finished only
193
305
  through an explicit repair command with a reason:
@@ -126,8 +126,9 @@ inspection), preserve their output with ``plan command``:
126
126
  taskledger plan command -- pytest tests/test_parser.py -q
127
127
  taskledger plan command -- python -m compileall taskledger
128
128
 
129
- ``plan command`` records the command exit code and output as a change record
130
- attached to the planning run. Use it to build evidence into the plan before
129
+ ``plan command`` records command exit code and output in planning diagnostics.
130
+ With transcript logging enabled, the same output is also captured in the
131
+ ledger-level command transcript. Use it to build evidence into the plan before
131
132
  proposal.
132
133
 
133
134
  6. Materialize Todos And Approve
@@ -178,8 +179,9 @@ Begin implementation and keep durable notes as work progresses:
178
179
  taskledger implement status
179
180
 
180
181
  Use ``implement command`` when you want taskledger to record a command run as
181
- part of implementation. Use ``implement deviation`` when the implementation
182
- differs from the approved plan.
182
+ part of implementation. With transcript logging enabled, it also records managed
183
+ stdout/stderr in the task transcript. Use ``implement deviation`` when the
184
+ implementation differs from the approved plan.
183
185
 
184
186
  Fresh-worker implementation
185
187
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -282,6 +284,7 @@ After validation passes, close the task and inspect final state:
282
284
  taskledger task close --note "Fixed parser delimiter handling and validated parser regressions."
283
285
  taskledger release tag 0.4.2 --at-task parser-fix --note "0.4.2 released."
284
286
  taskledger task show
287
+ taskledger task show parser-fix
285
288
  taskledger status --full
286
289
  taskledger doctor
287
290
 
@@ -318,7 +321,7 @@ cycle:
318
321
  taskledger doctor locks
319
322
  taskledger lock break --reason "Recover stale planning lock."
320
323
  taskledger implement resume --reason "Reacquire implementation lock for existing running run."
321
- taskledger task uncancel --reason "Restore the task to a safe durable stage."
324
+ taskledger task uncancel --task TASK_REF --reason "Restore the task to a safe durable stage."
322
325
  taskledger repair index
323
326
  taskledger repair task --reason "Inspect task record after manual edit."
324
327
  taskledger reindex
@@ -17,6 +17,7 @@ Contents
17
17
  api
18
18
  public_surface
19
19
  command_contract
20
+ transfer
20
21
 
21
22
  Indices and tables
22
23
  ------------------
@@ -42,6 +42,12 @@ plan subcommands
42
42
  - ``plan start``, ``plan propose``, ``plan template``, ``plan upsert``, ``plan lint``, ``plan approve``, ``plan accept``, ``plan reject``, ``plan show``, ``plan diff``
43
43
  - ``plan regenerate --from-answers``, ``plan materialize-todos``, ``plan command -- ...``
44
44
 
45
+ task reporting and transcripts
46
+ ------------------------------
47
+
48
+ - ``task report`` supports section control including ``--include command-log``
49
+ - ``task transcript`` renders a per-task command transcript in ``markdown`` or ``json``
50
+
45
51
  todo subcommands
46
52
  ----------------
47
53