taskledger 0.4.2__tar.gz → 0.5.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 (486) hide show
  1. taskledger-0.5.0/.archledger/archive/records/building_blocks/al_block_0083.md +41 -0
  2. taskledger-0.5.0/.archledger/archive/records/concepts/al_concept_0081.md +32 -0
  3. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/archive}/records/runtime/al_runtime_0076.md +7 -4
  4. taskledger-0.5.0/.archledger/archive/records/runtime/al_runtime_0084.md +42 -0
  5. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0002.md +1 -1
  6. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0004.md +1 -0
  7. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0005.md +1 -1
  8. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0006.md +2 -0
  9. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0007.md +1 -1
  10. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0008.md +3 -1
  11. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0011.md +1 -1
  12. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/building_blocks/al_block_0029.md +2 -2
  13. taskledger-0.5.0/.archledger/records/building_blocks/al_block_0030.md +24 -0
  14. taskledger-0.5.0/.archledger/records/building_blocks/al_block_0032.md +22 -0
  15. taskledger-0.5.0/.archledger/records/building_blocks/al_block_0033.md +22 -0
  16. taskledger-0.5.0/.archledger/records/building_blocks/al_block_0034.md +22 -0
  17. taskledger-0.5.0/.archledger/records/concepts/al_concept_0044.md +16 -0
  18. taskledger-0.5.0/.archledger/records/concepts/al_concept_0082.md +25 -0
  19. taskledger-0.5.0/.archledger/records/constraints/al_constraint_0016.md +17 -0
  20. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/decisions/al_adr_0046.md +10 -3
  21. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/decisions/al_adr_0047.md +10 -3
  22. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/decisions/al_adr_0048.md +10 -3
  23. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/decisions/al_adr_0049.md +10 -3
  24. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/decisions/al_adr_0050.md +12 -5
  25. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/decisions/al_adr_0051.md +10 -3
  26. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/deployment/al_deploy_0039.md +2 -2
  27. taskledger-0.5.0/.archledger/records/risks/al_risk_0060.md +18 -0
  28. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/stakeholders/al_content_0080.md +2 -2
  29. taskledger-0.5.0/.archledger/source-state.json +894 -0
  30. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/storage.yaml +1 -1
  31. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger.toml +24 -1
  32. {taskledger-0.4.2 → taskledger-0.5.0}/.codecrate.toml +1 -1
  33. {taskledger-0.4.2 → taskledger-0.5.0}/.github/workflows/tests.yml +9 -1
  34. taskledger-0.5.0/.planledger.toml +6 -0
  35. taskledger-0.5.0/.releaseledger.toml +42 -0
  36. taskledger-0.5.0/.specweave.toml +44 -0
  37. {taskledger-0.4.2 → taskledger-0.5.0}/.taskledger.toml +1 -1
  38. {taskledger-0.4.2 → taskledger-0.5.0}/AGENTS.md +6 -1
  39. {taskledger-0.4.2 → taskledger-0.5.0}/API.md +16 -4
  40. {taskledger-0.4.2 → taskledger-0.5.0}/ARCHITECTURE.md +40 -45
  41. {taskledger-0.4.2 → taskledger-0.5.0}/CHANGELOG.md +70 -5
  42. {taskledger-0.4.2/taskledger.egg-info → taskledger-0.5.0}/PKG-INFO +96 -32
  43. {taskledger-0.4.2 → taskledger-0.5.0}/README.md +94 -29
  44. {taskledger-0.4.2 → taskledger-0.5.0}/docs/api.rst +5 -1
  45. {taskledger-0.4.2 → taskledger-0.5.0}/docs/command_contract.rst +94 -20
  46. {taskledger-0.4.2 → taskledger-0.5.0}/docs/full_task_cycle.rst +14 -0
  47. {taskledger-0.4.2 → taskledger-0.5.0}/docs/public_surface.rst +21 -7
  48. {taskledger-0.4.2 → taskledger-0.5.0}/docs/service_boundary_whitelist.rst +6 -8
  49. {taskledger-0.4.2 → taskledger-0.5.0}/docs/sync.rst +14 -0
  50. {taskledger-0.4.2 → taskledger-0.5.0}/docs/usage.rst +121 -28
  51. {taskledger-0.4.2 → taskledger-0.5.0}/pyproject.toml +2 -3
  52. {taskledger-0.4.2 → taskledger-0.5.0}/skills/taskledger/SKILL.md +100 -52
  53. taskledger-0.5.0/specs/behavior/README.md +1639 -0
  54. taskledger-0.5.0/specs/behavior/UNMAPPED_TESTS.md +65 -0
  55. taskledger-0.5.0/specs/behavior/evidence/taskledger-test-feature-coverage.json +2452 -0
  56. taskledger-0.5.0/specs/behavior/features/active_task/active-task.feature +59 -0
  57. taskledger-0.5.0/specs/behavior/features/actor_harness_state/actor-harness-state.feature +214 -0
  58. taskledger-0.5.0/specs/behavior/features/actor_resolution/actor-resolution.feature +112 -0
  59. taskledger-0.5.0/specs/behavior/features/agent_command_logging/agent-command-logging.feature +121 -0
  60. taskledger-0.5.0/specs/behavior/features/agent_session_protocol/agent-session-protocol.feature +116 -0
  61. taskledger-0.5.0/specs/behavior/features/atomic_fast_io/atomic-fast-io.feature +13 -0
  62. taskledger-0.5.0/specs/behavior/features/bdd_cli/bdd-cli.feature +156 -0
  63. taskledger-0.5.0/specs/behavior/features/bdd_gherkin/bdd-gherkin.feature +68 -0
  64. taskledger-0.5.0/specs/behavior/features/bdd_models/bdd-models.feature +85 -0
  65. taskledger-0.5.0/specs/behavior/features/bdd_report_import/bdd-report-import.feature +40 -0
  66. taskledger-0.5.0/specs/behavior/features/bdd_storage/bdd-storage.feature +58 -0
  67. taskledger-0.5.0/specs/behavior/features/bdd_validation_integration/bdd-validation-integration.feature +40 -0
  68. taskledger-0.5.0/specs/behavior/features/cli_command_contract/cli-command-contract.feature +59 -0
  69. taskledger-0.5.0/specs/behavior/features/cli_import_resilience/cli-import-resilience.feature +31 -0
  70. taskledger-0.5.0/specs/behavior/features/code_reviews/code-reviews.feature +69 -0
  71. taskledger-0.5.0/specs/behavior/features/command_example_linter/command-example-linter.feature +26 -0
  72. taskledger-0.5.0/specs/behavior/features/command_inventory/command-inventory.feature +97 -0
  73. taskledger-0.5.0/specs/behavior/features/command_runner/command-runner.feature +23 -0
  74. taskledger-0.5.0/specs/behavior/features/compact_mutation_output/compact-mutation-output.feature +68 -0
  75. taskledger-0.5.0/specs/behavior/features/config_cli/config-cli.feature +79 -0
  76. taskledger-0.5.0/specs/behavior/features/delta_remaining_contracts/delta-remaining-contracts.feature +155 -0
  77. taskledger-0.5.0/specs/behavior/features/docs_and_skill/docs-and-skill.feature +199 -0
  78. taskledger-0.5.0/specs/behavior/features/doctor/doctor.feature +192 -0
  79. taskledger-0.5.0/specs/behavior/features/domain_policies/domain-policies.feature +435 -0
  80. taskledger-0.5.0/specs/behavior/features/event_logging_config/event-logging-config.feature +44 -0
  81. taskledger-0.5.0/specs/behavior/features/events/events.feature +25 -0
  82. taskledger-0.5.0/specs/behavior/features/file_link_snapshots/file-link-snapshots.feature +67 -0
  83. taskledger-0.5.0/specs/behavior/features/find_code_clones_script/find-code-clones-script.feature +13 -0
  84. taskledger-0.5.0/specs/behavior/features/handoff_lifecycle/handoff-lifecycle.feature +93 -0
  85. taskledger-0.5.0/specs/behavior/features/help_subprocess/help-subprocess.feature +28 -0
  86. taskledger-0.5.0/specs/behavior/features/implementation_change_scan/implementation-change-scan.feature +41 -0
  87. taskledger-0.5.0/specs/behavior/features/implementation_checks/implementation-checks.feature +60 -0
  88. taskledger-0.5.0/specs/behavior/features/json_contracts/json-contracts.feature +75 -0
  89. taskledger-0.5.0/specs/behavior/features/legacy_cleanup_contracts/legacy-cleanup-contracts.feature +25 -0
  90. taskledger-0.5.0/specs/behavior/features/lifecycle_policies/lifecycle-policies.feature +19 -0
  91. taskledger-0.5.0/specs/behavior/features/lock_diagnostics/lock-diagnostics.feature +161 -0
  92. taskledger-0.5.0/specs/behavior/features/locks_audit/locks-audit.feature +20 -0
  93. taskledger-0.5.0/specs/behavior/features/models_v1_schema/models-v1-schema.feature +38 -0
  94. taskledger-0.5.0/specs/behavior/features/monitor/monitor.feature +81 -0
  95. taskledger-0.5.0/specs/behavior/features/next_action_expired_lock/next-action-expired-lock.feature +28 -0
  96. taskledger-0.5.0/specs/behavior/features/no_log_feature/no-log-feature.feature +169 -0
  97. taskledger-0.5.0/specs/behavior/features/plan_approval_contract/plan-approval-contract.feature +70 -0
  98. taskledger-0.5.0/specs/behavior/features/plan_lint/plan-lint.feature +189 -0
  99. taskledger-0.5.0/specs/behavior/features/plan_review/plan-review.feature +89 -0
  100. taskledger-0.5.0/specs/behavior/features/plan_revision_workflow/plan-revision-workflow.feature +64 -0
  101. taskledger-0.5.0/specs/behavior/features/plan_todo_materialization/plan-todo-materialization.feature +13 -0
  102. taskledger-0.5.0/specs/behavior/features/project_root_config/project-root-config.feature +200 -0
  103. taskledger-0.5.0/specs/behavior/features/question_add_many/question-add-many.feature +35 -0
  104. taskledger-0.5.0/specs/behavior/features/question_filter_answers/question-filter-answers.feature +53 -0
  105. taskledger-0.5.0/specs/behavior/features/question_plan_regeneration/question-plan-regeneration.feature +92 -0
  106. taskledger-0.5.0/specs/behavior/features/ready_work/ready-work.feature +26 -0
  107. taskledger-0.5.0/specs/behavior/features/release_changelog/release-changelog.feature +107 -0
  108. taskledger-0.5.0/specs/behavior/features/search/search.feature +33 -0
  109. taskledger-0.5.0/specs/behavior/features/service_boundaries/service-boundaries.feature +55 -0
  110. taskledger-0.5.0/specs/behavior/features/services_dashboard/services-dashboard.feature +101 -0
  111. taskledger-0.5.0/specs/behavior/features/sidecar_collections/sidecar-collections.feature +23 -0
  112. taskledger-0.5.0/specs/behavior/features/storage_bundle_layout/storage-bundle-layout.feature +71 -0
  113. taskledger-0.5.0/specs/behavior/features/storage_common/storage-common.feature +32 -0
  114. taskledger-0.5.0/specs/behavior/features/storage_init/storage-init.feature +27 -0
  115. taskledger-0.5.0/specs/behavior/features/storage_migration/storage-migration.feature +243 -0
  116. taskledger-0.5.0/specs/behavior/features/storage_repos/storage-repos.feature +80 -0
  117. taskledger-0.5.0/specs/behavior/features/storage_sync/storage-sync.feature +83 -0
  118. taskledger-0.5.0/specs/behavior/features/sync_git/sync-git.feature +88 -0
  119. taskledger-0.5.0/specs/behavior/features/task_archive/archive.feature +48 -0
  120. taskledger-0.5.0/specs/behavior/features/task_events/events.feature +50 -0
  121. taskledger-0.5.0/specs/behavior/features/task_markdown_export/markdown-export.feature +157 -0
  122. taskledger-0.5.0/specs/behavior/features/task_report/report.feature +154 -0
  123. taskledger-0.5.0/specs/behavior/features/taskledger_branch_scoped_ledgers/taskledger-branch-scoped-ledgers.feature +57 -0
  124. taskledger-0.5.0/specs/behavior/features/taskledger_cli_api_parity/taskledger-cli-api-parity.feature +36 -0
  125. taskledger-0.5.0/specs/behavior/features/taskledger_v2_cli/taskledger-v2-cli.feature +333 -0
  126. taskledger-0.5.0/specs/behavior/features/taskledger_v2_exchange/taskledger-v2-exchange.feature +191 -0
  127. taskledger-0.5.0/specs/behavior/features/tasks_service_static/tasks-service-static.feature +13 -0
  128. taskledger-0.5.0/specs/behavior/features/todo_implementation_gate/todo-implementation-gate.feature +181 -0
  129. taskledger-0.5.0/specs/behavior/features/trace/trace.feature +13 -0
  130. taskledger-0.5.0/specs/behavior/features/tree_command/tree-command.feature +161 -0
  131. taskledger-0.5.0/specs/behavior/features/usage_cli/usage-cli.feature +45 -0
  132. taskledger-0.5.0/specs/behavior/features/worker_pipeline_cli/worker-pipeline-cli.feature +88 -0
  133. taskledger-0.5.0/specs/behavior/features/worker_pipeline_config/worker-pipeline-config.feature +49 -0
  134. taskledger-0.5.0/specs/behavior/features/worker_pipeline_context/worker-pipeline-context.feature +48 -0
  135. taskledger-0.5.0/specs/behavior/features/worker_pipeline_handoff/worker-pipeline-handoff.feature +29 -0
  136. taskledger-0.5.0/specs/behavior/features/worker_pipeline_plan_template/worker-pipeline-plan-template.feature +40 -0
  137. taskledger-0.5.0/specs/behavior/features/worker_pipeline_todos/worker-pipeline-todos.feature +20 -0
  138. taskledger-0.5.0/specs/behavior/features/workflow_guidance/workflow-guidance.feature +55 -0
  139. taskledger-0.5.0/specs/behavior/manifest.json +13836 -0
  140. taskledger-0.5.0/specs/behavior/mappings/.gitkeep +0 -0
  141. taskledger-0.5.0/specs/behavior/reports/specweave/.gitkeep +0 -0
  142. taskledger-0.5.0/specs/behavior/reports/specweave/coverage-gaps.md +330 -0
  143. taskledger-0.5.0/specs/behavior/reports/specweave/coverage.json +99522 -0
  144. taskledger-0.5.0/specs/behavior/reports/specweave/mappings.json +7352 -0
  145. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/_version.py +3 -3
  146. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/handoff.py +3 -2
  147. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/releases.py +0 -2
  148. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/tasks.py +4 -0
  149. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli.py +150 -108
  150. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_common.py +24 -3
  151. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_implement.py +11 -12
  152. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_ledger.py +22 -11
  153. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_misc.py +195 -2
  154. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_plan.py +1 -0
  155. taskledger-0.5.0/taskledger/cli_ref.py +78 -0
  156. taskledger-0.5.0/taskledger/cli_release.py +91 -0
  157. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_task.py +52 -3
  158. taskledger-0.5.0/taskledger/cli_trace.py +29 -0
  159. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_validate.py +12 -0
  160. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/command_inventory.py +59 -28
  161. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/actor.py +11 -0
  162. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/models.py +2 -0
  163. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/release.py +0 -3
  164. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/run.py +19 -0
  165. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/sidecars.py +17 -0
  166. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/states.py +2 -0
  167. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/exchange.py +2 -0
  168. taskledger-0.5.0/taskledger/ids.py +82 -0
  169. taskledger-0.5.0/taskledger/py.typed +0 -0
  170. taskledger-0.5.0/taskledger/refs.py +81 -0
  171. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/actors.py +132 -17
  172. taskledger-0.5.0/taskledger/services/command_runner.py +43 -0
  173. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/dashboard.py +2 -4
  174. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/doctor.py +40 -1
  175. taskledger-0.5.0/taskledger/services/file_links.py +233 -0
  176. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/git_utils.py +49 -0
  177. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/implementation_flow.py +58 -14
  178. taskledger-0.5.0/taskledger/services/lock_diagnostics.py +526 -0
  179. taskledger-0.5.0/taskledger/services/monitor.py +344 -0
  180. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/navigation.py +142 -8
  181. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/next_action_payload.py +3 -3
  182. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/plan_hash.py +5 -2
  183. taskledger-0.5.0/taskledger/services/ready_work.py +90 -0
  184. taskledger-0.5.0/taskledger/services/releases.py +201 -0
  185. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/run_store.py +34 -3
  186. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_archive.py +36 -1
  187. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_collections.py +69 -9
  188. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_events.py +2 -7
  189. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_reports.py +5 -1
  190. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/tasks.py +52 -13
  191. taskledger-0.5.0/taskledger/services/trace.py +58 -0
  192. taskledger-0.5.0/taskledger/services/usage.py +398 -0
  193. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/validation.py +5 -1
  194. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/validation_flow.py +88 -3
  195. taskledger-0.5.0/taskledger/storage/atomic.py +43 -0
  196. taskledger-0.5.0/taskledger/storage/common.py +111 -0
  197. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/events.py +4 -2
  198. taskledger-0.5.0/taskledger/storage/frontmatter.py +51 -0
  199. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/indexes.py +8 -0
  200. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/ledger_config.py +64 -0
  201. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/locks.py +15 -15
  202. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/meta.py +3 -11
  203. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/paths.py +4 -6
  204. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/project_config.py +47 -4
  205. taskledger-0.5.0/taskledger/storage/sidecar_index.py +369 -0
  206. taskledger-0.5.0/taskledger/storage/task_index.py +356 -0
  207. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/task_store.py +158 -49
  208. taskledger-0.5.0/taskledger/storage/yaml_store.py +43 -0
  209. taskledger-0.5.0/taskledger/timeutils.py +5 -0
  210. {taskledger-0.4.2 → taskledger-0.5.0/taskledger.egg-info}/PKG-INFO +96 -32
  211. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger.egg-info/SOURCES.txt +139 -25
  212. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger.egg-info/requires.txt +1 -2
  213. taskledger-0.5.0/tests/__init__.py +0 -0
  214. {taskledger-0.4.2 → taskledger-0.5.0}/tests/conftest.py +74 -1
  215. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_active_task.py +16 -0
  216. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_actor_harness_state.py +58 -0
  217. taskledger-0.5.0/tests/test_actor_resolution.py +213 -0
  218. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_agent_command_logging.py +56 -3
  219. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_agent_session_protocol.py +87 -9
  220. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_atomic_fast_io.py +6 -2
  221. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_cli_command_contract.py +96 -1
  222. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_cli_import_resilience.py +13 -0
  223. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_code_reviews.py +16 -0
  224. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_command_example_linter.py +6 -1
  225. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_command_inventory.py +33 -9
  226. taskledger-0.5.0/tests/test_command_runner.py +43 -0
  227. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_compact_mutation_output.py +56 -0
  228. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_config_cli.py +20 -0
  229. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_delta_remaining_contracts.py +181 -0
  230. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_docs_and_skill.py +130 -5
  231. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_doctor.py +67 -0
  232. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_domain_policies.py +142 -0
  233. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_event_logging_config.py +58 -81
  234. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_events.py +6 -0
  235. taskledger-0.5.0/tests/test_file_link_snapshots.py +271 -0
  236. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_find_code_clones_script.py +2 -0
  237. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_handoff_lifecycle.py +29 -0
  238. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_help_subprocess.py +11 -0
  239. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_implementation_change_scan.py +48 -0
  240. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_implementation_checks.py +16 -0
  241. taskledger-0.5.0/tests/test_import_boundaries.py +115 -0
  242. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_json_contracts.py +26 -0
  243. taskledger-0.5.0/tests/test_ledgercore_dependency.py +33 -0
  244. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_legacy_cleanup_contracts.py +30 -0
  245. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_lifecycle_policies.py +11 -0
  246. taskledger-0.5.0/tests/test_lock_diagnostics.py +568 -0
  247. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_locks_audit.py +4 -0
  248. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_models_v1_schema.py +11 -1
  249. taskledger-0.5.0/tests/test_monitor.py +365 -0
  250. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_next_action_expired_lock.py +26 -0
  251. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_no_log_feature.py +48 -0
  252. taskledger-0.5.0/tests/test_performance_caching.py +158 -0
  253. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_plan_approval_contract.py +39 -0
  254. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_plan_lint.py +58 -0
  255. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_plan_review.py +20 -0
  256. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_plan_revision_workflow.py +37 -0
  257. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_plan_todo_materialization.py +11 -0
  258. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_project_root_config.py +141 -6
  259. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_question_add_many.py +19 -0
  260. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_question_filter_answers.py +14 -0
  261. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_question_plan_regeneration.py +115 -0
  262. taskledger-0.5.0/tests/test_ready_work.py +134 -0
  263. taskledger-0.5.0/tests/test_release_changelog.py +273 -0
  264. taskledger-0.5.0/tests/test_resource_refs.py +63 -0
  265. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_search.py +6 -0
  266. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_service_boundaries.py +77 -22
  267. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_services_dashboard.py +20 -130
  268. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_sidecar_collections.py +2 -0
  269. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_storage_bundle_layout.py +21 -2
  270. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_storage_common.py +9 -1
  271. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_storage_init.py +6 -0
  272. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_storage_migration.py +84 -1
  273. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_storage_repos.py +24 -0
  274. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_storage_sync.py +20 -0
  275. taskledger-0.5.0/tests/test_storage_yaml_store.py +87 -0
  276. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_sync_git.py +19 -1
  277. taskledger-0.5.0/tests/test_task_archive.py +563 -0
  278. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_task_events.py +12 -0
  279. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_task_markdown_export.py +74 -0
  280. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_task_report.py +34 -78
  281. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_taskledger_branch_scoped_ledgers.py +58 -1
  282. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_taskledger_cli_api_parity.py +37 -4
  283. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_taskledger_v2_cli.py +371 -0
  284. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_taskledger_v2_exchange.py +71 -0
  285. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_tasks_service_static.py +11 -0
  286. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_todo_implementation_gate.py +185 -0
  287. taskledger-0.5.0/tests/test_trace.py +42 -0
  288. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_tree_command.py +36 -0
  289. taskledger-0.5.0/tests/test_usage_cli.py +197 -0
  290. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_worker_pipeline_cli.py +32 -0
  291. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_worker_pipeline_config.py +26 -0
  292. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_worker_pipeline_context.py +25 -0
  293. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_worker_pipeline_handoff.py +6 -0
  294. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_worker_pipeline_plan_template.py +41 -0
  295. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_worker_pipeline_todos.py +4 -0
  296. {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_workflow_guidance.py +12 -0
  297. taskledger-0.4.2/.archledger/records/building_blocks/al_block_0030.md +0 -24
  298. taskledger-0.4.2/.archledger/records/building_blocks/al_block_0032.md +0 -22
  299. taskledger-0.4.2/.archledger/records/building_blocks/al_block_0033.md +0 -22
  300. taskledger-0.4.2/.archledger/records/building_blocks/al_block_0034.md +0 -22
  301. taskledger-0.4.2/.archledger/records/concepts/al_concept_0044.md +0 -16
  302. taskledger-0.4.2/.archledger/records/constraints/al_constraint_0016.md +0 -17
  303. taskledger-0.4.2/.archledger/records/risks/al_risk_0060.md +0 -18
  304. taskledger-0.4.2/.archledger/source-state.json +0 -754
  305. taskledger-0.4.2/taskledger/cli_release.py +0 -192
  306. taskledger-0.4.2/taskledger/cli_report.py +0 -171
  307. taskledger-0.4.2/taskledger/ids.py +0 -40
  308. taskledger-0.4.2/taskledger/services/command_runner.py +0 -22
  309. taskledger-0.4.2/taskledger/services/html_reports.py +0 -300
  310. taskledger-0.4.2/taskledger/services/markdown_html.py +0 -67
  311. taskledger-0.4.2/taskledger/services/releases.py +0 -712
  312. taskledger-0.4.2/taskledger/services/serve_read_model.py +0 -929
  313. taskledger-0.4.2/taskledger/services/web_dashboard.py +0 -239
  314. taskledger-0.4.2/taskledger/storage/atomic.py +0 -81
  315. taskledger-0.4.2/taskledger/storage/common.py +0 -90
  316. taskledger-0.4.2/taskledger/storage/frontmatter.py +0 -57
  317. taskledger-0.4.2/taskledger/templates/__init__.py +0 -1
  318. taskledger-0.4.2/taskledger/templates/base.html +0 -64
  319. taskledger-0.4.2/taskledger/templates/error.html +0 -6
  320. taskledger-0.4.2/taskledger/templates/site_index.html +0 -42
  321. taskledger-0.4.2/taskledger/templates/task_report.html +0 -37
  322. taskledger-0.4.2/taskledger/timeutils.py +0 -7
  323. taskledger-0.4.2/tests/test_html_reports.py +0 -182
  324. taskledger-0.4.2/tests/test_release_changelog.py +0 -684
  325. taskledger-0.4.2/tests/test_serve_dashboard.py +0 -204
  326. taskledger-0.4.2/tests/test_task_archive.py +0 -220
  327. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0001.md +0 -0
  328. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0003.md +0 -0
  329. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0009.md +0 -0
  330. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0010.md +0 -0
  331. {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0012.md +0 -0
  332. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/building_blocks/al_block_0031.md +0 -0
  333. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/concepts/al_concept_0040.md +0 -0
  334. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/concepts/al_concept_0041.md +0 -0
  335. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/concepts/al_concept_0042.md +0 -0
  336. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/concepts/al_concept_0043.md +0 -0
  337. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/concepts/al_concept_0045.md +0 -0
  338. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/constraints/al_constraint_0017.md +0 -0
  339. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/constraints/al_constraint_0018.md +0 -0
  340. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/constraints/al_constraint_0019.md +0 -0
  341. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/contexts/al_context_0020.md +0 -0
  342. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/contexts/al_context_0021.md +0 -0
  343. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/contexts/al_context_0022.md +0 -0
  344. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/contexts/al_context_0023.md +0 -0
  345. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0061.md +0 -0
  346. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0062.md +0 -0
  347. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0063.md +0 -0
  348. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0064.md +0 -0
  349. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0065.md +0 -0
  350. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0066.md +0 -0
  351. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0067.md +0 -0
  352. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0068.md +0 -0
  353. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0069.md +0 -0
  354. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0070.md +0 -0
  355. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0071.md +0 -0
  356. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0072.md +0 -0
  357. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0073.md +0 -0
  358. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/quality_requirements/al_quality_0052.md +0 -0
  359. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/quality_requirements/al_quality_0053.md +0 -0
  360. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/quality_requirements/al_quality_0054.md +0 -0
  361. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/quality_requirements/al_quality_0055.md +0 -0
  362. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/quality_requirements/al_quality_0056.md +0 -0
  363. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/requirements/al_content_0013.md +0 -0
  364. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/requirements/al_content_0014.md +0 -0
  365. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/requirements/al_content_0015.md +0 -0
  366. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/risks/al_risk_0057.md +0 -0
  367. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/risks/al_risk_0058.md +0 -0
  368. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/risks/al_risk_0059.md +0 -0
  369. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0035.md +0 -0
  370. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0036.md +0 -0
  371. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0037.md +0 -0
  372. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0038.md +0 -0
  373. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0074.md +0 -0
  374. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0075.md +0 -0
  375. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0077.md +0 -0
  376. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0078.md +0 -0
  377. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/stakeholders/al_content_0079.md +0 -0
  378. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/strategy/al_strategy_0024.md +0 -0
  379. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/strategy/al_strategy_0025.md +0 -0
  380. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/strategy/al_strategy_0026.md +0 -0
  381. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/strategy/al_strategy_0027.md +0 -0
  382. {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/strategy/al_strategy_0028.md +0 -0
  383. {taskledger-0.4.2 → taskledger-0.5.0}/.github/workflows/codecov.yml +0 -0
  384. {taskledger-0.4.2 → taskledger-0.5.0}/.github/workflows/pre-commit.yml +0 -0
  385. {taskledger-0.4.2 → taskledger-0.5.0}/.github/workflows/python-publish.yml +0 -0
  386. {taskledger-0.4.2 → taskledger-0.5.0}/.gitignore +0 -0
  387. {taskledger-0.4.2 → taskledger-0.5.0}/.pre-commit-config.yaml +0 -0
  388. {taskledger-0.4.2 → taskledger-0.5.0}/.readthedocs.yaml +0 -0
  389. {taskledger-0.4.2 → taskledger-0.5.0}/.ruff.toml +0 -0
  390. {taskledger-0.4.2 → taskledger-0.5.0}/LICENSE +0 -0
  391. {taskledger-0.4.2 → taskledger-0.5.0}/Makefile +0 -0
  392. {taskledger-0.4.2 → taskledger-0.5.0}/docs/Makefile +0 -0
  393. {taskledger-0.4.2 → taskledger-0.5.0}/docs/architecture_taskledger_split.rst +0 -0
  394. {taskledger-0.4.2 → taskledger-0.5.0}/docs/build.sh +0 -0
  395. {taskledger-0.4.2 → taskledger-0.5.0}/docs/conf.py +0 -0
  396. {taskledger-0.4.2 → taskledger-0.5.0}/docs/index.rst +0 -0
  397. {taskledger-0.4.2 → taskledger-0.5.0}/docs/multi_repo.rst +0 -0
  398. {taskledger-0.4.2 → taskledger-0.5.0}/docs/requirements.txt +0 -0
  399. {taskledger-0.4.2 → taskledger-0.5.0}/docs/transfer.rst +0 -0
  400. {taskledger-0.4.2 → taskledger-0.5.0}/scripts/find_code_clones.py +0 -0
  401. {taskledger-0.4.2 → taskledger-0.5.0}/setup.cfg +0 -0
  402. {taskledger-0.4.2 → taskledger-0.5.0}/setup.py +0 -0
  403. /taskledger-0.4.2/taskledger/py.typed → /taskledger-0.5.0/specs/behavior/evidence/.gitkeep +0 -0
  404. /taskledger-0.4.2/tests/__init__.py → /taskledger-0.5.0/specs/behavior/features/.gitkeep +0 -0
  405. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/__init__.py +0 -0
  406. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/__main__.py +0 -0
  407. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/__init__.py +0 -0
  408. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/config.py +0 -0
  409. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/introductions.py +0 -0
  410. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/locks.py +0 -0
  411. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/plans.py +0 -0
  412. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/project.py +0 -0
  413. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/questions.py +0 -0
  414. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/reviews.py +0 -0
  415. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/search.py +0 -0
  416. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/storage.py +0 -0
  417. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/sync.py +0 -0
  418. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/task_runs.py +0 -0
  419. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_actor.py +0 -0
  420. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_archive.py +0 -0
  421. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_config.py +0 -0
  422. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_migrate.py +0 -0
  423. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_pipeline.py +0 -0
  424. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_question.py +0 -0
  425. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_review.py +0 -0
  426. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_storage.py +0 -0
  427. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_sync.py +0 -0
  428. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/__init__.py +0 -0
  429. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/_model_utils.py +0 -0
  430. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/active_state.py +0 -0
  431. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/change.py +0 -0
  432. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/check.py +0 -0
  433. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/event.py +0 -0
  434. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/handoff.py +0 -0
  435. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/lock.py +0 -0
  436. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/plan.py +0 -0
  437. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/policies.py +0 -0
  438. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/question.py +0 -0
  439. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/review.py +0 -0
  440. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/task.py +0 -0
  441. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/errors.py +0 -0
  442. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/launcher.py +0 -0
  443. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/search.py +0 -0
  444. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/__init__.py +0 -0
  445. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/agent_logging.py +0 -0
  446. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/agent_transcripts.py +0 -0
  447. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/change_tracking.py +0 -0
  448. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/check_tracking.py +0 -0
  449. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/code_review.py +0 -0
  450. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/doctor_checks/migration_checks.py +0 -0
  451. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/doctor_checks/project_scan.py +0 -0
  452. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/doctor_checks/task_checks.py +0 -0
  453. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/event_logging.py +0 -0
  454. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/git_sync.py +0 -0
  455. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/handoff.py +0 -0
  456. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/handoff_lifecycle.py +0 -0
  457. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/next_action_model.py +0 -0
  458. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/phase5_lock_transfer.py +0 -0
  459. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/plan_editing.py +0 -0
  460. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/plan_lint.py +0 -0
  461. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/plan_materialization.py +0 -0
  462. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/plan_review.py +0 -0
  463. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/planning_flow.py +0 -0
  464. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/storage_locations.py +0 -0
  465. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_export.py +0 -0
  466. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_lifecycle.py +0 -0
  467. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_queries.py +0 -0
  468. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_repair.py +0 -0
  469. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/tree.py +0 -0
  470. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/worker_context.py +0 -0
  471. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/worker_pipeline.py +0 -0
  472. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/workflow_guidance.py +0 -0
  473. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/__init__.py +0 -0
  474. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/agent_logs.py +0 -0
  475. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/init.py +0 -0
  476. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/migrations.py +0 -0
  477. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/project_identity.py +0 -0
  478. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/repos.py +0 -0
  479. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/toml_edit.py +0 -0
  480. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/worker_pipeline_config.py +0 -0
  481. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger.egg-info/dependency_links.txt +0 -0
  482. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger.egg-info/entry_points.txt +0 -0
  483. {taskledger-0.4.2 → taskledger-0.5.0}/taskledger.egg-info/top_level.txt +0 -0
  484. {taskledger-0.4.2 → taskledger-0.5.0}/tests/support/__init__.py +0 -0
  485. {taskledger-0.4.2 → taskledger-0.5.0}/tests/support/builders.py +0 -0
  486. {taskledger-0.4.2 → taskledger-0.5.0}/tests/support/fake_command_runner.py +0 -0
@@ -0,0 +1,41 @@
1
+ ---
2
+ schema_version: 2
3
+ id: al_block_0083
4
+ type: black_box
5
+ title: Human Presentation Layer
6
+ status: archived
7
+ section: building_block_view
8
+ level: 1
9
+ parent: al_block_0029
10
+ order: 60
11
+ date: "2026-06-07"
12
+ interfaces:
13
+ - Service read models -> terminal TUI
14
+ - Dashboard/report payloads -> HTML or Markdown
15
+ location:
16
+ - taskledger/tui/
17
+ - taskledger/services/tui_read_model.py
18
+ - taskledger/services/dashboard.py
19
+ - taskledger/services/task_reports.py
20
+ fulfilled_requirements: []
21
+ risks: []
22
+ tags: []
23
+ body_format: markdown
24
+ created_at: "2026-06-07T11:49:59Z"
25
+ updated_at: "2026-06-11T20:53:29Z"
26
+ source_refs:
27
+ - path: taskledger/tui/
28
+ role: implements
29
+ - path: taskledger/services/tui_read_model.py
30
+ role: implements
31
+ test_refs:
32
+ - tests/test_tui_cli.py
33
+ - tests/test_tui_read_model.py
34
+ archived_at: "2026-06-11T20:53:29Z"
35
+ archived_reason: TUI and HTML dashboard removed from taskledger; task-0126 ledger-isolation
36
+ archived_from: records/building_blocks/al_block_0083.md
37
+ ---
38
+
39
+ Optional human-facing views over the same durable task records used by CLI and API operations. The Textual TUI presents task lists, plan review, todos, implementation, code reviews, validation, files, events, and raw reports. HTML dashboard and Markdown report services provide related inspection and sharing views.
40
+
41
+ This layer is read-only with respect to lifecycle state. Users invoke explicit CLI commands for mutations, preserving approval, lock, todo, and validation gates.
@@ -0,0 +1,32 @@
1
+ ---
2
+ schema_version: 2
3
+ id: al_concept_0081
4
+ type: concept
5
+ title: BDD traceability and report evidence
6
+ status: archived
7
+ section: cross_cutting_concepts
8
+ order: 70
9
+ date: "2026-06-07"
10
+ applies_to: []
11
+ body_format: markdown
12
+ created_at: "2026-06-07T11:49:58Z"
13
+ updated_at: "2026-06-11T20:53:29Z"
14
+ source_refs:
15
+ - path: taskledger/domain/bdd.py
16
+ role: implements
17
+ - path: taskledger/services/bdd_gherkin.py
18
+ role: implements
19
+ - path: taskledger/services/bdd_reports.py
20
+ role: implements
21
+ test_refs:
22
+ - tests/test_bdd_gherkin.py
23
+ - tests/test_bdd_report_import.py
24
+ - tests/test_bdd_validation_integration.py
25
+ archived_at: "2026-06-11T20:53:29Z"
26
+ archived_reason: BDD traceability removed from taskledger; task-0126 ledger-isolation
27
+ archived_from: records/concepts/al_concept_0081.md
28
+ ---
29
+
30
+ BDD is an optional traceability overlay on a managed task. Features contain rules and Given/When/Then examples. Examples can reference canonical acceptance-criterion IDs and Archledger record IDs.
31
+
32
+ Gherkin export is an exchange artifact, not canonical state. Stable tags preserve task, example, criterion, and architecture identities. Imported Cucumber JSON or JUnit XML is matched back to examples and persisted as report evidence that can contribute validation checks. Normal lifecycle and validation gates remain authoritative.
@@ -2,17 +2,20 @@
2
2
  schema_version: 2
3
3
  id: al_runtime_0076
4
4
  type: runtime_scenario
5
- title: "HTML report and serve dashboard"
6
- status: accepted
5
+ title: HTML report and serve dashboard
6
+ status: archived
7
7
  section: runtime_view
8
8
  order: 70
9
9
  date: "2026-05-23"
10
10
  participants: []
11
- trigger: "Developer runs taskledger report html or taskledger serve"
11
+ trigger: Developer runs taskledger report html or taskledger serve
12
12
  result: ""
13
13
  body_format: markdown
14
14
  created_at: "2026-05-23T19:30:00Z"
15
- updated_at: "2026-05-23T19:30:00Z"
15
+ updated_at: "2026-06-11T20:54:44Z"
16
+ archived_at: "2026-06-11T20:54:44Z"
17
+ archived_reason: HTML report and serve dashboard removed; task-0126 ledger-isolation
18
+ archived_from: records/runtime/al_runtime_0076.md
16
19
  ---
17
20
 
18
21
  **Trigger**: Developer runs `taskledger report html` or `taskledger serve`.
@@ -0,0 +1,42 @@
1
+ ---
2
+ schema_version: 2
3
+ id: al_runtime_0084
4
+ type: runtime_scenario
5
+ title: BDD example to validation evidence
6
+ status: archived
7
+ section: runtime_view
8
+ order: 100
9
+ date: "2026-06-07"
10
+ participants:
11
+ - coding agent
12
+ - taskledger CLI
13
+ - BDD services
14
+ - task storage
15
+ trigger: An actor wants executable examples linked to task acceptance criteria.
16
+ result: External automation results are persisted as traceable validation evidence.
17
+ body_format: markdown
18
+ created_at: "2026-06-07T11:50:18Z"
19
+ updated_at: "2026-06-11T20:53:29Z"
20
+ source_refs:
21
+ - path: taskledger/cli_bdd.py
22
+ role: implements
23
+ - path: taskledger/services/bdd_gherkin.py
24
+ role: implements
25
+ - path: taskledger/services/bdd_reports.py
26
+ role: implements
27
+ test_refs:
28
+ - tests/test_bdd_cli.py
29
+ - tests/test_bdd_validation_integration.py
30
+ archived_at: "2026-06-11T20:53:29Z"
31
+ archived_reason: BDD example scenario removed from taskledger; task-0126 ledger-isolation
32
+ archived_from: records/runtime/al_runtime_0084.md
33
+ ---
34
+
35
+ 1. An actor initializes task-local BDD/example records for a managed task.
36
+ 2. Each example links to acceptance-criterion IDs and may link to Archledger records.
37
+ 3. Canonical behavior specs live outside Taskledger under `specs/behavior/features/<area>/<feature>.feature`, owned by SpecWeave.
38
+ 4. Plain pytest files under `tests/test_<area>_<feature>.py` enforce the behavior and may emit JUnit XML under `reports/behavior/`.
39
+ 5. `bdd example link-automation` records metadata that links a task-local example to the external feature file, scenario tag/title, and pytest node id.
40
+ 6. `validate import-bdd-report` imports JUnit XML or Cucumber-compatible JSON evidence and matches it back to task-local examples.
41
+ 7. Matched results become validation evidence through normal validation checks; normal latest-check-wins and mandatory-criterion gates still decide completion.
42
+ 8. `bdd gherkin-export` remains a derived exchange/export command. It must not be presented as the canonical source of executable behavior.
@@ -14,7 +14,7 @@ updated_at: "2026-05-23T12:24:46Z"
14
14
 
15
15
  taskledger operates under several fixed constraints that shape its architecture:
16
16
 
17
- - **Python 3.10+ with minimal dependencies**: The runtime depends only on `typer`, `PyYAML`, `Jinja2`, `markdown-it-py`, and `tomli` (for Python <3.11). No database, no network server, no external service is required.
17
+ - **Python 3.10+ with minimal dependencies**: The runtime depends only on `typer`, `PyYAML`, and `tomli` (for Python <3.11). No database, no network server, no external service is required.
18
18
  - **File-system canonical storage**: All durable state lives in the project's `.taskledger/` directory as Markdown files with YAML front matter. This makes state inspectable, diffable, and version-controllable alongside source code.
19
19
  - **CLI-first with machine-readable JSON output**: The primary interface is the `taskledger` CLI command. Every command supports `--json` for structured output. The JSON envelope shape and exit codes are part of the public contract.
20
20
  - **Skills outside the package**: Agent skill files (e.g., `skills/taskledger/SKILL.md`) live outside the Python package and are never packaged as Python package data. The package provides the CLI/library; skill distribution is separate.
@@ -26,6 +26,7 @@ Key architectural choices:
26
26
  - **JSON indexes as derived caches** — Index files under `.taskledger/indexes/` are rebuilt from canonical records by `taskledger reindex`. They are never the source of truth.
27
27
  - **Policy-based gate decisions** — All lifecycle transitions go through functions in `taskledger/domain/policies.py` that return `Decision` objects with `allowed`, `code`, `message`, and `exit_code`. This keeps gate logic testable and separate from I/O.
28
28
  - **Atomic file writes** — All writes use `atomic_write_text` (write to temp, `os.replace`) to prevent partial writes on crash.
29
+ - **Evidence as sidecars** — Code-review records extend traceability without introducing new lifecycle stages or weakening validation gates.
29
30
 
30
31
  ## Maintenance
31
32
 
@@ -22,4 +22,4 @@ The top-level building block is the **taskledger system**, decomposed into five
22
22
 
23
23
  Data flows strictly downward: CLI → Services → Domain + Storage. The API layer calls Services directly. The Domain layer has no dependencies on Storage or Services.
24
24
 
25
- Each task is stored as a **task bundle directory** under `.taskledger/ledgers/<ledger_ref>/` containing the task record (Markdown) and sidecar collections for plans, runs, locks, todos, questions, changes, checks, handoffs, and links. When `[event_logging] enabled = true` in `taskledger.toml`, mutations append immutable `TaskEvent` records to the ledger-level `events/` directory. Event logging is disabled by default.
25
+ Each task is stored as a **task bundle directory** under `.taskledger/ledgers/<ledger_ref>/` containing the task record (Markdown) and sidecar collections for plans, runs, locks, todos, questions, changes, checks, handoffs, and links. Mutations append immutable `TaskEvent` records to the ledger-level `events/` directory. Action/event logging is enabled by default; set `[event_logging] enabled = false` in `taskledger.toml` to disable new event records. Existing records remain readable regardless.
@@ -18,3 +18,5 @@ The runtime view traces the main operational scenarios through the system:
18
18
  2. **Lock lifecycle** — Starting a stage (planning/implementation/validation) acquires a lock and creates a run. Locks have lease timers and heartbeats. Stale locks require explicit break flow with audit trail.
19
19
  3. **Handoff flow** — A worker creates a handoff with generated context (task state, plan, todos, questions, lock info). Another worker claims it, optionally transferring the lock. The handoff is closed when the receiving worker completes.
20
20
  4. **Doctor checks** — Inspects lock/run consistency, front matter integrity, index staleness, and storage layout version. Reports diagnostics with severity, code, and repair hints.
21
+ 5. **Validation evidence flow** — Acceptance criteria from the accepted plan are checked during the validation stage. Evidence is recorded per criterion with pass/fail/warn status. Latest-check-wins semantics apply; mandatory criteria gate completion.
22
+ 6. **Code-review evidence** — A reviewer records append-only review evidence against an implementation run, handoff, worker step, working tree, or commit. This is evidence attached to the task, not a new lifecycle stage.
@@ -16,6 +16,6 @@ taskledger is a single-node, file-system-based tool. Deployment consists of:
16
16
 
17
17
  - **Installation**: `pip install taskledger` (PyPI) or local `pip install -e .`
18
18
  - **Project initialization**: `taskledger init` creates `taskledger.toml` and `.taskledger/` in the project root
19
- - **Runtime**: The CLI runs as a Python process, reading and writing the project's `.taskledger/` directory. No daemon, no server (except optional `taskledger serve` for a local web dashboard).
19
+ - **Runtime**: The CLI runs as a Python process, reading and writing the project's `.taskledger/` directory. No daemon, no server.
20
20
  - **CI integration**: taskledger commands can be run in CI pipelines for status checks and validation
21
21
  - **Agent integration**: Agent harnesses invoke taskledger CLI commands as subprocess calls
@@ -18,5 +18,7 @@ Cross-cutting concerns that span multiple layers:
18
18
  - **JSON output envelope**: All CLI commands emit a consistent JSON envelope with `ok`, `command`, `result_type`, `result`, `events`, and `warnings` fields when `--json` is passed.
19
19
  - **YAML front matter serialization**: All canonical records use YAML front matter (`---` delimited) for metadata and Markdown for body. Serialization/deserialization is in `taskledger/storage/frontmatter.py`.
20
20
  - **Atomic file writes**: All file writes go through `atomic_write_text` (temp file → `os.replace` → directory fsync) to prevent corruption.
21
- - **Opt-in event logging**: When `[event_logging] enabled = true`, mutations append immutable `TaskEvent` records to the ledger-level `events/` directory under `.taskledger/ledgers/<ledger_ref>/`. When disabled (default), no new event records are written; existing records remain readable. Events track who did what, when, and why. Source: `taskledger/storage/events.py`, `taskledger/services/task_events.py`.
21
+ - **Action/event logging (default-on)**: Mutations append immutable `TaskEvent` records to the ledger-level `events/` directory under `.taskledger/ledgers/<ledger_ref>/`. Action/event logging is enabled by default; set `[event_logging] enabled = false` to disable new records. Existing records remain readable. Events track who did what, when, and why. Source: `taskledger/storage/events.py`, `taskledger/services/task_events.py`.
22
22
  - **Exit code taxonomy**: Errors map to stable exit codes (0=success, 1=generic, 2=bad input, 3=workflow rejection, 4=lock conflict, 5=missing, 6=storage, 7=validation failed).
23
+ - **Opaque cross-ledger references**: Links and file references remain opaque strings. Taskledger does not interpret archledger IDs, SpecWeave feature paths, or other external system references.
24
+ - **Read-model reuse**: `view` and `status` commands consume service-level read models. These presentations are read-only and do not bypass lifecycle services.
@@ -17,4 +17,4 @@ Known risks and areas of technical debt:
17
17
  - **Storage scaling with many tasks**: Each task is a directory with multiple sidecar files. Very large projects (hundreds of tasks) may see slowdowns in list/query operations since indexes are rebuilt from file scans.
18
18
  - **Migration surface between storage versions**: The storage layout has evolved (currently v3). Migration code in `taskledger/storage/migrations.py` adds complexity. Future format changes must maintain backward compatibility.
19
19
  - **Service boundary erosion**: Some service modules (notably `tasks.py`) have grown large. The service layer has no formal interface contracts — boundaries are enforced by convention and tests (`test_service_boundaries.py`).
20
- - **Growing dependency count**: Jinja2 is used only for HTML report templates. The dependency is justified by the `serve` and `task report` features but adds weight for users who only need the CLI.
20
+ - **Growing dependency count**: The dependency set is small (typer, PyYAML, tomli) but new dependencies must be justified by core features, not optional presentations.
@@ -14,12 +14,12 @@ quality_characteristics: []
14
14
  tags: []
15
15
  body_format: markdown
16
16
  created_at: "2026-05-23T12:30:16Z"
17
- updated_at: "2026-05-23T12:30:16Z"
17
+ updated_at: "2026-06-11T21:00:00Z"
18
18
  ---
19
19
 
20
20
  ## Motivation
21
21
 
22
- taskledger decomposes into five layers with strict downward dependency flow. This decomposition isolates I/O (storage), business rules (domain), orchestration (services), and presentation (CLI/API).
22
+ taskledger decomposes into core layers with downward dependency flow. This isolates persistence, business rules, orchestration, and public interfaces.
23
23
 
24
24
  ## Contained building blocks
25
25
 
@@ -0,0 +1,24 @@
1
+ ---
2
+ schema_version: 2
3
+ id: al_block_0030
4
+ type: black_box
5
+ title: "CLI Layer"
6
+ status: accepted
7
+ section: building_block_view
8
+ level: 1
9
+ parent: al_block_0029
10
+ order: 10
11
+ date: "2026-05-23"
12
+ interfaces: []
13
+ location: []
14
+ fulfilled_requirements: []
15
+ risks: []
16
+ tags: []
17
+ body_format: markdown
18
+ created_at: "2026-05-23T12:30:23Z"
19
+ updated_at: "2026-06-11T21:00:00Z"
20
+ ---
21
+
22
+ Handles command parsing via Typer, task reference resolution (`--task` option, active task default), and output rendering (human text or JSON envelope via `cli_common.py`). Command families include the canonical lifecycle plus `review`, `config`, task archive operations, transfer/sync, diagnostics, and the `monitor` observer.
23
+
24
+ Source refs: `taskledger/cli.py`, `taskledger/cli_common.py`, `taskledger/command_inventory.py`, and the focused `taskledger/cli_*.py` registration modules.
@@ -0,0 +1,22 @@
1
+ ---
2
+ schema_version: 2
3
+ id: al_block_0032
4
+ type: black_box
5
+ title: "Services Layer"
6
+ status: proposed
7
+ section: building_block_view
8
+ level: 1
9
+ parent: al_block_0029
10
+ order: 30
11
+ date: "2026-05-23"
12
+ interfaces: []
13
+ location: []
14
+ fulfilled_requirements: []
15
+ risks: []
16
+ tags: []
17
+ body_format: markdown
18
+ created_at: "2026-05-23T12:30:29Z"
19
+ updated_at: "2026-06-11T21:00:00Z"
20
+ ---
21
+
22
+ Orchestrates lifecycle flows by coordinating Domain policies and records with Storage. Focused services own planning, implementation, validation, handoffs, doctor checks, navigation, worker pipelines, archival, code-review evidence, event logging, exports, dashboard assembly, and ready-work inspection. `tasks.py` remains the compatibility-oriented lifecycle facade while ownership is progressively extracted into focused modules.
@@ -0,0 +1,22 @@
1
+ ---
2
+ schema_version: 2
3
+ id: al_block_0033
4
+ type: black_box
5
+ title: "Domain Layer"
6
+ status: proposed
7
+ section: building_block_view
8
+ level: 1
9
+ parent: al_block_0029
10
+ order: 40
11
+ date: "2026-05-23"
12
+ interfaces: []
13
+ location: []
14
+ fulfilled_requirements: []
15
+ risks: []
16
+ tags: []
17
+ body_format: markdown
18
+ created_at: "2026-05-23T12:30:29Z"
19
+ updated_at: "2026-06-11T21:00:00Z"
20
+ ---
21
+
22
+ Data models, state enums, normalization, and policy decisions without storage I/O. Besides lifecycle and sidecar records, the domain defines append-only code-review records. State transitions remain in `states.py`; policy decisions in `policies.py` return structured `Decision` objects.
@@ -0,0 +1,22 @@
1
+ ---
2
+ schema_version: 2
3
+ id: al_block_0034
4
+ type: black_box
5
+ title: "Storage Layer"
6
+ status: proposed
7
+ section: building_block_view
8
+ level: 1
9
+ parent: al_block_0029
10
+ order: 50
11
+ date: "2026-05-23"
12
+ interfaces: []
13
+ location: []
14
+ fulfilled_requirements: []
15
+ risks: []
16
+ tags: []
17
+ body_format: markdown
18
+ created_at: "2026-05-23T12:30:29Z"
19
+ updated_at: "2026-06-11T21:00:00Z"
20
+ ---
21
+
22
+ File system persistence for canonical records. Storage layout keeps each task in `.taskledger/ledgers/<ledger_ref>/tasks/<task-id>/`, with independently addressable sidecars including plans, runs, locks, todos, questions, changes, checks, handoffs, links, and code reviews. Ledger-level collections hold events, introductions, releases, and rebuildable indexes. Action/event logging is enabled by default and can be disabled in project config. Project config edits use structured TOML handling rather than ad hoc text replacement.
@@ -0,0 +1,16 @@
1
+ ---
2
+ schema_version: 2
3
+ id: al_concept_0044
4
+ type: concept
5
+ title: "Append-only event log"
6
+ status: proposed
7
+ section: cross_cutting_concepts
8
+ order: 50
9
+ date: "2026-05-23"
10
+ applies_to: []
11
+ body_format: markdown
12
+ created_at: "2026-05-23T12:31:01Z"
13
+ updated_at: "2026-05-23T12:31:01Z"
14
+ ---
15
+
16
+ Mutations append an immutable `TaskEvent` record to the ledger-level `events/` directory under `.taskledger/ledgers/<ledger_ref>/`. Action/event logging is enabled by default; set `[event_logging] enabled = false` in `taskledger.toml` to disable new event records. Existing records remain readable regardless of the setting. Events are never modified or deleted. Each event has a deterministic ID, name (e.g., `task.created`, `plan.approved`, `lock.acquired`, `validation.check.logged`, `code_review.recorded`), timestamp, and actor metadata. Events support audit trails, monitor activity, handoff context, and `task transcript` output. Duplicate event detection prevents re-appending on retry. Source: `taskledger/storage/events.py`, `taskledger/services/task_events.py`, `taskledger/domain/event.py`.
@@ -0,0 +1,25 @@
1
+ ---
2
+ schema_version: 2
3
+ id: al_concept_0082
4
+ type: concept
5
+ title: "Durable code-review evidence"
6
+ status: proposed
7
+ section: cross_cutting_concepts
8
+ order: 80
9
+ date: "2026-06-07"
10
+ applies_to: []
11
+ body_format: markdown
12
+ created_at: "2026-06-07T11:49:59Z"
13
+ updated_at: "2026-06-07T11:49:59Z"
14
+ source_refs:
15
+ - path: taskledger/domain/review.py
16
+ role: implements
17
+ - path: taskledger/services/code_review.py
18
+ role: implements
19
+ test_refs:
20
+ - tests/test_code_reviews.py
21
+ ---
22
+
23
+ Code review is durable evidence attached to a task. A record captures result, summary/body, reviewer and harness, implementation run, worker step, handoff, and optional Git working-tree or commit metadata.
24
+
25
+ Review records are append-only and may be recorded after a task reaches `done`. They do not create a lifecycle stage, reopen completed work, replace acceptance criteria, or weaken validation completion rules.
@@ -0,0 +1,17 @@
1
+ ---
2
+ schema_version: 2
3
+ id: al_constraint_0016
4
+ type: constraint
5
+ title: "Python 3.10+ with minimal dependencies"
6
+ status: proposed
7
+ section: architecture_constraints
8
+ order: 10
9
+ date: "2026-05-23"
10
+ category: technical
11
+ impact: "Limits runtime to Python 3.10+ with three dependencies; no database or native extensions."
12
+ body_format: markdown
13
+ created_at: "2026-05-23T12:29:53Z"
14
+ updated_at: "2026-06-11T21:00:00Z"
15
+ ---
16
+
17
+ Runtime dependencies are limited to `typer`, `PyYAML`, and `tomli` (Python <3.11 only). This constraint ensures easy installation in constrained environments (CI, containers, Termux) and avoids dependency conflicts with host projects. The trade-off is that features like full-text search use pure-Python implementations rather than native libraries.
@@ -2,18 +2,25 @@
2
2
  schema_version: 2
3
3
  id: al_adr_0046
4
4
  type: adr
5
- title: "Markdown/YAML front matter as canonical format"
5
+ title: Markdown/YAML front matter as canonical format
6
6
  status: accepted
7
7
  section: architecture_decisions
8
8
  order: 10
9
9
  date: "2026-05-23"
10
- deciders: []
10
+ deciders:
11
+ - taskledger maintainers
11
12
  supersedes: []
12
13
  related: []
13
14
  tags: []
14
15
  body_format: markdown
15
16
  created_at: "2026-05-23T12:31:02Z"
16
- updated_at: "2026-05-23T12:31:02Z"
17
+ updated_at: "2026-06-07T11:50:15Z"
18
+ source_refs:
19
+ - path: taskledger/storage/frontmatter.py
20
+ role: implements
21
+ reason: Canonical Markdown/YAML serialization
22
+ test_refs:
23
+ - tests/test_storage_bundle_layout.py
17
24
  ---
18
25
 
19
26
  ## Context
@@ -2,18 +2,25 @@
2
2
  schema_version: 2
3
3
  id: al_adr_0047
4
4
  type: adr
5
- title: "JSON indexes as derived rebuildable caches"
5
+ title: JSON indexes as derived rebuildable caches
6
6
  status: accepted
7
7
  section: architecture_decisions
8
8
  order: 20
9
9
  date: "2026-05-23"
10
- deciders: []
10
+ deciders:
11
+ - taskledger maintainers
11
12
  supersedes: []
12
13
  related: []
13
14
  tags: []
14
15
  body_format: markdown
15
16
  created_at: "2026-05-23T12:31:02Z"
16
- updated_at: "2026-05-23T12:31:02Z"
17
+ updated_at: "2026-06-07T11:50:16Z"
18
+ source_refs:
19
+ - path: taskledger/storage/task_store.py
20
+ role: implements
21
+ reason: Derived index paths and rebuildable cache contract
22
+ test_refs:
23
+ - tests/test_storage_sync.py
17
24
  ---
18
25
 
19
26
  ## Context
@@ -2,18 +2,25 @@
2
2
  schema_version: 2
3
3
  id: al_adr_0048
4
4
  type: adr
5
- title: "Explicit lifecycle gates with policy decisions"
5
+ title: Explicit lifecycle gates with policy decisions
6
6
  status: accepted
7
7
  section: architecture_decisions
8
8
  order: 30
9
9
  date: "2026-05-23"
10
- deciders: []
10
+ deciders:
11
+ - taskledger maintainers
11
12
  supersedes: []
12
13
  related: []
13
14
  tags: []
14
15
  body_format: markdown
15
16
  created_at: "2026-05-23T12:31:02Z"
16
- updated_at: "2026-05-23T12:31:02Z"
17
+ updated_at: "2026-06-07T11:50:16Z"
18
+ source_refs:
19
+ - path: taskledger/domain/policies.py
20
+ role: implements
21
+ reason: Lifecycle gate decisions
22
+ test_refs:
23
+ - tests/test_domain_policies.py
17
24
  ---
18
25
 
19
26
  ## Context
@@ -2,18 +2,25 @@
2
2
  schema_version: 2
3
3
  id: al_adr_0049
4
4
  type: adr
5
- title: "Typer CLI framework"
5
+ title: Typer CLI framework
6
6
  status: accepted
7
7
  section: architecture_decisions
8
8
  order: 40
9
9
  date: "2026-05-23"
10
- deciders: []
10
+ deciders:
11
+ - taskledger maintainers
11
12
  supersedes: []
12
13
  related: []
13
14
  tags: []
14
15
  body_format: markdown
15
16
  created_at: "2026-05-23T12:31:03Z"
16
- updated_at: "2026-05-23T12:31:03Z"
17
+ updated_at: "2026-06-07T11:50:17Z"
18
+ source_refs:
19
+ - path: taskledger/cli.py
20
+ role: implements
21
+ reason: Root Typer application and command registration
22
+ test_refs:
23
+ - tests/test_help_subprocess.py
17
24
  ---
18
25
 
19
26
  ## Context
@@ -2,27 +2,34 @@
2
2
  schema_version: 2
3
3
  id: al_adr_0050
4
4
  type: adr
5
- title: "Task bundle directory layout"
5
+ title: Task bundle directory layout
6
6
  status: accepted
7
7
  section: architecture_decisions
8
8
  order: 50
9
9
  date: "2026-05-23"
10
- deciders: []
10
+ deciders:
11
+ - taskledger maintainers
11
12
  supersedes: []
12
13
  related: []
13
14
  tags: []
14
15
  body_format: markdown
15
16
  created_at: "2026-05-23T12:31:03Z"
16
- updated_at: "2026-05-23T12:31:03Z"
17
+ updated_at: "2026-06-07T11:50:17Z"
18
+ source_refs:
19
+ - path: taskledger/storage/task_store.py
20
+ role: implements
21
+ reason: Task bundle layout v3
22
+ test_refs:
23
+ - tests/test_storage_bundle_layout.py
17
24
  ---
18
25
 
19
26
  ## Context
20
27
 
21
- Need a storage layout that scales to many sidecar collections per task (plans, runs, locks, todos, questions, changes, checks, handoffs, links) while keeping each record individually addressable. Events are stored at ledger level, not per-task, and are opt-in.
28
+ Need a storage layout that scales to many sidecar collections per task (plans, runs, locks, todos, questions, changes, checks, handoffs, links) while keeping each record individually addressable. Events are stored at ledger level, not per-task, and are enabled by default.
22
29
 
23
30
  ## Decision
24
31
 
25
- Use a directory-per-task layout (v2 bundle) under `.taskledger/ledgers/<ledger_ref>/`. Each task gets a directory containing the task record (Markdown) and subdirectories for sidecar collections. JSON indexes are derived caches at the ledger level. Event records are stored in the ledger-level `events/` directory (not per-task) and are only written when `[event_logging] enabled = true`.
32
+ Use a directory-per-task layout (v2 bundle) under `.taskledger/ledgers/<ledger_ref>/`. Each task gets a directory containing the task record (Markdown) and subdirectories for sidecar collections. JSON indexes are derived caches at the ledger level. Event records are stored in the ledger-level `events/` directory (not per-task) and are written by default; set `[event_logging] enabled = false` to disable.
26
33
 
27
34
  ## Consequences
28
35
 
@@ -2,18 +2,25 @@
2
2
  schema_version: 2
3
3
  id: al_adr_0051
4
4
  type: adr
5
- title: "External skill packaging"
5
+ title: External skill packaging
6
6
  status: accepted
7
7
  section: architecture_decisions
8
8
  order: 60
9
9
  date: "2026-05-23"
10
- deciders: []
10
+ deciders:
11
+ - taskledger maintainers
11
12
  supersedes: []
12
13
  related: []
13
14
  tags: []
14
15
  body_format: markdown
15
16
  created_at: "2026-05-23T12:31:04Z"
16
- updated_at: "2026-05-23T12:31:04Z"
17
+ updated_at: "2026-06-07T11:50:18Z"
18
+ source_refs:
19
+ - path: pyproject.toml
20
+ role: implements
21
+ reason: Package-data boundary excludes skills
22
+ test_refs:
23
+ - tests/test_docs_and_skill.py
17
24
  ---
18
25
 
19
26
  ## Context
@@ -13,7 +13,7 @@ environment: "development"
13
13
  maps_building_blocks: []
14
14
  body_format: markdown
15
15
  created_at: "2026-05-23T12:30:52Z"
16
- updated_at: "2026-05-23T12:30:52Z"
16
+ updated_at: "2026-06-11T21:00:00Z"
17
17
  ---
18
18
 
19
19
  **Node**: Developer workstation or CI runner
@@ -30,6 +30,6 @@ updated_at: "2026-05-23T12:30:52Z"
30
30
  - JSON index caches under `.taskledger/indexes/`
31
31
  - Project config at `taskledger.toml`
32
32
 
33
- **Network**: None required. Optional: `taskledger serve` starts a local HTTP dashboard.
33
+ **Network**: None required.
34
34
 
35
35
  **Installation**: `pip install taskledger` or `pip install -e .` from source. Single entry point: `taskledger` CLI.
@@ -0,0 +1,18 @@
1
+ ---
2
+ schema_version: 2
3
+ id: al_risk_0060
4
+ type: risk
5
+ title: "Growing dependency count"
6
+ status: proposed
7
+ section: risks_and_technical_debt
8
+ order: 40
9
+ date: "2026-05-23"
10
+ severity: medium
11
+ probability: medium
12
+ mitigation: "Small dependency set (typer, PyYAML, tomli); each justified by a core feature."
13
+ body_format: markdown
14
+ created_at: "2026-05-23T12:31:20Z"
15
+ updated_at: "2026-06-11T21:00:00Z"
16
+ ---
17
+
18
+ The dependency set is small (typer, PyYAML, tomli) and each is justified by a core feature. Risk is low as long as new dependencies are not introduced without explicit justification.
@@ -9,7 +9,7 @@ status: accepted
9
9
  date: "2026-05-25"
10
10
  body_format: markdown
11
11
  created_at: "2026-05-25T00:00:00Z"
12
- updated_at: "2026-05-25T00:00:00Z"
12
+ updated_at: "2026-06-11T21:00:00Z"
13
13
  ---
14
14
 
15
- Human developers use taskledger through the CLI for task-first project management. They approve plans, waive acceptance criteria, create follow-up tasks, and inspect task state. They rely on concise human-readable output and the `serve` dashboard for project overview.
15
+ Human developers use taskledger through the CLI for task-first project management. They approve plans, waive acceptance criteria, create follow-up tasks, and inspect task state. They rely on concise human-readable output and the `monitor` observer for project overview.