tcw-cli 2.3.0__tar.gz → 2.5.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/PKG-INFO +108 -52
  2. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/README.md +107 -51
  3. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/pyproject.toml +2 -2
  4. tcw_cli-2.5.1/tcw/__init__.py +1 -0
  5. tcw_cli-2.5.1/tcw/harness.py +104 -0
  6. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/serve/__init__.py +55 -5
  7. tcw_cli-2.3.0/tcw/serve/dist/client/assets/index-CCjF_dHr.js → tcw_cli-2.5.1/tcw/serve/dist/client/assets/index-CNxlcI8A.js +1 -1
  8. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/serve/dist/client/index.html +1 -1
  9. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/store/base.py +651 -29
  10. tcw_cli-2.5.1/tcw/store/config_edit.py +641 -0
  11. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/store/fs.py +759 -189
  12. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/taxonomy/cli.py +2 -6
  13. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/tracker/claim.py +1 -1
  14. tcw_cli-2.5.1/tcw/tracker/create.py +207 -0
  15. tcw_cli-2.5.1/tcw/tracker/intake.py +733 -0
  16. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/tracker/jira.py +32 -2
  17. tcw_cli-2.5.1/tcw/tracker/ownership.py +193 -0
  18. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/tracker/progress.py +7 -3
  19. tcw_cli-2.5.1/tcw/tracker/sync.py +861 -0
  20. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/validate.py +23 -1
  21. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/cli.py +1608 -122
  22. tcw_cli-2.5.1/tcw/work/procedures/audit-backlog.md +125 -0
  23. tcw_cli-2.5.1/tcw/work/procedures/consolidate-plans.md +35 -0
  24. tcw_cli-2.5.1/tcw/work/procedures/create-work.md +153 -0
  25. tcw_cli-2.5.1/tcw/work/procedures/decompose.md +23 -0
  26. tcw_cli-2.5.1/tcw/work/procedures/delegation.md +26 -0
  27. tcw_cli-2.5.1/tcw/work/procedures/documentation-sync.md +100 -0
  28. tcw_cli-2.5.1/tcw/work/procedures/post-mortem.md +41 -0
  29. tcw_cli-2.5.1/tcw/work/procedures/search.md +75 -0
  30. tcw_cli-2.5.1/tcw/work/procedures/triage-issues.md +211 -0
  31. tcw_cli-2.5.1/tcw/work/procedures/unattended-work.md +38 -0
  32. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/projection.py +22 -3
  33. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/prompts/verify.md +0 -2
  34. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/recursion.py +195 -35
  35. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/resolve.py +55 -11
  36. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/templates.py +1 -1
  37. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw_cli.egg-info/PKG-INFO +108 -52
  38. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw_cli.egg-info/SOURCES.txt +36 -2
  39. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_capabilities.py +39 -0
  40. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_capabilities_federation.py +56 -14
  41. tcw_cli-2.5.1/tests/test_capability_gate_children.py +623 -0
  42. tcw_cli-2.5.1/tests/test_check_versions.py +308 -0
  43. tcw_cli-2.5.1/tests/test_child_status.py +649 -0
  44. tcw_cli-2.5.1/tests/test_config_edit.py +466 -0
  45. tcw_cli-2.5.1/tests/test_config_edit_writers.py +384 -0
  46. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_configuration_text_home.py +7 -7
  47. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_documentation_config.py +1 -1
  48. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_documentation_sync_wiring.py +7 -7
  49. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_documented_cli_surface.py +3 -3
  50. tcw_cli-2.5.1/tests/test_dynamic_skill_marker.py +118 -0
  51. tcw_cli-2.5.1/tests/test_edit_type.py +127 -0
  52. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_environment_hardness.py +10 -5
  53. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_epic_completable.py +36 -0
  54. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_eval_fixture.py +1 -1
  55. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_eval_grading.py +19 -9
  56. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_external_work_store.py +56 -0
  57. tcw_cli-2.5.1/tests/test_harness.py +65 -0
  58. tcw_cli-2.5.1/tests/test_legacy_store_config.py +346 -0
  59. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_multiproject.py +4 -1
  60. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_non_git_writes.py +1 -1
  61. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_plugin_manifests.py +94 -40
  62. tcw_cli-2.5.1/tests/test_procedure_config.py +148 -0
  63. tcw_cli-2.5.1/tests/test_procedure_verb.py +194 -0
  64. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_projection.py +18 -0
  65. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_repo_lifecycle.py +10 -5
  66. tcw_cli-2.5.1/tests/test_resolve_procedure.py +79 -0
  67. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_retention.py +125 -0
  68. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_serve.py +4 -2
  69. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_serve_write.py +143 -1
  70. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_session_bootstrap.py +179 -1
  71. tcw_cli-2.5.1/tests/test_shipped_procedures.py +165 -0
  72. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_shipped_prompts.py +7 -2
  73. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_skill_flow.py +1 -1
  74. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_skill_lifecycle_parity.py +89 -23
  75. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_skill_path_pointers.py +2 -2
  76. tcw_cli-2.5.1/tests/test_stage_validate.py +165 -0
  77. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_stage_verb.py +1 -1
  78. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_store_editor.py +23 -2
  79. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_store_provisioning.py +129 -1
  80. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_taxonomy.py +346 -2
  81. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_absent.py +25 -0
  82. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_claim.py +22 -1
  83. tcw_cli-2.5.1/tests/test_tracker_cli.py +1657 -0
  84. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_client.py +20 -2
  85. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_comment.py +21 -3
  86. tcw_cli-2.5.1/tests/test_tracker_config.py +364 -0
  87. tcw_cli-2.5.1/tests/test_tracker_create.py +250 -0
  88. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_help.py +36 -8
  89. tcw_cli-2.5.1/tests/test_tracker_hold.py +284 -0
  90. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_import.py +109 -1
  91. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_inheritance.py +81 -4
  92. tcw_cli-2.5.1/tests/test_tracker_ownership.py +289 -0
  93. tcw_cli-2.5.1/tests/test_tracker_pre_backlog.py +769 -0
  94. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_strict.py +127 -7
  95. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_surface.py +42 -0
  96. tcw_cli-2.5.1/tests/test_tracker_sync.py +2336 -0
  97. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_sync_config.py +5 -2
  98. tcw_cli-2.5.1/tests/test_tracker_validate.py +343 -0
  99. tcw_cli-2.5.1/tests/test_unattended_work_skill.py +70 -0
  100. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_validate.py +14 -3
  101. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_work.py +179 -47
  102. tcw_cli-2.5.1/tests/test_worktree_completion.py +472 -0
  103. tcw_cli-2.3.0/tcw/__init__.py +0 -1
  104. tcw_cli-2.3.0/tcw/tracker/intake.py +0 -395
  105. tcw_cli-2.3.0/tcw/tracker/sync.py +0 -410
  106. tcw_cli-2.3.0/tests/test_tracker_cli.py +0 -258
  107. tcw_cli-2.3.0/tests/test_tracker_config.py +0 -191
  108. tcw_cli-2.3.0/tests/test_tracker_sync.py +0 -965
  109. tcw_cli-2.3.0/tests/test_tracker_validate.py +0 -180
  110. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/LICENSE +0 -0
  111. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/setup.cfg +0 -0
  112. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/capabilities/__init__.py +0 -0
  113. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/capabilities/cli.py +0 -0
  114. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/cli.py +0 -0
  115. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/refs.py +0 -0
  116. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/serve/dist/client/assets/index-CXNiOIeg.css +0 -0
  117. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/serve/dist/client/theme-init.js +0 -0
  118. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/serve/dist/server.cjs +0 -0
  119. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/serve/runtime.py +0 -0
  120. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/stdin.py +0 -0
  121. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/store/__init__.py +0 -0
  122. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/store/checkouts.py +0 -0
  123. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/store/project.py +0 -0
  124. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/taxonomy/__init__.py +0 -0
  125. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/tracker/__init__.py +0 -0
  126. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/__init__.py +0 -0
  127. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/generate.py +0 -0
  128. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/hooks.py +0 -0
  129. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/prompts/implement.md +0 -0
  130. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/prompts/inbox.md +0 -0
  131. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/prompts/plan.md +0 -0
  132. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/prompts/postmortem.md +0 -0
  133. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/prompts/request.md +0 -0
  134. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw/work/prompts/spec.md +0 -0
  135. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw_cli.egg-info/dependency_links.txt +0 -0
  136. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw_cli.egg-info/entry_points.txt +0 -0
  137. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw_cli.egg-info/requires.txt +0 -0
  138. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tcw_cli.egg-info/top_level.txt +0 -0
  139. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_body_prompt.py +0 -0
  140. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_capabilities_reset.py +0 -0
  141. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_capabilities_rm.py +0 -0
  142. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_capabilities_sidecar.py +0 -0
  143. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_capability_ref_wording.py +0 -0
  144. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_cli_help_coverage.py +0 -0
  145. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_committed_paths.py +0 -0
  146. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_cut_version.py +0 -0
  147. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_documentation_prompt.py +0 -0
  148. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_eval_coverage.py +0 -0
  149. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_eval_files_changed.py +0 -0
  150. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_eval_runner.py +0 -0
  151. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_falsification_rule.py +0 -0
  152. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_generate_hook.py +0 -0
  153. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_inbox_title.py +0 -0
  154. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_lifecycle_baseline.py +0 -0
  155. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_lifecycle_hooks.py +0 -0
  156. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_lifecycle_inert.py +0 -0
  157. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_lifecycle_policy.py +0 -0
  158. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_lifecycle_validation.py +0 -0
  159. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_project_overrides.py +0 -0
  160. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_project_registry.py +0 -0
  161. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_prompt_fallback.py +0 -0
  162. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_qualified_ref.py +0 -0
  163. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_recursion.py +0 -0
  164. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_refs.py +0 -0
  165. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_remote_session_setup.py +0 -0
  166. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_resolve.py +0 -0
  167. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_scaffold.py +0 -0
  168. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_serve_descendants.py +0 -0
  169. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_serve_projection.py +0 -0
  170. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_serve_resolve.py +0 -0
  171. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_serve_runtime.py +0 -0
  172. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_show_json.py +0 -0
  173. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_smoke.py +0 -0
  174. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_status_parity.py +0 -0
  175. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_stdin.py +0 -0
  176. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_stdin_cli.py +0 -0
  177. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_store_bounds.py +0 -0
  178. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_store_nodes.py +0 -0
  179. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_store_publication.py +0 -0
  180. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_subprocess_stdin.py +0 -0
  181. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tombstone.py +0 -0
  182. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_binding.py +0 -0
  183. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_claimability.py +0 -0
  184. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_link.py +0 -0
  185. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_tracker_replay.py +0 -0
  186. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_unpushed_version_script.py +0 -0
  187. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_validate_target.py +0 -0
  188. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_work_autocommit.py +0 -0
  189. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_work_review.py +0 -0
  190. {tcw_cli-2.3.0 → tcw_cli-2.5.1}/tests/test_work_tags.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tcw-cli
3
- Version: 2.3.0
3
+ Version: 2.5.1
4
4
  Summary: Taxonomy · Capabilities · Work — a storage-abstracted framework for describing and evolving a software project.
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -292,8 +292,10 @@ by installing `tcw-cli` from PyPI with `pipx`, so one installed mid-session
292
292
  cannot run until the next one begins. That first session needs network access. It
293
293
  installs over an existing `pipx install tcw-cli` rather than beside it, and
294
294
  leaves a development checkout (`pip install -e .`) alone. If `tcw` goes missing
295
- anyway, `pipx install tcw-cli` is the whole fix — the **`tcw-setup`** skill
296
- carries the cases where it is not.
295
+ anyway, `pipx install tcw-cli` is the whole fix — the **`setup`** skill
296
+ carries the cases where it is not. When the `tcw` CLI and the plugin's skills
297
+ come from different releases, the session tells you which versions they are and
298
+ what to run to line them up; it never stops your work.
297
299
 
298
300
  In **Codex**:
299
301
 
@@ -302,8 +304,10 @@ codex plugin marketplace add brocef/TCW --ref main
302
304
  codex plugin add tcw@tcw
303
305
  ```
304
306
 
305
- Codex has no session-start hook, so ask the agent to run the **`tcw-setup`**
306
- skill — it runs the same install script Claude runs automatically.
307
+ Codex has no session-start hook, so ask the agent to run the **`setup`**
308
+ skill — it runs the same install script Claude runs automatically. Every tcw
309
+ skill also asks the agent to run the plugin's version check once per session,
310
+ which warns when the CLI and the skills come from different releases.
307
311
 
308
312
  The plugin ships the skills and read-only review agents described in
309
313
  [Skills and Agents](#skills-and-agents).
@@ -497,11 +501,11 @@ becomes your own `permission`.
497
501
 
498
502
  #### Skills
499
503
 
500
- | Skill | What it does |
501
- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
502
- | [`tcw-taxonomy`](skills/tcw-taxonomy/SKILL.md) | Guides an agent through declaring vocabulary and features, linking them, and resolving inherited entries. |
504
+ | Skill | What it does |
505
+ | -------------------------------------- | --------------------------------------------------------------------------------------------------------- |
506
+ | [`taxonomy`](skills/taxonomy/SKILL.md) | Guides an agent through declaring vocabulary and features, linking them, and resolving inherited entries. |
503
507
 
504
- To draft a first taxonomy from an existing codebase, use the `tcw-setup` skill
508
+ To draft a first taxonomy from an existing codebase, use the `setup` skill
505
509
  described in [Skills and Agents](#skills-and-agents).
506
510
 
507
511
  #### CLI
@@ -513,7 +517,7 @@ described in [Skills and Agents](#skills-and-agents).
513
517
  | `tcw taxonomy add` | creates a vocabulary entry or a feature |
514
518
  | `tcw taxonomy show` | prints one entry |
515
519
  | `tcw taxonomy path` | prints the folder the taxonomy is stored in |
516
- | `tcw taxonomy rm` | removes a local entry |
520
+ | `tcw taxonomy rm` | removes a local entry nothing is nested under or refers to |
517
521
  | `tcw taxonomy search` | searches entry names and descriptions |
518
522
  | `tcw taxonomy check` | checks that every reference and inherited project resolves |
519
523
  | `tcw taxonomy extends` | adds or removes a project whose taxonomy this one inherits |
@@ -558,9 +562,9 @@ registered in the taxonomy before a capability names it.
558
562
 
559
563
  #### Skills
560
564
 
561
- | Skill | What it does |
562
- | ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
563
- | [`tcw-capabilities`](skills/tcw-capabilities/SKILL.md) | Guides an agent through checking a planned change against the existing capabilities, catching contradictions, and updating a capability's status when work completes. |
565
+ | Skill | What it does |
566
+ | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
567
+ | [`capabilities`](skills/capabilities/SKILL.md) | Guides an agent through checking a planned change against the existing capabilities, catching contradictions, and updating a capability's status when work completes. |
564
568
 
565
569
  #### CLI
566
570
 
@@ -609,8 +613,8 @@ behavior, changes to its internals, or changes to how the project itself runs.
609
613
  - **Blockers** are recorded on an item (`tcw work edit --blocked-by`). An item
610
614
  with an unresolved blocker cannot start, or be completed as done, without
611
615
  `--force`; there is no separate "blocked" status.
612
- - **Large items split.** A child item lives inside its parent's folder and moves
613
- with it. An **epic** groups related items, including items in other
616
+ - **Large items split.** A child item has its own status and keeps a link to its
617
+ parent, which cannot be closed while the child is open. An **epic** groups related items, including items in other
614
618
  repositories, and reports their combined status.
615
619
  - **Completing is checked.** `tcw work complete` prints the project's Definition
616
620
  of Done (a list you set in `docs/work/dod.yaml`) and refuses until you confirm
@@ -695,7 +699,7 @@ The transitions, and what each one checks before it moves an item:
695
699
  | `start` | `tcw work start <slug>` | backlog → active | a blocker is unresolved; the item belongs to an epic that is not active |
696
700
  | `submit` | `tcw work submit <slug>` | active → review | never |
697
701
  | `rework` | `tcw work rework <slug>` | review → active | `refined-outcome.md` is present (it says the work was accepted) |
698
- | `complete` | `tcw work complete <slug> --resolution done --confirm` | review or active → completed | a blocker is unresolved; an epic has open children; declared capabilities are not reconciled; a worktree merge-back fails; no `--confirm` |
702
+ | `complete` | `tcw work complete <slug> --resolution done --confirm` | review or active → completed | a blocker is unresolved; an epic has open children; declared capabilities are not reconciled; a worktree merge-back fails; the item's folder in its worktree has uncommitted changes; no `--confirm` |
699
703
  | discard | `tcw work complete <slug> --resolution wontfix\|duplicate\|superseded --confirm` | backlog, active or review → discarded | no `--confirm` |
700
704
  | `drop` | `tcw work drop <slug> --confirm` | backlog → removed | the item is not in backlog; no `--confirm` |
701
705
  | not retained | happens during `complete` or discard | completed or discarded → removed | only happens when `work.retain` says that status is not kept; `tcw work delete` finishes one that was interrupted |
@@ -709,6 +713,11 @@ such as a design rule read at `spec` or `tcw validate` run before `complete`. Se
709
713
  [Configuration](docs/guide/configuration.md). `tcw work lifecycle` prints the
710
714
  whole contract, with whatever the project has attached.
711
715
 
716
+ Some of TCW's other instructions can be replaced the same way: how to work items
717
+ unattended, triage issues, keep documentation in sync, and seven more.
718
+ `tcw work procedure prompt <id>` prints one of them, and a project replaces or
719
+ adds to its text under `work.procedures` in `tcw-config.yaml`.
720
+
712
721
  #### Jira integration
713
722
 
714
723
  A project can name the Jira Cloud site its team works from. Tickets can then
@@ -718,18 +727,22 @@ to the transitions.
718
727
 
719
728
  | Lifecycle step | Without Jira | With Jira configured |
720
729
  | --------------------------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
721
- | an item is created | `tcw work inbox accept`, `new` | `tcw work tracker import <ticket>` claims the ticket (starts it and assigns it to you), then creates a backlog item whose intake is the ticket |
730
+ | an item is created | `tcw work inbox accept`, `new` | `tcw work tracker import <ticket>` claims the ticket (starts it and assigns it to you), then creates a backlog item whose intake is the ticket. With `inbox-query` set, `tcw work inbox accept <ticket>` does the same |
722
731
  | `request`, `spec`, `plan` stages | unchanged | unchanged |
723
732
  | at any time | — | `tcw work tracker link` / `unlink` records or removes the link between an existing item and a ticket; Jira itself is not touched |
733
+ | an item has no ticket | — | `tcw work tracker create <slug>` makes one for it and binds it; `--all` sweeps every open item without one. Needs `work.tracker.create` and `statuses.backlog`. With `create.on-new`, filing an item makes its ticket |
724
734
  | `start` | moves the item | also claims a linked ticket, and posts a comment if `comments: true` |
725
735
  | `submit`, `rework`, `complete`, discard | moves the item | also moves a linked ticket to the Jira status mapped under `statuses`, and posts a comment if `comments: true` |
726
736
  | the ticket could not follow | — | the item still moves; the command exits 1 and records the ticket as pending or conflicting; `tcw work tracker sync` retries |
737
+ | the ticket is behind its item | — | with `tcw work tracker link --sync-status`, a ticket linked to work already under way is claimed and moved forward to where the item is |
738
+ | the ticket does not match its item | — | `tcw work tracker sync <slug>` puts it where the item's status says, whether the ticket is ahead of the item or behind it; a backwards move says so |
727
739
 
728
740
  Setting `strict: true` changes several steps, so that no work happens without a
729
741
  claimed ticket:
730
742
 
731
- - `tcw work new` (except `--epic`) and `inbox accept` are refused, and point you at
732
- `tcw work tracker import`.
743
+ - `tcw work new` (except `--epic`) and `inbox accept` of an inbox entry are refused,
744
+ and point you at `tcw work tracker import`. Where `inbox-query` is set, `inbox accept`
745
+ of a ticket is allowed, because it claims the ticket.
733
746
  - `start` refuses an item with no ticket. For a linked item it claims the ticket
734
747
  first, and moves the item only if the claim worked.
735
748
  - `submit`, `rework` and `complete --resolution done` read the ticket first, and
@@ -750,10 +763,24 @@ work:
750
763
  credentials:
751
764
  email-env: TCW_JIRA_EMAIL
752
765
  token-env: TCW_JIRA_API_TOKEN
753
- transitions: { claim: Start Progress }
766
+ transitions: { start: Start Progress }
754
767
  statuses: { active: In Progress, review: In Review, completed: Done }
768
+ inbox-query: project = ENG AND status = Triage # optional
755
769
  ```
756
770
 
771
+ `candidate-query` selects the tickets ready for you to take, and `tcw work tracker
772
+ list` shows them. The optional `inbox-query` selects the tickets still waiting to be
773
+ triaged. When it is set, `tcw work inbox list` prints two sections, `raw intake:` and
774
+ `tracker tickets:`, so triage works from one list. `tcw work inbox show` and
775
+ `inbox accept` then take a ticket key as well as an inbox entry: an inbox entry with
776
+ the same name wins, and `--ticket` reads the name as a ticket anyway. Accepting a
777
+ ticket claims it, exactly as `tcw work tracker import` does. Write the query so it
778
+ leaves out tickets that already have a work item; TCW does not filter them. A
779
+ triage status does not offer the transition that starts work, so to take tickets
780
+ straight from it, name the status and its way out under `pre-backlog` (for example
781
+ `pre-backlog: { Triage: Accept }`, with `statuses.backlog` set): every claim then
782
+ moves the ticket out of Triage to the backlog first, and says so.
783
+
757
784
  The credentials entries hold the **names** of environment variables, never the
758
785
  e-mail address or token themselves.
759
786
 
@@ -777,7 +804,34 @@ tcw work tracker link <slug> ENG-517 # TCW: records the link.
777
804
  tcw work start <slug> # TCW: backlog → active. Jira: if unassigned or yours, ENG-517 → In Progress, assigned to you
778
805
  ```
779
806
 
780
- **Example 3: the same project with `strict: true`.**
807
+ **Example 2a: making a ticket for an item that has none.**
808
+
809
+ ```sh
810
+ tcw work new "Speed up the checkout page" # TCW: creates a backlog item. Jira: unchanged
811
+ tcw work tracker create <slug> --dry-run # TCW: says what it would do. Jira: unchanged
812
+ tcw work tracker create <slug> # TCW: binds the new ticket. Jira: creates it, then moves it to statuses.backlog
813
+ tcw work tracker create --all # TCW: the same for every open item. Jira: one new ticket per item without one
814
+ ```
815
+
816
+ The move out of whatever status Jira starts issues in is part of creating the
817
+ ticket, not a courtesy: in a project with a triage column, that starting status
818
+ is usually the one `inbox-query` selects, so a ticket left there would come back
819
+ through `tcw work inbox` as new inbound work. Run `--all` with `--dry-run`
820
+ first — nothing here can delete a ticket.
821
+
822
+ **Example 3: taking a ticket without starting it, and handing it back.**
823
+
824
+ ```sh
825
+ tcw work tracker claim <slug> # TCW: records you as the owner. Jira: ENG-517 assigned to you; status unchanged
826
+ # …you decide it is not yours after all…
827
+ tcw work tracker release <slug> # TCW: clears the owner. Jira: ENG-517 unassigned; status unchanged
828
+ ```
829
+
830
+ Neither command moves anything. Claiming an item already under way is how you
831
+ take work over; releasing one is how you hand it on, and it stays where it is
832
+ until somebody else claims it.
833
+
834
+ **Example 4: the same project with `strict: true`.**
781
835
 
782
836
  ```sh
783
837
  tcw work new "Speed up the checkout page"
@@ -795,11 +849,11 @@ reports, comments, and the known limits are in
795
849
 
796
850
  #### Skills
797
851
 
798
- | Skill | What it does |
799
- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
800
- | [`tcw-work`](skills/tcw-work/SKILL.md) | Guides an agent through the whole work lifecycle: triaging the inbox, writing the request, spec and plan, implementing, verifying, completing, splitting large items, and coordinating epics. |
801
- | [`tcw-post-mortem`](skills/tcw-post-mortem/SKILL.md) | Once a problem has surfaced (rejected work, a false claim in a spec, something shipped that should not have), finds which lifecycle stage could first have caught it. |
802
- | [`tcw-work-create`](skills/tcw-work-create/SKILL.md) | Turns an idea for a piece of work into a work item, or adds it to the item or inbox entry that already covers it, after checking what is already tracked. |
852
+ | Skill | What it does |
853
+ | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
854
+ | [`work`](skills/work/SKILL.md) | Guides an agent through the whole work lifecycle: triaging the inbox, writing the request, spec and plan, implementing, verifying, completing, splitting large items, and coordinating epics. |
855
+ | [`post-mortem`](skills/post-mortem/SKILL.md) | Once a problem has surfaced (rejected work, a false claim in a spec, something shipped that should not have), finds which lifecycle stage could first have caught it. |
856
+ | [`work-create`](skills/work-create/SKILL.md) | Turns an idea for a piece of work into a work item, or adds it to the item or inbox entry that already covers it, after checking what is already tracked. |
803
857
 
804
858
  Most day-to-day work starts from one of the command skills (planning an item,
805
859
  driving it to completion, verifying it, processing the inbox) described in
@@ -815,7 +869,7 @@ driving it to completion, verifying it, processing the inbox) described in
815
869
  | `tcw work list` | shows the board; completed and discarded items only when asked |
816
870
  | `tcw work show` | prints an item's status, fields and documents |
817
871
  | `tcw work path` | prints the work store's folder, or an item's folder |
818
- | `tcw work edit` | changes an item's title, estimates, tags or blockers |
872
+ | `tcw work edit` | changes an item's title, estimates, tags, blockers or type |
819
873
  | `tcw work tags` | lists, adds or removes the project's registered tags |
820
874
 
821
875
  **Transitions**
@@ -831,18 +885,19 @@ driving it to completion, verifying it, processing the inbox) described in
831
885
 
832
886
  **Lifecycle stages**
833
887
 
834
- | Command | What it does |
835
- | -------------------- | ----------------------------------------------------------------------------------------- |
836
- | `tcw work lifecycle` | prints every stage and transition, with what this project attaches to each |
837
- | `tcw work stage` | `stage gate` checks a stage may run; `stage prompt` prints its instructions |
838
- | `tcw work scaffold` | writes a draft of a stage's document from its template |
839
- | `tcw work docs` | prints the project's documentation entries: which documents a change must keep up to date |
888
+ | Command | What it does |
889
+ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
890
+ | `tcw work lifecycle` | prints every stage and transition, with what this project attaches to each |
891
+ | `tcw work stage` | `stage gate` checks a stage may run; `stage prompt` prints its instructions; `stage validate` checks the arguments given to the `work-stage` skill |
892
+ | `tcw work procedure` | `procedure prompt` prints one of TCW's procedures, such as `unattended-work` or `search`, with this project's own text for it |
893
+ | `tcw work scaffold` | writes a draft of a stage's document from its template |
894
+ | `tcw work docs` | prints the project's documentation entries: which documents a change must keep up to date |
840
895
 
841
896
  **Inbox, and work across projects**
842
897
 
843
898
  | Command | What it does |
844
899
  | -------------------- | ----------------------------------------------------------------- |
845
- | `tcw work inbox` | `inbox list`, `inbox show` and `inbox accept` raw requests |
900
+ | `tcw work inbox` | `inbox list`, `inbox show` and `inbox accept` raw requests, and Jira tickets awaiting triage |
846
901
  | `tcw work nodes` | lists this project's parent and child projects |
847
902
  | `tcw work delegate` | writes a request into a child project's inbox |
848
903
  | `tcw work escalate` | writes a request into the parent project's inbox |
@@ -852,7 +907,7 @@ driving it to completion, verifying it, processing the inbox) described in
852
907
 
853
908
  | Command | What it does |
854
909
  | -------------------- | ------------------------------------------------------------------------------------------------------------- |
855
- | `tcw work tracker` | `list`, `show`, `import`, `link`, `unlink` and `sync` against Jira; see [Jira integration](#jira-integration) |
910
+ | `tcw work tracker` | `list`, `show`, `import`, `claim`, `release`, `link`, `unlink` and `sync` against Jira; see [Jira integration](#jira-integration) |
856
911
  | `tcw work init` | creates the work store's folders (the same as `tcw init work`) |
857
912
  | `tcw work tombstone` | records items resolved before the store kept a record of them, so their slugs are never reused |
858
913
 
@@ -882,36 +937,37 @@ across the axes.
882
937
 
883
938
  | Skill | What it does |
884
939
  | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
885
- | [`tcw-setup`](skills/tcw-setup/SKILL.md) | Gets TCW working: installs or repairs the CLI, starts using TCW in a repository, sets up a project on a new machine, and drafts a first taxonomy or capabilities list from existing code. |
886
- | [`tcw-configure`](skills/tcw-configure/SKILL.md) | Changes a working project's configuration: what runs at each stage or transition, the Definition of Done, documentation entries, Jira, where stores live, connected and inherited projects. |
887
- | [`documentation-sync`](skills/documentation-sync/SKILL.md) | Decides which documents a finished change must update (README, changelogs, release notes, guides, skills), and offers a version bump when work is done. |
888
- | [`tcw-work-stage`](skills/tcw-work-stage/SKILL.md) | Reads one lifecycle stage in a single step: the stage's own instructions together with whatever this project adds to them. |
940
+ | [`setup`](skills/setup/SKILL.md) | Gets TCW working: installs or repairs the CLI, starts using TCW in a repository, sets up a project on a new machine, and drafts a first taxonomy or capabilities list from existing code. |
941
+ | [`configure`](skills/configure/SKILL.md) | Changes a working project's configuration: what runs at each stage or transition, the Definition of Done, documentation entries, Jira, where stores live, connected and inherited projects. |
942
+ | [`documentation-sync`](skills/documentation-sync/SKILL.md) | Decides which documents a finished change must update (README, changelogs, release notes, guides, skills), and runs the version cut when you ask for one. |
943
+ | [`work-stage`](skills/work-stage/SKILL.md) | Reads one lifecycle stage in a single step: the stage's own instructions together with whatever this project adds to them. |
889
944
 
890
945
  **Command skills: the everyday workflows**
891
946
 
892
- | Skill | What it does |
893
- | ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- |
894
- | [`tcw-commands-process-inbox`](skills/tcw-commands-process-inbox/SKILL.md) | Turns raw inbox entries into work items and writes each one's request. |
895
- | [`tcw-commands-plan-work`](skills/tcw-commands-plan-work/SKILL.md) | Takes an item, or a request made in chat, through the request, spec and plan stages, and stops before any code. |
896
- | [`tcw-commands-drive-work-to-completion`](skills/tcw-commands-drive-work-to-completion/SKILL.md) | Takes an item from wherever it is through implementation, and stops for your verification before completing it. |
897
- | [`tcw-commands-verify-work`](skills/tcw-commands-verify-work/SKILL.md) | Checks finished work against its spec with you, and records whether it was accepted or needs rework. |
947
+ | Skill | What it does |
948
+ | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
949
+ | [`commands-process-inbox`](skills/commands-process-inbox/SKILL.md) | Turns raw inbox entries into work items and writes each one's request. |
950
+ | [`commands-plan-work`](skills/commands-plan-work/SKILL.md) | Takes an item, or a request made in chat, through the request, spec and plan stages, and stops before any code. |
951
+ | [`commands-drive-work-to-completion`](skills/commands-drive-work-to-completion/SKILL.md) | Takes an item from wherever it is through implementation, and stops for your verification before completing it. |
952
+ | [`commands-verify-work`](skills/commands-verify-work/SKILL.md) | Checks finished work against its spec with you, and records whether it was accepted or needs rework. |
953
+ | [`commands-pause-work`](skills/commands-pause-work/SKILL.md) | Stops the work in hand, writes down what resuming needs in the item, and waits for you to say carry on. |
898
954
 
899
955
  **Extras: optional, built for one way of working**
900
956
 
901
957
  | Skill | What it does |
902
958
  | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
903
- | [`tcw-extras-autonomous-work`](skills/tcw-extras-autonomous-work/SKILL.md) | Drives work items to completion unattended, asking two read-only advisors wherever the lifecycle would ask you. |
904
- | [`tcw-extras-triage-issues`](skills/tcw-extras-triage-issues/SKILL.md) | Works through **your** project's GitHub issues and turns the ones worth doing into work items. |
905
- | [`tcw-extras-report`](skills/tcw-extras-report/SKILL.md) | Files a bug report or suggestion about TCW itself on [this project's issues](https://github.com/brocef/TCW/issues). |
959
+ | [`extras-autonomous-work`](skills/extras-autonomous-work/SKILL.md) | Drives work items to completion unattended, asking read-only advisors wherever the lifecycle would ask you — by default Codex and an Opus subagent, replaceable by your project. |
960
+ | [`extras-triage-issues`](skills/extras-triage-issues/SKILL.md) | Works through **your** project's GitHub issues and turns the ones worth doing into work items. |
961
+ | [`extras-report`](skills/extras-report/SKILL.md) | Files a bug report or suggestion about TCW itself on [this project's issues](https://github.com/brocef/TCW/issues). |
906
962
 
907
963
  **Agents.** Three read-only agents ship with the plugin. None of them edits a
908
964
  file or moves an item; each reports back to the session that started it.
909
965
 
910
966
  | Agent | What it does |
911
967
  | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
912
- | `tcw-verifier` | For the `verify` stage: reads the change against the item's spec, runs checks, and reports whether each acceptance criterion is met. |
913
- | `tcw-backlog-auditor` | Checks one backlog item for problems: already done, out of date, in the wrong project, not actionable, or blocked by something already resolved. |
914
- | `tcw-post-mortem` | Reads an item's documents and commit history backwards to find which stage could first have caught a problem. |
968
+ | `verifier` | For the `verify` stage: reads the change against the item's spec, runs checks, and reports whether each acceptance criterion is met. |
969
+ | `backlog-auditor` | Checks one backlog item against your project's backlog-audit procedure. By default: already done, out of date, in the wrong project, not actionable, or blocked by something already resolved. |
970
+ | `post-mortem` | Reads an item's documents and commit history backwards to find which stage could first have caught a problem. |
915
971
 
916
972
  ## TCW Local Web App
917
973
 
@@ -1046,7 +1102,7 @@ PyPI. Details, including the one-time PyPI setup, are in
1046
1102
 
1047
1103
  File bugs and suggestions on
1048
1104
  [GitHub issues](https://github.com/brocef/TCW/issues). With the plugin installed,
1049
- the `tcw-extras-report` skill gives you a ready-to-fill template.
1105
+ the `extras-report` skill gives you a ready-to-fill template.
1050
1106
 
1051
1107
  ### License
1052
1108