taskledger 0.6.7__tar.gz → 0.6.8__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 (607) hide show
  1. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/events/events.jsonl +5 -0
  2. taskledger-0.6.8/.ledger/releaseledger/data/ledgers/main/releases/v0.6.8/audit/commit-audit.yaml +79 -0
  3. taskledger-0.6.8/.ledger/releaseledger/data/ledgers/main/releases/v0.6.8/entries/entry-0001.md +31 -0
  4. taskledger-0.6.8/.ledger/releaseledger/data/ledgers/main/releases/v0.6.8/release.md +27 -0
  5. {taskledger-0.6.7/taskledger.egg-info → taskledger-0.6.8}/PKG-INFO +1 -1
  6. {taskledger-0.6.7 → taskledger-0.6.8}/docs/changelog.md +8 -0
  7. {taskledger-0.6.7 → taskledger-0.6.8}/docs/command_contract.md +2 -0
  8. {taskledger-0.6.7 → taskledger-0.6.8}/docs/full_task_cycle.md +7 -0
  9. {taskledger-0.6.7 → taskledger-0.6.8}/skills/taskledger/SKILL.md +2 -0
  10. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/_version.py +3 -3
  11. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_validate.py +10 -0
  12. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/check.py +20 -0
  13. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/sidecars.py +5 -0
  14. taskledger-0.6.8/taskledger/services/check_reuse.py +240 -0
  15. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/check_tracking.py +12 -0
  16. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/doctor_checks/task_checks.py +15 -0
  17. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/handoff.py +90 -19
  18. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/implementation_flow.py +12 -0
  19. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/tasks.py +2 -0
  20. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/validation_flow.py +54 -1
  21. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/workflow_guidance.py +8 -0
  22. {taskledger-0.6.7 → taskledger-0.6.8/taskledger.egg-info}/PKG-INFO +1 -1
  23. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger.egg-info/SOURCES.txt +6 -0
  24. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger.egg-info/scm_file_list.json +6 -0
  25. taskledger-0.6.8/taskledger.egg-info/scm_version.json +8 -0
  26. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_actor_resolution.py +1 -0
  27. taskledger-0.6.8/tests/test_check_reuse.py +229 -0
  28. taskledger-0.6.8/tests/test_check_reuse_context.py +77 -0
  29. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_doctor.py +30 -0
  30. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_implementation_checks.py +26 -0
  31. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_models_v1_schema.py +1 -0
  32. taskledger-0.6.7/taskledger.egg-info/scm_version.json +0 -8
  33. {taskledger-0.6.7 → taskledger-0.6.8}/.codecrate.toml +0 -0
  34. {taskledger-0.6.7 → taskledger-0.6.8}/.github/workflows/codecov.yml +0 -0
  35. {taskledger-0.6.7 → taskledger-0.6.8}/.github/workflows/pre-commit.yml +0 -0
  36. {taskledger-0.6.7 → taskledger-0.6.8}/.github/workflows/python-publish.yml +0 -0
  37. {taskledger-0.6.7 → taskledger-0.6.8}/.github/workflows/tests.yml +0 -0
  38. {taskledger-0.6.7 → taskledger-0.6.8}/.gitignore +0 -0
  39. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/.archledger-migration-20260821T090309Z/config.toml +0 -0
  40. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/.ledger-project.toml +0 -0
  41. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/config.toml +0 -0
  42. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/.ledger-project.toml +0 -0
  43. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/archive/records/building_blocks/block-0083.md +0 -0
  44. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/archive/records/concepts/concept-0081.md +0 -0
  45. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/archive/records/runtime/runtime-0076.md +0 -0
  46. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/archive/records/runtime/runtime-0084.md +0 -0
  47. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/document-state.json +0 -0
  48. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/migrations/20260821T090309Z-ledgercore-0.4-repository-storage.json +0 -0
  49. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/migrations/migration-cbe21be3f9dc3db4b03f6366.json +0 -0
  50. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/profiles/arc42/sections/content-0001.md +0 -0
  51. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/profiles/arc42/sections/content-0002.md +0 -0
  52. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/profiles/arc42/sections/content-0003.md +0 -0
  53. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/profiles/arc42/sections/content-0004.md +0 -0
  54. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/profiles/arc42/sections/content-0005.md +0 -0
  55. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/profiles/arc42/sections/content-0006.md +0 -0
  56. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/profiles/arc42/sections/content-0007.md +0 -0
  57. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/profiles/arc42/sections/content-0008.md +0 -0
  58. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/profiles/arc42/sections/content-0009.md +0 -0
  59. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/profiles/arc42/sections/content-0010.md +0 -0
  60. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/profiles/arc42/sections/content-0011.md +0 -0
  61. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/profiles/arc42/sections/content-0012.md +0 -0
  62. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/building_blocks/block-0029.md +0 -0
  63. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/building_blocks/block-0030.md +0 -0
  64. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/building_blocks/block-0031.md +0 -0
  65. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/building_blocks/block-0032.md +0 -0
  66. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/building_blocks/block-0033.md +0 -0
  67. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/building_blocks/block-0034.md +0 -0
  68. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/concepts/concept-0040.md +0 -0
  69. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/concepts/concept-0041.md +0 -0
  70. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/concepts/concept-0042.md +0 -0
  71. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/concepts/concept-0043.md +0 -0
  72. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/concepts/concept-0044.md +0 -0
  73. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/concepts/concept-0045.md +0 -0
  74. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/concepts/concept-0082.md +0 -0
  75. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/concepts/concept-0085.md +0 -0
  76. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/concepts/concept-0086.md +0 -0
  77. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/constraints/constraint-0016.md +0 -0
  78. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/constraints/constraint-0017.md +0 -0
  79. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/constraints/constraint-0018.md +0 -0
  80. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/constraints/constraint-0019.md +0 -0
  81. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/contexts/context-0020.md +0 -0
  82. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/contexts/context-0021.md +0 -0
  83. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/contexts/context-0022.md +0 -0
  84. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/contexts/context-0023.md +0 -0
  85. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/decisions/adr-0046.md +0 -0
  86. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/decisions/adr-0047.md +0 -0
  87. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/decisions/adr-0048.md +0 -0
  88. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/decisions/adr-0049.md +0 -0
  89. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/decisions/adr-0050.md +0 -0
  90. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/decisions/adr-0051.md +0 -0
  91. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/deployment/deploy-0039.md +0 -0
  92. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0061.md +0 -0
  93. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0062.md +0 -0
  94. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0063.md +0 -0
  95. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0064.md +0 -0
  96. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0065.md +0 -0
  97. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0066.md +0 -0
  98. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0067.md +0 -0
  99. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0068.md +0 -0
  100. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0069.md +0 -0
  101. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0070.md +0 -0
  102. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0071.md +0 -0
  103. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0072.md +0 -0
  104. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/glossary/glossary-0073.md +0 -0
  105. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/quality_requirements/quality-0052.md +0 -0
  106. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/quality_requirements/quality-0053.md +0 -0
  107. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/quality_requirements/quality-0054.md +0 -0
  108. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/quality_requirements/quality-0055.md +0 -0
  109. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/quality_requirements/quality-0056.md +0 -0
  110. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/requirements/content-0013.md +0 -0
  111. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/requirements/content-0014.md +0 -0
  112. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/requirements/content-0015.md +0 -0
  113. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/risks/risk-0057.md +0 -0
  114. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/risks/risk-0058.md +0 -0
  115. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/risks/risk-0059.md +0 -0
  116. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/risks/risk-0060.md +0 -0
  117. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/runtime/runtime-0035.md +0 -0
  118. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/runtime/runtime-0036.md +0 -0
  119. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/runtime/runtime-0037.md +0 -0
  120. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/runtime/runtime-0038.md +0 -0
  121. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/runtime/runtime-0074.md +0 -0
  122. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/runtime/runtime-0075.md +0 -0
  123. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/runtime/runtime-0077.md +0 -0
  124. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/runtime/runtime-0078.md +0 -0
  125. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/runtime/runtime-0087.md +0 -0
  126. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/runtime/runtime-0088.md +0 -0
  127. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/stakeholders/content-0079.md +0 -0
  128. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/stakeholders/content-0080.md +0 -0
  129. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/strategy/strategy-0024.md +0 -0
  130. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/strategy/strategy-0025.md +0 -0
  131. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/strategy/strategy-0026.md +0 -0
  132. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/strategy/strategy-0027.md +0 -0
  133. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/records/strategy/strategy-0028.md +0 -0
  134. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/source-state.json +0 -0
  135. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/data/storage.yaml +0 -0
  136. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/archledger/migrations/migration-66baa70bad8a0bb5ae852133.json +0 -0
  137. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/.ledger-project.toml +0 -0
  138. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/config.toml +0 -0
  139. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/.ledger-project.toml +0 -0
  140. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/docs/docs-api-md-9eddf4dc.yaml +0 -0
  141. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/docs/docs-architecture-taskledger-split-md-63034c0d.yaml +0 -0
  142. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/docs/docs-command-contract-md-abe6f6d9.yaml +0 -0
  143. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/docs/docs-full-task-cycle-md-721181f0.yaml +0 -0
  144. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/docs/docs-multi-repo-md-929e47a9.yaml +0 -0
  145. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/docs/docs-public-surface-md-c1b8772f.yaml +0 -0
  146. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/docs/docs-service-boundary-whitelist-md-800b76f5.yaml +0 -0
  147. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/docs/docs-sync-md-a29422f3.yaml +0 -0
  148. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/docs/docs-transfer-md-f8532303.yaml +0 -0
  149. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/docs/docs-usage-md-72376d0b.yaml +0 -0
  150. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/scan.yaml +0 -0
  151. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/source-index.json +0 -0
  152. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/documentledger/data/storage.yaml +0 -0
  153. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/ledger.toml +0 -0
  154. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/migrations/documentledger-bb67fdd8e51cff33.toml +0 -0
  155. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/.ledger-project.toml +0 -0
  156. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/config.toml +0 -0
  157. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/.ledger-project.toml +0 -0
  158. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0001.md +0 -0
  159. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0002.md +0 -0
  160. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0003.md +0 -0
  161. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0004.md +0 -0
  162. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0005.md +0 -0
  163. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0006.md +0 -0
  164. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0007.md +0 -0
  165. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0008.md +0 -0
  166. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0009.md +0 -0
  167. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0010.md +0 -0
  168. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0011.md +0 -0
  169. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0012.md +0 -0
  170. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0013.md +0 -0
  171. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0014.md +0 -0
  172. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0015.md +0 -0
  173. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0016.md +0 -0
  174. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0017.md +0 -0
  175. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0018.md +0 -0
  176. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0019.md +0 -0
  177. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0020.md +0 -0
  178. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0021.md +0 -0
  179. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0022.md +0 -0
  180. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/entries/entry-0023.md +0 -0
  181. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.0/release.md +0 -0
  182. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.1/entries/entry-0001.md +0 -0
  183. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.1/entries/entry-0002.md +0 -0
  184. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.1/entries/entry-0003.md +0 -0
  185. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.1/entries/entry-0004.md +0 -0
  186. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.1/entries/entry-0005.md +0 -0
  187. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.1/release.md +0 -0
  188. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.2/entries/entry-0001.md +0 -0
  189. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.2/entries/entry-0002.md +0 -0
  190. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.2/entries/entry-0003.md +0 -0
  191. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.2/entries/entry-0004.md +0 -0
  192. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.2/release.md +0 -0
  193. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.3/audit/commit-audit.yaml +0 -0
  194. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.3/entries/entry-0001.md +0 -0
  195. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.3/release.md +0 -0
  196. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.4/audit/commit-audit.yaml +0 -0
  197. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.4/entries/entry-0001.md +0 -0
  198. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.4/entries/entry-0002.md +0 -0
  199. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.4/entries/entry-0003.md +0 -0
  200. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.4/release.md +0 -0
  201. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.5/audit/commit-audit.yaml +0 -0
  202. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.5/entries/entry-0001.md +0 -0
  203. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.5/entries/entry-0002.md +0 -0
  204. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.5/entries/entry-0003.md +0 -0
  205. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.5/release.md +0 -0
  206. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.6/audit/commit-audit.yaml +0 -0
  207. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.6/entries/entry-0001.md +0 -0
  208. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.6/release.md +0 -0
  209. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.7/audit/commit-audit.yaml +0 -0
  210. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.7/entries/entry-0001.md +0 -0
  211. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/data/ledgers/main/releases/v0.6.7/release.md +0 -0
  212. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/releaseledger/write.lock +0 -0
  213. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/task/config.toml +0 -0
  214. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/taskledger/.ledger-project.toml +0 -0
  215. {taskledger-0.6.7 → taskledger-0.6.8}/.ledger/taskledger/config.toml +0 -0
  216. {taskledger-0.6.7 → taskledger-0.6.8}/.planledger.toml +0 -0
  217. {taskledger-0.6.7 → taskledger-0.6.8}/.pre-commit-config.yaml +0 -0
  218. {taskledger-0.6.7 → taskledger-0.6.8}/.readthedocs.yaml +0 -0
  219. {taskledger-0.6.7 → taskledger-0.6.8}/.ruff.toml +0 -0
  220. {taskledger-0.6.7 → taskledger-0.6.8}/AGENTS.md +0 -0
  221. {taskledger-0.6.7 → taskledger-0.6.8}/API.md +0 -0
  222. {taskledger-0.6.7 → taskledger-0.6.8}/LICENSE +0 -0
  223. {taskledger-0.6.7 → taskledger-0.6.8}/Makefile +0 -0
  224. {taskledger-0.6.7 → taskledger-0.6.8}/README.md +0 -0
  225. {taskledger-0.6.7 → taskledger-0.6.8}/docs/Makefile +0 -0
  226. {taskledger-0.6.7 → taskledger-0.6.8}/docs/api.md +0 -0
  227. {taskledger-0.6.7 → taskledger-0.6.8}/docs/architecture.md +0 -0
  228. {taskledger-0.6.7 → taskledger-0.6.8}/docs/architecture_taskledger_split.md +0 -0
  229. {taskledger-0.6.7 → taskledger-0.6.8}/docs/build.sh +0 -0
  230. {taskledger-0.6.7 → taskledger-0.6.8}/docs/conf.py +0 -0
  231. {taskledger-0.6.7 → taskledger-0.6.8}/docs/documentation_freshness.md +0 -0
  232. {taskledger-0.6.7 → taskledger-0.6.8}/docs/index.md +0 -0
  233. {taskledger-0.6.7 → taskledger-0.6.8}/docs/multi_repo.md +0 -0
  234. {taskledger-0.6.7 → taskledger-0.6.8}/docs/public_surface.md +0 -0
  235. {taskledger-0.6.7 → taskledger-0.6.8}/docs/release_checklist.md +0 -0
  236. {taskledger-0.6.7 → taskledger-0.6.8}/docs/requirements.txt +0 -0
  237. {taskledger-0.6.7 → taskledger-0.6.8}/docs/service_boundary_whitelist.md +0 -0
  238. {taskledger-0.6.7 → taskledger-0.6.8}/docs/sync.md +0 -0
  239. {taskledger-0.6.7 → taskledger-0.6.8}/docs/transfer.md +0 -0
  240. {taskledger-0.6.7 → taskledger-0.6.8}/docs/usage.md +0 -0
  241. {taskledger-0.6.7 → taskledger-0.6.8}/pyproject.toml +0 -0
  242. {taskledger-0.6.7 → taskledger-0.6.8}/requirements/manifest.json +0 -0
  243. {taskledger-0.6.7 → taskledger-0.6.8}/scripts/find_code_clones.py +0 -0
  244. {taskledger-0.6.7 → taskledger-0.6.8}/setup.cfg +0 -0
  245. {taskledger-0.6.7 → taskledger-0.6.8}/specmason.toml +0 -0
  246. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/README.md +0 -0
  247. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/UNMAPPED_TESTS.md +0 -0
  248. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/evidence/.gitkeep +0 -0
  249. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/evidence/taskledger-test-feature-coverage.json +0 -0
  250. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/.gitkeep +0 -0
  251. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/active_task/active-task.feature +0 -0
  252. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/actor_harness_state/actor-harness-state.feature +0 -0
  253. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/actor_resolution/actor-resolution.feature +0 -0
  254. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/agent_command_logging/agent-command-logging.feature +0 -0
  255. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/agent_session_protocol/agent-session-protocol.feature +0 -0
  256. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/atomic_fast_io/atomic-fast-io.feature +0 -0
  257. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/cli_command_contract/cli-command-contract.feature +0 -0
  258. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/cli_import_resilience/cli-import-resilience.feature +0 -0
  259. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/code_reviews/code-reviews.feature +0 -0
  260. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/command_example_linter/command-example-linter.feature +0 -0
  261. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/command_inventory/command-inventory.feature +0 -0
  262. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/command_runner/command-runner.feature +0 -0
  263. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/compact_mutation_output/compact-mutation-output.feature +0 -0
  264. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/config_cli/config-cli.feature +0 -0
  265. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/delta_remaining_contracts/delta-remaining-contracts.feature +0 -0
  266. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/docs_and_skill/docs-and-skill.feature +0 -0
  267. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/doctor/doctor.feature +0 -0
  268. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/domain_policies/domain-policies.feature +0 -0
  269. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/event_logging_config/event-logging-config.feature +0 -0
  270. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/events/events.feature +0 -0
  271. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/file_link_snapshots/file-link-snapshots.feature +0 -0
  272. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/find_code_clones_script/find-code-clones-script.feature +0 -0
  273. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/handoff_lifecycle/handoff-lifecycle.feature +0 -0
  274. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/help_subprocess/help-subprocess.feature +0 -0
  275. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/implementation_change_scan/implementation-change-scan.feature +0 -0
  276. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/implementation_checks/implementation-checks.feature +0 -0
  277. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/json_contracts/json-contracts.feature +0 -0
  278. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/legacy_cleanup_contracts/legacy-cleanup-contracts.feature +0 -0
  279. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/lifecycle_policies/lifecycle-policies.feature +0 -0
  280. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/lock_diagnostics/lock-diagnostics.feature +0 -0
  281. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/locks_audit/locks-audit.feature +0 -0
  282. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/models_v1_schema/models-v1-schema.feature +0 -0
  283. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/monitor/monitor.feature +0 -0
  284. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/next_action_expired_lock/next-action-expired-lock.feature +0 -0
  285. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/no_log_feature/no-log-feature.feature +0 -0
  286. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/plan_approval_contract/plan-approval-contract.feature +0 -0
  287. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/plan_lint/plan-lint.feature +0 -0
  288. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/plan_review/plan-review.feature +0 -0
  289. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/plan_revision_workflow/plan-revision-workflow.feature +0 -0
  290. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/plan_todo_materialization/plan-todo-materialization.feature +0 -0
  291. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/project_root_config/project-root-config.feature +0 -0
  292. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/question_add_many/question-add-many.feature +0 -0
  293. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/question_filter_answers/question-filter-answers.feature +0 -0
  294. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/question_plan_regeneration/question-plan-regeneration.feature +0 -0
  295. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/ready_work/ready-work.feature +0 -0
  296. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/release_changelog/release-changelog.feature +0 -0
  297. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/search/search.feature +0 -0
  298. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/service_boundaries/service-boundaries.feature +0 -0
  299. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/services_dashboard/services-dashboard.feature +0 -0
  300. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/sidecar_collections/sidecar-collections.feature +0 -0
  301. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/storage_bundle_layout/storage-bundle-layout.feature +0 -0
  302. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/storage_common/storage-common.feature +0 -0
  303. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/storage_init/storage-init.feature +0 -0
  304. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/storage_migration/storage-migration.feature +0 -0
  305. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/storage_repos/storage-repos.feature +0 -0
  306. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/storage_sync/storage-sync.feature +0 -0
  307. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/sync_git/sync-git.feature +0 -0
  308. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/task_archive/archive.feature +0 -0
  309. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/task_events/events.feature +0 -0
  310. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/task_markdown_export/markdown-export.feature +0 -0
  311. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/task_report/report.feature +0 -0
  312. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/taskledger_branch_scoped_ledgers/taskledger-branch-scoped-ledgers.feature +0 -0
  313. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/taskledger_cli_api_parity/taskledger-cli-api-parity.feature +0 -0
  314. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/taskledger_v2_cli/taskledger-v2-cli.feature +0 -0
  315. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/taskledger_v2_exchange/taskledger-v2-exchange.feature +0 -0
  316. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/tasks_service_static/tasks-service-static.feature +0 -0
  317. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/todo_implementation_gate/todo-implementation-gate.feature +0 -0
  318. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/trace/trace.feature +0 -0
  319. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/tree_command/tree-command.feature +0 -0
  320. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/usage_cli/usage-cli.feature +0 -0
  321. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/worker_pipeline_cli/worker-pipeline-cli.feature +0 -0
  322. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/worker_pipeline_config/worker-pipeline-config.feature +0 -0
  323. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/worker_pipeline_context/worker-pipeline-context.feature +0 -0
  324. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/worker_pipeline_handoff/worker-pipeline-handoff.feature +0 -0
  325. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/worker_pipeline_plan_template/worker-pipeline-plan-template.feature +0 -0
  326. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/worker_pipeline_todos/worker-pipeline-todos.feature +0 -0
  327. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/features/workflow_guidance/workflow-guidance.feature +0 -0
  328. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/manifest.json +0 -0
  329. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/mappings/.gitkeep +0 -0
  330. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/mappings/intentional-unmapped.json +0 -0
  331. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/reports/specmason/.gitkeep +0 -0
  332. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/reports/specmason/coverage.json +0 -0
  333. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/reports/specmason/coverage.md +0 -0
  334. {taskledger-0.6.7 → taskledger-0.6.8}/specs/behavior/reports/specmason/mappings.json +0 -0
  335. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/__init__.py +0 -0
  336. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/__main__.py +0 -0
  337. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/__init__.py +0 -0
  338. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/config.py +0 -0
  339. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/handoff.py +0 -0
  340. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/introductions.py +0 -0
  341. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/locks.py +0 -0
  342. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/plans.py +0 -0
  343. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/project.py +0 -0
  344. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/questions.py +0 -0
  345. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/releases.py +0 -0
  346. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/repair.py +0 -0
  347. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/reviews.py +0 -0
  348. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/search.py +0 -0
  349. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/storage.py +0 -0
  350. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/sync.py +0 -0
  351. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/task_runs.py +0 -0
  352. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/api/tasks.py +0 -0
  353. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli.py +0 -0
  354. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_actor.py +0 -0
  355. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_archive.py +0 -0
  356. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_common.py +0 -0
  357. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_config.py +0 -0
  358. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_help.py +0 -0
  359. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_implement.py +0 -0
  360. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_ledger.py +0 -0
  361. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_migrate.py +0 -0
  362. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_misc.py +0 -0
  363. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_pipeline.py +0 -0
  364. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_plan.py +0 -0
  365. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_question.py +0 -0
  366. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_ref.py +0 -0
  367. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_release.py +0 -0
  368. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_review.py +0 -0
  369. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_runtime.py +0 -0
  370. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_storage.py +0 -0
  371. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_sync.py +0 -0
  372. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_task.py +0 -0
  373. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/cli_trace.py +0 -0
  374. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/command_inventory.py +0 -0
  375. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/compat/__init__.py +0 -0
  376. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/compat/ledgercore.py +0 -0
  377. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/__init__.py +0 -0
  378. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/_model_utils.py +0 -0
  379. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/active_state.py +0 -0
  380. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/actor.py +0 -0
  381. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/change.py +0 -0
  382. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/event.py +0 -0
  383. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/handoff.py +0 -0
  384. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/lock.py +0 -0
  385. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/models.py +0 -0
  386. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/plan.py +0 -0
  387. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/policies.py +0 -0
  388. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/question.py +0 -0
  389. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/release.py +0 -0
  390. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/review.py +0 -0
  391. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/run.py +0 -0
  392. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/states.py +0 -0
  393. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/domain/task.py +0 -0
  394. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/errors.py +0 -0
  395. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/exchange.py +0 -0
  396. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/ids.py +0 -0
  397. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/launcher.py +0 -0
  398. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/migrations/__init__.py +0 -0
  399. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/migrations/hooks.py +0 -0
  400. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/py.typed +0 -0
  401. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/refs.py +0 -0
  402. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/search.py +0 -0
  403. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/__init__.py +0 -0
  404. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/actors.py +0 -0
  405. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/agent_logging.py +0 -0
  406. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/agent_transcripts.py +0 -0
  407. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/change_tracking.py +0 -0
  408. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/code_review.py +0 -0
  409. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/command_runner.py +0 -0
  410. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/dashboard.py +0 -0
  411. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/doctor.py +0 -0
  412. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/doctor_checks/artifact_checks.py +0 -0
  413. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/doctor_checks/migration_checks.py +0 -0
  414. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/doctor_checks/project_scan.py +0 -0
  415. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/event_logging.py +0 -0
  416. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/file_links.py +0 -0
  417. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/git_sync.py +0 -0
  418. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/git_utils.py +0 -0
  419. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/handoff_lifecycle.py +0 -0
  420. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/lock_diagnostics.py +0 -0
  421. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/lock_inventory.py +0 -0
  422. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/monitor.py +0 -0
  423. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/navigation.py +0 -0
  424. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/next_action_logic.py +0 -0
  425. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/next_action_model.py +0 -0
  426. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/next_action_payload.py +0 -0
  427. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/phase5_lock_transfer.py +0 -0
  428. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/plan_editing.py +0 -0
  429. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/plan_hash.py +0 -0
  430. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/plan_input.py +0 -0
  431. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/plan_lint.py +0 -0
  432. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/plan_materialization.py +0 -0
  433. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/plan_review.py +0 -0
  434. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/planning_flow.py +0 -0
  435. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/ready_work.py +0 -0
  436. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/releases.py +0 -0
  437. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/run_store.py +0 -0
  438. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/runtime_info.py +0 -0
  439. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/storage_locations.py +0 -0
  440. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/storage_migration.py +0 -0
  441. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/task_archive.py +0 -0
  442. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/task_collections.py +0 -0
  443. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/task_events.py +0 -0
  444. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/task_export.py +0 -0
  445. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/task_lifecycle.py +0 -0
  446. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/task_queries.py +0 -0
  447. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/task_repair.py +0 -0
  448. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/task_reports.py +0 -0
  449. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/trace.py +0 -0
  450. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/tree.py +0 -0
  451. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/usage.py +0 -0
  452. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/validation.py +0 -0
  453. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/worker_context.py +0 -0
  454. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/worker_pipeline.py +0 -0
  455. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/services/workspace_snapshot.py +0 -0
  456. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/__init__.py +0 -0
  457. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/agent_logs.py +0 -0
  458. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/artifact_policy.py +0 -0
  459. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/atomic.py +0 -0
  460. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/common.py +0 -0
  461. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/events.py +0 -0
  462. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/frontmatter.py +0 -0
  463. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/index_cache.py +0 -0
  464. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/indexes.py +0 -0
  465. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/init.py +0 -0
  466. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/layout_migration.py +0 -0
  467. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/ledger_config.py +0 -0
  468. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/ledger_local_config.py +0 -0
  469. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/ledger_manifest.py +0 -0
  470. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/ledgercore_backend.py +0 -0
  471. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/locks.py +0 -0
  472. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/meta.py +0 -0
  473. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/migrations.py +0 -0
  474. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/paths.py +0 -0
  475. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/project_binding.py +0 -0
  476. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/project_config.py +0 -0
  477. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/project_context.py +0 -0
  478. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/project_identity.py +0 -0
  479. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/repos.py +0 -0
  480. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/sidecar_index.py +0 -0
  481. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/task_ids.py +0 -0
  482. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/task_index.py +0 -0
  483. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/task_store.py +0 -0
  484. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/taskledger_migration.py +0 -0
  485. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/toml_edit.py +0 -0
  486. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/worker_pipeline_config.py +0 -0
  487. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/storage/yaml_store.py +0 -0
  488. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger/timeutils.py +0 -0
  489. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger.egg-info/dependency_links.txt +0 -0
  490. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger.egg-info/entry_points.txt +0 -0
  491. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger.egg-info/requires.txt +0 -0
  492. {taskledger-0.6.7 → taskledger-0.6.8}/taskledger.egg-info/top_level.txt +0 -0
  493. {taskledger-0.6.7 → taskledger-0.6.8}/tests/__init__.py +0 -0
  494. {taskledger-0.6.7 → taskledger-0.6.8}/tests/conftest.py +0 -0
  495. {taskledger-0.6.7 → taskledger-0.6.8}/tests/support/__init__.py +0 -0
  496. {taskledger-0.6.7 → taskledger-0.6.8}/tests/support/builders.py +0 -0
  497. {taskledger-0.6.7 → taskledger-0.6.8}/tests/support/fake_command_runner.py +0 -0
  498. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_active_task.py +0 -0
  499. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_actor_harness_state.py +0 -0
  500. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_agent_command_logging.py +0 -0
  501. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_agent_session_protocol.py +0 -0
  502. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_artifact_policy.py +0 -0
  503. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_atomic_fast_io.py +0 -0
  504. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_canonical_config_split.py +0 -0
  505. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_canonical_layout_migration.py +0 -0
  506. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_canonical_mount_paths.py +0 -0
  507. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_canonical_project_boundary.py +0 -0
  508. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_canonical_project_context.py +0 -0
  509. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_cli_command_contract.py +0 -0
  510. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_cli_import_resilience.py +0 -0
  511. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_cli_runner_compatibility.py +0 -0
  512. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_code_reviews.py +0 -0
  513. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_command_example_linter.py +0 -0
  514. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_command_inventory.py +0 -0
  515. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_command_runner.py +0 -0
  516. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_compact_mutation_output.py +0 -0
  517. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_config_cli.py +0 -0
  518. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_delta_remaining_contracts.py +0 -0
  519. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_docs_and_skill.py +0 -0
  520. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_domain_policies.py +0 -0
  521. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_error_contracts.py +0 -0
  522. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_event_logging_config.py +0 -0
  523. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_events.py +0 -0
  524. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_file_link_snapshots.py +0 -0
  525. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_find_code_clones_script.py +0 -0
  526. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_handoff_lifecycle.py +0 -0
  527. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_help_subprocess.py +0 -0
  528. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_implementation_change_scan.py +0 -0
  529. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_import_boundaries.py +0 -0
  530. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_indexes.py +0 -0
  531. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_indexes_cache_recovery.py +0 -0
  532. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_json_contracts.py +0 -0
  533. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_ledger_manifest_mutation.py +0 -0
  534. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_ledgercore_compat.py +0 -0
  535. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_ledgercore_dependency.py +0 -0
  536. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_legacy_cleanup_contracts.py +0 -0
  537. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_lifecycle_policies.py +0 -0
  538. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_lock_diagnostics.py +0 -0
  539. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_lock_inventory.py +0 -0
  540. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_locks_audit.py +0 -0
  541. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_monitor.py +0 -0
  542. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_next_action_expired_lock.py +0 -0
  543. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_no_log_feature.py +0 -0
  544. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_performance_caching.py +0 -0
  545. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_plan_approval_contract.py +0 -0
  546. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_plan_input.py +0 -0
  547. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_plan_input_cli.py +0 -0
  548. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_plan_lint.py +0 -0
  549. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_plan_review.py +0 -0
  550. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_plan_revision_workflow.py +0 -0
  551. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_plan_todo_materialization.py +0 -0
  552. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_project_root_config.py +0 -0
  553. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_question_add_many.py +0 -0
  554. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_question_filter_answers.py +0 -0
  555. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_question_plan_regeneration.py +0 -0
  556. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_ready_work.py +0 -0
  557. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_release_changelog.py +0 -0
  558. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_resource_refs.py +0 -0
  559. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_runtime_info.py +0 -0
  560. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_search.py +0 -0
  561. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_service_boundaries.py +0 -0
  562. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_services_dashboard.py +0 -0
  563. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_shared_tool_ledger_storage.py +0 -0
  564. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_sidecar_collections.py +0 -0
  565. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_storage_bundle_layout.py +0 -0
  566. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_storage_common.py +0 -0
  567. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_storage_init.py +0 -0
  568. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_storage_migration.py +0 -0
  569. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_storage_migration_coordinator.py +0 -0
  570. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_storage_repos.py +0 -0
  571. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_storage_sync.py +0 -0
  572. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_storage_where_repair.py +0 -0
  573. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_storage_yaml_store.py +0 -0
  574. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_sync_git.py +0 -0
  575. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_task_archive.py +0 -0
  576. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_task_events.py +0 -0
  577. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_task_ids.py +0 -0
  578. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_task_markdown_export.py +0 -0
  579. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_task_report.py +0 -0
  580. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_branch_scoped_ledgers.py +0 -0
  581. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_canonical_sync.py +0 -0
  582. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_cli_api_parity.py +0 -0
  583. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_ledgercore_050_adapter.py +0 -0
  584. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_ledgercore_050_context.py +0 -0
  585. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_ledgercore_050_migration_topology.py +0 -0
  586. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_ledgercore_050_sync.py +0 -0
  587. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_migration_v3.py +0 -0
  588. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_sibling_migration.py +0 -0
  589. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_sibling_storage.py +0 -0
  590. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_storage_commands_v3.py +0 -0
  591. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_v2_cli.py +0 -0
  592. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_taskledger_v2_exchange.py +0 -0
  593. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_tasks_service_static.py +0 -0
  594. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_todo_implementation_gate.py +0 -0
  595. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_trace.py +0 -0
  596. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_tree_command.py +0 -0
  597. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_usage_cli.py +0 -0
  598. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_validation_command.py +0 -0
  599. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_validation_git_snapshot_recovery.py +0 -0
  600. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_worker_pipeline_cli.py +0 -0
  601. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_worker_pipeline_config.py +0 -0
  602. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_worker_pipeline_context.py +0 -0
  603. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_worker_pipeline_handoff.py +0 -0
  604. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_worker_pipeline_plan_template.py +0 -0
  605. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_worker_pipeline_todos.py +0 -0
  606. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_workflow_guidance.py +0 -0
  607. {taskledger-0.6.7 → taskledger-0.6.8}/tests/test_workspace_snapshot.py +0 -0
@@ -50,3 +50,8 @@
50
50
  {"data":{"updated_rows":1},"event":"audit.updated","event_id":"event-0050","record_revisions":{"commit_audit_sheet":2},"release_version":"v0.6.7","schema_version":2}
51
51
  {"data":{"entry_ids":["entry-0001"],"synced_audit_rows":1},"event":"entry.batch_added","event_id":"event-0051","record_revisions":{"commit_audit_sheet":3,"entry:v0.6.7/entry-0001":1,"release:v0.6.7":3},"release_version":"v0.6.7","schema_version":2}
52
52
  {"data":{"released_at":"2026-09-09"},"event":"release.finalized","event_id":"event-0052","record_revisions":{"release:v0.6.7":4},"release_version":"v0.6.7","schema_version":2}
53
+ {"data":{"status":"planned"},"event":"release.created","event_id":"event-0053","record_revisions":{"release:v0.6.8":1},"release_version":"v0.6.8","schema_version":2}
54
+ {"data":{"fields":["git_base_ref","git_base_sha","git_commit_count","git_head_ref","git_head_sha","git_range"]},"event":"release.updated","event_id":"event-0054","record_revisions":{"release:v0.6.8":2},"release_version":"v0.6.8","schema_version":2}
55
+ {"data":{"row_count":1},"event":"audit.created","event_id":"event-0055","record_revisions":{"commit_audit_sheet":1},"release_version":"v0.6.8","schema_version":2}
56
+ {"data":{"updated_rows":1},"event":"audit.updated","event_id":"event-0056","record_revisions":{"commit_audit_sheet":2},"release_version":"v0.6.8","schema_version":2}
57
+ {"data":{"kind":"added","status":"accepted"},"entry_id":"entry-0001","event":"entry.added","event_id":"event-0057","record_revisions":{"entry:v0.6.8/entry-0001":1,"release:v0.6.8":3},"release_version":"v0.6.8","schema_version":2}
@@ -0,0 +1,79 @@
1
+ schema_version: 1
2
+ object_type: commit_audit_sheet
3
+ versioning:
4
+ schema_version: 1
5
+ revision: 2
6
+ release_version: v0.6.8
7
+ git_base_ref: v0.6.7
8
+ git_base_sha: fa5b2b7720d3f05530e32e8389b7286e6fb186b1
9
+ git_head_ref: HEAD
10
+ git_head_sha: b5677429bc9b8209d918456cfb6a30fd11ce4970
11
+ git_range: fa5b2b7720d3f05530e32e8389b7286e6fb186b1..b5677429bc9b8209d918456cfb6a30fd11ce4970
12
+ commit_count: 1
13
+ rows:
14
+ - sha: b5677429bc9b8209d918456cfb6a30fd11ce4970
15
+ source_ref: git:b5677429bc9b8209d918456cfb6a30fd11ce4970
16
+ short_sha: b567742
17
+ changed_paths:
18
+ - docs/command_contract.md
19
+ - docs/full_task_cycle.md
20
+ - skills/taskledger/SKILL.md
21
+ - taskledger/cli_validate.py
22
+ - taskledger/domain/check.py
23
+ - taskledger/domain/sidecars.py
24
+ - taskledger/services/check_reuse.py
25
+ - taskledger/services/check_tracking.py
26
+ - taskledger/services/doctor_checks/task_checks.py
27
+ - taskledger/services/handoff.py
28
+ - taskledger/services/implementation_flow.py
29
+ - taskledger/services/tasks.py
30
+ - taskledger/services/validation_flow.py
31
+ - taskledger/services/workflow_guidance.py
32
+ - tests/test_actor_resolution.py
33
+ - tests/test_check_reuse.py
34
+ - tests/test_check_reuse_context.py
35
+ - tests/test_doctor.py
36
+ - tests/test_implementation_checks.py
37
+ - tests/test_models_v1_schema.py
38
+ stats:
39
+ files_changed: 0
40
+ insertions: 841
41
+ deletions: 20
42
+ inspected: true
43
+ inspected_paths:
44
+ - docs/command_contract.md
45
+ - docs/full_task_cycle.md
46
+ - skills/taskledger/SKILL.md
47
+ - taskledger/cli_validate.py
48
+ - taskledger/domain/check.py
49
+ - taskledger/domain/sidecars.py
50
+ - taskledger/services/check_reuse.py
51
+ - taskledger/services/check_tracking.py
52
+ - taskledger/services/doctor_checks/task_checks.py
53
+ - taskledger/services/handoff.py
54
+ - taskledger/services/implementation_flow.py
55
+ - taskledger/services/tasks.py
56
+ - taskledger/services/validation_flow.py
57
+ - taskledger/services/workflow_guidance.py
58
+ - tests/test_actor_resolution.py
59
+ - tests/test_check_reuse.py
60
+ - tests/test_check_reuse_context.py
61
+ - tests/test_doctor.py
62
+ - tests/test_implementation_checks.py
63
+ - tests/test_models_v1_schema.py
64
+ observed_behavior:
65
+ Passing implementation command checks now record workspace snapshot
66
+ provenance, and validators can explicitly reuse those checks only when the implementation
67
+ and current workspace snapshots match exactly. Validation records the reused check
68
+ reference, while handoff context identifies reusable, stale, and unknown provenance
69
+ checks.
70
+ public_impact: public
71
+ decision: accepted
72
+ stale: false
73
+ evidence_subject:
74
+ "feat: improved implementation check handling to reduce amount
75
+ of tests needed for verification"
76
+ target_entry_key: implementation-check-evidence-reuse
77
+ notes:
78
+ Reviewed the implementation, validation, handoff, CLI, documentation, and
79
+ focused regression tests in this commit.
@@ -0,0 +1,31 @@
1
+ ---
2
+ schema_version: 2
3
+ object_type: release_entry
4
+ versioning:
5
+ schema_version: 1
6
+ revision: 1
7
+ entry_id: entry-0001
8
+ release_version: v0.6.8
9
+ kind: added
10
+ summary:
11
+ Added explicit reuse of passing implementation checks as validation evidence
12
+ when final and current workspace snapshots match
13
+ status: accepted
14
+ audience: null
15
+ scopes: []
16
+ source_refs:
17
+ - git:b5677429bc9b8209d918456cfb6a30fd11ce4970
18
+ paths:
19
+ - taskledger/cli_validate.py
20
+ - taskledger/services/check_reuse.py
21
+ - taskledger/services/validation_flow.py
22
+ - taskledger/services/handoff.py
23
+ - docs/command_contract.md
24
+ issues: []
25
+ prs: []
26
+ sources: []
27
+ contributors: []
28
+ breaking: false
29
+ internal: false
30
+ order: 1
31
+ ---
@@ -0,0 +1,27 @@
1
+ ---
2
+ schema_version: 2
3
+ object_type: release
4
+ versioning:
5
+ schema_version: 1
6
+ revision: 3
7
+ version: v0.6.8
8
+ status: planned
9
+ history_state: curated
10
+ title: Release v0.6.8
11
+ released_at: null
12
+ previous_version: v0.6.7
13
+ cancel_reason: null
14
+ superseded_by: null
15
+ changelog_file: null
16
+ boundary_ref: null
17
+ source_refs: []
18
+ source_count: null
19
+ entry_count: 1
20
+ artifact_count: 0
21
+ git_base_ref: v0.6.7
22
+ git_base_sha: fa5b2b7720d3f05530e32e8389b7286e6fb186b1
23
+ git_head_ref: HEAD
24
+ git_head_sha: b5677429bc9b8209d918456cfb6a30fd11ce4970
25
+ git_range: fa5b2b7720d3f05530e32e8389b7286e6fb186b1..b5677429bc9b8209d918456cfb6a30fd11ce4970
26
+ git_commit_count: 1
27
+ ---
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taskledger
3
- Version: 0.6.7
3
+ Version: 0.6.8
4
4
  Summary: Durable project-state storage and CLI for coding workflows
5
5
  Author: Taskledger Contributors
6
6
  Maintainer: Holger Nahrstaedt
@@ -2,6 +2,14 @@
2
2
 
3
3
  > **Generated by releaseledger.** Manual edits may be overwritten. Update releaseledger entries and rebuild this file instead.
4
4
 
5
+ ## [v0.6.8] - Unreleased
6
+
7
+ ### Added
8
+
9
+ - Added explicit reuse of passing implementation checks as validation evidence when final and current workspace snapshots match
10
+
11
+ <!-- generated by releaseledger -->
12
+
5
13
  ## [v0.6.7] - 2026-09-09
6
14
 
7
15
  ### Added
@@ -178,6 +178,8 @@ Rules:
178
178
 
179
179
  - `validate command -- ...` records managed validation command evidence during an active validation run.
180
180
  - A non-zero validation command does not create a `ValidationCheck`; explicitly classify and record criteria with `validate check`.
181
+ - A passing implementation command may be adopted explicitly as validation evidence with `validate check --from-implementation-check CHECK_ID` only when Taskledger reports an exact final/current workspace snapshot match.
182
+ - This is evidence reuse, not a generic command cache. Rerun validation when fresh execution or external runtime state matters.
181
183
 
182
184
  ## Archive import lock policy
183
185
 
@@ -265,6 +265,13 @@ taskledger validate finish --result passed --summary "Parser fix validated with
265
265
  ```
266
266
 
267
267
  Use `taskledger validate command -- ...` to preserve validation command cwd, output, exit status, and transcript evidence. A non-zero command is not automatically a failed acceptance criterion. If the command is a malformed probe or setup failure, correct it and rerun before recording criterion status. Only record `fail` after the target behavior was evaluated and failed.
268
+ When implementation checks have exact tested-state provenance, validation context and status may identify them as reusable. Record that decision explicitly, for example:
269
+
270
+ ```bash
271
+ taskledger validate check --criterion ac-0001 --status pass --from-implementation-check check-0002 --details "Reused passing implementation evidence on the exact current snapshot."
272
+ ```
273
+
274
+ `validate command` always executes its child command normally; it does not silently reuse implementation results.
268
275
 
269
276
  ### If validation finds a bug
270
277
 
@@ -357,6 +357,7 @@ linked-file drift checks.
357
357
  2. `taskledger validate start`
358
358
  3. Check `taskledger validate status` to see current validation state and blockers.
359
359
  4. Run verification with `taskledger validate command -- ...` whenever practical.
360
+ - If a passing implementation check is reported reusable for the exact current snapshot, a validator may cite it explicitly with `--from-implementation-check CHECK_ID` instead of rerunning that command.
360
361
  5. Record criterion results: `taskledger validate check --criterion ac-0001 --status pass|fail|warn|not_run --evidence "..."`
361
362
  6. Optionally waive criteria with user authority: `taskledger validate waive --criterion ac-0001 --reason "..."`.
362
363
  7. Check `taskledger validate status` again to confirm all mandatory gates pass.
@@ -397,6 +398,7 @@ not interpret those references.
397
398
  taskledger link add --url specs/behavior/features/checkout/payment.feature --label "behavior spec"
398
399
  taskledger file link specs/behavior/features/checkout/payment.feature --kind doc --label "behavior spec"
399
400
  taskledger validate check --criterion ac-0001 --status pass --evidence "pytest tests/test_checkout_payment.py::test_payment_flow"
401
+ taskledger validate check --criterion ac-0001 --status pass --from-implementation-check check-0002 --details "Reused exact-snapshot implementation evidence"
400
402
  ```
401
403
 
402
404
  ## Required logging
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.6.7'
22
- __version_tuple__ = version_tuple = (0, 6, 7)
21
+ __version__ = version = '0.6.8'
22
+ __version_tuple__ = version_tuple = (0, 6, 8)
23
23
 
24
- __commit_id__ = commit_id = 'gfa5b2b772'
24
+ __commit_id__ = commit_id = 'g4f9cd16f0'
@@ -248,6 +248,7 @@ def register_validate_v2_commands(app: typer.Typer) -> None:
248
248
  details: str | None,
249
249
  evidence: list[str] | None,
250
250
  task_ref: str | None,
251
+ implementation_check_refs: list[str] | None,
251
252
  ) -> None:
252
253
  state = cli_state_from_context(ctx)
253
254
  try:
@@ -260,6 +261,7 @@ def register_validate_v2_commands(app: typer.Typer) -> None:
260
261
  status=status,
261
262
  details=details,
262
263
  evidence=tuple(evidence or ()),
264
+ implementation_check_refs=tuple(implementation_check_refs or ()),
263
265
  )
264
266
  except LaunchError as exc:
265
267
  emit_error(ctx, exc)
@@ -272,6 +274,13 @@ def register_validate_v2_commands(app: typer.Typer) -> None:
272
274
  criterion: Annotated[str, typer.Option("--criterion")],
273
275
  status: Annotated[str, typer.Option("--status")] = "pass",
274
276
  evidence: Annotated[list[str] | None, typer.Option("--evidence")] = None,
277
+ implementation_check_refs: Annotated[
278
+ list[str] | None,
279
+ typer.Option(
280
+ "--from-implementation-check",
281
+ help="Explicitly adopt reusable implementation check evidence.",
282
+ ),
283
+ ] = None,
275
284
  name: Annotated[str | None, typer.Option("--name")] = None,
276
285
  details: Annotated[str | None, typer.Option("--details")] = None,
277
286
  task_ref: TaskOption = None,
@@ -284,6 +293,7 @@ def register_validate_v2_commands(app: typer.Typer) -> None:
284
293
  details=details,
285
294
  evidence=evidence,
286
295
  task_ref=task_ref,
296
+ implementation_check_refs=implementation_check_refs,
287
297
  )
288
298
 
289
299
  @app.command("finish")
@@ -30,6 +30,12 @@ class ImplementationCheckRecord:
30
30
  command: str
31
31
  argv: tuple[str, ...] = ()
32
32
  exit_code: int | None = None
33
+ cwd: str | None = None
34
+ workspace_git_commit: str | None = None
35
+ workspace_content_hash: str | None = None
36
+ workspace_paths_hash: str | None = None
37
+ workspace_entry_count: int | None = None
38
+ workspace_snapshot_format: str | None = None
33
39
  status: Literal["passed", "failed", "unknown"] = "unknown"
34
40
  category: Literal[
35
41
  "test", "lint", "format", "typecheck", "build", "security", "other"
@@ -54,6 +60,12 @@ class ImplementationCheckRecord:
54
60
  "command": self.command,
55
61
  "argv": list(self.argv),
56
62
  "exit_code": self.exit_code,
63
+ "cwd": self.cwd,
64
+ "workspace_git_commit": self.workspace_git_commit,
65
+ "workspace_content_hash": self.workspace_content_hash,
66
+ "workspace_paths_hash": self.workspace_paths_hash,
67
+ "workspace_entry_count": self.workspace_entry_count,
68
+ "workspace_snapshot_format": self.workspace_snapshot_format,
57
69
  "status": self.status,
58
70
  "category": self.category,
59
71
  "summary": self.summary,
@@ -86,6 +98,14 @@ class ImplementationCheckRecord:
86
98
  timestamp=_optional_string(data.get("timestamp")) or utc_now_iso(),
87
99
  command=_string_value(data, "command"),
88
100
  argv=_string_tuple(data.get("argv")),
101
+ cwd=_optional_string(data.get("cwd")),
102
+ workspace_git_commit=_optional_string(data.get("workspace_git_commit")),
103
+ workspace_content_hash=_optional_string(data.get("workspace_content_hash")),
104
+ workspace_paths_hash=_optional_string(data.get("workspace_paths_hash")),
105
+ workspace_entry_count=_optional_int(data.get("workspace_entry_count")),
106
+ workspace_snapshot_format=_optional_string(
107
+ data.get("workspace_snapshot_format")
108
+ ),
89
109
  exit_code=_optional_int(data.get("exit_code")),
90
110
  status=cast(Literal["passed", "failed", "unknown"], status),
91
111
  category=cast(
@@ -386,6 +386,7 @@ class ValidationCheck:
386
386
  status: ValidationCheckStatus = "pass"
387
387
  details: str | None = None
388
388
  evidence: tuple[str, ...] = ()
389
+ implementation_check_refs: tuple[str, ...] = ()
389
390
  waiver: CriterionWaiver | None = None
390
391
 
391
392
  def to_dict(self) -> dict[str, object]:
@@ -397,6 +398,7 @@ class ValidationCheck:
397
398
  "details": self.details,
398
399
  "evidence": list(self.evidence),
399
400
  "waiver": self.waiver.to_dict() if self.waiver is not None else None,
401
+ "implementation_check_refs": list(self.implementation_check_refs),
400
402
  }
401
403
  return payload
402
404
 
@@ -423,6 +425,9 @@ class ValidationCheck:
423
425
  status=status,
424
426
  details=_optional_string(data.get("details")),
425
427
  evidence=_string_tuple(data.get("evidence")),
428
+ implementation_check_refs=_string_tuple(
429
+ data.get("implementation_check_refs")
430
+ ),
426
431
  waiver=CriterionWaiver.from_dict(data.get("waiver")),
427
432
  )
428
433
 
@@ -0,0 +1,240 @@
1
+ """Eligibility checks for reusing implementation command evidence."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import shlex
6
+ from dataclasses import dataclass
7
+ from pathlib import Path
8
+
9
+ from taskledger.domain.check import ImplementationCheckRecord
10
+ from taskledger.domain.models import TaskRecord, TaskRunRecord
11
+ from taskledger.services.workspace_snapshot import (
12
+ SNAPSHOT_FORMAT,
13
+ WorkspaceContentSnapshot,
14
+ capture_workspace_content_snapshot,
15
+ )
16
+ from taskledger.storage.task_store import list_checks, resolve_run
17
+
18
+
19
+ @dataclass(frozen=True, slots=True)
20
+ class CheckReuseEvaluation:
21
+ eligible: bool
22
+ reason_code: str
23
+ message: str
24
+ check_id: str
25
+ command: str
26
+ implementation_run: str
27
+ snapshot_match: bool
28
+ current_workspace_match: bool
29
+
30
+ def to_dict(self) -> dict[str, object]:
31
+ return {
32
+ "eligible": self.eligible,
33
+ "reason_code": self.reason_code,
34
+ "message": self.message,
35
+ "check_id": self.check_id,
36
+ "command": self.command,
37
+ "implementation_run": self.implementation_run,
38
+ "snapshot_match": self.snapshot_match,
39
+ "current_workspace_match": self.current_workspace_match,
40
+ }
41
+
42
+
43
+ def _evaluation(
44
+ check: ImplementationCheckRecord,
45
+ *,
46
+ eligible: bool = False,
47
+ reason_code: str,
48
+ message: str,
49
+ snapshot_match: bool = False,
50
+ current_workspace_match: bool = False,
51
+ ) -> CheckReuseEvaluation:
52
+ return CheckReuseEvaluation(
53
+ eligible=eligible,
54
+ reason_code=reason_code,
55
+ message=message,
56
+ check_id=check.check_id,
57
+ command=check.command,
58
+ implementation_run=check.implementation_run,
59
+ snapshot_match=snapshot_match,
60
+ current_workspace_match=current_workspace_match,
61
+ )
62
+
63
+
64
+ def _has_check_snapshot(check: ImplementationCheckRecord) -> bool:
65
+ return all(
66
+ value is not None
67
+ for value in (
68
+ check.cwd,
69
+ check.workspace_git_commit,
70
+ check.workspace_content_hash,
71
+ check.workspace_paths_hash,
72
+ check.workspace_entry_count,
73
+ check.workspace_snapshot_format,
74
+ )
75
+ )
76
+
77
+
78
+ def _has_implementation_snapshot(run: TaskRunRecord) -> bool:
79
+ return all(
80
+ value is not None
81
+ for value in (
82
+ run.workspace_git_commit,
83
+ run.workspace_content_hash,
84
+ run.workspace_paths_hash,
85
+ run.workspace_entry_count,
86
+ run.workspace_snapshot_format,
87
+ )
88
+ )
89
+
90
+
91
+ def _check_matches_run(
92
+ check: ImplementationCheckRecord, run: TaskRunRecord
93
+ ) -> tuple[bool, str]:
94
+ if check.workspace_snapshot_format != run.workspace_snapshot_format:
95
+ return False, "snapshot_format_mismatch"
96
+ if check.workspace_git_commit != run.workspace_git_commit:
97
+ return False, "check_commit_mismatch"
98
+ if check.workspace_content_hash != run.workspace_content_hash:
99
+ return False, "check_content_mismatch"
100
+ if check.workspace_paths_hash != run.workspace_paths_hash:
101
+ return False, "check_content_mismatch"
102
+ if check.workspace_entry_count != run.workspace_entry_count:
103
+ return False, "check_content_mismatch"
104
+ return True, "eligible"
105
+
106
+
107
+ def _current_matches_run(current: WorkspaceContentSnapshot, run: TaskRunRecord) -> bool:
108
+ return (
109
+ current.git_commit == run.workspace_git_commit
110
+ and current.content_hash == run.workspace_content_hash
111
+ and current.paths_hash == run.workspace_paths_hash
112
+ and current.entry_count == run.workspace_entry_count
113
+ and SNAPSHOT_FORMAT == run.workspace_snapshot_format
114
+ )
115
+
116
+
117
+ def evaluate_implementation_check_reuse(
118
+ workspace_root: Path,
119
+ task: TaskRecord,
120
+ validation_run: TaskRunRecord | None,
121
+ check: ImplementationCheckRecord,
122
+ *,
123
+ current_state: WorkspaceContentSnapshot | None = None,
124
+ ) -> CheckReuseEvaluation:
125
+ """Evaluate whether an implementation check can be cited as evidence."""
126
+ if check.status != "passed" or check.exit_code != 0:
127
+ return _evaluation(
128
+ check,
129
+ reason_code="check_not_passed",
130
+ message="Implementation check did not pass with exit code 0.",
131
+ )
132
+
133
+ if validation_run is None or validation_run.based_on_implementation_run is None:
134
+ return _evaluation(
135
+ check,
136
+ reason_code="wrong_implementation_run",
137
+ message="Validation run has no implementation snapshot baseline.",
138
+ )
139
+
140
+ implementation_run_id = validation_run.based_on_implementation_run
141
+ if check.implementation_run != implementation_run_id:
142
+ return _evaluation(
143
+ check,
144
+ reason_code="wrong_implementation_run",
145
+ message="Implementation check belongs to a different implementation run.",
146
+ )
147
+
148
+ implementation_run = resolve_run(workspace_root, task.id, implementation_run_id)
149
+ if not _has_check_snapshot(check):
150
+ return _evaluation(
151
+ check,
152
+ reason_code="missing_check_snapshot",
153
+ message="Implementation check has no tested-state provenance.",
154
+ )
155
+ if not _has_implementation_snapshot(implementation_run):
156
+ return _evaluation(
157
+ check,
158
+ reason_code="legacy_snapshot_not_reusable",
159
+ message="Implementation run has no reusable content snapshot.",
160
+ )
161
+
162
+ snapshot_match, reason_code = _check_matches_run(check, implementation_run)
163
+ if not snapshot_match:
164
+ messages = {
165
+ "snapshot_format_mismatch": (
166
+ "Implementation check uses an incompatible snapshot format."
167
+ ),
168
+ "check_commit_mismatch": (
169
+ "Implementation check was run against a different Git commit."
170
+ ),
171
+ "check_content_mismatch": (
172
+ "Check content differs from implementation snapshot."
173
+ ),
174
+ }
175
+ return _evaluation(
176
+ check,
177
+ reason_code=reason_code,
178
+ message=messages[reason_code],
179
+ )
180
+
181
+ current = current_state or capture_workspace_content_snapshot(workspace_root)
182
+ current_workspace_match = _current_matches_run(current, implementation_run)
183
+ if not current_workspace_match:
184
+ return _evaluation(
185
+ check,
186
+ reason_code="implementation_snapshot_stale",
187
+ message=(
188
+ "Current workspace no longer matches the final implementation snapshot."
189
+ ),
190
+ snapshot_match=True,
191
+ )
192
+
193
+ return _evaluation(
194
+ check,
195
+ eligible=True,
196
+ reason_code="eligible",
197
+ message=(
198
+ "Implementation check matches the final and current workspace snapshots."
199
+ ),
200
+ snapshot_match=True,
201
+ current_workspace_match=True,
202
+ )
203
+
204
+
205
+ def reusable_implementation_checks(
206
+ workspace_root: Path,
207
+ task: TaskRecord,
208
+ validation_run: TaskRunRecord | None,
209
+ *,
210
+ current_state: WorkspaceContentSnapshot | None = None,
211
+ ) -> list[CheckReuseEvaluation]:
212
+ """Evaluate all implementation checks for a validation run."""
213
+ return [
214
+ evaluate_implementation_check_reuse(
215
+ workspace_root,
216
+ task,
217
+ validation_run,
218
+ check,
219
+ current_state=current_state,
220
+ )
221
+ for check in list_checks(workspace_root, task.id)
222
+ ]
223
+
224
+
225
+ def plan_command_matches_check(
226
+ workspace_root: Path,
227
+ plan_command: str,
228
+ check: ImplementationCheckRecord,
229
+ ) -> bool:
230
+ """Match a root-scoped plan command to a check without fuzzy equivalence."""
231
+ try:
232
+ plan_argv = tuple(shlex.split(plan_command))
233
+ except ValueError:
234
+ return False
235
+ return (
236
+ plan_argv == check.argv
237
+ and check.cwd is not None
238
+ and Path(check.cwd).expanduser().resolve()
239
+ == workspace_root.expanduser().resolve()
240
+ )
@@ -38,6 +38,12 @@ def add_check(
38
38
  "other",
39
39
  ] = "other",
40
40
  artifact_refs: tuple[str, ...] = (),
41
+ cwd: str | None = None,
42
+ workspace_git_commit: str | None = None,
43
+ workspace_content_hash: str | None = None,
44
+ workspace_paths_hash: str | None = None,
45
+ workspace_entry_count: int | None = None,
46
+ workspace_snapshot_format: str | None = None,
41
47
  ) -> ImplementationCheckRecord:
42
48
  task = resolve_task(workspace_root, task_ref)
43
49
  _tasks._ensure_not_archived(task, operation="record checks on")
@@ -74,6 +80,12 @@ def add_check(
74
80
  status=status,
75
81
  category=category,
76
82
  summary=(summary or "").strip() or None,
83
+ cwd=cwd,
84
+ workspace_git_commit=workspace_git_commit,
85
+ workspace_content_hash=workspace_content_hash,
86
+ workspace_paths_hash=workspace_paths_hash,
87
+ workspace_entry_count=workspace_entry_count,
88
+ workspace_snapshot_format=workspace_snapshot_format,
77
89
  )
78
90
  save_check(workspace_root, check)
79
91
  save_run(
@@ -40,6 +40,7 @@ def _scan_task_integrity_phases( # noqa: C901
40
40
  from taskledger.storage.task_store import (
41
41
  change_markdown_path,
42
42
  list_changes,
43
+ list_checks,
43
44
  list_handoffs_with_errors,
44
45
  list_plans,
45
46
  load_requirements,
@@ -291,6 +292,9 @@ def _scan_task_integrity_phases( # noqa: C901
291
292
  )
292
293
 
293
294
  # Validation run checks
295
+ implementation_check_ids = {
296
+ check.check_id for check in list_checks(workspace_root, task.id)
297
+ }
294
298
  for run in task_runs[task.id]:
295
299
  if run.run_type == "validation" and run.based_on_implementation_run:
296
300
  linked = run_map.get((task.id, run.based_on_implementation_run))
@@ -354,6 +358,17 @@ def _scan_task_integrity_phases( # noqa: C901
354
358
  ),
355
359
  ],
356
360
  )
361
+ for validation_check in run.checks:
362
+ for (
363
+ implementation_check_id
364
+ ) in validation_check.implementation_check_refs:
365
+ if implementation_check_id not in implementation_check_ids:
366
+ errors.append(
367
+ f"Validation check {validation_check.id} in "
368
+ f"task {task.id} "
369
+ f"references missing implementation check "
370
+ f"{implementation_check_id}."
371
+ )
357
372
 
358
373
 
359
374
  def scan_task_integrity(