taskledger 0.2.0__tar.gz → 0.3.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 (226) hide show
  1. {taskledger-0.2.0 → taskledger-0.3.1}/.codecrate.toml +1 -1
  2. {taskledger-0.2.0 → taskledger-0.3.1}/.pre-commit-config.yaml +0 -8
  3. taskledger-0.3.1/.taskledger.toml +30 -0
  4. {taskledger-0.2.0 → taskledger-0.3.1}/API.md +22 -0
  5. taskledger-0.3.1/CHANGELOG.md +181 -0
  6. {taskledger-0.2.0/taskledger.egg-info → taskledger-0.3.1}/PKG-INFO +108 -2
  7. {taskledger-0.2.0 → taskledger-0.3.1}/README.md +107 -1
  8. {taskledger-0.2.0 → taskledger-0.3.1}/docs/api.rst +20 -0
  9. {taskledger-0.2.0 → taskledger-0.3.1}/docs/command_contract.rst +146 -4
  10. {taskledger-0.2.0 → taskledger-0.3.1}/docs/full_task_cycle.rst +8 -5
  11. {taskledger-0.2.0 → taskledger-0.3.1}/docs/index.rst +1 -0
  12. {taskledger-0.2.0 → taskledger-0.3.1}/docs/public_surface.rst +7 -1
  13. taskledger-0.3.1/docs/transfer.rst +81 -0
  14. {taskledger-0.2.0 → taskledger-0.3.1}/docs/usage.rst +163 -7
  15. {taskledger-0.2.0 → taskledger-0.3.1}/pyproject.toml +3 -1
  16. {taskledger-0.2.0 → taskledger-0.3.1}/skills/taskledger/SKILL.md +83 -26
  17. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/_version.py +3 -3
  18. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/plans.py +27 -0
  19. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/project.py +48 -2
  20. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/tasks.py +6 -0
  21. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli.py +571 -16
  22. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_common.py +178 -4
  23. taskledger-0.3.1/taskledger/cli_implement.py +511 -0
  24. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_misc.py +61 -5
  25. taskledger-0.3.1/taskledger/cli_plan.py +792 -0
  26. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_question.py +128 -15
  27. taskledger-0.3.1/taskledger/cli_task.py +886 -0
  28. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_validate.py +5 -0
  29. taskledger-0.3.1/taskledger/command_inventory.py +1185 -0
  30. taskledger-0.3.1/taskledger/domain/_model_utils.py +164 -0
  31. taskledger-0.3.1/taskledger/domain/active_state.py +144 -0
  32. taskledger-0.3.1/taskledger/domain/actor.py +119 -0
  33. taskledger-0.3.1/taskledger/domain/change.py +241 -0
  34. taskledger-0.3.1/taskledger/domain/check.py +111 -0
  35. taskledger-0.3.1/taskledger/domain/event.py +69 -0
  36. taskledger-0.3.1/taskledger/domain/handoff.py +168 -0
  37. taskledger-0.3.1/taskledger/domain/lock.py +128 -0
  38. taskledger-0.3.1/taskledger/domain/models.py +70 -0
  39. taskledger-0.3.1/taskledger/domain/plan.py +146 -0
  40. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/domain/policies.py +28 -0
  41. taskledger-0.3.1/taskledger/domain/question.py +103 -0
  42. taskledger-0.3.1/taskledger/domain/release.py +65 -0
  43. taskledger-0.3.1/taskledger/domain/run.py +145 -0
  44. taskledger-0.3.1/taskledger/domain/sidecars.py +468 -0
  45. taskledger-0.3.1/taskledger/domain/task.py +255 -0
  46. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/exchange.py +636 -26
  47. taskledger-0.3.1/taskledger/services/agent_logging.py +620 -0
  48. taskledger-0.3.1/taskledger/services/agent_transcripts.py +540 -0
  49. taskledger-0.3.1/taskledger/services/change_tracking.py +251 -0
  50. taskledger-0.3.1/taskledger/services/check_tracking.py +126 -0
  51. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/dashboard.py +43 -5
  52. taskledger-0.3.1/taskledger/services/doctor.py +309 -0
  53. taskledger-0.3.1/taskledger/services/doctor_checks/migration_checks.py +64 -0
  54. taskledger-0.3.1/taskledger/services/doctor_checks/project_scan.py +122 -0
  55. taskledger-0.3.1/taskledger/services/doctor_checks/task_checks.py +408 -0
  56. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/handoff.py +65 -5
  57. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/implementation_flow.py +96 -13
  58. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/navigation.py +281 -133
  59. taskledger-0.3.1/taskledger/services/next_action_model.py +140 -0
  60. taskledger-0.3.1/taskledger/services/plan_editing.py +114 -0
  61. taskledger-0.3.1/taskledger/services/plan_hash.py +23 -0
  62. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/plan_lint.py +12 -12
  63. taskledger-0.3.1/taskledger/services/plan_materialization.py +309 -0
  64. taskledger-0.3.1/taskledger/services/plan_review.py +429 -0
  65. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/planning_flow.py +209 -7
  66. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/releases.py +2 -0
  67. taskledger-0.3.1/taskledger/services/run_store.py +149 -0
  68. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/serve_read_model.py +13 -47
  69. taskledger-0.3.1/taskledger/services/task_archive.py +205 -0
  70. taskledger-0.3.1/taskledger/services/task_collections.py +498 -0
  71. taskledger-0.3.1/taskledger/services/task_lifecycle.py +940 -0
  72. taskledger-0.3.1/taskledger/services/task_repair.py +246 -0
  73. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/task_reports.py +261 -4
  74. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/tasks.py +454 -1948
  75. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/tree.py +18 -3
  76. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/validation_flow.py +3 -0
  77. taskledger-0.3.1/taskledger/services/web_dashboard.py +529 -0
  78. taskledger-0.3.1/taskledger/services/workflow_guidance.py +162 -0
  79. taskledger-0.3.1/taskledger/storage/agent_logs.py +151 -0
  80. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/init.py +3 -0
  81. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/project_config.py +417 -7
  82. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/project_identity.py +57 -1
  83. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/task_store.py +93 -5
  84. taskledger-0.3.1/taskledger/web_assets/dashboard.css +491 -0
  85. taskledger-0.3.1/taskledger/web_assets/dashboard.js +1448 -0
  86. {taskledger-0.2.0 → taskledger-0.3.1/taskledger.egg-info}/PKG-INFO +108 -2
  87. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger.egg-info/SOURCES.txt +46 -0
  88. taskledger-0.3.1/tests/__init__.py +0 -0
  89. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_active_task.py +36 -0
  90. taskledger-0.3.1/tests/test_agent_command_logging.py +657 -0
  91. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_agent_session_protocol.py +98 -0
  92. taskledger-0.3.1/tests/test_cli_command_contract.py +301 -0
  93. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_command_example_linter.py +1 -0
  94. taskledger-0.3.1/tests/test_command_inventory.py +299 -0
  95. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_delta_remaining_contracts.py +1 -1
  96. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_docs_and_skill.py +58 -0
  97. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_doctor.py +4 -0
  98. taskledger-0.3.1/tests/test_help_subprocess.py +57 -0
  99. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_implementation_change_scan.py +108 -0
  100. taskledger-0.3.1/tests/test_implementation_checks.py +349 -0
  101. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_json_contracts.py +100 -0
  102. taskledger-0.3.1/tests/test_next_action_expired_lock.py +115 -0
  103. taskledger-0.3.1/tests/test_no_log_feature.py +448 -0
  104. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_plan_approval_contract.py +127 -1
  105. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_plan_lint.py +182 -0
  106. taskledger-0.3.1/tests/test_plan_review.py +267 -0
  107. taskledger-0.3.1/tests/test_plan_revision_workflow.py +394 -0
  108. taskledger-0.3.1/tests/test_project_root_config.py +537 -0
  109. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_question_filter_answers.py +10 -1
  110. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_question_plan_regeneration.py +223 -1
  111. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_serve_dashboard.py +46 -14
  112. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_service_boundaries.py +119 -49
  113. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_services_dashboard.py +31 -4
  114. taskledger-0.3.1/tests/test_task_archive.py +220 -0
  115. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_task_report.py +65 -0
  116. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_taskledger_cli_api_parity.py +3 -0
  117. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_taskledger_v2_cli.py +157 -3
  118. taskledger-0.3.1/tests/test_taskledger_v2_exchange.py +1806 -0
  119. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_tree_command.py +84 -0
  120. taskledger-0.3.1/tests/test_workflow_guidance.py +111 -0
  121. taskledger-0.2.0/.taskledger.toml +0 -29
  122. taskledger-0.2.0/CHANGELOG.md +0 -83
  123. taskledger-0.2.0/taskledger/cli_implement.py +0 -462
  124. taskledger-0.2.0/taskledger/cli_plan.py +0 -510
  125. taskledger-0.2.0/taskledger/cli_task.py +0 -603
  126. taskledger-0.2.0/taskledger/command_inventory.py +0 -145
  127. taskledger-0.2.0/taskledger/domain/models.py +0 -1794
  128. taskledger-0.2.0/taskledger/services/doctor.py +0 -668
  129. taskledger-0.2.0/taskledger/services/web_dashboard.py +0 -1742
  130. taskledger-0.2.0/tests/test_cli_command_contract.py +0 -157
  131. taskledger-0.2.0/tests/test_command_inventory.py +0 -78
  132. taskledger-0.2.0/tests/test_project_root_config.py +0 -202
  133. taskledger-0.2.0/tests/test_taskledger_v2_exchange.py +0 -675
  134. {taskledger-0.2.0 → taskledger-0.3.1}/.github/workflows/codecov.yml +0 -0
  135. {taskledger-0.2.0 → taskledger-0.3.1}/.github/workflows/pre-commit.yml +0 -0
  136. {taskledger-0.2.0 → taskledger-0.3.1}/.github/workflows/python-publish.yml +0 -0
  137. {taskledger-0.2.0 → taskledger-0.3.1}/.github/workflows/tests.yml +0 -0
  138. {taskledger-0.2.0 → taskledger-0.3.1}/.gitignore +0 -0
  139. {taskledger-0.2.0 → taskledger-0.3.1}/.readthedocs.yaml +0 -0
  140. {taskledger-0.2.0 → taskledger-0.3.1}/.ruff.toml +0 -0
  141. {taskledger-0.2.0 → taskledger-0.3.1}/AGENTS.md +0 -0
  142. {taskledger-0.2.0 → taskledger-0.3.1}/LICENSE +0 -0
  143. {taskledger-0.2.0 → taskledger-0.3.1}/Makefile +0 -0
  144. {taskledger-0.2.0 → taskledger-0.3.1}/docs/Makefile +0 -0
  145. {taskledger-0.2.0 → taskledger-0.3.1}/docs/architecture_taskledger_split.rst +0 -0
  146. {taskledger-0.2.0 → taskledger-0.3.1}/docs/build.sh +0 -0
  147. {taskledger-0.2.0 → taskledger-0.3.1}/docs/conf.py +0 -0
  148. {taskledger-0.2.0 → taskledger-0.3.1}/docs/multi_repo.rst +0 -0
  149. {taskledger-0.2.0 → taskledger-0.3.1}/docs/requirements.txt +0 -0
  150. {taskledger-0.2.0 → taskledger-0.3.1}/docs/service_boundary_whitelist.rst +0 -0
  151. {taskledger-0.2.0 → taskledger-0.3.1}/setup.cfg +0 -0
  152. {taskledger-0.2.0 → taskledger-0.3.1}/setup.py +0 -0
  153. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/__init__.py +0 -0
  154. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/__main__.py +0 -0
  155. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/__init__.py +0 -0
  156. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/handoff.py +0 -0
  157. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/introductions.py +0 -0
  158. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/locks.py +0 -0
  159. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/questions.py +0 -0
  160. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/releases.py +0 -0
  161. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/search.py +0 -0
  162. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/task_runs.py +0 -0
  163. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_actor.py +0 -0
  164. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_ledger.py +0 -0
  165. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_migrate.py +0 -0
  166. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_release.py +0 -0
  167. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/domain/__init__.py +0 -0
  168. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/domain/states.py +0 -0
  169. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/errors.py +0 -0
  170. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/ids.py +0 -0
  171. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/launcher.py +0 -0
  172. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/py.typed +0 -0
  173. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/search.py +0 -0
  174. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/__init__.py +0 -0
  175. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/actors.py +0 -0
  176. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/command_runner.py +0 -0
  177. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/handoff_lifecycle.py +0 -0
  178. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/phase5_lock_transfer.py +0 -0
  179. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/task_queries.py +0 -0
  180. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/validation.py +0 -0
  181. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/__init__.py +0 -0
  182. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/atomic.py +0 -0
  183. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/common.py +0 -0
  184. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/events.py +0 -0
  185. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/frontmatter.py +0 -0
  186. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/indexes.py +0 -0
  187. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/ledger_config.py +0 -0
  188. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/locks.py +0 -0
  189. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/meta.py +0 -0
  190. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/migrations.py +0 -0
  191. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/paths.py +0 -0
  192. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/repos.py +0 -0
  193. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/timeutils.py +0 -0
  194. {taskledger-0.2.0/tests → taskledger-0.3.1/taskledger/web_assets}/__init__.py +0 -0
  195. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger.egg-info/dependency_links.txt +0 -0
  196. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger.egg-info/entry_points.txt +0 -0
  197. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger.egg-info/requires.txt +0 -0
  198. {taskledger-0.2.0 → taskledger-0.3.1}/taskledger.egg-info/top_level.txt +0 -0
  199. {taskledger-0.2.0 → taskledger-0.3.1}/tests/conftest.py +0 -0
  200. {taskledger-0.2.0 → taskledger-0.3.1}/tests/support/__init__.py +0 -0
  201. {taskledger-0.2.0 → taskledger-0.3.1}/tests/support/builders.py +0 -0
  202. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_actor_harness_state.py +0 -0
  203. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_atomic_fast_io.py +0 -0
  204. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_cli_import_resilience.py +0 -0
  205. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_compact_mutation_output.py +0 -0
  206. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_domain_policies.py +0 -0
  207. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_events.py +0 -0
  208. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_handoff_lifecycle.py +0 -0
  209. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_legacy_cleanup_contracts.py +0 -0
  210. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_lifecycle_policies.py +0 -0
  211. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_locks_audit.py +0 -0
  212. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_models_v1_schema.py +0 -0
  213. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_plan_todo_materialization.py +0 -0
  214. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_question_add_many.py +0 -0
  215. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_release_changelog.py +0 -0
  216. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_search.py +0 -0
  217. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_sidecar_collections.py +0 -0
  218. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_storage_bundle_layout.py +0 -0
  219. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_storage_common.py +0 -0
  220. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_storage_init.py +0 -0
  221. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_storage_migration.py +0 -0
  222. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_storage_repos.py +0 -0
  223. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_task_events.py +0 -0
  224. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_taskledger_branch_scoped_ledgers.py +0 -0
  225. {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_tasks_service_static.py +0 -0
  226. {taskledger-0.2.0 → taskledger-0.3.1}/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 = 84
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,34 @@ from taskledger.errors import (
99
104
  - `propose_plan`
100
105
  - `plan_template`
101
106
  - `upsert_plan`
107
+ - `PlanReviewOptions`
108
+ - `build_plan_review_payload`
109
+ - `render_plan_review`
110
+ - `export_plan`
111
+ - `amend_plan`
102
112
  - `regenerate_plan_from_answers`
103
113
  - `materialize_plan_todos`
104
114
  - `list_plan_versions`
105
115
  - `show_plan`
106
116
  - `diff_plan`
107
117
  - `lint_plan`
118
+ - `plan_guidance`
108
119
  - `approve_plan`
109
120
  - `reject_plan`
110
121
  - `revise_plan`
111
122
  - `run_planning_command`
112
123
 
124
+ Planning guidance API example:
125
+
126
+ ```python
127
+ from pathlib import Path
128
+
129
+ from taskledger.api.plans import plan_guidance
130
+
131
+ payload = plan_guidance(Path.cwd(), "task-0001")
132
+ # payload includes: kind, task_id, has_project_guidance, guidance, profile, question_policy
133
+ ```
134
+
113
135
  ### `taskledger.api.questions`
114
136
 
115
137
  - `add_question`
@@ -0,0 +1,181 @@
1
+ # Changelog
2
+
3
+ ## v0.3.1 - 2026-05-12
4
+
5
+ ### Added
6
+
7
+ - Added task-scoped export/import with `--task` positional ref on export, safe ID remapping (`--id-policy preserve|renumber`), counter repair, and artifact path remapping on import. Full-ledger export remains the default; single-task archives filter task-scoped records and clear `active_task`.
8
+ - Added `taskledger plan review` command to show the current or specified plan version with structured JSON output and content rendering.
9
+ - Added `next-action` routing to recommend `plan review --version N` when a plan is awaiting approval.
10
+
11
+ ### Documentation
12
+
13
+ - Updated README, command contract, and SKILL.md for task-scoped transfer workflow and `plan review` command.
14
+
15
+ ### Quality
16
+
17
+ - Added regression coverage for task-scoped export/import ID mapping, conflict policy, counter repair, artifact remap, and plan review end-to-end.
18
+ - Full suite: 878 tests passing, ruff and mypy clean.
19
+
20
+ ## v0.3.0 - 2026-05-05
21
+
22
+ ### Added
23
+
24
+ - Added agent command transcript logging: opt-in config, append-only NDJSON storage, CLI stdout/stderr tee capture, managed-shell capture, `task transcript` command, and `task report --include command-log` section. Export/import preserves transcript archives.
25
+ - Added planning guidance profiles: `plan guidance` command, `--include-guidance` plan template injection, and `prompt_profiles.planning` config with advisory required-fields rendering.
26
+ - Added transcript review mode as the default `task transcript` output, with `--raw` flag for the original table view, duplicate log ID warnings, and logical-row grouping for wrapper/managed-shell pairs.
27
+ - Added enriched command metadata: tier, deprecated, replaced_by, ledger_effect, workspace_effect, external_effect, and agent_safe fields on CommandSpec. Added `--tier` and `--include-deprecated` CLI filters. Deprecated `lock break` in favor of `repair lock`.
28
+ - Added first-class expired-lock resume path: `implement resume --repair-expired-lock` releases expired implementation locks with audit trail, and `next-action` emits `expired-lock-resume` when applicable.
29
+ - Added task-resource positional refs for read-only commands (`task show`, `task view`, etc.) with explicit `--task` required for destructive commands (`task cancel`, `task uncancel`, `task edit`).
30
+ - Added JSON usage-error envelopes for workflow positional-ref rejection and CLI parse errors.
31
+ - Added soft task archive: `task archive`/`task unarchive` commands, archived-task visibility filtering across list/tree/status, and slug reuse semantics.
32
+ - Added export/import project metadata guard, dry-run safety, and include-flag controls.
33
+ - Added plan revision workflow: `plan export`, `plan amend`, and `--auto-revise` with safe plan input path guard and plan.amended audit events.
34
+ - Added plan approval provenance: approval_source and approved_plan_hash stored on acceptance, with hash-mismatch warnings in reports.
35
+ - Added implement finish warning for missing git change scans.
36
+
37
+ ### Changed
38
+
39
+ - Split run/lock helpers into `services/run_store.py` from the tasks.py monolith; `tasks.py` re-exports for backward compatibility.
40
+ - Wrapper commands now mirror inner exit status by default instead of always succeeding.
41
+ - Planning guidance recommendation is now integrated into `plan start` and `next-action` with a one-time viewed marker.
42
+ - Plan lint human output now renders summary and issue details instead of bare pass/fail.
43
+ - Question `answer-many` now validates repeat inputs, aliases, and provenance.
44
+ - Doctor mismatch guidance and verbose output improved with actionable repair hints.
45
+
46
+ ### Fixed
47
+
48
+ - Fixed task report Plans section so non-accepted plans show reviewable details instead of being omitted.
49
+ - Fixed pre-commit `--all-files` regressions across test files.
50
+
51
+ ### Documentation
52
+
53
+ - Documented planning guidance profiles in README, usage, command contract, API, and skill.
54
+ - Documented transcript logging, managed command capture, and review mode in usage and skill.
55
+ - Documented expired-lock-resume path and `--repair-expired-lock` in SKILL.md.
56
+ - Documented command-surface safety guidance, task-resource positional refs, and destructive-target rules in SKILL.md and command contract.
57
+ - Documented plan revision workflow commands and safety semantics in SKILL.md and command examples.
58
+ - Updated failure-review remediation hints for known mistakes in docs and skill.
59
+
60
+ ### Quality
61
+
62
+ - Added regression test modules for agent command logging, expired-lock resume, task archive, and plan revision workflow.
63
+ - Expanded command inventory, CLI contract, JSON contract, and docs/skill tests for metadata enrichment, deprecation, targeting, and envelope behavior.
64
+ - Full suite: 770+ tests passing, ruff and mypy clean.
65
+
66
+ ## v0.2.0 - 2026-05-03
67
+
68
+ ### Added
69
+
70
+ - 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.
71
+ - 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.
72
+ - 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.
73
+ - 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.
74
+ - Added `taskledger status --check` to run doctor diagnostics alongside status, keeping the default `status` fast by avoiding full record parsing.
75
+ - Added structured diagnostics to `taskledger doctor` JSON output with task IDs, change IDs, run IDs, types, relative paths, and actionable repair hints.
76
+ - Added explicit `repair` command for existing planning-command change records that were incorrectly persisted as code changes.
77
+ - Added a top-level `Makefile` with a `release-check` automation target (compile, test, lint, type-check, build, twine check).
78
+ - Added AST-based service boundary guardrail tests with explicit whitelists and documented rationale.
79
+
80
+ ### Changed
81
+
82
+ - 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.
83
+ - Decoupled validation service from private task helpers by extracting shared query logic into a new `task_queries` module.
84
+ - Planning commands are now persisted as planning-run evidence (worklog/artifacts/event) instead of creating `CodeChangeRecord` entries.
85
+ - Replaced chmod-dependent storage write failure test with a deterministic synthetic `OSError` monkeypatch.
86
+ - Sped up test suite with test-only fast fsync bypass, command-runner seam, and reduced subprocess-heavy setup.
87
+
88
+ ### Fixed
89
+
90
+ - Fixed import replace so it no longer restores stale locks across machines.
91
+
92
+ ### Documentation
93
+
94
+ - 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.
95
+ - Added `docs/service_boundary_whitelist.md` documenting temporary module/function boundary whitelist entries and split targets.
96
+
97
+ ### Quality
98
+
99
+ - 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.
100
+
101
+ ## v0.1.2 - 2026-04-30
102
+
103
+ ### Fixed
104
+
105
+ - Fixed orphaned planning run lifecycle recovery so plan regeneration safely finishes the latest orphaned planning run with audit evidence, plan approval rejects tasks with any running run, and `implement start` reports structured conflict details including run id, run type, lock match status, and suggested diagnostic command.
106
+ - Aligned `next-action` and `can implement` so they never recommend `implement start` when a running run or run/lock mismatch blocks implementation.
107
+ - Expanded `taskledger doctor` and `taskledger doctor locks` to report run/lock mismatches with specific repair guidance.
108
+
109
+ ### Added
110
+
111
+ - Added `taskledger repair run` for guarded, reasoned, audited repair of orphaned running planning runs.
112
+
113
+ ### Documentation
114
+
115
+ - Updated taskledger skill, command contract, and API docs with running-run conflict protocol and `repair run` usage.
116
+
117
+ ### Quality
118
+
119
+ - Expanded regression coverage for plan regeneration recovery, approval guards, next-action alignment, doctor diagnostics, and repair lifecycle. Targeted pytest, ruff, format, and mypy passed.
120
+
121
+ ## v0.1.1 - 2026-04-29
122
+
123
+ ### Added
124
+
125
+ - Added `task follow-up` to create linked post-completion child tasks, preserve closure metadata, and show parent and follow-up relationships in task and handoff views.
126
+ - Added durable release records and a new `taskledger release` command group with `tag`, `list`, `show`, and `changelog`, including export/import support and public API coverage.
127
+ - Added planning helpers with `question add-many`, `plan template`, richer regeneration hints in `next-action`, and recovery commands for orphaned implementation work with `implement resume`, `task uncancel`, and `can implement-resume`.
128
+
129
+ ### Changed
130
+
131
+ - Hardened CLI startup so optional command-group import failures no longer block core commands, and launcher failures return structured diagnostics.
132
+
133
+ ### Fixed
134
+
135
+ - Fixed recovery guidance for uncancelled tasks with orphaned implementation runs so `next-action` and `can implement` recommend `implement resume` instead of a fresh start.
136
+
137
+ ### Documentation
138
+
139
+ - Documented release tagging, changelog generation, planning helpers, follow-up task workflow, and recovery semantics across README, RST docs, API docs, and the taskledger skill.
140
+
141
+ ### Quality
142
+
143
+ - Expanded regression coverage for follow-up tasks, release workflow, CLI import resilience, planning helpers, and implementation recovery. Repo-wide pytest, ruff, and mypy passed.
144
+
145
+ ## v0.1.0 - 2026-04-29
146
+
147
+ ### Added
148
+
149
+ - Added initial unit test coverage for `storage/common`, `storage/init`, `storage/repos`, `domain/policies`, and `services/doctor_v2`, raising overall coverage from 62% to 65%.
150
+ - Added a second coverage pass for storage memories, items, contexts, validation, and dashboard services, raising overall coverage to 73%.
151
+ - Added question status filtering plus `taskledger question answers` with markdown and JSON output.
152
+ - Added `taskledger plan lint`, stricter executable-plan linting, and approval gating for lint failures.
153
+ - Added focused worker contexts and durable handoff snapshots for implementer and reviewer workflows.
154
+ - Added richer `next-action` output with next item, command hints, and progress details.
155
+ - Added project-root config discovery and external storage roots via `taskledger.toml`.
156
+ - Added the localhost-only read-only `taskledger serve` dashboard.
157
+ - Added an explicit failed-validation recovery path with `taskledger implement restart`.
158
+ - Added compact single-agent workflow guidance and richer `todo next` and `todo show` hints.
159
+
160
+ ### Changed
161
+
162
+ - Hardened agent guardrails by requiring reasons for approval escape hatches, blocking empty-todo approvals by default, and adding durable `plan command` execution.
163
+ - Finished agent-protocol hardening with stronger typed normalization, safer plan todo materialization, and automatic todo source inference from the active lock.
164
+ - Removed redundant derived task, plan-version, and latest-run indexes so Markdown bundles remain canonical and JSON indexes remain rebuildable caches.
165
+ - Completed the broader pre-release cleanup pass from `todo.md`, including public API export cleanup, stricter storage diagnostics, canonical module paths, normalized JSON command naming, and packaging cleanup.
166
+ - Extended the serve dashboard with a dedicated read model, recent-event tail loading, route caching, and non-overlapping partial refreshes for better hot-path performance.
167
+ - Redesigned the serve dashboard into a more human-focused layout with richer sidebar metadata, accessibility coverage, and updated docs.
168
+ - Improved dashboard review ergonomics and refresh stability with pause and resume controls, diffed rerenders, preserved details state, and lazy raw-payload rendering.
169
+ - Finished release-readiness cleanup by consolidating maintained docs under RST and keeping `skills/taskledger/SKILL.md` as the single canonical skill file.
170
+
171
+ ### Fixed
172
+
173
+ - Fixed `taskledger view` so todo counts and item lists reflect persisted todos instead of always showing `0/0`.
174
+ - Fixed orphan slug-directory creation under `.taskledger/tasks/` and added repair support for existing bad directories.
175
+ - Fixed repo-wide pre-commit and mypy failures across more than twenty files.
176
+ - Fixed serve response handling so client disconnects no longer produce `BrokenPipeError` tracebacks.
177
+ - Fixed the serve dashboard todo-renderer JavaScript regression that broke refresh parsing.
178
+
179
+ ### Quality
180
+
181
+ - Improved testing depth across storage, dashboard, lifecycle, and documentation surfaces to support release readiness and regression protection.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taskledger
3
- Version: 0.2.0
3
+ Version: 0.3.1
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
@@ -117,6 +164,7 @@ taskledger question answer-many --text $'q-0001: Yes.\nq-0002: No.'
117
164
  taskledger question status
118
165
  taskledger plan template --from-answers --file ./plan.md
119
166
  taskledger plan upsert --from-answers --file ./plan.md
167
+ taskledger plan review --version 1
120
168
  taskledger plan lint --version 1
121
169
  taskledger plan accept --version 1 --note "Ready."
122
170
 
@@ -137,6 +185,16 @@ taskledger validate check --criterion ac-0001 --status pass --evidence "pytest -
137
185
  taskledger validate finish --result passed --summary "Validated the rewrite."
138
186
  ```
139
187
 
188
+ To revise a proposed plan, re-enter planning and edit an exported workspace
189
+ copy. Never edit `.taskledger/` files directly:
190
+
191
+ ```bash
192
+ taskledger plan revise
193
+ taskledger plan export --version latest --file ./plan.md
194
+ # edit ./plan.md
195
+ taskledger plan upsert --file ./plan.md
196
+ ```
197
+
140
198
  For manually completed work (e.g., manual testing, operations tasks, or work
141
199
  completed outside the task-first lifecycle), use `task record` to create a
142
200
  done task directly without acquiring lifecycle locks. **Note**: `task record`
@@ -148,6 +206,17 @@ taskledger task record "Deploy to production" --summary "Deployed v0.4.1 to prod
148
206
  taskledger task record "Manual API testing" --summary "Tested new endpoints" --allow-empty-record --reason "Exploratory testing, no formal changes tracked"
149
207
  ```
150
208
 
209
+ Archive is a visibility operation: it hides tasks from default list/tree/dashboard
210
+ views without deleting history. Task ids stay monotonic and are never reused.
211
+ Slugs can be reused after archive.
212
+
213
+ ```bash
214
+ taskledger task archive task-0030 --reason "Hide historical task"
215
+ taskledger task list --archived
216
+ taskledger task unarchive task-0030 --reason "Need to continue work" --slug task-0030-reopened
217
+ taskledger tree --include-archived
218
+ ```
219
+
151
220
  If validation finds an implementation bug, keep the accepted plan and restart
152
221
  implementation explicitly:
153
222
 
@@ -340,6 +409,7 @@ Use `--json` for machine-readable payloads:
340
409
  taskledger --json status --full
341
410
  taskledger --json task active
342
411
  taskledger --json task show
412
+ taskledger --json task show task-0001
343
413
  taskledger --json context --for validation --format json
344
414
  ```
345
415
 
@@ -441,11 +511,32 @@ for task-first handoff guidance.
441
511
  ## Export, import, and snapshots
442
512
 
443
513
  ```bash
444
- taskledger export ./taskledger-transfer.tar.gz
514
+ taskledger init --project-name "Taskledger"
515
+ taskledger export
516
+ taskledger export --task task-0040
517
+ taskledger export task-0040
518
+ taskledger import ./taskledger-transfer.tar.gz --dry-run
519
+ taskledger import ./taskledger-task-planledger-main-task-0040-20260509T101500Z.tar.gz
445
520
  taskledger import ./taskledger-transfer.tar.gz --replace
446
521
  taskledger snapshot ./artifacts
447
522
  ```
448
523
 
524
+ Default export filenames use this policy:
525
+
526
+ ```text
527
+ taskledger-export-{project_slug}-{ledger_ref}-{timestamp}.tar.gz
528
+ taskledger-task-{project_slug}-{ledger_ref}-{task_id}-{timestamp}.tar.gz
529
+ ```
530
+
531
+ `project_slug` is derived from `project_name` in `taskledger.toml`. If
532
+ `project_name` is missing, taskledger falls back to the workspace directory name.
533
+ Import safety still relies on `project_uuid`, not the name/slug.
534
+
535
+ `--include-bodies` and `--include-run-artifacts` now change archive content:
536
+
537
+ - `--no-include-bodies` strips record body text (`body` / `context_body`) from exported payloads.
538
+ - `--include-run-artifacts` embeds task and agent-log artifact files under `artifacts/` in the archive.
539
+
449
540
  Cross-machine imports preserve durable task/run data, but imported runtime locks
450
541
  are quarantined by default. After importing an in-progress implementation,
451
542
  run:
@@ -457,6 +548,21 @@ taskledger implement resume --reason "Continue imported implementation."
457
548
 
458
549
  Use `--lock-policy keep` only for diagnostic full-fidelity lock restoration.
459
550
 
551
+ Single-task transfer from a config-only checkout:
552
+
553
+ ```bash
554
+ # fresh checkout on another PC
555
+ taskledger init
556
+ taskledger task create "Fix import edge case" --slug fix-import-edge-case --description "..."
557
+ # ... normal plan / implementation / validation lifecycle ...
558
+ taskledger export task-0040
559
+
560
+ # main dev repo
561
+ taskledger import ./taskledger-task-planledger-main-task-0040-20260509T101500Z.tar.gz
562
+ taskledger task list
563
+ taskledger task show task-0040
564
+ ```
565
+
460
566
  ## Skill packaging
461
567
 
462
568
  Agent workflows work best when the `taskledger` skill is installed in the
@@ -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
@@ -74,6 +121,7 @@ taskledger question answer-many --text $'q-0001: Yes.\nq-0002: No.'
74
121
  taskledger question status
75
122
  taskledger plan template --from-answers --file ./plan.md
76
123
  taskledger plan upsert --from-answers --file ./plan.md
124
+ taskledger plan review --version 1
77
125
  taskledger plan lint --version 1
78
126
  taskledger plan accept --version 1 --note "Ready."
79
127
 
@@ -94,6 +142,16 @@ taskledger validate check --criterion ac-0001 --status pass --evidence "pytest -
94
142
  taskledger validate finish --result passed --summary "Validated the rewrite."
95
143
  ```
96
144
 
145
+ To revise a proposed plan, re-enter planning and edit an exported workspace
146
+ copy. Never edit `.taskledger/` files directly:
147
+
148
+ ```bash
149
+ taskledger plan revise
150
+ taskledger plan export --version latest --file ./plan.md
151
+ # edit ./plan.md
152
+ taskledger plan upsert --file ./plan.md
153
+ ```
154
+
97
155
  For manually completed work (e.g., manual testing, operations tasks, or work
98
156
  completed outside the task-first lifecycle), use `task record` to create a
99
157
  done task directly without acquiring lifecycle locks. **Note**: `task record`
@@ -105,6 +163,17 @@ taskledger task record "Deploy to production" --summary "Deployed v0.4.1 to prod
105
163
  taskledger task record "Manual API testing" --summary "Tested new endpoints" --allow-empty-record --reason "Exploratory testing, no formal changes tracked"
106
164
  ```
107
165
 
166
+ Archive is a visibility operation: it hides tasks from default list/tree/dashboard
167
+ views without deleting history. Task ids stay monotonic and are never reused.
168
+ Slugs can be reused after archive.
169
+
170
+ ```bash
171
+ taskledger task archive task-0030 --reason "Hide historical task"
172
+ taskledger task list --archived
173
+ taskledger task unarchive task-0030 --reason "Need to continue work" --slug task-0030-reopened
174
+ taskledger tree --include-archived
175
+ ```
176
+
108
177
  If validation finds an implementation bug, keep the accepted plan and restart
109
178
  implementation explicitly:
110
179
 
@@ -297,6 +366,7 @@ Use `--json` for machine-readable payloads:
297
366
  taskledger --json status --full
298
367
  taskledger --json task active
299
368
  taskledger --json task show
369
+ taskledger --json task show task-0001
300
370
  taskledger --json context --for validation --format json
301
371
  ```
302
372
 
@@ -398,11 +468,32 @@ for task-first handoff guidance.
398
468
  ## Export, import, and snapshots
399
469
 
400
470
  ```bash
401
- taskledger export ./taskledger-transfer.tar.gz
471
+ taskledger init --project-name "Taskledger"
472
+ taskledger export
473
+ taskledger export --task task-0040
474
+ taskledger export task-0040
475
+ taskledger import ./taskledger-transfer.tar.gz --dry-run
476
+ taskledger import ./taskledger-task-planledger-main-task-0040-20260509T101500Z.tar.gz
402
477
  taskledger import ./taskledger-transfer.tar.gz --replace
403
478
  taskledger snapshot ./artifacts
404
479
  ```
405
480
 
481
+ Default export filenames use this policy:
482
+
483
+ ```text
484
+ taskledger-export-{project_slug}-{ledger_ref}-{timestamp}.tar.gz
485
+ taskledger-task-{project_slug}-{ledger_ref}-{task_id}-{timestamp}.tar.gz
486
+ ```
487
+
488
+ `project_slug` is derived from `project_name` in `taskledger.toml`. If
489
+ `project_name` is missing, taskledger falls back to the workspace directory name.
490
+ Import safety still relies on `project_uuid`, not the name/slug.
491
+
492
+ `--include-bodies` and `--include-run-artifacts` now change archive content:
493
+
494
+ - `--no-include-bodies` strips record body text (`body` / `context_body`) from exported payloads.
495
+ - `--include-run-artifacts` embeds task and agent-log artifact files under `artifacts/` in the archive.
496
+
406
497
  Cross-machine imports preserve durable task/run data, but imported runtime locks
407
498
  are quarantined by default. After importing an in-progress implementation,
408
499
  run:
@@ -414,6 +505,21 @@ taskledger implement resume --reason "Continue imported implementation."
414
505
 
415
506
  Use `--lock-policy keep` only for diagnostic full-fidelity lock restoration.
416
507
 
508
+ Single-task transfer from a config-only checkout:
509
+
510
+ ```bash
511
+ # fresh checkout on another PC
512
+ taskledger init
513
+ taskledger task create "Fix import edge case" --slug fix-import-edge-case --description "..."
514
+ # ... normal plan / implementation / validation lifecycle ...
515
+ taskledger export task-0040
516
+
517
+ # main dev repo
518
+ taskledger import ./taskledger-task-planledger-main-task-0040-20260509T101500Z.tar.gz
519
+ taskledger task list
520
+ taskledger task show task-0040
521
+ ```
522
+
417
523
  ## Skill packaging
418
524
 
419
525
  Agent workflows work best when the `taskledger` skill is installed in the
@@ -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,16 @@ Plan API
80
85
  - ``propose_plan``
81
86
  - ``plan_template``
82
87
  - ``upsert_plan``
88
+ - ``PlanReviewOptions``
89
+ - ``build_plan_review_payload``
90
+ - ``render_plan_review``
91
+ - ``export_plan``
92
+ - ``amend_plan``
83
93
  - ``list_plan_versions``
84
94
  - ``show_plan``
85
95
  - ``diff_plan``
86
96
  - ``lint_plan``
97
+ - ``plan_guidance``
87
98
  - ``approve_plan``
88
99
  - ``reject_plan``
89
100
  - ``revise_plan``
@@ -91,6 +102,15 @@ Plan API
91
102
  - ``materialize_plan_todos``
92
103
  - ``run_planning_command``
93
104
 
105
+ Planning guidance example:
106
+
107
+ .. code-block:: python
108
+
109
+ from pathlib import Path
110
+ from taskledger.api.plans import plan_guidance
111
+
112
+ payload = plan_guidance(Path.cwd(), "task-0001")
113
+
94
114
  Question API
95
115
  ------------
96
116