dctracker 1.5.0__tar.gz → 1.6.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 (472) hide show
  1. {dctracker-1.5.0 → dctracker-1.6.0}/MANIFEST.in +4 -1
  2. {dctracker-1.5.0 → dctracker-1.6.0}/PKG-INFO +120 -58
  3. dctracker-1.5.0/dctracker.egg-info/PKG-INFO → dctracker-1.6.0/README.md +96 -82
  4. {dctracker-1.5.0 → dctracker-1.6.0}/dct/__init__.py +1 -1
  5. dctracker-1.6.0/dct/assets/__init__.py +43 -0
  6. dctracker-1.6.0/dct/assets/claude-md-snippet.md +19 -0
  7. dctracker-1.6.0/dct/assets/codex-agents.md +10 -0
  8. dctracker-1.6.0/dct/assets/codex-clog.md +101 -0
  9. dctracker-1.6.0/dct/assets/codex-clog.yaml +6 -0
  10. dctracker-1.6.0/dct/assets/codex-commit.md +342 -0
  11. dctracker-1.6.0/dct/assets/codex-commit.yaml +6 -0
  12. dctracker-1.6.0/dct/assets/codex-dct-import.md +353 -0
  13. dctracker-1.6.0/dct/assets/codex-dct-import.yaml +6 -0
  14. dctracker-1.6.0/dct/assets/codex-dct-init.md +341 -0
  15. dctracker-1.6.0/dct/assets/codex-dct-init.yaml +6 -0
  16. dctracker-1.6.0/dct/assets/codex-handoff.md +245 -0
  17. dctracker-1.6.0/dct/assets/codex-handoff.yaml +6 -0
  18. dctracker-1.6.0/dct/assets/codex-pickup.md +248 -0
  19. dctracker-1.6.0/dct/assets/codex-pickup.yaml +6 -0
  20. dctracker-1.6.0/dct/assets/codex-plan-resolve-uncertain.md +61 -0
  21. dctracker-1.6.0/dct/assets/codex-plan-resolve-uncertain.yaml +6 -0
  22. dctracker-1.6.0/dct/assets/codex-plan-status.md +90 -0
  23. dctracker-1.6.0/dct/assets/codex-plan-status.yaml +6 -0
  24. dctracker-1.6.0/dct/assets/codex-release.md +1082 -0
  25. dctracker-1.6.0/dct/assets/codex-release.yaml +6 -0
  26. dctracker-1.6.0/dct/assets/codex-track-list.md +137 -0
  27. dctracker-1.6.0/dct/assets/codex-track-list.yaml +6 -0
  28. dctracker-1.6.0/dct/assets/codex-track-resolve.md +128 -0
  29. dctracker-1.6.0/dct/assets/codex-track-resolve.yaml +6 -0
  30. dctracker-1.6.0/dct/assets/codex-track-update.md +222 -0
  31. dctracker-1.6.0/dct/assets/codex-track-update.yaml +6 -0
  32. dctracker-1.6.0/dct/assets/codex-track.md +143 -0
  33. dctracker-1.6.0/dct/assets/codex-track.yaml +6 -0
  34. dctracker-1.6.0/dct/assets/codex-triage.md +303 -0
  35. dctracker-1.6.0/dct/assets/codex-triage.yaml +6 -0
  36. dctracker-1.6.0/dct/assets/dct-reference.md +146 -0
  37. dctracker-1.6.0/dct/assets/dct-version-sync.sh +62 -0
  38. dctracker-1.6.0/dct/cli.py +4708 -0
  39. {dctracker-1.5.0 → dctracker-1.6.0}/dct/config.py +58 -9
  40. dctracker-1.6.0/dct/core/changelog.py +1452 -0
  41. dctracker-1.6.0/dct/core/changelog_file.py +802 -0
  42. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/checkpoints.py +114 -47
  43. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/engine.py +27 -1
  44. dctracker-1.6.0/dct/core/gitinfo.py +825 -0
  45. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/handoff.py +4 -0
  46. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/items.py +306 -60
  47. dctracker-1.6.0/dct/core/limits.py +38 -0
  48. dctracker-1.6.0/dct/core/plans/classification.py +207 -0
  49. dctracker-1.6.0/dct/core/plans/classify.py +152 -0
  50. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/plans/crud.py +73 -43
  51. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/plans/ingest.py +93 -67
  52. dctracker-1.6.0/dct/core/procs.py +816 -0
  53. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/projects.py +180 -45
  54. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/provenance.py +4 -1
  55. dctracker-1.6.0/dct/core/records.py +48 -0
  56. dctracker-1.6.0/dct/core/releases.py +2805 -0
  57. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/sprint.py +11 -5
  58. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/sprints.py +97 -107
  59. dctracker-1.6.0/dct/core/text.py +70 -0
  60. dctracker-1.6.0/dct/core/version.py +232 -0
  61. dctracker-1.6.0/dct/core/version_sync.py +58 -0
  62. dctracker-1.6.0/dct/db.py +1928 -0
  63. dctracker-1.6.0/dct/export.py +214 -0
  64. {dctracker-1.5.0 → dctracker-1.6.0}/dct/hooks/check-changelog-on-stop.sh +55 -8
  65. {dctracker-1.5.0 → dctracker-1.6.0}/dct/hooks/check-changelog.sh +45 -53
  66. dctracker-1.6.0/dct/hooks/dct-changelog-count.lib.sh +79 -0
  67. {dctracker-1.5.0 → dctracker-1.6.0}/dct/hooks/dct-plan-autoscan.sh +1 -1
  68. {dctracker-1.5.0 → dctracker-1.6.0}/dct/hooks/dct-task-mirror.sh +1 -1
  69. dctracker-1.6.0/dct/integrations/__init__.py +6 -0
  70. dctracker-1.6.0/dct/integrations/base.py +301 -0
  71. dctracker-1.6.0/dct/integrations/claude.py +590 -0
  72. dctracker-1.6.0/dct/integrations/codex.py +590 -0
  73. dctracker-1.6.0/dct/integrations/codex_hooks.py +312 -0
  74. dctracker-1.6.0/dct/integrations/doctor.py +206 -0
  75. dctracker-1.6.0/dct/integrations/manager.py +100 -0
  76. dctracker-1.6.0/dct/integrations/reference.py +179 -0
  77. dctracker-1.6.0/dct/mcp/server.py +4212 -0
  78. {dctracker-1.5.0 → dctracker-1.6.0}/dct/migrate.py +5 -3
  79. {dctracker-1.5.0 → dctracker-1.6.0}/dct/paths.py +67 -1
  80. dctracker-1.6.0/dct/skill_render.py +221 -0
  81. dctracker-1.6.0/dct/skill_sources/hosts/claude/allowlist-apply.md +7 -0
  82. dctracker-1.6.0/dct/skill_sources/hosts/claude/allowlist-choice.md +8 -0
  83. dctracker-1.6.0/dct/skill_sources/hosts/claude/allowlist-probe.md +1 -0
  84. dctracker-1.6.0/dct/skill_sources/hosts/claude/allowlist-status.md +2 -0
  85. dctracker-1.6.0/dct/skill_sources/hosts/claude/bootstrap.md +93 -0
  86. dctracker-1.6.0/dct/skill_sources/hosts/claude/coauthor.md +1 -0
  87. dctracker-1.6.0/dct/skill_sources/hosts/claude/conflict-locations.md +1 -0
  88. dctracker-1.6.0/dct/skill_sources/hosts/claude/delegation.md +1 -0
  89. dctracker-1.6.0/dct/skill_sources/hosts/claude/discovery.md +1 -0
  90. dctracker-1.6.0/dct/skill_sources/hosts/claude/handoff-screen.md +5 -0
  91. dctracker-1.6.0/dct/skill_sources/hosts/claude/identity.md +1 -0
  92. dctracker-1.6.0/dct/skill_sources/hosts/claude/pickup-screen.md +4 -0
  93. dctracker-1.6.0/dct/skill_sources/hosts/claude/presentation.md +13 -0
  94. dctracker-1.6.0/dct/skill_sources/hosts/claude/proposal-transport.md +11 -0
  95. dctracker-1.6.0/dct/skill_sources/hosts/claude/question-method.md +1 -0
  96. dctracker-1.6.0/dct/skill_sources/hosts/claude/question.md +1 -0
  97. dctracker-1.6.0/dct/skill_sources/hosts/claude/release-screen.md +7 -0
  98. dctracker-1.6.0/dct/skill_sources/hosts/claude/restart.md +1 -0
  99. dctracker-1.6.0/dct/skill_sources/hosts/claude/shell.md +1 -0
  100. dctracker-1.6.0/dct/skill_sources/hosts/claude/skill-prefix.md +1 -0
  101. dctracker-1.6.0/dct/skill_sources/hosts/claude/task-mirror-probe.md +6 -0
  102. dctracker-1.6.0/dct/skill_sources/hosts/claude/triage-publish.md +16 -0
  103. dctracker-1.6.0/dct/skill_sources/hosts/codex/allowlist-apply.md +1 -0
  104. dctracker-1.6.0/dct/skill_sources/hosts/codex/allowlist-choice.md +1 -0
  105. dctracker-1.6.0/dct/skill_sources/hosts/codex/allowlist-probe.md +1 -0
  106. dctracker-1.6.0/dct/skill_sources/hosts/codex/allowlist-status.md +1 -0
  107. dctracker-1.6.0/dct/skill_sources/hosts/codex/bootstrap.md +7 -0
  108. dctracker-1.6.0/dct/skill_sources/hosts/codex/coauthor.md +1 -0
  109. dctracker-1.6.0/dct/skill_sources/hosts/codex/conflict-locations.md +1 -0
  110. dctracker-1.6.0/dct/skill_sources/hosts/codex/delegation.md +1 -0
  111. dctracker-1.6.0/dct/skill_sources/hosts/codex/discovery.md +1 -0
  112. dctracker-1.6.0/dct/skill_sources/hosts/codex/handoff-screen.md +1 -0
  113. dctracker-1.6.0/dct/skill_sources/hosts/codex/identity.md +1 -0
  114. dctracker-1.6.0/dct/skill_sources/hosts/codex/pickup-screen.md +1 -0
  115. dctracker-1.6.0/dct/skill_sources/hosts/codex/presentation.md +1 -0
  116. dctracker-1.6.0/dct/skill_sources/hosts/codex/proposal-transport.md +1 -0
  117. dctracker-1.6.0/dct/skill_sources/hosts/codex/question-method.md +1 -0
  118. dctracker-1.6.0/dct/skill_sources/hosts/codex/question.md +1 -0
  119. dctracker-1.6.0/dct/skill_sources/hosts/codex/release-screen.md +1 -0
  120. dctracker-1.6.0/dct/skill_sources/hosts/codex/restart.md +1 -0
  121. dctracker-1.6.0/dct/skill_sources/hosts/codex/shell.md +1 -0
  122. dctracker-1.6.0/dct/skill_sources/hosts/codex/skill-prefix.md +1 -0
  123. dctracker-1.6.0/dct/skill_sources/hosts/codex/task-mirror-probe.md +1 -0
  124. dctracker-1.6.0/dct/skill_sources/hosts/codex/triage-publish.md +5 -0
  125. dctracker-1.6.0/dct/skill_sources/hosts/fallback/allowlist-apply.md +1 -0
  126. dctracker-1.6.0/dct/skill_sources/hosts/fallback/allowlist-choice.md +1 -0
  127. dctracker-1.6.0/dct/skill_sources/hosts/fallback/allowlist-probe.md +1 -0
  128. dctracker-1.6.0/dct/skill_sources/hosts/fallback/allowlist-status.md +1 -0
  129. dctracker-1.6.0/dct/skill_sources/hosts/fallback/bootstrap.md +1 -0
  130. dctracker-1.6.0/dct/skill_sources/hosts/fallback/coauthor.md +1 -0
  131. dctracker-1.6.0/dct/skill_sources/hosts/fallback/conflict-locations.md +1 -0
  132. dctracker-1.6.0/dct/skill_sources/hosts/fallback/delegation.md +1 -0
  133. dctracker-1.6.0/dct/skill_sources/hosts/fallback/discovery.md +1 -0
  134. dctracker-1.6.0/dct/skill_sources/hosts/fallback/footer.md +1 -0
  135. dctracker-1.6.0/dct/skill_sources/hosts/fallback/handoff-screen.md +1 -0
  136. dctracker-1.6.0/dct/skill_sources/hosts/fallback/header.md +15 -0
  137. dctracker-1.6.0/dct/skill_sources/hosts/fallback/identity.md +1 -0
  138. dctracker-1.6.0/dct/skill_sources/hosts/fallback/pickup-screen.md +1 -0
  139. dctracker-1.6.0/dct/skill_sources/hosts/fallback/presentation.md +1 -0
  140. dctracker-1.6.0/dct/skill_sources/hosts/fallback/proposal-transport.md +1 -0
  141. dctracker-1.6.0/dct/skill_sources/hosts/fallback/question-method.md +1 -0
  142. dctracker-1.6.0/dct/skill_sources/hosts/fallback/question.md +1 -0
  143. dctracker-1.6.0/dct/skill_sources/hosts/fallback/release-screen.md +1 -0
  144. dctracker-1.6.0/dct/skill_sources/hosts/fallback/restart.md +1 -0
  145. dctracker-1.6.0/dct/skill_sources/hosts/fallback/shell.md +1 -0
  146. dctracker-1.6.0/dct/skill_sources/hosts/fallback/task-mirror-probe.md +1 -0
  147. dctracker-1.6.0/dct/skill_sources/hosts/fallback/triage-publish.md +5 -0
  148. dctracker-1.6.0/dct/skill_sources/manifest.toml +126 -0
  149. dctracker-1.6.0/dct/skill_sources/shared/changelog-proof.md +56 -0
  150. dctracker-1.6.0/dct/skill_sources/shared/checkpoint-plan.md +18 -0
  151. dctracker-1.6.0/dct/skill_sources/shared/closing-gates.md +56 -0
  152. dctracker-1.6.0/dct/skill_sources/shared/consent.md +3 -0
  153. dctracker-1.6.0/dct/skill_sources/shared/creation-checkpoints.md +6 -0
  154. dctracker-1.6.0/dct/skill_sources/shared/discovery.md +3 -0
  155. dctracker-1.6.0/dct/skill_sources/shared/identity.md +9 -0
  156. dctracker-1.6.0/dct/skill_sources/shared/language.md +4 -0
  157. dctracker-1.6.0/dct/skill_sources/shared/pickup-mode.md +13 -0
  158. dctracker-1.6.0/dct/skill_sources/shared/project-trailers.md +10 -0
  159. dctracker-1.6.0/dct/skill_sources/shared/read-schema.md +1 -0
  160. dctracker-1.6.0/dct/skill_sources/shared/reference.md +51 -0
  161. dctracker-1.6.0/dct/skill_sources/shared/trailer-preferences.md +11 -0
  162. dctracker-1.6.0/dct/skill_sources/shared/type-cues.md +26 -0
  163. dctracker-1.6.0/dct/skill_sources/workflows/clog.md +88 -0
  164. dctracker-1.6.0/dct/skill_sources/workflows/commit.md +302 -0
  165. dctracker-1.5.0/dct/skills/dct-import/SKILL.md → dctracker-1.6.0/dct/skill_sources/workflows/dct-import.md +39 -36
  166. dctracker-1.6.0/dct/skill_sources/workflows/dct-init.md +313 -0
  167. dctracker-1.6.0/dct/skill_sources/workflows/handoff.md +224 -0
  168. dctracker-1.6.0/dct/skill_sources/workflows/pickup.md +216 -0
  169. dctracker-1.6.0/dct/skill_sources/workflows/plan-resolve-uncertain.md +48 -0
  170. dctracker-1.5.0/dct/skills/plan-status/SKILL.md → dctracker-1.6.0/dct/skill_sources/workflows/plan-status.md +18 -19
  171. dctracker-1.6.0/dct/skill_sources/workflows/release.md +1069 -0
  172. dctracker-1.6.0/dct/skill_sources/workflows/track-list.md +124 -0
  173. dctracker-1.6.0/dct/skill_sources/workflows/track-resolve.md +60 -0
  174. dctracker-1.6.0/dct/skill_sources/workflows/track-update.md +138 -0
  175. dctracker-1.6.0/dct/skill_sources/workflows/track.md +102 -0
  176. dctracker-1.6.0/dct/skill_sources/workflows/triage.md +279 -0
  177. dctracker-1.6.0/dct/skills/clog/SKILL.md +113 -0
  178. dctracker-1.6.0/dct/skills/commit/SKILL.md +354 -0
  179. dctracker-1.6.0/dct/skills/dct-import/SKILL.md +366 -0
  180. dctracker-1.6.0/dct/skills/dct-init/SKILL.md +454 -0
  181. dctracker-1.6.0/dct/skills/handoff/SKILL.md +266 -0
  182. dctracker-1.6.0/dct/skills/pickup/SKILL.md +263 -0
  183. dctracker-1.6.0/dct/skills/plan-resolve-uncertain/SKILL.md +74 -0
  184. dctracker-1.6.0/dct/skills/plan-status/SKILL.md +102 -0
  185. dctracker-1.6.0/dct/skills/release/SKILL.md +1100 -0
  186. dctracker-1.6.0/dct/skills/track/SKILL.md +155 -0
  187. dctracker-1.6.0/dct/skills/track-list/SKILL.md +149 -0
  188. dctracker-1.6.0/dct/skills/track-resolve/SKILL.md +140 -0
  189. dctracker-1.6.0/dct/skills/track-update/SKILL.md +234 -0
  190. dctracker-1.6.0/dct/skills/triage/SKILL.md +337 -0
  191. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/app.py +4 -0
  192. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/static/app.css +2 -0
  193. dctracker-1.6.0/dct/web/static/vendor/LICENSE.htmx.txt +13 -0
  194. dctracker-1.6.0/dct/web/static/vendor/LICENSE.uPlot.txt +21 -0
  195. dctracker-1.6.0/dct/web/static/vendor/SOURCES.txt +18 -0
  196. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/changelog/list.html +1 -1
  197. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/item_detail.html +1 -1
  198. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/partials/_items_table.html +1 -1
  199. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/sprints/detail.html +1 -0
  200. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/sprints/list.html +1 -1
  201. dctracker-1.6.0/dct/workflows/changelog_import.py +38 -0
  202. dctracker-1.6.0/dct/workflows/release/__init__.py +25 -0
  203. dctracker-1.6.0/dct/workflows/release/effects.py +7146 -0
  204. dctracker-1.6.0/dct/workflows/release/oplock.py +341 -0
  205. dctracker-1.6.0/dct/workflows/release/plan.py +1925 -0
  206. dctracker-1.6.0/dct/workflows/release/proof.py +358 -0
  207. dctracker-1.6.0/dct/workflows/rubric.py +89 -0
  208. {dctracker-1.5.0 → dctracker-1.6.0}/dct/workflows/session.py +68 -37
  209. dctracker-1.6.0/dct/workflows/task_mirror.py +164 -0
  210. dctracker-1.6.0/dct/workflows/triage.py +1873 -0
  211. dctracker-1.6.0/dct/workflows/triage_page.py +507 -0
  212. dctracker-1.5.0/README.md → dctracker-1.6.0/dctracker.egg-info/PKG-INFO +144 -39
  213. dctracker-1.6.0/dctracker.egg-info/SOURCES.txt +442 -0
  214. dctracker-1.6.0/dctracker.egg-info/dependency_links.txt +1 -0
  215. dctracker-1.6.0/dctracker.egg-info/requires.txt +30 -0
  216. dctracker-1.6.0/docs/assistant-fallbacks.md +3837 -0
  217. {dctracker-1.5.0 → dctracker-1.6.0}/pyproject.toml +26 -13
  218. dctracker-1.6.0/scripts/render_skills.py +36 -0
  219. dctracker-1.6.0/setup.py +36 -0
  220. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_adversarial.py +18 -7
  221. dctracker-1.6.0/tests/test_atomic_symlinks.py +57 -0
  222. dctracker-1.6.0/tests/test_benchmark_codex.py +425 -0
  223. dctracker-1.6.0/tests/test_branch_label_adversarial.py +294 -0
  224. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_changelog.py +6 -5
  225. dctracker-1.6.0/tests/test_changelog_branch.py +723 -0
  226. dctracker-1.6.0/tests/test_changelog_branch_migration.py +100 -0
  227. dctracker-1.6.0/tests/test_changelog_integrity.py +437 -0
  228. dctracker-1.6.0/tests/test_changelog_pr_refs.py +110 -0
  229. dctracker-1.6.0/tests/test_changelog_proof_execution.py +223 -0
  230. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_check_numbers.py +21 -0
  231. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_checkpoints.py +2 -1
  232. dctracker-1.6.0/tests/test_claude_md_snippet.py +496 -0
  233. dctracker-1.6.0/tests/test_cli_changelog_branch.py +534 -0
  234. dctracker-1.6.0/tests/test_cli_gate_filter.py +27 -0
  235. dctracker-1.6.0/tests/test_cli_handoff_context_summary.py +124 -0
  236. dctracker-1.6.0/tests/test_cli_init_noninteractive.py +29 -0
  237. dctracker-1.6.0/tests/test_cli_plan_classification.py +62 -0
  238. dctracker-1.6.0/tests/test_cli_releases.py +352 -0
  239. dctracker-1.6.0/tests/test_cli_short_title.py +76 -0
  240. dctracker-1.6.0/tests/test_cli_startup.py +104 -0
  241. dctracker-1.6.0/tests/test_cli_triage.py +852 -0
  242. dctracker-1.6.0/tests/test_cli_user_text.py +56 -0
  243. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_cli_web.py +28 -13
  244. dctracker-1.6.0/tests/test_codex_hook_install.py +374 -0
  245. dctracker-1.6.0/tests/test_codex_hooks.py +348 -0
  246. dctracker-1.6.0/tests/test_codex_integration.py +472 -0
  247. dctracker-1.6.0/tests/test_codex_task_mirror.py +176 -0
  248. dctracker-1.6.0/tests/test_commit_trailers.py +268 -0
  249. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_config.py +85 -1
  250. dctracker-1.6.0/tests/test_context_readonly.py +168 -0
  251. dctracker-1.6.0/tests/test_cross_client_e2e.py +140 -0
  252. dctracker-1.6.0/tests/test_dct_init_first_contact.py +134 -0
  253. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_export.py +21 -0
  254. dctracker-1.6.0/tests/test_export_versions.py +148 -0
  255. dctracker-1.6.0/tests/test_gate_checkpoint_kind.py +82 -0
  256. dctracker-1.6.0/tests/test_gate_closing_workflows.py +241 -0
  257. dctracker-1.6.0/tests/test_gate_policy.py +727 -0
  258. dctracker-1.6.0/tests/test_gate_race.py +100 -0
  259. dctracker-1.6.0/tests/test_gitinfo.py +329 -0
  260. dctracker-1.6.0/tests/test_gitinfo_strict.py +238 -0
  261. dctracker-1.6.0/tests/test_historical_import.py +66 -0
  262. dctracker-1.6.0/tests/test_home_isolation.py +305 -0
  263. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_hook_bypass.py +6 -0
  264. dctracker-1.6.0/tests/test_hook_changelog_branch.py +580 -0
  265. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_hook_changelog_stop.py +2 -0
  266. dctracker-1.6.0/tests/test_hook_exemption_parity.py +158 -0
  267. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_hook_plan_autoscan.py +3 -4
  268. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_hook_task_mirror.py +73 -4
  269. dctracker-1.6.0/tests/test_hook_tools_guard.py +48 -0
  270. dctracker-1.6.0/tests/test_instruction_files.py +656 -0
  271. dctracker-1.6.0/tests/test_integration_base.py +287 -0
  272. dctracker-1.6.0/tests/test_integration_cli.py +122 -0
  273. dctracker-1.6.0/tests/test_integration_lifecycle.py +86 -0
  274. dctracker-1.6.0/tests/test_integration_reference_reporting.py +148 -0
  275. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_items.py +44 -0
  276. dctracker-1.6.0/tests/test_items_create_conn.py +278 -0
  277. dctracker-1.6.0/tests/test_label_blank.py +105 -0
  278. dctracker-1.6.0/tests/test_limits.py +256 -0
  279. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_migrate.py +20 -0
  280. dctracker-1.6.0/tests/test_migration_guarantees.py +427 -0
  281. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_packaging.py +19 -6
  282. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_paths.py +79 -3
  283. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_pg_lane.py +1 -1
  284. dctracker-1.6.0/tests/test_plan_classification.py +490 -0
  285. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_plan_classify.py +90 -15
  286. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_plan_ingest.py +33 -14
  287. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_plans_crud.py +100 -0
  288. dctracker-1.6.0/tests/test_procs.py +813 -0
  289. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_projects.py +78 -17
  290. dctracker-1.6.0/tests/test_readonly_engine.py +256 -0
  291. dctracker-1.6.0/tests/test_reference_install.py +453 -0
  292. dctracker-1.6.0/tests/test_release_apply_consent.py +2449 -0
  293. dctracker-1.6.0/tests/test_release_binding.py +305 -0
  294. dctracker-1.6.0/tests/test_release_changelog_file_round2.py +1022 -0
  295. dctracker-1.6.0/tests/test_release_changelog_file_round3.py +989 -0
  296. dctracker-1.6.0/tests/test_release_changelog_file_round4.py +476 -0
  297. dctracker-1.6.0/tests/test_release_changelog_path.py +1036 -0
  298. dctracker-1.6.0/tests/test_release_conflict.py +366 -0
  299. dctracker-1.6.0/tests/test_release_consent_binding.py +468 -0
  300. dctracker-1.6.0/tests/test_release_consent_hardening.py +690 -0
  301. dctracker-1.6.0/tests/test_release_dialog_routing.py +409 -0
  302. dctracker-1.6.0/tests/test_release_effects.py +927 -0
  303. dctracker-1.6.0/tests/test_release_executor.py +371 -0
  304. dctracker-1.6.0/tests/test_release_git_effects.py +530 -0
  305. dctracker-1.6.0/tests/test_release_ledger.py +851 -0
  306. dctracker-1.6.0/tests/test_release_ledger_round3.py +500 -0
  307. dctracker-1.6.0/tests/test_release_pending_proposal.py +123 -0
  308. dctracker-1.6.0/tests/test_release_plan.py +543 -0
  309. dctracker-1.6.0/tests/test_release_plan_work_tree.py +241 -0
  310. dctracker-1.6.0/tests/test_release_prepare.py +749 -0
  311. dctracker-1.6.0/tests/test_release_preview.py +1826 -0
  312. dctracker-1.6.0/tests/test_release_proof_round3.py +366 -0
  313. dctracker-1.6.0/tests/test_release_push_scope.py +559 -0
  314. dctracker-1.6.0/tests/test_release_reconstruct.py +247 -0
  315. dctracker-1.6.0/tests/test_release_resume_contract.py +143 -0
  316. dctracker-1.6.0/tests/test_release_round4_alias.py +354 -0
  317. dctracker-1.6.0/tests/test_release_round4_git.py +561 -0
  318. dctracker-1.6.0/tests/test_release_round4_git_units.py +215 -0
  319. dctracker-1.6.0/tests/test_release_round4_ledger.py +1319 -0
  320. dctracker-1.6.0/tests/test_release_round4_lock.py +193 -0
  321. dctracker-1.6.0/tests/test_release_round4_procs.py +437 -0
  322. dctracker-1.6.0/tests/test_release_round4_proof.py +773 -0
  323. dctracker-1.6.0/tests/test_release_round4_push.py +283 -0
  324. dctracker-1.6.0/tests/test_release_round4_reconstruct.py +1054 -0
  325. dctracker-1.6.0/tests/test_release_secret_paths.py +207 -0
  326. dctracker-1.6.0/tests/test_release_skill_one_dialog.py +1841 -0
  327. dctracker-1.6.0/tests/test_release_ux_phase1.py +1144 -0
  328. dctracker-1.6.0/tests/test_release_version_suggestion.py +629 -0
  329. dctracker-1.6.0/tests/test_releases.py +516 -0
  330. dctracker-1.6.0/tests/test_releases_adversarial.py +362 -0
  331. dctracker-1.6.0/tests/test_releases_migration.py +131 -0
  332. dctracker-1.6.0/tests/test_rubric_classify.py +126 -0
  333. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_server_acks.py +192 -7
  334. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_server_alwaysload.py +4 -0
  335. dctracker-1.6.0/tests/test_server_changelog_branch.py +215 -0
  336. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_server_handoff_view.py +8 -5
  337. dctracker-1.6.0/tests/test_server_input_hardening.py +238 -0
  338. dctracker-1.6.0/tests/test_server_plan_classification.py +66 -0
  339. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_server_protocol.py +7 -6
  340. dctracker-1.6.0/tests/test_server_releases.py +248 -0
  341. dctracker-1.6.0/tests/test_server_triage.py +809 -0
  342. dctracker-1.6.0/tests/test_server_wire.py +170 -0
  343. dctracker-1.6.0/tests/test_session_concurrency.py +327 -0
  344. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_setup_wiring.py +1 -1
  345. dctracker-1.6.0/tests/test_shared_reference.py +118 -0
  346. dctracker-1.6.0/tests/test_short_title.py +344 -0
  347. dctracker-1.6.0/tests/test_short_title_migration.py +131 -0
  348. dctracker-1.6.0/tests/test_skill_dct_init_reference.py +363 -0
  349. dctracker-1.6.0/tests/test_skill_prose.py +271 -0
  350. dctracker-1.6.0/tests/test_skill_prose_changelog.py +1131 -0
  351. dctracker-1.6.0/tests/test_skill_render.py +262 -0
  352. dctracker-1.6.0/tests/test_skill_trailer_rules.py +110 -0
  353. dctracker-1.6.0/tests/test_skills_fewer_questions.py +1439 -0
  354. dctracker-1.6.0/tests/test_skills_language_rule.py +74 -0
  355. dctracker-1.6.0/tests/test_skills_screen_in_dialog.py +142 -0
  356. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_sprint.py +1 -1
  357. dctracker-1.6.0/tests/test_suite_isolation.py +86 -0
  358. dctracker-1.6.0/tests/test_triage_export.py +240 -0
  359. dctracker-1.6.0/tests/test_triage_ledger.py +2581 -0
  360. dctracker-1.6.0/tests/test_triage_page.py +883 -0
  361. dctracker-1.6.0/tests/test_triage_schema.py +766 -0
  362. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_update.py +14 -8
  363. dctracker-1.6.0/tests/test_update_item_gates.py +187 -0
  364. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_version.py +56 -0
  365. dctracker-1.6.0/tests/test_version_sync_template.py +273 -0
  366. dctracker-1.6.0/tests/test_version_write_contract.py +204 -0
  367. dctracker-1.6.0/tests/test_web_short_title.py +72 -0
  368. dctracker-1.6.0/tests/test_workflow_source_contract.py +193 -0
  369. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_workflows.py +42 -6
  370. dctracker-1.6.0/tests/test_worktree_paths.py +70 -0
  371. dctracker-1.5.0/dct/assets/__init__.py +0 -24
  372. dctracker-1.5.0/dct/assets/claude-md-snippet.md +0 -188
  373. dctracker-1.5.0/dct/cli.py +0 -2485
  374. dctracker-1.5.0/dct/core/changelog.py +0 -112
  375. dctracker-1.5.0/dct/core/plans/classify.py +0 -94
  376. dctracker-1.5.0/dct/core/version.py +0 -116
  377. dctracker-1.5.0/dct/db.py +0 -935
  378. dctracker-1.5.0/dct/export.py +0 -107
  379. dctracker-1.5.0/dct/integrations/__init__.py +0 -5
  380. dctracker-1.5.0/dct/integrations/claude.py +0 -430
  381. dctracker-1.5.0/dct/mcp/server.py +0 -2407
  382. dctracker-1.5.0/dct/skills/clog/SKILL.md +0 -68
  383. dctracker-1.5.0/dct/skills/commit/SKILL.md +0 -114
  384. dctracker-1.5.0/dct/skills/dct-init/SKILL.md +0 -290
  385. dctracker-1.5.0/dct/skills/handoff/SKILL.md +0 -219
  386. dctracker-1.5.0/dct/skills/pickup/SKILL.md +0 -174
  387. dctracker-1.5.0/dct/skills/plan-resolve-uncertain/SKILL.md +0 -83
  388. dctracker-1.5.0/dct/skills/release/SKILL.md +0 -294
  389. dctracker-1.5.0/dct/skills/track/SKILL.md +0 -128
  390. dctracker-1.5.0/dct/skills/track-list/SKILL.md +0 -135
  391. dctracker-1.5.0/dct/skills/track-resolve/SKILL.md +0 -52
  392. dctracker-1.5.0/dct/skills/track-update/SKILL.md +0 -121
  393. dctracker-1.5.0/dct/web/static/vendor/SOURCES.txt +0 -10
  394. dctracker-1.5.0/dctracker.egg-info/SOURCES.txt +0 -162
  395. dctracker-1.5.0/dctracker.egg-info/requires.txt +0 -27
  396. dctracker-1.5.0/tests/test_claude_md_snippet.py +0 -130
  397. dctracker-1.5.0/tests/test_server_wire.py +0 -99
  398. dctracker-1.5.0/tests/test_skill_prose.py +0 -34
  399. {dctracker-1.5.0 → dctracker-1.6.0}/LICENSE +0 -0
  400. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/__init__.py +0 -0
  401. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/analytics.py +0 -0
  402. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/decisions.py +0 -0
  403. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/ids.py +0 -0
  404. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/plans/__init__.py +0 -0
  405. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/plans/parser.py +0 -0
  406. {dctracker-1.5.0 → dctracker-1.6.0}/dct/core/tags.py +0 -0
  407. {dctracker-1.5.0 → dctracker-1.6.0}/dct/mcp/__init__.py +0 -0
  408. {dctracker-1.5.0 → dctracker-1.6.0}/dct/server.py +0 -0
  409. {dctracker-1.5.0 → dctracker-1.6.0}/dct/services/__init__.py +0 -0
  410. {dctracker-1.5.0 → dctracker-1.6.0}/dct/setup.py +0 -0
  411. /dctracker-1.5.0/dctracker.egg-info/dependency_links.txt → /dctracker-1.6.0/dct/skill_sources/hosts/fallback/skill-prefix.md +0 -0
  412. {dctracker-1.5.0 → dctracker-1.6.0}/dct/update.py +0 -0
  413. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/__init__.py +0 -0
  414. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/blueprints/__init__.py +0 -0
  415. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/blueprints/analytics.py +0 -0
  416. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/blueprints/changelog.py +0 -0
  417. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/blueprints/decisions.py +0 -0
  418. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/blueprints/events.py +0 -0
  419. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/blueprints/handoffs.py +0 -0
  420. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/blueprints/home.py +0 -0
  421. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/blueprints/items.py +0 -0
  422. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/blueprints/plans.py +0 -0
  423. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/blueprints/projects.py +0 -0
  424. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/blueprints/sprints.py +0 -0
  425. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/changes.py +0 -0
  426. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/serializers.py +0 -0
  427. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/static/app.js +0 -0
  428. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/static/vendor/htmx.min.js +0 -0
  429. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/static/vendor/uPlot.iife.min.js +0 -0
  430. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/static/vendor/uPlot.min.css +0 -0
  431. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/analytics.html +0 -0
  432. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/base.html +0 -0
  433. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/decisions/list.html +0 -0
  434. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/handoffs/list.html +0 -0
  435. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/home.html +0 -0
  436. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/items_list.html +0 -0
  437. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/partials/_bars.html +0 -0
  438. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/partials/_checkpoint_steps.html +0 -0
  439. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/partials/_plan_section.html +0 -0
  440. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/partials/_project_card.html +0 -0
  441. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/plans/detail.html +0 -0
  442. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/plans/list.html +0 -0
  443. {dctracker-1.5.0 → dctracker-1.6.0}/dct/web/templates/project_home.html +0 -0
  444. {dctracker-1.5.0 → dctracker-1.6.0}/dct/workflows/__init__.py +0 -0
  445. {dctracker-1.5.0 → dctracker-1.6.0}/dctracker.egg-info/entry_points.txt +0 -0
  446. {dctracker-1.5.0 → dctracker-1.6.0}/dctracker.egg-info/top_level.txt +0 -0
  447. {dctracker-1.5.0 → dctracker-1.6.0}/setup.cfg +0 -0
  448. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_analytics.py +0 -0
  449. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_changes.py +0 -0
  450. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_cli_prompts.py +0 -0
  451. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_cli_sprints.py +0 -0
  452. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_cli_tags.py +0 -0
  453. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_cli_workflows.py +0 -0
  454. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_decisions_crud.py +0 -0
  455. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_engine.py +0 -0
  456. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_handoff.py +0 -0
  457. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_ids.py +0 -0
  458. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_ingest_dogfood.py +0 -0
  459. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_migration.py +0 -0
  460. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_plan_parser.py +0 -0
  461. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_provenance.py +0 -0
  462. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_restructure.py +0 -0
  463. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_server_workflow_ops.py +0 -0
  464. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_setup.py +0 -0
  465. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_sprints_crud.py +0 -0
  466. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_tags.py +0 -0
  467. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_web_analytics.py +0 -0
  468. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_web_app.py +0 -0
  469. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_web_items.py +0 -0
  470. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_web_structural.py +0 -0
  471. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_web_views.py +0 -0
  472. {dctracker-1.5.0 → dctracker-1.6.0}/tests/test_windows_support.py +0 -0
@@ -2,7 +2,10 @@
2
2
  # packaged asset must be grafted here as well as declared in package-data.
3
3
  graft dct/skills
4
4
  graft dct/hooks
5
- recursive-include dct/assets *.md
5
+ graft dct/assets
6
6
  graft dct/web/templates
7
7
  graft dct/web/static
8
8
  global-exclude *.py[cod] .DS_Store
9
+ graft dct/skill_sources
10
+ include scripts/render_skills.py
11
+ include docs/assistant-fallbacks.md
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dctracker
3
- Version: 1.5.0
4
- Summary: Deterministic Context Tracker (dct) — cross-project tracking, changelog, and release tooling for Claude Code.
3
+ Version: 1.6.0
4
+ Summary: Deterministic Context Tracker (dct) — cross-project tracking, changelog, and release tooling for AI coding clients.
5
5
  Author-email: fotodeveloper <dev@fotodeveloper.com>
6
- License-Expression: MIT
6
+ License-Expression: MIT AND 0BSD
7
7
  Project-URL: Homepage, https://dctools.dev
8
8
  Project-URL: Repository, https://github.com/fotodeveloper/dct
9
9
  Project-URL: Changelog, https://github.com/fotodeveloper/dct/blob/main/changelog.md
10
- Keywords: claude-code,mcp,tracking,changelog,sprints,developer-tools,cli
10
+ Keywords: claude-code,codex,mcp,tracking,changelog,sprints,developer-tools,cli
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Environment :: Console
13
13
  Classifier: Intended Audience :: Developers
@@ -19,26 +19,31 @@ Classifier: Topic :: Software Development
19
19
  Requires-Python: >=3.11
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
- Requires-Dist: sqlalchemy>=2.0
23
- Requires-Dist: python-ulid>=2.0
24
- Requires-Dist: platformdirs>=4.9.6; sys_platform == "win32"
22
+ License-File: dct/web/static/vendor/LICENSE.htmx.txt
23
+ License-File: dct/web/static/vendor/LICENSE.uPlot.txt
24
+ Requires-Dist: packaging>=26.3
25
+ Requires-Dist: sqlalchemy>=2.0.52
26
+ Requires-Dist: python-ulid>=4.0.1
27
+ Requires-Dist: platformdirs>=4.11.8; sys_platform == "win32"
25
28
  Provides-Extra: pg
26
- Requires-Dist: psycopg[binary]; extra == "pg"
29
+ Requires-Dist: psycopg[binary]>=3.3.5; extra == "pg"
27
30
  Provides-Extra: mcp
28
- Requires-Dist: mcp<3,>=2; extra == "mcp"
31
+ Requires-Dist: mcp<3,>=2.2; extra == "mcp"
29
32
  Provides-Extra: web
30
- Requires-Dist: flask>=3.0; extra == "web"
31
- Requires-Dist: markdown>=3.5; extra == "web"
33
+ Requires-Dist: flask>=3.1.3; extra == "web"
34
+ Requires-Dist: markdown>=3.10.3; extra == "web"
32
35
  Provides-Extra: dev
33
- Requires-Dist: pytest; extra == "dev"
34
- Requires-Dist: pytest-cov; extra == "dev"
36
+ Requires-Dist: pytest>=9.1.1; extra == "dev"
37
+ Requires-Dist: pytest-cov>=7.1.0; extra == "dev"
38
+ Requires-Dist: pytest-xdist>=3.8.0; extra == "dev"
35
39
  Provides-Extra: all
36
- Requires-Dist: psycopg[binary]; extra == "all"
37
- Requires-Dist: mcp<3,>=2; extra == "all"
38
- Requires-Dist: flask>=3.0; extra == "all"
39
- Requires-Dist: markdown>=3.5; extra == "all"
40
- Requires-Dist: pytest; extra == "all"
41
- Requires-Dist: pytest-cov; extra == "all"
40
+ Requires-Dist: psycopg[binary]>=3.3.5; extra == "all"
41
+ Requires-Dist: mcp<3,>=2.2; extra == "all"
42
+ Requires-Dist: flask>=3.1.3; extra == "all"
43
+ Requires-Dist: markdown>=3.10.3; extra == "all"
44
+ Requires-Dist: pytest>=9.1.1; extra == "all"
45
+ Requires-Dist: pytest-cov>=7.1.0; extra == "all"
46
+ Requires-Dist: pytest-xdist>=3.8.0; extra == "all"
42
47
  Dynamic: license-file
43
48
 
44
49
  # dct — Deterministic Context Tracker
@@ -48,7 +53,9 @@ Dynamic: license-file
48
53
  [![CI](https://github.com/fotodeveloper/dct/actions/workflows/ci.yml/badge.svg)](https://github.com/fotodeveloper/dct/actions/workflows/ci.yml)
49
54
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/fotodeveloper/dct/blob/main/LICENSE)
50
55
 
51
- dct gives AI coding assistants persistent, queryable memory: project state read from a database instead of guessed. One database shared by all your projects tracks issues, todos, changelog entries, plans, sprints, decisions, and session handoffs. The MCP (Model Context Protocol) server and CLI work with any MCP-capable assistant (Cursor, Windsurf, Zed, and friends); [Claude Code](https://claude.com/claude-code) gets the deepest integration, with 13 slash-command skills and 4 automation hooks on top of the 55 MCP tools.
56
+ dct makes your work state queryable: what is open, which checkpoints block completion, what was decided, and where the next session should resume. One user-scoped database connects issues, todos, changelog entries, plans, sprints, decisions, and session handoffs across your projects. Assistants and scripts retrieve that state through 76 MCP tools or the CLI instead of reconstructing it from a conversation.
57
+
58
+ [Claude Code](https://claude.com/claude-code) has the established integration. DCT 1.6.0 packages both clients with 14 slash-command skills, 4 Claude automation hooks and experimental native Codex hooks; availability and limits differ by client. See the [capability matrix](https://github.com/fotodeveloper/dct/blob/main/docs/integrations.md#capability-matrix).
52
59
 
53
60
  Part of the **dc tools** family ([dctools.dev](https://dctools.dev)) — *deterministic context* for AI-assisted development.
54
61
 
@@ -56,19 +63,19 @@ Part of the **dc tools** family ([dctools.dev](https://dctools.dev)) — *determ
56
63
 
57
64
  You have a dozen side projects. Every AI coding session starts cold — the assistant has no memory of what you decided last week, which bug you were mid-fix on, or why you picked SQLite over Postgres. So you re-explain, or it guesses.
58
65
 
59
- The usual trackers don't fill the gap. Your assistant can drive GitHub Issues these days (`gh`, the official MCP server), but issues live per-repo on someone else's server, with no notion of a cross-project view, a sprint in flight, a session handoff, or a gate that keeps an item open until you've validated it — and Jira is heavier still. `TODO.md` files rot the moment you stop grooming them. Assistant memory files (CLAUDE.md, auto-memory) help, but they're prose: un-queryable, unstructured, and invisible to your other tools. dct is the structured half — typed items with priorities, state, and gates that any session, script, or MCP client can query.
66
+ A conversation explains the work, but does not provide a reliable query for its current state. dct stores typed items, explicit checkpoint outcomes, sprint membership, decisions, and handoffs in a shared ledger. Markdown plans remain files; their indexed state links planning to execution. The next assistant can read the same records as your CLI or dashboard.
60
67
 
61
68
  dct is built for exactly this:
62
69
 
63
70
  - **One user-scoped database** across all your projects — one place to ask "what's open everywhere?" Local-first: SQLite by default, so your tracking data stays on your machine, with first-class PostgreSQL support when you want a server-grade backend.
64
71
  - **A full tracking model** — issues, todos, features, ideas, and improvements, each with priority, notes, and per-item checkpoints; gate checkpoints (dogfood, security, review, approval) keep an item open until they pass.
65
72
  - **Your markdown plans, indexed** — specs, roadmaps, and ADRs stay plain markdown files; dct anchors their sections and checkpoints in the database, so plan state is queryable and promotable to items and sprints.
66
- - **MCP-native** — the assistant reads and writes tracking directly: no copy-paste, no context loss.
73
+ - **MCP-native** — the assistant queries and updates the tracking ledger through structured tools.
67
74
  - **Changelog-first releases** — entries accumulate as you work (your assistant writes them); release day is one command.
68
75
  - **Soft-delete ledger** — notes, checkpoints, and handoffs are removed from view at most; nothing is ever hard-deleted.
69
76
  - **Session handoffs** — end a session with a handoff prompt; the next one picks up where you left off.
70
77
 
71
- The day-to-day learning curve is your assistant's, not yours. There is no UI to master and no required syntax: after a one-time `dct init` you keep talking the way you already do — "track this", "I fixed it", "what's open?" — and the assistant does the bookkeeping. The slash commands below are optional shortcuts for the same moves, and every one of them is equally an MCP tool and a CLI command, so the whole workflow runs on any MCP client.
78
+ With a configured client, you can ask your assistant to "track this", "record what changed", or "show the next checkpoint". Packaged skills explain when to use DCT and how to interpret the results. Their availability depends on the client; generic MCP integrations require you to supply equivalent workflow instructions.
72
79
 
73
80
  ## What a session looks like
74
81
 
@@ -82,7 +89,7 @@ Created issue #12 in myproj (P2, open)
82
89
  Changelog entry added (unreleased) — issue #12 resolved
83
90
 
84
91
  > /handoff
85
- Sprint set (1 item); handoff prompt stored for the next session
92
+ Sprint preserved; handoff prompt stored for the next session
86
93
 
87
94
  # next morning, new session
88
95
  > /pickup
@@ -90,11 +97,13 @@ Handoff: "Frontmatter crash is fixed; release when CI is green."
90
97
  Proposed first action: /release
91
98
  ```
92
99
 
93
- No forms, no context switch. `/handoff` and `/pickup` are Claude Code slash commands; on any other MCP client the same moves are the `handoff_work` and `pickup_work` tools. The three loops behind this session — tracking, session, release — are described below.
100
+ No forms, no context switch. Handoff and pickup workflows are packaged as skills for Claude Code and Codex; other MCP clients can use the `handoff_work` and `pickup_work` tools directly. The example uses Claude Code skills, including `/release`; Codex currently packages `clog`, `commit`, `dct-import`, `dct-init`, `handoff`, `pickup`, `plan-resolve-uncertain`, `plan-status`, `release`, `track`, `track-list`, `track-resolve`, `track-update`, `triage`. The tracking, session, and release workflows are described below.
94
101
 
95
102
  ## Installation
96
103
 
97
- Pick one — whichever matches your Python workflow. The distribution is named **`dctracker`** (PyPI); the installed command is **`dct`**. Prerequisites: Python 3.11+. Claude Code is needed only for the skills/hooks integration; the CLI and MCP server work with any MCP client.
104
+ **Release availability:** DCT **1.6.0** includes the shared CLI/MCP surface, Claude Code and Codex integration installers, `dct integrate`, `dct doctor`, and packaged workflow skills for both clients. Native Codex hooks remain experimental and require the host capabilities and explicit trust described below.
105
+
106
+ Pick one — whichever matches your Python workflow. The distribution is named **`dctracker`** (PyPI); the installed command is **`dct`**. Prerequisites: Python 3.11+. Client-specific skills and hooks require the corresponding host. The CLI and MCP server work independently of either client.
98
107
 
99
108
  ```bash
100
109
  # Option A: uv tool (recommended — isolated, upgradable)
@@ -103,7 +112,7 @@ uv tool install 'dctracker[mcp,pg]'
103
112
  # (skip it if you stay on the SQLite default), web = the local dashboard.
104
113
 
105
114
  # From source (dev):
106
- uv tool install --editable /path/to/dct --with 'mcp' --with 'psycopg[binary]'
115
+ uv tool install --editable '/path/to/dct[mcp,pg]'
107
116
  # Or straight from GitHub, no clone (e.g. to try main before a release):
108
117
  uv tool install 'dctracker[mcp,pg] @ git+https://github.com/fotodeveloper/dct'
109
118
 
@@ -127,34 +136,67 @@ dct server --help
127
136
  dct plan --help # plan subcommands
128
137
  ```
129
138
 
130
- ### First run
139
+ ### First run with Claude Code
131
140
 
132
141
  ```bash
133
142
  dct init
134
143
  ```
135
144
 
136
- The interactive wizard walks through the one-time global bootstrap:
145
+ The interactive wizard walks through the one-time global bootstrap. In DCT 1.6.0, `dct init` without a terminal refuses before setup effects; run it in a terminal, or use the explicit integration/project commands for automation:
137
146
 
138
147
  1. **Database backend** — `sqlite` (default, zero setup at the platform data dir, e.g. `~/.local/share/dctools/dct.db`) or `postgresql` (you supply the URL). It test-connects before saving.
139
- 2. **Register projects** — for each project it asks slug / path / name, then **auto-detects the version** from `VERSION`, `pyproject.toml`, `package.json`, `Cargo.toml`, or `src-tauri/tauri.conf.json`. If none matches, you get an interactive prompt (`0.0.1` / `0.1.0` / `1.0.0` shortcuts); in non-tty contexts it stores `current_version=NULL` and reminds you to set it later. Register more any time with `dct project add`.
148
+ 2. **Register projects** — for each project it asks slug / path / name, then **auto-detects the version** from `VERSION`, `pyproject.toml`, `package.json`, `Cargo.toml`, or `src-tauri/tauri.conf.json`. If none matches, you get an interactive prompt (`0.0.1` / `0.1.0` / `1.0.0` shortcuts). Register more any time with `dct project add`; that separate command can run without a terminal, storing `current_version=NULL` when no version is detected and reminding you to set it later.
140
149
  3. **MCP server** — registered at **user scope** in `~/.claude.json` (via `claude mcp add --scope user`, with a direct-edit fallback), so `/track`, `/clog`, `/release`, and the MCP tools are available in **every** Claude Code session, from any directory.
141
150
  4. **Skills + hooks** — symlinks the skills into `~/.claude/skills/` and the four hooks into `~/.claude/hooks/`. Both ship inside the package; with an editable/dev install the symlinks point at the repo, so a fix goes live without reinstall.
142
151
  5. **Hook wiring** — with your consent, merges the hooks into `~/.claude/settings.json`. The merge is idempotent, backs up the file before the first write, and never touches hooks you already have. Re-run any time with `dct hooks wire`.
143
- 6. **CLAUDE.md snippet** — with your consent, appends the packaged dct instructions to your personal `~/.claude/CLAUDE.md`. This is what makes plain phrases like "track this" reliable. The block is marker-managed and idempotent: re-runs refresh it, your own content is never touched, and the file is backed up before the first write. Decline and paste it later from [dct/assets/claude-md-snippet.md](https://github.com/fotodeveloper/dct/blob/main/dct/assets/claude-md-snippet.md).
152
+ 6. **dct reference + CLAUDE.md pointer** — installs the on-demand [dct reference](https://github.com/fotodeveloper/dct/blob/main/dct/assets/dct-reference.md) and offers a short managed pointer in your personal `~/.claude/CLAUDE.md`. DCT 1.6.0 places the shared reference in the platform config directory (`~/.config/dctools/dct-reference.md` on POSIX, honoring `XDG_CONFIG_HOME`) and preserves Claude's owned `~/.claude/dct-reference.md` compatibility alias. The pointer renders the actual resolved path. Re-runs preserve bytes outside its markers, and upgrades refresh only an existing block. An edited or foreign reference is preserved and reported before any pointer is rewritten. The reference is installed even when attaching the pointer is declined.
144
153
 
145
154
  The wizard closes with a reminder to **start a new Claude Code session** — skills, hooks, and MCP tools all load at session start. Steps 3–6 are the Claude Code integration; without Claude Code, use the wizard for steps 1–2 and register the server in your own client instead — next section.
146
155
 
147
156
  `dct init` writes the config to the platform config dir (`~/.config/dctools/dct.toml`; existing `~/.claude/dct.toml` installs keep working — `dct migrate-home` moves them), `~/.claude.json` (MCP entry), the skill/hook symlinks, and (opt-in) the settings.json wiring — see [docs/architecture.md](https://github.com/fotodeveloper/dct/blob/main/docs/architecture.md) for the full config reference and scope model.
148
157
 
149
- ### Other MCP clients (Cursor, Windsurf, Zed)
158
+ ### Codex
150
159
 
151
- The 13 skills and 4 hooks are Claude Code integrations; everything else — the 55 MCP tools and the CLI — works from any MCP client. Register `dct server` as a stdio server in your client's MCP config, e.g. for Cursor (`~/.cursor/mcp.json`):
160
+ Install DCT 1.6.0 or later, then configure the Codex integration:
161
+
162
+ ```bash
163
+ uv tool install 'dctracker[mcp]>=1.6.0'
164
+ dct integrate install codex
165
+ dct doctor --client codex --json
166
+ ```
167
+
168
+ Reconnect/start a fresh Codex session. The adapter installs MCP configuration,
169
+ `clog`, `commit`, `dct-import`, `dct-init`, `handoff`, `pickup`, `plan-resolve-uncertain`, `plan-status`, `release`, `track`, `track-list`, `track-resolve`, `track-update`, `triage` skills, and managed `AGENTS.md`
170
+ instructions. It preserves existing configuration and reports conflicting
171
+ files. The 14 packaged workflows share complete contracts; their availability is separate from client/runtime acceptance evidence. `dct-init`, `dct-import` and `plan-resolve-uncertain` require explicit invocation. Both clients receive their complete workflow contracts from one authored source.
172
+
173
+ Native hooks are **experimental**: changelog checks, stop reminders and
174
+ apply-patch autoscan require the supported host events, runtime dependencies,
175
+ and review/trust through `/hooks`. Plan mirroring additionally requires the
176
+ client to expose and emit `update_plan`; it records observed snapshots rather
177
+ than synchronizing task status. It is not available merely because the assistant
178
+ describes a plan in chat. Current runtime validation targets the local POSIX client.
179
+ See the [integration guide and capability matrix](https://github.com/fotodeveloper/dct/blob/main/docs/integrations.md)
180
+ for repair, upgrade, uninstall, runtime diagnostics and limitations.
181
+
182
+ Fresh Claude → Codex handoff and the installed pickup skill were exercised on
183
+ an isolated database without passing the previous transcript. A controlled
184
+ nine-session comparison measured median main-model input of 24,926 tokens for
185
+ one DCT pickup tool versus 23,006 for exactly the same response bytes read from a
186
+ file, an increase of approximately 8.35%. All trials returned the correct answer;
187
+ cache behavior varied, and separate guardian work means these main-task figures
188
+ are not complete billing totals. DCT's demonstrated benefit here is recovering
189
+ structured work state, not token savings. See the [acceptance evidence](https://github.com/fotodeveloper/dct/blob/main/docs/codex-acceptance.md) and [controlled benchmark results](https://github.com/fotodeveloper/dct/blob/main/docs/benchmark-codex.md#controlled-results).
190
+
191
+ ### Other MCP clients: manual setup
192
+
193
+ The 14 Claude Code skills, 4 Claude hooks and 14 Codex skills are host integrations. The 76 MCP tools and CLI provide the common tracking surface. Other clients use **generic MCP support with manual setup**; no client-specific skills, hook parity or acceptance test is implied. Register `dct server` as a stdio server using the configuration format required by your client. A common JSON shape is:
152
194
 
153
195
  ```json
154
196
  { "mcpServers": { "dct": { "command": "dct", "args": ["server"] } } }
155
197
  ```
156
198
 
157
- Then talk to your assistant as usual ("track this", "what's open?") — it drives the same tools. Slash-command equivalents: `/track` → `create_item`, `/track-list` → `list_items`, `/pickup` → `pickup_work`, `/handoff` → `handoff_work`, `/clog` → `add_changelog`, `/release` → `release_changelog`. To teach your assistant *when* to reach for them, adapt the [CLAUDE.md snippet](https://github.com/fotodeveloper/dct/blob/main/dct/assets/claude-md-snippet.md) to your client's rules file.
199
+ Provide workflow instructions for your assistant to select and combine these tools. Relevant starting points: `/track` → `create_item`, `/track-list` → `list_items`, `/pickup` → `pickup_work`, `/handoff` → `handoff_work`, `/clog` → `add_changelog`, `/release` → the local `dct release` workflow (the ledger tools `release_changelog` / `advance_release` serve a project's own release tool). These tool mappings are not substitutes for complete commit/release workflows. To teach your assistant *when* to reach for them, adapt the [dct reference](https://github.com/fotodeveloper/dct/blob/main/dct/assets/dct-reference.md) for your client and point its rules file at it, as the [CLAUDE.md pointer](https://github.com/fotodeveloper/dct/blob/main/dct/assets/claude-md-snippet.md) does for Claude Code.
158
200
 
159
201
  ### Troubleshooting
160
202
 
@@ -200,14 +242,14 @@ when the database says so, not when the conversation has moved on.
200
242
 
201
243
  AI coding sessions end; your context shouldn't.
202
244
 
203
- **Ending a session — `/handoff`** flags the items you were working on as the
204
- current sprint and stores a short prompt for whoever comes next (usually
205
- you, tomorrow). **Starting a session — `/pickup`** reads the newest unconsumed
245
+ **Ending a session — `/handoff`** stores a short prompt for whoever comes next
246
+ (usually you, tomorrow). Sprint membership changes only when explicitly
247
+ requested; otherwise it is preserved. **Starting a session — `/pickup`** reads the newest unconsumed
206
248
  handoff, shows the sprint with checkpoint progress, and proposes the first
207
249
  action, so the session starts in the middle of the work rather than from a
208
250
  cold "what were we doing?" The sprint is the durable set of what's in flight
209
- right now: it survives between sessions and cleans itself up — resolving an
210
- item drops it from the sprint automatically. Illustrative session start:
251
+ right now: it survives between sessions. Resolving an item removes it from the open-work
252
+ view while retaining its sprint membership as completion history. Illustrative session start:
211
253
 
212
254
  ```text
213
255
  > /pickup
@@ -221,7 +263,8 @@ Proposed first action: #12 — wire the theme toggle into settings.
221
263
  Handoffs live in the database: several can coexist per project
222
264
  (`scope` tags disambiguate parallel workstreams), consuming one preserves it
223
265
  in the ledger, and an unconsumed one can be amended in place. Available as
224
- skills in Claude Code, MCP tools, and the CLI — full catalogue in
266
+ skills in Claude Code and the Codex integration, MCP tools, and
267
+ the CLI — full catalogue in
225
268
  [docs/mcp-tools.md](https://github.com/fotodeveloper/dct/blob/main/docs/mcp-tools.md).
226
269
 
227
270
  ## The release loop: `/clog` → `/commit` → `/release`
@@ -237,13 +280,15 @@ changelog is already written:
237
280
 
238
281
  ```text
239
282
  > /release
240
- 15 unreleased entries → stamped as 1.4.0
241
- changelog.md regenerated (Keep a Changelog format)
242
- release: v1.4.0 committed, project version bumped
283
+ 15 unreleased entries proven by commit trailers → plan approved as 1.4.0
284
+ version files prepared (pyproject.toml) → approved, push target origin/main
285
+ stamped · changelog.md section · version files · release: v1.4.0 · tag · pushed
243
286
  ```
244
287
 
245
- One command stamps the version, exports [Keep a Changelog](https://keepachangelog.com)
246
- markdown, and makes the release commit.
288
+ One workflow plans the release from commit proof, shows the version files and
289
+ the push target for approval, then stamps the version, writes the
290
+ [Keep a Changelog](https://keepachangelog.com) section, makes the release
291
+ commit and the tag and pushes them — each step verified and resumable.
247
292
 
248
293
  ## Plans: your markdown, indexed
249
294
 
@@ -252,8 +297,8 @@ them instead of replacing them: prose stays in the file (still the source of
252
297
  truth), while sections, checkpoints, and inline decisions get stable ULID
253
298
  anchors and live state (pending/done/rejected) in the database. In Claude
254
299
  Code a background hook re-scans the file on every edit; elsewhere, run
255
- `dct plan rescan <file>`. Uncertain section headings can be classified by an
256
- optional headless LLM call through your own `claude` CLI. A plan checkpoint
300
+ `dct plan rescan <file>`. Local classification rules are the default and leave unknown headings
301
+ unresolved; a configured command can optionally enrich them. A plan checkpoint
257
302
  can be promoted to a tracked item, a section to an item or a whole sprint —
258
303
  planning and tracking stay one system.
259
304
 
@@ -266,13 +311,13 @@ and promotion to items/sprints: **[docs/plans.md](https://github.com/fotodevelop
266
311
  - **Session handoffs** — end a session with a stored prompt; `/pickup` resumes the next one mid-work
267
312
  - **Hybrid changelog** — entries in DB, export to Keep a Changelog markdown at release; enforcement hook wired at init with your consent, then **on by default per project** (opt out via `dct project changelog <slug> off`) + **per-project changelog location** (repo root by default, or a subdir like `pkg/changelog.md`)
268
313
  - **Plans, specs, roadmaps, ADRs** — index markdown plans with stable ULID anchors; state in DB, content stays in markdown
269
- - **First-class sprints** — a named, goal-scoped *current work* set that survives across sessions and self-cleans as items resolve
314
+ - **First-class sprints** — a named, goal-scoped *current work* set with persistent membership and completion history
270
315
  - **Decision records** — ADRs, sprint amendments, inline plan decisions with multi-anchor linkage
271
- - **LLM-assisted classification** — uncertain plan sections auto-resolved via `claude --print` (haiku by default; optional, uses your own `claude` CLI)
316
+ - **Plan classification** — deterministic heading rules by default; optional configured-command enrichment
272
317
  - **Passive autoscan hook** — Claude Code PostToolUse hook re-scans plan-like files in background on every edit
273
- - **MCP server** — 55 tools over stdio via the official MCP SDK 2.0; works with any MCP client (Claude Code, Cursor, Windsurf, …)
318
+ - **MCP server** — 76 tools over stdio via the official MCP SDK 2.x; client configuration and supported workflow features vary
274
319
  - **CLI** — fast `dct` command for hooks and scripts
275
- - **Skills** — Claude Code slash commands (`/track`, `/clog`, `/dct-import`, `/plan-status`, …)
320
+ - **Skills** — Claude Code slash commands (`/track`, `/clog`, `/triage`, `/dct-import`, `/plan-status`, …); 14 Codex workflows
276
321
  - **Soft deletes** — ledger pattern, nothing is ever hard-deleted
277
322
  - **DB portable** — SQLite (zero setup) or PostgreSQL
278
323
 
@@ -301,9 +346,25 @@ dct tags merge test tests # Fold "test" into "tests"
301
346
  dct clog add added "New Python parser support" --project myproj
302
347
  dct clog list --project myproj --unreleased
303
348
  dct clog count --project myproj # Used by hooks
304
- dct clog release 1.1 --project myproj # Stamp unreleased → 1.1
349
+ dct clog count --branch feat/x --include-unbranched # This branch + unbranched/server-detected
350
+ dct clog release 1.1 --project myproj --proposal-digest <p> --push-remote origin --push-branch main --push-url <url> --confirm # Alias of `dct release apply` that derives the plan itself (after `dct release prepare`): commit, tag, push to the approved target (run from a checkout)
351
+ dct clog release --patch --entries 12,15 --proposal-digest <p> --confirm --no-push # Only these (proven) entries; a local release
352
+ dct clog update 12 --branch feat/x # Amend an unreleased entry
353
+ dct clog delete 12 # Soft-delete an unreleased entry
305
354
  dct clog export --project myproj --output changelog.md
306
355
 
356
+ # Release workflow (each subcommand also takes --json)
357
+ dct release plan --patch # Read-only: proven / unproven entries, range, index state
358
+ dct release attest --entries 16 --confirm # Empty attestation commit for unproven entries
359
+ dct release plan --patch --entries 12,15 --json # The snapshot to approve (snapshot_digest)
360
+ dct release prepare --patch --entries 12,15 --plan-digest <digest> # Isolated version sync → the file list and the push target to approve
361
+ dct release apply --patch --entries 12,15 --plan-digest <digest> --proposal-digest <p> --push-remote origin --push-branch main --push-url <url> --confirm # Stamp, changelog, files, commit, tag, push to the approved target (or --no-push: local)
362
+ dct release resume # Finish an interrupted release (verifies every effect; the stored consent, no new approval)
363
+ dct release abandon --version 1.1 --reason "broken build" --confirm
364
+ dct release reconstruct --version 1.0 --confirm # Record a release made before release records
365
+ dct release takeover --version 1.0 --no-push # Preview: hand a record without consent to dct (then --takeover-digest <d> --confirm, resume)
366
+ dct release version-files # Show the version-file contract (--set a,b | --none, --confirm)
367
+
307
368
  # Projects
308
369
  dct project add myproj /path/to/myproj --name "My Project" # Version auto-detected
309
370
  dct project list
@@ -311,7 +372,7 @@ dct project detect # Print current pr
311
372
  dct project rename myproj --slug myproj2 --name "Rebranded" # Rename in-place, project_id stable
312
373
  dct project set-version myproj 1.1 # Post-factum version fix
313
374
  dct project changelog myproj off # Opt out of changelog enforcement (on by default)
314
- dct project changelog-path myproj docs/changelog.md # Changelog outside repo root; default: changelog.md
375
+ dct project changelog-path myproj docs/CHANGELOG.md # Explicit Markdown changelog path (--detect: detect the tracked one again)
315
376
 
316
377
  # Plans
317
378
  dct plan rescan /path/to/docs/plans/2026-04-17-feature.md # Idempotent rescan; hook entrypoint
@@ -344,7 +405,7 @@ dct config path # Show resolved config/data locations
344
405
 
345
406
  ## MCP Tools
346
407
 
347
- dct ships **55 MCP tools**. Zero-arg calls auto-detect the project from the session's working directory; pass `project=<slug>` to override. Write ops return a minimal ack (id + a few post-state fields); fetch full context with `get_item(id)` / `get_handoff(id)`. In Claude Code the tools register at user scope (callable as `mcp__dct__<name>`), with thirteen daily drivers always loaded and the rest fetched on demand; other MCP clients see the full flat catalogue. Whatever the client, start with `create_item`, `list_items`, `pickup_work`, and `handoff_work`:
408
+ dct ships **76 MCP tools**. Zero-arg calls auto-detect the project from the session's working directory; pass `project=<slug>` to override. Write ops return a minimal ack (id + a few post-state fields); fetch full context with `get_item(id)` / `get_handoff(id)`. In Claude Code the tools register at user scope (callable as `mcp__dct__<name>`), with thirteen daily drivers always loaded and the rest fetched on demand; other clients control tool discovery and loading according to their own MCP implementation. Whatever the client, start with `create_item`, `list_items`, `pickup_work`, and `handoff_work`:
348
409
 
349
410
  | Tool | Purpose |
350
411
  |---|---|
@@ -379,7 +440,7 @@ If the preferred port (default `8787`) is busy, the daemon auto-selects the next
379
440
 
380
441
  ## Integration with Claude Code
381
442
 
382
- Claude Code is where dct runs deepest. `dct init` offers to attach the ready-made snippet that teaches your assistant *when* to reach for each skill and MCP tool (step 6 of the wizard); to add it manually, copy **[dct/assets/claude-md-snippet.md](https://github.com/fotodeveloper/dct/blob/main/dct/assets/claude-md-snippet.md)** into your personal `~/.claude/CLAUDE.md`.
443
+ Claude Code has the established packaged integration. DCT 1.6.0 generates both clients' 14 skills, the full fallback and the concise reference from `dct/skill_sources`, with freshness checks in CI and package builds. `dct init` installs the shared reference and offers a short pointer in `~/.claude/CLAUDE.md`; the pointer names the actual resolved platform config path. Claude's owned legacy alias remains usable. Use the installer to render [the pointer template](https://github.com/fotodeveloper/dct/blob/main/dct/assets/claude-md-snippet.md); its `{{reference_path}}` slot is filled at installation. Both clients read the [reference](https://github.com/fotodeveloper/dct/blob/main/dct/assets/dct-reference.md) on demand, and per-client uninstall retains it for other clients. See [reference lifecycle details](https://github.com/fotodeveloper/dct/blob/main/docs/integrations.md#shared-reference-and-managed-pointers).
383
444
 
384
445
  ### Skills
385
446
 
@@ -391,13 +452,14 @@ Claude Code is where dct runs deepest. `dct init` offers to attach the ready-mad
391
452
  | `/track-resolve` | Resolve/close items |
392
453
  | `/clog` | Add changelog entry |
393
454
  | `/commit` | Conventional commit with version suffix + changelog gate |
394
- | `/release` | Stamp changelog + bump version + generate `changelog.md` |
455
+ | `/release` | One workflow: proof plan → version files + push target approved → stamp, `changelog.md` section, version bump, commit, tag, push |
395
456
  | `/pickup` | Session start — read handoff, show sprint, propose first action |
396
457
  | `/handoff` | Session end — flag sprint items, write handoff prompt |
397
458
  | `/dct-import` | Discover + multi-select + ingest plan-like markdown files |
398
459
  | `/dct-init` | Bootstrap dct + register the current project (interactive) |
399
460
  | `/plan-status` | Cross-plan progress dashboard |
400
- | `/plan-resolve-uncertain` | Batch classify uncertain plan sections via haiku |
461
+ | `/plan-resolve-uncertain` | Classify uncertain plan sections with configured rules/command or explicit manual choices |
462
+ | `/triage` | Review findings through the triage ledger — record the consolidated findings, build and publish the page from the ledger, take an agent's proposals, close with the owner's answers |
401
463
 
402
464
  ## Global Hooks
403
465
 
@@ -422,7 +484,7 @@ dct reads its config from the platform config dir — `~/.config/dctools/dct.tom
422
484
 
423
485
  ```toml
424
486
  [database]
425
- url = "sqlite:////home/you/.local/share/dctools/dct.db"
487
+ url = "sqlite:////path/to/dct.db"
426
488
  # or: url = "postgresql+psycopg://localhost:5432/dct"
427
489
  ```
428
490